diff --git a/.env.localhost b/.env.localhost index c70595c1c42..5a6da11d7f0 100644 --- a/.env.localhost +++ b/.env.localhost @@ -5,7 +5,7 @@ APP_BASE="https://local.zinfra.io:8081" FORCED_CONFIG_URL="https://github.com/wireapp/wire-web-config-wire" -CSP_EXTRA_CONNECT_SRC="http://localhost:32123, ws://localhost:32123, https://*.zinfra.io, https://*.wire.link, https://*.wire.com, https://api.raygun.io, wss://*.zinfra.io, wss://*.wire.link, wss://prod-nginz-ssl.wire.com, https://wire.count.ly" +CSP_EXTRA_CONNECT_SRC="http://localhost:32123, ws://localhost:32123, https://*.zinfra.io, https://*.wire.link, https://*.wire.com, https://api.raygun.io, wss://*.zinfra.io, wss://*.wire.link, wss://prod-nginz-ssl.wire.com, https://wire.count.ly, https://balderdash.hogwash.work:9000, https://balderdash.hogwash.work:5556, https://accounts.google.com, https://oauth2.googleapis.com/token" CSP_EXTRA_IMG_SRC="https://*.zinfra.io, https://*.wire.com, https://*.wire.link" CSP_EXTRA_SCRIPT_SRC="http://localhost:32123, https://*.zinfra.io, https://*.wire.com, https://*.wire.link, https://api.raygun.io" ENFORCE_HTTPS="false" diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..cbc75624b91 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +## Description + +## Screenshots/Screencast (for UI changes) + +## Checklist + +- [ ] PR has been self reviewed by the author; +- [ ] Hard-to-understand areas of the code have been commented; +- [ ] If it is a core feature, unit tests have been added; + +### Important details for the reviewers + +(Delete this section if unnecessary) + +- use (x) data +- can be reviewed commit-by-commit +- be sure to look at ... diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e03c8b486f7..a8b98c626e3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -22,25 +22,13 @@ updates: open-pull-requests-limit: 99 labels: - 'type: chore 🧹' + groups: + eslint: + patterns: + - '*eslint*' + ignore: - - dependency-name: core-js - versions: - - '>= 3.a' - - dependency-name: webrtc-adapter - versions: - - '>= 7.a' - - dependency-name: 'less' - versions: - - '>= 4' - - dependency-name: 'husky' - versions: - - '>= 5.a' - - dependency-name: 'tsyringe' - versions: - - '> 4.3.0' - dependency-name: '@wireapp/avs' - - dependency-name: 'autoprefixer' - - dependency-name: 'cssnano' # Server dependencies - package-ecosystem: npm diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 986cda32513..e9f24785f9a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -20,7 +20,7 @@ jobs: language: ['javascript'] steps: - name: 'Checkout repository' - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: 'Initialize CodeQL' uses: github/codeql-action/init@v2 with: diff --git a/.github/workflows/create_docker_image.yml b/.github/workflows/create_docker_image.yml index b09466cb797..26c11f54dfe 100644 --- a/.github/workflows/create_docker_image.yml +++ b/.github/workflows/create_docker_image.yml @@ -1,24 +1,30 @@ -name: Create Docker image +name: Create Release Artifact on: workflow_dispatch: inputs: tag: - description: 'tagname for the Docker image' + description: 'tagname for the Artifact' required: true type: string + create_release: + description: 'Wether or not a release entry should be created on github' + required: false + default: true + type: boolean + concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: - test_build_deploy: + create_image: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -32,13 +38,32 @@ jobs: run: yarn --immutable - name: Test - run: yarn test --coverage --coverage-reporters=lcov --detectOpenHandles=false + run: | + set -o pipefail + yarn test --coverage --coverage-reporters=lcov --detectOpenHandles=false 2>&1 | tee ./unit-tests.log - name: Build run: yarn build:prod + - name: Set short sha + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + - name: Push Docker image env: DOCKER_PASSWORD: ${{secrets.WEBTEAM_QUAY_PASSWORD}} DOCKER_USERNAME: ${{secrets.WEBTEAM_QUAY_USERNAME}} - run: yarn docker '' "${{inputs.tag}}" + run: yarn docker "${{inputs.tag}}-${{ steps.vars.outputs.sha_short }}" + + - name: Create GitHub release + if: ${{inputs.create_release}} + id: create_release_production + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{github.token}} + with: + tag_name: ${{inputs.tag}} + name: ${{inputs.tag}} + files: ./unit-tests.log + draft: false + prerelease: true diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml index 1b2d307cdd7..83c72972ffd 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-merge.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Dependabot metadata id: metadata - uses: dependabot/fetch-metadata@v1.5.1 + uses: dependabot/fetch-metadata@v1.6.0 with: github-token: '${{secrets.WEBTEAM_AUTOMERGE_TOKEN}}' diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 34b14c395b9..a9b8d46d944 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -15,6 +15,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: 'Dependency Review' uses: actions/dependency-review-action@v3 diff --git a/.github/workflows/deploy-to-test-env.yml b/.github/workflows/deploy-to-test-env.yml index 11a9f31436b..405920a336a 100644 --- a/.github/workflows/deploy-to-test-env.yml +++ b/.github/workflows/deploy-to-test-env.yml @@ -9,7 +9,6 @@ on: type: choice options: - wire-webapp-qa-al2-migration - - wire-webapp-edge-al2 - wire-webapp-mls-al2 concurrency: @@ -32,7 +31,7 @@ jobs: echo -e "env = ${{inputs.env}}" - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/jira-lint-and-link.yml b/.github/workflows/jira-lint-and-link.yml index a977c8ab73f..06c40a2750e 100644 --- a/.github/workflows/jira-lint-and-link.yml +++ b/.github/workflows/jira-lint-and-link.yml @@ -6,7 +6,7 @@ jobs: add-jira-description: runs-on: ubuntu-latest steps: - - uses: cakeinpanic/jira-description-action@v0.4.0 + - uses: cakeinpanic/jira-description-action@v0.7.0 name: jira-description-action with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2def74ea705..96891a035ff 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v3 diff --git a/.github/workflows/semantic-commit-lint.yml b/.github/workflows/semantic-commit-lint.yml index 23cf0f074d8..fc4edfb9229 100644 --- a/.github/workflows/semantic-commit-lint.yml +++ b/.github/workflows/semantic-commit-lint.yml @@ -14,7 +14,7 @@ jobs: # Please look up the latest version from # https://github.com/amannn/action-semantic-pull-request/releases - name: Run Semantic Commint Linter - uses: amannn/action-semantic-pull-request@v5.2.0 + uses: amannn/action-semantic-pull-request@v5.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/sync_translations.yml b/.github/workflows/sync_translations.yml index a075511852b..df66e5fa8af 100644 --- a/.github/workflows/sync_translations.yml +++ b/.github/workflows/sync_translations.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v3 @@ -37,7 +37,7 @@ jobs: run: yarn translate:merge - name: Download translations - uses: crowdin/github-action@v1.11.0 + uses: crowdin/github-action@v1.13.1 env: GITHUB_TOKEN: ${{secrets.OTTO_THE_BOT_GH_TOKEN}} CROWDIN_PROJECT_ID: 342359 diff --git a/.github/workflows/test_build_deploy.yml b/.github/workflows/test_build_deploy.yml index 0071a08918d..3e6b9129967 100644 --- a/.github/workflows/test_build_deploy.yml +++ b/.github/workflows/test_build_deploy.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -93,11 +93,19 @@ jobs: key: '${{github.ref}}' map: | { - "edge": { "dev_env": "wire-webapp-edge-al2" }, "dev": { "dev_env": "wire-webapp-dev-al2" }, "master": { "dev_env": "wire-webapp-master-al2" } } + - uses: kanga333/variable-mapper@master + with: + # We try to map a branch to a dev environment + key: '${{github.ref}}' + map: | + { + "dev": { "preprod_env": "wire-webapp-edge-al2" } + } + - uses: kanga333/variable-mapper@master with: # We try to map a tag to a dev environment @@ -147,6 +155,22 @@ jobs: wait_for_deployment: false wait_for_environment_recovery: ${{env.DEPLOYMENT_RECOVERY_TIMEOUT_SECONDS}} + - name: Deploy to pre-prod env + if: env.preprod_env + uses: einaregilsson/beanstalk-deploy@v21 + with: + application_name: ${{env.AWS_APPLICATION_NAME}} + aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} + aws_secret_key: ${{secrets.WEBTEAM_AWS_SECRET_ACCESS_KEY}} + deployment_package: ${{env.AWS_BUILD_ZIP_PATH}} + environment_name: ${{env.preprod_env}} + region: eu-central-1 + use_existing_version_if_available: true + version_description: ${{github.sha}} + version_label: ${{github.run_id}} + wait_for_deployment: false + wait_for_environment_recovery: ${{env.DEPLOYMENT_RECOVERY_TIMEOUT_SECONDS}} + - name: Deploy to prod env if: env.prod_env uses: einaregilsson/beanstalk-deploy@v21 @@ -172,21 +196,21 @@ jobs: env: DOCKER_PASSWORD: ${{secrets.WEBTEAM_QUAY_PASSWORD}} DOCKER_USERNAME: ${{secrets.WEBTEAM_QUAY_USERNAME}} - run: yarn docker '' "${{env.BRANCH_NAME}}" + run: yarn docker "${{env.BRANCH_NAME}}" - name: Push staging Docker image if: contains(env.TAG, 'staging') env: DOCKER_PASSWORD: ${{secrets.WEBTEAM_QUAY_PASSWORD}} DOCKER_USERNAME: ${{secrets.WEBTEAM_QUAY_USERNAME}} - run: yarn docker '' staging "$TAG" + run: yarn docker staging "$TAG" - name: Push production Docker image if: contains(env.TAG, 'production') env: DOCKER_PASSWORD: ${{secrets.WEBTEAM_QUAY_PASSWORD}} DOCKER_USERNAME: ${{secrets.WEBTEAM_QUAY_USERNAME}} - run: yarn docker '' production "$TAG" + run: yarn docker production "$TAG" - name: Generate changelog for production release if: contains(env.TAG, 'production') @@ -287,7 +311,7 @@ jobs: echo "::set-output name=releaseInfo::$(cat ${ARTIFACT_LOCAL_PATH})" - name: Checking out 'wire-server' - uses: actions/checkout@v3 + uses: actions/checkout@v4 if: ${{ steps.release-info-file.outputs.exists == 'true' }} with: repository: 'wireapp/wire-server' diff --git a/.husky/pre-commit b/.husky/pre-commit index 2b09fbc86e7..dc0378c3488 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npx --no-install lint-staged && yarn check:circular-dependencies \ No newline at end of file +yarn lint-staged \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index eeceb1bcbcf..766e5d79580 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20-alpine +FROM node:21-alpine # For some extra dependencies... RUN apk add --no-cache dumb-init git bash diff --git a/README.md b/README.md index c00df646050..7742c544c13 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Wire™ -[![We are hiring](https://github.com/wireapp/wire/blob/master/assets/header-small.png?raw=true)](https://wire.softgarden.io/en/vacancies) +[![We are hiring](https://github.com/wireapp/wire/blob/master/assets/header-small.png?raw=true)](https://www.linkedin.com/company/wire-secure-communication/jobs/) This repository is part of the source code of Wire. You can find more information at [wire.com](https://wire.com) or by contacting opensource@wire.com. diff --git a/app-config/package.json b/app-config/package.json index e085a68407e..567b3e77a64 100644 --- a/app-config/package.json +++ b/app-config/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "wire-web-config-default-master": "https://github.com/wireapp/wire-web-config-wire#v0.31.16-0", - "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.31.15" + "wire-web-config-default-master": "https://github.com/wireapp/wire-web-config-wire#v0.31.19-0", + "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.31.18" } } diff --git a/bin/push_docker.js b/bin/push_docker.js index 3219881dccb..c30aceae769 100644 --- a/bin/push_docker.js +++ b/bin/push_docker.js @@ -33,25 +33,18 @@ require('dotenv').config(); * Note: You must run "yarn build:prod" before creating the Docker image, otherwise the compiled JavaScript code (and other assets) won't be part of the bundle. * * Demo execution: - * yarn docker '' staging '2021-08-25' '1240cfda9e609470cf1154e18f5bc582ca8907ff' + * yarn docker staging '2021-08-25' '1240cfda9e609470cf1154e18f5bc582ca8907ff' */ -/** Either empty (for our own cloud releases) or a suffix (i.e. "ey") for custom deployments */ -const distributionParam = process.argv[2] || ''; /** Either "staging" (for internal releases / staging bumps) or "production" (for cloud releases) */ -const stageParam = process.argv[3] || ''; +const stageParam = process.argv[2] || ''; /** Version tag of webapp (i.e. "2021-08-25") */ -const versionParam = process.argv[4] || ''; +const versionParam = process.argv[3] || ''; /** Commit ID of https://github.com/wireapp/wire-webapp (i.e. "1240cfda9e609470cf1154e18f5bc582ca8907ff") */ -const commitSha = process.env.GITHUB_SHA || process.argv[5]; +const commitSha = process.env.GITHUB_SHA || process.argv[4]; const commitShortSha = commitSha.substring(0, 7); -/** Defines which config version (listed in "app-config/package.json") is going to be used */ -const configurationEntry = `wire-web-config-default-${ - distributionParam || stageParam === 'production' ? 'master' : 'staging' -}`; -const configVersion = appConfigPkg.dependencies[configurationEntry].split('#')[1]; const dockerRegistryDomain = 'quay.io'; -const repository = `${dockerRegistryDomain}/wire/webapp${distributionParam ? `-${distributionParam}` : ''}`; +const repository = `${dockerRegistryDomain}/wire/webapp`; const tags = []; @@ -61,6 +54,9 @@ if (stageParam) { } if (['production', 'staging'].includes(stageParam)) { + /** Defines which config version (listed in "app-config/package.json") is going to be used */ + const configurationEntry = `wire-web-config-default-${stageParam === 'production' ? 'master' : 'staging'}`; + const configVersion = appConfigPkg.dependencies[configurationEntry].split('#')[1]; tags.push(`${repository}:${versionParam}-${configVersion}-${commitShortSha}`); } diff --git a/bin/translations_download.ts b/bin/translations_download.ts deleted file mode 100755 index b8a594e2e45..00000000000 --- a/bin/translations_download.ts +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env node - -/* - * Wire - * Copyright (C) 2020 Wire Swiss GmbH - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/. - * - */ - -import https from 'https'; -import * as path from 'path'; -import fs from 'fs-extra'; -import AdmZip from 'adm-zip'; - -const rootDir = path.resolve(__dirname, '..'); -const destinationPath = path.join(rootDir, 'src/i18n'); -const zipDir = path.join(rootDir, 'temp/i18n'); -const zipPath = path.join(zipDir, 'wire-webapp.zip'); - -// https://crowdin.com/project/wire-webapp/settings#api -const getProjectAuthentication = () => { - const crowdinYaml = path.join(rootDir, 'keys/crowdin.yaml'); - const crowdinYamlContent = fs.readFileSync(crowdinYaml, 'utf8'); - const keyRegex = /api_key: ["']?([0-9a-f]+)["']?/; - const usernameRegex = /username: ["']?(.+)["']?/; - return { - apiKey: (crowdinYamlContent.match(keyRegex) || [])[1], - username: (crowdinYamlContent.match(usernameRegex) || [])[1], - }; -}; - -const {apiKey: accountApiKey, username} = getProjectAuthentication(); - -// Crowdin API v1: https://support.crowdin.com/api/api-integration-setup/ -const CROWDIN_API = 'https://api.crowdin.com/api/project/wire-webapp'; - -const CROWDIN_URL = { - DOWNLOAD: `${CROWDIN_API}/download/all.zip?login=${username}&account-key=${accountApiKey}`, - EXPORT: `${CROWDIN_API}/export?login=${username}&account-key=${accountApiKey}&json`, -}; - -function fetchUpdates(): Promise { - console.info('Building translations ...'); - - return new Promise((resolve, reject) => { - https.get(CROWDIN_URL.EXPORT, response => { - if (!response.statusCode) { - return reject(new Error('Failed to export, no status code')); - } else if (response.statusCode < 200 || response.statusCode > 299) { - return reject(new Error(`Failed to export, status code: ${response.statusCode}`)); - } - response.on('data', () => resolve()); - response.on('error', error => reject(error)); - }); - }); -} - -async function download(): Promise { - console.info('Downloading built translations ...'); - - await fs.ensureDir(zipDir); - - await new Promise((resolve, reject) => { - https.get(CROWDIN_URL.DOWNLOAD, response => { - if (!response.statusCode) { - return reject(new Error('Failed to export, no status code')); - } else if (response.statusCode < 200 || response.statusCode > 299) { - return reject(new Error(`Failed to export, status code: ${response.statusCode}`)); - } - - response.on('error', reject); - - const writeStream = fs.createWriteStream(zipPath); - console.info('Writing zip file ...'); - - response.pipe(writeStream); - - writeStream.on('error', error => reject(error)); - - writeStream.on('finish', () => { - console.info('Extracting zip file ...'); - const zip = new AdmZip(zipPath); - zip.getEntries().forEach(entry => { - if (!entry.isDirectory) { - console.info(`Writing ${path.join(destinationPath, entry.name)} ...`); - zip.extractEntryTo(entry, destinationPath, false, true); - } - }); - console.info('Deleting zip file ...'); - fs.unlinkSync(zipPath); - resolve(); - }); - }); - }); -} - -fetchUpdates() - .then(download) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/package.json b/package.json index 26d8269490e..c6614763af9 100644 --- a/package.json +++ b/package.json @@ -1,173 +1,153 @@ { "dependencies": { - "@datadog/browser-logs": "^4.43.0", - "@datadog/browser-rum": "^4.43.0", + "@datadog/browser-logs": "^4.50.1", + "@datadog/browser-rum": "^4.50.1", "@emotion/react": "11.11.1", - "@types/eslint": "8.37.0", - "@wireapp/avs": "9.2.15", - "@wireapp/core": "40.6.0", + "@lexical/history": "0.12.2", + "@lexical/react": "0.12.2", + "@peculiar/x509": "1.9.5", + "@wireapp/avs": "9.5.2", + "@wireapp/commons": "5.2.1", + "@wireapp/core": "42.17.0", "@wireapp/lru-cache": "3.8.1", - "@wireapp/react-ui-kit": "9.7.5", - "@wireapp/store-engine-dexie": "2.1.1", + "@wireapp/react-ui-kit": "9.9.11", + "@wireapp/store-engine-dexie": "2.1.6", "@wireapp/store-engine-sqleet": "1.8.9", - "@wireapp/webapp-events": "0.17.0", + "@wireapp/webapp-events": "0.18.3", "amplify": "https://github.com/wireapp/amplify#head=master", - "beautiful-react-hooks": "^4.3.0", + "beautiful-react-hooks": "^5.0.0", "classnames": "2.3.2", "copy-webpack-plugin": "11.0.0", - "core-js": "3.25.5", - "countly-sdk-web": "23.2.2", + "core-js": "3.33.1", + "countly-sdk-web": "23.6.2", "date-fns": "2.30.0", "dexie-batch": "0.4.3", - "highlight.js": "11.8.0", - "http-status-codes": "2.2.0", - "jimp": "0.22.8", - "jquery": "3.7.0", - "js-cookie": "3.0.1", + "emoji-picker-react": "4.5.3", + "highlight.js": "11.9.0", + "http-status-codes": "2.3.0", + "jimp": "0.22.10", + "jquery": "3.7.1", + "js-cookie": "3.0.5", "jszip": "3.10.1", "keyboardjs": "2.7.0", "knockout": "3.5.1", - "libsodium-wrappers": "0.7.11", + "lexical": "0.12.2", + "libsodium-wrappers": "0.7.13", "linkify-it": "4.0.1", "long": "5.2.3", - "markdown-it": "13.0.1", + "markdown-it": "13.0.2", "murmurhash": "2.0.1", + "oidc-client-ts": "^2.2.5", "platform": "1.3.6", "react": "18.2.0", "react-dom": "18.2.0", - "react-error-boundary": "4.0.10", - "react-intl": "6.4.4", - "react-redux": "8.1.1", - "react-router": "6.14.0", - "react-router-dom": "6.14.0", + "react-error-boundary": "4.0.11", + "react-intl": "6.5.1", + "react-redux": "8.1.3", + "react-router": "6.17.0", + "react-router-dom": "6.17.0", "react-transition-group": "4.4.5", "redux": "4.2.1", "redux-logdown": "1.0.4", "redux-thunk": "2.4.2", "speakingurl": "14.0.1", "switch-path": "1.2.0", - "tsyringe": "4.7.0", - "uint32": "0.2.1", + "tsyringe": "4.8.0", "underscore": "1.13.6", "uuidjs": "4.2.13", - "webrtc-adapter": "6.4.8", - "zustand": "4.3.8" + "webrtc-adapter": "8.2.3", + "zustand": "4.4.4" }, "devDependencies": { - "@babel/core": "7.22.5", - "@babel/eslint-parser": "7.22.5", - "@babel/plugin-proposal-decorators": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/preset-react": "7.22.5", - "@babel/preset-typescript": "7.22.5", + "@babel/core": "7.23.2", + "@babel/eslint-parser": "7.22.15", + "@babel/plugin-proposal-decorators": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/preset-react": "7.22.15", + "@babel/preset-typescript": "7.23.2", "@emotion/eslint-plugin": "^11.11.0", - "@faker-js/faker": "7.6.0", - "@formatjs/cli": "6.1.3", + "@faker-js/faker": "8.1.0", + "@formatjs/cli": "6.2.1", "@koush/wrtc": "0.5.3", - "@testing-library/react": "13.4.0", - "@types/adm-zip": "0.5.0", - "@types/caniuse-lite": "^1.0.1", - "@types/classnames": "2.3.1", - "@types/dexie-batch": "0.4.3", - "@types/fs-extra": "11.0.1", - "@types/generate-changelog": "1.8.1", - "@types/highlight.js": "10.1.0", - "@types/jest": "29.5.2", + "@testing-library/react": "14.0.0", + "@types/adm-zip": "0.5.2", + "@types/dexie-batch": "0.4.6", + "@types/eslint": "^8", + "@types/fs-extra": "11.0.3", + "@types/generate-changelog": "1.8.2", + "@types/jest": "29.5.6", "@types/jquery": "^3", - "@types/js-cookie": "3.0.3", - "@types/jsdom": "21.1.1", - "@types/keyboardjs": "2.5.1", + "@types/js-cookie": "3.0.5", + "@types/jsdom": "21.1.4", + "@types/keyboardjs": "2.5.2", "@types/libsodium-wrappers": "^0", - "@types/linkify-it": "3.0.2", - "@types/markdown-it": "12.2.3", - "@types/node": "^18.16.3", - "@types/open-graph": "0.2.2", - "@types/platform": "1.3.4", - "@types/prettier": "^2.7.3", - "@types/react": "18.0.28", - "@types/react-dom": "18.2.6", - "@types/react-redux": "7.1.25", - "@types/react-transition-group": "4.4.6", - "@types/redux-mock-store": "1.0.3", + "@types/linkify-it": "3.0.4", + "@types/loadable__component": "^5", + "@types/markdown-it": "13.0.4", + "@types/node": "^20.8.7", + "@types/open-graph": "0.2.4", + "@types/platform": "1.3.5", + "@types/react": "18.2.28", + "@types/react-dom": "18.2.14", + "@types/react-redux": "7.1.28", + "@types/react-transition-group": "4.4.8", + "@types/redux-mock-store": "1.0.5", "@types/seedrandom": "^3", - "@types/sinon": "10.0.15", - "@types/speakingurl": "13.0.3", - "@types/uint32": "0.2.0", - "@types/underscore": "1.11.5", - "@types/webpack-env": "1.18.1", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", - "@wireapp/copy-config": "2.1.1", - "@wireapp/eslint-config": "2.2.2", - "@wireapp/prettier-config": "0.6.0", - "@wireapp/store-engine": "^5.1.1", + "@types/sinon": "10.0.19", + "@types/speakingurl": "13.0.5", + "@types/underscore": "1.11.12", + "@types/webpack-env": "1.18.3", + "@wireapp/copy-config": "2.1.9", + "@wireapp/eslint-config": "3.0.4", + "@wireapp/prettier-config": "0.6.3", + "@wireapp/store-engine": "^5.1.4", "adm-zip": "0.5.10", - "archiver": "^5.3.1", - "autoprefixer": "^10.4.13", - "babel-loader": "9.1.2", - "babel-plugin-transform-import-meta": "^2.2.0", - "caniuse-lite": "^1.0.30001507", + "archiver": "^6.0.1", + "autoprefixer": "^10.4.16", + "babel-loader": "9.1.3", + "babel-plugin-transform-import-meta": "^2.2.1", "cross-env": "7.0.3", - "cspell": "6.31.1", + "cspell": "7.3.8", "css-loader": "^6.8.1", - "cssnano": "^5.1.14", - "dexie": "3.2.3", + "cssnano": "6.0.1", + "dexie": "3.2.4", "dotenv": "16.3.1", - "dpdm": "3.13.1", - "eslint": "^8.41.0", - "eslint-config-prettier": "^8.8.0", - "eslint-import-resolver-alias": "^1.1.2", - "eslint-import-resolver-typescript": "^3.5.5", - "eslint-plugin-babel": "5.3.1", - "eslint-plugin-better-styled-components": "^1.1.2", - "eslint-plugin-header": "^3.1.1", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jest": "^27.2.2", - "eslint-plugin-jest-dom": "^4.0.3", - "eslint-plugin-jsdoc": "^39.8.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-no-unsanitized": "^4.0.2", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^8.0.0", - "eslint-plugin-sort-keys-fix": "1.1.2", - "eslint-plugin-testing-library": "^5.11.0", - "eslint-plugin-typescript-sort-keys": "2.3.0", - "eslint-plugin-unused-imports": "^2.0.0", - "fake-indexeddb": "4.0.1", + "dpdm": "3.14.0", + "eslint": "^8.52.0", + "eslint-plugin-prettier": "^5.0.1", + "fake-indexeddb": "4.0.2", "generate-changelog": "1.8.0", "html-webpack-plugin": "^5.5.3", - "husky": "7.0.4", - "i18next-scanner": "4.2.0", + "husky": "8.0.3", + "i18next-scanner": "4.4.0", "intersection-observer": "0.12.2", - "jest": "29.5.0", - "jest-canvas-mock": "2.5.1", - "jest-environment-jsdom": "29.5.0", - "jest-jasmine2": "29.5.0", + "jest": "29.7.0", + "jest-canvas-mock": "2.5.2", + "jest-environment-jsdom": "29.7.0", + "jest-jasmine2": "29.7.0", "jsdom-worker": "0.3.0", - "less": "3.13.1", + "less": "4.2.0", "less-loader": "^11.1.3", - "lint-staged": "13.2.2", - "node-fetch": "2.6.11", + "lint-staged": "15.0.1", + "node-fetch": "2.7.0", "os-browserify": "0.3.0", "path-browserify": "1.0.1", - "postcss": "8.4.24", + "postcss": "8.4.31", "postcss-import": "^15.1.0", "postcss-less": "6.0.0", "postcss-loader": "^7.3.3", - "postcss-preset-env": "^8.5.1", - "postcss-scss": "4.0.6", - "prettier": "^2.8.8", + "postcss-preset-env": "^9.2.0", + "postcss-scss": "4.0.9", + "prettier": "^3.0.3", "raf": "3.4.1", "redux-devtools-extension": "2.13.9", "redux-mock-store": "1.5.4", "seedrandom": "^3.0.5", - "simple-git": "3.19.0", - "sinon": "15.2.0", + "simple-git": "3.20.0", + "sinon": "16.1.0", "snabbdom": "3.5.1", "style-loader": "^3.3.3", - "stylelint": "14.16.1", + "stylelint": "^15", "stylelint-config-idiomatic-order": "9.0.0", "stylelint-config-prettier": "9.0.5", "svg-inline-loader": "0.8.2", @@ -175,12 +155,12 @@ "text-encoding": "0.7.0", "ts-node": "10.9.1", "tsc-watch": "6.0.4", - "typescript": "5.0.4", - "webpack": "5.88.0", + "typescript": "5.2.2", + "webpack": "5.89.0", "webpack-cli": "5.1.4", "webpack-dev-middleware": "6.1.1", "webpack-hot-middleware": "2.25.4", - "workbox-webpack-plugin": "6.6.1" + "workbox-webpack-plugin": "7.0.0" }, "engines": { "yarn": ">= 1.0.0", @@ -237,9 +217,7 @@ "test:server": "cd server && yarn test", "test:types": "tsc --project tsconfig.build.json --noEmit && cd server && tsc --noEmit", "translate:extract": "i18next-scanner 'src/{page,script}/**/*.{js,html,htm}'", - "translate:merge": "formatjs extract --format './bin/translations_extract_formatter.js' --out-file './src/i18n/en-US.json' './src/script/strings.ts'", - "translate:upload": "yarn translate:merge && ts-node ./bin/translations_upload.ts", - "translate:download": "ts-node ./bin/translations_download.ts" + "translate:merge": "formatjs extract --format './bin/translations_extract_formatter.js' --out-file './src/i18n/en-US.json' './src/script/strings.ts'" }, "resolutions": { "libsodium": "0.7.10", diff --git a/server/Server.ts b/server/Server.ts index 9a9257a92de..472ab5b71c0 100644 --- a/server/Server.ts +++ b/server/Server.ts @@ -38,12 +38,16 @@ import {GoogleWebmasterRoute} from './routes/googlewebmaster/GoogleWebmasterRout import {RedirectRoutes} from './routes/RedirectRoutes'; import {Root} from './routes/Root'; import * as BrowserUtil from './util/BrowserUtil'; +import {replaceHostnameInObject} from './util/hostnameReplacer'; class Server { private readonly app: express.Express; private server?: http.Server | https.Server; - constructor(private readonly config: ServerConfig, private readonly clientConfig: ClientConfig) { + constructor( + private readonly config: ServerConfig, + private readonly clientConfig: ClientConfig, + ) { if (this.config.DEVELOPMENT) { console.info(this.config); } else if (!this.config.APP_BASE.startsWith('https')) { @@ -66,7 +70,7 @@ class Server { this.initSiteMap(this.config); this.app.use(Root()); this.app.use(HealthCheckRoute()); - this.app.use(ConfigRoute(this.clientConfig)); + this.app.use(ConfigRoute(this.config, this.clientConfig)); this.app.use(GoogleWebmasterRoute(this.config)); this.app.use(AppleAssociationRoute()); this.app.use(NotFoundRoute()); @@ -133,12 +137,14 @@ class Server { preload: true, }), ); - this.app.use( + this.app.use((req, res, next) => { helmet.contentSecurityPolicy({ - directives: this.config.CSP, + directives: this.config.ENABLE_DYNAMIC_HOSTNAME + ? replaceHostnameInObject(this.config.CSP, req) + : this.config.CSP, reportOnly: false, - }), - ); + })(req, res, next); + }); this.app.use( helmet.referrerPolicy({ policy: 'same-origin', diff --git a/server/config/client.config.ts b/server/config/client.config.ts index 4b927ba6d90..20da1143ccd 100644 --- a/server/config/client.config.ts +++ b/server/config/client.config.ts @@ -49,22 +49,29 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { ENABLE_ACCOUNT_REGISTRATION_ACCEPT_TERMS_AND_PRIVACY_POLICY: env.FEATURE_ENABLE_ACCOUNT_REGISTRATION_ACCEPT_TERMS_AND_PRIVACY_POLICY == 'true', ENABLE_DEBUG: env.FEATURE_ENABLE_DEBUG == 'true', + ENABLE_PING_CONFIRMATION: env.FEATURE_ENABLE_PING_CONFIRMATION == 'true', ENABLE_DOMAIN_DISCOVERY: env.FEATURE_ENABLE_DOMAIN_DISCOVERY != 'false', ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY: env.FEATURE_ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY == 'true', ENABLE_EXTRA_CLIENT_ENTROPY: env.FEATURE_ENABLE_EXTRA_CLIENT_ENTROPY == 'true', ENABLE_MEDIA_EMBEDS: env.FEATURE_ENABLE_MEDIA_EMBEDS != 'false', ENABLE_MLS: env.FEATURE_ENABLE_MLS == 'true', + ENABLE_E2EI: env.FEATURE_ENABLE_MLS == 'true' && env.FEATURE_ENABLE_E2EI == 'true', ENABLE_PHONE_LOGIN: env.FEATURE_ENABLE_PHONE_LOGIN != 'false', ENABLE_PROTEUS_CORE_CRYPTO: env.FEATURE_ENABLE_PROTEUS_CORE_CRYPTO == 'true', ENABLE_SSO: env.FEATURE_ENABLE_SSO == 'true', ENFORCE_CONSTANT_BITRATE: env.FEATURE_ENFORCE_CONSTANT_BITRATE == 'true', FORCE_EXTRA_CLIENT_ENTROPY: env.FEATURE_FORCE_EXTRA_CLIENT_ENTROPY == 'true', - MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD: - env.FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD && - Number(env.FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD), + MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD: env.FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD + ? Number(env.FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD) + : undefined, + MLS_CONFIG_DEFAULT_CIPHERSUITE: env.FEATURE_MLS_CONFIG_DEFAULT_CIPHERSUITE + ? Number(env.FEATURE_MLS_CONFIG_DEFAULT_CIPHERSUITE) + : undefined, PERSIST_TEMPORARY_CLIENTS: env.FEATURE_PERSIST_TEMPORARY_CLIENTS != 'false', SHOW_LOADING_INFORMATION: env.FEATURE_SHOW_LOADING_INFORMATION == 'true', USE_CORE_CRYPTO: env.FEATURE_USE_CORE_CRYPTO == 'true', + MAX_USERS_TO_PING_WITHOUT_ALERT: + (env.FEATURE_MAX_USERS_TO_PING_WITHOUT_ALERT && Number(env.FEATURE_MAX_USERS_TO_PING_WITHOUT_ALERT)) || 3, }, MAX_GROUP_PARTICIPANTS: (env.MAX_GROUP_PARTICIPANTS && Number(env.MAX_GROUP_PARTICIPANTS)) || 500, MAX_VIDEO_PARTICIPANTS: (env.MAX_VIDEO_PARTICIPANTS && Number(env.MAX_VIDEO_PARTICIPANTS)) || 4, @@ -89,7 +96,10 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { PRIVACY_VERIFY_FINGERPRINT: env.URL_SUPPORT_PRIVACY_VERIFY_FINGERPRINT, SCREEN_ACCESS_DENIED: env.URL_SUPPORT_SCREEN_ACCESS_DENIED, LEARN_MORE_ABOUT_GUEST_LINKS: env.URL_LEARN_MORE_ABOUT_GUEST_LINKS, + NON_FEDERATING_INFO: env.URL_SUPPORT_NON_FEDERATING_INFO, + OAUTH_LEARN_MORE: env.URL_SUPPORT_OAUTH_LEARN_MORE, OFFLINE_BACKEND: env.URL_SUPPORT_OFFLINE_BACKEND, + FEDERATION_STOP: env.URL_SUPPORT_FEDERATION_STOP, }, TEAMS_BASE: env.URL_TEAMS_BASE, TEAMS_CREATE: env.URL_TEAMS_CREATE, diff --git a/server/config/env.ts b/server/config/env.ts index 2c03a707388..c7eca3235b4 100644 --- a/server/config/env.ts +++ b/server/config/env.ts @@ -61,6 +61,9 @@ export type Env = { /** Specifies the name of the brand, e.g. Wire */ BRAND_NAME: string; + /** enables replacing all occurences of {{hostname}} in the urls given to the frontend by the hostname of the client*/ + ENABLE_DYNAMIC_HOSTNAME?: string; + /** Allows a client to use a development version of the api (if present) */ ENABLE_DEV_BACKEND_API?: string; @@ -77,10 +80,15 @@ export type Env = { /** will enable the MLS protocol */ FEATURE_ENABLE_MLS?: string; + /** will enable the E2E-Identification protocol, needs active FEATURE_ENABLE_MLS to work */ + FEATURE_ENABLE_E2EI?: string; + FEATURE_USE_CORE_CRYPTO?: string; FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD?: string; + FEATURE_MLS_CONFIG_DEFAULT_CIPHERSUITE?: string; + FEATURE_ENABLE_PROTEUS_CORE_CRYPTO?: string; FEATURE_FORCE_EXTRA_CLIENT_ENTROPY?: string; @@ -102,6 +110,15 @@ export type Env = { /** Feature toggle for debug utils. Can be set to true or false */ FEATURE_ENABLE_DEBUG: string; + /** Feature to open a confirm modal before pinging large groups */ + FEATURE_ENABLE_PING_CONFIRMATION: string; + + /** + * Minimum amount of users required in a conversation to open confirm modal for ping + * Must be used with FEATURE_ENABLE_PING_CONFIRMATION + */ + FEATURE_MAX_USERS_TO_PING_WITHOUT_ALERT: string; + /** Feature toggle for domain discovery. Can be set to true or false */ FEATURE_ENABLE_DOMAIN_DISCOVERY: string; @@ -231,8 +248,14 @@ export type Env = { URL_LEARN_MORE_ABOUT_GUEST_LINKS: string; + URL_SUPPORT_NON_FEDERATING_INFO: string; + + URL_SUPPORT_OAUTH_LEARN_MORE: string; + URL_SUPPORT_OFFLINE_BACKEND: string; + URL_SUPPORT_FEDERATION_STOP: string; + URL_WHATS_NEW: string; /** Content Security Policy diff --git a/server/config/server.config.ts b/server/config/server.config.ts index 1fc9f88c2ca..1bda4a7bf7a 100644 --- a/server/config/server.config.ts +++ b/server/config/server.config.ts @@ -107,6 +107,7 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { IMAGE_URL: env.OPEN_GRAPH_IMAGE_URL, TITLE: env.OPEN_GRAPH_TITLE, }, + ENABLE_DYNAMIC_HOSTNAME: env.ENABLE_DYNAMIC_HOSTNAME === 'true', PORT_HTTP: Number(env.PORT) || 21080, ROBOTS: { ALLOW: readFile(ROBOTS_ALLOW_FILE, 'User-agent: *\r\nDisallow: /'), diff --git a/server/package.json b/server/package.json index dd384894522..63ffac1379e 100644 --- a/server/package.json +++ b/server/package.json @@ -4,7 +4,7 @@ "main": "dist/index.js", "license": "GPL-3.0", "dependencies": { - "@wireapp/commons": "5.1.0", + "@wireapp/commons": "5.2.1", "dotenv": "16.3.1", "dotenv-extended": "2.9.0", "express": "4.18.2", @@ -13,26 +13,26 @@ "fs-extra": "11.1.1", "geolite2": "1.3.0", "hbs": "4.2.0", - "helmet": "6.1.5", - "http-status-codes": "2.2.0", + "helmet": "7.0.0", + "http-status-codes": "2.3.0", "logdown": "3.3.1", - "maxmind": "4.3.9", - "nocache": "3.0.4", + "maxmind": "4.3.10", + "nocache": "4.0.0", "opn": "6.0.0", "pm2": "5.3.0" }, "devDependencies": { - "@types/express": "4.17.17", - "@types/express-sitemap-xml": "3.0.1", - "@types/express-useragent": "1.0.2", - "@types/fs-extra": "11.0.1", + "@types/express": "4.17.19", + "@types/express-sitemap-xml": "3.0.3", + "@types/express-useragent": "1.0.4", + "@types/fs-extra": "11.0.3", "@types/geolite2": "2.0.0", - "@types/hbs": "4.0.1", - "@types/jest": "^29.5.2", + "@types/hbs": "4.0.3", + "@types/jest": "^29.5.6", "@types/node": "18.11.18", - "jest": "29.5.0", + "jest": "29.7.0", "rimraf": "4.4.1", - "typescript": "5.1.3" + "typescript": "5.2.2" }, "scripts": { "build": "yarn clean && tsc && yarn generate-version-file && yarn copy-assets", diff --git a/server/routes/RedirectRoutes.ts b/server/routes/RedirectRoutes.ts index 84e3d2596a3..0137f2982f2 100644 --- a/server/routes/RedirectRoutes.ts +++ b/server/routes/RedirectRoutes.ts @@ -60,4 +60,18 @@ export const RedirectRoutes = (config: ServerConfig, clientConfig: ClientConfig) router.get('/version/?', (_req, res) => { return res.json({version: config.VERSION}); }), + /** + * This route is used by the OIDC Provider to redirect the user back to the client. + * The OIDC Provider will redirect the user to this route with a query string containing the necessary information for the client to complete the authentication. + */ + router.get('/oidc?', (_req, res) => { + const {query} = _req; + const queryString = Object.keys(query) + .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(query[key] as string)}`) + .join('&'); + return res.redirect( + HTTP_STATUS.MOVED_TEMPORARILY, + `/auth/?${queryString ? queryString : 'no_query=true'}#/e2ei-redirect`, + ); + }), ]; diff --git a/server/routes/config/ConfigRoute.ts b/server/routes/config/ConfigRoute.ts index 0b330630e7b..710526fed73 100644 --- a/server/routes/config/ConfigRoute.ts +++ b/server/routes/config/ConfigRoute.ts @@ -19,10 +19,15 @@ import {Router} from 'express'; -import {ClientConfig} from '../../config'; +import {ClientConfig, ServerConfig} from '../../config'; +import {replaceHostname} from '../../util/hostnameReplacer'; -export const ConfigRoute = (config: ClientConfig) => - Router().get('/config.js', (_, res) => { - const payload = `window.wire = window.wire || {}; window.wire.env = ${JSON.stringify(config)};`; +export const ConfigRoute = (serverConfig: ServerConfig, clientConfig: ClientConfig) => + Router().get('/config.js', (request, res) => { + const serializedConfig = `window.wire = window.wire || {}; window.wire.env = ${JSON.stringify(clientConfig)};`; + const payload = serverConfig.ENABLE_DYNAMIC_HOSTNAME + ? // In case we want URLs that depends on the the hostname, we need to replace the placeholder with the actual hostname. + replaceHostname(serializedConfig, request) + : serializedConfig; res.type('application/javascript').send(payload); }); diff --git a/server/tsconfig.json b/server/tsconfig.json index 80ea7127d18..c29deee8dd4 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -5,7 +5,7 @@ "module": "commonjs", "outDir": "dist", "removeComments": true, - "lib": ["esnext", "dom"], + "lib": ["esnext"], "downlevelIteration": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", diff --git a/server/util/BrowserUtil.ts b/server/util/BrowserUtil.ts index 185b65c0ff1..fc05e8b6158 100644 --- a/server/util/BrowserUtil.ts +++ b/server/util/BrowserUtil.ts @@ -146,15 +146,20 @@ function isSupportedBrowser(userAgent: string): boolean { if (!parsedUserAgent) { return false; } - const invalidBrowser = parsedUserAgent.is.mobile || parsedUserAgent.is.franz; + const invalidBrowser = parsedUserAgent.is.franz; if (invalidBrowser) { return false; } const browserName = parsedUserAgent.browser.name.toLowerCase(); const supportedBrowserVersionObject = CommonConfig.WEBAPP_SUPPORTED_BROWSERS[browserName]; const supportedBrowserVersion = supportedBrowserVersionObject?.major; + const isSupportedMobile = + [CommonConfig.BROWSER.SAFARI, CommonConfig.BROWSER.CHROME].includes(browserName) && parsedUserAgent.is.mobile; try { + if (isSupportedMobile) { + return true; + } const browserVersionString = (parsedUserAgent.browser.version.split('.') || [])[0]; const browserVersion = parseInt(browserVersionString, 10); return supportedBrowserVersion ? browserVersion >= supportedBrowserVersion : false; diff --git a/src/script/error/ConnectionError.ts b/server/util/hostnameReplacer.ts similarity index 63% rename from src/script/error/ConnectionError.ts rename to server/util/hostnameReplacer.ts index 615bba71b34..cfe667ef8e2 100644 --- a/src/script/error/ConnectionError.ts +++ b/server/util/hostnameReplacer.ts @@ -1,6 +1,6 @@ /* * Wire - * Copyright (C) 2018 Wire Swiss GmbH + * Copyright (C) 2023 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,18 +17,12 @@ * */ -import {BaseError, BASE_ERROR_TYPE} from './BaseError'; +import {Request} from 'express'; -export class ConnectionError extends BaseError { - constructor(type: BASE_ERROR_TYPE | string, message: string) { - super(type, message); - } - - static get MESSAGE(): Record { - return {}; - } +export function replaceHostname(template: string, request: Request): string { + return template.replaceAll('[[hostname]]', request.hostname.replace('webapp.', '')); +} - static get TYPE(): Record { - return {}; - } +export function replaceHostnameInObject(object: T, request: Request): T { + return JSON.parse(replaceHostname(JSON.stringify(object), request)); } diff --git a/server/yarn.lock b/server/yarn.lock index 68639553f86..0d20d50b06e 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -5,206 +5,205 @@ __metadata: version: 6 cacheKey: 8 -"@ampproject/remapping@npm:^2.1.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" dependencies: - "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/gen-mapping": ^0.3.0 "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" dependencies: - "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5": - version: 7.20.14 - resolution: "@babel/compat-data@npm:7.20.14" - checksum: 6c9efe36232094e4ad0b70d165587f21ca718e5d011f7a52a77a18502a7524e90e2855aa5a2e086395bcfd21bd2c7c99128dcd8d9fdffe94316b72acf5c66f2c +"@babel/compat-data@npm:^7.22.9": + version: 7.23.2 + resolution: "@babel/compat-data@npm:7.23.2" + checksum: d8dc27437d40907b271161d4c88ffe72ccecb034c730deb1960a417b59a14d7c5ebca8cd80dd458a01cd396a7a329eb48cddcc3791b5a84da33d7f278f7bec6a languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.20.12 - resolution: "@babel/core@npm:7.20.12" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helpers": ^7.20.7 - "@babel/parser": ^7.20.7 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.12 - "@babel/types": ^7.20.7 - convert-source-map: ^1.7.0 + version: 7.23.2 + resolution: "@babel/core@npm:7.23.2" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.2 + "@babel/parser": ^7.23.0 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.2 + "@babel/types": ^7.23.0 + convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 003897718ded16f3b75632d63cd49486bf67ff206cc7ebd1a10d49e2456f8d45740910d5ec7e42e3faf0deec7a2e96b1a02e766d19a67a8309053f0d4e57c0fe languageName: node linkType: hard -"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": - version: 7.20.14 - resolution: "@babel/generator@npm:7.20.14" +"@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" dependencies: - "@babel/types": ^7.20.7 + "@babel/types": ^7.23.0 "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 5f6aa2d86af26e76d276923a5c34191124a119b16ee9ccc34aef654a7dec84fbd7d2daed2e6458a6a06bf87f3661deb77c9fea59b8f67faff5c90793c96d76d6 + checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-compilation-targets@npm:7.20.7" +"@babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.21.3 + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 lru-cache: ^5.1.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + semver: ^6.3.1 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-environment-visitor@npm:7.18.9" - checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-hoist-variables@npm:7.18.6" +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" dependencies: - "@babel/types": ^7.18.6 - checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" +"@babel/helper-module-imports@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: - "@babel/types": ^7.18.6 - checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + "@babel/types": ^7.22.15 + checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.20.11": - version: 7.20.11 - resolution: "@babel/helper-module-transforms@npm:7.20.11" +"@babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.10 - "@babel/types": ^7.20.7 - checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.20.2 - resolution: "@babel/helper-plugin-utils@npm:7.20.2" - checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-simple-access@npm:7.20.2" +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" dependencies: - "@babel/types": ^7.20.2 - checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-split-export-declaration@npm:7.18.6" +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" dependencies: - "@babel/types": ^7.18.6 - checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d languageName: node linkType: hard -"@babel/helpers@npm:^7.20.7": - version: 7.20.13 - resolution: "@babel/helpers@npm:7.20.13" +"@babel/helpers@npm:^7.23.2": + version: 7.23.2 + resolution: "@babel/helpers@npm:7.23.2" dependencies: - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.13 - "@babel/types": ^7.20.7 - checksum: d62076fa834f342798f8c3fd7aec0870cc1725d273d99e540cbaa8d6c3ed10258228dd14601c8e66bfeabbb9424c3b31090ecc467fe855f7bd72c4734df7fb09 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.2 + "@babel/types": ^7.23.0 + checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e languageName: node linkType: hard -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - chalk: ^2.0.0 + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.13, @babel/parser@npm:^7.20.7": - version: 7.20.13 - resolution: "@babel/parser@npm:7.20.13" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" bin: parser: ./bin/babel-parser.js - checksum: 7eb2e3d9d9ad5e24b087c88d137f5701d94f049e28b9dce9f3f5c6d4d9b06a0d7c43b9106f1c02df8a204226200e0517de4bc81a339768a4ebd4c59107ea93a4 + checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 languageName: node linkType: hard @@ -264,13 +263,13 @@ __metadata: linkType: hard "@babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.18.6 - resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce languageName: node linkType: hard @@ -352,53 +351,53 @@ __metadata: linkType: hard "@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.20.0 - resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": - version: 7.20.7 - resolution: "@babel/template@npm:7.20.7" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd languageName: node linkType: hard -"@babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.13, @babel/traverse@npm:^7.7.2": - version: 7.20.13 - resolution: "@babel/traverse@npm:7.20.13" +"@babel/traverse@npm:^7.23.2": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.13 - "@babel/types": ^7.20.7 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: 30ca6e0bd18233fda48fa09315efd14dfc61dcf5b8fa3712b343bfc61b32bc63b5e85ea1773cc9576c9b293b96f46b4589aaeb0a52e1f3eeac4edc076d049fc7 + checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": - version: 7.20.7 - resolution: "@babel/types@npm:7.20.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 to-fast-properties: ^2.0.0 - checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 languageName: node linkType: hard @@ -409,10 +408,17 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + 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" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb languageName: node linkType: hard @@ -436,50 +442,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/console@npm:29.5.0" +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 - checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 languageName: node linkType: hard -"@jest/core@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/core@npm:29.5.0" +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" dependencies: - "@jest/console": ^29.5.0 - "@jest/reporters": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.5.0 - jest-config: ^29.5.0 - jest-haste-map: ^29.5.0 - jest-message-util: ^29.5.0 - jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-resolve-dependencies: ^29.5.0 - jest-runner: ^29.5.0 - jest-runtime: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 - jest-watcher: ^29.5.0 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 micromatch: ^4.0.4 - pretty-format: ^29.5.0 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -487,86 +493,77 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d languageName: node linkType: hard -"@jest/environment@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/environment@npm:29.5.0" +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" dependencies: - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.5.0 - checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 languageName: node linkType: hard -"@jest/expect-utils@npm:^29.4.1": - version: 29.4.1 - resolution: "@jest/expect-utils@npm:29.4.1" +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" dependencies: - jest-get-type: ^29.2.0 - checksum: 865b4ee79d43e2457efb8ce3f58108f2fe141ce620350fe21d0baaf7e2f00b9b67f6e9c1c89760b1008c100e844fb03a6dda264418ed378243956904d9a88c69 + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed languageName: node linkType: hard -"@jest/expect-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect-utils@npm:29.5.0" +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" dependencies: - jest-get-type: ^29.4.3 - checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e languageName: node linkType: hard -"@jest/expect@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect@npm:29.5.0" +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" dependencies: - expect: ^29.5.0 - jest-snapshot: ^29.5.0 - checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/fake-timers@npm:29.5.0" - dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.5.0 - jest-mock: ^29.5.0 - jest-util: ^29.5.0 - checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 languageName: node linkType: hard -"@jest/globals@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/globals@npm:29.5.0" +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" dependencies: - "@jest/environment": ^29.5.0 - "@jest/expect": ^29.5.0 - "@jest/types": ^29.5.0 - jest-mock: ^29.5.0 - checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 languageName: node linkType: hard -"@jest/reporters@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/reporters@npm:29.5.0" +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 - "@jridgewell/trace-mapping": ^0.3.15 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 @@ -574,13 +571,13 @@ __metadata: glob: ^7.1.3 graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 + istanbul-lib-instrument: ^6.0.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -590,183 +587,139 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 languageName: node linkType: hard -"@jest/schemas@npm:^29.4.0": - version: 29.4.0 - resolution: "@jest/schemas@npm:29.4.0" +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" dependencies: - "@sinclair/typebox": ^0.25.16 - checksum: 005c90b7b641af029133fa390c0c8a75b63edf651da6253d7c472a8f15ddd18aa139edcd4236e57f974006e39c67217925768115484dbd7bfed2eba224de8b7d + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 languageName: node linkType: hard -"@jest/schemas@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/schemas@npm:29.4.3" +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" dependencies: - "@sinclair/typebox": ^0.25.16 - checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/source-map@npm:29.4.3" - dependencies: - "@jridgewell/trace-mapping": ^0.3.15 + "@jridgewell/trace-mapping": ^0.3.18 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb languageName: node linkType: hard -"@jest/test-result@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/test-result@npm:29.5.0" +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" dependencies: - "@jest/console": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/test-sequencer@npm:29.5.0" +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" dependencies: - "@jest/test-result": ^29.5.0 + "@jest/test-result": ^29.7.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.7.0 slash: ^3.0.0 - checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd languageName: node linkType: hard -"@jest/transform@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/transform@npm:29.5.0" +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.5.0 - "@jridgewell/trace-mapping": ^0.3.15 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 - jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab languageName: node linkType: hard -"@jest/types@npm:^29.4.1": - version: 29.4.1 - resolution: "@jest/types@npm:29.4.1" +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" dependencies: - "@jest/schemas": ^29.4.0 + "@jest/schemas": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 0aa0b6a210b3474289e5dcaa8e7abb2238dba8d0baf2eb5a3f080fb95e9a39e71e8abc96811d4ef7011f5d993755bb54515e9d827d7ebc2a2d4d9579d84f5a04 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc languageName: node linkType: hard -"@jest/types@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/types@npm:29.5.0" - dependencies: - "@jest/schemas": ^29.4.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/gen-mapping@npm:0.3.2" +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" dependencies: "@jridgewell/set-array": ^1.0.1 "@jridgewell/sourcemap-codec": ^1.4.10 "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.17 - resolution: "@jridgewell/trace-mapping@npm:0.3.17" +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 956a6f0f6fec060fb48c6bf1f5ec2064e13cd38c8be3873877d4b92b4a27ba58289a34071752671262a3e3c202abcc3fa2aac64d8447b4b0fa1ba3c9047f1c20 languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" dependencies: - "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e languageName: node linkType: hard @@ -806,9 +759,16 @@ __metadata: languageName: node linkType: hard +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + "@pm2/agent@npm:~2.0.0": - version: 2.0.1 - resolution: "@pm2/agent@npm:2.0.1" + version: 2.0.3 + resolution: "@pm2/agent@npm:2.0.3" dependencies: async: ~3.2.0 chalk: ~3.0.0 @@ -820,16 +780,16 @@ __metadata: nssocket: 0.6.0 pm2-axon: ~4.0.1 pm2-axon-rpc: ~0.7.0 - proxy-agent: ~5.0.0 - semver: ~7.2.0 + proxy-agent: ~6.3.0 + semver: ~7.5.0 ws: ~7.4.0 - checksum: d15e1ccec8e25bd020eabf2a59e0d2896082414b7950e918a1a19485ef1001012d7df6063fb720f453d9a2cd887abc80d576f985d2c28c127a7c1a16b95aee65 + checksum: 59a102665c5bf6e66338bb36fc7b41de4f1056397ca09691ce20fdae272728f4fb71232b1b4a707843fad3d54e86741e02b32dc9acc2f53b9d975642b3d7305c languageName: node linkType: hard "@pm2/io@npm:~5.0.0": - version: 5.0.0 - resolution: "@pm2/io@npm:5.0.0" + version: 5.0.2 + resolution: "@pm2/io@npm:5.0.2" dependencies: "@opencensus/core": 0.0.9 "@opencensus/propagation-b3": 0.0.8 @@ -837,11 +797,11 @@ __metadata: debug: ~4.3.1 eventemitter2: ^6.3.1 require-in-the-middle: ^5.0.0 - semver: 6.3.0 + semver: ~7.5.4 shimmer: ^1.2.0 signal-exit: ^3.0.3 tslib: 1.9.3 - checksum: f912096e823003de941a539d1098243cdc39b896704dea176e75a1d4fb0e0573b552c0a30e5198c2415fee9e1d8365ce0a8e78257eb85a8bfb994f1fb8153af1 + checksum: 54e4cf462a00f86d5d3a201dee72490a253896e732dee6ce0282c55ef59d088974d7f5665f586d9f2ef35c099f5bf345fdd39a099c61c88877d215da2ce345ac languageName: node linkType: hard @@ -867,35 +827,28 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.25.16": - version: 0.25.21 - resolution: "@sinclair/typebox@npm:0.25.21" - checksum: 763af1163fe4eabee9b914d4e4548a39fbba3287d2b3b1ff043c1da3c5a321e99d50a3ca94eb182988131e00b006a6f019799cde8da2f61e2f118b30b0276a00 +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 languageName: node linkType: hard -"@sinonjs/commons@npm:^2.0.0": - version: 2.0.0 - resolution: "@sinonjs/commons@npm:2.0.0" +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" dependencies: type-detect: 4.0.8 - checksum: 5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 languageName: node linkType: hard "@sinonjs/fake-timers@npm:^10.0.2": - version: 10.0.2 - resolution: "@sinonjs/fake-timers@npm:10.0.2" + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: - "@sinonjs/commons": ^2.0.0 - checksum: c62aa98e7cefda8dedc101ce227abc888dc46b8ff9706c5f0a8dfd9c3ada97d0a5611384738d9ba0b26b59f99c2ba24efece8e779bb08329e9e87358fa309824 - languageName: node - linkType: hard - -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 languageName: node linkType: hard @@ -906,126 +859,122 @@ __metadata: languageName: node linkType: hard +"@tootallnate/quickjs-emscripten@npm:^0.23.0": + version: 0.23.0 + resolution: "@tootallnate/quickjs-emscripten@npm:0.23.0" + checksum: c350a2947ffb80b22e14ff35099fd582d1340d65723384a0fd0515e905e2534459ad2f301a43279a37308a27c99273c932e64649abd57d0bb3ca8c557150eccc + languageName: node + linkType: hard + "@types/babel__core@npm:^7.1.14": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" + version: 7.20.2 + resolution: "@types/babel__core@npm:7.20.2" dependencies: "@babel/parser": ^7.20.7 "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df + checksum: 564fbaa8ff1305d50807ada0ec227c3e7528bebb2f8fe6b2ed88db0735a31511a74ad18729679c43eeed8025ed29d408f53059289719e95ab1352ed559a100bd languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.6.5 + resolution: "@types/babel__generator@npm:7.6.5" dependencies: "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + checksum: c7459f5025c4c800eaf58f4db3b24e9d736331fe7df40961d9bc49f31b46e2a3be83dc9276e8688f10a5ed752ae153ad5f1bdd45e2245bac95273730b9115ec2 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.4.2 + resolution: "@types/babel__template@npm:7.4.2" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + checksum: 0fe977b45a3269336c77f3ae4641a6c48abf0fa35ab1a23fb571690786af02d6cec08255a43499b0b25c5633800f7ae882ace450cce905e3060fa9e6995047ae languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" + version: 7.20.2 + resolution: "@types/babel__traverse@npm:7.20.2" dependencies: - "@babel/types": ^7.3.0 - checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 + "@babel/types": ^7.20.7 + checksum: 981340286479524436348d32373eaa3bf993c635cbf70307b4b69463eee83406a959ac4844f683911e0db8ab8d9f0025ab630dc7a8c170fee9ee74144c2a528f languageName: node linkType: hard "@types/body-parser@npm:*": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" + version: 1.19.3 + resolution: "@types/body-parser@npm:1.19.3" dependencies: "@types/connect": "*" "@types/node": "*" - checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 + checksum: 932fa71437c275023799123680ef26ffd90efd37f51a1abe405e6ae6e5b4ad9511b7a3a8f5a12877ed1444a02b6286c0a137a98e914b3c61932390c83643cc2c languageName: node linkType: hard "@types/connect@npm:*": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" dependencies: "@types/node": "*" - checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + checksum: 4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 languageName: node linkType: hard -"@types/express-serve-static-core@npm:^4.17.31, @types/express-serve-static-core@npm:^4.17.33": - version: 4.17.33 - resolution: "@types/express-serve-static-core@npm:4.17.33" +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.17.37 + resolution: "@types/express-serve-static-core@npm:4.17.37" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" - checksum: dce580d16b85f207445af9d4053d66942b27d0c72e86153089fa00feee3e96ae336b7bedb31ed4eea9e553c99d6dd356ed6e0928f135375d9f862a1a8015adf2 + "@types/send": "*" + checksum: 2dab1380e45eb44e56ecc1be1c42c4b897364d2f2a08e03ca28fbcb1e6866e390217385435813711c046f9acd684424d088855dc32825d5cbecf72c60ecd037f languageName: node linkType: hard -"@types/express-sitemap-xml@npm:3.0.1": - version: 3.0.1 - resolution: "@types/express-sitemap-xml@npm:3.0.1" +"@types/express-sitemap-xml@npm:3.0.3": + version: 3.0.3 + resolution: "@types/express-sitemap-xml@npm:3.0.3" dependencies: "@types/express": "*" - checksum: 1beed154166a5d844c478d0647d50f865c57c77ebd0c3348221e32916919f4fe2170226e859ca959fe1c0467fdd6b2c95932cb0fed2794aa4cb4a35d346f8dc3 + checksum: d6d20da77364589fe7d43160227becb89c8920ce411bf06505f9c97473a022e39d504ff67ab896eb8fe449d5f703129938e61593fe1accb554edf4667114b454 languageName: node linkType: hard -"@types/express-useragent@npm:1.0.2": - version: 1.0.2 - resolution: "@types/express-useragent@npm:1.0.2" +"@types/express-useragent@npm:1.0.4": + version: 1.0.4 + resolution: "@types/express-useragent@npm:1.0.4" dependencies: "@types/express": "*" - checksum: b3a7d6b79eee94fc6b999c2b3cfbe5cd898a4041dea77bb2b2a84851eb37ad198fe146a08e4df64d256be477b2b02f75cb705847ffd8d2fd56e00683c02809df - languageName: node - linkType: hard - -"@types/express@npm:*": - version: 4.17.16 - resolution: "@types/express@npm:4.17.16" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.31 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: 43f3ed2cea6e5e83c7c1098c5152f644e975fd764443717ff9c812a1518416a9e7e9f824ffe852c118888cbfb994ed023cad08331f49b19ced469bb185cdd5cd + checksum: 20019a130237d3a1063b9265bd997d45722e282ca63c8c362fe55f53a77f9670698be8db1335300574cc9a78c80b4e9212aaec2aebdb0981a8c338b2dbcb0b7c languageName: node linkType: hard -"@types/express@npm:4.17.17": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" +"@types/express@npm:*, @types/express@npm:4.17.19": + version: 4.17.19 + resolution: "@types/express@npm:4.17.19" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da + checksum: 3d39d0655eb0825d96fec100985a38737767ddd6da2dbda1e330a3adf36c98a9b7cd8d9539db32876d1fbb47a09343cad7b38c30c8dd7c291271fcb9b85cb21b languageName: node linkType: hard -"@types/fs-extra@npm:11.0.1": - version: 11.0.1 - resolution: "@types/fs-extra@npm:11.0.1" +"@types/fs-extra@npm:11.0.3": + version: 11.0.3 + resolution: "@types/fs-extra@npm:11.0.3" dependencies: "@types/jsonfile": "*" "@types/node": "*" - checksum: 3e930346e5d84f419deb8ced1c582beef8cb20d0bd8a0eb145a37d75bab0572a1895f0e48a0d681d386b3a58b9a992b2d2acecc464bcaec2548f53ea00718651 + checksum: f196bc216906e7016a6c9c549dbe204fe7e1e87515c7e961f741309e25f8e2f8c268dba3dbf0ca7f3ddab5911d39888472f8624ac0c11a461f1b2d05377e38fa languageName: node linkType: hard @@ -1037,20 +986,27 @@ __metadata: linkType: hard "@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" + version: 4.1.7 + resolution: "@types/graceful-fs@npm:4.1.7" dependencies: "@types/node": "*" - checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + checksum: 8b97e208f85c9efd02a6003a582c77646dd87be0af13aec9419a720771560a8a87a979eaca73ae193d7c73127f34d0a958403a9b5d6246e450289fd8c79adf09 languageName: node linkType: hard -"@types/hbs@npm:4.0.1": - version: 4.0.1 - resolution: "@types/hbs@npm:4.0.1" +"@types/hbs@npm:4.0.3": + version: 4.0.3 + resolution: "@types/hbs@npm:4.0.3" dependencies: handlebars: ^4.1.0 - checksum: 28eae02b0a4133b0864096a59ca7e4573bcacebd9a0412c56428d06fe6ed42aa041d0cc57124551aecb841e08533ca3bdca7998d13cf44ba98ffdf32bff67fa5 + checksum: a3e6e70894154d289da2d7af0b893ab677882a52b4322433d14c8af914eb845b75f16bae820c080e4143a68702e123a13877453f11fc08a63f079bce67ecdc1c + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.2 + resolution: "@types/http-errors@npm:2.0.2" + checksum: d7f14045240ac4b563725130942b8e5c8080bfabc724c8ff3f166ea928ff7ae02c5194763bc8f6aaf21897e8a44049b0492493b9de3e058247e58fdfe0f86692 languageName: node linkType: hard @@ -1062,84 +1018,104 @@ __metadata: linkType: hard "@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" + version: 3.0.1 + resolution: "@types/istanbul-lib-report@npm:3.0.1" dependencies: "@types/istanbul-lib-coverage": "*" - checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + checksum: cfc66de48577bb7b2636a6afded7056483693c3ea70916276518cdfaa0d4b51bf564ded88fb13e75716665c3af3d4d54e9c2de042c0219dcabad7e81c398688b languageName: node linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.2 + resolution: "@types/istanbul-reports@npm:3.0.2" dependencies: "@types/istanbul-lib-report": "*" - checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + checksum: f52028d6fe4d28f0085dd7ed66ccfa6af632579e9a4091b90928ffef93d4dbec0bacd49e9caf1b939d05df9eafc5ac1f5939413cdf8ac59fbe4b29602d4d0939 languageName: node linkType: hard -"@types/jest@npm:^29.5.2": - version: 29.5.2 - resolution: "@types/jest@npm:29.5.2" +"@types/jest@npm:^29.5.6": + version: 29.5.6 + resolution: "@types/jest@npm:29.5.6" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 7d205599ea3cccc262bad5cc173d3242d6bf8138c99458509230e4ecef07a52d6ddcde5a1dbd49ace655c0af51d2dbadef3748697292ea4d86da19d9e03e19c0 + checksum: fa13a27bd1c8efd0381a419478769d0d6d3a8e93e1952d7ac3a16274e8440af6f73ed6f96ac1ff00761198badf2ee226b5ab5583a5d87a78d609ea78da5c5a24 languageName: node linkType: hard "@types/jsonfile@npm:*": - version: 6.1.1 - resolution: "@types/jsonfile@npm:6.1.1" + version: 6.1.2 + resolution: "@types/jsonfile@npm:6.1.2" dependencies: "@types/node": "*" - checksum: 0f8fe0a9221a00e8413cffba723dfe16553868724b830237256fb0052ecd5cac96498189d1235a001cfa815f352008261c9ceb373f0aa58227f891e0c7a12c4d + checksum: 3e020944de09e54ef7c4200dfbbedba76da417a58c712611ff9d30921e214dfabbe81dadd4d6608647a3ee8900d445407d7336dd991b8fe6df4249320ad4a1b4 languageName: node linkType: hard "@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 + version: 3.0.2 + resolution: "@types/mime@npm:3.0.2" + checksum: 09cf74f6377d1b27f4a24512cb689ad30af59880ac473ed6f7bc5285ecde88bbe8fe500789340ad57810da9d6fe1704f86e8bfe147b9ea76d58925204a60b906 languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:18.11.18": +"@types/mime@npm:^1": + version: 1.3.3 + resolution: "@types/mime@npm:1.3.3" + checksum: 7e27dede6517c1d604821a8a5412d6b7131decc8397ad4bac9216fc90dea26c9571426623ebeea2a9b89dbfb89ad98f7370a3c62cd2be8896c6e897333b117c9 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.8.6 + resolution: "@types/node@npm:20.8.6" + dependencies: + undici-types: ~5.25.1 + checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + languageName: node + linkType: hard + +"@types/node@npm:18.11.18": version: 18.11.18 resolution: "@types/node@npm:18.11.18" checksum: 03f17f9480f8d775c8a72da5ea7e9383db5f6d85aa5fefde90dd953a1449bd5e4ffde376f139da4f3744b4c83942166d2a7603969a6f8ea826edfb16e6e3b49d languageName: node linkType: hard -"@types/prettier@npm:^2.1.5": - version: 2.7.2 - resolution: "@types/prettier@npm:2.7.2" - checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 +"@types/qs@npm:*": + version: 6.9.8 + resolution: "@types/qs@npm:6.9.8" + checksum: c28e07d00d07970e5134c6eed184a0189b8a4649e28fdf36d9117fe671c067a44820890de6bdecef18217647a95e9c6aebdaaae69f5fe4b0bec9345db885f77e languageName: node linkType: hard -"@types/qs@npm:*": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba +"@types/range-parser@npm:*": + version: 1.2.5 + resolution: "@types/range-parser@npm:1.2.5" + checksum: db9aaa04a02d019395a9a4346475669a2864a32a6477ad0fc457bd2ef39a167cabe742f55a8a3fa8bc90abac795b716c22b37348bc3e19313ebe6c9310815233 languageName: node linkType: hard -"@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 +"@types/send@npm:*": + version: 0.17.2 + resolution: "@types/send@npm:0.17.2" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: 1ff5b1bd6a4f6fdc6402c7024781ff5dbd0e1f51a43c69529fb67c710943c7416d2f0d77c57c70fccf6616f25f838f32f960284526e408d4edae2e91e1fce95a languageName: node linkType: hard "@types/serve-static@npm:*": - version: 1.15.0 - resolution: "@types/serve-static@npm:1.15.0" + version: 1.15.3 + resolution: "@types/serve-static@npm:1.15.3" dependencies: + "@types/http-errors": "*" "@types/mime": "*" "@types/node": "*" - checksum: b6ac93d471fb0f53ddcac1f9b67572a09cd62806f7db5855244b28f6f421139626f24799392566e97d1ffc61b12f9de7f30380c39fcae3c8a161fe161d44edf2 + checksum: afa52252f0ba94cdb5391e80f23e17fd629bdf2a31be8876e2c4490312ed6b0570822dd7de7cea04c9002049e207709563568b7f4ee10bb9f456321db1e83e40 languageName: node linkType: hard @@ -1151,30 +1127,30 @@ __metadata: linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + version: 21.0.1 + resolution: "@types/yargs-parser@npm:21.0.1" + checksum: 64e6316c2045e2d460c4fb79572f872f9d2f98fddc6d9d3949c71f0b6ad0ef8a2706cf49db26dfb02a9cb81433abb8f340f015e1d20a9692279abe9477b72c8e languageName: node linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.20 - resolution: "@types/yargs@npm:17.0.20" + version: 17.0.28 + resolution: "@types/yargs@npm:17.0.28" dependencies: "@types/yargs-parser": "*" - checksum: dc2edbb0e4b6bfe5189b86c057bb6991139af02372b1d3591083e4ce8f9605b19d598e56413e30f41453733f7a048f732f899cb637f3938f90ed3eb13f23cc90 + checksum: f78c5e5c29903933c0557b4ffcd1d0b8564d66859c8ca4aa51da3714e49109ed7c2644334a1918d033df19028f4cecc91fd2e502651bb8e8451f246c371da847 languageName: node linkType: hard -"@wireapp/commons@npm:5.1.0": - version: 5.1.0 - resolution: "@wireapp/commons@npm:5.1.0" +"@wireapp/commons@npm:5.2.1": + version: 5.2.1 + resolution: "@wireapp/commons@npm:5.2.1" dependencies: ansi-regex: 5.0.1 fs-extra: 11.1.0 logdown: 3.3.1 platform: 1.3.6 - checksum: 1abb97ff5ab0f0cf0b9882997f71929170abb7e0d4b5d1cd0bff3821b94e38aaddcebf9fb410493601d3595a843b86582c81e5036e567997be011741c6e0ec28 + checksum: 1510b705a40d45ceaf07b12b5a199d94fe977d3b2faaafc298ff167a65b820471f5863f9f93f27d2003f9f44ee3401423d6e12bb38ecd7808f8b2fc72821d411 languageName: node linkType: hard @@ -1195,23 +1171,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.2.0": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 - languageName: node - linkType: hard - -"acorn@npm:^8.7.0": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" - bin: - acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.0, agent-base@npm:^6.0.2": +"agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -1220,14 +1180,21 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": - version: 4.2.1 - resolution: "agentkeepalive@npm:4.2.1" + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" dependencies: - debug: ^4.1.0 - depd: ^1.1.2 humanize-ms: ^1.2.1 - checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 languageName: node linkType: hard @@ -1280,6 +1247,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -1305,6 +1279,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -1348,7 +1329,7 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:^0.13.2": +"ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" dependencies: @@ -1401,20 +1382,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-jest@npm:29.5.0" +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" dependencies: - "@jest/transform": ^29.5.0 + "@jest/transform": ^29.7.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.5.0 + babel-preset-jest: ^29.6.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 languageName: node linkType: hard @@ -1431,15 +1412,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-plugin-jest-hoist@npm:29.5.0" +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 languageName: node linkType: hard @@ -1465,15 +1446,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-preset-jest@npm:29.5.0" +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" dependencies: - babel-plugin-jest-hoist: ^29.5.0 + babel-plugin-jest-hoist: ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb languageName: node linkType: hard @@ -1484,6 +1465,13 @@ __metadata: languageName: node linkType: hard +"basic-ftp@npm:^5.0.2": + version: 5.0.3 + resolution: "basic-ftp@npm:5.0.3" + checksum: 8b04e88eb85a64de9311721bb0707c9cd70453eefdd854cab85438e6f46fb6c597ddad57ed1acf0a9ede3c677b14e657f51051688a5f23d6f3ea7b5d9073b850 + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -1555,17 +1543,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.3": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" +"browserslist@npm:^4.21.9": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 languageName: node linkType: hard @@ -1592,29 +1580,23 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 lru-cache: ^7.7.1 - minipass: ^3.1.6 + minipass: ^7.0.3 minipass-collect: ^1.0.2 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 + ssri: ^10.0.0 tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 languageName: node linkType: hard @@ -1649,10 +1631,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001449 - resolution: "caniuse-lite@npm:1.0.30001449" - checksum: f1b395f0a5495c1931c53f58441e0db79b8b0f8ef72bb6d241d13c49b05827630efe6793d540610e0a014d8fdda330dd42f981c82951bd4bdcf635480e1a0102 +"caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001549 + resolution: "caniuse-lite@npm:1.0.30001549" + checksum: 7f2abeedc8cf8b92cc0613855d71b995ce436068c0bcdd798c5af7d297ccf9f52496b00181beda42d82d25079dd4b6e389c67486156d40d8854e5707a25cb054 languageName: node linkType: hard @@ -1666,7 +1648,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.3.0": +"chalk@npm:^2.3.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -1728,16 +1710,16 @@ __metadata: linkType: hard "ci-info@npm:^3.2.0": - version: 3.7.1 - resolution: "ci-info@npm:3.7.1" - checksum: 72d93d5101ea1c186511277fbd8d06ae8a6e028cc2fb94361e92bf735b39c5ebd192e8d15a66ff8c4e3ed569f87c2f844e96f90e141b2de5c649f77ec34ff601 + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 languageName: node linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a languageName: node linkType: hard @@ -1776,9 +1758,9 @@ __metadata: linkType: hard "collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da languageName: node linkType: hard @@ -1870,13 +1852,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -1898,10 +1873,20 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 languageName: node linkType: hard @@ -1912,7 +1897,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -1930,17 +1915,17 @@ __metadata: languageName: node linkType: hard -"data-uri-to-buffer@npm:3": - version: 3.0.1 - resolution: "data-uri-to-buffer@npm:3.0.1" - checksum: c59c3009686a78c071806b72f4810856ec28222f0f4e252aa495ec027ed9732298ceea99c50328cf59b151dd34cbc3ad6150bbb43e41fc56fa19f48c99e9fc30 +"data-uri-to-buffer@npm:^6.0.0": + version: 6.0.1 + resolution: "data-uri-to-buffer@npm:6.0.1" + checksum: 9140e68c585ae33d950f5943bd476751346c8b789ae80b01a578a33cb8f7f706d1ca7378aff2b1878b2a6d9a8c88c55cc286d88191c8b8ead8255c3c4d934530 languageName: node linkType: hard "dayjs@npm:~1.11.5": - version: 1.11.7 - resolution: "dayjs@npm:1.11.7" - checksum: 5003a7c1dd9ed51385beb658231c3548700b82d3548c0cfbe549d85f2d08e90e972510282b7506941452c58d32136d6362f009c77ca55381a09c704e9f177ebb + version: 1.11.10 + resolution: "dayjs@npm:1.11.10" + checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 languageName: node linkType: hard @@ -1960,7 +1945,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:~4.3.1": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -1981,36 +1966,33 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 - languageName: node - linkType: hard - -"deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a languageName: node linkType: hard "deepmerge@npm:^4.2.2": - version: 4.3.0 - resolution: "deepmerge@npm:4.3.0" - checksum: c7980eb5c5be040b371f1df0d566473875cfabed9f672ccc177b81ba8eee5686ce2478de2f1d0076391621cbe729e5eacda397179a59ef0f68901849647db126 + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard -"degenerator@npm:^3.0.2": - version: 3.0.2 - resolution: "degenerator@npm:3.0.2" +"degenerator@npm:^5.0.0": + version: 5.0.1 + resolution: "degenerator@npm:5.0.1" dependencies: - ast-types: ^0.13.2 - escodegen: ^1.8.1 - esprima: ^4.0.0 - vm2: ^3.9.8 - checksum: 6a8fffe1ddde692931a1d74c0636d9e6963f2aa16748d4b95f4833cdcbe8df571e5c127e4f1d625a4c340cc60f5a969ac9e5aa14baecfb6f69b85638e180cd97 + ast-types: ^0.13.4 + escodegen: ^2.1.0 + esprima: ^4.0.1 + checksum: a64fa39cdf6c2edd75188157d32338ee9de7193d7dbb2aeb4acb1eb30fa4a15ed80ba8dae9bd4d7b085472cf174a5baf81adb761aaa8e326771392c922084152 languageName: node linkType: hard @@ -2028,13 +2010,6 @@ __metadata: languageName: node linkType: hard -"depd@npm:^1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 - languageName: node - linkType: hard - "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -2049,17 +2024,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.3.1": - version: 29.3.1 - resolution: "diff-sequences@npm:29.3.1" - checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 - languageName: node - linkType: hard - -"diff-sequences@npm:^29.4.3": - version: 29.4.3 - resolution: "diff-sequences@npm:29.4.3" - checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa languageName: node linkType: hard @@ -2091,6 +2059,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -2098,10 +2073,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.251": - version: 1.4.284 - resolution: "electron-to-chromium@npm:1.4.284" - checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a +"electron-to-chromium@npm:^1.4.535": + version: 1.4.554 + resolution: "electron-to-chromium@npm:1.4.554" + checksum: cbac43c50b43777327f4a7bf149ee3088c1da8b91bbcd80f78d2cc77bc52763f6d0941574499239d9caefd3430d3093f865e5f1093371418f7d6b70301eeae9b languageName: node linkType: hard @@ -2128,6 +2103,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -2211,14 +2193,13 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^1.8.1": - version: 1.14.3 - resolution: "escodegen@npm:1.14.3" +"escodegen@npm:^2.1.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" dependencies: esprima: ^4.0.1 - estraverse: ^4.2.0 + estraverse: ^5.2.0 esutils: ^2.0.2 - optionator: ^0.8.1 source-map: ~0.6.1 dependenciesMeta: source-map: @@ -2226,7 +2207,7 @@ __metadata: bin: escodegen: bin/escodegen.js esgenerate: bin/esgenerate.js - checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 languageName: node linkType: hard @@ -2240,10 +2221,10 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^4.2.0": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b languageName: node linkType: hard @@ -2306,29 +2287,23 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.4.1 - resolution: "expect@npm:29.4.1" +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" dependencies: - "@jest/expect-utils": ^29.4.1 - jest-get-type: ^29.2.0 - jest-matcher-utils: ^29.4.1 - jest-message-util: ^29.4.1 - jest-util: ^29.4.1 - checksum: 5918f69371557bbceb01bc163cd0ac03e8cbbc5de761892a9c27ef17a1f9e94dc91edd8298b4eaca18b71ba4a9d521c74b072f0a46950b13d6b61123b0431836 + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c languageName: node linkType: hard -"expect@npm:^29.5.0": - version: 29.5.0 - resolution: "expect@npm:29.5.0" - dependencies: - "@jest/expect-utils": ^29.5.0 - jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 - checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard @@ -2402,13 +2377,6 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -2425,13 +2393,6 @@ __metadata: languageName: node linkType: hard -"file-uri-to-path@npm:2": - version: 2.0.0 - resolution: "file-uri-to-path@npm:2.0.0" - checksum: 4a71a99ddaa6ae7ae7bffe2948c34da59982ed465d930a0af9cb59fcc10fcd93366cc356ec3337c18373fde5df7ac52afda4558f155febd1799d135552207edb - languageName: node - linkType: hard - "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -2467,12 +2428,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.14.0": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" peerDependenciesMeta: debug: optional: true - checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 languageName: node linkType: hard @@ -2483,6 +2444,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -2530,7 +2501,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": +"fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: @@ -2539,6 +2510,15 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -2547,38 +2527,28 @@ __metadata: linkType: hard "fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard "fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: node-gyp: latest conditions: os=darwin languageName: node linkType: hard -"ftp@npm:^0.3.10": - version: 0.3.10 - resolution: "ftp@npm:0.3.10" - dependencies: - readable-stream: 1.1.x - xregexp: 2.0.0 - checksum: ddd313c1d44eb7429f3a7d77a0155dc8fe86a4c64dca58f395632333ce4b4e74c61413c6e0ef66ea3f3d32d905952fbb6d028c7117d522f793eb1fa282e17357 - languageName: node - linkType: hard - "function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 languageName: node linkType: hard @@ -2629,13 +2599,14 @@ __metadata: linkType: hard "get-intrinsic@npm:^1.0.2": - version: 1.2.0 - resolution: "get-intrinsic@npm:1.2.0" + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" dependencies: function-bind: ^1.1.1 has: ^1.0.3 + has-proto: ^1.0.1 has-symbols: ^1.0.3 - checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f languageName: node linkType: hard @@ -2653,17 +2624,15 @@ __metadata: languageName: node linkType: hard -"get-uri@npm:3": - version: 3.0.2 - resolution: "get-uri@npm:3.0.2" +"get-uri@npm:^6.0.1": + version: 6.0.2 + resolution: "get-uri@npm:6.0.2" dependencies: - "@tootallnate/once": 1 - data-uri-to-buffer: 3 - debug: 4 - file-uri-to-path: 2 + basic-ftp: ^5.0.2 + data-uri-to-buffer: ^6.0.0 + debug: ^4.3.4 fs-extra: ^8.1.0 - ftp: ^0.3.10 - checksum: 5325b2906b08ca37529ca421cf52bc50376e75c6a945e0a8064e3f76b4bb67b8ab1e316a2fc7a307c8c606ab36d030720f39a57c97b027ff1134335e12102946 + checksum: 762de3b0e3d4e7afc966e4ce93be587d70c270590da9b4c8fbff888362656c055838d926903d1774cbfeed4d392b4d6def4b2c06d48c050580070426a3a8629b languageName: node linkType: hard @@ -2690,6 +2659,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + "glob@npm:^7.0.5, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -2704,28 +2688,15 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 - languageName: node - linkType: hard - "glob@npm:^9.2.0": - version: 9.2.1 - resolution: "glob@npm:9.2.1" + version: 9.3.5 + resolution: "glob@npm:9.3.5" dependencies: fs.realpath: ^1.0.0 - minimatch: ^7.4.1 + minimatch: ^8.0.2 minipass: ^4.2.4 path-scurry: ^1.6.1 - checksum: ef9b1c32491e6b532bdd0d2abcc3c9f48e83446609e11285869156982fc5a756dfbaa6f59f797712343bd1e22500ac15708692806633653fde4ef67c85e2aab7 + checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 languageName: node linkType: hard @@ -2737,13 +2708,13 @@ __metadata: linkType: hard "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard -"handlebars@npm:4.7.7, handlebars@npm:^4.1.0": +"handlebars@npm:4.7.7": version: 4.7.7 resolution: "handlebars@npm:4.7.7" dependencies: @@ -2761,6 +2732,24 @@ __metadata: languageName: node linkType: hard +"handlebars@npm:^4.1.0": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.2 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 00e68bb5c183fd7b8b63322e6234b5ac8fbb960d712cb3f25587d559c2951d9642df83c04a1172c918c41bcfc81bfbd7a7718bbce93b893e0135fc99edea93ff + languageName: node + linkType: hard + "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -2775,6 +2764,13 @@ __metadata: languageName: node linkType: hard +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + "has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" @@ -2790,11 +2786,9 @@ __metadata: linkType: hard "has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 languageName: node linkType: hard @@ -2808,10 +2802,10 @@ __metadata: languageName: node linkType: hard -"helmet@npm:6.1.5": - version: 6.1.5 - resolution: "helmet@npm:6.1.5" - checksum: 58cc8f8715e2c486f3c7a58f89fcda3c9e83ab427bfe16d8486d8be53a681afc291f9900b9e60e5d42c63c25ece3da864a33cdd621a12f5a67cbc9046cff393d +"helmet@npm:7.0.0": + version: 7.0.0 + resolution: "helmet@npm:7.0.0" + checksum: 3622b8b68b7ac4736369fe7717adb5b87ddcdcda7c11c13277d79fb5670acab032e8c971835565b1d2144d234f3e0dbcd327a44249b9e61f0f64c0c753faf1bc languageName: node linkType: hard @@ -2822,7 +2816,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0": +"http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 @@ -2842,17 +2836,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.0, http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -2864,14 +2847,24 @@ __metadata: languageName: node linkType: hard -"http-status-codes@npm:2.2.0": - version: 2.2.0 - resolution: "http-status-codes@npm:2.2.0" - checksum: 31e1d730856210445da0907d9b484629e69e4fe92ac032478a7aa4d89e5b215e2b4e75d7ebce40d0537b6850bd281b2f65c7cc36cc2677e5de056d6cea1045ce +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 + languageName: node + linkType: hard + +"http-status-codes@npm:2.3.0": + version: 2.3.0 + resolution: "http-status-codes@npm:2.3.0" + checksum: dae3b99e0155441b6df28e8265ff27c56a45f82c6092f736414233e9ccf063d5ea93c1e1279e8b499c4642e2538b37995c76b1640ed3f615d0e2883d3a1dcfd5 languageName: node linkType: hard -"https-proxy-agent@npm:5, https-proxy-agent@npm:^5.0.0": +"https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -2881,6 +2874,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -2941,13 +2944,6 @@ __metadata: languageName: node linkType: hard -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -2958,7 +2954,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:~2.0.1": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -2972,7 +2968,7 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": +"ip@npm:^1.1.8": version: 1.1.8 resolution: "ip@npm:1.1.8" checksum: a2ade53eb339fb0cbe9e69a44caab10d6e3784662285eb5d2677117ee4facc33a64679051c35e0dfdb1a3983a51ce2f5d2cb36446d52e10d01881789b76e28fb @@ -3009,12 +3005,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.9.0": - version: 2.11.0 - resolution: "is-core-module@npm:2.11.0" +"is-core-module@npm:^2.13.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" dependencies: has: ^1.0.3 - checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 languageName: node linkType: hard @@ -3076,13 +3072,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -3097,7 +3086,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": +"istanbul-lib-instrument@npm:^5.0.4": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: @@ -3110,14 +3099,27 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: fb23472e739cfc9b027cefcd7d551d5e7ca7ff2817ae5150fab99fe42786a7f7b56a29a2aa8309c37092e18297b8003f9c274f50ca4360949094d17fbac81472 + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" dependencies: istanbul-lib-coverage: ^3.0.0 - make-dir: ^3.0.0 + make-dir: ^4.0.0 supports-color: ^7.1.0 - checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 languageName: node linkType: hard @@ -3133,68 +3135,81 @@ __metadata: linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + checksum: 44c4c0582f287f02341e9720997f9e82c071627e1e862895745d5f52ec72c9b9f38e1d12370015d2a71dcead794f34c7732aaef3fab80a24bc617a21c3d911d6 languageName: node linkType: hard -"jest-changed-files@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-changed-files@npm:29.5.0" +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" dependencies: execa: ^5.0.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 languageName: node linkType: hard -"jest-circus@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-circus@npm:29.5.0" +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" dependencies: - "@jest/environment": ^29.5.0 - "@jest/expect": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 - dedent: ^0.7.0 + dedent: ^1.0.0 is-generator-fn: ^2.0.0 - jest-each: ^29.5.0 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-runtime: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - pretty-format: ^29.5.0 + pretty-format: ^29.7.0 pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 languageName: node linkType: hard -"jest-cli@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-cli@npm:29.5.0" +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" dependencies: - "@jest/core": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 chalk: ^4.0.0 + create-jest: ^29.7.0 exit: ^0.1.2 - graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 - prompts: ^2.0.1 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3203,34 +3218,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 languageName: node linkType: hard -"jest-config@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-config@npm:29.5.0" +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.5.0 - "@jest/types": ^29.5.0 - babel-jest: ^29.5.0 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.5.0 - jest-environment-node: ^29.5.0 - jest-get-type: ^29.4.3 - jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-runner: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.5.0 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -3241,183 +3256,135 @@ __metadata: optional: true ts-node: optional: true - checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff languageName: node linkType: hard -"jest-diff@npm:^29.4.1": - version: 29.4.1 - resolution: "jest-diff@npm:29.4.1" +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" dependencies: chalk: ^4.0.0 - diff-sequences: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.4.1 - checksum: 359af2d11a75bbb3c91e3def8cfd0ede00afc6fb5d69d9495f2af5f6e18f692adb940d8338a186159f75afe48088d82bce14e2cc272cad9a5c2148bf0bc7f6bf + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 languageName: node linkType: hard -"jest-diff@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-diff@npm:29.5.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.4.3 - jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-docblock@npm:29.4.3" +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" dependencies: detect-newline: ^3.0.0 - checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 languageName: node linkType: hard -"jest-each@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-each@npm:29.5.0" +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 chalk: ^4.0.0 - jest-get-type: ^29.4.3 - jest-util: ^29.5.0 - pretty-format: ^29.5.0 - checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c languageName: node linkType: hard -"jest-environment-node@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-environment-node@npm:29.5.0" +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.5.0 - jest-util: ^29.5.0 - checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-get-type@npm:29.2.0" - checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 languageName: node linkType: hard -"jest-get-type@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-get-type@npm:29.4.3" - checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 languageName: node linkType: hard -"jest-haste-map@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-haste-map@npm:29.5.0" +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 languageName: node linkType: hard -"jest-leak-detector@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-leak-detector@npm:29.5.0" +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" dependencies: - jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 languageName: node linkType: hard -"jest-matcher-utils@npm:^29.4.1": - version: 29.4.1 - resolution: "jest-matcher-utils@npm:29.4.1" +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" dependencies: chalk: ^4.0.0 - jest-diff: ^29.4.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.4.1 - checksum: ea84dbcae82241cb28e94ff586660aeec51196d9245413dc516ce3aa78140b3ea728b1168b242281b59ad513b0148b9f12d674729bd043a894a3ba9d6ec164f4 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd languageName: node linkType: hard -"jest-matcher-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-matcher-utils@npm:29.5.0" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.5.0 - jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 - languageName: node - linkType: hard - -"jest-message-util@npm:^29.4.1": - version: 29.4.1 - resolution: "jest-message-util@npm:29.4.1" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.4.1 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.4.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 7d49823401b6d42f0d2d63dd9c0f11d2f64783416f82a68634190abee46e600e25bb0b380c746726acc56e854687bb03a76e26e617fcdda78e8c6316423b694f - languageName: node - linkType: hard - -"jest-message-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-message-util@npm:29.5.0" +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.5.0 + pretty-format: ^29.7.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 languageName: node linkType: hard -"jest-mock@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-mock@npm:29.5.0" +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-util: ^29.5.0 - checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 languageName: node linkType: hard @@ -3433,208 +3400,191 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-regex-util@npm:29.4.3" - checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-resolve-dependencies@npm:29.5.0" +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" dependencies: - jest-regex-util: ^29.4.3 - jest-snapshot: ^29.5.0 - checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 languageName: node linkType: hard -"jest-resolve@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-resolve@npm:29.5.0" +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.7.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 languageName: node linkType: hard -"jest-runner@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-runner@npm:29.5.0" +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" dependencies: - "@jest/console": ^29.5.0 - "@jest/environment": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.4.3 - jest-environment-node: ^29.5.0 - jest-haste-map: ^29.5.0 - jest-leak-detector: ^29.5.0 - jest-message-util: ^29.5.0 - jest-resolve: ^29.5.0 - jest-runtime: ^29.5.0 - jest-util: ^29.5.0 - jest-watcher: ^29.5.0 - jest-worker: ^29.5.0 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb languageName: node linkType: hard -"jest-runtime@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-runtime@npm:29.5.0" +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/globals": ^29.5.0 - "@jest/source-map": ^29.4.3 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 - jest-message-util: ^29.5.0 - jest-mock: ^29.5.0 - jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e languageName: node linkType: hard -"jest-snapshot@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-snapshot@npm:29.5.0" +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.5.0 + expect: ^29.7.0 graceful-fs: ^4.2.9 - jest-diff: ^29.5.0 - jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 natural-compare: ^1.4.0 - pretty-format: ^29.5.0 - semver: ^7.3.5 - checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad languageName: node linkType: hard -"jest-util@npm:^29.4.1": - version: 29.4.1 - resolution: "jest-util@npm:29.4.1" +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" dependencies: - "@jest/types": ^29.4.1 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: 10a0e6c448ace1386f728ee3b7669f67878bb0c2e668a902d11140cc3f75c89a18f4142a37a24ccb587ede20dad86d497b3e8df4f26848a9be50a44779d92bc9 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca languageName: node linkType: hard -"jest-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-util@npm:29.5.0" +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" dependencies: - "@jest/types": ^29.5.0 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 - languageName: node - linkType: hard - -"jest-validate@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-validate@npm:29.5.0" - dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.6.3 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^29.4.3 + jest-get-type: ^29.6.3 leven: ^3.1.0 - pretty-format: ^29.5.0 - checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae languageName: node linkType: hard -"jest-watcher@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-watcher@npm:29.5.0" +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" dependencies: - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.5.0 + jest-util: ^29.7.0 string-length: ^4.0.1 - checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f languageName: node linkType: hard -"jest-worker@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-worker@npm:29.5.0" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: "@types/node": "*" - jest-util: ^29.5.0 + jest-util: ^29.7.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 languageName: node linkType: hard -"jest@npm:29.5.0": - version: 29.5.0 - resolution: "jest@npm:29.5.0" +"jest@npm:29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" dependencies: - "@jest/core": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^29.5.0 + jest-cli: ^29.7.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -3642,7 +3592,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b languageName: node linkType: hard @@ -3700,7 +3650,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.2": +"json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -3755,16 +3705,6 @@ __metadata: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -3822,50 +3762,49 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.14.1": - version: 7.18.2 - resolution: "lru-cache@npm:7.18.2" - checksum: 51e9c6f960a747cb2ed13dfda4238905a5633c590c0f9e52b0ea971a9660b93c0bbf13a5feac36ef18356736a006259eff9afe8bf57a463ed8f21fbc43720120 +"lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 languageName: node linkType: hard -"lru-cache@npm:^7.7.1": - version: 7.14.1 - resolution: "lru-cache@npm:7.14.1" - checksum: d72c6713c6a6d86836a7a6523b3f1ac6764768cca47ec99341c3e76db06aacd4764620e5e2cda719a36848785a52a70e531822dc2b33fb071fa709683746c104 +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 languageName: node linkType: hard -"make-dir@npm:^3.0.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" dependencies: agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 is-lambda: ^1.0.1 lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 negotiator: ^0.6.3 promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 languageName: node linkType: hard @@ -3887,13 +3826,13 @@ __metadata: languageName: node linkType: hard -"maxmind@npm:4.3.9": - version: 4.3.9 - resolution: "maxmind@npm:4.3.9" +"maxmind@npm:4.3.10": + version: 4.3.10 + resolution: "maxmind@npm:4.3.10" dependencies: mmdb-lib: 2.0.2 - tiny-lru: 10.3.0 - checksum: 4a31b3695e2f0666221f288ad459ceabce3558d02b0afc5b7d7b76265e4578a3019d59ce264fe735dec8eb6c6d5460b4f0ab5bfb3bfb26be2e49b690f1927dd0 + tiny-lru: 10.4.1 + checksum: 7733caa051f12633340b71e54f3c28f9257f5b076337e11e2e8ca4a2e1093bc8e65d5753329bd5dde57182405a0486c03ad3c5d9755ca56a0b054c10fdd0178b languageName: node linkType: hard @@ -3983,28 +3922,28 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" dependencies: brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a languageName: node linkType: hard -"minimatch@npm:^7.4.1": - version: 7.4.2 - resolution: "minimatch@npm:7.4.2" +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" dependencies: brace-expansion: ^2.0.1 - checksum: 9e341b04e69d5ab03e4206dcb61c8a158e3b8709628bf5e1a4eaa9f3b72c0ba925e24ad959b1f6ce6835caa5a927131d5087fae6836b69e7d99d7d5e63ef0bd8 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 languageName: node linkType: hard "minimist@npm:^1.2.5": - version: 1.2.7 - resolution: "minimist@npm:1.2.7" - checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 languageName: node linkType: hard @@ -4017,18 +3956,18 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" dependencies: encoding: ^0.1.13 - minipass: ^3.1.6 + minipass: ^7.0.3 minipass-sized: ^1.0.3 minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a languageName: node linkType: hard @@ -4059,7 +3998,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -4068,19 +4007,24 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^4.0.0": - version: 4.0.0 - resolution: "minipass@npm:4.0.0" - dependencies: - yallist: ^4.0.0 - checksum: 7a609afbf394abfcf9c48e6c90226f471676c8f2a67f07f6838871afb03215ede431d1433feffe1b855455bcb13ef0eb89162841b9796109d6fed8d89790f381 +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea languageName: node linkType: hard -"minipass@npm:^4.0.2, minipass@npm:^4.2.4": - version: 4.2.4 - resolution: "minipass@npm:4.2.4" - checksum: c664f2ae4401408d1e7a6e4f50aca45f87b1b0634bc9261136df5c378e313e77355765f73f59c4a5abcadcdf43d83fcd3eb14e4a7cdcce8e36508e2290345753 +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 languageName: node linkType: hard @@ -4094,7 +4038,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -4172,7 +4116,7 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.0": +"neo-async@npm:^2.6.0, neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 @@ -4186,21 +4130,22 @@ __metadata: languageName: node linkType: hard -"nocache@npm:3.0.4": - version: 3.0.4 - resolution: "nocache@npm:3.0.4" - checksum: 6be9ee67eb561ecedc56d805c024c0fda55b9836ecba659c720073b067929aa4fe04bb7121480e004c9cf52989e62d8720f29a7fe0269f1a4941221a1e4be1c2 +"nocache@npm:4.0.0": + version: 4.0.0 + resolution: "nocache@npm:4.0.0" + checksum: ba317f7a5b837069c3bf8616c9a25f61bd5ec63ad7aa2ce83e8425116df402ab5b4914bbdfb1ba54893c0f859886cb3ad9a375f1c45ba7a72a9712cf31392292 languageName: node linkType: hard "node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" dependencies: env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 + make-fetch-happen: ^11.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 @@ -4209,7 +4154,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 languageName: node linkType: hard @@ -4220,10 +4165,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.6": - version: 2.0.8 - resolution: "node-releases@npm:2.0.8" - checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 languageName: node linkType: hard @@ -4284,9 +4229,9 @@ __metadata: linkType: hard "object-inspect@npm:^1.9.0": - version: 1.12.3 - resolution: "object-inspect@npm:1.12.3" - checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + version: 1.13.0 + resolution: "object-inspect@npm:1.13.0" + checksum: 21353e910a3079466cb44adca71d8bef15bd8b87e518eb68bb33d82c5c70b83193993edce432cc92268f7dd02c4a8ab338663a011844367d0bd0559f6dde1fed languageName: node linkType: hard @@ -4326,20 +4271,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" @@ -4418,31 +4349,30 @@ __metadata: languageName: node linkType: hard -"pac-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "pac-proxy-agent@npm:5.0.0" +"pac-proxy-agent@npm:^7.0.1": + version: 7.0.1 + resolution: "pac-proxy-agent@npm:7.0.1" dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - get-uri: 3 - http-proxy-agent: ^4.0.1 - https-proxy-agent: 5 - pac-resolver: ^5.0.0 - raw-body: ^2.2.0 - socks-proxy-agent: 5 - checksum: cfd26a0e2ebfea4ca6162465018ce093bf147d26cf6c8fb3e7155bc7c184370d80d4d09a1c097e3db7676d0e3f574ea1cb56a4aa7d1d2e5cca6238935fabf010 + "@tootallnate/quickjs-emscripten": ^0.23.0 + agent-base: ^7.0.2 + debug: ^4.3.4 + get-uri: ^6.0.1 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.2 + pac-resolver: ^7.0.0 + socks-proxy-agent: ^8.0.2 + checksum: 3d4aa48ec1c19db10158ecc1c4c9a9f77792294412d225ceb3dfa45d5a06950dca9755e2db0d9b69f12769119bea0adf2b24390d9c73c8d81df75e28245ae451 languageName: node linkType: hard -"pac-resolver@npm:^5.0.0": - version: 5.0.1 - resolution: "pac-resolver@npm:5.0.1" +"pac-resolver@npm:^7.0.0": + version: 7.0.0 + resolution: "pac-resolver@npm:7.0.0" dependencies: - degenerator: ^3.0.2 - ip: ^1.1.5 + degenerator: ^5.0.0 + ip: ^1.1.8 netmask: ^2.0.2 - checksum: e3bd8aada70d173cd4cec1ac810fb56161678b7a597060a740c4a31d9c5f8cd95687b2d0fd90b69c0cafe5ef787404074f38042ba08c8d378fed48973f58e493 + checksum: fa3a898c09848e93e35f5e23443fea36ddb393a851c76a23664a5bf3fcbe58ff77a0bcdae1e4f01b9ea87ea493c52e14d97a0fe39f92474d14cd45559c6e3cde languageName: node linkType: hard @@ -4500,13 +4430,13 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.6.1": - version: 1.6.1 - resolution: "path-scurry@npm:1.6.1" +"path-scurry@npm:^1.10.1, path-scurry@npm:^1.6.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" dependencies: - lru-cache: ^7.14.1 - minipass: ^4.0.2 - checksum: 7ba57e823cb7bb879669a4e5e05a283cde1bb9e81b6d806b2609f8d8026d0aef08f4b655b17fc86b21c9c32807851bba95ca715db5ab0605fb13c7a3e9172e42 + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 languageName: node linkType: hard @@ -4550,9 +4480,9 @@ __metadata: linkType: hard "pirates@npm:^4.0.4": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 languageName: node linkType: hard @@ -4671,39 +4601,14 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.1": - version: 29.4.1 - resolution: "pretty-format@npm:29.4.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" dependencies: - "@jest/schemas": ^29.4.0 + "@jest/schemas": ^29.6.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: bcc8e86bcf8e7f5106c96e2ea7905912bd17ae2aac76e4e0745d2a50df4b340638ed95090ee455a1c0f78189efa05077bd655ca08bf66292e83ebd7035fc46fd - languageName: node - linkType: hard - -"pretty-format@npm:^29.5.0": - version: 29.5.0 - resolution: "pretty-format@npm:29.5.0" - dependencies: - "@jest/schemas": ^29.4.3 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 languageName: node linkType: hard @@ -4746,23 +4651,23 @@ __metadata: languageName: node linkType: hard -"proxy-agent@npm:~5.0.0": - version: 5.0.0 - resolution: "proxy-agent@npm:5.0.0" +"proxy-agent@npm:~6.3.0": + version: 6.3.1 + resolution: "proxy-agent@npm:6.3.1" dependencies: - agent-base: ^6.0.0 - debug: 4 - http-proxy-agent: ^4.0.0 - https-proxy-agent: ^5.0.0 - lru-cache: ^5.1.1 - pac-proxy-agent: ^5.0.0 - proxy-from-env: ^1.0.0 - socks-proxy-agent: ^5.0.0 - checksum: 3b0bb73a4d3a07711d3cad72b2fa4320880f7a6ec1959cdcc186ac6ffb173db8137d7c4046c27fdfa6e2207b2eb75e802f3d5e14c766700586ec4d47299a5124 + agent-base: ^7.0.2 + debug: ^4.3.4 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.2 + lru-cache: ^7.14.1 + pac-proxy-agent: ^7.0.1 + proxy-from-env: ^1.1.0 + socks-proxy-agent: ^8.0.2 + checksum: 31030da419da31809340ac2521090c9a5bf4fe47a944843f829b3502883208c8586a468955e64b694140a41d70af6f45cf4793f5efd4a6f3ed94e5ac8023e36d languageName: node linkType: hard -"proxy-from-env@npm:^1.0.0": +"proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 @@ -4770,9 +4675,9 @@ __metadata: linkType: hard "pure-rand@npm:^6.0.0": - version: 6.0.0 - resolution: "pure-rand@npm:6.0.0" - checksum: ad1378d0a4859482d053a5264b2b485b445ece4bbc56f8959c233ea678b81ac2d613737925d496ded134eff5f29cc5546bf7492b6bce319ee27bebbad8a0c612 + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: e1c4e69f8bf7303e5252756d67c3c7551385cd34d94a1f511fe099727ccbab74c898c03a06d4c4a24a89b51858781057b83ebbfe740d984240cdc04fead36068 languageName: node linkType: hard @@ -4792,7 +4697,7 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.1, raw-body@npm:^2.2.0": +"raw-body@npm:2.5.1": version: 2.5.1 resolution: "raw-body@npm:2.5.1" dependencies: @@ -4820,26 +4725,14 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:1.1.x": - version: 1.1.14 - resolution: "readable-stream@npm:1.1.14" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 17dfeae3e909945a4a1abc5613ea92d03269ef54c49288599507fc98ff4615988a1c39a999dcf9aacba70233d9b7040bc11a5f2bfc947e262dedcc0a8b32b5a0 - languageName: node - linkType: hard - "readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard @@ -4887,35 +4780,35 @@ __metadata: linkType: hard "resolve.exports@npm:^2.0.0": - version: 2.0.0 - resolution: "resolve.exports@npm:2.0.0" - checksum: d8bee3b0cc0a0ae6c8323710983505bc6a3a2574f718e96f01e048a0f0af035941434b386cc9efc7eededc5e1199726185c306ec6f6a1aa55d5fbad926fd0634 + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 languageName: node linkType: hard "resolve@npm:^1.20.0, resolve@npm:^1.22.1": - version: 1.22.1 - resolution: "resolve@npm:1.22.1" + version: 1.22.8 + resolution: "resolve@npm:1.22.8" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c languageName: node linkType: hard "resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": - version: 1.22.1 - resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 languageName: node linkType: hard @@ -4970,47 +4863,38 @@ __metadata: linkType: hard "sax@npm:^1.2.4": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe - languageName: node - linkType: hard - -"semver@npm:6.3.0, semver@npm:^6.0.0, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + version: 1.3.0 + resolution: "sax@npm:1.3.0" + checksum: 238ab3a9ba8c8f8aaf1c5ea9120386391f6ee0af52f1a6a40bbb6df78241dd05d782f2359d614ac6aae08c4c4125208b456548a6cf68625aa4fe178486e63ecd languageName: node linkType: hard "semver@npm:^5.3.0, semver@npm:^5.5.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard -"semver@npm:^7.2, semver@npm:^7.3.5": - version: 7.3.8 - resolution: "semver@npm:7.3.8" - dependencies: - lru-cache: ^6.0.0 +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard -"semver@npm:~7.2.0": - version: 7.2.3 - resolution: "semver@npm:7.2.3" +"semver@npm:^7.2, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.0, semver@npm:~7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: e6a27b19853bb07829f863782647408afc20698f6a2b2cce9c60d1f4465cfc38848c47d9e8bbadc48dd62d096b9a4e7fd841e91274f307cb3a9d83a381c10b26 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -5102,6 +4986,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -5123,17 +5014,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:5, socks-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" - dependencies: - agent-base: ^6.0.2 - debug: 4 - socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -5145,7 +5025,18 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.2": +"socks-proxy-agent@npm:^8.0.2": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d + languageName: node + linkType: hard + +"socks@npm:^2.6.2, socks@npm:^2.7.1": version: 2.7.1 resolution: "socks@npm:2.7.1" dependencies: @@ -5196,12 +5087,12 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 languageName: node linkType: hard @@ -5231,7 +5122,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -5242,6 +5133,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -5251,14 +5153,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -5267,6 +5162,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + "strip-bom@npm:^4.0.0": version: 4.0.0 resolution: "strip-bom@npm:4.0.0" @@ -5323,8 +5227,8 @@ __metadata: linkType: hard "systeminformation@npm:^5.7": - version: 5.17.8 - resolution: "systeminformation@npm:5.17.8" + version: 5.21.11 + resolution: "systeminformation@npm:5.21.11" bin: systeminformation: lib/cli.js conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) @@ -5332,16 +5236,16 @@ __metadata: linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.13 - resolution: "tar@npm:6.1.13" + version: 6.2.0 + resolution: "tar@npm:6.2.0" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 - minipass: ^4.0.0 + minipass: ^5.0.0 minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 - checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c languageName: node linkType: hard @@ -5356,10 +5260,10 @@ __metadata: languageName: node linkType: hard -"tiny-lru@npm:10.3.0": - version: 10.3.0 - resolution: "tiny-lru@npm:10.3.0" - checksum: cf5ae030c729293a319c989a03d97396197b74290a014c28ba2f6303b019078fd64174e9a96c5ca5c8b5ee796c1393a6a48240503cab444e654f14dc58b53599 +"tiny-lru@npm:10.4.1": + version: 10.4.1 + resolution: "tiny-lru@npm:10.4.1" + checksum: ec2ce11278ff5ecd094823d9d6fcc16fe0aa250bf25cb533d40b997452a113a9ecd9cccbf503ac459a17bb812d94c5ef05cbdfe94b5b8ad03d7cf4fadb78a905 languageName: node linkType: hard @@ -5401,9 +5305,9 @@ __metadata: linkType: hard "tslib@npm:^2.0.1": - version: 2.5.0 - resolution: "tslib@npm:2.5.0" - checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard @@ -5423,15 +5327,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -5456,23 +5351,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.1.3": - version: 5.1.3 - resolution: "typescript@npm:5.1.3" +"typescript@npm:5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: d9d51862d98efa46534f2800a1071a613751b1585dc78884807d0c179bcd93d6e9d4012a508e276742f5f33c480adefc52ffcafaf9e0e00ab641a14cde9a31c7 + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c languageName: node linkType: hard -"typescript@patch:typescript@5.1.3#~builtin": - version: 5.1.3 - resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin::version=5.1.3&hash=a1c5e5" +"typescript@patch:typescript@5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 32a25b2e128a4616f999d4ee502aabb1525d5647bc8955e6edf05d7fbc53af8aa98252e2f6ba80bcedfc0260c982b885f3c09cfac8bb65d2924f3133ad1e1e62 + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 languageName: node linkType: hard @@ -5494,21 +5389,28 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f +"undici-types@npm:~5.25.1": + version: 5.25.3 + resolution: "undici-types@npm:5.25.3" + checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff languageName: node linkType: hard -"unique-slug@npm:^3.0.0": +"unique-filename@npm:^3.0.0": version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 languageName: node linkType: hard @@ -5533,17 +5435,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.9": - version: 1.0.10 - resolution: "update-browserslist-db@npm:1.0.10" +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 peerDependencies: browserslist: ">= 4.21.0" bin: - browserslist-lint: cli.js - checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + update-browserslist-db: cli.js + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 languageName: node linkType: hard @@ -5571,13 +5473,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.0.1 - resolution: "v8-to-istanbul@npm:9.0.1" + version: 9.1.3 + resolution: "v8-to-istanbul@npm:9.1.3" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 + convert-source-map: ^2.0.0 + checksum: 5d592ab3d186b386065dace8e01c543a922a904b3cfac39667de172455a6b3d0e8e1401574fecb8a12092ad0809b5a8fd15f1cc14d0666139a1bb77cd6ac2cf8 languageName: node linkType: hard @@ -5600,18 +5502,6 @@ __metadata: languageName: node linkType: hard -"vm2@npm:^3.9.8": - version: 3.9.18 - resolution: "vm2@npm:3.9.18" - dependencies: - acorn: ^8.7.0 - acorn-walk: ^8.2.0 - bin: - vm2: bin/vm2 - checksum: 1b5b20419a5cef19ab6c95d319c27d625b995785696582e6bec86a4b27704028f07b44dc04a7439a407c1bf8c17997c1aecf01886bb8b0e4e1a9b8c916977089 - languageName: node - linkType: hard - "walk@npm:2.3.15": version: 2.3.15 resolution: "walk@npm:2.3.15" @@ -5654,15 +5544,15 @@ __metadata: version: 0.0.0-use.local resolution: "wire-web-server@workspace:." dependencies: - "@types/express": 4.17.17 - "@types/express-sitemap-xml": 3.0.1 - "@types/express-useragent": 1.0.2 - "@types/fs-extra": 11.0.1 + "@types/express": 4.17.19 + "@types/express-sitemap-xml": 3.0.3 + "@types/express-useragent": 1.0.4 + "@types/fs-extra": 11.0.3 "@types/geolite2": 2.0.0 - "@types/hbs": 4.0.1 - "@types/jest": ^29.5.2 + "@types/hbs": 4.0.3 + "@types/jest": ^29.5.6 "@types/node": 18.11.18 - "@wireapp/commons": 5.1.0 + "@wireapp/commons": 5.2.1 dotenv: 16.3.1 dotenv-extended: 2.9.0 express: 4.18.2 @@ -5671,26 +5561,19 @@ __metadata: fs-extra: 11.1.1 geolite2: 1.3.0 hbs: 4.2.0 - helmet: 6.1.5 - http-status-codes: 2.2.0 - jest: 29.5.0 + helmet: 7.0.0 + http-status-codes: 2.3.0 + jest: 29.7.0 logdown: 3.3.1 - maxmind: 4.3.9 - nocache: 3.0.4 + maxmind: 4.3.10 + nocache: 4.0.0 opn: 6.0.0 pm2: 5.3.0 rimraf: 4.4.1 - typescript: 5.1.3 + typescript: 5.2.2 languageName: unknown linkType: soft -"word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f - languageName: node - linkType: hard - "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -5698,7 +5581,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -5709,6 +5592,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -5763,13 +5657,6 @@ __metadata: languageName: node linkType: hard -"xregexp@npm:2.0.0": - version: 2.0.0 - resolution: "xregexp@npm:2.0.0" - checksum: de62d1f01c9f1a67c80cafe48a3dc081b324249a0e88e65dc9acae9cce6d8e63c9d91c0f97e2ad2d8c5351c856c139c04dc55ebd941e59b7d1d5c1169e164cff - languageName: node - linkType: hard - "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -5812,8 +5699,8 @@ __metadata: linkType: hard "yargs@npm:^17.3.1": - version: 17.6.2 - resolution: "yargs@npm:17.6.2" + version: 17.7.2 + resolution: "yargs@npm:17.7.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 @@ -5822,7 +5709,7 @@ __metadata: string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 - checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard diff --git a/src/__mocks__/@wireapp/core-crypto.ts b/src/__mocks__/@wireapp/core-crypto.ts index 117b8ab4b75..0f1756edff7 100644 --- a/src/__mocks__/@wireapp/core-crypto.ts +++ b/src/__mocks__/@wireapp/core-crypto.ts @@ -27,3 +27,17 @@ export enum RatchetTreeType { Delta = 2, ByRef = 3, } +export enum Ciphersuite { + MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519 = 1, + MLS_128_DHKEMP256_AES128GCM_SHA256_P256 = 2, + MLS_128_DHKEMX25519_CHACHA20POLY1305_SHA256_Ed25519 = 3, + MLS_256_DHKEMX448_AES256GCM_SHA512_Ed448 = 4, + MLS_256_DHKEMP521_AES256GCM_SHA512_P521 = 5, + MLS_256_DHKEMX448_CHACHA20POLY1305_SHA512_Ed448 = 6, + MLS_256_DHKEMP384_AES256GCM_SHA384_P384 = 7, + MLS_128_X25519KYBER768DRAFT00_AES128GCM_SHA256_Ed25519 = 61489, +} +export enum CredentialType { + Basic = 1, + X509 = 2, +} diff --git a/src/__mocks__/@wireapp/core.ts b/src/__mocks__/@wireapp/core.ts index 9f13a066c3d..edf45749d6f 100644 --- a/src/__mocks__/@wireapp/core.ts +++ b/src/__mocks__/@wireapp/core.ts @@ -17,6 +17,8 @@ * */ +import {TaskScheduler} from '@wireapp/core/lib/util'; + import {EventEmitter} from 'stream'; export class Account extends EventEmitter { @@ -24,6 +26,11 @@ export class Account extends EventEmitter { federationEndpoints: true, }; + recurringTaskScheduler = { + registerTask: jest.fn(), + cancelTask: jest.fn(), + }; + configureMLSCallbacks = jest.fn(); service = { @@ -35,22 +42,34 @@ export class Account extends EventEmitter { renewKeyMaterial: jest.fn(), getClientIds: jest.fn(), getEpoch: jest.fn(), + conversationExists: jest.fn(), exportSecretKey: jest.fn(), leaveConferenceSubconversation: jest.fn(), on: this.on, emit: this.emit, off: this.off, + scheduleKeyMaterialRenewal: jest.fn(), }, asset: { uploadAsset: jest.fn(), }, conversation: { send: jest.fn(), - isMLSConversationEstablished: jest.fn(), + mlsGroupExistsLocally: jest.fn(), + joinByExternalCommit: jest.fn(), addUsersToMLSConversation: jest.fn(), messageTimer: { setConversationLevelTimer: jest.fn(), }, + removeUsersFromMLSConversation: jest.fn(), + removeUserFromConversation: jest.fn(), + }, + client: { + deleteClient: jest.fn(), }, }; } + +export const util = { + TaskScheduler, +}; diff --git a/src/i18n/ar-SA.json b/src/i18n/ar-SA.json index 17f0e457ef1..bc555c0f4a7 100644 --- a/src/i18n/ar-SA.json +++ b/src/i18n/ar-SA.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "اسم المستخدم هذا غير صالح", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "التالي", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "إضافة", "addParticipantsHeader": "أضف أشخاصًا", "addParticipantsHeaderWithCounter": "أضف أشخاصًا ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "تحقق من بريدك الإلكتروني الوارد واتبع الإرشادات التي تظهر.", "authPostedResendHeadline": "وصلك بريد", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "إضافة", "authVerifyAccountDetail": "هذا يمكنك من استخدام واير على أجهزة متعددة.", "authVerifyAccountHeadline": "إضافة عنوان البريد الإلكتروني وكلمة المرور", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "يمكنك طلب كودًا جديدًا {{expiration}}.", "authVerifyPasswordHeadline": "أدخل كلمة المرور الخاصة بك", "backupCancel": "إلغاء", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "لا يمكن حفظ الملف", "backupExportGenericErrorSecondary": "لم يكتمل النسخ الاحتياطي.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "يمكنك استخدام هذا لاستعادة التاريخ إذا فقدت حاسوبك أو انتقلت إلى حاسوب جديد.", "backupImportAccountErrorHeadline": "نسخة احتياطية خاطئة", "backupImportAccountErrorSecondary": "لا يمكنك استعادة تاريخ من حساب مختلف.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "حدث خطأ ما", "backupImportGenericErrorSecondary": "لا يمكن استعادة تاريخك.", "backupImportIncompatibleErrorHeadline": "نسخة احتياطية خاطئة", "backupImportIncompatibleErrorSecondary": "لا يمكنك استعادة تاريخ من حساب مختلف.", - "backupImportOutdatedErrorHeadline": "نسخة احتياطية غير متوافقة", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "يجري الإعداد…", "backupImportProgressSecondary": "يستعيد التاريخ · {{processed}} من {{total}} — {{progress}}%", "backupImportSuccessHeadline": "اُستعيد التاريخ.", "backupImportVersionErrorHeadline": "نسخة احتياطية غير متوافقة", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "حاول مرة أخرى", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "قبول", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "التحقق من الأجهزة", "conversationDeviceStartedUsingMany": " بدأ باستخدام", "conversationDeviceStartedUsingOne": " بدأ باستخدام", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " الأجهزة الخاصة بك", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "ضيف", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "انضم إلى المحادثة", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "هل لديك أصلا حساب؟", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "إنشاء حساب", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "تسجيل الدخول", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "اسمك", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} شخص", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "افتح الخريطة", "conversationMemberJoined": "[bold]{{name}}[/bold] اضاف {{users}} للمحادثه", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "وصلت", "conversationMissedMessages": "لم تستخدم هذا الجهاز منذ مدة. ربما لن تظهر بعض الرسائل هنا.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "البحث بحسب الاسم", "conversationParticipantsTitle": "أشخاص", "conversationPing": "بينغ", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": "بينغ", "conversationPlaybackError": "غير قادر على التشغيل", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • عبر giphy.com", "extensionsGiphyNoGifs": "عفوا، لا توجد صور متحركة gifs", "extensionsGiphyRandom": "عشوائي", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "حروف كثيرة جدا", "groupCreationPreferencesErrorNameShort": "على الأقل حرف واحد", "groupCreationPreferencesHeader": "أنشئ مجموعة", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "اسم المجموعة", "groupParticipantActionBlock": "احظر جهة الاتصال…", "groupParticipantActionCancelRequest": "ألغِ الطلب…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "التفاصيل", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "موافق", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "إزالة", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "إزالة؟", "modalConversationRemoveMessage": "لن يستطيع {{user}} أن يرسل أو يستقبل رسائل في هذه المحادثة.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "احظر {{user}}؟", "modalUserBlockMessage": "لن يستطيع {{user}} التواصل معك أو إضافتك إلى محادثات جماعية.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "إلغاء حظر", "modalUserUnblockHeadline": "إلغاء الحظر؟", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "اتصل بك", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "التاريخ", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "اكتشاف الأخطاء وإصلاحها", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/bn-BD.json b/src/i18n/bn-BD.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/bn-BD.json +++ b/src/i18n/bn-BD.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/ca-ES.json b/src/i18n/ca-ES.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/ca-ES.json +++ b/src/i18n/ca-ES.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/cs-CZ.json b/src/i18n/cs-CZ.json index 8e01057e820..310fe0524d8 100644 --- a/src/i18n/cs-CZ.json +++ b/src/i18n/cs-CZ.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Prosím, ověřte své údaje a zkuste to znovu", "BackendError.LABEL.ALREADY_INVITED": "Tento e-mail již byl pozván", - "BackendError.LABEL.BAD_REQUEST": "Neplatný vstup", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Tato e-mailová adresa není povolena", "BackendError.LABEL.BLACKLISTED_PHONE": "Toto telefonní číslo není povoleno", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Tato konverzace dosáhla limitu účastníků", "BackendError.LABEL.EMAIL_EXISTS": "Tato e-mailová adresa je již používána. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Toto uživatelské jméno je již obsazeno", "BackendError.LABEL.HANDLE_TOO_SHORT": "Prosím, zadejte uživatelské jméno s alespoň 2 znaky", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Neplatné uživatelské jméno", "BackendError.LABEL.INVALID_INVITATION_CODE": "Pozvání bylo odvoláno nebo vypršelo", "BackendError.LABEL.INVALID_OPERATION": "Neplatná operace", - "BackendError.LABEL.INVALID_PAYLOAD": "Neplatný vstup", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Telefonní číslo je neplatné", "BackendError.LABEL.KEY_EXISTS": "Tato e-mailová adresa je již zaregistrována. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Zkontrolujte své údaje a zkuste znovu", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Další", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Přidat", "addParticipantsHeader": "Přidat účastníky", "addParticipantsHeaderWithCounter": "Přidat účastníky ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Zkontrolujte doručenou poštu a postupujte dle instrukcí.", "authPostedResendHeadline": "Přišel ti email.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Přidat", "authVerifyAccountDetail": "To umožňuje používat {{brandName}} na více zařízeních.", "authVerifyAccountHeadline": "Přidat emailovou adresu a heslo.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Můžete si vyžádat nový kód {{expiration}}.", "authVerifyPasswordHeadline": "Zadejte své heslo", "backupCancel": "Zrušit", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Soubor nelze uložit", "backupExportGenericErrorSecondary": "Záloha nebyla dokončena.", "backupExportProgressCompressing": "Připravuje se soubor zálohy", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Nesprávná záloha", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Něco se pokazilo", "backupImportGenericErrorSecondary": "Vaše historie nemohla být obnovena.", "backupImportIncompatibleErrorHeadline": "Nesprávná záloha", "backupImportIncompatibleErrorSecondary": "Nelze obnovit historii z jiného účtu.", - "backupImportOutdatedErrorHeadline": "Nekompatibilní záloha", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Připravuje se…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Zkusit znovu", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Přijmout", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " ověřit zařízení", "conversationDeviceStartedUsingMany": " začal(a) používat", "conversationDeviceStartedUsingOne": " začal(a) používat", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " neověřen jeden ze", "conversationDeviceUserDevices": " přístroje uživatele {{user}}", "conversationDeviceYourDevices": " vaše přístroje", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Host", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Přihlásit se", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} lidí", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Otevřít mapu", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Doručeno", "conversationMissedMessages": "Toto zařízení jste nějakou dobu nepoužíval(a). Některé zprávy se nemusí zobrazit.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Hledat podle jména", "conversationParticipantsTitle": "Kontakty", "conversationPing": " pingl(a)", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingl(a)", "conversationPlaybackError": "Nelze přehrát", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • přes giphy.com", "extensionsGiphyNoGifs": "Uups, žádné gify", "extensionsGiphyRandom": "Náhodně", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Příliš mnoho znaků", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Vytvořit skupinu", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Název skupiny", "groupParticipantActionBlock": "Zablokovat…", "groupParticipantActionCancelRequest": "Zrušit žádost", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Odstranit", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Odstranit?", "modalConversationRemoveMessage": "{{user}} nebude moci odesílat nebo přijímat zprávy v této konverzaci.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokovat {{user}}?", "modalUserBlockMessage": "{{user}} vás nebude moci kontaktovat nebo přizvat ke skupinové konverzaci.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Odblokovat", "modalUserUnblockHeadline": "Odblokovat?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Volal(a)", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/da-DK.json b/src/i18n/da-DK.json index ef2745c9730..8c224ee8ae4 100644 --- a/src/i18n/da-DK.json +++ b/src/i18n/da-DK.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Næste", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Tilføj", "addParticipantsHeader": "Tilføj personer", "addParticipantsHeaderWithCounter": "Tilføj personer ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Tjek din email indbakke og følg anvisningerne.", "authPostedResendHeadline": "Du har post.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Tilføj", "authVerifyAccountDetail": "Dette gør, at du kan bruge {{brandName}} på flere enheder.", "authVerifyAccountHeadline": "Tilføj email adresse og adgangskode.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Du kan anmode om en ny kode {{expiration}}.", "authVerifyPasswordHeadline": "Indtast din adgangskode", "backupCancel": "Annuller", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Filen kunne ikke gemmes", "backupExportGenericErrorSecondary": "Sikkerhedskopiering blev ikke færdiggjort.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Du kan bruge dette til at gendanne din historik hvis du mister din computer eller skifter til en ny.", "backupImportAccountErrorHeadline": "Forkert sikkerhedskopi", "backupImportAccountErrorSecondary": "Du kan ikke gendanne historik fra en anden konto.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Noget gik galt", "backupImportGenericErrorSecondary": "Din historik kunne ikke gendannes.", "backupImportIncompatibleErrorHeadline": "Forkert sikkerhedskopi", "backupImportIncompatibleErrorSecondary": "Du kan ikke gendanne historik fra en anden konto.", - "backupImportOutdatedErrorHeadline": "Ukompatibel sikkerhedskopi", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Forbereder…", "backupImportProgressSecondary": "Gendanner historik · {{processed}} af {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Historik gendannet.", "backupImportVersionErrorHeadline": "Ukompatibel sikkerhedskopi", "backupImportVersionErrorSecondary": "Denne sikkerhedskopi er lavet på en nyere eller uddateret version af {{brandName}} og kan ikke blive gendannet her.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Prøv Igen", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Besvar", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " verificer enheder", "conversationDeviceStartedUsingMany": " begyndte at bruge", "conversationDeviceStartedUsingOne": " begyndte at bruge", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " har afbekræftet en af", "conversationDeviceUserDevices": " {{user}}’s enheder", "conversationDeviceYourDevices": " dine enheder", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Gæst", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Opret en konto", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log ind", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} personer", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Åben Kort", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Leveret", "conversationMissedMessages": "Du har ikke brugt denne enhed i et stykke tid. Nogle meddelelser vises måske ikke her.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Søg ved navn", "conversationParticipantsTitle": "Personer", "conversationPing": " pingede", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingede", "conversationPlaybackError": "Ikke i stand til at afspille", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Ups, ingen gifs", "extensionsGiphyRandom": "Tilfældig", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "For mange tegn", "groupCreationPreferencesErrorNameShort": "Mindst 1 tegn", "groupCreationPreferencesHeader": "Opret gruppe", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Gruppenavn", "groupParticipantActionBlock": "Bloker kontakt…", "groupParticipantActionCancelRequest": "Annuller anmodning", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Fjern", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Fjern?", "modalConversationRemoveMessage": "{{user}} vil ikke være i stand til at sende eller modtage beskeder i denne samtale.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Tilbagekalde link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokkér {{user}}?", "modalUserBlockMessage": "{{user}} vil ikke kunne kontakte dig eller tilføje dig til gruppesamtaler.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Fjern Blokering", "modalUserUnblockHeadline": "Fjern Blokering?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Ringede", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Historik", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Du kan kun gendanne historik fra en sikkerhedskopi til den samme platform. Din sikkerhedskopi vil overskrive samtaler du allerede har på denne enhed.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Fejlfinding", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 3c0e47c8ee5..e1fd7fba54b 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Bitte Eingaben überprüfen und nochmal versuchen", "BackendError.LABEL.ALREADY_INVITED": "Diese E-Mail-Adresse wurde bereits eingeladen", - "BackendError.LABEL.BAD_REQUEST": "Ungültige Eingabe", + "BackendError.LABEL.BAD_REQUEST": "Bitte Eingaben überprüfen und nochmal versuchen", "BackendError.LABEL.BLACKLISTED_EMAIL": "Diese E-Mail-Adresse ist nicht zulässig", "BackendError.LABEL.BLACKLISTED_PHONE": "Diese Telefonnummer ist nicht zulässig", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Bitte erneut versuchen oder anderen Code anfordern.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Diese Unterhaltung hat die Grenze der Teilnehmeranzahl erreicht", "BackendError.LABEL.EMAIL_EXISTS": "Die angegebene E-Mail-Adresse wird bereits verwendet. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "Sie können Ihren Benutzernamen nicht verwenden, da die Zwei-Faktor-Authentifizierung aktiviert ist. Bitte melden Sie sich stattdessen mit Ihrer E-Mail-Adresse an.", "BackendError.LABEL.HANDLE_EXISTS": "Dieser Benutzername ist bereits vergeben", "BackendError.LABEL.HANDLE_TOO_SHORT": "Bitte einen Benutzernamen mit mindestens zwei Zeichen eingeben", "BackendError.LABEL.INVALID_CODE": "Bitte erneut versuchen oder anderen Code anfordern.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Dieser Benutzername ist ungültig", "BackendError.LABEL.INVALID_INVITATION_CODE": "Einladung wurde widerrufen oder ist abgelaufen", "BackendError.LABEL.INVALID_OPERATION": "Ungültiger Vorgang", - "BackendError.LABEL.INVALID_PAYLOAD": "Ungültige Eingabe", + "BackendError.LABEL.INVALID_PAYLOAD": "Bitte Eingaben überprüfen und nochmal versuchen", "BackendError.LABEL.INVALID_PHONE": "Diese Telefonnummer ist ungültig", "BackendError.LABEL.KEY_EXISTS": "Die angegebene E-Mail-Adresse wurde bereits registriert. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Bitte Eingaben überprüfen und nochmal versuchen", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Zurück zu Unterhaltungsinfo", "accessibility.conversation.sectionLabel": "Unterhaltungsliste", "accessibility.conversationAssetImageAlt": "Bild von {{username}} vom {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Messaging-Optionen öffnen", + "accessibility.conversationContextMenuOpenLabel": "Weitere Optionen öffnen", "accessibility.conversationDetailsActionDevicesLabel": "Geräte anzeigen", "accessibility.conversationDetailsActionGroupAdminLabel": "Als Gruppen-Admin festlegen", "accessibility.conversationDetailsActionNotificationsLabel": "Einstellungen für Benachrichtigungen anzeigen", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Verpasster Ping", "accessibility.conversationStatusUnreadReply": "Ungelesene Antwort", "accessibility.conversationTitle": "{{username}} Status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Emoji suchen", "accessibility.giphyModal.close": "Fenster 'GIF' schließen", "accessibility.giphyModal.loading": "Gif laden", "accessibility.giphyModal.selectGif": "Gif auswählen", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Einstellungen – Geräte", "accessibility.headings.preferencesOptions": "Einstellungen – Optionen", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Emoji auswählen", + "accessibility.messageActionsMenuLabel": "Nachrichtenaktionen", + "accessibility.messageActionsMenuLike": "Mit Herz reagieren", + "accessibility.messageActionsMenuThumbsUp": "Mit Daumen hoch reagieren", "accessibility.messageDetailsReadReceipts": "Nachricht von {{readReceiptText}} gelesen, Details öffnen", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} Reaktionen, reagiere mit {{emojiName}} Emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} Reaktion, reagiere mit {{emojiName}} Emoji", "accessibility.messages.like": "Nachricht gefällt mir", "accessibility.messages.liked": "Nachricht gefällt mir nicht mehr", "accessibility.openConversation": "Profil von {{name}} öffnen", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Weiter", "accountForm.terms": "Ich akzeptiere die Nutzungsbedingungen", "accountForm.termsAndPrivacyPolicy": "Ich akzeptiere die Datenschutzerklärung und Nutzungsbedingungen", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Wiederholen", + "acme.error.button.secondary": "Abbrechen", + "acme.error.headline": "Ein Fehler ist aufgetreten", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Zertifikat erhalten", + "acme.inProgress.paragraph.alt": "Herunterladen…", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Zertifikat erhalten", + "acme.settingsChanged.button.secondary": "Später erinnern", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team-Einstellungen geändert", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Hinzufügen", "addParticipantsHeader": "Teilnehmer hinzufügen", "addParticipantsHeaderWithCounter": "Teilnehmer hinzufügen ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Überprüfen Sie Ihren Posteingang und folgen Sie den Anweisungen.", "authPostedResendHeadline": "Posteingang prüfen", "authSSOLoginTitle": "Mit Single Sign-On anmelden", + "authSetUsername": "Benutzernamen festlegen", "authVerifyAccountAdd": "Hinzufügen", "authVerifyAccountDetail": "Dadurch ist {{brandName}} auf mehreren Geräten nutzbar.", "authVerifyAccountHeadline": "E-Mail-Adresse und Passwort hinzufügen.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Du kannst {{expiration}} einen neuen Code anfordern.", "authVerifyPasswordHeadline": "Passwort eingeben", "backupCancel": "Abbrechen", + "backupDecryptionModalAction": "Weiter", + "backupDecryptionModalMessage": "Das Backup ist passwortgeschützt.", + "backupDecryptionModalPlaceholder": "Passwort", + "backupDecryptionModalTitle": "Passwort eingeben", + "backupEncryptionModalAction": "Jetzt sichern", + "backupEncryptionModalCloseBtn": "Abbrechen", + "backupEncryptionModalMessage": "Das Backup wird komprimiert und Sie können es mit einem Passwort verschlüsseln.", + "backupEncryptionModalPlaceholder": "Passwort (optional)", + "backupEncryptionModalTitle": "Passwort festlegen", "backupExportGenericErrorHeadline": "Datei nicht gespeichert", "backupExportGenericErrorSecondary": "Das Backup wurde nicht abgeschlossen.", "backupExportProgressCompressing": "Backup-Datei wird erstellt", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Damit können Sie den Gesprächsverlauf wiederherstellen, wenn Sie Ihren Computer verlieren oder einen neuen verwenden.", "backupImportAccountErrorHeadline": "Falsches Backup", "backupImportAccountErrorSecondary": "Der Gesprächsverlauf eines anderen Kontos kann nicht wiederhergestellt werden.", + "backupImportFormatErrorHeadline": "Inkompatibles Backup", + "backupImportFormatErrorSecondary": "Das angegebene Backup-Format wird nicht unterstützt", "backupImportGenericErrorHeadline": "Fehler aufgetreten", "backupImportGenericErrorSecondary": "Der Gesprächsverlauf konnte nicht wiederhergestellt werden.", "backupImportIncompatibleErrorHeadline": "Falsches Backup", "backupImportIncompatibleErrorSecondary": "Der Gesprächsverlauf eines anderen Benutzerkontos kann nicht wiederhergestellt werden.", - "backupImportOutdatedErrorHeadline": "Inkompatibles Backup", + "backupImportPasswordErrorHeadline": "Falsches Passwort", + "backupImportPasswordErrorSecondary": "Bitte überprüfen Sie Ihre Eingabe und versuchen Sie es erneut", "backupImportProgressHeadline": "Vorbereiten…", "backupImportProgressSecondary": "Gesprächsverlauf wiederherstellen · {{processed}} von {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Gesprächsverlauf wiederhergestellt.", "backupImportVersionErrorHeadline": "Inkompatibles Backup", "backupImportVersionErrorSecondary": "Diese Backup-Datei wurde von einer anderen Version von {{brandName}} erstellt und kann deshalb nicht wiederhergestellt werden.", + "backupPasswordHint": "Verwenden Sie mindestens {{minPasswordLength}} Zeichen, mit einem Kleinbuchstaben, einem Großbuchstaben, einer Zahl und einem Sonderzeichen.", "backupTryAgain": "Erneut versuchen", "buttonActionError": "Ihre Antwort wurde nicht gesendet, bitte erneut versuchen.", "callAccept": "Annehmen", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Geräte überprüfen", "conversationDeviceStartedUsingMany": " haben begonnen,", "conversationDeviceStartedUsingOne": " hat begonnen,", + "conversationDeviceStartedUsingYou": " haben begonnen,", "conversationDeviceUnverified": " haben die Überprüfung für", "conversationDeviceUserDevices": " ein Gerät von {{user}} widerrufen", "conversationDeviceYourDevices": " eines Ihrer Geräte widerrufen", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Kontakte", "conversationGuestIndicator": "Gast", "conversationImageAssetRestricted": "Empfang von Bildern ist verboten", - "conversationJoin.buttonExistentAccountOpen": "In {brandName} öffnen", - "conversationJoin.existentAccountHeadline": "{name}, Sie wurden zu einer Unterhaltung in {brandName} eingeladen", + "conversationJoin.existentAccountJoinInBrowser": "Im Browser beitreten", "conversationJoin.existentAccountJoinWithoutLink": "an der Unterhaltung teilnehmen", - "conversationJoin.existentAccountJoinWithoutText": "Ohne ein Benutzerkonto {existentAccountJoinWithoutLink}", - "conversationJoin.existentAccountSubhead": "Audio- und Videokonferenzen, Textnachrichten, Teilen von Dateien und Bildschirmfreigabe – alles Ende-zu-Ende verschlüsselt.", + "conversationJoin.existentAccountUserName": "Sie sind als {selfName} angemeldet", "conversationJoin.fullConversationHeadline": "Sie konnten der Unterhaltung nicht beitreten", "conversationJoin.fullConversationSubhead": "Die maximale Teilnehmeranzahl in dieser Unterhaltung wurde erreicht.", "conversationJoin.hasAccount": "Bereits registriert?", - "conversationJoin.headline": "Sie wurden zu einer Unterhaltung in {brandName} eingeladen", - "conversationJoin.invalidCreateAccountLink": "Benutzerkonto erstellen", - "conversationJoin.invalidCreateAccountText": "für Gruppenkommunikation und Telefonkonferenzen.", + "conversationJoin.headline": "Die Unterhaltung findet auf {{domain}} statt", "conversationJoin.invalidHeadline": "Unterhaltung nicht gefunden", "conversationJoin.invalidSubhead": "Der Link zu dieser Gruppenunterhaltung ist abgelaufen oder nicht mehr gültig.", - "conversationJoin.loginLink": "Anmelden", + "conversationJoin.join": "Beitreten", + "conversationJoin.joinButton": "Als temporärer Gast teilnehmen", + "conversationJoin.joinWithOtherAccount": "Mit anderem Benutzerkonto beitreten", + "conversationJoin.mainHeadline": "Unterhaltung beitreten", "conversationJoin.namePlaceholder": "Ihr Name", + "conversationJoin.noAccountHead": "Sie haben kein Benutzerkonto? ", "conversationJoin.subhead": "Nehmen Sie als temporärer Gast an der Unterhaltung teil (Zugang verfällt nach 24 Stunden)", "conversationJoin.unsupportedJoinHeadline": "Sie wurden zu einer Unterhaltung in {brandName} eingeladen", "conversationJoin.unsupportedJoinMobileSubhead": "Bitte diesen Link auf dem Computer öffnen.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favoriten", "conversationLabelGroups": "Gruppen", "conversationLabelPeople": "Personen", - "conversationLikesCaption": "{{number}} Personen", + "conversationLikesCaptionPlural": "{{number}} Personen", + "conversationLikesCaptionReactedPlural": "reagierten mit {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reagierte mit {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} Person", "conversationLocationLink": "Standort anzeigen", "conversationMemberJoined": "[bold]{{name}}[/bold] hat {{users}} hinzugefügt", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] hat {{users}} und [showmore]{{count}} andere[/showmore] hinzugefügt", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] hat {{users}} entfernt", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} wurde aus dieser Unterhaltung entfernt, da die gesetzliche Aufbewahrung aktiviert wurde. [link]Mehr erfahren[/link]", "conversationMemberRemovedYou": "[bold]Sie[/bold] haben {{users}} entfernt", + "conversationMemberWereRemoved": "{{users}} wurden aus der Unterhaltung entfernt", "conversationMessageDelivered": "Zugestellt", "conversationMissedMessages": "Sie haben dieses Gerät eine Zeit lang nicht benutzt. Einige Nachrichten werden hier möglicherweise nicht angezeigt.", "conversationModalRestrictedFileSharingDescription": "Diese Datei konnte aufgrund von Einschränkungen bei der Dateifreigabe nicht geteilt werden.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Nach Namen suchen", "conversationParticipantsTitle": "Unterhaltungsübersicht", "conversationPing": " hat gepingt", + "conversationPingConfirmTitle": "Sind Sie sicher, dass Sie {{memberCount}} Personen anpingen möchten?", "conversationPingYou": " haben gepingt", "conversationPlaybackError": "Konnte nicht abgespielt werden", "conversationPopoverFavorite": "Zu Favoriten hinzufügen", @@ -511,13 +557,16 @@ "extensionsBubbleButtonGif": "Gif", "extensionsGiphyButtonMore": "Neues Gif", "extensionsGiphyButtonOk": "Senden", - "extensionsGiphyMessage": "{{tag}} • über giphy.com", + "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Kein GIF vorhanden", "extensionsGiphyRandom": "Zufällig", - "failedToAddParticipant": "[bold]{{name}}[/bold] konnte nicht zur Gruppe hinzugefügt werden, da das Backend von [bold]{{domain}}[/bold] nicht erreicht werden konnte.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] konnte nicht zur Gruppe hinzugefügt werden, da das Backend von [bold]{{domain}}[/bold] nicht erreicht werden konnte.", - "failedToAddParticipants": "[bold]{{total}} Teilnehmer[/bold] konnten nicht zur Gruppe hinzugefügt werden.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] und [bold]{{name}}[/bold] konnten nicht zur Gruppe hinzugefügt werden, da das Backend von [bold]{{domain}}[/bold] nicht erreicht werden konnte.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] konnte nicht zur Gruppe hinzugefügt werden, da das Backend nicht mit den Backends aller Gruppenteilnehmer verbunden ist.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] konnte nicht zur Gruppe hinzugefügt werden, da das Backend von [bold]{{domain}}[/bold] nicht erreicht werden konnte.", + "failedToAddParticipantsPlural": "[bold]{{total}} Teilnehmer[/bold] konnten nicht zur Gruppe hinzugefügt werden.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] und [bold]{{name}}[/bold] konnten nicht zur Gruppe hinzugefügt werden, da ihre Backends nicht miteinander verbunden sind.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] und [bold]{{name}}[/bold] konnten nicht zur Gruppe hinzugefügt werden, da das Backend von [bold]{{domain}}[/bold] nicht erreicht werden konnte.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] konnte nicht zur Gruppe hinzugefügt werden, da die Backends nicht miteinander verbunden sind.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] konnte nicht zur Gruppe hinzugefügt werden, da das Backend von [bold]{{domain}}[/bold] nicht erreicht werden konnte.", "featureConfigChangeModalApplock": "Die verbindliche App-Sperre ist deaktiviert. Sie benötigen kein Kennwort oder keine biometrische Authentifizierung mehr, um die App zu entsperren.", "featureConfigChangeModalApplockHeadline": "Team-Einstellungen geändert", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Kamera in Anrufen ist deaktiviert", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Selbstlöschende Nachrichten sind aktiviert. Sie können einen Timer setzen, bevor Sie eine Nachricht schreiben.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Selbstlöschende Nachrichten sind ab jetzt verbindlich. Neue Nachrichten werden nach {{timeout}} gelöscht.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "Es gab eine Änderung bei {{brandName}}", + "federationConnectionRemove": "Backends [bold]{{backendUrlOne}}[/bold] und [bold]{{backendUrlTwo}}[/bold] sind nicht mehr verbunden.", + "federationDelete": "[bold]Ihr Backend[/bold] ist nicht mehr mit [bold]{{backendUrl}}.[/bold] verbunden.", "fileTypeRestrictedIncoming": "Datei von [bold]{{name}}[/bold] kann nicht geöffnet werden", "fileTypeRestrictedOutgoing": "Das Senden und Empfangen von Dateien mit der Endung {{fileExt}} ist in Ihrer Organisation nicht erlaubt", "folderViewTooltip": "Ordner", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Der eingegebene Gruppenname ist zu lang", "groupCreationPreferencesErrorNameShort": "Mindestens 1 Zeichen", "groupCreationPreferencesHeader": "Gruppe erstellen", + "groupCreationPreferencesNonFederatingEditList": "Teilnehmerliste bearbeiten", + "groupCreationPreferencesNonFederatingHeadline": "Gruppe kann nicht erstellt werden", + "groupCreationPreferencesNonFederatingLeave": "Gruppenerstellung verwerfen", + "groupCreationPreferencesNonFederatingMessage": "Personen der Backends {{backends}} können nicht derselben Gruppenunterhaltung beitreten, da ihre Backends nicht miteinander kommunizieren können. Um die Gruppe zu erstellen, entfernen Sie die betroffenen Teilnehmer. [link]Mehr erfahren[/link]", "groupCreationPreferencesPlaceholder": "Gruppenname", "groupParticipantActionBlock": "Kontakt blockieren…", "groupParticipantActionCancelRequest": "Anfrage abbrechen…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Nachricht konnte aufgrund von Verbindungsproblemen nicht gesendet werden.", "messageCouldNotBeSentRetry": "Wiederholen", "messageDetailsEdited": "Bearbeitet: {{edited}}", - "messageDetailsNoLikes": "Niemand hat diese Nachricht bisher mit Gefällt mir markiert.", + "messageDetailsNoReactions": "Niemand hat bisher auf diese Nachricht reagiert.", "messageDetailsNoReceipts": "Niemand hat diese Nachricht bisher gelesen.", "messageDetailsReceiptsOff": "Lesebestätigungen waren beim Senden dieser Nachricht nicht aktiviert.", "messageDetailsSent": "Gesendet: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Gefällt{{count}}", + "messageDetailsTitleReactions": "Reaktionen{{count}}", "messageDetailsTitleReceipts": "Gelesen{{count}}", "messageFailedToSendHideDetails": "Details ausblenden", "messageFailedToSendParticipants": "{{count}} Teilnehmer", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "wird Ihre Nachricht nicht erhalten.", "messageFailedToSendWillReceivePlural": "werden Ihre Nachricht später erhalten.", "messageFailedToSendWillReceiveSingular": "wird Ihre Nachricht später erhalten.", + "mlsConversationRecovered": "Sie haben das Gerät eine Weile nicht benutzt oder es ist ein Problem aufgetreten. Einige ältere Nachrichten werden hier eventuell nicht angezeigt.", "mlsToggleInfo": "Wenn dies aktiviert ist, wird für die Unterhaltung das neue Messaging-Layer-Security-Protokoll (MLS) verwendet.", "mlsToggleName": "MLS", "modalAccountCreateAction": "Verstanden", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Status der Dienste konnte nicht geändert werden.", "modalConversationRemoveAction": "Entfernen", "modalConversationRemoveCloseBtn": "Fenster 'Entfernen' schließen", - "modalConversationRemoveGuestsAndServicesHeadline": "Zugang deaktivieren?", + "modalConversationRemoveGuestsHeadline": "Gastzugang deaktivieren?", "modalConversationRemoveGuestsMessage": "Aktuelle Gäste werden aus der Unterhaltung entfernt. Neue Gäste können nicht hinzugefügt werden.", + "modalConversationRemoveGuestsOrServicesAction": "Deaktivieren", "modalConversationRemoveHeadline": "Entfernen?", "modalConversationRemoveMessage": "{{user}} wird in dieser Unterhaltung keine Nachrichten schicken oder empfangen können.", + "modalConversationRemoveServicesHeadline": "Zugang zu Diensten deaktivieren?", "modalConversationRemoveServicesMessage": "Aktuelle Dienste werden aus der Unterhaltung entfernt. Neue Dienste können nicht hinzugefügt werden.", "modalConversationRevokeLinkAction": "Link widerrufen", "modalConversationRevokeLinkCloseBtn": "Fenster 'Link widerrufen' schließen", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "{{user}} blockieren?", "modalUserBlockMessage": "{{user}} wird Sie nicht mehr kontaktieren oder zu Gruppenunterhaltungen hinzufügen können.", "modalUserBlockedForLegalHold": "Dieser Nutzer ist aufgrund der gesetzlichen Aufbewahrung gesperrt. [link]Mehr erfahren[/link]", + "modalUserCannotAcceptConnectionMessage": "Kontaktanfrage konnte nicht angenommen werden", "modalUserCannotBeAddedHeadline": "Gäste können nicht hinzugefügt werden", - "modalUserCannotConnectLegalHoldHeadline": "Keine Verbindung zu diesem Benutzer ", - "modalUserCannotConnectLegalHoldMessage": "Aufgrund der gesetzlichen Aufbewahrung können Sie sich mit diesem Nutzer nicht verbinden. [link]Mehr erfahren[/link]", + "modalUserCannotCancelConnectionMessage": "Kontaktanfrage konnte nicht abgebrochen werden", + "modalUserCannotConnectHeadline": "Verbindung nicht möglich", + "modalUserCannotIgnoreConnectionMessage": "Kontaktanfrage konnte nicht ignoriert werden", + "modalUserCannotSendConnectionLegalHoldMessage": "Aufgrund der gesetzlichen Aufbewahrung können Sie sich mit diesem Nutzer nicht verbinden. [link]Mehr erfahren[/link]", + "modalUserCannotSendConnectionMessage": "Kontaktanfrage konnte nicht gesendet werden", + "modalUserCannotSendConnectionNotFederatingMessage": "Sie können keine Kontaktanfrage senden, da Ihr Backend nicht mit dem von {{Benutzername}} verbunden ist.", "modalUserLearnMore": "Mehr erfahren", "modalUserUnblockAction": "Freigeben", "modalUserUnblockHeadline": "Freigeben?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Hat angerufen", "oauth.allow": "Erlauben", "oauth.cancel": "Nicht erlauben", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "Wenn Sie die oben aufgeführten Berechtigungen zulassen, kann Ihr Outlook-Kalender eine Verbindung zu Wire herstellen. Wenn Sie die Erlaubnis nicht erteilen, können Sie dieses Add-In nicht verwenden.", "oauth.headline": "Berechtigungen", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Erfahren Sie mehr über diese Berechtigungen", "oauth.logout": "Konto wechseln", "oauth.privacypolicy": "Wires Datenschutzerklärung", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "Funktionskonfigurationen Ihres Teams anzuzeigen", + "oauth.scope.read_self": "Ihren Wire Benutzer- und Profilnamen sowie Ihre E-Mail-Adresse anzuzeigen", + "oauth.scope.write_conversations": "Unterhaltungen in Wire zu erstellen", + "oauth.scope.write_conversations_code": "Gäste-Links zu Unterhaltungen in Wire zu erstellen", + "oauth.subhead": "Microsoft Outlook benötigt Ihre Erlaubnis, um:", "offlineBackendLearnMore": "Mehr erfahren", "ongoingAudioCall": "Laufender Audioanruf mit {{conversationName}}.", "ongoingGroupAudioCall": "Laufende Telefonkonferenz mit {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Gesprächsverlauf", "preferencesOptionsBackupImportHeadline": "Wiederherstellen", "preferencesOptionsBackupImportSecondary": "Es können nur Backup-Dateien derselben Plattform wiederhergestellt werden. Der Inhalt der Backup-Datei ersetzt den Gesprächsverlauf auf diesem Gerät.", + "preferencesOptionsBackupTryAgain": "Erneut versuchen", "preferencesOptionsCall": "Anrufe", "preferencesOptionsCallLogs": "Fehlerbehebung", "preferencesOptionsCallLogsDetail": "Speichern Sie den Anruf-Fehlerbericht. Diese Informationen helfen dem {{BrandName}}-Support bei der Klärung des Problems.", diff --git a/src/i18n/el-GR.json b/src/i18n/el-GR.json index 257a3305fb6..83b447cc112 100644 --- a/src/i18n/el-GR.json +++ b/src/i18n/el-GR.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Μη έγκυρη είσοδος", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "Αυτός ο αριθμός τηλεφώνου δεν επιτρέπεται", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Η πρόσκληση ανεκλήθη ή έλήξε", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Μη έγκυρη είσοδος", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Αυτός ο αριθμός τηλεφώνου δεν είναι έγκυρος", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Επόμενο", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Προσθήκη", "addParticipantsHeader": "Προσθήκη ατόμων", "addParticipantsHeaderWithCounter": "Προσθήκη ατόμων ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Ελέγξτε τα email σας και ακολουθήστε τις οδηγίες που θα βρείτε.", "authPostedResendHeadline": "Έχετε μήνυμα.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Προσθήκη", "authVerifyAccountDetail": "Αυτό σας επιτρέπει να χρησιμοποιήσετε το {{brandName}} σε πολλαπλές συσκευές.", "authVerifyAccountHeadline": "Προσθέστε email και κωδικό πρόσβασης.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Μπορείτε να ζητήσετε νέο κωδικό {{expiration}}.", "authVerifyPasswordHeadline": "Εισάγετε τον κωδικό σας", "backupCancel": "Ακύρωση", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Κάτι πήγε στραβά", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Αποδοχή", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "επαληθευμένες συσκευές", "conversationDeviceStartedUsingMany": "έναρξη χρήσεως", "conversationDeviceStartedUsingOne": "έναρξη χρήσεως", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " μία εξ αυτών είναι μη επαληθευμένη", "conversationDeviceUserDevices": " {{user}}´ς συσκευές", "conversationDeviceYourDevices": "οι συσκευές σας", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Επισκέπτης", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Έχετε ήδη λογαριασμό;", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Δημιουργία λογαριασμού", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Σύνδεση", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Το όνομά σας", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} άτομα", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Άνοιγμα χάρτη", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Παραδόθηκε", "conversationMissedMessages": "Δεν έχετε χρησιμοποιήσει αυτή την συσκευή για ένα χρονικό διάστημα. Ορισμένα μηνύματα ενδέχεται να μην εμφανίζονται εδώ.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Αναζήτηση βάση ονόματος", "conversationParticipantsTitle": "Άτομα", "conversationPing": " σκουντημα", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " σκουντημα", "conversationPlaybackError": "Αδύνατη η αναπαραγωγή", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • μέσω giphy.com", "extensionsGiphyNoGifs": "Ουπς! δεν υπάρχουν gifs", "extensionsGiphyRandom": "Τυχαία", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Δημιουργία ομάδος", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Όνομα ομάδος", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Ακύρωση αιτήματος", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "Εντάξει", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Αφαίρεση", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Αφαίρεση,", "modalConversationRemoveMessage": "{{user}} δεν θα μπορεί να στείλει ή να λάβει μηνύματα σε αυτή την συνομιλία.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Ανάκληση συνδέσμου", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Αποκλεισμός {{user}},", "modalUserBlockMessage": "{{user}} δεν θα μπορέσει να επικοινωνήσει μαζί σας ή να σας προσθέσει σε ομαδικές συνομιλίες.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Άρση αποκλεισμού", "modalUserUnblockHeadline": "Άρση αποκλεισμού", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Κάλεσε", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index f36c51a4641..5b809043404 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -701,12 +756,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -718,6 +773,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -885,10 +941,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -949,9 +1007,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -997,16 +1060,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1126,6 +1189,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/es-ES.json b/src/i18n/es-ES.json index ca1c7ab6918..1e519233a6f 100644 --- a/src/i18n/es-ES.json +++ b/src/i18n/es-ES.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Revise sus datos e inténtelo de nuevo", "BackendError.LABEL.ALREADY_INVITED": "Este correo electrónico ya ha sido invitado", - "BackendError.LABEL.BAD_REQUEST": "Entrada inválida", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Esta dirección de correo electrónico no está permitida", "BackendError.LABEL.BLACKLISTED_PHONE": "Este número de teléfono no está permitido", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Esta conversación ha alcanzado el límite de participantes", "BackendError.LABEL.EMAIL_EXISTS": "Esta dirección de correo electrónico ya está en uso.{supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Este usuario ya está tomado", "BackendError.LABEL.HANDLE_TOO_SHORT": "Proporcione un nombre de usuario de 2 caracteres como mínimo", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Este usuario no es válido", "BackendError.LABEL.INVALID_INVITATION_CODE": "La invitación ha sido revocada o ha expirado", "BackendError.LABEL.INVALID_OPERATION": "Operación no válida", - "BackendError.LABEL.INVALID_PAYLOAD": "Entrada inválida", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Este número de teléfono no es válido", "BackendError.LABEL.KEY_EXISTS": "La dirección de correo electrónico que nos proporcionó ya ha sido registrada.{supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Revise sus datos e inténtelo de nuevo", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Mensaje visto por {{readReceiptText}}, abrir detalle", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Siguiente", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Agregar", "addParticipantsHeader": "Agregar participantes", "addParticipantsHeaderWithCounter": "Añadir participantes ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Revise su buzón de correo electrónico y siga las instrucciones", "authPostedResendHeadline": "Tiene un correo electrónico.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Agregar", "authVerifyAccountDetail": "Esto le permite usar {{brandName}} en múltiples dispositivos.", "authVerifyAccountHeadline": "Agregar dirección de correo electrónico y contraseña.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Puede solicitar un nuevo código en {{expiration}}.", "authVerifyPasswordHeadline": "Introduzca su contraseña", "backupCancel": "Cancelar", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "El archivo no se ha podido guardar", "backupExportGenericErrorSecondary": "La copia de seguridad no se ha completado.", "backupExportProgressCompressing": "Preparando el archivo de respaldo", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Puedes utilizar esto para restaurar el historial de conversaciones si pierdes la computadora o cambias a una nueva.", "backupImportAccountErrorHeadline": "Copia de seguridad incorrecta", "backupImportAccountErrorSecondary": "No se puede restaurar el historial desde una cuenta diferente.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Algo salió mal", "backupImportGenericErrorSecondary": "Tu historial no pudo ser restaurado.", "backupImportIncompatibleErrorHeadline": "Copia de seguridad incorrecta", "backupImportIncompatibleErrorSecondary": "No se puede restaurar el historial desde una cuenta diferente.", - "backupImportOutdatedErrorHeadline": "Copia de seguridad incompatible", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparando…", "backupImportProgressSecondary": "Restaurando la copia de seguridad. {{processed}} de {{total}} - {{progress}}%", "backupImportSuccessHeadline": "Historia restaurada.", "backupImportVersionErrorHeadline": "Copia de seguridad incompatible", "backupImportVersionErrorSecondary": "Esta copia de seguridad fue creada por una versión antigua o más reciente de {{brandName}} y no se puede restaurar aquí.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Intentar de nuevo", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Aceptar", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verificar dispositivos", "conversationDeviceStartedUsingMany": " comenzó a utilizar", "conversationDeviceStartedUsingOne": " comenzó a utilizar", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " uno no verificado de", "conversationDeviceUserDevices": " {{user}} dispositivos", "conversationDeviceYourDevices": " tus dispositivos", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Invitado", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Abrir en {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Únase a la conversación", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "¿Ya tiene una cuenta?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Crear una cuenta", - "conversationJoin.invalidCreateAccountText": "para mensajería grupal y llamadas de conferencia.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Iniciar sesión", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Su nombre", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Abrir este enlace en el equipo.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} personas", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Abrir Mapa", "conversationMemberJoined": "[bold]{{name}}[/bold] añadió a {{users}} a la conversación", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] agregó a {{users}} y [showmore]{{count}} más[/showmore] a la conversación", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] ha removido a {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Tú[/bold] has removido a {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Entregado", "conversationMissedMessages": "No has utilizado este dispositivo durante un tiempo. Algunos mensajes no aparecerán aquí.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Buscar por nombre", "conversationParticipantsTitle": "Personas", "conversationPing": " ping", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " ping", "conversationPlaybackError": "Incapaz de reproducir", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} · vía giphy.com", "extensionsGiphyNoGifs": "Uups, no hay gifs", "extensionsGiphyRandom": "Aleatorio", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Demasiados caracteres", "groupCreationPreferencesErrorNameShort": "Por lo menos 1 caracter", "groupCreationPreferencesHeader": "Crear grupo", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Nombre del grupo", "groupParticipantActionBlock": "Bloquear…", "groupParticipantActionCancelRequest": "Cancelar solicitud", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Eliminar", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "¿Quitar?", "modalConversationRemoveMessage": "{{user}} no podrá enviar o recibir mensajes en esta conversación.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revocar enlace", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "¿Bloquear a {{user}}?", "modalUserBlockMessage": "{{user}} no podrá ponerse en contacto contigo o añadirte a chats de grupo.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Desbloquear", "modalUserUnblockHeadline": "¿Desbloquear?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Llamó", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Historia", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Sólo puede restaurar el historial desde una copia de seguridad de la misma plataforma. Su copia de seguridad sobrescribirá las conversaciones que pueda tener en este dispositivo.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Solución de problemas", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/et-EE.json b/src/i18n/et-EE.json index d5ff592e60b..7e692621d01 100644 --- a/src/i18n/et-EE.json +++ b/src/i18n/et-EE.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Palun kinnita oma andmed ja proovi uuesti", "BackendError.LABEL.ALREADY_INVITED": "See e-posti aadress on juba kutsutud", - "BackendError.LABEL.BAD_REQUEST": "Vigane sisend", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "See e-posti aadress pole lubatud", "BackendError.LABEL.BLACKLISTED_PHONE": "See telefoninumber pole lubatud", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "See vestlus on jõudnud liikmete piirini", "BackendError.LABEL.EMAIL_EXISTS": "See e-posti aadress on juba kasutusel. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "See kasutajanimi on juba kasutusel", "BackendError.LABEL.HANDLE_TOO_SHORT": "Palun sisesta vähemalt 2-tähemärgiline kasutajanimi", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "See kasutajanimi on sobimatu", "BackendError.LABEL.INVALID_INVITATION_CODE": "Kutse on tühistatud või aegunud", "BackendError.LABEL.INVALID_OPERATION": "Sobimatu toiming", - "BackendError.LABEL.INVALID_PAYLOAD": "Vigane sisend", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "See telefoninumber on sobimatu", "BackendError.LABEL.KEY_EXISTS": "Sisestatud e-posti aadress on juba registreeritud. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Palun kinnita oma andmed ja proovi uuesti", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Järgmine", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Lisa", "addParticipantsHeader": "Lisa osalejaid", "addParticipantsHeaderWithCounter": "Lisa osalejaid ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Kontrolli oma e-postkasti ja järgi kirjas olevaid juhiseid.", "authPostedResendHeadline": "Sulle tuli kiri.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Lisa", "authVerifyAccountDetail": "See võimaldab kasutada {{brandName}}’i mitmes seadmes.", "authVerifyAccountHeadline": "Lisa meiliaadress ja parool.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Sa võid uue koodi tellida {{expiration}} pärast.", "authVerifyPasswordHeadline": "Sisesta oma parool", "backupCancel": "Tühista", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Faili ei saanud salvestada", "backupExportGenericErrorSecondary": "Varundust ei viidud lõpule.", "backupExportProgressCompressing": "Valmistan varundusfaili ette", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Sa saad seda kasutada, et taastada ajalugu, kui kaotad oma arvuti või hakkad kasutama uut.", "backupImportAccountErrorHeadline": "Vale varundus", "backupImportAccountErrorSecondary": "Sa ei saa taastada teise konto ajalugu.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Midagi läks valesti", "backupImportGenericErrorSecondary": "Sinu ajalugu ei saanud taastada.", "backupImportIncompatibleErrorHeadline": "Vale varundus", "backupImportIncompatibleErrorSecondary": "Sa ei saa taastada teise konto ajalugu.", - "backupImportOutdatedErrorHeadline": "Ühildumatu varundus", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Ettevalmistamine…", "backupImportProgressSecondary": "Taastan ajalugu · {{processed}} / {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Ajalugu taastatud.", "backupImportVersionErrorHeadline": "Ühildumatu varundus", "backupImportVersionErrorSecondary": "See varundus loodi uuema või aegunud Wire’i versiooni kaudu ja seda ei saa siin taastada.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Proovi uuesti", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Nõustu", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Kinnita seadmeid", "conversationDeviceStartedUsingMany": " hakkas kasutama", "conversationDeviceStartedUsingOne": " hakkas kasutama", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " eemaldasid kinnituse ühel", "conversationDeviceUserDevices": " kasutaja {{user}} seadmed", "conversationDeviceYourDevices": " oma seadmetest", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Külaline", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Ava {brandName}'is", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Ühine vestlusega", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Konto juba olemas?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Loo konto", - "conversationJoin.invalidCreateAccountText": "grupivestluse ja konverentskõnede tegemiseks.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Logi sisse", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Sinu nimi", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Ava see link oma arvutis.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} inimest", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Ava kaart", "conversationMemberJoined": "[bold]{{name}}[/bold] lisas vestlusesse {{users}}", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] lisas vestlusesse {{users}} ja [showmore]{{count}} teist[/showmore]", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] eemaldas {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Sina[/bold] eemaldasid {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Kohale toimetatud", "conversationMissedMessages": "Sa ei ole seda seadet mõnda aega kasutanud. Osad sõnumid ei pruugi siia ilmuda.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Otsi nime järgi", "conversationParticipantsTitle": "inimest", "conversationPing": " pingis", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingisid", "conversationPlaybackError": "Ei saa esitada", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • giphy.com kaudu", "extensionsGiphyNoGifs": "Ups, gif-e pole", "extensionsGiphyRandom": "Juhuslik", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Liiga palju tähemärke", "groupCreationPreferencesErrorNameShort": "Vähemalt 1 tähemärk", "groupCreationPreferencesHeader": "Uus grupp", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Grupi nimi", "groupParticipantActionBlock": "Blokeeri…", "groupParticipantActionCancelRequest": "Tühista taotlus…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Muudetud: {{edited}}", - "messageDetailsNoLikes": "Keegi pole seda sõnumit veel meeldivaks märkinud.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Keegi pole seda sõnumit veel lugenud.", "messageDetailsReceiptsOff": "Lugemiskinnitused ei olnud selle sõnumi saatmishetkel sees.", "messageDetailsSent": "Saadetud: {{sent}}", "messageDetailsTitle": "Üksikasjad", - "messageDetailsTitleLikes": "Meeldis{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Loetud{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Eemalda", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Eemaldad?", "modalConversationRemoveMessage": "{{user}} ei saa siin vestluses sõnumeid saata ega vastu võtta.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Tühista link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokeerid kasutaja {{user}}?", "modalUserBlockMessage": "{{user}} ei saa sulle sõnumeid saata ega sind grupivestlustesse lisada.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Eemalda blokeering", "modalUserUnblockHeadline": "Eemaldad blokeeringu?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "helistas", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Ajalugu", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Sa saad taastada ajalugu ainult sama platvormi varundusest. Sinu varundus kirjutab üle vestlused, mis sul võivad selles seadmes olla.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Veaotsing", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/fa-IR.json b/src/i18n/fa-IR.json index 3cbed1e3151..fb24a96edc7 100644 --- a/src/i18n/fa-IR.json +++ b/src/i18n/fa-IR.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "اضافه کردن", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "صندوق ایمیل خود را بررسی و دستورالعمل‌های داخل ایمیل را دنبال کنید.", "authPostedResendHeadline": "شما ایمیل دریافت کردید.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "اضافه کردن", "authVerifyAccountDetail": "این به شما کمک می‌کند تا در دستگاه‌های مختلف از {{brandName}} استفاده کنید.", "authVerifyAccountHeadline": "ایمیل آدرس خود و رمز عبور جدیدی را وارد کنید.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "شما میتوانید یک کد {{expiration}} جدید درخواست کنید.", "authVerifyPasswordHeadline": "رمزعبوری انتخاب کنید", "backupCancel": "انصراف", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "میپذیرم", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " دستگاه ها را تایید کنید", "conversationDeviceStartedUsingMany": " شروع کردم به استفاده کردن", "conversationDeviceStartedUsingOne": " شروع کردم به استفاده کردن", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " یکی از تایید نشده‌ها", "conversationDeviceUserDevices": " دستگاه های {{user}}", "conversationDeviceYourDevices": " دستگاه‌های شما", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "مهمان", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} نفر", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "باز‌کردن نقشه", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "رسید", "conversationMissedMessages": "شما از این دستگاه مدتی است که استفاده نکرده‌اید. بعضی از پیام‌ها در اینجا ظاهر نمی‌شود.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "جستجو بر اساس نام", "conversationParticipantsTitle": "افراد", "conversationPing": " صدا زد", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " صدا زد", "conversationPlaybackError": "قادر به پخش نیست", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • به وسیله giphy.com", "extensionsGiphyNoGifs": "اووه، هیچ Gif موجود نیست", "extensionsGiphyRandom": "تصادفی", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "لغو درخواست", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "تایید", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "حذف", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "حذف؟", "modalConversationRemoveMessage": "{{user}} قادر به ارسال و دریافت پیام ها در این مکالمه نخواهد بود.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "آیا {{user}} مسدود شود?", "modalUserBlockMessage": "{{user}} قادر به تماس با شما یا افزودن شما به مکالمات گروهی نخواهد بود.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "خارج کردن از مسدود بودن", "modalUserUnblockHeadline": "خارج کردن از مسدود بودن", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "زنگ زد", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/fi-FI.json b/src/i18n/fi-FI.json index 16e4c6a4d26..f7ac271e6b1 100644 --- a/src/i18n/fi-FI.json +++ b/src/i18n/fi-FI.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Tarkista tiedot ja yritä uudelleen", "BackendError.LABEL.ALREADY_INVITED": "Tämä sähköpostiosoite on jo kutsuttu", - "BackendError.LABEL.BAD_REQUEST": "Virheellinen syöte", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Sähköpostiosoite ei ole sallittu", "BackendError.LABEL.BLACKLISTED_PHONE": "Puhelinnumero ei ole sallittu", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Tämä keskustelu on saavuttanut osallistujien enimmäismäärän", "BackendError.LABEL.EMAIL_EXISTS": "Sähköpostiosoite jonka annoit on jo käytössä. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Käyttäjätunnus on jo käytössä", "BackendError.LABEL.HANDLE_TOO_SHORT": "Kirjoita käyttäjätunnus, jossa on vähintään 2 merkkiä", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Käyttäjätunnus on virheellinen", "BackendError.LABEL.INVALID_INVITATION_CODE": "Kutsu on peruttu tai vanhentunut", "BackendError.LABEL.INVALID_OPERATION": "Virheellinen operaatio", - "BackendError.LABEL.INVALID_PAYLOAD": "Virheellinen syöte", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Puhelinnumero on virheellinen", "BackendError.LABEL.KEY_EXISTS": "Sähköpostiosoite jonka annoit on jo rekisteröity. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Vahvista tietosi ja yritä uudelleen", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Seuraava", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Lisää", "addParticipantsHeader": "Lisää osallistujia", "addParticipantsHeaderWithCounter": "Lisää osallistujia ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Tarkista sähköpostisi saapuneet-kansio ja seuraa ohjeita.", "authPostedResendHeadline": "Sinulle on sähköpostia.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Lisää", "authVerifyAccountDetail": "Tämä mahdollistaa Wiren käytön useilla laitteilla.", "authVerifyAccountHeadline": "Lisää sähköpostiosoitteesi ja salasanasi.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Voit pyytää uuden koodin {{expiration}} kuluttua.", "authVerifyPasswordHeadline": "Kirjoita salasanasi", "backupCancel": "Peruuta", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Tiedostoa ei voitu tallentaa", "backupExportGenericErrorSecondary": "Varmuuskopiointia ei päätetty.", "backupExportProgressCompressing": "Valmistellaan varmuuskopiointitiedostoa", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Voit käyttää tätä palauttamaan historian jos kadotat tietokoneesi tai vaihdat sen uuteen.", "backupImportAccountErrorHeadline": "Väärä varmuuskopio", "backupImportAccountErrorSecondary": "Et voi palauttaa historiaa toisesta tilistä.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Jotain meni pieleen", "backupImportGenericErrorSecondary": "Historiaa ei voitu palauttaa.", "backupImportIncompatibleErrorHeadline": "Väärä varmuuskopio", "backupImportIncompatibleErrorSecondary": "Et voi palauttaa historiaa toiselta tililtä.", - "backupImportOutdatedErrorHeadline": "Epäyhteensopiva varmuuskopio", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Valmistellaan…", "backupImportProgressSecondary": "Palautetaan historiaa · {{processed}} / {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Historia palautettu.", "backupImportVersionErrorHeadline": "Epäyhteensopiva varmuuskopio", "backupImportVersionErrorSecondary": "Varmuuskopio on luotu uudemmalla tai vanhentuneella {{brandName}}:llä ja sitä ei voida palauttaa.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Yritä uudelleen", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Hyväksy", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " vahvista laitteet", "conversationDeviceStartedUsingMany": " aloitti käyttämään", "conversationDeviceStartedUsingOne": " aloitti käyttämään", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " vahvistamattomia yksi", "conversationDeviceUserDevices": " {{user}} n laitteet", "conversationDeviceYourDevices": " sinun laitteet", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Vieras", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Kirjaudu sisään", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} henkeä", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Avaa kartta", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Toimitettu", "conversationMissedMessages": "Et ole käyttänyt tätä laitetta pitkään aikaan. Jotkut viestit eivät saata näkyä täällä.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Hae nimellä", "conversationParticipantsTitle": "Ihmiset", "conversationPing": " pinggasi", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinggasi", "conversationPlaybackError": "Toisto epäonnistui", "conversationPopoverFavorite": "Lisää suosikkeihin", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • giphy.com:in kautta", "extensionsGiphyNoGifs": "Upsista, ei giffejä", "extensionsGiphyRandom": "Satunnainen", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Peru pyyntö", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Lisätietoja", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Poista", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Poista?", "modalConversationRemoveMessage": "{{user}} ei pysty lähettämään tai vastaanottamaan viestejä tässä keskustelussa.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Estä {{user}}?", "modalUserBlockMessage": "{{user}} ei pysty ottamaan sinuun yhteyttä tai lisäämään sinua ryhmäkeskusteluihin.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Poista esto", "modalUserUnblockHeadline": "Poista esto?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Soitti", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/fr-FR.json b/src/i18n/fr-FR.json index c7288270845..22db9a64526 100644 --- a/src/i18n/fr-FR.json +++ b/src/i18n/fr-FR.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Veuillez vérifier vos informations et réessayez", "BackendError.LABEL.ALREADY_INVITED": "Une invitation a déjà été envoyée à cette adresse", - "BackendError.LABEL.BAD_REQUEST": "Saisie non valide", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Cette adresse e-mail n'est pas autorisée", "BackendError.LABEL.BLACKLISTED_PHONE": "Ce numéro de téléphone n'est pas autorisé", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "La conversation n'a pas été trouvée", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Cette conversation a atteint la limite de participants", "BackendError.LABEL.EMAIL_EXISTS": "Cette adresse e-mail est déjà utilisée. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Ce nom d'utilisateur est déjà utilisé", "BackendError.LABEL.HANDLE_TOO_SHORT": "Veuillez entrer un nom d'utilisateur composé d'au moins 2 caractères", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Ce nom d'utilisateur est invalide", "BackendError.LABEL.INVALID_INVITATION_CODE": "L'invitation a été révoquée ou a expiré", "BackendError.LABEL.INVALID_OPERATION": "Opération invalide", - "BackendError.LABEL.INVALID_PAYLOAD": "Saisie non valide", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Ce numéro de téléphone est invalide", "BackendError.LABEL.KEY_EXISTS": "Cette adresse e-mail est déjà enregistrée. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Veuillez vérifier vos informations et réessayez", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Suivant", "accountForm.terms": "J'accepte les termes d'utilisation", "accountForm.termsAndPrivacyPolicy": "J'accepte les la politique de confidentialité et conditions d'utilisation", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Ajouter", "addParticipantsHeader": "Ajouter des participants", "addParticipantsHeaderWithCounter": "Ajouter des participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Vérifiez votre boîte de réception et suivez les instructions.", "authPostedResendHeadline": "Vous avez du courrier.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Ajouter", "authVerifyAccountDetail": "Cela vous permet d’utiliser {{brandName}} sur plusieurs appareils.", "authVerifyAccountHeadline": "Ajouter une adresse e-mail et un mot de passe.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Vous pourrez demander un nouveau code {{expiration}}.", "authVerifyPasswordHeadline": "Saisissez votre mot de passe", "backupCancel": "Annuler", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Le fichier n’a pas pu être sauvegardé", "backupExportGenericErrorSecondary": "La sauvegarde a échoué.", "backupExportProgressCompressing": "Fichier de sauvegarde en préparation", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Vous pourrez utiliser cette sauvegarde si vous perdez votre ordinateur ou si vous basculez vers un nouvel appareil.", "backupImportAccountErrorHeadline": "Fichier de sauvegarde invalide", "backupImportAccountErrorSecondary": "Vous ne pouvez pas restaurer l'historique d’un autre compte.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Une erreur est survenue", "backupImportGenericErrorSecondary": "Votre historique n’a pas pu être restauré.", "backupImportIncompatibleErrorHeadline": "Fichier de sauvegarde invalide", "backupImportIncompatibleErrorSecondary": "Vous ne pouvez pas restaurer l'historique d’un autre compte.", - "backupImportOutdatedErrorHeadline": "Sauvegarde incompatible", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "En préparation…", "backupImportProgressSecondary": "Restauration en cours · {{processed}} sur {{total}} — {{progress}}%", "backupImportSuccessHeadline": "L’historique a été restauré.", "backupImportVersionErrorHeadline": "Sauvegarde incompatible", "backupImportVersionErrorSecondary": "Cette sauvegarde a été créée par une version plus récente ou expirée de {{brandName}} et ne peut pas être restaurée ici.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Réessayez", "buttonActionError": "Votre réponse ne peut pas être envoyée, veuillez réessayer", "callAccept": "Accepter", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Vérifier les appareils", "conversationDeviceStartedUsingMany": " utilise", "conversationDeviceStartedUsingOne": " utilise", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " a annulé la vérification d’un", "conversationDeviceUserDevices": " des appareils de {{user}}", "conversationDeviceYourDevices": " de vos appareils", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Contact externe", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Ouvrir dans {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Rejoignez la conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Vous avez déjà un compte ?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Créer un compte", - "conversationJoin.invalidCreateAccountText": "pour des messages de groupe et des appels.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Se connecter", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Votre nom", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Ouvrir ce lien sur votre ordinateur.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favoris", "conversationLabelGroups": "Groupes", "conversationLabelPeople": "Contacts", - "conversationLikesCaption": "{{number}} contacts", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Ouvrir la carte", "conversationMemberJoined": "[bold]{{name}}[/bold] a ajouté {{users}} à la conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] a ajouté {{users}}, et [showmore]{{count}} autres[/showmore] à la conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] a exclu {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Vous[/bold] avez exclu {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Distribué", "conversationMissedMessages": "Vous n’avez pas utilisé cet appareil depuis un moment. Il est possible que certains messages n’apparaissent pas ici.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Rechercher par nom", "conversationParticipantsTitle": "Contacts", "conversationPing": " a fait un signe", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " avez fait un signe", "conversationPlaybackError": "Lecture impossible", "conversationPopoverFavorite": "Ajouter aux favoris", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oups, pas de gif", "extensionsGiphyRandom": "Au hasard", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "Le fichier  [bold]{{name}}[/bold] ne peut pas être ouvert", "fileTypeRestrictedOutgoing": "Le partage de fichiers avec l'extension {{fileExt}} n'est pas autorisé par votre organisation", "folderViewTooltip": "Dossiers", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Trop de caractères", "groupCreationPreferencesErrorNameShort": "Au moins un caractère", "groupCreationPreferencesHeader": "Nouveau groupe", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Nom du groupe", "groupParticipantActionBlock": "Bloquer…", "groupParticipantActionCancelRequest": "Annuler la demande", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Édité : {{edited}}", - "messageDetailsNoLikes": "Personne n’a encore aimé ce message.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Personne n’a encore lu ce message.", "messageDetailsReceiptsOff": "Les accusés de lecture n’étaient pas activés quand ce message a été envoyé.", "messageDetailsSent": "Envoyé : {{sent}}", "messageDetailsTitle": "Détails", - "messageDetailsTitleLikes": "Aimé{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Lu{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Exclure", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Exclure ?", "modalConversationRemoveMessage": "{{user}} ne pourra plus envoyer ou recevoir de messages dans cette conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Révoquer le lien", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Bloquer {{user}} ?", "modalUserBlockMessage": "{{user}} ne pourra plus vous contacter ou vous ajouter à des conversations de groupe.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Débloquer", "modalUserUnblockHeadline": "Débloquer ?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "A appelé", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Historique", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Vous pouvez uniquement restaurer l’historique depuis une sauvegarde provenant d’une plateforme identique. Ceci effacera les conversations que vous avez déjà sur cet appareil.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Appels", "preferencesOptionsCallLogs": "Résolution de problèmes", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/ga-IE.json b/src/i18n/ga-IE.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/ga-IE.json +++ b/src/i18n/ga-IE.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/he-IL.json b/src/i18n/he-IL.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/he-IL.json +++ b/src/i18n/he-IL.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/hi-IN.json b/src/i18n/hi-IN.json index 53439e1c484..1a73a114438 100644 --- a/src/i18n/hi-IN.json +++ b/src/i18n/hi-IN.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "अपने ईमेल इनबॉक्स का जांच करें और निर्देशों का पालन करें।", "authPostedResendHeadline": "आपका ईमेल आया है|", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "यह आपको {{brandName}} का इस्तेमाल कई उपकरणों मैं करने देता है|", "authVerifyAccountHeadline": "ईमेल पता तथा पासवर्ड को जोड़े|", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "आप एक नया कोड {{expiration}} का अनुरोध कर सकते हैं|", "authVerifyPasswordHeadline": "अपने पासवर्ड को डालें", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "स्वीकार करें", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " सत्यापित करें उपकरणों को", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}} के यन्त्र", "conversationDeviceYourDevices": " आपके यन्त्र", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "मेहमान", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "आपने कुछ समय के लिए इस यंत्र का उपयोग नहीं किया है| कुछ संदेश शायद यहां दिखाई नहीं दे|", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • giphy.com द्वारा", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "हटाएं", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "हटाएँ?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "{{user}} को ब्लॉक करें?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/hr-HR.json b/src/i18n/hr-HR.json index 5da69c60386..4a566f65c29 100644 --- a/src/i18n/hr-HR.json +++ b/src/i18n/hr-HR.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Sljedeće", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Dodaj", "addParticipantsHeader": "Dodaj sudionike", "addParticipantsHeaderWithCounter": "Dodaj ({{number}}) sudionika", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Provjerite svoj email sandučić i slijedite upute.", "authPostedResendHeadline": "Imate poštu.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Dodaj", "authVerifyAccountDetail": "Ovo Vam omogućuje da koristite {{brandName}} na više uređaja.", "authVerifyAccountHeadline": "Dodajte email adresu i lozinku.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Možete zatražiti novi kod {{expiration}}.", "authVerifyPasswordHeadline": "Upišite Vašu šifru", "backupCancel": "Odustani", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Ne uspješno spremanje datoteke", "backupExportGenericErrorSecondary": "Neuspješno stvaranje sigurnosne kopije.", "backupExportProgressCompressing": "Priprema datoteke sigurnosne kopije", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Možete koristiti za vraćanje povijesti u slučaju da izgubite računalo ili se prebacite na novo.", "backupImportAccountErrorHeadline": "Kriva sig. kopija", "backupImportAccountErrorSecondary": "Ne možete vratiti povijest s drugog računa.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Nešto je pošlo po zlu", "backupImportGenericErrorSecondary": "Vašu povijest nije moguće vratiti.", "backupImportIncompatibleErrorHeadline": "Kriva sig. kopija", "backupImportIncompatibleErrorSecondary": "Ne možete vratiti povijest s drugog računa.", - "backupImportOutdatedErrorHeadline": "Ne kompatibilna sigurnosna kopija", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Priprema…", "backupImportProgressSecondary": "Vraćanje povijesti · {{processed}} od {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Povijest vraćena.", "backupImportVersionErrorHeadline": "Ne kompatibilna sigurnosna kopija", "backupImportVersionErrorSecondary": "Ova sigurnosna kopija je izrađena od novije ili starije verzije {{brandName}}-a i kao takva nemože se vratiti ovdje.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Pokušajte ponovno", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Prihvati", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Potvrdi uređaje", "conversationDeviceStartedUsingMany": " počela/o koristiti", "conversationDeviceStartedUsingOne": " počela/o koristiti", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " neverificirala/o je jedan od", "conversationDeviceUserDevices": " {{user}} uređaji", "conversationDeviceYourDevices": " tvojih uređaja", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Gost", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Stvaranje računa", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Prijava", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} ljudi", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Otvori kartu", "conversationMemberJoined": "[bold]{{name}}[/bold] je dodao/la {{users}} u razgovor", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] je dodao {{users}}, i još [showmore]{{count}}[/showmore] u razgovor", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] je uklonio {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Vi[/bold] ste uklonili {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Dostavljeno", "conversationMissedMessages": "Niste upotrebljavali ovaj uređaj neko vrijeme. Neke poruke možda neće biti vidljive na njemu.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Traži po imenu", "conversationParticipantsTitle": "Kontakti", "conversationPing": " pingala/o", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingala/o", "conversationPlaybackError": "Reprodukcija neuspješna", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "• {{tag}} s giphy.com", "extensionsGiphyNoGifs": "Ups, nema Gif-ova", "extensionsGiphyRandom": "Nasumično", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Prevelik broj znakova", "groupCreationPreferencesErrorNameShort": "Najmanje 1 znak", "groupCreationPreferencesHeader": "Stvorite grupu", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Naziv grupe", "groupParticipantActionBlock": "Blokiraj…", "groupParticipantActionCancelRequest": "Poništi zahtjev…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Uređeno: {{edited}}", - "messageDetailsNoLikes": "Nikome se još nije svidjela poruka.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Nitko još nije pročitao ovu poruku.", "messageDetailsReceiptsOff": "Potvrda čitanja nije bila uključena kada je ova poruka poslana.", "messageDetailsSent": "Poslano: {{sent}}", "messageDetailsTitle": "Detalji", - "messageDetailsTitleLikes": "Sviđa{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Pročitano{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "U redu", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Ukloni", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Ukloniti?", "modalConversationRemoveMessage": "{{user}} neće moći slati ili primati poruke u ovom razgovoru.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Opozovi poveznicu", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokiraj {{user}}?", "modalUserBlockMessage": "{{user}} Vas neće moći kontaktirati niti dodati u grupne razgovore.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Odblokiraj", "modalUserUnblockHeadline": "Odblokirati?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Zvala/o", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Povijest", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Možete vratiti povijest samo iz sigurnosne kopije iste platforme. Vaša sigurnosna kopija će presnimiti razgovore koje ste imali na ovom uređaju.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Otklanjanje greške", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/hu-HU.json b/src/i18n/hu-HU.json index 87c4bd4d220..3a612a4b054 100644 --- a/src/i18n/hu-HU.json +++ b/src/i18n/hu-HU.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Kérjük, ellenőrizd az adataid, majd próbáld meg újra", "BackendError.LABEL.ALREADY_INVITED": "Ez az e-mail cím már meg lett hívva", - "BackendError.LABEL.BAD_REQUEST": "Hibás adat", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Ez az e-mail cím nem megengedett", "BackendError.LABEL.BLACKLISTED_PHONE": "Ez a telefonszám nem megengedett", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "BESZÉLGETÉS_NEM_TALÁLHATÓ", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Ez a beszélgetés elérte a résztvevők maximális számát", "BackendError.LABEL.EMAIL_EXISTS": "A megadott e-mail cím már használatban van. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "A felhasználónév már foglalt", "BackendError.LABEL.HANDLE_TOO_SHORT": "Kérjük, legalább 2 karakterből álló nevet adj meg", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Ez a felhasználónév érvénytelen", "BackendError.LABEL.INVALID_INVITATION_CODE": "A meghívót már visszavonták vagy lejárt", "BackendError.LABEL.INVALID_OPERATION": "Érvénytelen művelet", - "BackendError.LABEL.INVALID_PAYLOAD": "Hibás adat", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Ez a telefonszám érvénytelen", "BackendError.LABEL.KEY_EXISTS": "A megadott e-mail cím már regisztrálva van. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Kérjük, ellenőrizd az adataid, majd próbáld meg újra", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Tovább", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Hozzáadás", "addParticipantsHeader": "Partnerek hozzáadása", "addParticipantsHeaderWithCounter": "Partnerek hozzáadása ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Ellenőrizd bejövő e-mailjeidet és kövesd az utasításokat.", "authPostedResendHeadline": "Leveled érkezett.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Hozzáadás", "authVerifyAccountDetail": "Ezáltal akár több eszközön is használhatod a {{brandName}}-t.", "authVerifyAccountHeadline": "E-mail cím és jelszó megadása.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Új kódot kérhetsz {{expiration}} múlva.", "authVerifyPasswordHeadline": "Add meg a jelszavad", "backupCancel": "Mégsem", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Nem sikerült a fájl mentése", "backupExportGenericErrorSecondary": "A mentés nem készült el.", "backupExportProgressCompressing": "Biztonsági másolat készítése", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Ennek segítségével vissza tudod állítani az előzményeket, ha elhagyod a számítógéped vagy elkezdesz egy újat használni.", "backupImportAccountErrorHeadline": "Rossz mentés", "backupImportAccountErrorSecondary": "Az előzményeket nem lehet másik felhasználói fiókból visszaállítani.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Valami nem stimmel", "backupImportGenericErrorSecondary": "Az előzmények visszaállítása nem sikerült.", "backupImportIncompatibleErrorHeadline": "Rossz mentés", "backupImportIncompatibleErrorSecondary": "Az előzményeket nem lehet másik felhasználói fiókból visszaállítani.", - "backupImportOutdatedErrorHeadline": "A mentés nem kompatibilis", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Előkészítés…", "backupImportProgressSecondary": "Visszaállítás folyamatban · {{processed}} / {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Az előzmények visszaállítva.", "backupImportVersionErrorHeadline": "A mentés nem kompatibilis", "backupImportVersionErrorSecondary": "Ez a mentés egy újabb vagy elavultabb {{brandName}} verzióval készült és nem lehet itt visszaállítani.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Próbáld újra", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Elfogadás", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " eszközök ellenőrzése", "conversationDeviceStartedUsingMany": " elkezdett használni", "conversationDeviceStartedUsingOne": " elkezdett használni", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " visszavontad az ellenőrzött státuszt", "conversationDeviceUserDevices": " {{user}} egyik eszköze", "conversationDeviceYourDevices": " az egyik eszközödről", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Vendég", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Megnyitás {brandName}-ön", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Csatlakozz a beszélgetéshez", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Már van fiókod?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Fiók létrehozása", - "conversationJoin.invalidCreateAccountText": "csoportos üzenetküldéshez és beszélgetésekhez.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Bejelentkezés", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Neved", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Hivatkozás megnyitása a számítógépeden.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Kedvencek", "conversationLabelGroups": "Csoportok", "conversationLabelPeople": "Partnerek", - "conversationLikesCaption": "{{number}} partner", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Térkép megnyitása", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] eltávolította: {{users}}\n", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Te[/bold] eltávolítottad {{users}} felhasználót\n", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Kézbesítve", "conversationMissedMessages": "Ezt a készüléket már nem használtad egy ideje, ezért nem biztos, hogy minden üzenet megjelenik itt.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Keresés név szerint", "conversationParticipantsTitle": "Partner", "conversationPing": " kopogott", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " kopogott", "conversationPlaybackError": "Nem lehet lejátszani", "conversationPopoverFavorite": "Hozzáadás a kedvencekhez", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • Forrás: giphy.com", "extensionsGiphyNoGifs": "Hoppá, nincs gif", "extensionsGiphyRandom": "Véletlenszerű", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Mappák", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Túl sok karakter", "groupCreationPreferencesErrorNameShort": "Legalább 1 karakter", "groupCreationPreferencesHeader": "Új csoport", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Csoportnév", "groupParticipantActionBlock": "Letilt…", "groupParticipantActionCancelRequest": "Kérelem visszavonása", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Szerkesztve: {{edited}}", - "messageDetailsNoLikes": "Még senkinek nem tetszett ez az üzenet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Még senki nem olvasta el az üzenetet.", "messageDetailsReceiptsOff": "Az olvasási visszaigazolás nem voltak bekapcsolva, amikor ezt az üzenetet elküldték.", "messageDetailsSent": "Küldött: {{sent}}", "messageDetailsTitle": "Részletek", - "messageDetailsTitleLikes": "Likeolt{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Olvasott{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Eltávolítás", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Törlöd?", "modalConversationRemoveMessage": "{{user}} nem fog tudni üzenetet küldeni és fogadni ebben a beszélgetésben.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Link visszavonása", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "{{user}} tiltása?", "modalUserBlockMessage": "{{user}} nem tud majd kapcsolatba lépni veled, sem meghívni téged csoportos beszélgetésekbe.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Tiltás feloldása", "modalUserUnblockHeadline": "Feloldod a letiltást?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Hívta", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Előzmények", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Csak ugyanazon platformon készült mentést tudsz visszaállítani. A visszaállítás felülírja az eszközön jelenleg lévő beszélgetéseket.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Hibaelhárítás", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/id-ID.json b/src/i18n/id-ID.json index e087cf9dff3..92bdfb524ee 100644 --- a/src/i18n/id-ID.json +++ b/src/i18n/id-ID.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Mohon verifikasi data Anda dan coba lagi", "BackendError.LABEL.ALREADY_INVITED": "Alamat e-mail ini telah diundang", - "BackendError.LABEL.BAD_REQUEST": "Masukan tidak valid", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Alamat email ini tidak diperbolehkan", "BackendError.LABEL.BLACKLISTED_PHONE": "Nomor telepon ini tidak diperbolehkan", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "PERCAKAPAN_TIDAK_DITEMUKAN", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Percakapan ini telah mencapai batas peserta", "BackendError.LABEL.EMAIL_EXISTS": "Alamat e-mail ini telah digunakan. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Nama pengguna ini sudah ada", "BackendError.LABEL.HANDLE_TOO_SHORT": "Harap masukan nama pengguna minimal 2 karakter", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Nama pengguna ini tidak valid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Undangan telah dicabut dan kadaluarsa", "BackendError.LABEL.INVALID_OPERATION": "Operasi tidak valid", - "BackendError.LABEL.INVALID_PAYLOAD": "Masukan tidak valid", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Nomor telepon ini tidak valid", "BackendError.LABEL.KEY_EXISTS": "Alamat e-mail ini telah terdaftar. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Mohon verifikasi data Anda dan coba lagi", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Tambahkan", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Periksa kotak masuk email Anda dan ikuti petunjuk.", "authPostedResendHeadline": "Anda telah mendapatkan pesan.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Tambahkan", "authVerifyAccountDetail": "Ini memungkinkan Anda menggunakan {{brandName}} di beberapa perangkat.", "authVerifyAccountHeadline": "Tambahkan alamat email dan sandi.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Anda dapat meminta kode baru {{expiration}} .", "authVerifyPasswordHeadline": "Masukkan sandi Anda", "backupCancel": "Batal", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Terima", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " verifikasi perangkat", "conversationDeviceStartedUsingMany": " mulai menggunakan", "conversationDeviceStartedUsingOne": " mulai menggunakan", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " tidak terverifikasi dari salah satu", "conversationDeviceUserDevices": " {{user}} ini perangkat", "conversationDeviceYourDevices": " perangkat Anda", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Tamu", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} orang", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Buka Peta", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Terkirim", "conversationMissedMessages": "Anda belum pernah menggunakan perangkat ini untuk sementara waktu. Beberapa pesan mungkin tidak muncul di sini.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Cari berdasarkan nama", "conversationParticipantsTitle": "Orang", "conversationPing": " diping", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " diping", "conversationPlaybackError": "Tidak dapat memutar", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Ups, tidak ada gif", "extensionsGiphyRandom": "Acak", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Batalkan permintaan", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Hapus", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Hapus?", "modalConversationRemoveMessage": "{{user}} tidak dapat mengirim atau menerima pesan dalam percakapan ini.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokir {{user}} ?", "modalUserBlockMessage": "{{user}} tidak dapat menghubungi Anda atau menambahkan Anda ke percakapan grup.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Buka blokir", "modalUserUnblockHeadline": "Buka blokir?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Dipanggil", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/is-IS.json b/src/i18n/is-IS.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/is-IS.json +++ b/src/i18n/is-IS.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/it-IT.json b/src/i18n/it-IT.json index 02cc6834e1e..b322efb18e8 100644 --- a/src/i18n/it-IT.json +++ b/src/i18n/it-IT.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Verifica i tuoi dati e riprova", "BackendError.LABEL.ALREADY_INVITED": "Questa email è già stata invitata", - "BackendError.LABEL.BAD_REQUEST": "Inserimento non valido", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Questo indirizzo email non è consentito", "BackendError.LABEL.BLACKLISTED_PHONE": "Questo numero di telefono non è consentito", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Questa conversazione ha raggiunto il limite di partecipanti", "BackendError.LABEL.EMAIL_EXISTS": "Questo indirizzo email è già in uso. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Questo nome utente è già in uso", "BackendError.LABEL.HANDLE_TOO_SHORT": "Inserisci un nome utente con almeno 2 caratteri", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Questo nome utente non è valido", "BackendError.LABEL.INVALID_INVITATION_CODE": "L'invito è stato revocato o scaduto", "BackendError.LABEL.INVALID_OPERATION": "Operazione non valida", - "BackendError.LABEL.INVALID_PAYLOAD": "Inserimento non valido", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Questo numero di telefono non è valido", "BackendError.LABEL.KEY_EXISTS": "Questo indirizzo email è già stato registrato. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Verifica i tuoi dati e riprova", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Aggiungi", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Verifica la tua casella di posta e segui le istruzioni.", "authPostedResendHeadline": "C’è posta per te.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Aggiungi", "authVerifyAccountDetail": "Questo ti consente di usare {{brandName}} su più dispositivi.", "authVerifyAccountHeadline": "Aggiungi indirizzo email e password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "È possibile richiedere un nuovo codice {{expiration}}.", "authVerifyPasswordHeadline": "Inserisci la tua password", "backupCancel": "Annulla", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accetta", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " verifica i dispositivi", "conversationDeviceStartedUsingMany": " ha iniziato ad usare", "conversationDeviceStartedUsingOne": " ha iniziato ad usare", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " hai tolto la verifica di", "conversationDeviceUserDevices": " Dispositivi di {{user}}’s", "conversationDeviceYourDevices": " i tuoi dispositivi", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Ospite", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Accedi", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} persone", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Apri mappa", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Consegnato", "conversationMissedMessages": "È da un po’ di tempo che non utilizzi questo dispositivo. Alcuni messaggi potrebbero non apparire qui.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Cerca per nome", "conversationParticipantsTitle": "Persone", "conversationPing": " ha fatto un trillo", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " ha fatto un trillo", "conversationPlaybackError": "Impossibile riprodurre", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, nessuna gif", "extensionsGiphyRandom": "Scelta casuale", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Annulla richiesta", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Rimuovi", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Rimuovere?", "modalConversationRemoveMessage": "{{user}} non sarà in grado di inviare o ricevere messaggi in questa conversazione.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Bloccare {{user}}?", "modalUserBlockMessage": "{{user}} non sarà in grado di contattarti o aggiungerti alle conversazioni di gruppo.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Sblocca", "modalUserUnblockHeadline": "Sblocca?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Ha chamato", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/ja-JP.json b/src/i18n/ja-JP.json index 89d8a54f299..39b6c175c97 100644 --- a/src/i18n/ja-JP.json +++ b/src/i18n/ja-JP.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "詳細を確認して、もう一度やり直してください。", "BackendError.LABEL.ALREADY_INVITED": "このメールアドレスは招待済みです", - "BackendError.LABEL.BAD_REQUEST": "無効な入力です", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "このメールアドレスは許可されていません", "BackendError.LABEL.BLACKLISTED_PHONE": "この電話番号は許可されていません", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "この会話は参加者の制限に達しています", "BackendError.LABEL.EMAIL_EXISTS": "このメールアドレスは既に使用されています。{supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "このユーザー名は既に使われています", "BackendError.LABEL.HANDLE_TOO_SHORT": "ユーザー名は最低2文字の入力が必要です。", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "このユーザー名は無効です", "BackendError.LABEL.INVALID_INVITATION_CODE": "招待状は取り消されたか、既に失効しています。", "BackendError.LABEL.INVALID_OPERATION": "無効な操作", - "BackendError.LABEL.INVALID_PAYLOAD": "無効な入力です", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "この電話番号は無効です", "BackendError.LABEL.KEY_EXISTS": "このメールアドレスは既に登録されています。{supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "詳細を確認して、もう一度やり直してください。", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "次へ", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "追加する", "addParticipantsHeader": "人を追加します", "addParticipantsHeaderWithCounter": "({{number}}) を追加します。", @@ -193,6 +219,7 @@ "authPostedResendDetail": "メールの受信トレイを確認して、手順に従ってください。", "authPostedResendHeadline": "メールを受信しました", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "追加する", "authVerifyAccountDetail": "これにより、複数のデバイスで {{brandName}} を使用できます。", "authVerifyAccountHeadline": "メールアドレスとパスワードを追加", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "新しいコード \"{{expiration}}\" を要求することができます。", "authVerifyPasswordHeadline": "パスワードを入力してください", "backupCancel": "キャンセル", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "ファイルを保存できませんでした", "backupExportGenericErrorSecondary": "バックアップが完了していません。", "backupExportProgressCompressing": "バックアップを準備中...", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "あなたがコンピュータを紛失したり、新しい機種に乗り換えた際にも、これを使用して履歴を復元することができます。", "backupImportAccountErrorHeadline": "バックアップに不備があります", "backupImportAccountErrorSecondary": "別のアカウントからの履歴はリストアできません。", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "何か問題があります", "backupImportGenericErrorSecondary": "あなたの履歴はリストアできませんでした。", "backupImportIncompatibleErrorHeadline": "バックアップに不備があります", "backupImportIncompatibleErrorSecondary": "別のアカウントからの履歴はリストアできません。", - "backupImportOutdatedErrorHeadline": "互換性のないバックアップ", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "準備中…", "backupImportProgressSecondary": "履歴復元中 · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "履歴がリストアされました。", "backupImportVersionErrorHeadline": "互換性のないバックアップ", "backupImportVersionErrorSecondary": "このバックアップデータは、新しいまたは古すぎる {{brandName}} で作成されたため、リストアできません。", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "再試行", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "承諾", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " デバイスを認証します", "conversationDeviceStartedUsingMany": " 使用を開始しました", "conversationDeviceStartedUsingOne": " 使用を開始しました", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " の一つを未認証にしました", "conversationDeviceUserDevices": " {{user}} のデバイス", "conversationDeviceYourDevices": " あなたのデバイス", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "ゲスト", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "{brandName} を開く", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "会話に参加します", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "既にアカウントをお持ちですか?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "アカウントを作成", - "conversationJoin.invalidCreateAccountText": "グループ メッセージングおよび電話会議。", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "ログイン", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "あなたの名前", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "このリンクをお使いのコンピュータで開きます。", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "お気に入り", "conversationLabelGroups": "グループ", "conversationLabelPeople": "会話", - "conversationLikesCaption": "{{number}} 人", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "マップを開く", "conversationMemberJoined": "[bold]{{name}}[/bold] が {{users}} と会話を開始しました", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] が {{users}} と、[showmore]{{count}} 人[/showmore] を会話に追加しました", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] が {{users}} を削除しました", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]あなた[/bold] が {{users}} を削除しました", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "配信済み", "conversationMissedMessages": "しばらくの間、このデバイスでWireを利用していなかったため、いくつかのメッセージがここに表示されない可能性があります。", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "名前で検索する", "conversationParticipantsTitle": "メンバー", "conversationPing": " ping しました", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " ping しました", "conversationPlaybackError": "再生できません", "conversationPopoverFavorite": "お気に入りに追加", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} giphy.comから", "extensionsGiphyNoGifs": "Oops, gifがありません。", "extensionsGiphyRandom": "ランダム", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "フォルダ", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "文字が多すぎます", "groupCreationPreferencesErrorNameShort": "1文字以上", "groupCreationPreferencesHeader": "新規グループ", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "グループ名", "groupParticipantActionBlock": "連絡先をブロック...", "groupParticipantActionCancelRequest": "リクエストを取り消す", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "編集済: {{edited}}", - "messageDetailsNoLikes": "まだ、誰もこのメッセージにいいねしていません。", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "まだ、誰もこのメッセージを読んでいません。", "messageDetailsReceiptsOff": "このメッセージが送信された時、開封通知はオフでした。", "messageDetailsSent": "送信済: {{sent}}", "messageDetailsTitle": "詳細", - "messageDetailsTitleLikes": "いいね {{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "既読 {{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "削除", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "削除しますか?", "modalConversationRemoveMessage": "{{user}} は、この会話でメッセージの送受信をすることができません", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "リンクを取り消す", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "{{user}} をブロックしますか?", "modalUserBlockMessage": "{{user}} は、あなたにコンタクトをすることやグループ会話にあなたを追加することができません。", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "ブロック解除", "modalUserUnblockHeadline": "ブロック解除?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "着信", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "履歴", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "会話履歴は、同じプラットフォームのバックアップからのみ復元できます。あなたのバックアップは、このデバイス上の会話を上書きします。", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "トラブルシューティング", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/lt-LT.json b/src/i18n/lt-LT.json index 07d0ac21a01..de6f6ffbb5d 100644 --- a/src/i18n/lt-LT.json +++ b/src/i18n/lt-LT.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Patikrinkite duomenis ir bandykite dar kartą", "BackendError.LABEL.ALREADY_INVITED": "Šis el. paštas jau yra pakviestas", - "BackendError.LABEL.BAD_REQUEST": "Neteisinga įvestis", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Šis el. pašto adresas neleidžiamas", "BackendError.LABEL.BLACKLISTED_PHONE": "Šis telefono numeris neleidžiamas", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Šiame pokalbyje jau pasiekta dalyvių riba", "BackendError.LABEL.EMAIL_EXISTS": "Šis el. pašto adresas jau užregistruotas. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Naudotojo vardas jau naudojamas", "BackendError.LABEL.HANDLE_TOO_SHORT": "Įrašykite bent 2 simbolių naudotojo vardą", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Naudotojo vardas neleistinas", "BackendError.LABEL.INVALID_INVITATION_CODE": "Pakvietimas buvo panaikintas arba baigė galioti", "BackendError.LABEL.INVALID_OPERATION": "Neteisinga operacija", - "BackendError.LABEL.INVALID_PAYLOAD": "Neteisinga įvestis", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Šis telefono numeris yra neteisingas", "BackendError.LABEL.KEY_EXISTS": "Šis el. pašto adresas jau užregistruotas. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Patikrinkite duomenis ir bandykite dar kartą", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Kitas", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Pridėti", "addParticipantsHeader": "Pridėti žmonių", "addParticipantsHeaderWithCounter": "Pridėti žmonių ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Patikrinkite savo el. paštą ir sekite nurodymus.", "authPostedResendHeadline": "Jūs gavote laišką.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Pridėti", "authVerifyAccountDetail": "Tai leidžia jums naudoti „{{brandName}}“ keliuose įrenginiuose.", "authVerifyAccountHeadline": "Pridėkite el. pašto adresą ir slaptažodį.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Jūs galite užklausti naują kodą {{expiration}}.", "authVerifyPasswordHeadline": "Įveskite savo slaptažodį", "backupCancel": "Atsisakyti", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Failo išsaugoti nepavyko", "backupExportGenericErrorSecondary": "Atsarginės kopijos kūrimas nebuvo sėkmingas.", "backupExportProgressCompressing": "Ruošiamas atsarginės kopijos failas", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Jei prarasite savo kompiuterį arba pasikeisite nauju, kopiją galėsite panaudoti praeities atkūrimui.", "backupImportAccountErrorHeadline": "Netinkama atsarginė kopija", "backupImportAccountErrorSecondary": "Atkurti kitos paskyros atsarginės kopijos nepavyks.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Kažkas nutiko", "backupImportGenericErrorSecondary": "Praeities atkurti nepavyko.", "backupImportIncompatibleErrorHeadline": "Netinkama atsarginė kopija", "backupImportIncompatibleErrorSecondary": "Atkurti kitos paskyros atsarginės kopijos nepavyks.", - "backupImportOutdatedErrorHeadline": "Nesuderinama atsarginė kopija", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Ruošiama…", "backupImportProgressSecondary": "Atkuriama praeitis · {{processed}} iš {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Praeitis atkurta.", "backupImportVersionErrorHeadline": "Nesuderinama atsarginė kopija", "backupImportVersionErrorSecondary": "Ši atsarginė kopija buvo sukurta naudojant arba naujesnę arba senesnę „{{brandName}}“ versiją, ir negali būti naudojama atkūrimui.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Bandykite dar kartą", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Priimti", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " patvirtinkite įrenginius", "conversationDeviceStartedUsingMany": " pradėjo naudoti", "conversationDeviceStartedUsingOne": " pradėjo naudoti", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " panaikinote patvirtinimą vieno iš", "conversationDeviceUserDevices": " {{user}} įrenginių", "conversationDeviceYourDevices": " savo įrenginių", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Svečias", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Atverti programoje „{brandName}“", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Prisijungti prie susirašinėjimo", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Turite paskyrą?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Kurti paskyrą", - "conversationJoin.invalidCreateAccountText": "susirašinėjimams grupėje ir konferenciniams pokalbiams.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Prisijungti", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Jūsų vardas", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Atverkite šią nuorodą kompiuteryje.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Grupės", "conversationLabelPeople": "Žmonės", - "conversationLikesCaption": "{{number}} žmonėms", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Atverti žemėlapį", "conversationMemberJoined": "[bold]{{name}}[/bold] pridėjo {{users}} prie susirašinėjimo", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] pridėjo {{users}}, ir dar [showmore]{{count}}[/showmore] prie susirašinėjimo", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] pašalino {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Jūs[/bold] pašalinote {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Pristatyta", "conversationMissedMessages": "Jūs kurį laiką nenaudojote šio įrenginio. Kai kurios žinutės čia gali neatsirasti.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Ieškokite pagal vardą", "conversationParticipantsTitle": "Žmonės", "conversationPing": " patikrino ryšį", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " patikrinote ryšį", "conversationPlaybackError": "Nepavyko atkurti", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • per giphy.com", "extensionsGiphyNoGifs": "Oi, nėra gif", "extensionsGiphyRandom": "Atsitiktinis", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Aplankai", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Per daug simbolių", "groupCreationPreferencesErrorNameShort": "Bent 1 simbolis", "groupCreationPreferencesHeader": "Nauja grupė", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Grupės pavadinimas", "groupParticipantActionBlock": "Blokuoti kontaktą", "groupParticipantActionCancelRequest": "Atsisakyti užklausos…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Taisyta: {{edited}}", - "messageDetailsNoLikes": "Kol kas ši žinutė niekam nepatiko.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Kol kas niekas neperskaitė šios žinutės.", "messageDetailsReceiptsOff": "Pranešimai apie skaitymą nebuvo įjungti, kai ši žinutė buvo išsiųsta.", "messageDetailsSent": "Išsiųsta: {{sent}}", "messageDetailsTitle": "Išsamiau", - "messageDetailsTitleLikes": "{{count}} sako, kad patinka", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "{{count}} perskaitė", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "GERAI", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Šalinti", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Šalinti?", "modalConversationRemoveMessage": "{{user}} negalės siųsti ir gauti žinutes šiame pokalbyje.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Naikinti nuorodą", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Užblokuoti {{user}}?", "modalUserBlockMessage": "{{user}} negalės su jumis susisiekti ar pridėti jus į grupės pokalbius.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Atblokuoti", "modalUserUnblockHeadline": "Atblokuoti?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Skambino", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Praeitis", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Atkurti praeitį iš atsarginės kopijos galite tik toje pačioje platformoje. Atsarginė kopija pakeis visus susirašinėjimus, kuriuos šiame įrenginyje turite.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Trikčių šalinimas", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/lv-LV.json b/src/i18n/lv-LV.json index 4f66efe45d4..fe4cf67fb2b 100644 --- a/src/i18n/lv-LV.json +++ b/src/i18n/lv-LV.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Pievienot", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Pārbaudiet savu e-pasta iesūtni un sekojiet norādījumiem.", "authPostedResendHeadline": "Tev ir pienācis pasts.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Pievienot", "authVerifyAccountDetail": "Šis ļauj izmantot {{brandName}} uz vairākām ierīcēm.", "authVerifyAccountHeadline": "Pievienot e-pasta adresi un paroli.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Ievadiet savu paroli", "backupCancel": "Atcelt", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Pieņemt", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " pārbaudiet ierīces", "conversationDeviceStartedUsingMany": " sācis izmantot", "conversationDeviceStartedUsingOne": " sācis izmantot", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " neapstiprināts viens no", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " jūsu ierīces", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Atvērt Karti", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Piegādāts", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "Personas", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Nejaušus", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Atcelt pieprasījumu", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "Labi", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Atbloķēt?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/ms-MY.json b/src/i18n/ms-MY.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/ms-MY.json +++ b/src/i18n/ms-MY.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/nl-NL.json b/src/i18n/nl-NL.json index 1221b33ad21..a50f9fca030 100644 --- a/src/i18n/nl-NL.json +++ b/src/i18n/nl-NL.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Ongeldige invoer", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "Dit e-mailadres is al in gebruik. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Uitnodiging is ingetrokken of verlopen", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Ongeldige invoer", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Volgende", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Toevoegen", "addParticipantsHeader": "Personen toevoegen", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Controleer je inbox en volg de instructies.", "authPostedResendHeadline": "Je hebt e-mail ontvangen.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Toevoegen", "authVerifyAccountDetail": "Dit zorgt ervoor dat je {{brandName}} op meerdere apparaten kunt gebruiken.", "authVerifyAccountHeadline": "E-mailadres en wachtwoord toevoegen.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Je kunt een nieuwe code aanvragen {{expiration}}.", "authVerifyPasswordHeadline": "Voer je wachtwoord in", "backupCancel": "Annuleer", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Neem op", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " controleer apparaten", "conversationDeviceStartedUsingMany": " begon met het gebruik van", "conversationDeviceStartedUsingOne": " begon met het gebruik van", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified een van", "conversationDeviceUserDevices": "{{user}}´s apparaten", "conversationDeviceYourDevices": " jou apparaten", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Gast", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Heeft u al een account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Een account aanmaken", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Inloggen", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Jouw naam", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} mensen", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open kaart", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Afgeleverd", "conversationMissedMessages": "Je hebt dit apparaat een tijdje niet gebruikt. Sommige berichten worden hier niet getoond.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Zoeken op naam", "conversationParticipantsTitle": "Deelnemers", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Niet in staat om te af te spelen", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oeps, geen gifjes", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Te veel tekens", "groupCreationPreferencesErrorNameShort": "Minimaal 1 teken", "groupCreationPreferencesHeader": "Nieuwe groep", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Groepsnaam", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Annuleer verzoek", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Verwijderen", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Verwijder?", "modalConversationRemoveMessage": "{{user}} zal geen berichten kunnen versturen of ontvangen in dit gesprek.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "{{user}} blokkeren?", "modalUserBlockMessage": "{{user}} zal niet in staat zijn je te contacteren of toe te voegen aan een groepsgesprek.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Deblokkeer", "modalUserUnblockHeadline": "Deblokkeer?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Heeft gebeld", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/no-NO.json b/src/i18n/no-NO.json index 0d2f4022fde..7c247a5a81f 100644 --- a/src/i18n/no-NO.json +++ b/src/i18n/no-NO.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Kontroller dine detaljer og prøv på nytt", "BackendError.LABEL.ALREADY_INVITED": "Denne e-postadressen er allerede invitert", - "BackendError.LABEL.BAD_REQUEST": "Ugyldig inndata", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Denne e-postadressen er tillat", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Legg til", "addParticipantsHeader": "Legg til deltakere", "addParticipantsHeaderWithCounter": "Legg til deltakere ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Sjekk e-postboksen din og følg instruksjonene.", "authPostedResendHeadline": "Du har en ny e-post.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Legg til", "authVerifyAccountDetail": "Dette lar deg bruke {{brandName}} på flere enheter.", "authVerifyAccountHeadline": "Legg til e-postadresse og et passord.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Du kan be om en ny kode {{expiration}}.", "authVerifyPasswordHeadline": "Angi ditt passord", "backupCancel": "Avbryt", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Godta", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " bekreft enheter", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " dine enheter", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Gjest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Åpne kart", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Levert", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Søk etter navn", "conversationParticipantsTitle": "Kontakter", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Kan ikke spille av", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, ingen gifs", "extensionsGiphyRandom": "Tilfeldig", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "For mange tegn", "groupCreationPreferencesErrorNameShort": "Minst 1 tegn", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Blokker…", "groupParticipantActionCancelRequest": "Avbryt forespørsel", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Fjern", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Fjern?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Opphev blokkering", "modalUserUnblockHeadline": "Opphev blokkering?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/pl-PL.json b/src/i18n/pl-PL.json index bb599f38db9..0628cb9e637 100644 --- a/src/i18n/pl-PL.json +++ b/src/i18n/pl-PL.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Sprawdź swoje dane i spróbuj ponownie", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Niepoprawne dane", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Wprowadź nazwę użytkownika zawierającą więcej niż 2 znaki", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Zaproszenia zostały wycofane lub wygasły", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Niepoprawne dane", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Sprawdź swoje dane i spróbuj ponownie", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Dalej", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Dodaj", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Sprawdź swoją skrzynkę e-mail i postępuj zgodnie z instrukcjami.", "authPostedResendHeadline": "Masz wiadomość.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Dodaj", "authVerifyAccountDetail": "To pozwala Ci używać {{brandName}} na więcej niż jednym urządzeniu.", "authVerifyAccountHeadline": "Dodaj adres e-mail i hasło.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Możesz poprosić o nowy kod {{expiration}}.", "authVerifyPasswordHeadline": "Wprowadź hasło", "backupCancel": "Anuluj", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Coś poszło nie tak", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Odbierz", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " sprawdzenie urządzenia", "conversationDeviceStartedUsingMany": " rozpoczęto korzystanie", "conversationDeviceStartedUsingOne": " rozpoczęto korzystanie", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " %@ nie zweryfikował jednego z %@", "conversationDeviceUserDevices": " urządzenia użytkownika {{user}}", "conversationDeviceYourDevices": " twoje urządzenia", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Gość", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Masz już konto?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Utwórz konto", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Zaloguj się", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} uczestników", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Otwórz mapę", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Dostarczono", "conversationMissedMessages": "Dość długo nie używałeś tego urządzenia. Niektóre wiadomości mogą nie być widoczne.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Szukaj według nazwy", "conversationParticipantsTitle": "Osoby", "conversationPing": " zaczepił/a", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " zaczepił/a", "conversationPlaybackError": "Nie można odtworzyć", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Ups, nie ma plików Gif", "extensionsGiphyRandom": "Losowa kolejność", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Anuluj żądanie", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Usuń", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Usunąć?", "modalConversationRemoveMessage": "{{user}} nie będzie mógł wysyłać, ani odbierać wiadomości w tej rozmowie.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Zablokować {{user}}?", "modalUserBlockMessage": "{{user}} nie będzie mógł się z Tobą skontaktować, ani dodać do rozmowy grupowej.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Odblokuj", "modalUserUnblockHeadline": "Odblokować?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Dzwonił", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index 58cd9f263a1..2e4234308fa 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Por favor, verifique seus dados e tente novamente", "BackendError.LABEL.ALREADY_INVITED": "Este e-mail já foi convidado", - "BackendError.LABEL.BAD_REQUEST": "Entrada inválida", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Este endereço de e-mail não é permitido", "BackendError.LABEL.BLACKLISTED_PHONE": "Este número de telefone não é permitido", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Por favor, tente novamente ou solicite outro código.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Esta conversa atingiu o limite de participantes", "BackendError.LABEL.EMAIL_EXISTS": "Este endereço de e-mail já está em uso. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Este nome de usuário já está em uso", "BackendError.LABEL.HANDLE_TOO_SHORT": "Digite um nome de usuário com pelo menos 2 caracteres", "BackendError.LABEL.INVALID_CODE": "Por favor, tente novamente ou solicite outro código.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Este nome de usuário é inválido", "BackendError.LABEL.INVALID_INVITATION_CODE": "O convite foi revogado ou expirou", "BackendError.LABEL.INVALID_OPERATION": "Operação inválida", - "BackendError.LABEL.INVALID_PAYLOAD": "Entrada inválida", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Este número de telefone é inválido", "BackendError.LABEL.KEY_EXISTS": "Este endereço de e-mail já foi registrado. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Por favor, verifique seus dados e tente novamente", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Voltar para as informações da conversa", "accessibility.conversation.sectionLabel": "Lista de conversas", "accessibility.conversationAssetImageAlt": "Imagem de {{username}} de {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Abrir opções da mensagem", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Mostrar dispositivos", "accessibility.conversationDetailsActionGroupAdminLabel": "Definir administrador do grupo", "accessibility.conversationDetailsActionNotificationsLabel": "Mostrar configurações de notificações", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Ping perdido", "accessibility.conversationStatusUnreadReply": "Resposta não lida", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Fechar a janela 'GIF'", "accessibility.giphyModal.loading": "Carregando giphy", "accessibility.giphyModal.selectGif": "Selecionar gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferências - dispositivos", "accessibility.headings.preferencesOptions": "Preferências - opções", "accessibility.headings.sidebar": "Navegação", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Mensagem visualizada por {{readReceiptText}}, detalhes abertos", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Curtir mensagem", "accessibility.messages.liked": "Descurtir mensagem", "accessibility.openConversation": "Abrir o perfil de {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Próximo", "accountForm.terms": "Eu aceito os termos e condições", "accountForm.termsAndPrivacyPolicy": "Eu aceito a política de privacidade e os termos e condições", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Adicionar", "addParticipantsHeader": "Adicionar participantes", "addParticipantsHeaderWithCounter": "Adicionar participantes ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Verifique sua caixa de entrada do e-mail e siga as instruções.", "authPostedResendHeadline": "Você recebeu um e-mail.", "authSSOLoginTitle": "Iniciar sessão com SSO", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Adicionar", "authVerifyAccountDetail": "Isso permite que você use o {{brandName}} em vários dispositivos.", "authVerifyAccountHeadline": "Adicionar o endereço de e-mail e senha.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Você pode solicitar um novo código {{expiration}}.", "authVerifyPasswordHeadline": "Digite sua senha", "backupCancel": "Cancelar", + "backupDecryptionModalAction": "Continuar", + "backupDecryptionModalMessage": "O backup está protegido por senha.", + "backupDecryptionModalPlaceholder": "Senha", + "backupDecryptionModalTitle": "Digite a senha", + "backupEncryptionModalAction": "Fazer backup agora", + "backupEncryptionModalCloseBtn": "Cancelar", + "backupEncryptionModalMessage": "O backup será compactado e você poderá criptografá-lo com uma senha.", + "backupEncryptionModalPlaceholder": "Senha (opcional)", + "backupEncryptionModalTitle": "Definir senha", "backupExportGenericErrorHeadline": "O arquivo não pôde ser salvo", "backupExportGenericErrorSecondary": "O backup não foi concluído.", "backupExportProgressCompressing": "Preparando arquivo de backup", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Você pode usar isso para restaurar o histórico se perder seu computador ou mudar para um novo.", "backupImportAccountErrorHeadline": "Backup errado", "backupImportAccountErrorSecondary": "Você não pode restaurar o histórico de uma conta diferente.", + "backupImportFormatErrorHeadline": "Backup incompatível", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Algo deu errado", "backupImportGenericErrorSecondary": "Seu histórico não pôde ser restaurado.", "backupImportIncompatibleErrorHeadline": "Backup errado", "backupImportIncompatibleErrorSecondary": "Você não pode restaurar o histórico de uma conta diferente.", - "backupImportOutdatedErrorHeadline": "Backup incompatível", + "backupImportPasswordErrorHeadline": "Senha incorreta", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparando…", "backupImportProgressSecondary": "Restaurando histórico · {{processed}} de {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Histórico restaurado.", "backupImportVersionErrorHeadline": "Backup incompatível", "backupImportVersionErrorSecondary": "Este backup foi criado por uma versão mais recente ou desatualizada do {{brandName}} e não pode ser restaurado aqui.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Tentar novamente", "buttonActionError": "Sua resposta não pode ser enviada, por favor tente novamente", "callAccept": "Aceitar", @@ -254,8 +294,8 @@ "callingRestrictedConferenceCallPersonalModalTitle": "Recurso indisponível", "callingRestrictedConferenceCallTeamMemberModalDescription": "Para iniciar uma chamada em conferência, sua equipe precisa ser atualizada para o plano Empresarial.", "callingRestrictedConferenceCallTeamMemberModalTitle": "Recurso indisponível", - "cameraStatusOff": "off", - "cameraStatusOn": "on", + "cameraStatusOff": "desligado", + "cameraStatusOn": "ligado", "chooseHandle.handlePlaceholder": "Nome de usuário", "chooseHandle.headline": "Definir nome de usuário", "chooseHandle.subhead": "Seu nome de usuário ajuda as pessoas a encontrá-lo.", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verificar dispositivos", "conversationDeviceStartedUsingMany": " começaram a usar", "conversationDeviceStartedUsingOne": " começou a usar", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " desautorizou um dos", "conversationDeviceUserDevices": " dispositivos de {{user}}", "conversationDeviceYourDevices": " seus dispositivos", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contatos", "conversationGuestIndicator": "Convidado", "conversationImageAssetRestricted": "Receber imagens é proibido", - "conversationJoin.buttonExistentAccountOpen": "Abrir em {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, você foi convidado para participar de uma conversa em {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Entrar na conversa", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} sem uma conta", - "conversationJoin.existentAccountSubhead": "Áudio e videoconferência, mensagens de texto, compartilhamento de arquivos e compartilhamento de tela, tudo criptografado de ponta a ponta.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Não foi possível entrar na conversa", "conversationJoin.fullConversationSubhead": "O número máximo de participantes nesta conversa foi atingido.", "conversationJoin.hasAccount": "Já possui uma conta?", - "conversationJoin.headline": "Você foi convidado para participar de uma conversa em {brandName}", - "conversationJoin.invalidCreateAccountLink": "Criar uma conta", - "conversationJoin.invalidCreateAccountText": "para mensagens em grupo e chamadas em conferência.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversa não encontrada", "conversationJoin.invalidSubhead": "O link para esta conversa em grupo expirou ou a conversa foi definida como privada.", - "conversationJoin.loginLink": "Iniciar sessão", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Seu nome", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Entre na conversa como convidado temporário (o acesso expira após 24 horas)", "conversationJoin.unsupportedJoinHeadline": "Você foi convidado para participar de uma conversa em {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Abra este link no seu computador.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favoritos", "conversationLabelGroups": "Grupos", "conversationLabelPeople": "Pessoas", - "conversationLikesCaption": "{{number}} pessoas", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Abrir mapa", "conversationMemberJoined": "[bold]{{name}}[/bold] adicionou {{users}} à conversa", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] adicionou {{users}}, e [showmore]mais {{count}}[/showmore] à conversa", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removeu {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} foi removido desta conversa porque a Retenção Legal foi ativada. [link]Saiba mais[/link]", "conversationMemberRemovedYou": "[bold]Você[/bold] removeu {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Entregue", "conversationMissedMessages": "Você não usa este dispositivo há algum tempo. Algumas mensagens podem não aparecer aqui.", "conversationModalRestrictedFileSharingDescription": "Este arquivo não pôde ser compartilhado devido às suas restrições de compartilhamento.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Pesquisar por nome", "conversationParticipantsTitle": "Pessoas", "conversationPing": " pingou", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingou", "conversationPlaybackError": "Falha ao reproduzir", "conversationPopoverFavorite": "Adicionar aos favoritos", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Ops, não há gifs", "extensionsGiphyRandom": "Aleatório", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "O bloqueio obrigatório do aplicativo agora está desativado. Você não precisa de senha ou autenticação biométrica ao retornar ao aplicativo.", "featureConfigChangeModalApplockHeadline": "As configurações da equipe foram alteradas", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "A câmera nas chamadas está desativada", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "A auto-exclusão de mensagens está habilitada. Você pode definir um temporizador antes de escrever uma mensagem.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "A auto-exclusão de mensagens agora é obrigatório. Novas mensagens serão excluídas automaticamente após {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "Houve uma mudança no {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "O arquivo de  [bold]{{name}}[/bold]  não pode ser aberto", "fileTypeRestrictedOutgoing": "O compartilhamento de arquivos com a extensão {{fileExt}} não é permitido por sua organização", "folderViewTooltip": "Pastas", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Muitos caracteres", "groupCreationPreferencesErrorNameShort": "Pelo menos 1 caractere", "groupCreationPreferencesHeader": "Criar grupo", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Nome do grupo", "groupParticipantActionBlock": "Bloquear…", "groupParticipantActionCancelRequest": "Cancelar solicitação…", @@ -673,25 +728,26 @@ "mediaBtnPlay": "Reproduzir", "messageCouldNotBeSentBackEndOffline": "Message could not be sent as the back-end of [bold]{{domain}}[/bold] could not be reached.", "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", - "messageCouldNotBeSentRetry": "Retry", + "messageCouldNotBeSentRetry": "Tentar novamente", "messageDetailsEdited": "Editado: {{edited}}", - "messageDetailsNoLikes": "Ninguém curtiu esta mensagem ainda.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Ninguém leu esta mensagem ainda.", "messageDetailsReceiptsOff": "As confirmações de leitura não estavam ativadas quando esta mensagem foi enviada.", "messageDetailsSent": "Enviado: {{sent}}", "messageDetailsTitle": "Detalhes", - "messageDetailsTitleLikes": "Curtiu{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Lido{{count}}", - "messageFailedToSendHideDetails": "Hide details", - "messageFailedToSendParticipants": "{{count}} participants", - "messageFailedToSendParticipantsFromDomainPlural": "{{count}} participants from {{domain}}", - "messageFailedToSendParticipantsFromDomainSingular": "1 participant from {{domain}}", - "messageFailedToSendPlural": "didn't get your message.", - "messageFailedToSendShowDetails": "Show details", - "messageFailedToSendWillNotReceivePlural": "won't get your message.", - "messageFailedToSendWillNotReceiveSingular": "won't get your message.", - "messageFailedToSendWillReceivePlural": "will get your message later.", - "messageFailedToSendWillReceiveSingular": "will get your message later.", + "messageFailedToSendHideDetails": "Ocultar detalhes", + "messageFailedToSendParticipants": "{{count}} participantes", + "messageFailedToSendParticipantsFromDomainPlural": "{{count}} participantes de {{domain}}", + "messageFailedToSendParticipantsFromDomainSingular": "1 participante de {{domain}}", + "messageFailedToSendPlural": "não recebeu a sua mensagem.", + "messageFailedToSendShowDetails": "Mostrar detalhes", + "messageFailedToSendWillNotReceivePlural": "não receberá a sua mensagem.", + "messageFailedToSendWillNotReceiveSingular": "não receberá a sua mensagem.", + "messageFailedToSendWillReceivePlural": "receberá a sua mensagem mais tarde.", + "messageFailedToSendWillReceiveSingular": "receberá a sua mensagem mais tarde.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "Quando ativado, a conversa usará o novo protocolo de segurança de camada de mensagens (MLS).", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Não foi possível alterar o estado dos serviços.", "modalConversationRemoveAction": "Remover", "modalConversationRemoveCloseBtn": "Fechar janela 'Remover'", - "modalConversationRemoveGuestsAndServicesHeadline": "Desabilitar o acesso?", + "modalConversationRemoveGuestsHeadline": "Desabilitar acesso de convidado?", "modalConversationRemoveGuestsMessage": "Os convidados atuais serão removidos da conversa. Novos convidados não serão permitidos.", + "modalConversationRemoveGuestsOrServicesAction": "Desabilitar", "modalConversationRemoveHeadline": "Remover?", "modalConversationRemoveMessage": "{{user}} não conseguirá enviar ou receber mensagens nesta conversa.", + "modalConversationRemoveServicesHeadline": "Desabilitar acesso de serviços?", "modalConversationRemoveServicesMessage": "Os serviços atuais serão removidos da conversa. Novos serviços não serão permitidos.", "modalConversationRevokeLinkAction": "Revogar link", "modalConversationRevokeLinkCloseBtn": "Fechar janela 'Revogar o link'", @@ -918,10 +976,15 @@ "modalUserBlockHeadline": "Bloquear {{user}}?", "modalUserBlockMessage": "{{user}} não conseguirá entrar em contato com você ou convidá-lo para uma conversa em grupo.", "modalUserBlockedForLegalHold": "Este usuário está bloqueado devido à Retenção Legal. [link]Saiba mais[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Os convidados não podem ser adicionados", - "modalUserCannotConnectLegalHoldHeadline": "Não é possível conectar a este usuário", - "modalUserCannotConnectLegalHoldMessage": "Você não pode se conectar a este usuário devido à Retenção Legal. [link]Saiba mais[/link] ", - "modalUserLearnMore": "Learn more", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", + "modalUserLearnMore": "Saiba mais", "modalUserUnblockAction": "Desbloquear", "modalUserUnblockHeadline": "Desbloquear?", "modalUserUnblockMessage": "{{user}} poderá entrar em contato com você e adicioná-lo às conversas em grupo novamente.", @@ -964,19 +1027,19 @@ "notificationTitleGroup": "{{user}} em {{conversation}}", "notificationVoiceChannelActivate": "Chamando", "notificationVoiceChannelDeactivate": "Chamou", - "oauth.allow": "Allow", - "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.allow": "Permitir", + "oauth.cancel": "Não permitir", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", - "offlineBackendLearnMore": "Learn more", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", + "offlineBackendLearnMore": "Saiba mais", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", "ongoingGroupVideoCall": "Ongoing video conference call with {{conversationName}}, your camera is {{cameraStatus}}.", @@ -1049,12 +1112,12 @@ "preferencesAccountReadReceiptsDetail": "Quando isso estiver desativado, você não poderá ver as confirmações de leitura de outras pessoas. Essa configuração não se aplica a conversas em grupo.", "preferencesAccountResetAppLockPassphrase": "Redefinir a senha de bloqueio do aplicativo", "preferencesAccountResetPassword": "Redefinir senha", - "preferencesAccountSelectedLabel": "Selected", + "preferencesAccountSelectedLabel": "Selecionado", "preferencesAccountSetAppLockPassphrase": "Definir a senha de bloqueio do aplicativo", "preferencesAccountTeam": "Equipe", "preferencesAccountTypingIndicatorCheckbox": "Indicador de digitação", "preferencesAccountTypingIndicatorsDetail": "Quando esta opção estiver desativada, você não poderá ver quando outras pessoas estiverem digitando e elas não verão quando você estiver digitando. Esta configuração se aplica a todas as conversas neste dispositivo.", - "preferencesAccountUpdateLabel": "Change your status to", + "preferencesAccountUpdateLabel": "Alterar seu status para", "preferencesAccountUsername": "Nome de usuário", "preferencesAccountUsernameAvailable": "Disponível", "preferencesAccountUsernameErrorTaken": "Já está sendo usado", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Histórico", "preferencesOptionsBackupImportHeadline": "Restaurar", "preferencesOptionsBackupImportSecondary": "Você só pode restaurar o histórico de um backup da mesma plataforma. Seu backup substituirá as conversas que você pode ter neste dispositivo.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Chamadas", "preferencesOptionsCallLogs": "Solução de problemas", "preferencesOptionsCallLogsDetail": "Salve o relatório de depuração de chamada. Essas informações ajudam o suporte do {{brandName}} a diagnosticar problemas com as chamadas.", @@ -1110,9 +1174,9 @@ "preferencesOptionsEnableSoundlessIncomingCallsDetails": "Ative para silenciar as chamadas recebidas quando você já estiver em uma chamada em andamento.", "preferencesOptionsEnableVbrCheckbox": "Codificação de taxa de bits variável", "preferencesOptionsEnableVbrDetails": "Isso faz com que as chamadas de áudio usem menos dados e funcionem melhor em redes mais lentas. Desligue para usar a codificação de taxa de bits constante (CBR). Essa configuração afeta apenas chamadas 1:1; as chamadas em conferência sempre usam a codificação CBR.", - "preferencesOptionsFontSizeDefault": "Default", - "preferencesOptionsFontSizeLarge": "Large", - "preferencesOptionsFontSizeSmall": "Small", + "preferencesOptionsFontSizeDefault": "Padrão", + "preferencesOptionsFontSizeLarge": "Grande", + "preferencesOptionsFontSizeSmall": "Pequeno", "preferencesOptionsInputLevelDetected": "Audio detected from microphone", "preferencesOptionsInputLevelNotDetected": "No audio detected from microphone", "preferencesOptionsNotifications": "Notificações", @@ -1261,11 +1325,11 @@ "tooltipPreferencesRename": "Altere seu nome", "tooltipPreferencesTabs": "Abas de preferências", "tooltipSearchClose": "Fechar (Esc)", - "unavailableUser": "Name not available", + "unavailableUser": "Nome indisponível", "unknownApplicationErrorDescription": "An unknown application error occurred. Please retry to get back to your recent action or reload Wire to get back to your last conversation.", - "unknownApplicationErrorReload": "Reload", - "unknownApplicationErrorTitle": "Something went wrong", - "unknownApplicationErrorTryAgain": "Try again", + "unknownApplicationErrorReload": "Recarregar", + "unknownApplicationErrorTitle": "Alguma coisa deu errado", + "unknownApplicationErrorTryAgain": "Tentar novamente", "unsupported.desktopOnlyMessage": "Em vez disso, use o aplicativo do {brandName} para desktop.", "unsupported.headlineBrowser": "Este navegador não é compatível.", "unsupported.headlineCookies": "Ativar cookies", @@ -1282,11 +1346,11 @@ "userAvailabilityAway": "Ausente", "userAvailabilityBusy": "Ocupado", "userAvailabilityNone": "Nenhum", - "userListContacts": "Contacts", - "userListSelectedContacts": "Selected ({{selectedContacts}})", + "userListContacts": "Contatos", + "userListSelectedContacts": "Selecionado ({{selectedContacts}})", "userNotFoundMessage": "Você pode não ter permissão com esta conta ou a pessoa pode não estar no {{brandName}}.", "userNotFoundTitle": "O {{brandName}} não consegue encontrar esta pessoa.", - "userNotVerified": "Get certainty about {{user}}’s identity before connecting.", + "userNotVerified": "Tenha certeza sobre a identidade de {{user}} antes de se conectar.", "userProfileButtonConnect": "Conectar", "userProfileButtonIgnore": "Ignorar", "userProfileButtonUnblock": "Desbloquear", @@ -1306,7 +1370,7 @@ "videoCallOverlayHangUp": "Encerrar", "videoCallOverlayMicrophone": "Microfone", "videoCallOverlayShareScreen": "Compartilhar tela", - "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantConnecting": "Conectando...", "videoCallPaused": "Vídeo pausado", "videoCallScreenShareNotSupported": "Seu navegador não oferece suporte a compartilhamento de tela", "videoSpeakersTabAll": "Todos ({{count}})", diff --git a/src/i18n/pt-PT.json b/src/i18n/pt-PT.json index 53df9dae2b7..9ab0a5ffd6f 100644 --- a/src/i18n/pt-PT.json +++ b/src/i18n/pt-PT.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Entrada inválida", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "Este endereço de email já está em uso. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "O convite foi revogado ou expirou", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Entrada inválida", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Seguinte", "accountForm.terms": "Eu aceito os termos e condições", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Adicionar", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Verifique sua caixa de correio eletrónico e siga as instruções.", "authPostedResendHeadline": "Recebeu email.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Adicionar", "authVerifyAccountDetail": "Permite que use o {{brandName}} em vários dispositivos.", "authVerifyAccountHeadline": "Adicionar o endereço de e-mail e palavra-passe.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Pode solicitar um novo código {{expiration}}.", "authVerifyPasswordHeadline": "Insira a sua palavra-passe", "backupCancel": "Cancelar", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Aceitar", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " verificar dispositivos", "conversationDeviceStartedUsingMany": " começou a usar", "conversationDeviceStartedUsingOne": " começou a usar", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " retirou a verificação de um de", "conversationDeviceUserDevices": " dispositivos de {{user}}", "conversationDeviceYourDevices": " seus dispositivos", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Convidado", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Criar uma conta", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Iniciar sessão", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} pessoas", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Abrir Mapa", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Entregue", "conversationMissedMessages": "Não usou este dispositivo durante algum tempo. Algumas mensagens podem não ser mostradas.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Pesquisar por nome", "conversationParticipantsTitle": "Pessoas", "conversationPing": " pingou", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingou", "conversationPlaybackError": "Incapaz de reproduzir", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "• {{tag}} através de giphy.com", "extensionsGiphyNoGifs": "Oops, sem gifs", "extensionsGiphyRandom": "Aleatório", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancelar pedido", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Remover", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remover?", "modalConversationRemoveMessage": "{{user}} não será capaz de enviar ou receber mensagens nesta conversa.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Bloquear {{user}}?", "modalUserBlockMessage": "{{user}} não será capaz de o contactar ou adicioná-lo para conversas em grupo.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Desbloquear", "modalUserUnblockHeadline": "Desbloquear?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Ligou", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/ro-RO.json b/src/i18n/ro-RO.json index c0cf8c294e8..cbd9c5810ab 100644 --- a/src/i18n/ro-RO.json +++ b/src/i18n/ro-RO.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Conținut nevalid", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "Adresa de e-mail este deja folosită. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitația a fost revocată sau a expirat", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Conținut nevalid", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Mai departe", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Adaugă", "addParticipantsHeader": "Adaugă persoane", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Verifică e-mailul și urmează instrucțiunile.", "authPostedResendHeadline": "Ai primit un mesaj.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Adaugă", "authVerifyAccountDetail": "Aceasta îți permite să folosești {{brandName}} pe mai multe dispozitive.", "authVerifyAccountHeadline": "Adaugă o adresă de e-mail și o parolă.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Poți cere un nou cod de {{expiration}}.", "authVerifyPasswordHeadline": "Introdu parola ta", "backupCancel": "Renunță", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Ceva nu a mers bine", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Acceptă", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " verifică dispozitivele", "conversationDeviceStartedUsingMany": " a început să folosească", "conversationDeviceStartedUsingOne": " a început să folosească", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unul dintre dispozitivele", "conversationDeviceUserDevices": " dispozitivele lui {{user}}", "conversationDeviceYourDevices": " tale neverificate", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Vizitator", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Autentificare", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} persoane", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Deschide harta", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Livrat", "conversationMissedMessages": "Nu ai folosit acest dispozitiv de ceva timp. Unele mesaje ar putea să nu apară aici.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Caută după nume", "conversationParticipantsTitle": "Persoane", "conversationPing": " pinguit", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinguit", "conversationPlaybackError": "Nu se poate reda", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Ups, nu sunt gif-uri", "extensionsGiphyRandom": "La întâmplare", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Prea multe caractere", "groupCreationPreferencesErrorNameShort": "Cel puțin un caracter", "groupCreationPreferencesHeader": "Grup nou", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Nume grup", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Anulează cererea", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Șterge", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Șterge?", "modalConversationRemoveMessage": "{{user}} nu va mai putea trimite sau primi mesaje în această conversație.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blochează pe {{user}}?", "modalUserBlockMessage": "{{user}} nu te va putea contacta sau adăuga la conversații de grup.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Deblochează", "modalUserUnblockHeadline": "Deblochează?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Apel în curs", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index f2bc4f72776..9687fbfd817 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Проверьте введенные данные и повторите попытку", "BackendError.LABEL.ALREADY_INVITED": "Этот email уже был приглашен ранее", - "BackendError.LABEL.BAD_REQUEST": "Неверный ввод", + "BackendError.LABEL.BAD_REQUEST": "Проверьте введенные данные и повторите попытку", "BackendError.LABEL.BLACKLISTED_EMAIL": "Этот адрес email не разрешен", "BackendError.LABEL.BLACKLISTED_PHONE": "Этот номер телефона не разрешен", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Повторите попытку или запросите другой код.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Эта беседа достигла предела участников", "BackendError.LABEL.EMAIL_EXISTS": "Этот адрес email уже используется. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Вход с помощью адреса email требуется, если активирована двухфакторная аутентификация", + "BackendError.LABEL.EMAIL_REQUIRED": "Вы не можете использовать псевдоним, поскольку активирована двухфакторная аутентификация. Пожалуйста, авторизуйтесь, используя свой адрес email.", "BackendError.LABEL.HANDLE_EXISTS": "Этот псевдоним уже занят", "BackendError.LABEL.HANDLE_TOO_SHORT": "Пожалуйста, введите псевдоним длиной не менее 2 символов", "BackendError.LABEL.INVALID_CODE": "Повторите попытку или запросите другой код.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Недопустимый псевдоним", "BackendError.LABEL.INVALID_INVITATION_CODE": "Приглашение отозвано или просрочено", "BackendError.LABEL.INVALID_OPERATION": "Неверная операция", - "BackendError.LABEL.INVALID_PAYLOAD": "Неверный ввод", + "BackendError.LABEL.INVALID_PAYLOAD": "Проверьте введенные данные и повторите попытку", "BackendError.LABEL.INVALID_PHONE": "Недопустимый номер телефона", "BackendError.LABEL.KEY_EXISTS": "Указанный вами адрес email уже зарегистрирован.{supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Проверьте введенные данные и повторите попытку", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Вернуться к информации о беседе", "accessibility.conversation.sectionLabel": "Список бесед", "accessibility.conversationAssetImageAlt": "Изображение от {{username}} дата {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Открыть параметры обмена сообщениями", + "accessibility.conversationContextMenuOpenLabel": "Открыть больше возможностей", "accessibility.conversationDetailsActionDevicesLabel": "Показать устройства", "accessibility.conversationDetailsActionGroupAdminLabel": "Задать администратора группы", "accessibility.conversationDetailsActionNotificationsLabel": "Показать настройки уведомлений", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Пропущенный пинг", "accessibility.conversationStatusUnreadReply": "Непрочитанный ответ", "accessibility.conversationTitle": "{{username}} статус {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Поиск смайликов", "accessibility.giphyModal.close": "Закрыть окно GIF", "accessibility.giphyModal.loading": "Загрузка GIF", "accessibility.giphyModal.selectGif": "Выбрать GIF", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Настройки - устройства", "accessibility.headings.preferencesOptions": "Настройки - настройки", "accessibility.headings.sidebar": "Навигация", + "accessibility.messageActionsMenuEmoji": "Выбрать смайлик", + "accessibility.messageActionsMenuLabel": "Действия с сообщением", + "accessibility.messageActionsMenuLike": "Отреагировать сердечком", + "accessibility.messageActionsMenuThumbsUp": "Отреагировать пальцем вверх", "accessibility.messageDetailsReadReceipts": "Сообщение просмотрено {{readReceiptText}}, открыть подробности", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} реакций, реакция с {{emojiName}}", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} реакция, реакция с {{emojiName}}", "accessibility.messages.like": "Понравилось сообщение", "accessibility.messages.liked": "Не нравится", "accessibility.openConversation": "Открыть профиль {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Вперед", "accountForm.terms": "Я принимаю условия и положения", "accountForm.termsAndPrivacyPolicy": "Я принимаю политику конфиденциальности и условия и положения", + "acme.done.button": "OK", + "acme.done.button.close": "Закрыть окно 'Сертификат загружен'", + "acme.done.headline": "Сертификат загружен", + "acme.done.paragraph": "Теперь сертификат активен, и ваше устройство верифицировано. Более подробную информацию об этом сертификате можно найти в Настройках Wire в разделе Устройства.", + "acme.error.button.close": "Закрыть окно 'Что-то пошло не так'", + "acme.error.button.primary": "Повторить", + "acme.error.button.secondary": "Отмена", + "acme.error.headline": "Что-то пошло не так", + "acme.error.paragraph": "Сертификат загрузить не удалось

Вы можете повторить попытку получения сертификата сейчас. Или система попытается сделать это автоматически в фоновом режиме в течение следующих 24 часов.", + "acme.inProgress.button.close": "Закрыть окно 'Получение сертификата'", + "acme.inProgress.headline": "Получить сертификат", + "acme.inProgress.paragraph.alt": "Загрузка...", + "acme.inProgress.paragraph.main": "Пожалуйста, перейдите в браузер и войдите в сервис сертификации.

В случае если сайт не открывается, вы можете перейти на него вручную по следующему URL:

{{url}}", + "acme.settingsChanged.button.close": "Закрыть окно 'Сертификат сквозной идентификации'", + "acme.settingsChanged.button.primary": "Получить сертификат", + "acme.settingsChanged.button.secondary": "Напомнить позже", + "acme.settingsChanged.headline.alt": "Сертификат сквозной идентификации", + "acme.settingsChanged.headline.main": "Настройки команды изменены", + "acme.settingsChanged.paragraph": "Для повышения безопасности использования Wire предусмотрена сквозная идентификация. Верификация устройства теперь происходит автоматически с использованием сертификата.

Введите свои учетные данные Wire на внешней веб-странице, на которую мы вас перенаправим. При таком входе вы автоматически получаете сертификат верификации для данного устройства. При этом будет сохраняться история бесед.

Узнайте больше о сквозной идентификации .", "addParticipantsConfirmLabel": "Добавить", "addParticipantsHeader": "Добавить участников", "addParticipantsHeaderWithCounter": "Добавить участников ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Проверьте свой почтовый ящик и следуйте инструкциям.", "authPostedResendHeadline": "Вам письмо.", "authSSOLoginTitle": "Войти с помощью единого входа", + "authSetUsername": "Задать псевдоним", "authVerifyAccountAdd": "Добавить", "authVerifyAccountDetail": "Это позволит использовать {{brandName}} на нескольких устройствах.", "authVerifyAccountHeadline": "Добавить email и пароль.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Вы можете запросить новый код {{expiration}}.", "authVerifyPasswordHeadline": "Введите свой пароль", "backupCancel": "Отмена", + "backupDecryptionModalAction": "Продолжить", + "backupDecryptionModalMessage": "Резервная копия защищена паролем.", + "backupDecryptionModalPlaceholder": "Пароль", + "backupDecryptionModalTitle": "Введите пароль", + "backupEncryptionModalAction": "Создать резервную копию сейчас", + "backupEncryptionModalCloseBtn": "Отмена", + "backupEncryptionModalMessage": "Резервная копия будет сжата, и ее можно зашифровать с помощью пароля.", + "backupEncryptionModalPlaceholder": "Пароль (необязательно)", + "backupEncryptionModalTitle": "Установить пароль", "backupExportGenericErrorHeadline": "Не удалось сохранить файл", "backupExportGenericErrorSecondary": "Резервное копирование не завершено.", "backupExportProgressCompressing": "Подготовка файла резервной копии", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Она пригодится для восстановления истории в случае потери или замены компьютера.", "backupImportAccountErrorHeadline": "Некорректная резервная копия", "backupImportAccountErrorSecondary": "Вы не можете восстановить историю из другой учетной записи.", + "backupImportFormatErrorHeadline": "Несовместимая резервная копия", + "backupImportFormatErrorSecondary": "Этот формат резервной копии не поддерживается", "backupImportGenericErrorHeadline": "Что-то пошло не так", "backupImportGenericErrorSecondary": "Ваша история не может быть восстановлена.", "backupImportIncompatibleErrorHeadline": "Некорректная резервная копия", "backupImportIncompatibleErrorSecondary": "Вы не можете восстановить историю из другой учетной записи.", - "backupImportOutdatedErrorHeadline": "Несовместимая резервная копия", + "backupImportPasswordErrorHeadline": "Неверный пароль", + "backupImportPasswordErrorSecondary": "Пожалуйста, проверьте введенные данные и повторите попытку", "backupImportProgressHeadline": "Подготовка…", "backupImportProgressSecondary": "Восстановление истории · {{processed}} из {{total}} — {{progress}}%", "backupImportSuccessHeadline": "История восстановлена.", "backupImportVersionErrorHeadline": "Несовместимая резервная копия", "backupImportVersionErrorSecondary": "Эта резервная копия была создана в более новой или устаревшей версии {{brandName}} и не может быть восстановлена.", + "backupPasswordHint": "Используйте как минимум {{minPasswordLength}} символов, включая одну строчную букву, одну заглавную букву, цифру и специальный символ.", "backupTryAgain": "Повторить попытку", "buttonActionError": "Ваш ответ не может быть отправлен, пожалуйста, повторите попытку", "callAccept": "Принять", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Верифицируйте устройства", "conversationDeviceStartedUsingMany": " начали использовать", "conversationDeviceStartedUsingOne": " начал(-а) использовать", + "conversationDeviceStartedUsingYou": " начали использовать", "conversationDeviceUnverified": " деверифицировали одно из", "conversationDeviceUserDevices": " устройства {{user}}", "conversationDeviceYourDevices": " ваши устройства", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Контакты", "conversationGuestIndicator": "Гость", "conversationImageAssetRestricted": "Получение изображений запрещено", - "conversationJoin.buttonExistentAccountOpen": "Открыть в {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, вас пригласили принять участие в беседе в {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Войти в браузере", "conversationJoin.existentAccountJoinWithoutLink": "Присоединиться к беседе", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} без аккаунта", - "conversationJoin.existentAccountSubhead": "Аудио- и видеоконференции, обмен текстовыми сообщениями, совместное использование файлов и демонстрация экрана - все это со сквозным шифрованием.", + "conversationJoin.existentAccountUserName": "Вы вошли как {selfName}", "conversationJoin.fullConversationHeadline": "Невозможно присоединиться к беседе", "conversationJoin.fullConversationSubhead": "Достигнуто максимальное количество участников в этой беседе.", "conversationJoin.hasAccount": "Уже зарегистрированы?", - "conversationJoin.headline": "Вас пригласили принять участие в беседе в {brandName}", - "conversationJoin.invalidCreateAccountLink": "Создать аккаунт", - "conversationJoin.invalidCreateAccountText": "для группового общения и вызовов.", + "conversationJoin.headline": "Эта беседа ведется в {domain}", "conversationJoin.invalidHeadline": "Беседа не найдена", "conversationJoin.invalidSubhead": "Срок действия ссылки на эту групповую беседу истек или беседа стала приватной.", - "conversationJoin.loginLink": "Вход", + "conversationJoin.join": "Присоединиться", + "conversationJoin.joinButton": "Присоединиться как временный гость", + "conversationJoin.joinWithOtherAccount": "Присоединиться с другим аккаунтом", + "conversationJoin.mainHeadline": "Присоединиться к беседе", "conversationJoin.namePlaceholder": "Ваше имя", + "conversationJoin.noAccountHead": "Нет аккаунта?", "conversationJoin.subhead": "Присоединяйтесь к беседе в качестве временного гостя (доступ истекает через 24 часа)", "conversationJoin.unsupportedJoinHeadline": "Вас пригласили принять участие в беседе в {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Откройте эту ссылку на своем компьютере.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Избранное", "conversationLabelGroups": "Группы", "conversationLabelPeople": "Контакты", - "conversationLikesCaption": "{{number}} участникам", + "conversationLikesCaptionPlural": "{{number}} участника(ов)", + "conversationLikesCaptionReactedPlural": "отреагировал {{emojiName}}", + "conversationLikesCaptionReactedSingular": "отреагировал {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} участник", "conversationLocationLink": "Открыть карту", "conversationMemberJoined": "[bold]{{name}}[/bold] добавлен(-а) {{users}} в беседу", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] добавил(-а) в беседу {{users}} и [showmore]{{count}} еще[/showmore]", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] удален(-а) {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} был(-а) удален(-а) из этой беседы, поскольку были активированы юридические ограничения. [link]Подробнее[/link]", "conversationMemberRemovedYou": "[bold]Вы[/bold] удалены {{users}}", + "conversationMemberWereRemoved": "{{users}} были удалены из беседы", "conversationMessageDelivered": "Доставлено", "conversationMissedMessages": "Вы не использовали это устройство продолжительное время. Некоторые сообщения могут не отображаться.", "conversationModalRestrictedFileSharingDescription": "Этим файлом нельзя поделиться из-за ограничений на совместное использование файлов.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Поиск по имени", "conversationParticipantsTitle": "Участники", "conversationPing": " отправил(-а) пинг", + "conversationPingConfirmTitle": "Вы действительно хотите отправить пинг {{memberCount}} пользователям?", "conversationPingYou": " отправили пинг", "conversationPlaybackError": "Невозможно воспроизвести", "conversationPopoverFavorite": "Добавить в избранное", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • через giphy.com", "extensionsGiphyNoGifs": "Упс, нет GIF-ок", "extensionsGiphyRandom": "Случайно", - "failedToAddParticipant": "[bold]{{name}}[/bold] не может быть добавлен в группу, поскольку бэкэнд [bold]{{domain}}[/bold] недоступен.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] не может быть добавлен в группу, поскольку бэкэнд [bold]{{domain}}[/bold] недоступен.", - "failedToAddParticipants": "[bold]{{total}} участников[/bold] не удалось добавить в группу.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] и [bold]{{name}}[/bold] не могут быть добавлены в группу, поскольку бэкэнд [bold]{{domain}}[/bold] недоступен.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] не могут быть добавлены в группу, поскольку их бэкэнд не взаимодействует с бэкэндами остальных участников группы.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] не может быть добавлен в группу, поскольку бэкэнд [bold]{{domain}}[/bold] недоступен.", + "failedToAddParticipantsPlural": "[bold]{{total}} участников[/bold] не удалось добавить в группу.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] и [bold]{{name}}[/bold] не могут быть добавлены в группу, поскольку их бэкенды не взаимодействуют друг с другом.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] и [bold]{{name}}[/bold] не могут быть добавлены в группу, поскольку бэкэнд [bold]{{domain}}[/bold] недоступен.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] не могут быть добавлены в группу, поскольку их бэкенды не взаимодействуют друг с другом.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] не может быть добавлен в группу, поскольку бэкэнд [bold]{{domain}}[/bold] недоступен.", "featureConfigChangeModalApplock": "Обязательная блокировка приложения теперь отключена. При возвращении в приложение не требуется ввод пароля или биометрическая аутентификация.", "featureConfigChangeModalApplockHeadline": "Настройки команды изменены", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Камера во время вызовов отключена", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Самоудаляющиеся сообщения включены. Перед написанием сообщения можно установить таймер.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Самоудаляющиеся сообщения теперь обязательны. Новые сообщения будут самоудаляться спустя {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "В {{brandName}} произошли изменения", + "federationConnectionRemove": "Бэкэнды [bold]{{backendUrlOne}}[/bold] и [bold]{{backendUrlTwo}}[/bold] прекратили взаимодействие.", + "federationDelete": "[bold]Ваш бэкэнд[/bold] прекратил взаимодействие с [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "Файл от [bold]{{name}}[/bold]  не может быть открыт", "fileTypeRestrictedOutgoing": "Совместное использование файлов с расширением {{fileExt}} запрещено вашей организацией", "folderViewTooltip": "Папки", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Слишком много символов", "groupCreationPreferencesErrorNameShort": "Не менее 1 символа", "groupCreationPreferencesHeader": "Создать группу", + "groupCreationPreferencesNonFederatingEditList": "Изменить список участников", + "groupCreationPreferencesNonFederatingHeadline": "Невозможно создать группу", + "groupCreationPreferencesNonFederatingLeave": "Отменить создание группы", + "groupCreationPreferencesNonFederatingMessage": "Пользователи бэкендов {{backends}} не могут присоединиться к общей групповой беседе, так как их бэкенды не могут взаимодействовать друг с другом. Для создания группы удалите затронутых пользователей. [link]Подробнее[/link]", "groupCreationPreferencesPlaceholder": "Название группы", "groupParticipantActionBlock": "Блокировать…", "groupParticipantActionCancelRequest": "Отменить запрос…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Не удалось отправить сообщение из-за проблем с подключением.", "messageCouldNotBeSentRetry": "Повторить", "messageDetailsEdited": "Изменено: {{edited}}", - "messageDetailsNoLikes": "Сообщение еще никому не понравилось.", + "messageDetailsNoReactions": "На сообщение еще никто не отреагировал", "messageDetailsNoReceipts": "Сообщение еще никем не прочитано.", "messageDetailsReceiptsOff": "Отчетов о прочтении не существовало, когда это сообщение было отправлено.", "messageDetailsSent": "Отправлено: {{sent}}", "messageDetailsTitle": "Детали", - "messageDetailsTitleLikes": "Понравилось{{count}}", + "messageDetailsTitleReactions": "Реакции{{count}}", "messageDetailsTitleReceipts": "Прочитано{{count}}", "messageFailedToSendHideDetails": "Скрыть детали", "messageFailedToSendParticipants": "{{count}} участников", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "не получит ваше сообщение.", "messageFailedToSendWillReceivePlural": "получит ваше сообщение позднее.", "messageFailedToSendWillReceiveSingular": "получит ваше сообщение позднее.", + "mlsConversationRecovered": "Вы давно не пользовались этим устройством, или возникла проблема. Некоторые старые сообщения могут не отображаться.", "mlsToggleInfo": "При включении в беседе будет использоваться новый протокол безопасности уровня обмена сообщениями (MLS).", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Не удалось изменить статус сервисов.", "modalConversationRemoveAction": "Удалить", "modalConversationRemoveCloseBtn": "Закрыть окно 'Удалить'", - "modalConversationRemoveGuestsAndServicesHeadline": "Отключить доступ?", + "modalConversationRemoveGuestsHeadline": "Отключить доступ гостей?", "modalConversationRemoveGuestsMessage": "Текущие гости будут удалены из беседы. Новые гости допущены не будут.", + "modalConversationRemoveGuestsOrServicesAction": "Отключить", "modalConversationRemoveHeadline": "Удалить?", "modalConversationRemoveMessage": "{{user}} больше не сможет отправлять и получать сообщения в этой беседе.", + "modalConversationRemoveServicesHeadline": "Отключить доступ сервисов?", "modalConversationRemoveServicesMessage": "Текущие сервисы будут удалены из беседы. Новые сервисы допущены не будут.", "modalConversationRevokeLinkAction": "Отозвать ссылку", "modalConversationRevokeLinkCloseBtn": "Закрыть окно 'Отозвать ссылку'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Заблокировать {{user}}?", "modalUserBlockMessage": "{{user}} больше не сможет связаться с вами или добавить вас в групповые беседы.", "modalUserBlockedForLegalHold": "Этот пользователь заблокирован из-за юридических ограничений. [link]Подробнее[/link]", + "modalUserCannotAcceptConnectionMessage": "Запрос на добавление не может быть принят", "modalUserCannotBeAddedHeadline": "Гости не могут быть добавлены", - "modalUserCannotConnectLegalHoldHeadline": "Невозможно подключиться к этому пользователю", - "modalUserCannotConnectLegalHoldMessage": "Вы не можете подключиться к этому пользователю из-за юридических ограничений. [link]Подробнее[/link]", + "modalUserCannotCancelConnectionMessage": "Запрос на добавление не может быть отменен", + "modalUserCannotConnectHeadline": "Невозможно добавить", + "modalUserCannotIgnoreConnectionMessage": "Запрос на добавление не может быть проигнорирован", + "modalUserCannotSendConnectionLegalHoldMessage": "Вы не можете связаться с этим пользователем из-за юридических ограничений. [link]Подробнее[/link]", + "modalUserCannotSendConnectionMessage": "Не удалось отправить запрос на добавление", + "modalUserCannotSendConnectionNotFederatingMessage": "Вы не можете отправить запрос на подключение, поскольку ваш бэкэнд не объединен с бэкэндом {{username}}.", "modalUserLearnMore": "Подробнее", "modalUserUnblockAction": "Разблокировать", "modalUserUnblockHeadline": "Разблокировать?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Звонил(-а)", "oauth.allow": "Разрешить", "oauth.cancel": "Не разрешать", - "oauth.details": "Если вы примете перечисленные разрешения, Wire™ сможет подключаться к вашему календарю. Он не сможет видеть содержимое вашего календаря. Доступны будут только те события, которые происходят с Wire. Если вы не примете указанные разрешения, вы не сможете использовать это дополнение.", + "oauth.details": "Если вы подтвердите перечисленные выше разрешения, ваш Outlook Calendar сможет подключиться к Wire. В противном случае использовать эту надстройку будет невозможно.", "oauth.headline": "Разрешения", - "oauth.learnMore": "Узнать больше об этих разрешениях в настройках.", + "oauth.learnMore": "Узнать больше об этих разрешениях.", "oauth.logout": "Сменить аккаунт", "oauth.privacypolicy": "Политика конфиденциальности Wire", - "oauth.scope.read_feature_configs": "Доступ команда к возможностям конфигурации", - "oauth.scope.read_self": "Доступ к информации пользователя", - "oauth.scope.write_conversations": "Создать беседу", - "oauth.scope.write_conversations_code": "Создать гостевую ссылку на беседу", - "oauth.subhead": "{app} необходимы разрешения для:", + "oauth.scope.read_feature_configs": "Просмотр конфигурации возможностей вашей команды", + "oauth.scope.read_self": "Просмотр псевдонима Wire, названия профиля и email", + "oauth.scope.write_conversations": "Создать беседу в Wire", + "oauth.scope.write_conversations_code": "Создание гостевых ссылок на беседы в Wire", + "oauth.subhead": "Microsoft Outlook требует вашего разрешения для:", "offlineBackendLearnMore": "Подробнее", "ongoingAudioCall": "Текущий аудиовызов с {{conversationName}}.", "ongoingGroupAudioCall": "Текущий групповой вызов с {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "История", "preferencesOptionsBackupImportHeadline": "Восстановление", "preferencesOptionsBackupImportSecondary": "Восстановить историю можно только из резервной копии одной и той же платформы. Резервная копия перезапишет беседы на этом устройстве.", + "preferencesOptionsBackupTryAgain": "Повторить попытку", "preferencesOptionsCall": "Звонки", "preferencesOptionsCallLogs": "Устранение неполадок", "preferencesOptionsCallLogsDetail": "Сохранить отладочный отчет вызова. Эта информация помогает службе поддержки {{brandName}} диагностировать проблемы со звонками.", diff --git a/src/i18n/si-LK.json b/src/i18n/si-LK.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/si-LK.json +++ b/src/i18n/si-LK.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/sk-SK.json b/src/i18n/sk-SK.json index b543e9ad483..e55784af6ba 100644 --- a/src/i18n/sk-SK.json +++ b/src/i18n/sk-SK.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Pridať", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Skontrolujte Vašu e-mailovú schránku a postupujte podľa pokynov.", "authPostedResendHeadline": "Máte e-mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Pridať", "authVerifyAccountDetail": "To vám umožní používať {{brandName}} na viacerých zariadeniach.", "authVerifyAccountHeadline": "Pridať e-mailovú adresu a heslo.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Môžete požiadať o nový kód {{expiration}}.", "authVerifyPasswordHeadline": "Zadajte Vaše heslo", "backupCancel": "Zrušiť", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Prijať", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " overiť zariadenia", "conversationDeviceStartedUsingMany": " začal používať", "conversationDeviceStartedUsingOne": " začal používať", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " neoverený jeden z", "conversationDeviceUserDevices": " {{user}}´s zariadenia", "conversationDeviceYourDevices": " Vaše zariadenia", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Hosť", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Prihlásenie", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} ľudí", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Otvoriť mapu", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Doručená", "conversationMissedMessages": "Na chvíľu ste nepoužili toto zariadenie. Niektoré správy sa nemusia zobraziť.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Vyhľadať podľa mena", "conversationParticipantsTitle": "Ľudia", "conversationPing": " pingol", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingol", "conversationPlaybackError": "Prehrávanie sa nepodarilo", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • cez giphy.com", "extensionsGiphyNoGifs": "Ej, žiadne gify", "extensionsGiphyRandom": "Náhodný", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Zrušiť požiadavku", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Odstrániť", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Odstrániť?", "modalConversationRemoveMessage": "{{user}} nebude môcť odosielať ani prijímať správy v tomto rozhovore.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokovať {{user}}?", "modalUserBlockMessage": "{{user}} Vás nebude môcť kontaktovať, alebo Vás pozvať do skupinového rozhovoru.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Odblokovať", "modalUserUnblockHeadline": "Odblokovať?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Volal", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/sl-SI.json b/src/i18n/sl-SI.json index c9f8d6a2d61..9ff238e8c3f 100644 --- a/src/i18n/sl-SI.json +++ b/src/i18n/sl-SI.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Dodaj", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Preverite vašo e-pošto in sledite navodilom.", "authPostedResendHeadline": "Imate pošto.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Dodaj", "authVerifyAccountDetail": "To vam omogoča uporabo {{brandName}} na večih napravah.", "authVerifyAccountHeadline": "Dodajte e-poštni naslov in geslo.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Lahko zahtevate novo kodo {{expiration}}.", "authVerifyPasswordHeadline": "Vnesite vaše geslo", "backupCancel": "Prekliči", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Sprejmi", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " preverite naprave", "conversationDeviceStartedUsingMany": " začel(-a) uporabljati", "conversationDeviceStartedUsingOne": " začel(-a) uporabljati", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " odstranil(-a) preveritev ene izmed", "conversationDeviceUserDevices": " Naprave od {{user}}", "conversationDeviceYourDevices": " vaših naprav", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Prijava", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} oseb", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Odpri zemljevid", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Dostavljeno", "conversationMissedMessages": "Te naprave nekaj časa niste uporabljali. Nekatera sporočila se morda tukaj ne bodo pojavila.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Iskanje po imenu", "conversationParticipantsTitle": "Osebe", "conversationPing": " je pingal(-a)", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " je pingal(-a)", "conversationPlaybackError": "Ni možno predvajati", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • preko giphy.com", "extensionsGiphyNoGifs": "Ups, ni najdenih gifov", "extensionsGiphyRandom": "Naključno", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Prekliči prošnjo", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "V redu", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Odstrani", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Odstrani?", "modalConversationRemoveMessage": "{{user}} ne bo mogel pošiljati ali prejeti sporočila v tem pogovoru.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blokiraj {{user}}?", "modalUserBlockMessage": "{{user}} vas ne bo mogel kontaktirati ali dodati v skupinske pogovore.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Odblokiraj", "modalUserUnblockHeadline": "Odblokiraj?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Je klical(-a)", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/sr-SP.json b/src/i18n/sr-SP.json index f85d3be921b..26bfd3833d5 100644 --- a/src/i18n/sr-SP.json +++ b/src/i18n/sr-SP.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Проверите своје податке и покушајте поново", "BackendError.LABEL.ALREADY_INVITED": "Ова адреса е-поште је већ позвана", - "BackendError.LABEL.BAD_REQUEST": "Нетачан унос", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Ова адреса е-поште није прихваћена", "BackendError.LABEL.BLACKLISTED_PHONE": "Овај телефонски број није прихваћен", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "РАЗГОВОР НЕ ПОСТОЈИ", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Овај разговор је достигао максимум учесника", "BackendError.LABEL.EMAIL_EXISTS": "Ова е-маил адреса је већ у употреби. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Ово корисничко име је већ заузето", "BackendError.LABEL.HANDLE_TOO_SHORT": "Унесите корисничко име са најмање 2 карактера", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Ово корисничко име је неважеће", "BackendError.LABEL.INVALID_INVITATION_CODE": "Позив је опозван или је истекао", "BackendError.LABEL.INVALID_OPERATION": "Неважећа операција", - "BackendError.LABEL.INVALID_PAYLOAD": "Нетачан унос", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Овај телефонски број није важећи", "BackendError.LABEL.KEY_EXISTS": "Ова имејл адреса је већ регистрована. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Провјерите своје податке и покушајте поново", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Следећe", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Додај", "addParticipantsHeader": "Додајте учеснике", "addParticipantsHeaderWithCounter": "Додајте учеснике ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Проверите сандуче е-поште и следите упутства.", "authPostedResendHeadline": "Стигла вам је пошта.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Додај", "authVerifyAccountDetail": "Ово омогућава коришћење Вајера на више уређаја.", "authVerifyAccountHeadline": "Додај адресу е-поште и лозинку.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Нови код можете затражити {{expiration}}.", "authVerifyPasswordHeadline": "Унесите своју лозинку", "backupCancel": "Откажи", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Није могуће сачувати датотеку", "backupExportGenericErrorSecondary": "Резервна копија није завршена.", "backupExportProgressCompressing": "Припрема датотеке сигурносне копије", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Ово можете да користите за враћање историје ако изгубите рачунар или пребаците на нови.", "backupImportAccountErrorHeadline": "Погрешно резервно копирање", "backupImportAccountErrorSecondary": "Не можете да вратите историју са другог налога.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Нешто није у реду", "backupImportGenericErrorSecondary": "Није могуће вратити историју.", "backupImportIncompatibleErrorHeadline": "Погрешно резервно копирање", "backupImportIncompatibleErrorSecondary": "Не можете да вратите историју са другог налога.", - "backupImportOutdatedErrorHeadline": "Некомпатибилна резервна копија", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Припрема…", "backupImportProgressSecondary": "Враћање историје · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Историја је враћена.", "backupImportVersionErrorHeadline": "Некомпатибилна резервна копија", "backupImportVersionErrorSecondary": "Ова резервна копија је креирана новијом или застарелом верзијом {{brandName}} и не може се овде обновити.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Покушајте поново", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Прихвати", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " овери уређаје", "conversationDeviceStartedUsingMany": " поче коришћење", "conversationDeviceStartedUsingOne": " поче коришћење", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " скину поузданост једног", "conversationDeviceUserDevices": " {{user}}´s уређаје\n", "conversationDeviceYourDevices": " ваши уређаји", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Гост", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Отвори у {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Придружите се разговору", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Већ имате налог?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Направи налог", - "conversationJoin.invalidCreateAccountText": "за групно размењивање порука и конференцијске позиве.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Пријавите се", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Твоје име", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Отворите ову везу на рачунару.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Фаворити", "conversationLabelGroups": "Групе", "conversationLabelPeople": "Људи", - "conversationLikesCaption": "{{number}} људи", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Отвори мапу", "conversationMemberJoined": "[bold]{{name}}[/bold] додао је {{users}} у разговор", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] додао је {{users}}, и [showmore]{{count}} више[/showmore] у разговор", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] уклоњено је {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]ви[/bold] сте уклонили {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "испоручено", "conversationMissedMessages": "Овај уређај нисте користили неко време. Неке поруке се можда неће приказати овде.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Претрага по имену", "conversationParticipantsTitle": "Особе", "conversationPing": " пингова", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " пингова", "conversationPlaybackError": "Не могу да пустим", "conversationPopoverFavorite": "Додај у фаворите", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Упс, нема гифова", "extensionsGiphyRandom": "Насумице", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Фолдери", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Превише карактера", "groupCreationPreferencesErrorNameShort": "Барем 1 знак", "groupCreationPreferencesHeader": "Створити групу", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Назив групе", "groupParticipantActionBlock": "Блокирати…", "groupParticipantActionCancelRequest": "Откажи захтев", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Измењено: {{edited}}", - "messageDetailsNoLikes": "Нико још није лајковао ову поруку", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Још нико није прочитао ову поруку.", "messageDetailsReceiptsOff": "потврде читања нису биле укључене када је та порука послана.", "messageDetailsSent": "Послано: {{sent}}", "messageDetailsTitle": "Детаљи", - "messageDetailsTitleLikes": "Свиђа ми се{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Прочитајте {{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "У реду", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Уклони", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Уклонити?", "modalConversationRemoveMessage": "{{user}} неће моћи да шаље или прима поруке у овом разговору.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Опозови везу", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Блокирај {{user}}?", "modalUserBlockMessage": "{{user}} неће бити у могућности да вас контактира или да вас дода у групне разговоре.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Одблокирај", "modalUserUnblockHeadline": "Одблокирати?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "позва", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Историја", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Историју можете да вратите само из резервне копије исте платформе. Резервна копија ће пребрисати разговоре које можете водити на овом уређају.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Решавање проблема", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/sv-SE.json b/src/i18n/sv-SE.json index 507db65666d..cc440dda7aa 100644 --- a/src/i18n/sv-SE.json +++ b/src/i18n/sv-SE.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Lägg till", "addParticipantsHeader": "Lägg till människor", "addParticipantsHeaderWithCounter": "Lägg till ({{number}}) människor", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Kontrollera din inkorg och följ instruktionerna.", "authPostedResendHeadline": "Du har fått mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Lägg till", "authVerifyAccountDetail": "Detta gör så du kan använda {{brandName}} på flera enheter.", "authVerifyAccountHeadline": "Lägg till e-postadress och lösenord.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Du kan begära en ny kod inom {{expiration}}.", "authVerifyPasswordHeadline": "Ange ditt lösenord", "backupCancel": "Avbryt", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Filen kunde inte sparas", "backupExportGenericErrorSecondary": "Säkerhetskopieringen slutfördes inte.", "backupExportProgressCompressing": "Förbereder filen för säkerhetskopiering", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Fel säkerhetskopia", "backupImportAccountErrorSecondary": "Du kan inte återställa historik från ett annorlunda konto.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Någonting gick fel", "backupImportGenericErrorSecondary": "Din historik kunde inte återställas.", "backupImportIncompatibleErrorHeadline": "Fel säkerhetskopia", "backupImportIncompatibleErrorSecondary": "Du kan inte återställa historik från ett annorlunda konto.", - "backupImportOutdatedErrorHeadline": "Inkompatibel säkerhetskopia", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Förbereder…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Historiken återställdes.", "backupImportVersionErrorHeadline": "Inkompatibel säkerhetskopia", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Försök igen", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Acceptera", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " verifiera enheter", "conversationDeviceStartedUsingMany": " började använda", "conversationDeviceStartedUsingOne": " började använda", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}\"s enheter", "conversationDeviceYourDevices": " dina enheter", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Gäst", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} personer", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Öppna karta", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] tog bort {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Du[/bold] tog bort {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Levererat", "conversationMissedMessages": "Du har inte använt denna enhet på ett tag. Några meddelanden kanske inte dyker upp här.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Sök efter namn", "conversationParticipantsTitle": "Personer", "conversationPing": " pingade", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingade", "conversationPlaybackError": "Kunde inte spela upp", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, inga giffar", "extensionsGiphyRandom": "Slumpad", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "För många tecken", "groupCreationPreferencesErrorNameShort": "Åtminstone 1 tecken", "groupCreationPreferencesHeader": "Ny grupp", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Gruppens namn", "groupParticipantActionBlock": "Blockera kontakt…", "groupParticipantActionCancelRequest": "Avbryt begäran", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Detaljer", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Ta bort", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Ta bort?", "modalConversationRemoveMessage": "{{user}} kommer inte att kunna skicka eller ta emot meddelanden i den här konversationen.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Återkalla länk", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Blockera {{user}}?", "modalUserBlockMessage": "{{user}} kommer inte kunna kontakta dig eller lägga till dig till gruppkonversationer.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Avblockera", "modalUserUnblockHeadline": "Avblockera?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Ringt", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Historik", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Felsökning", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/th-TH.json b/src/i18n/th-TH.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/th-TH.json +++ b/src/i18n/th-TH.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/tr-TR.json b/src/i18n/tr-TR.json index 9884aa3aa90..900c6fe821c 100644 --- a/src/i18n/tr-TR.json +++ b/src/i18n/tr-TR.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Lütfen bilgilerinizi doğrulayın ve tekrar deneyin", "BackendError.LABEL.ALREADY_INVITED": "Bu e-posta zaten davet edildi", - "BackendError.LABEL.BAD_REQUEST": "Geçersiz girdi", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Bu e-posta adresi kabul edilemiyor", "BackendError.LABEL.BLACKLISTED_PHONE": "Bu telefon numarası kabul edilemiyor", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "SOHBET BULUNAMADI", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Bu sohbet katılımcıların sınırına ulaştı", "BackendError.LABEL.EMAIL_EXISTS": "E-posta zaten kullanılıyor. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Bu kullanıcı adı zaten alınmış", "BackendError.LABEL.HANDLE_TOO_SHORT": "Lütfen en az 2 karakterden oluşan bir kullanıcı adı girin", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Bu kullanıcı adı geçersiz", "BackendError.LABEL.INVALID_INVITATION_CODE": "Davet geri çevrildi veya geçerliliğini yitirdi", "BackendError.LABEL.INVALID_OPERATION": "Geçersiz işlem", - "BackendError.LABEL.INVALID_PAYLOAD": "Geçersiz girdi", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Bu telefon numarası geçersiz", "BackendError.LABEL.KEY_EXISTS": "E-posta zaten kaydedilmiş. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Lütfen bilgilerinizi doğrulayın ve yeniden deneyin", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "İleri", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Ekle", "addParticipantsHeader": "Katılımcıları ekle", "addParticipantsHeaderWithCounter": "({{number}}) Katılımcı ekle", @@ -193,6 +219,7 @@ "authPostedResendDetail": "E-posta gelen kutunuzu kontrol edin ve talimatları izleyin.", "authPostedResendHeadline": "E-posta geldi.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Ekle", "authVerifyAccountDetail": "Bu sizin {{brandName}}’ı birden fazla cihazda kullanmanıza olanak sağlar.", "authVerifyAccountHeadline": "Bir e-posta adresi ve şifre ekleyin.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "{{expiration}} içerisinde yeni bir kod isteyebilirsiniz.", "authVerifyPasswordHeadline": "Şifrenizi girin", "backupCancel": "İptal", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Dosya kaydedilemedi", "backupExportGenericErrorSecondary": "Yedekleme tamamlanmadı.", "backupExportProgressCompressing": "Yedekleme dosyası hazırlanıyor", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Bilgisayarınızı kaybederseniz veya yenisine geçerseniz, geçmişi geri yüklemek için bunu kullanabilirsiniz.", "backupImportAccountErrorHeadline": "Yanlış yedek", "backupImportAccountErrorSecondary": "Geçmişi farklı bir hesaptan geri yükleyemezsiniz.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Bir şeyler yanlış gitti", "backupImportGenericErrorSecondary": "Geçmişiniz geri yüklenemedi.", "backupImportIncompatibleErrorHeadline": "Yanlış yedek", "backupImportIncompatibleErrorSecondary": "Geçmişi farklı bir hesaptan geri yükleyemezsiniz.", - "backupImportOutdatedErrorHeadline": "Uyumsuz yedek", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Hazırlanıyor…", "backupImportProgressSecondary": "Geri yükleme geçmişi · {{processed}} / {{total}} - %{{progress}}", "backupImportSuccessHeadline": "Geçmiş geri yüklendi.", "backupImportVersionErrorHeadline": "Uyumsuz yedek", "backupImportVersionErrorSecondary": "Bu yedekleme, {{brandName}} adlı kullanıcının daha yeni veya eski bir sürümü tarafından oluşturuldu ve burada geri yüklenemez.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Tekrar Deneyin", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Kabul et", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " cihazları doğrula", "conversationDeviceStartedUsingMany": " kullanmaya başladı", "conversationDeviceStartedUsingOne": " kullanmaya başladı", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " doğrulanmamışlardan bir tane", "conversationDeviceUserDevices": " {{user}} ’in cihazları", "conversationDeviceYourDevices": " cihazların", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Misafir", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "{brandName} 'de aç", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Sohbete katılın", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Zaten bir hesabınız var mı?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Bir hesap oluştur", - "conversationJoin.invalidCreateAccountText": "grup mesajlaşma ve konferans aramaları için.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Giriş yap", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "İsminiz", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Bilgisayarınızda bu bağlantıyı açın.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} kişi", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Haritayı Aç", "conversationMemberJoined": "[bold]{{name}}[/bold]] sohbete {{users}} kullanıcısını ekledi", "conversationMemberJoinedMore": "[bold]{{name}}[/bold], sohbete {{users}} ve [showmore]{{count}} daha fazla [/showmore] kişi ekledi", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] {{users}} kullanıcısını çıkardı", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Siz[/bold] {{users}} kullanıcısını çıkardınız", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Teslim edildi", "conversationMissedMessages": "Bir süredir bu cihazı kullanmıyorsun. Bazı mesajlar gösterilmeyebilir.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "İsme göre ara", "conversationParticipantsTitle": "İnsanlar", "conversationPing": " pingledi", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pingledi", "conversationPlaybackError": "Oynatılamıyor", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • giphy.com aracılığıyla", "extensionsGiphyNoGifs": "Olamaz, hiç Gif yok", "extensionsGiphyRandom": "Rastgele", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Çok fazla karakter", "groupCreationPreferencesErrorNameShort": "En az 1 karakter", "groupCreationPreferencesHeader": "Grup oluştur", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Grup adı", "groupParticipantActionBlock": "Engelle…", "groupParticipantActionCancelRequest": "İsteği iptal et", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "{{edited}}’da düzenlenmiş", - "messageDetailsNoLikes": "Bu mesajı henüz kimse beğenmemiş.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Bu mesajı henüz kimse okumamış.", "messageDetailsReceiptsOff": "Bu mesaj gönderildiğinde okuma bilgisi açık değildi.", "messageDetailsSent": "{{sent}}'de gönderildi", "messageDetailsTitle": "Ayrıntılar", - "messageDetailsTitleLikes": "{{count}} Beğeni", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "{{count}} Okunan", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "TAMAM", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Çıkart", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Çıkar?", "modalConversationRemoveMessage": "{{user}} bu konuşmaya mesaj gönderemeyecek ve bu konuşmadan mesaj alamayacak.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Bağlantıyı kaldır", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "{{user}} engellensin mi?", "modalUserBlockMessage": "{{user}} sizinle iletişim kuramayacak ve sizi grup konuşmalarına ekleyemeyecek.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Engeli kaldır", "modalUserUnblockHeadline": "Engeli kaldır?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Aradı", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Geçmiş", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Geçmişi yalnızca aynı platformun yedeğinden geri yükleyebilirsiniz. Yedeklemeniz, bu cihazda olabilecek görüşmelerin üzerine yazacaktır.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Sorun Giderme", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/uk-UA.json b/src/i18n/uk-UA.json index 28b358c3f97..07fd45cf502 100644 --- a/src/i18n/uk-UA.json +++ b/src/i18n/uk-UA.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Будь ласка, перевірте ваші дані та повторіть спробу", "BackendError.LABEL.ALREADY_INVITED": "Користувача з цією емейл-адресою вже запрошено", - "BackendError.LABEL.BAD_REQUEST": "Неприпустимий ввід", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "Дана email-адреса неприпустима", "BackendError.LABEL.BLACKLISTED_PHONE": "Неприпустимий номер телефону", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "Дана розмова переповнена", "BackendError.LABEL.EMAIL_EXISTS": "Ця адреса електронної пошти вже використовується. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "Даний нік вже використовується", "BackendError.LABEL.HANDLE_TOO_SHORT": "Будь ласка, введіть ім'я користувача, яке містить принаймні 2 символи", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "Даний нік невалідний", "BackendError.LABEL.INVALID_INVITATION_CODE": "Запрошення було відкликане через закінчення терміну його дії", "BackendError.LABEL.INVALID_OPERATION": "Неприпустима операція", - "BackendError.LABEL.INVALID_PAYLOAD": "Неприпустимий ввід", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "Неприпустимий номер телефону", "BackendError.LABEL.KEY_EXISTS": "Ця електронна адреса вже зареєстрована. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Будь ласка, перевірте ваші дані та повторіть спробу", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Далі", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Додати", "addParticipantsHeader": "Додати учасників", "addParticipantsHeaderWithCounter": "Додати учасників ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Перевірте вашу поштову скриньку і дотримуйтесь надісланих інструкцій.", "authPostedResendHeadline": "Ви отримали нового листа.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Додати", "authVerifyAccountDetail": "Це дасть змогу використовувати {{brandName}} на різних пристроях.", "authVerifyAccountHeadline": "Додайте email та пароль.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "Ви можете надіслати запит запит на новий код {{expiration}}.", "authVerifyPasswordHeadline": "Введіть свій пароль", "backupCancel": "Скасувати", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "Не вдалося зберегти файл", "backupExportGenericErrorSecondary": "Резервне копіювання не завершено.", "backupExportProgressCompressing": "Підготовка файлу резевної копії", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "Даний функціонал може бути корисним, якщо ваш комп’ютер вийде з ладу або ви почнете використовувати новий.", "backupImportAccountErrorHeadline": "Несумісна резервна копія", "backupImportAccountErrorSecondary": "Ви не можете відновити історію з іншого акаунту.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Щось пішло не так", "backupImportGenericErrorSecondary": "Ваша історія не може бути відновлена.", "backupImportIncompatibleErrorHeadline": "Несумісна резервна копія", "backupImportIncompatibleErrorSecondary": "Ви не можете відновити історію з іншого акаунту.", - "backupImportOutdatedErrorHeadline": "Несумісний файл резервної копії", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Підготовка…", "backupImportProgressSecondary": "Відновлення історії розмов · {{processed}} з {{total}} — {{progress}}%", "backupImportSuccessHeadline": "Історію розмов відновлено.", "backupImportVersionErrorHeadline": "Несумісний файл резервної копії", "backupImportVersionErrorSecondary": "Цю резервну копію було створено новішою або застарілою версією {{brandName}}, тому її неможливо відновити.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Спробувати ще раз", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Прийняти", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Верифікувати пристрої", "conversationDeviceStartedUsingMany": " почав(-ла) використовувати", "conversationDeviceStartedUsingOne": " почав(-ла) використовувати", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " скасував(-ла) верифікацію одного з", "conversationDeviceUserDevices": " пристрої {{user}}", "conversationDeviceYourDevices": " ваші пристрої", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Гість", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Відкрити в {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Приєднатися до розмови", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Вже зареєстровані?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Створити акаунт", - "conversationJoin.invalidCreateAccountText": "для групових повідомлень і конференц-зв'язку.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Увійти", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Ваше ім’я", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Відкрийте цей лінк на вашому комп'ютері.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Вподобання", "conversationLabelGroups": "Групи", "conversationLabelPeople": "Учасники", - "conversationLikesCaption": "{{number}} учасників", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Відкрити карту", "conversationMemberJoined": "[bold]{{name}}[/bold] додав(-ла) до розмови {{users}}", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] додали до розмови {{users}} та ще [showmore]{{count}}[/showmore]", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] видалив(-ла) {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]Ви[/bold] видалили {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Доставлене", "conversationMissedMessages": "Ви не користувались цим простроєм протягом певного часу. Деякі повідомлення можуть не відображатися тут.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Пошук за іменем", "conversationParticipantsTitle": "Список контактів", "conversationPing": " відправив(-ла) пінг", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " відправив(-ла) пінг", "conversationPlaybackError": "Неможливо відтворити", "conversationPopoverFavorite": "Додати до вподобань", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • через giphy.com", "extensionsGiphyNoGifs": "Упс, анімацій не знайдено", "extensionsGiphyRandom": "Випадкова", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Теки", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Занадто багато символів", "groupCreationPreferencesErrorNameShort": "Не менше 1 символу", "groupCreationPreferencesHeader": "Нова група", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Ім’я групи", "groupParticipantActionBlock": "Заблокувати…", "groupParticipantActionCancelRequest": "Скасувати запит…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Відредаговане: {{edited}}", - "messageDetailsNoLikes": "Це повідомлення поки що ніхто не лайкнув.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "Це повідомлення поки що ніхто не переглянув.", "messageDetailsReceiptsOff": "Звіти про перегляд були вимкнені, коли це повідомлення було надіслано.", "messageDetailsSent": "Відправлене: {{sent}}", "messageDetailsTitle": "Подробиці", - "messageDetailsTitleLikes": "Сподобалось{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Переглянуте{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "Видалити", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Видалити?", "modalConversationRemoveMessage": "{{user}} більше не зможе надсилати або отримувати повідомлення в цій розмові.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Відкликати лінк", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Заблокувати {{user}}?", "modalUserBlockMessage": "{{user}} не буде мати можливості зв’язатися з вами або додати вас до групових розмов.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Розблокувати", "modalUserUnblockHeadline": "Розблокувати?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Дзвонив(-ла)", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "Історія", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "Історію розмов можна відновити тільки з резервної копії, зробленої на тій же платформі. Резервна копія перезапише розмови, які ви, можливо, уже маєте на цьому пристрої.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Усунення проблем", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/uz-UZ.json b/src/i18n/uz-UZ.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/uz-UZ.json +++ b/src/i18n/uz-UZ.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/vi-VN.json b/src/i18n/vi-VN.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/vi-VN.json +++ b/src/i18n/vi-VN.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json index 34ffab7c6a5..755fe515b73 100644 --- a/src/i18n/zh-CN.json +++ b/src/i18n/zh-CN.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "请检查您提供的资料然后重试。", "BackendError.LABEL.ALREADY_INVITED": "已发出邀请到此电子邮件", - "BackendError.LABEL.BAD_REQUEST": "输入内容无效", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "不允许使用此电子邮件地址", "BackendError.LABEL.BLACKLISTED_PHONE": "不允许使用此号码", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "未找到会话", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "此对话参与者人数已达到限制", "BackendError.LABEL.EMAIL_EXISTS": "此电子邮件地址已经注册。{supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "此用户名已被使用", "BackendError.LABEL.HANDLE_TOO_SHORT": "请输入至少2个字符的用户名", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "用户名无效", "BackendError.LABEL.INVALID_INVITATION_CODE": "请求已撤销或过期。", "BackendError.LABEL.INVALID_OPERATION": "操作无效", - "BackendError.LABEL.INVALID_PAYLOAD": "输入内容无效", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "此电话号码无效", "BackendError.LABEL.KEY_EXISTS": "此电子邮件地址已被注册。{supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "请验证您的详细信息并重试", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "继续", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "新增", "addParticipantsHeader": "新增好友", "addParticipantsHeaderWithCounter": "添加人员({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "检查您的收件箱并按照说明进行操作。", "authPostedResendHeadline": "您有新邮件", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "新增", "authVerifyAccountDetail": "允许您在不同设备上使用{{brandName}}。", "authVerifyAccountHeadline": "添加电子邮件地址和密码。", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "您可以在 {{expiration}} 后请求新的验证码。", "authVerifyPasswordHeadline": "输入密码", "backupCancel": "取消", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "无法保存文件", "backupExportGenericErrorSecondary": "备份尚未完成。", "backupExportProgressCompressing": "准备备份文件", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "如果您丢失了电脑或者转移到新设备,可以用这个恢复历史记录。", "backupImportAccountErrorHeadline": "错误的备份", "backupImportAccountErrorSecondary": "你不能恢复其他帐号的历史记录。", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "好像出了点问题。", "backupImportGenericErrorSecondary": "您的历史无法恢复。", "backupImportIncompatibleErrorHeadline": "错误的备份", "backupImportIncompatibleErrorSecondary": "您不能恢复不同帐户的历史。", - "backupImportOutdatedErrorHeadline": "不兼容的备份", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "准备中...", "backupImportProgressSecondary": "恢复进度:{{processed}} 了 {{total}} 中的 {{progress}}%", "backupImportSuccessHeadline": "历史恢复。", "backupImportVersionErrorHeadline": "不兼容的备份", "backupImportVersionErrorSecondary": "此备份是由较新的或已过期的版本 {{brandName}} 生成,所以不能恢复记录。", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "请重试", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "接受", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " 设备验证", "conversationDeviceStartedUsingMany": " 已开始使用", "conversationDeviceStartedUsingOne": " 已开始使用", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " 取消信任了", "conversationDeviceUserDevices": " {{user}} 的设备", "conversationDeviceYourDevices": " 您的设备", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "访客", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "在 {brandName} 中打开", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "加入会话", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "已有帐户?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "新增帐户", - "conversationJoin.invalidCreateAccountText": "用于群组消息和电话会议。", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "登录", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "您的名字", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "在您的计算机上打开此链接。", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "收藏", "conversationLabelGroups": "群组", "conversationLabelPeople": "联系人", - "conversationLikesCaption": "{{number}} 人", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "打开地图", "conversationMemberJoined": "[bold]{{name}}[/bold] 添加了 {{users}} 到对话中", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] 添加了 {{users}}, 并 [showmore]{{count}} 更多[/showmore]", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] 移除了{{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]你[/bold] 移除了{{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "已送达", "conversationMissedMessages": "您已经有一段时间没有使用此设备, 一些信息可能不会在这里出现。", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "按名字搜索", "conversationParticipantsTitle": "联系人", "conversationPing": " ping了一下", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " ping了一下", "conversationPlaybackError": "无法播放", "conversationPopoverFavorite": "添加到收藏", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • 来自 giphy.com", "extensionsGiphyNoGifs": "哎呀,没有GIF图像。", "extensionsGiphyRandom": "随机", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "字符太多", "groupCreationPreferencesErrorNameShort": "至少1个字符", "groupCreationPreferencesHeader": "创建组", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "团队名字", "groupParticipantActionBlock": "拉黑联系人", "groupParticipantActionCancelRequest": "取消请求", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "没有人喜欢这个消息。", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "确定", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "移除", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "移除?", "modalConversationRemoveMessage": "{{user}} 将不能够在此对话中发送或接收消息。", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "撤消链接", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "屏蔽 {{user}} 吗?", "modalUserBlockMessage": "{{user}} 将不能联系您或将您加入到任何对话中。", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "取消屏蔽", "modalUserUnblockHeadline": "解除屏蔽?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "呼叫过您", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "疑难排解", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/zh-HK.json b/src/i18n/zh-HK.json index ac2d491a683..2d912e9f5cb 100644 --- a/src/i18n/zh-HK.json +++ b/src/i18n/zh-HK.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "Add", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "Check your email inbox and follow the instructions.", "authPostedResendHeadline": "You’ve got mail.", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "Add", "authVerifyAccountDetail": "This lets you use {{brandName}} on multiple devices.", "authVerifyAccountHeadline": "Add email address and password.", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "You can request a new code {{expiration}}.", "authVerifyPasswordHeadline": "Enter your password", "backupCancel": "Cancel", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "Accept", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": "Verify devices", "conversationDeviceStartedUsingMany": " started using", "conversationDeviceStartedUsingOne": " started using", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " unverified one of", "conversationDeviceUserDevices": " {{user}}´s devices", "conversationDeviceYourDevices": " your devices", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "Guest", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} people", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "Open Map", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "Delivered", "conversationMissedMessages": "You haven’t used this device for a while. Some messages may not appear here.", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "Search by name", "conversationParticipantsTitle": "People", "conversationPing": " pinged", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " pinged", "conversationPlaybackError": "Unable to play", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "{{tag}} • via giphy.com", "extensionsGiphyNoGifs": "Oops, no gifs", "extensionsGiphyRandom": "Random", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "Cancel request…", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "OK", @@ -854,10 +910,12 @@ "modalConversationOptionsToggleServiceMessage": "Could not change services state.", "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "Remove?", "modalConversationRemoveMessage": "{{user}} won’t be able to send or receive messages in this conversation.", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "Block {{user}}?", "modalUserBlockMessage": "{{user}} won’t be able to contact you or add you to group conversations.", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "Unblock", "modalUserUnblockHeadline": "Unblock?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "Called", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index d5a7feee252..429e40c0bd2 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -1,7 +1,7 @@ { "BackendError.LABEL.ACCESS_DENIED": "Please verify your details and try again", "BackendError.LABEL.ALREADY_INVITED": "This email has already been invited", - "BackendError.LABEL.BAD_REQUEST": "Invalid input", + "BackendError.LABEL.BAD_REQUEST": "Please verify your details and try again", "BackendError.LABEL.BLACKLISTED_EMAIL": "This email address is not allowed", "BackendError.LABEL.BLACKLISTED_PHONE": "This phone number is not allowed", "BackendError.LABEL.CODE_AUTHENTICATION_FAILED": "Please retry, or request another code.", @@ -9,7 +9,7 @@ "BackendError.LABEL.CONVERSATION_NOT_FOUND": "CONVERSATION_NOT_FOUND", "BackendError.LABEL.CONVERSATION_TOO_MANY_MEMBERS": "This conversation has reached the limit of participants", "BackendError.LABEL.EMAIL_EXISTS": "This email address is already in use. {supportEmailExistsLink}", - "BackendError.LABEL.EMAIL_REQUIRED": "Log in with an email address is required when two-factor authentication is activated", + "BackendError.LABEL.EMAIL_REQUIRED": "You can’t use your username as two-factor authentication is activated. Please log in with your email instead.", "BackendError.LABEL.HANDLE_EXISTS": "This username is already taken", "BackendError.LABEL.HANDLE_TOO_SHORT": "Please enter a username with at least 2 characters", "BackendError.LABEL.INVALID_CODE": "Please retry, or request another code.", @@ -18,7 +18,7 @@ "BackendError.LABEL.INVALID_HANDLE": "This username is invalid", "BackendError.LABEL.INVALID_INVITATION_CODE": "Invitation has been revoked or expired", "BackendError.LABEL.INVALID_OPERATION": "Invalid operation", - "BackendError.LABEL.INVALID_PAYLOAD": "Invalid input", + "BackendError.LABEL.INVALID_PAYLOAD": "Please verify your details and try again", "BackendError.LABEL.INVALID_PHONE": "This phone number is invalid", "BackendError.LABEL.KEY_EXISTS": "This email address has already been registered. {supportEmailExistsLink}", "BackendError.LABEL.MISSING_AUTH": "Please verify your details and try again", @@ -76,7 +76,7 @@ "accessibility.conversation.goBack": "Go back to conversation info", "accessibility.conversation.sectionLabel": "Conversation List", "accessibility.conversationAssetImageAlt": "Image from {{username}} from {{messageDate}}", - "accessibility.conversationContextMenuOpenLabel": "Open messaging options", + "accessibility.conversationContextMenuOpenLabel": "Open more options", "accessibility.conversationDetailsActionDevicesLabel": "Show Devices", "accessibility.conversationDetailsActionGroupAdminLabel": "Set group admin", "accessibility.conversationDetailsActionNotificationsLabel": "Show notifications settings", @@ -90,6 +90,7 @@ "accessibility.conversationStatusUnreadPing": "Missed ping", "accessibility.conversationStatusUnreadReply": "Unread reply", "accessibility.conversationTitle": "{{username}} status {{status}}", + "accessibility.emojiPickerSearchPlaceholder": "Search for emoji", "accessibility.giphyModal.close": "Close 'GIF' window", "accessibility.giphyModal.loading": "Loading giphy", "accessibility.giphyModal.selectGif": "Select gif", @@ -112,7 +113,13 @@ "accessibility.headings.preferencesDevices": "Preferences - devices", "accessibility.headings.preferencesOptions": "Preferences - options", "accessibility.headings.sidebar": "Navigation", + "accessibility.messageActionsMenuEmoji": "Select emoji", + "accessibility.messageActionsMenuLabel": "Message actions", + "accessibility.messageActionsMenuLike": "React with heart", + "accessibility.messageActionsMenuThumbsUp": "React with thumbs up", "accessibility.messageDetailsReadReceipts": "Message viewed by {{readReceiptText}}, open details", + "accessibility.messageReactionDetailsPlural": "{{emojiCount}} reactions, react with {{emojiName}} emoji", + "accessibility.messageReactionDetailsSingular": "{{emojiCount}} reaction, react with {{emojiName}} emoji", "accessibility.messages.like": "Like message", "accessibility.messages.liked": "Unlike message", "accessibility.openConversation": "Open profile of {{name}}", @@ -129,6 +136,25 @@ "accountForm.submitButton": "Next", "accountForm.terms": "I accept the terms and conditions", "accountForm.termsAndPrivacyPolicy": "I accept the privacy policy and terms and conditions", + "acme.done.button": "Ok", + "acme.done.button.close": "Close window 'Certificate Downloaded'", + "acme.done.headline": "Certificate Downloaded", + "acme.done.paragraph": "The certificate is active now and your device is verified. You can find more details about this certificate in your Wire Settings under Devices.", + "acme.error.button.close": "Close window 'Something went wrong'", + "acme.error.button.primary": "Retry", + "acme.error.button.secondary": "Cancel", + "acme.error.headline": "Something went wrong", + "acme.error.paragraph": "Certiticate could not no downloaded

You can retry to get the certificate now. Or the system will try it automatically in the background during the next 24 hours.", + "acme.inProgress.button.close": "Close window 'Getting Certificate'", + "acme.inProgress.headline": "Getting Certificate", + "acme.inProgress.paragraph.alt": "Downloading...", + "acme.inProgress.paragraph.main": "Please navigate to your web browser and log in to the certiticate service.

In case the website does not open. you can also navigate there manually by following this URL:

{{url}}", + "acme.settingsChanged.button.close": "Close window 'End-to-end identify certificate'", + "acme.settingsChanged.button.primary": "Get Certificate", + "acme.settingsChanged.button.secondary": "Remind Me Later", + "acme.settingsChanged.headline.alt": "End-to-end identify certificate", + "acme.settingsChanged.headline.main": "Team settings changed", + "acme.settingsChanged.paragraph": "End-to-end identity is enabled for you to make Wire's usage more secure. The device verification takes as of now place automatically using a certificate.

Enter your Wire credentials on the external webpage we will redirect you to. With this login, you automatically get the verification certificate for this device. You will keep your conversation history.

Learn more about end-to-end identity ", "addParticipantsConfirmLabel": "加入", "addParticipantsHeader": "Add participants", "addParticipantsHeaderWithCounter": "Add participants ({{number}})", @@ -193,6 +219,7 @@ "authPostedResendDetail": "請查收您的電子郵件信箱並依照指示進行操作。", "authPostedResendHeadline": "您收到了新郵件", "authSSOLoginTitle": "Log in with single sign-on", + "authSetUsername": "Set username", "authVerifyAccountAdd": "加入", "authVerifyAccountDetail": "這樣可以讓您在多個設備上使用 {{brandName}}。", "authVerifyAccountHeadline": "加入電子郵件信箱位址以及密碼。", @@ -204,6 +231,15 @@ "authVerifyCodeResendTimer": "您可以在 {{expiration}} 後索取新的驗證碼。", "authVerifyPasswordHeadline": "輸入您的密碼", "backupCancel": "取消", + "backupDecryptionModalAction": "Continue", + "backupDecryptionModalMessage": "The backup is password protected.", + "backupDecryptionModalPlaceholder": "Password", + "backupDecryptionModalTitle": "Enter Password", + "backupEncryptionModalAction": "Back Up Now", + "backupEncryptionModalCloseBtn": "Cancel", + "backupEncryptionModalMessage": "The backup will be compressed, and you can encrypt it with a password.", + "backupEncryptionModalPlaceholder": "Password (Optional)", + "backupEncryptionModalTitle": "Set Password", "backupExportGenericErrorHeadline": "The file could not be saved", "backupExportGenericErrorSecondary": "The backup was not completed.", "backupExportProgressCompressing": "Preparing backup file", @@ -214,16 +250,20 @@ "backupExportSuccessSecondary": "You can use this to restore history if you lose your computer or switch to a new one.", "backupImportAccountErrorHeadline": "Wrong backup", "backupImportAccountErrorSecondary": "You cannot restore history from a different account.", + "backupImportFormatErrorHeadline": "Incompatible backup", + "backupImportFormatErrorSecondary": "The provided backup format is not supported", "backupImportGenericErrorHeadline": "Something went wrong", "backupImportGenericErrorSecondary": "Your history could not be restored.", "backupImportIncompatibleErrorHeadline": "Wrong backup", "backupImportIncompatibleErrorSecondary": "You cannot restore history from a different account.", - "backupImportOutdatedErrorHeadline": "Incompatible backup", + "backupImportPasswordErrorHeadline": "Wrong Password", + "backupImportPasswordErrorSecondary": "Please verify your input and try again", "backupImportProgressHeadline": "Preparing…", "backupImportProgressSecondary": "Restoring history · {{processed}} of {{total}} — {{progress}}%", "backupImportSuccessHeadline": "History restored.", "backupImportVersionErrorHeadline": "Incompatible backup", "backupImportVersionErrorSecondary": "This backup was created by a newer or outdated version of {{brandName}} and cannot be restored here.", + "backupPasswordHint": "Use at least {{minPasswordLength}} characters, with one lowercase letter, one capital letter, a number, and a special character.", "backupTryAgain": "Try Again", "buttonActionError": "Your answer can't be sent, please retry", "callAccept": "接聽", @@ -343,6 +383,7 @@ "conversationDeviceNewPeopleJoinedVerify": " 驗證設備", "conversationDeviceStartedUsingMany": " 已開始使用", "conversationDeviceStartedUsingOne": " 已開始使用", + "conversationDeviceStartedUsingYou": " started using", "conversationDeviceUnverified": " %@ 取消了 %@ 的某個設備之驗證", "conversationDeviceUserDevices": " {{user}} 的設備", "conversationDeviceYourDevices": " 您的設備", @@ -353,21 +394,21 @@ "conversationFooterContacts": "Contacts", "conversationGuestIndicator": "訪客", "conversationImageAssetRestricted": "Receiving images is prohibited", - "conversationJoin.buttonExistentAccountOpen": "Open in {brandName}", - "conversationJoin.existentAccountHeadline": "{name}, you have been invited to join a conversation in {brandName}", + "conversationJoin.existentAccountJoinInBrowser": "Join in the browser", "conversationJoin.existentAccountJoinWithoutLink": "Join the conversation", - "conversationJoin.existentAccountJoinWithoutText": "{existentAccountJoinWithoutLink} without an account", - "conversationJoin.existentAccountSubhead": "Audio and video conferencing, text messaging, file sharing, and screen sharing, all end-to-end-encrypted.", + "conversationJoin.existentAccountUserName": "You are logged in as {selfName}", "conversationJoin.fullConversationHeadline": "Unable to join conversation", "conversationJoin.fullConversationSubhead": "The maximum number of participants in this conversation has been reached.", "conversationJoin.hasAccount": "Already have an account?", - "conversationJoin.headline": "You have been invited to join a conversation in {brandName}", - "conversationJoin.invalidCreateAccountLink": "Create an account", - "conversationJoin.invalidCreateAccountText": "for group messaging and conference calls.", + "conversationJoin.headline": "The conversation takes place on {domain}", "conversationJoin.invalidHeadline": "Conversation not found", "conversationJoin.invalidSubhead": "The link to this group conversation expired or the conversation was set to private.", - "conversationJoin.loginLink": "Log in", + "conversationJoin.join": "Join", + "conversationJoin.joinButton": "Join as Temporary Guest", + "conversationJoin.joinWithOtherAccount": "Join with another account", + "conversationJoin.mainHeadline": "Join Conversation", "conversationJoin.namePlaceholder": "Your name", + "conversationJoin.noAccountHead": "Don't have an account?", "conversationJoin.subhead": "Join conversation as temporary guest (access expires after 24 hours)", "conversationJoin.unsupportedJoinHeadline": "You have been invited to join a conversation in {brandName}", "conversationJoin.unsupportedJoinMobileSubhead": "Open this link on your computer.", @@ -375,7 +416,10 @@ "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", "conversationLabelPeople": "People", - "conversationLikesCaption": "{{number}} 人", + "conversationLikesCaptionPlural": "{{number}} people", + "conversationLikesCaptionReactedPlural": "reacted with {{emojiName}}", + "conversationLikesCaptionReactedSingular": "reacted with {{emojiName}}", + "conversationLikesCaptionSingular": "{{number}} person", "conversationLocationLink": "打開地圖", "conversationMemberJoined": "[bold]{{name}}[/bold] added {{users}} to the conversation", "conversationMemberJoinedMore": "[bold]{{name}}[/bold] added {{users}}, and [showmore]{{count}} more[/showmore] to the conversation", @@ -388,6 +432,7 @@ "conversationMemberRemoved": "[bold]{{name}}[/bold] removed {{users}}", "conversationMemberRemovedMissingLegalHoldConsent": "{{user}} was removed from this conversation because legal hold has been activated. [link]Learn more[/link]", "conversationMemberRemovedYou": "[bold]You[/bold] removed {{users}}", + "conversationMemberWereRemoved": "{{users}} were removed from the conversation", "conversationMessageDelivered": "已傳送", "conversationMissedMessages": "您已經有一段時間沒有使用此設備了,可能有部分訊息不會顯示出來。", "conversationModalRestrictedFileSharingDescription": "This file could not be shared due to your file sharing restrictions.", @@ -401,6 +446,7 @@ "conversationParticipantsSearchPlaceholder": "按名稱搜尋", "conversationParticipantsTitle": "聯絡人", "conversationPing": " 打了聲招呼", + "conversationPingConfirmTitle": "Are you sure you want to ping {{memberCount}} people?", "conversationPingYou": " 打了聲招呼", "conversationPlaybackError": "無法撥放語音", "conversationPopoverFavorite": "Add to favorites", @@ -514,10 +560,13 @@ "extensionsGiphyMessage": "通過 giphy.com {{tag}}", "extensionsGiphyNoGifs": "哎呀,沒有 gif 圖片", "extensionsGiphyRandom": "隨機", - "failedToAddParticipant": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipantDetails": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", - "failedToAddParticipants": "[bold]{{total}} participants[/bold] could not be added to the group.", - "failedToAddParticipantsDetails": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantSingularNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backend doesn't federate with the backends of all group participants.", + "failedToAddParticipantSingularOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsPlural": "[bold]{{total}} participants[/bold] could not be added to the group.", + "failedToAddParticipantsPluralDetailsNonFederatingBackends": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsPluralDetailsOfflineBackend": "[bold]{{names}}[/bold] and [bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", + "failedToAddParticipantsSingularDetailsNonFederatingBackends": "[bold]{{name}}[/bold] could not be added to the group as their backends do not federate with each other.", + "failedToAddParticipantsSingularDetailsOfflineBackend": "[bold]{{name}}[/bold] could not be added to the group as the backend of [bold]{{domain}}[/bold] could not be reached.", "featureConfigChangeModalApplock": "Mandatory app lock is now disabled. You do not need a passcode or biometric authentication when returning to the app.", "featureConfigChangeModalApplockHeadline": "Team settings changed", "featureConfigChangeModalAudioVideoDescriptionItemCameraDisabled": "Camera in calls is disabled", @@ -535,6 +584,8 @@ "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnabled": "Self-deleting messages are enabled. You can set a timer before writing a message.", "featureConfigChangeModalSelfDeletingMessagesDescriptionItemEnforced": "Self-deleting messages are now mandatory. New messages will self-delete after {{timeout}}.", "featureConfigChangeModalSelfDeletingMessagesHeadline": "There has been a change in {{brandName}}", + "federationConnectionRemove": "The backends [bold]{{backendUrlOne}}[/bold] and [bold]{{backendUrlTwo}}[/bold] stopped federating.", + "federationDelete": "[bold]Your backend[/bold] stopped federating with [bold]{{backendUrl}}.[/bold]", "fileTypeRestrictedIncoming": "File from [bold]{{name}}[/bold] can’t be opened", "fileTypeRestrictedOutgoing": "Sharing files with the {{fileExt}} extension is not permitted by your organization", "folderViewTooltip": "Folders", @@ -557,6 +608,10 @@ "groupCreationPreferencesErrorNameLong": "Too many characters", "groupCreationPreferencesErrorNameShort": "At least 1 character", "groupCreationPreferencesHeader": "Create group", + "groupCreationPreferencesNonFederatingEditList": "Edit Participants List", + "groupCreationPreferencesNonFederatingHeadline": "Group can’t be created", + "groupCreationPreferencesNonFederatingLeave": "Discard Group Creation", + "groupCreationPreferencesNonFederatingMessage": "People from backends {{backends}} can’t join the same group conversation, as their backends can’t communicate with each other. To create the group, remove affected participants. [link]Learn more[/link]", "groupCreationPreferencesPlaceholder": "Group name", "groupParticipantActionBlock": "Block…", "groupParticipantActionCancelRequest": "取消請求", @@ -675,12 +730,12 @@ "messageCouldNotBeSentConnectivityIssues": "Message could not be sent due to connectivity issues.", "messageCouldNotBeSentRetry": "Retry", "messageDetailsEdited": "Edited: {{edited}}", - "messageDetailsNoLikes": "No one has liked this message yet.", + "messageDetailsNoReactions": "No one has reacted to this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", "messageDetailsReceiptsOff": "Read receipts were not on when this message was sent.", "messageDetailsSent": "Sent: {{sent}}", "messageDetailsTitle": "Details", - "messageDetailsTitleLikes": "Liked{{count}}", + "messageDetailsTitleReactions": "Reactions{{count}}", "messageDetailsTitleReceipts": "Read{{count}}", "messageFailedToSendHideDetails": "Hide details", "messageFailedToSendParticipants": "{{count}} participants", @@ -692,6 +747,7 @@ "messageFailedToSendWillNotReceiveSingular": "won't get your message.", "messageFailedToSendWillReceivePlural": "will get your message later.", "messageFailedToSendWillReceiveSingular": "will get your message later.", + "mlsConversationRecovered": "You haven’t used this device for a while, or an issue has occurred. Some older messages may not appear here.", "mlsToggleInfo": "When this is on, conversation will use the new messaging layer security (MLS) protocol.", "mlsToggleName": "MLS", "modalAccountCreateAction": "確認", @@ -852,12 +908,14 @@ "modalConversationOptionsDisableServiceMessage": "Could not remove services. Please try again.", "modalConversationOptionsToggleGuestMessage": "Could not change guests state.", "modalConversationOptionsToggleServiceMessage": "Could not change services state.", - "modalConversationRemoveAction": "移除", + "modalConversationRemoveAction": "Remove", "modalConversationRemoveCloseBtn": "Close window 'Remove'", - "modalConversationRemoveGuestsAndServicesHeadline": "Disable access?", + "modalConversationRemoveGuestsHeadline": "Disable guest access?", "modalConversationRemoveGuestsMessage": "Current guests will be removed from the conversation. New guests will not be allowed.", + "modalConversationRemoveGuestsOrServicesAction": "Disable", "modalConversationRemoveHeadline": "確定移除?", "modalConversationRemoveMessage": "{{user}} 將無法在此對話中發送或接收訊息。", + "modalConversationRemoveServicesHeadline": "Disable services access?", "modalConversationRemoveServicesMessage": "Current services will be removed from the conversation. New services will not be allowed.", "modalConversationRevokeLinkAction": "Revoke link", "modalConversationRevokeLinkCloseBtn": "Close window 'Revoke the link'", @@ -918,9 +976,14 @@ "modalUserBlockHeadline": "確定要封鎖 {{user}} 嗎?", "modalUserBlockMessage": "{{user}} 將無法與您聯繫或將您添加到對話群組。", "modalUserBlockedForLegalHold": "This user is blocked due to legal hold. [link]Learn more[/link]", + "modalUserCannotAcceptConnectionMessage": "Connection request could not be accepted", "modalUserCannotBeAddedHeadline": "Guests cannot be added", - "modalUserCannotConnectLegalHoldHeadline": "Cannot connect to this user", - "modalUserCannotConnectLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotCancelConnectionMessage": "Connection request could not be canceled", + "modalUserCannotConnectHeadline": "Connecting not possible", + "modalUserCannotIgnoreConnectionMessage": "Connection request could not be ignored", + "modalUserCannotSendConnectionLegalHoldMessage": "You cannot connect to this user due to legal hold. [link]Learn more[/link]", + "modalUserCannotSendConnectionMessage": "Connection request could not be sent", + "modalUserCannotSendConnectionNotFederatingMessage": "You can’t send a connection request as your backend doesn’t federate with the one of {{username}}.", "modalUserLearnMore": "Learn more", "modalUserUnblockAction": "解除封鎖", "modalUserUnblockHeadline": "解除封鎖?", @@ -966,16 +1029,16 @@ "notificationVoiceChannelDeactivate": "有呼叫過", "oauth.allow": "Allow", "oauth.cancel": "Don't Allow", - "oauth.details": "If you allow the permissions listed, Wire™ will be able to connect to your calendar. It won’t see the content of your calendar, just the ones happening with Wire. If you don’t grant the permissions, you can’t use this add-in.", + "oauth.details": "If you allow the permissions listed above, your Outlook Calendar will be able to connect to Wire. If you don’t grant the permissions, you can’t use this add-in.", "oauth.headline": "Permissions", - "oauth.learnMore": "Learn more about these permissions in the settings.", + "oauth.learnMore": "Learn more about these permissions", "oauth.logout": "Switch account", "oauth.privacypolicy": "Wire's Privacy Policy", - "oauth.scope.read_feature_configs": "Access team feature configurations", - "oauth.scope.read_self": "Access user information", - "oauth.scope.write_conversations": "Create conversations", - "oauth.scope.write_conversations_code": "Create conversation guest links", - "oauth.subhead": "{app} requires your permission to:", + "oauth.scope.read_feature_configs": "View your team’s feature configurations", + "oauth.scope.read_self": "View your Wire username, profile name, and email", + "oauth.scope.write_conversations": "Create conversations in Wire", + "oauth.scope.write_conversations_code": "Create guest links to conversations in Wire", + "oauth.subhead": "Microsoft Outlook requires your permission to:", "offlineBackendLearnMore": "Learn more", "ongoingAudioCall": "Ongoing audio call with {{conversationName}}.", "ongoingGroupAudioCall": "Ongoing conference call with {{conversationName}}.", @@ -1095,6 +1158,7 @@ "preferencesOptionsBackupHeader": "History", "preferencesOptionsBackupImportHeadline": "Restore", "preferencesOptionsBackupImportSecondary": "You can only restore history from a backup of the same platform. Your backup will overwrite the conversations that you may have on this device.", + "preferencesOptionsBackupTryAgain": "Try Again", "preferencesOptionsCall": "Calls", "preferencesOptionsCallLogs": "Troubleshooting", "preferencesOptionsCallLogsDetail": "Save the calling debug report. This information helps {{brandName}} Support diagnose calling problems.", diff --git a/src/script/Config.ts b/src/script/Config.ts index 7b35fc98e3c..8e96a80b4b9 100644 --- a/src/script/Config.ts +++ b/src/script/Config.ts @@ -76,7 +76,7 @@ const config = { ALLOWED_IMAGE_TYPES: ['image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png'], /** Which min and max version of the backend api do we support */ - SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 3], + SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 4], /** DataDog client api keys acces */ dataDog: { diff --git a/src/script/E2EIdentity/DelayTimer/DelayTimer.test.ts b/src/script/E2EIdentity/DelayTimer/DelayTimer.test.ts new file mode 100644 index 00000000000..c5968de0ebe --- /dev/null +++ b/src/script/E2EIdentity/DelayTimer/DelayTimer.test.ts @@ -0,0 +1,172 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {FIFTEEN_MINUTES, FOUR_HOURS, ONE_HOUR, ONE_MINUTE} from './delay'; +import {DelayTimerService} from './DelayTimer'; // Update this with your module's actual path + +describe('createGracePeriodTimer', () => { + let timer: DelayTimerService | undefined; + + beforeEach(() => { + jest.clearAllMocks(); + jest.useFakeTimers(); + global.localStorage.clear(); + timer = DelayTimerService?.getInstance({ + gracePeriodInMS: 0, + gracePeriodExpiredCallback: jest.fn(), + delayPeriodExpiredCallback: jest.fn(), + }); + }); + + afterEach(() => { + timer?.resetInstance(); + timer = undefined; + jest.useRealTimers(); + }); + + it('should call the gracePeriodExpiredCallback when the grace period is over', () => { + const gracePeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: 1000, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback: jest.fn(), + }); + + jest.advanceTimersByTime(1000); + expect(gracePeriodExpiredCallback).toHaveBeenCalled(); + }); + + it('should call the gracePeriodExpiredCallback only after the delay time is over', () => { + const gracePeriodExpiredCallback = jest.fn(); + + timer?.updateParams({ + gracePeriodInMS: ONE_HOUR, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback: jest.fn(), + }); + + timer?.delayPrompt(); + + jest.advanceTimersByTime(FIFTEEN_MINUTES); + expect(gracePeriodExpiredCallback).not.toHaveBeenCalled(); + + jest.advanceTimersByTime(ONE_HOUR); + expect(gracePeriodExpiredCallback).toHaveBeenCalled(); + }); + + it('should not allow delaying the prompt if the grace period is already over', () => { + const gracePeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: 0, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback: jest.fn(), + }); + timer?.delayPrompt(); + + jest.advanceTimersByTime(500); + expect(gracePeriodExpiredCallback).toHaveBeenCalled(); + }); + + it('should allow delaying the prompt multiple times within the grace period', () => { + const gracePeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: 7200000, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback: jest.fn(), + }); + timer?.delayPrompt(); + jest.advanceTimersByTime(3600000); + timer?.delayPrompt(); + jest.advanceTimersByTime(3600000); + + expect(gracePeriodExpiredCallback).toHaveBeenCalled(); + }); + + it('should call the delayPeriodExpiredCallback after a delay based on the grace period', () => { + const delayPeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: ONE_HOUR, + gracePeriodExpiredCallback: jest.fn(), + delayPeriodExpiredCallback, + }); + + timer?.delayPrompt(); + + // getDelayTime(ONE_HOUR) will return FIFTEEN_MINUTES according to the function provided. + jest.advanceTimersByTime(FIFTEEN_MINUTES); + expect(delayPeriodExpiredCallback).toHaveBeenCalled(); + }); + + it('should not call delayPeriodExpiredCallback if grace period is over', () => { + const delayPeriodExpiredCallback = jest.fn(); + const gracePeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: ONE_HOUR, + delayPeriodExpiredCallback, + gracePeriodExpiredCallback, + }); + + timer?.delayPrompt(); + + // Here, instead of advancing time by "ONE_HOUR + FIFTEEN_MINUTES", we advance by "ONE_HOUR", which is the end of the grace period. + jest.advanceTimersByTime(ONE_HOUR + FIFTEEN_MINUTES); + expect(delayPeriodExpiredCallback).toHaveBeenCalled(); // The delayPeriodExpiredCallback should be called after ONE_HOUR. + expect(gracePeriodExpiredCallback).toHaveBeenCalled(); // The gracePeriodExpiredCallback should be called when the grace period ends, which is after ONE_HOUR. + + timer?.delayPrompt(); // We try to delay after the grace period has ended. + jest.advanceTimersByTime(FIFTEEN_MINUTES); + expect(delayPeriodExpiredCallback).toHaveBeenCalledTimes(1); // The delayPeriodExpiredCallback should not be called again since we're now past the grace period. + }); + + it('should call delayPeriodExpiredCallback multiple times if delayPrompt is called multiple times within the grace period', () => { + const delayPeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: FOUR_HOURS, + gracePeriodExpiredCallback: jest.fn(), + delayPeriodExpiredCallback, + }); + + timer?.delayPrompt(); + jest.advanceTimersByTime(ONE_HOUR); // gracePeriod > delay, so delay = ONE_HOUR + + timer?.delayPrompt(); + jest.advanceTimersByTime(ONE_HOUR); + + timer?.delayPrompt(); + jest.advanceTimersByTime(ONE_HOUR); + + expect(delayPeriodExpiredCallback).toHaveBeenCalledTimes(3); + }); + + it('should not execute the delayPrompt() if the grace period is over', () => { + const delayPeriodExpiredCallback = jest.fn(); + const gracePeriodExpiredCallback = jest.fn(); + timer?.updateParams({ + gracePeriodInMS: ONE_MINUTE, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback, + }); + + timer?.delayPrompt(); + jest.advanceTimersByTime(ONE_MINUTE); + + expect(delayPeriodExpiredCallback).not.toHaveBeenCalled(); + expect(gracePeriodExpiredCallback).toHaveBeenCalled(); + }); +}); diff --git a/src/script/E2EIdentity/DelayTimer/DelayTimer.ts b/src/script/E2EIdentity/DelayTimer/DelayTimer.ts new file mode 100644 index 00000000000..6fd68e1a2fa --- /dev/null +++ b/src/script/E2EIdentity/DelayTimer/DelayTimer.ts @@ -0,0 +1,287 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import logdown from 'logdown'; + +import {util} from '@wireapp/core'; + +import {getDelayTime} from './delay'; +import {DelayTimerStore} from './DelayTimerStorage'; + +const {TaskScheduler} = util; + +interface CreateGracePeriodTimerParams { + gracePeriodInMS: number; + gracePeriodExpiredCallback: () => void; + delayPeriodExpiredCallback: () => void; +} + +class DelayTimerService { + private static instance: DelayTimerService | null = null; + private gracePeriodInMS: number; + private gracePeriodExpiredCallback: () => void; + private delayPeriodExpiredCallback: () => void; + private readonly logger = logdown('@wireapp/core/DelayTimer'); + private delayPeriodTimerKey: string = 'E2EIdentity_DelayTimer'; + private gracePeriodTimerKey: string = 'E2EIdentity_GracePeriodTimer'; + + private constructor({ + gracePeriodInMS, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback, + }: CreateGracePeriodTimerParams) { + this.gracePeriodInMS = gracePeriodInMS; + this.gracePeriodExpiredCallback = gracePeriodExpiredCallback; + this.delayPeriodExpiredCallback = delayPeriodExpiredCallback; + this.initialize(); + } + + /** + * Get the singleton instance of GracePeriodTimer or create a new one + * For the first time, params are required to create the instance + * @param params The params to create the grace period timer + * @returns The singleton instance of GracePeriodTimer + */ + public static getInstance(params?: CreateGracePeriodTimerParams) { + if (!DelayTimerService.instance) { + if (!params) { + throw new Error('DelayTimerService is not initialized. Please call getInstance with params.'); + } + DelayTimerService.instance = new DelayTimerService(params); + } + return DelayTimerService.instance; + } + + /** + * @param CreateGracePeriodTimerParams The params to create the grace period timer + */ + public updateParams({ + gracePeriodInMS, + gracePeriodExpiredCallback, + delayPeriodExpiredCallback, + }: CreateGracePeriodTimerParams) { + DelayTimerStore.clear.all(); + this.clearGracePeriodTimer(); + this.clearDelayPeriodTimer(); + this.gracePeriodInMS = gracePeriodInMS; + this.gracePeriodExpiredCallback = gracePeriodExpiredCallback; + this.delayPeriodExpiredCallback = delayPeriodExpiredCallback; + this.initialize(); + } + + /** + * Initialize the grace period timer and load saved data from local storage if available + */ + public initialize() { + if (this.gracePeriodInMS <= 0) { + return this.exit('Grace period is 0. No delays are allowed.'); + } + + // Check if grace period has changed + if (DelayTimerStore.get.gracePeriod() !== this.gracePeriodInMS) { + // Check if grace period is less than the time elapsed since the last prompt + if (this.gracePeriodInMS < this.getElapsedGracePeriod()) { + return this.exit( + 'Grace period has changed and is less than the time elapsed since the last prompt. No more delays are allowed.', + ); + } + this.updateGracePeriod(); + } + + // Load saved data from local storage + if (DelayTimerStore.get.firingDate()) { + const currentTime = Date.now(); + if (DelayTimerStore.get.firingDate() <= currentTime) { + return this.exit('Grace period is already over. No more delays are allowed.'); + } + } else { + const firingDate = Date.now() + this.gracePeriodInMS; + DelayTimerStore.store.firingDate(firingDate); + DelayTimerStore.store.gracePeriod(this.gracePeriodInMS); + } + + // Start / restart the grace period timer + this.startGracePeriod(DelayTimerStore.get.firingDate()); + + // this will start the delay period timer if it was active before + this.continueDelayPeriodTimer(); + } + + /** + * Prompt the user to delay the enrollment + */ + public delayPrompt() { + if (this.isDelayTimerActive()) { + return; + } + if (!this.isSnoozeTimeAvailable()) { + return this.exit('No more delays are allowed.'); + } + const delayTimeInMS = getDelayTime(this.gracePeriodInMS); + if (delayTimeInMS <= 0) { + return this.exit('Delay period is 0. No more delays are allowed.'); + } + + if (DelayTimerStore.get.firingDate() <= Date.now()) { + return this.exit('Grace period is already over. No more delays are allowed.'); + } + + this.startDelayPeriod(Date.now() + delayTimeInMS); + } + + /** + * Update the grace period + */ + private updateGracePeriod() { + // Store the new grace period + DelayTimerStore.store.gracePeriod(this.gracePeriodInMS); + const elapsedGracePeriod = this.getElapsedGracePeriod(); + + // Check if grace period is already over + if (elapsedGracePeriod > this.gracePeriodInMS) { + return this.exit('Grace period is already over. No more delays are allowed.'); + } + + // Update the remaining grace period + this.gracePeriodInMS -= elapsedGracePeriod; + const startTime = Date.now(); + // Calculate the new end time + const firingDate = startTime + this.gracePeriodInMS; + // Store the new end time + DelayTimerStore.store.firingDate(firingDate); + + this.startGracePeriod(firingDate); + } + + /** + * Exit the function + * @param exitMessage The exit message + * @returns Calls the gracePeriodExpiredCallback + */ + private exit(exitMessage: string) { + this.logger.info(exitMessage); + this.clearDelayPeriodTimer(); + this.clearGracePeriodTimer(); + DelayTimerStore.clear.all(); + return this.gracePeriodExpiredCallback(); + } + + /** + * Start the grace period timer and store the grace period + * @param gracePeriodInMS The grace period in ms + */ + private startGracePeriod(firingDate: number) { + this.clearGracePeriodTimer(); + + const task = () => { + return this.exit('Grace period is over. No more delays are allowed.'); + }; + + if (TaskScheduler.hasActiveTask(this.gracePeriodTimerKey)) { + TaskScheduler.continueTask({ + key: this.gracePeriodTimerKey, + task, + }); + } else { + TaskScheduler.addTask({ + key: this.gracePeriodTimerKey, + task, + firingDate, + persist: true, + }); + } + } + + /** + * Start the delay period timer and store the delay time + * @param delayTimeInMS The delay time in ms + */ + private startDelayPeriod(firingDate?: number) { + this.clearDelayPeriodTimer(); + + const task = () => { + this.logger.info('Delay time is over.'); + return this.delayPeriodExpiredCallback(); + }; + + if (TaskScheduler.hasActiveTask(this.delayPeriodTimerKey)) { + TaskScheduler.continueTask({ + key: this.delayPeriodTimerKey, + task, + }); + } else if (firingDate) { + TaskScheduler.addTask({ + key: this.delayPeriodTimerKey, + task, + firingDate, + persist: true, + }); + } + } + + /** + * Clear the current grace period timer + */ + private clearGracePeriodTimer() { + TaskScheduler.cancelTask(this.gracePeriodTimerKey); + } + + /** + * Clear the current delay period timer + */ + private clearDelayPeriodTimer() { + TaskScheduler.cancelTask(this.delayPeriodTimerKey); + } + + private continueDelayPeriodTimer() { + this.startDelayPeriod(); + } + + /** + * Get the time elapsed since the last prompt + * @returns The time elapsed since the last prompt in ms + */ + private getElapsedGracePeriod() { + return DelayTimerStore.get.firingDate() + ? Date.now() - (DelayTimerStore.get.firingDate() - this.gracePeriodInMS) + : 0; + } + + /** + * Reset the instance + */ + public resetInstance() { + DelayTimerStore.clear.all(); + this.clearGracePeriodTimer(); + this.clearDelayPeriodTimer(); + DelayTimerService.instance = null; + } + + public isDelayTimerActive() { + return TaskScheduler.hasActiveTask(this.delayPeriodTimerKey); + } + + public isSnoozeTimeAvailable() { + const remainingTime = DelayTimerStore.get.firingDate() - Date.now(); + const delayTime = getDelayTime(remainingTime); + return remainingTime - delayTime > 0; + } +} + +export {DelayTimerService}; diff --git a/src/script/E2EIdentity/DelayTimer/DelayTimerStorage.ts b/src/script/E2EIdentity/DelayTimer/DelayTimerStorage.ts new file mode 100644 index 00000000000..7c122af9975 --- /dev/null +++ b/src/script/E2EIdentity/DelayTimer/DelayTimerStorage.ts @@ -0,0 +1,42 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +const FiringDateKey = 'E2EIdentity_DelayTimer_FiringDate'; +const GracePeriodKey = 'E2EIdentity_DelayTimer_GracePeriod'; + +const DelayTimerStore = { + store: { + firingDate: (firingDate: number) => localStorage.setItem(FiringDateKey, String(firingDate)), + gracePeriod: (gracePeriod: number) => localStorage.setItem(GracePeriodKey, String(gracePeriod)), + }, + get: { + firingDate: () => Number(localStorage.getItem(FiringDateKey)), + gracePeriod: () => Number(localStorage.getItem(GracePeriodKey)), + }, + clear: { + firingDate: () => localStorage.removeItem(FiringDateKey), + gracePeriod: () => localStorage.removeItem(GracePeriodKey), + all: () => { + DelayTimerStore.clear.firingDate(); + DelayTimerStore.clear.gracePeriod(); + }, + }, +}; + +export {DelayTimerStore}; diff --git a/src/script/E2EIdentity/DelayTimer/delay.ts b/src/script/E2EIdentity/DelayTimer/delay.ts new file mode 100644 index 00000000000..7dbdc03a6fe --- /dev/null +++ b/src/script/E2EIdentity/DelayTimer/delay.ts @@ -0,0 +1,52 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +/* eslint-disable no-magic-numbers */ + +enum TIME_IN_MILLIS { + SECOND = 1000, + MINUTE = SECOND * 60, + HOUR = MINUTE * 60, + DAY = HOUR * 24, + WEEK = DAY * 7, + YEAR = DAY * 365, +} + +export const ONE_MINUTE = TIME_IN_MILLIS.MINUTE; +export const FIVE_MINUTES = TIME_IN_MILLIS.MINUTE * 5; +export const FIFTEEN_MINUTES = TIME_IN_MILLIS.MINUTE * 15; +export const ONE_HOUR = TIME_IN_MILLIS.HOUR; +export const FOUR_HOURS = TIME_IN_MILLIS.HOUR * 4; +export const ONE_DAY = TIME_IN_MILLIS.DAY; + +export function getDelayTime(gracePeriodInMs: number): number { + if (gracePeriodInMs > 0) { + if (gracePeriodInMs <= FIFTEEN_MINUTES) { + return Math.min(FIVE_MINUTES, gracePeriodInMs); + } else if (gracePeriodInMs <= ONE_HOUR) { + return Math.min(FIFTEEN_MINUTES, gracePeriodInMs); + } else if (gracePeriodInMs <= FOUR_HOURS) { + return Math.min(ONE_HOUR, gracePeriodInMs); + } else if (gracePeriodInMs <= ONE_DAY) { + return Math.min(FOUR_HOURS, gracePeriodInMs); + } + return Math.min(ONE_DAY, gracePeriodInMs); + } + return 0; +} diff --git a/src/script/E2EIdentity/E2EIdentity.test.ts b/src/script/E2EIdentity/E2EIdentity.test.ts new file mode 100644 index 00000000000..55cf2f2fe54 --- /dev/null +++ b/src/script/E2EIdentity/E2EIdentity.test.ts @@ -0,0 +1,240 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {container} from 'tsyringe'; + +import {PrimaryModal} from 'Components/Modals/PrimaryModal'; +import {Config} from 'src/script/Config'; +import {Core} from 'src/script/service/CoreSingleton'; +import {UserState} from 'src/script/user/UserState'; +import * as util from 'Util/util'; + +import {E2EIHandler, E2EIHandlerStep} from './E2EIdentity'; +import {getModalOptions, ModalType} from './Modals'; +import {OIDCService} from './OIDCService/OIDCService'; + +jest.mock('./OIDCService', () => ({ + getOIDCServiceInstance: jest.fn().mockReturnValue({ + clearProgress: jest.fn(), + } as unknown as OIDCService), +})); +jest.mock('Util/util'); +jest.mock('src/script/Config'); +jest.mock('tsyringe'); +jest.mock('src/script/service/CoreSingleton', () => { + return { + Core: jest.fn().mockImplementation(() => { + return {enrollE2EI: jest.fn()}; + }), + }; +}); +jest.mock('src/script/user/UserState', () => { + return { + UserState: jest.fn().mockImplementation(() => { + return {self: jest.fn()}; + }), + }; +}); +jest.mock('Components/Modals/PrimaryModal'); +jest.mock('./Modals', () => ({ + getModalOptions: jest.fn().mockReturnValue({ + modalOptions: {}, + modalType: 'someType', + }), + ModalType: { + LOADING: 'loading', + SUCCESS: 'success', + ERROR: 'error', + ENROLL: 'enroll', + }, +})); +jest.mock('src/script/service/CoreSingleton', () => ({ + Core: jest.fn().mockImplementation(() => ({ + enrollE2EI: jest.fn(), + })), +})); +jest.mock('src/script/user/UserState', () => ({ + UserState: jest.fn().mockImplementation(() => ({ + self: jest.fn(), + })), +})); + +describe('E2EIHandler', () => { + const params = {discoveryUrl: 'http://example.com', gracePeriodInMS: 30000}; + const newParams = {discoveryUrl: 'http://new-example.com', gracePeriodInMS: 60000}; + const user = {name: () => 'John Doe', username: () => 'johndoe'}; + let coreMock: Core; + let userStateMock: UserState; + + beforeEach(() => { + (util.supportsMLS as jest.Mock).mockReturnValue(true); + // Reset the singleton instance before each test + E2EIHandler.resetInstance(); + // Clear all mocks before each test + jest.clearAllMocks(); + // Setup the Core and UserState services mocks + coreMock = new Core(); + userStateMock = new UserState(); + (userStateMock.self as unknown as jest.Mock).mockReturnValue({name: () => 'John Doe', username: () => 'johndoe'}); + (coreMock.enrollE2EI as jest.Mock).mockResolvedValue(true); + + (container.resolve as jest.Mock).mockImplementation(service => { + if (service === Core) { + return coreMock; + } + if (service === UserState) { + return userStateMock; + } + return null; + }); + + // Mock the Config service to return true for ENABLE_E2EI + (util.supportsMLS as jest.Mock).mockReturnValue(true); + Config.getConfig = jest.fn().mockReturnValue({FEATURE: {ENABLE_E2EI: true}}); + + // Mock the PrimaryModal service to return a mock modal + (PrimaryModal.show as jest.Mock).mockClear(); + (getModalOptions as jest.Mock).mockClear(); + }); + + it('should create instance with valid params', () => { + const instance = E2EIHandler.getInstance(params); + expect(instance).toBeInstanceOf(E2EIHandler); + }); + + it('should throw error if no params provided', () => { + expect(() => E2EIHandler.getInstance()).toThrow( + 'GracePeriodTimer is not initialized. Please call getInstance with params.', + ); + }); + + it('should always return the same instance', () => { + const instance1 = E2EIHandler.getInstance(params); + const instance2 = E2EIHandler.getInstance(params); + expect(instance1).toBe(instance2); + }); + + it('should update parameters correctly', () => { + const instance = E2EIHandler.getInstance(params); + + // Assuming that the instance exposes getters for discoveryUrl and gracePeriodInMS for testing purposes + expect(instance['discoveryUrl']).toEqual(params.discoveryUrl); + expect(instance['gracePeriodInMS']).toEqual(params.gracePeriodInMS); + + instance.updateParams(newParams); + expect(instance['discoveryUrl']).toEqual(newParams.discoveryUrl); + expect(instance['gracePeriodInMS']).toEqual(newParams.gracePeriodInMS); + }); + + it('should return true when supportsMLS returns true and ENABLE_E2EI is true', () => { + const instance = E2EIHandler.getInstance(params); + expect(instance.isE2EIEnabled).toBe(true); + }); + + it('should return false when supportsMLS returns false', () => { + (util.supportsMLS as jest.Mock).mockReturnValue(false); + + const instance = E2EIHandler.getInstance(params); + expect(instance.isE2EIEnabled).toBe(false); + }); + + it('should return false when ENABLE_E2EI is false', () => { + Config.getConfig = jest.fn().mockReturnValue({FEATURE: {ENABLE_E2EI: false}}); + + const instance = E2EIHandler.getInstance(params); + expect(instance.isE2EIEnabled).toBe(false); + }); + + it('should set currentStep to INITIALIZE after initialize is called', () => { + const instance = E2EIHandler.getInstance(params); + instance.initialize(); + expect(instance['currentStep']).toBe(E2EIHandlerStep.INITIALIZED); + }); + + it('should set currentStep to ENROLL when enrollE2EI is called and enrollment succeeds', async () => { + const instance = E2EIHandler.getInstance(params); + await instance['enrollE2EI'](); + expect(instance['currentStep']).toBe(E2EIHandlerStep.SUCCESS); + }); + + it('should set currentStep to ERROR when enrollE2EI is called and enrollment fails', async () => { + // Mock the Core service to return an error + (container.resolve as any) = jest.fn(service => { + if (service === Core) { + return {enrollE2EI: jest.fn(() => Promise.reject())}; + } + return {self: () => user}; + }); + + const instance = E2EIHandler.getInstance(params); + await instance['enrollE2EI'](); + expect(instance['currentStep']).toBe(E2EIHandlerStep.ERROR); + }); + + it('should display user info message when initialized', async () => { + const handler = E2EIHandler.getInstance(params); + await handler.initialize(); + expect(getModalOptions).toHaveBeenCalledWith( + expect.objectContaining({ + type: ModalType.ENROLL, + }), + ); + }); + + it('should display loading message when enrolled', async () => { + const handler = E2EIHandler.getInstance(params); + await handler['enrollE2EI'](); + expect(getModalOptions).toHaveBeenCalledWith( + expect.objectContaining({ + type: ModalType.LOADING, + }), + ); + }); + + it('should display success message when enrollment is done', async () => { + const handler = E2EIHandler.getInstance(params); + handler['showLoadingMessage'] = jest.fn(); + await handler['enrollE2EI'](); + expect(getModalOptions).toHaveBeenCalledWith( + expect.objectContaining({ + type: ModalType.SUCCESS, + }), + ); + }); + + it('should display error message when enrollment fails', async () => { + (container.resolve as jest.Mock).mockImplementation(service => { + if (service === Core) { + return {startE2EIEnrollment: jest.fn(() => Promise.reject(false))}; + } + if (service === UserState) { + return userStateMock; + } + return null; + }); + const handler = E2EIHandler.getInstance(params); + handler['showLoadingMessage'] = jest.fn(); + await handler['enrollE2EI'](); + expect(getModalOptions).toHaveBeenCalledWith( + expect.objectContaining({ + type: ModalType.ERROR, + }), + ); + }); +}); diff --git a/src/script/E2EIdentity/E2EIdentity.ts b/src/script/E2EIdentity/E2EIdentity.ts new file mode 100644 index 00000000000..f24986e5a0b --- /dev/null +++ b/src/script/E2EIdentity/E2EIdentity.ts @@ -0,0 +1,275 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {container} from 'tsyringe'; + +import {PrimaryModal, removeCurrentModal} from 'Components/Modals/PrimaryModal'; +import {Config} from 'src/script/Config'; +import {Core} from 'src/script/service/CoreSingleton'; +import {UserState} from 'src/script/user/UserState'; +import {removeUrlParameters} from 'Util/UrlUtil'; +import {supportsMLS} from 'Util/util'; + +import {DelayTimerService} from './DelayTimer/DelayTimer'; +import {getModalOptions, ModalType} from './Modals'; +import {getOIDCServiceInstance} from './OIDCService'; +import {OIDCServiceStore} from './OIDCService/OIDCServiceStorage'; + +export enum E2EIHandlerStep { + UNINITIALIZED = 'uninitialized', + INITIALIZED = 'initialized', + ENROLL = 'enroll', + SUCCESS = 'success', + ERROR = 'error', + SNOOZE = 'snooze', +} + +interface E2EIHandlerParams { + discoveryUrl: string; + gracePeriodInMS: number; +} + +class E2EIHandler { + private static instance: E2EIHandler | null = null; + private readonly core = container.resolve(Core); + private readonly userState = container.resolve(UserState); + private timer: DelayTimerService; + private discoveryUrl: string; + private gracePeriodInMS: number; + private currentStep: E2EIHandlerStep | null = E2EIHandlerStep.UNINITIALIZED; + + private constructor({discoveryUrl, gracePeriodInMS}: E2EIHandlerParams) { + // ToDo: Do these values need to te able to be updated? Should we use a singleton with update fn? + this.discoveryUrl = discoveryUrl; + this.gracePeriodInMS = gracePeriodInMS; + this.timer = DelayTimerService.getInstance({ + gracePeriodInMS, + gracePeriodExpiredCallback: () => null, + delayPeriodExpiredCallback: () => null, + }); + } + + /** + * Get the singleton instance of GracePeriodTimer or create a new one + * For the first time, params are required to create the instance + * After that, params are optional and can be used to update the grace period timer + * @param params The params to create the grace period timer + * @returns The singleton instance of GracePeriodTimer + */ + public static getInstance(params?: E2EIHandlerParams) { + if (!E2EIHandler.instance) { + if (!params) { + throw new Error('GracePeriodTimer is not initialized. Please call getInstance with params.'); + } + E2EIHandler.instance = new E2EIHandler(params); + } + return E2EIHandler.instance; + } + + /** + * Reset the instance + */ + public static resetInstance() { + E2EIHandler.instance = null; + } + + /** + * @param E2EIHandlerParams The params to create the grace period timer + */ + public updateParams({gracePeriodInMS, discoveryUrl}: E2EIHandlerParams) { + this.gracePeriodInMS = gracePeriodInMS; + this.discoveryUrl = discoveryUrl; + this.timer.updateParams({ + gracePeriodInMS, + gracePeriodExpiredCallback: () => null, + delayPeriodExpiredCallback: () => null, + }); + this.initialize(); + } + + public initialize(): void { + if (this.isE2EIEnabled) { + if (!this.core.service?.e2eIdentity?.hasActiveCertificate()) { + this.showE2EINotificationMessage(); + } + } + } + + get isE2EIEnabled(): boolean { + return supportsMLS() && Config.getConfig().FEATURE.ENABLE_E2EI; + } + + private async storeRedirectTargetAndRedirect(targetURL: string): Promise { + // store the target url in the persistent oidc service store, since the oidc service will be destroyed after the redirect + OIDCServiceStore.store.targetURL(targetURL); + const oidcService = getOIDCServiceInstance(); + await oidcService.authenticate(); + } + + private async enrollE2EI() { + try { + // Notify user about E2EI enrollment in progress + this.currentStep = E2EIHandlerStep.ENROLL; + this.showLoadingMessage(); + let oAuthIdToken: string | undefined; + + // If the enrollment is in progress, we need to get the id token from the oidc service, since oauth should have already been completed + if (this.core.service?.e2eIdentity?.isEnrollmentInProgress()) { + const oidcService = getOIDCServiceInstance(); + const userData = await oidcService.handleAuthentication(); + if (!userData) { + throw new Error('Received no user data from OIDC service'); + } + oAuthIdToken = userData?.id_token; + } + + const data = await this.core.enrollE2EI( + this.userState.self().name(), + this.userState.self().username(), + this.discoveryUrl, + oAuthIdToken, + ); + + // If the data is false or we dont get the ACMEChallenge, enrollment failed + if (!data) { + throw new Error('E2EI enrollment failed'); + } + + // Check if the data is a boolean, if not, we need to handle the oauth redirect + if (typeof data !== 'boolean') { + await this.storeRedirectTargetAndRedirect(data.target); + } + + // Notify user about E2EI enrollment success + // This setTimeout is needed because there was a timing with the success modal and the loading modal + setTimeout(() => { + removeCurrentModal(); + }, 0); + + this.currentStep = E2EIHandlerStep.SUCCESS; + this.showSuccessMessage(); + // Remove the url parameters after enrollment + removeUrlParameters(); + } catch (error) { + this.currentStep = E2EIHandlerStep.ERROR; + setTimeout(() => { + removeCurrentModal(); + }, 0); + this.showErrorMessage(); + } + } + + private showLoadingMessage(): void { + if (this.currentStep !== E2EIHandlerStep.ENROLL) { + return; + } + + const {modalOptions, modalType} = getModalOptions({ + type: ModalType.LOADING, + hideClose: true, + }); + PrimaryModal.show(modalType, modalOptions); + } + + private showSuccessMessage(): void { + if (this.currentStep !== E2EIHandlerStep.SUCCESS) { + return; + } + + const {modalOptions, modalType} = getModalOptions({ + type: ModalType.SUCCESS, + hideSecondary: true, + hideClose: false, + }); + PrimaryModal.show(modalType, modalOptions); + } + + private async showErrorMessage(): Promise { + if (this.currentStep !== E2EIHandlerStep.ERROR) { + return; + } + + // Remove the url parameters of the failed enrollment + removeUrlParameters(); + // Clear the oidc service progress + const oidcService = getOIDCServiceInstance(); + await oidcService.clearProgress(); + // Clear the e2e identity progress + this.core.service?.e2eIdentity?.clearAllProgress(); + + const {modalOptions, modalType} = getModalOptions({ + type: ModalType.ERROR, + hideClose: true, + primaryActionFn: () => { + this.currentStep = E2EIHandlerStep.INITIALIZED; + void this.enrollE2EI(); + }, + secondaryActionFn: () => { + this.showE2EINotificationMessage(); + }, + }); + + PrimaryModal.show(modalType, modalOptions); + } + + private showE2EINotificationMessage(): void { + // If the user has already started enrollment, don't show the notification. Instead, show the loading modal + // This will occur after the redirect from the oauth provider + if (this.core.service?.e2eIdentity?.isEnrollmentInProgress()) { + void this.enrollE2EI(); + return; + } + + // If the user has already snoozed the notification, don't show it again until the snooze period has expired + if (this.currentStep !== E2EIHandlerStep.UNINITIALIZED && this.currentStep !== E2EIHandlerStep.SNOOZE) { + return; + } + + // Only initialize the timer when the it is uninitialized + if (this.currentStep === E2EIHandlerStep.UNINITIALIZED) { + this.timer.updateParams({ + gracePeriodInMS: this.gracePeriodInMS, + gracePeriodExpiredCallback: () => { + this.showE2EINotificationMessage(); + }, + delayPeriodExpiredCallback: () => { + this.showE2EINotificationMessage(); + }, + }); + this.currentStep = E2EIHandlerStep.INITIALIZED; + } + + // If the timer is not active, show the notification + if (!this.timer.isDelayTimerActive()) { + const {modalOptions, modalType} = getModalOptions({ + hideSecondary: !this.timer.isSnoozeTimeAvailable(), + primaryActionFn: () => this.enrollE2EI(), + secondaryActionFn: () => { + this.currentStep = E2EIHandlerStep.SNOOZE; + this.timer.delayPrompt(); + }, + type: ModalType.ENROLL, + hideClose: true, + }); + PrimaryModal.show(modalType, modalOptions); + } + } +} + +export {E2EIHandler}; diff --git a/src/script/E2EIdentity/Modals/Modals.test.ts b/src/script/E2EIdentity/Modals/Modals.test.ts new file mode 100644 index 00000000000..f9f26971b61 --- /dev/null +++ b/src/script/E2EIdentity/Modals/Modals.test.ts @@ -0,0 +1,60 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {PrimaryModal} from 'Components/Modals/PrimaryModal'; + +import {getModalOptions, ModalType} from './Modals'; + +describe('getModalOptions', () => { + it('should return modal options with hidden secondary action when hideSecondary is true', () => { + const options = getModalOptions({type: ModalType.ENROLL, hideSecondary: true}); + + expect(options.modalOptions.secondaryAction).toBeUndefined(); + expect(options.modalType).toEqual(PrimaryModal.type.ACKNOWLEDGE); + }); + + it('should return modal options with hidden secondary action when secondaryActionFn is not provided', () => { + const options = getModalOptions({type: ModalType.ENROLL, secondaryActionFn: undefined}); + + expect(options.modalOptions.secondaryAction).toBeUndefined(); + expect(options.modalType).toEqual(PrimaryModal.type.ACKNOWLEDGE); + }); + + it('should return modal options with hidden primary action when hidePrimary is true', () => { + const options = getModalOptions({type: ModalType.ENROLL, hidePrimary: true}); + + expect(options.modalOptions.primaryAction).toBeUndefined(); + }); + + it('should return modal options with hidden close button when hideClose is true', () => { + const options = getModalOptions({type: ModalType.ENROLL, hideClose: true}); + + expect(options.modalOptions.hideCloseBtn).toBeTruthy(); + expect(options.modalOptions.preventClose).toBeTruthy(); + }); + + it('should return modal options with hidden secondary and primary actions when both hideSecondary and hidePrimary are true', () => { + const options = getModalOptions({type: ModalType.ENROLL, hideSecondary: true, hidePrimary: true}); + + expect(options.modalOptions.secondaryAction).toBeUndefined(); + expect(options.modalOptions.primaryAction).toBeUndefined(); + }); + + // Add more test cases as needed to cover different combinations of hide functionality +}); diff --git a/src/script/E2EIdentity/Modals/Modals.ts b/src/script/E2EIdentity/Modals/Modals.ts new file mode 100644 index 00000000000..d422b592466 --- /dev/null +++ b/src/script/E2EIdentity/Modals/Modals.ts @@ -0,0 +1,144 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {PrimaryModal} from 'Components/Modals/PrimaryModal'; +import {ModalOptions, PrimaryModalType} from 'Components/Modals/PrimaryModal/PrimaryModalTypes'; +import {t} from 'Util/LocalizerUtil'; + +const hideSecondaryBtn = {hideSecondary: true}; +const hideCloseBtn = {hideCloseBtn: true, preventClose: true}; + +export enum ModalType { + ENROLL = 'enroll', + ERROR = 'error', + SUCCESS = 'success', + LOADING = 'loading', +} + +interface GetModalOptions { + type: ModalType; + primaryActionFn?: () => void; + secondaryActionFn?: () => void; + hideSecondary?: boolean; + hidePrimary?: boolean; + hideClose?: boolean; +} +export const getModalOptions = ({ + type, + primaryActionFn, + secondaryActionFn, + hidePrimary = false, + hideSecondary = false, + hideClose = true, +}: GetModalOptions) => { + if (!secondaryActionFn) { + hideSecondary = true; + } + let options: ModalOptions = {}; + let modalType: PrimaryModalType = PrimaryModal.type.CONFIRM; + switch (type) { + case ModalType.ENROLL: + options = { + text: { + closeBtnLabel: t('acme.settingsChanged.button.close'), + htmlMessage: t('acme.settingsChanged.paragraph'), + title: t('acme.settingsChanged.headline.alt'), + }, + primaryAction: { + action: primaryActionFn, + text: t('acme.settingsChanged.button.primary'), + }, + secondaryAction: { + action: secondaryActionFn, + text: t('acme.settingsChanged.button.secondary'), + }, + ...hideCloseBtn, + }; + modalType = + hideSecondary || secondaryActionFn === undefined ? PrimaryModal.type.ACKNOWLEDGE : PrimaryModal.type.CONFIRM; + break; + + case ModalType.ERROR: + options = { + text: { + closeBtnLabel: t('acme.error.button.close'), + htmlMessage: t('acme.error.paragraph'), + title: t('acme.error.headline'), + }, + primaryAction: { + action: primaryActionFn, + text: t('acme.error.button.primary'), + }, + secondaryAction: { + action: secondaryActionFn, + text: t('acme.error.button.secondary'), + }, + }; + modalType = + hideSecondary || secondaryActionFn === undefined ? PrimaryModal.type.CONFIRM : PrimaryModal.type.ACKNOWLEDGE; + break; + + case ModalType.LOADING: + options = { + text: { + title: t('acme.inProgress.headline'), + }, + ...hideCloseBtn, + }; + // Needs to be changed to Loading spinner Modal + modalType = PrimaryModalType.LOADING; + break; + + case ModalType.SUCCESS: + options = { + text: { + closeBtnLabel: t('acme.done.button.close'), + htmlMessage: t('acme.done.paragraph'), + title: t('acme.done.headline'), + }, + primaryAction: { + action: primaryActionFn, + text: t('acme.done.button'), + }, + }; + modalType = PrimaryModal.type.ACKNOWLEDGE; + break; + } + + if (hideClose) { + options = { + ...options, + ...hideCloseBtn, + }; + } + + if (hideSecondary || secondaryActionFn === undefined) { + delete options.secondaryAction; + options = { + ...options, + ...hideSecondaryBtn, + }; + } + + if (hidePrimary) { + delete options.primaryAction; + } + + return {modalOptions: options, modalType}; +}; diff --git a/src/script/components/InputBar/components/MentionSuggestions/index.ts b/src/script/E2EIdentity/Modals/index.ts similarity index 89% rename from src/script/components/InputBar/components/MentionSuggestions/index.ts rename to src/script/E2EIdentity/Modals/index.ts index cb36039b461..6d870d904f4 100644 --- a/src/script/components/InputBar/components/MentionSuggestions/index.ts +++ b/src/script/E2EIdentity/Modals/index.ts @@ -1,6 +1,6 @@ /* * Wire - * Copyright (C) 2022 Wire Swiss GmbH + * Copyright (C) 2023 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,4 +17,4 @@ * */ -export * from './MentionSuggestions'; +export * from './Modals'; diff --git a/src/script/E2EIdentity/OIDCService/OIDCService.ts b/src/script/E2EIdentity/OIDCService/OIDCService.ts new file mode 100644 index 00000000000..6f0aef805dd --- /dev/null +++ b/src/script/E2EIdentity/OIDCService/OIDCService.ts @@ -0,0 +1,68 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {UserManager, User, UserManagerSettings} from 'oidc-client-ts'; + +import {clearKeysStartingWith} from 'Util/localStorage'; + +interface OIDCServiceConfig { + authorityUrl: string; + audience: string; + redirectUri: string; + clientSecret?: string; +} + +export class OIDCService { + private userManager: UserManager; + + constructor(config: OIDCServiceConfig) { + const {authorityUrl, audience, redirectUri, clientSecret = ''} = config; + const dexioConfig: UserManagerSettings = { + authority: authorityUrl, + client_id: audience, + redirect_uri: redirectUri, + response_type: 'code', + scope: 'openid profile email', + client_secret: clientSecret, + }; + + this.userManager = new UserManager(dexioConfig); + } + + public async authenticate(): Promise { + await this.userManager.signinRedirect(); + } + + public handleAuthentication(): Promise { + // Remove the hash (hash router) from the url before processing + const url = window.location.href.replace('/#', ''); + + return this.userManager.signinRedirectCallback(url).then(user => { + return user; + }); + } + + public clearProgress(): Promise { + const {localStorage, sessionStorage} = window; + // remove all oidc keys from local and session storage to prevent errors and stale state + clearKeysStartingWith('oidc.', localStorage); + clearKeysStartingWith('oidc.user:', sessionStorage); + return this.userManager.clearStaleState(); + } +} diff --git a/src/script/E2EIdentity/OIDCService/OIDCServiceStorage.ts b/src/script/E2EIdentity/OIDCService/OIDCServiceStorage.ts new file mode 100644 index 00000000000..da41033ad67 --- /dev/null +++ b/src/script/E2EIdentity/OIDCService/OIDCServiceStorage.ts @@ -0,0 +1,40 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +const TargetURLKey = 'E2EIdentity_OIDCService_TargetURL'; + +const OIDCServiceStore = { + store: { + targetURL: (url: string) => localStorage.setItem(TargetURLKey, url), + }, + get: { + targetURL: () => localStorage.getItem(TargetURLKey), + }, + has: { + targetURL: () => localStorage.getItem(TargetURLKey) !== null, + }, + clear: { + targetURL: () => localStorage.removeItem(TargetURLKey), + all: () => { + OIDCServiceStore.clear.targetURL(); + }, + }, +}; + +export {OIDCServiceStore}; diff --git a/src/script/E2EIdentity/OIDCService/index.ts b/src/script/E2EIdentity/OIDCService/index.ts new file mode 100644 index 00000000000..290e1343c8d --- /dev/null +++ b/src/script/E2EIdentity/OIDCService/index.ts @@ -0,0 +1,37 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {OIDCService} from './OIDCService'; +import {OIDCServiceStore} from './OIDCServiceStorage'; + +// lots of hardcoded values here, but this is just for testing until we have a proper OIDC service +export const getOIDCServiceInstance = (): OIDCService => { + // if there is no targetURL, we cannot create an OIDCService + const targetURL = OIDCServiceStore.get.targetURL(); + if (!targetURL) { + throw new Error('No targetURL found in OIDCServiceStore'); + } + const oidcService = new OIDCService({ + audience: '338888153072-ktbh66pv3mr0ua0dn64sphgimeo0p7ss.apps.googleusercontent.com', + authorityUrl: 'https://accounts.google.com' || targetURL, + redirectUri: 'https://local.elna.wire.link:8081/oidc', + clientSecret: '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', + }); + return oidcService; +}; diff --git a/src/script/mls/mlsConversationState/index.ts b/src/script/E2EIdentity/index.ts similarity index 89% rename from src/script/mls/mlsConversationState/index.ts rename to src/script/E2EIdentity/index.ts index a5cc6a67fc6..6092e227756 100644 --- a/src/script/mls/mlsConversationState/index.ts +++ b/src/script/E2EIdentity/index.ts @@ -1,6 +1,6 @@ /* * Wire - * Copyright (C) 2022 Wire Swiss GmbH + * Copyright (C) 2023 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,4 +17,4 @@ * */ -export * from './mlsConversationState'; +export * from './E2EIdentity'; diff --git a/src/script/assets/AssetCrypto.ts b/src/script/assets/AssetCrypto.ts index 067c7a376be..4b1f50d723b 100644 --- a/src/script/assets/AssetCrypto.ts +++ b/src/script/assets/AssetCrypto.ts @@ -17,7 +17,7 @@ * */ -export interface EncryptedAsset { +interface EncryptedAsset { cipherText: ArrayBuffer; keyBytes: ArrayBuffer; sha256: ArrayBuffer; diff --git a/src/script/assets/AssetRemoteData.ts b/src/script/assets/AssetRemoteData.ts index e88c634f36a..de372c7a46c 100644 --- a/src/script/assets/AssetRemoteData.ts +++ b/src/script/assets/AssetRemoteData.ts @@ -21,25 +21,25 @@ import ko from 'knockout'; export type AssetUrlData = AssetUrlDataVersion1 | AssetUrlDataVersion2 | AssetUrlDataVersion3 | AssetUrlDataVersion4; -export interface AssetUrlDataVersion3 { +interface AssetUrlDataVersion3 { assetKey: string; assetToken: string; forceCaching: boolean; version: 3; } -export interface AssetUrlDataVersion4 extends Omit { +interface AssetUrlDataVersion4 extends Omit { assetDomain: string; version: 4; } -export interface AssetUrlDataVersion2 { +interface AssetUrlDataVersion2 { assetId: string; conversationId: string; forceCaching: boolean; version: 2; } -export interface AssetUrlDataVersion1 { +interface AssetUrlDataVersion1 { assetId: string; conversationId: string; forceCaching: boolean; diff --git a/src/script/assets/AssetRepository.ts b/src/script/assets/AssetRepository.ts index 1a7242421dc..92081ab626e 100644 --- a/src/script/assets/AssetRepository.ts +++ b/src/script/assets/AssetRepository.ts @@ -39,7 +39,7 @@ import {FileAsset} from '../entity/message/FileAsset'; import type {User} from '../entity/User'; import {Core} from '../service/CoreSingleton'; -export interface CompressedImage { +interface CompressedImage { compressedBytes: Uint8Array; compressedImage: HTMLImageElement; } @@ -50,7 +50,7 @@ export interface AssetUploadOptions extends AssetOptions { legalHoldStatus?: LegalHoldStatus; } -export interface UploadStatus { +interface UploadStatus { messageId: string; progress: ko.Observable; } diff --git a/src/script/audio/AudioRepository.ts b/src/script/audio/AudioRepository.ts index 44f9f7433ce..bd14907e8d6 100644 --- a/src/script/audio/AudioRepository.ts +++ b/src/script/audio/AudioRepository.ts @@ -30,7 +30,8 @@ import {AudioState} from './AudioState'; import {AudioType} from './AudioType'; import {NOTIFICATION_HANDLING_STATE} from '../event/NotificationHandlingState'; -import {DeviceTypes, MediaDevicesHandler} from '../media/MediaDevicesHandler'; +import {MediaDevicesHandler} from '../media/MediaDevicesHandler'; +import {MediaDeviceType} from '../media/MediaDeviceType'; enum AUDIO_PLAY_PERMISSION { ALLOWED = 0, @@ -87,7 +88,7 @@ export class AudioRepository { } private updateSinkIds() { - const currentOutputDevice = this.devicesHandler?.currentDeviceId[DeviceTypes.AUDIO_OUTPUT](); + const currentOutputDevice = this.devicesHandler?.currentDeviceId[MediaDeviceType.AUDIO_OUTPUT](); if (!currentOutputDevice) { return; } diff --git a/src/script/auth/component/AccountForm.tsx b/src/script/auth/component/AccountForm.tsx index 5ca312ab676..d90aead77ed 100644 --- a/src/script/auth/component/AccountForm.tsx +++ b/src/script/auth/component/AccountForm.tsx @@ -52,7 +52,7 @@ const AccountFormComponent = ({account, ...props}: Props & ConnectedProps & Disp const {formatMessage: _} = useIntl(); const [registrationData, setRegistrationData] = useState({ - accent_id: AccentColor.random().id, + accent_id: AccentColor.STRONG_BLUE.id, email: '', name: '', password: '', diff --git a/src/script/auth/component/JoinGuestLinkPasswordModal.test.tsx b/src/script/auth/component/JoinGuestLinkPasswordModal.test.tsx index a5160517b50..66c09b6d6e4 100644 --- a/src/script/auth/component/JoinGuestLinkPasswordModal.test.tsx +++ b/src/script/auth/component/JoinGuestLinkPasswordModal.test.tsx @@ -27,6 +27,7 @@ describe('JoinGuestLinkPasswordModal', () => { const onSubmitPasswordMock = jest.fn(); const props: JoinGuestLinkPasswordModalProps = { onSubmitPassword: onSubmitPasswordMock, + onClose: jest.fn(), conversationName: 'test group', error: null, }; diff --git a/src/script/auth/component/UnsupportedBrowser.tsx b/src/script/auth/component/UnsupportedBrowser.tsx index 7d4a32ff434..c01fe3f37fb 100644 --- a/src/script/auth/component/UnsupportedBrowser.tsx +++ b/src/script/auth/component/UnsupportedBrowser.tsx @@ -50,11 +50,11 @@ const UnsupportedMessage: React.FC = ({headline, subhead}) => ); }; -export interface UnsupportedBrowserProps extends React.HTMLProps { +interface UnsupportedBrowserProps extends React.HTMLProps { isTemporaryGuest?: boolean; } -export const UnsupportedBrowserComponent = ({ +const UnsupportedBrowserComponent = ({ children, hasCookieSupport, hasIndexedDbSupport, @@ -128,6 +128,4 @@ const mapStateToProps = (state: RootState) => ({ isSupportedBrowser: RuntimeSelector.isSupportedBrowser(state), }); -const UnsupportedBrowser = connect(mapStateToProps)(UnsupportedBrowserComponent); - -export {UnsupportedBrowser}; +export const UnsupportedBrowser = connect(mapStateToProps)(UnsupportedBrowserComponent); diff --git a/src/script/auth/externalRoute.ts b/src/script/auth/externalRoute.ts index 98138bdc376..aabb942a7bd 100644 --- a/src/script/auth/externalRoute.ts +++ b/src/script/auth/externalRoute.ts @@ -20,8 +20,6 @@ import {Config} from '../Config'; export const EXTERNAL_ROUTE = { - PWA: Config.getConfig().URL.MOBILE_BASE, - PWA_LOGIN: `${Config.getConfig().URL.MOBILE_BASE}/login/`, WEBAPP: '../', WIRE_ACCOUNT: Config.getConfig().URL.ACCOUNT_BASE, WIRE_ACCOUNT_PASSWORD_RESET: `${Config.getConfig().URL.ACCOUNT_BASE}/forgot/`, diff --git a/src/script/auth/localeConfig.ts b/src/script/auth/localeConfig.ts index 8afd7abb914..6269d07fdee 100644 --- a/src/script/auth/localeConfig.ts +++ b/src/script/auth/localeConfig.ts @@ -24,8 +24,8 @@ import {UrlUtil} from '@wireapp/commons'; import {QUERY_KEY} from './route'; import {supportedLocales as Locales} from './supportedLocales'; -export const DEFAULT_CURRENCY = SupportedCurrency.EUR; -export const DEFAULT_LANGUAGE = 'en-US'; +const DEFAULT_CURRENCY = SupportedCurrency.EUR; +const DEFAULT_LANGUAGE = 'en-US'; function getLocale(): string { return mapLanguage(navigator.languages?.length ? navigator.languages[0] : navigator.language); diff --git a/src/script/auth/module/action/RuntimeAction.ts b/src/script/auth/module/action/RuntimeAction.ts index 48252dabde5..232ce193277 100644 --- a/src/script/auth/module/action/RuntimeAction.ts +++ b/src/script/auth/module/action/RuntimeAction.ts @@ -25,20 +25,30 @@ import {RuntimeActionCreator} from './creator/'; import * as RuntimeSelector from '../../module/selector/RuntimeSelector'; import {QUERY_KEY} from '../../route'; -import {hasURLParameter} from '../../util/urlUtil'; import type {ThunkAction} from '../reducer'; +const androidBrowser = 'android browser'; +const chromeMobile = 'chrome mobile'; +const outlookBrowser = 'unknown'; + export class RuntimeAction { checkSupportedBrowser = (): ThunkAction => { return (dispatch, getState, {getConfig}) => { - const isPwaSupportedBrowser = () => { - return Runtime.isMobileOS() || Runtime.isSafari(); + const isMobileSupportedBrowser = () => { + return ( + Runtime.isMobileOS() && + (Runtime.isSafari() || + Runtime.isChrome() || + [androidBrowser, chromeMobile].includes(Runtime.getBrowserName())) + ); + }; + const isOutlookApp = () => { + return Runtime.getBrowserName() === outlookBrowser; }; - const pwaAware = hasURLParameter(QUERY_KEY.PWA_AWARE); - const isPwaEnabled = getConfig().URL.MOBILE_BASE && pwaAware && isPwaSupportedBrowser(); + const isAuthorizationFlow = () => location?.hash?.includes(QUERY_KEY.SCOPE) ?? false; if ( (!RuntimeSelector.hasToUseDesktopApplication(getState()) && Runtime.isWebappSupportedBrowser()) || - isPwaEnabled + ((isMobileSupportedBrowser() || isOutlookApp()) && isAuthorizationFlow()) ) { dispatch(RuntimeActionCreator.confirmSupportedBrowser()); } diff --git a/src/script/auth/module/reducer/selfReducer.ts b/src/script/auth/module/reducer/selfReducer.ts index 1f42ad0d3f3..f35512a4951 100644 --- a/src/script/auth/module/reducer/selfReducer.ts +++ b/src/script/auth/module/reducer/selfReducer.ts @@ -19,7 +19,7 @@ import type {Self} from '@wireapp/api-client/lib/self/'; -import {AppActions, SELF_ACTION} from '../action/creator/'; +import {AUTH_ACTION, AppActions, SELF_ACTION} from '../action/creator/'; export interface SelfState { consents: {[key: number]: number}; @@ -100,6 +100,11 @@ export function selfReducer(state: SelfState = initialSelfState, action: AppActi consents: {...state.consents, [action.payload.type]: action.payload.value}, }; } + case AUTH_ACTION.LOGOUT_SUCCESS: { + return { + ...initialSelfState, + }; + } default: { return state; } diff --git a/src/script/auth/page/ClientManager.tsx b/src/script/auth/page/ClientManager.tsx index 96a6baebeec..7b9d083adc4 100644 --- a/src/script/auth/page/ClientManager.tsx +++ b/src/script/auth/page/ClientManager.tsx @@ -24,7 +24,7 @@ import {connect} from 'react-redux'; import {AnyAction, Dispatch} from 'redux'; import {UrlUtil, StringUtil, Runtime} from '@wireapp/commons'; -import {Button, ButtonVariant, ContainerXS, H1, Muted, useTimeout} from '@wireapp/react-ui-kit'; +import {Button, ButtonVariant, ContainerXS, H1, Muted, QUERY, useMatchMedia, useTimeout} from '@wireapp/react-ui-kit'; import {Page} from './Page'; @@ -41,6 +41,8 @@ const ClientManagerComponent = ({doGetAllClients, doLogout}: Props & ConnectedPr const {formatMessage: _} = useIntl(); const SFAcode = localStorage.getItem(QUERY_KEY.CONVERSATION_CODE); const isOauth = UrlUtil.hasURLParameter(QUERY_KEY.SCOPE); + const isMobile = useMatchMedia(QUERY.mobile); + const device = StringUtil.capitalize(Runtime.getBrowserName()); const timeRemaining = JSON.parse(localStorage.getItem(QUERY_KEY.JOIN_EXPIRES) ?? '{}')?.data ?? Date.now(); @@ -73,12 +75,24 @@ const ClientManagerComponent = ({doGetAllClients, doLogout}: Props & ConnectedPr

{_(clientManagerStrings.headline)}

- + {isOauth ? _(clientManagerStrings.oauth, {device}) : _(clientManagerStrings.subhead, {brandName: Config.getConfig().BRAND_NAME})} diff --git a/src/script/auth/page/ConversationJoin.tsx b/src/script/auth/page/ConversationJoin.tsx index 4f9ad54432f..679e693a431 100644 --- a/src/script/auth/page/ConversationJoin.tsx +++ b/src/script/auth/page/ConversationJoin.tsx @@ -20,43 +20,31 @@ import React, {useEffect, useState} from 'react'; import type {RegisterData} from '@wireapp/api-client/lib/auth'; -import {BackendError, BackendErrorLabel} from '@wireapp/api-client/lib/http'; -import {FormattedMessage, useIntl} from 'react-intl'; +import {BackendErrorLabel} from '@wireapp/api-client/lib/http'; +import {useIntl} from 'react-intl'; import {connect} from 'react-redux'; -import {Navigate} from 'react-router-dom'; +import {Navigate} from 'react-router'; import {AnyAction, Dispatch} from 'redux'; -import {Runtime, UrlUtil} from '@wireapp/commons'; -import { - ArrowIcon, - Button, - ContainerXS, - Form, - H2, - Input, - InputBlock, - InputSubmitCombo, - Link, - RoundIconButton, - Small, - Loading, - Text, -} from '@wireapp/react-ui-kit'; +import {UrlUtil} from '@wireapp/commons'; +import {Column, Columns, H1, Muted} from '@wireapp/react-ui-kit'; -import {isBackendError} from 'Util/TypePredicateUtil'; import {noop} from 'Util/util'; +import {GuestLoginColumn, IsLoggedInColumn, Separator} from './ConversationJoinComponents'; +import {ConversationJoinFull, ConversationJoinInvalid} from './ConversationJoinInvalid'; import {EntropyContainer} from './EntropyContainer'; +import {Login} from './Login'; +import {Page} from './Page'; import {Config} from '../../Config'; import {conversationJoinStrings} from '../../strings'; import {AppAlreadyOpen} from '../component/AppAlreadyOpen'; import {JoinGuestLinkPasswordModal} from '../component/JoinGuestLinkPasswordModal'; -import {RouterLink} from '../component/RouterLink'; import {UnsupportedBrowser} from '../component/UnsupportedBrowser'; import {WirelessContainer} from '../component/WirelessContainer'; import {EXTERNAL_ROUTE} from '../externalRoute'; -import {actionRoot as ROOT_ACTIONS} from '../module/action/'; +import {actionRoot as ROOT_ACTIONS} from '../module/action'; import {ValidationError} from '../module/action/ValidationError'; import {bindActionCreators, RootState} from '../module/reducer'; import * as AuthSelector from '../module/selector/AuthSelector'; @@ -64,8 +52,6 @@ import * as ConversationSelector from '../module/selector/ConversationSelector'; import * as SelfSelector from '../module/selector/SelfSelector'; import {QUERY_KEY, ROUTE} from '../route'; import * as AccentColor from '../util/AccentColor'; -import {parseError, parseValidationErrors} from '../util/errorUtil'; -import * as StringUtil from '../util/stringUtil'; type Props = React.HTMLProps; @@ -77,8 +63,6 @@ const ConversationJoinComponent = ({ setLastEventDate, doLogout, doGetConversationInfoByCode, - isAuthenticated, - isTemporaryGuest, selfName, conversationError, isFetchingAuth, @@ -92,28 +76,25 @@ const ConversationJoinComponent = ({ const conversationHasPassword = conversationInfo?.has_password; const invalidConversationPassword = conversationError && conversationError.label === BackendErrorLabel.INVALID_CONVERSATION_PASSWORD; - const [accentColor] = useState(AccentColor.random()); - const [isPwaEnabled, setIsPwaEnabled] = useState(); + const [accentColor] = useState(AccentColor.STRONG_BLUE); const [isJoinGuestLinkPasswordModalOpen, setIsJoinGuestLinkPasswordModalOpen] = useState( !!conversationHasPassword || !!invalidConversationPassword, ); const [conversationCode, setConversationCode] = useState(); const [conversationKey, setConversationKey] = useState(); - const [enteredName, setEnteredName] = useState(); + const [enteredName, setEnteredName] = useState(''); const [error, setError] = useState(); const [expiresIn, setExpiresIn] = useState(); - const [forceNewTemporaryGuestAccount, setForceNewTemporaryGuestAccount] = useState(false); const [isValidLink, setIsValidLink] = useState(true); const [isValidName, setIsValidName] = useState(true); + const [isSubmitingName, setIsSubmitingName] = useState(false); const [showCookiePolicyBanner, setShowCookiePolicyBanner] = useState(true); const [showEntropyForm, setShowEntropyForm] = useState(false); const isEntropyRequired = Config.getConfig().FEATURE.ENABLE_EXTRA_CLIENT_ENTROPY; const isFetching = isFetchingAuth || isFetchingConversation || conversationInfoFetching; - const isPwaSupportedBrowser = () => { - return Runtime.isMobileOS() || Runtime.isSafari(); - }; + const isWirePublicInstance = Config.getConfig().BRAND_NAME === 'Wire'; useEffect(() => { setIsJoinGuestLinkPasswordModalOpen(!!conversationHasPassword || !!invalidConversationPassword); @@ -141,48 +122,42 @@ const ConversationJoinComponent = ({ }); }, []); - useEffect(() => { - const isEnabled = - Config.getConfig().URL.MOBILE_BASE && UrlUtil.hasURLParameter(QUERY_KEY.PWA_AWARE) && isPwaSupportedBrowser(); - setIsPwaEnabled(!!isEnabled); - if (isEnabled) { - setForceNewTemporaryGuestAccount(true); - } - }, []); - const routeToApp = (conversation: string = '', domain: string = '') => { - const redirectLocation = isPwaEnabled - ? UrlUtil.pathWithParams(EXTERNAL_ROUTE.PWA_LOGIN, {[QUERY_KEY.IMMEDIATE_LOGIN]: 'true'}) - : `${UrlUtil.pathWithParams(EXTERNAL_ROUTE.WEBAPP)}${ - conversation && `#/conversation/${conversation}${domain && `/${domain}`}` - }`; + const redirectLocation = `${UrlUtil.pathWithParams(EXTERNAL_ROUTE.WEBAPP)}${ + conversation && `#/conversation/${conversation}${domain && `/${domain}`}` + }`; window.location.replace(redirectLocation); }; - const handleSubmitError = (error: BackendError) => { - switch (error.label) { - default: { - const isValidationError = Object.values(ValidationError.ERROR).some(errorType => - (error as BackendError).label.endsWith(errorType), - ); - if (!isValidationError) { - doLogout(); - console.warn('Unable to create wireless account', error); - setShowEntropyForm(false); - } + const getConversationInfoAndJoin = async (password?: string) => { + try { + if (!conversationCode || !conversationKey) { + throw Error('Conversation code or key missing'); } + const conversationEvent = await doJoinConversationByCode(conversationKey, conversationCode, undefined, password); + /* When we join a conversation, we create the join event before loading the webapp. + * That means that when the webapp loads and tries to fetch the notificationStream is will get the join event once again and will try to handle it + * Here we set the core's lastEventDate so that it knows that this duplicated event should be skipped + */ + await setLastEventDate(new Date(conversationEvent.time)); + + routeToApp(conversationEvent.conversation, conversationEvent.qualified_conversation?.domain ?? ''); + } catch (error) { + console.warn('Unable to join conversation', error); + setShowEntropyForm(false); } }; const handleSubmit = async (entropyData?: Uint8Array, password?: string) => { - if (!conversationKey || !conversationCode) { - return; - } + setIsSubmitingName(true); if (!isJoinGuestLinkPasswordModalOpen && !!conversationHasPassword) { setIsJoinGuestLinkPasswordModalOpen(true); return; } try { + if (!conversationCode || !conversationKey) { + throw Error('Conversation code or key missing'); + } const name = enteredName?.trim(); const registrationData = { accent_id: accentColor.id, @@ -192,21 +167,26 @@ const ConversationJoinComponent = ({ await doRegisterWireless( registrationData as RegisterData, { - shouldInitializeClient: !isPwaEnabled, + shouldInitializeClient: true, }, entropyData, ); - const conversationEvent = await doJoinConversationByCode(conversationKey, conversationCode, undefined, password); - /* When we join a conversation, we create the join event before loading the webapp. - * That means that when the webapp loads and tries to fetch the notificationStream is will get the join event once again and will try to handle it - * Here we set the core's lastEventDate so that it knows that this duplicated event should be skipped - */ - await setLastEventDate(new Date(conversationEvent.time)); - - routeToApp(conversationEvent.conversation, conversationEvent.qualified_conversation?.domain ?? ''); + await getConversationInfoAndJoin(password); } catch (error) { - if (isBackendError(error)) { - handleSubmitError(error); + setIsSubmitingName(false); + if (error.label) { + switch (error.label) { + default: { + const isValidationError = Object.values(ValidationError.ERROR).some(errorType => + error.label.endsWith(errorType), + ); + if (!isValidationError) { + void doLogout(); + console.warn('Unable to create wireless account', error); + setShowEntropyForm(false); + } + } + } } else { await doLogout(); console.warn('Unable to create wireless account', error); @@ -218,7 +198,7 @@ const ConversationJoinComponent = ({ } }; - const checkNameValidity = (event: React.FormEvent) => { + const checkNameValidity = async (event: React.FormEvent) => { event.preventDefault(); if (!nameInput.current) { return; @@ -230,7 +210,7 @@ const ConversationJoinComponent = ({ } else if (isEntropyRequired) { setShowEntropyForm(true); } else { - handleSubmit(); + await handleSubmit(); } }; @@ -244,9 +224,12 @@ const ConversationJoinComponent = ({ setEnteredName(event.target.value); }; + if (!isValidLink) { + return ; + } + const isFullConversation = conversationError && conversationError.label && conversationError.label === BackendErrorLabel.TOO_MANY_MEMBERS; - const renderTemporaryGuestAccountCreation = !isAuthenticated || isTemporaryGuest || forceNewTemporaryGuestAccount; const submitJoinCodeWithPassword = async (password: string) => { await handleSubmit(undefined, password); @@ -255,6 +238,9 @@ const ConversationJoinComponent = ({ if (!isValidLink) { return ; } + if (isFullConversation) { + return ; + } return ( @@ -271,129 +257,46 @@ const ConversationJoinComponent = ({ showCookiePolicyBanner={showCookiePolicyBanner} onCookiePolicyBannerClose={() => setShowCookiePolicyBanner(false)} > - {isEntropyRequired && showEntropyForm ? ( - - ) : isFullConversation ? ( - -

- -

- - {_(conversationJoinStrings.fullConversationSubhead)} - -
- ) : renderTemporaryGuestAccountCreation ? ( -
- - -

- +
+

+ {_(conversationJoinStrings.mainHeadline)} +

+ {!isWirePublicInstance && ( + + {_(conversationJoinStrings.headline, {domain: window.location.hostname})} + + )} +
+ + + {selfName ? ( + + ) : ( + + )} + + + + + {isEntropyRequired && showEntropyForm ? ( + + ) : ( + -

- - - -
- - - - - {isFetching ? : } - - - - {!isJoinGuestLinkPasswordModalOpen && - (error ? parseValidationErrors(error) : parseError(conversationError))} -
- {!isPwaEnabled && ( - - {`${_(conversationJoinStrings.hasAccount)} `} - - {_(conversationJoinStrings.loginLink)} - - )} -
-
- ) : ( - - -

- {selfName - ? _(conversationJoinStrings.existentAccountHeadline, { - brandName: Config.getConfig().BRAND_NAME, - name: StringUtil.capitalize(selfName), - }) - : _(conversationJoinStrings.headline, {brandName: Config.getConfig().BRAND_NAME})} -

- - {_(conversationJoinStrings.existentAccountSubhead)} - - - {!isJoinGuestLinkPasswordModalOpen && - (error ? parseValidationErrors(error) : parseError(conversationError))} - - {_(conversationJoinStrings.existentAccountJoinWithoutText, { - existentAccountJoinWithoutLink: ( - setForceNewTemporaryGuestAccount(true)} - textTransform={'none'} - data-uie-name="go-join" - > - {_(conversationJoinStrings.existentAccountJoinWithoutLink)} - - ), - })} - -
- )} + + +
); @@ -403,10 +306,10 @@ type ConnectedProps = ReturnType; const mapStateToProps = (state: RootState) => ({ isFetchingAuth: AuthSelector.isFetching(state), isAuthenticated: AuthSelector.isAuthenticated(state), - selfName: SelfSelector.getSelfName(state), + isFetchingConversation: ConversationSelector.isFetching(state), isTemporaryGuest: SelfSelector.isTemporaryGuest(state), + selfName: !SelfSelector.isTemporaryGuest(state) && SelfSelector.getSelfName(state), conversationError: ConversationSelector.getError(state), - isFetchingConversation: ConversationSelector.isFetching(state), conversationInfo: ConversationSelector.conversationInfo(state), conversationInfoFetching: ConversationSelector.conversationInfoFetching(state), }); diff --git a/src/script/auth/page/ConversationJoinComponents.tsx b/src/script/auth/page/ConversationJoinComponents.tsx new file mode 100644 index 00000000000..70ae3e47c1d --- /dev/null +++ b/src/script/auth/page/ConversationJoinComponents.tsx @@ -0,0 +1,209 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import React from 'react'; + +import {useIntl} from 'react-intl'; + +import { + useMatchMedia, + QUERY, + Button, + Column, + Columns, + Container, + ContainerXS, + H2, + Link, + LinkVariant, + Muted, + Form, + Input, + InputBlock, + Loading, +} from '@wireapp/react-ui-kit'; + +import {conversationJoinStrings} from '../../strings'; +import {parseValidationErrors, parseError} from '../util/errorUtil'; + +interface IsLoggedInColumnProps { + selfName: string; + handleSubmit: () => void; + handleLogout: () => void; +} + +interface GuestLoginColumnProps { + handleSubmit: () => void; + enteredName: string; + onNameChange: (e: React.ChangeEvent) => void; + checkNameValidity: (event: React.FormEvent) => Promise; + isValidName: boolean; + isSubmitingName: boolean; + nameInput: React.RefObject; + conversationError: (Error & {label?: string | undefined}) | null; + error: any; +} + +const Separator = () => { + const isMobile = useMatchMedia(QUERY.mobile); + const Line = () => ( +
+ ); + return ( +
+ +
+ ); +}; + +const IsLoggedInColumn = ({handleLogout, handleSubmit, selfName}: IsLoggedInColumnProps) => { + const {formatMessage: _} = useIntl(); + return ( + + + + + <> +

{_(conversationJoinStrings.existentAccountJoinInBrowser)}

+ + {_(conversationJoinStrings.existentAccountUserName, {selfName})} + + + + + {_(conversationJoinStrings.joinWithOtherAccount)} + + +
+
+
+
+ ); +}; + +const GuestLoginColumn = ({ + enteredName, + nameInput, + onNameChange, + isSubmitingName, + isValidName, + checkNameValidity, + conversationError, + error, +}: GuestLoginColumnProps) => { + const {formatMessage: _} = useIntl(); + + return ( + + + + + <> +

{_(conversationJoinStrings.noAccountHead)}

+ {_(conversationJoinStrings.subhead)} +
+ + + + {error ? parseValidationErrors(error) : parseError(conversationError)} + {isSubmitingName ? ( + + ) : ( + + )} + + +
+
+
+
+ ); +}; + +export {IsLoggedInColumn, Separator, GuestLoginColumn}; diff --git a/src/script/auth/page/ConversationJoinInvalid.tsx b/src/script/auth/page/ConversationJoinInvalid.tsx index 5216264efc1..4faf8b2dc5c 100644 --- a/src/script/auth/page/ConversationJoinInvalid.tsx +++ b/src/script/auth/page/ConversationJoinInvalid.tsx @@ -53,4 +53,22 @@ const ConversationJoinInvalid = ({}: Props) => { ); }; -export {ConversationJoinInvalid}; +const ConversationJoinFull = ({}: Props) => { + const {formatMessage: _} = useIntl(); + return ( + + + +

+ +

+ + {_(conversationJoinStrings.fullConversationSubhead)} + +
+
+
+ ); +}; + +export {ConversationJoinInvalid, ConversationJoinFull}; diff --git a/src/script/auth/page/Login.tsx b/src/script/auth/page/Login.tsx index 563f5b89cb9..f20e593fe21 100644 --- a/src/script/auth/page/Login.tsx +++ b/src/script/auth/page/Login.tsx @@ -43,8 +43,8 @@ import { ContainerXS, FlexBox, Form, - H1, H2, + Heading, IsMobile, Label, Link, @@ -76,8 +76,11 @@ import * as AuthSelector from '../module/selector/AuthSelector'; import * as ConversationSelector from '../module/selector/ConversationSelector'; import {QUERY_KEY, ROUTE} from '../route'; import {parseError, parseValidationErrors} from '../util/errorUtil'; +import {getOAuthQueryString} from '../util/oauthUtil'; -type Props = React.HTMLProps; +type Props = React.HTMLProps & { + embedded?: boolean; +}; const LoginComponent = ({ authError, @@ -99,6 +102,7 @@ const LoginComponent = ({ isSendingTwoFactorCode, conversationInfo, conversationInfoFetching, + embedded, }: Props & ConnectedProps & DispatchProps) => { const logger = getLogger('Login'); const {formatMessage: _} = useIntl(); @@ -118,7 +122,7 @@ const LoginComponent = ({ const [verificationCode, setVerificationCode] = useState(''); const [twoFactorSubmitFailedOnce, setTwoFactorSubmitFailedOnce] = useState(false); - const isOauth = UrlUtil.hasURLParameter(QUERY_KEY.SCOPE); + const isOauth = UrlUtil.hasURLParameter(QUERY_KEY.SCOPE, window.location.hash); const [showEntropyForm, setShowEntropyForm] = useState(false); const isEntropyRequired = Config.getConfig().FEATURE.ENABLE_EXTRA_CLIENT_ENTROPY; @@ -201,7 +205,8 @@ const LoginComponent = ({ await doInitializeClient(ClientType.PERMANENT, undefined, undefined, entropyData); if (isOauth) { - return navigate(ROUTE.AUTHORIZE); + const queryString = getOAuthQueryString(window.location); + return navigate(`${ROUTE.AUTHORIZE}/${queryString}`); } return navigate(ROUTE.HISTORY_INFO); } catch (error) { @@ -248,7 +253,9 @@ const LoginComponent = ({ } if (isOauth) { - return navigate(ROUTE.AUTHORIZE); + const queryString = getOAuthQueryString(window.location); + + return navigate(`${ROUTE.AUTHORIZE}/${queryString}`); } return navigate(ROUTE.HISTORY_INFO); } catch (error) { @@ -321,7 +328,7 @@ const LoginComponent = ({ setTwoFactorSubmitError(''); // Do not auto submit if already failed once if (!twoFactorSubmitFailedOnce) { - handleSubmit({...twoFactorLoginData, verificationCode: code}, []); + void handleSubmit({...twoFactorLoginData, verificationCode: code}, []); } }; @@ -344,19 +351,20 @@ const LoginComponent = ({ return ( - {(Config.getConfig().FEATURE.ENABLE_DOMAIN_DISCOVERY || - Config.getConfig().FEATURE.ENABLE_SSO || - Config.getConfig().FEATURE.ENABLE_ACCOUNT_REGISTRATION) && ( - -
{backArrow}
-
- )} + {!embedded && + (Config.getConfig().FEATURE.ENABLE_DOMAIN_DISCOVERY || + Config.getConfig().FEATURE.ENABLE_SSO || + Config.getConfig().FEATURE.ENABLE_ACCOUNT_REGISTRATION) && ( + +
{backArrow}
+
+ )} {isEntropyRequired && showEntropyForm ? ( ) : ( {!isValidLink && } - + {!embedded && } {isLinkPasswordModalOpen && ( setIsLinkPasswordModalOpen(false)} @@ -367,19 +375,21 @@ const LoginComponent = ({ /> )} - - - {(Config.getConfig().FEATURE.ENABLE_DOMAIN_DISCOVERY || - Config.getConfig().FEATURE.ENABLE_SSO || - Config.getConfig().FEATURE.ENABLE_ACCOUNT_REGISTRATION) && ( -
{backArrow}
- )} -
-
+ {!embedded && ( + + + {(Config.getConfig().FEATURE.ENABLE_DOMAIN_DISCOVERY || + Config.getConfig().FEATURE.ENABLE_SSO || + Config.getConfig().FEATURE.ENABLE_ACCOUNT_REGISTRATION) && ( +
{backArrow}
+ )} +
+
+ )} {twoFactorLoginData ? (
@@ -421,7 +431,9 @@ const LoginComponent = ({ ) : ( <>
-

{_(loginStrings.headline)}

+ + {_(loginStrings.headline)} + {_(loginStrings.subhead)}
@@ -435,7 +447,7 @@ const LoginComponent = ({ {!Runtime.isDesktopApp() && ( ) => { - pushLoginData({ + void pushLoginData({ clientType: event.target.checked ? ClientType.TEMPORARY : ClientType.PERMANENT, }); }} @@ -460,7 +472,7 @@ const LoginComponent = ({ > {_(loginStrings.forgotPassword)} - {Config.getConfig().FEATURE.ENABLE_PHONE_LOGIN && ( + {!embedded && Config.getConfig().FEATURE.ENABLE_PHONE_LOGIN && ( - + {!embedded && } )} diff --git a/src/script/auth/page/OAuthPermissions.tsx b/src/script/auth/page/OAuthPermissions.tsx index 996849560f3..b2c7b3a5bfc 100644 --- a/src/script/auth/page/OAuthPermissions.tsx +++ b/src/script/auth/page/OAuthPermissions.tsx @@ -36,6 +36,8 @@ import { LinkVariant, COLOR_V2, H2, + QUERY, + useMatchMedia, } from '@wireapp/react-ui-kit'; import {Icon} from 'Components/Icon'; @@ -51,6 +53,9 @@ import { containerCSS, headerCSS, listCSS, + mobileButtonsCSS, + mobileButtonCSS, + mobileTextCSS, teamImageCSS, textCSS, } from './OauthPermissions.styles'; @@ -86,6 +91,7 @@ const OAuthPermissionsComponent = ({ }: Props & ConnectedProps & DispatchProps) => { const {formatMessage: _} = useIntl(); const [teamImage, setTeamImage] = React.useState(undefined); + const isMobile = useMatchMedia(QUERY.mobile); const [oAuthApp, setOAuthApp] = useState(null); const oauthParams = oAuthParams(window.location); @@ -118,7 +124,11 @@ const OAuthPermissionsComponent = ({ setTeamImage(teamImageBlob && (await loadDataUrl(teamImageBlob))); } } - setOAuthApp(!!oauthParams.client_id ? await getOAuthApp(oauthParams.client_id) : null); + if (oauthParams.client_id) { + setOAuthApp(!!oauthParams.client_id ? await getOAuthApp(oauthParams.client_id) : null); + } else { + throw Error('OAuth client not found'); + } }; getUserData().catch(error => { console.error(error); @@ -183,7 +193,7 @@ const OAuthPermissionsComponent = ({ target="_blank" rel="noopener noreferrer" data-uie-name="go-learn-more" - href="https://support.wire.com/hc/en-us/articles/9628065287965-Calendar-integration" + href={Config.getConfig().URL.SUPPORT.OAUTH_LEARN_MORE} > {chunks} @@ -193,13 +203,13 @@ const OAuthPermissionsComponent = ({ )} - + {_(oauthStrings.details)} -
+
+ + )} + + {isDone && ( + <> +
+

+ {t('backupExportSuccessHeadline')} +

+ +

+ {t('backupExportSuccessSecondary')} +

+ +
+ +
+
+ + + + )} + + {hasError && ( +
+

+ {t('backupExportGenericErrorHeadline')} +

+ +

+ {t('backupExportGenericErrorSecondary')} +

+ +
+ + + +
+
+ )} +
+ ); +}; + +export {HistoryExport}; diff --git a/src/script/components/HistoryExport/index.tsx b/src/script/components/HistoryExport/index.tsx index 3865dead450..31f58503b4f 100644 --- a/src/script/components/HistoryExport/index.tsx +++ b/src/script/components/HistoryExport/index.tsx @@ -1,6 +1,6 @@ /* * Wire - * Copyright (C) 2022 Wire Swiss GmbH + * Copyright (C) 2023 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,221 +17,4 @@ * */ -import {FC, useContext, useEffect, useState} from 'react'; - -import {container} from 'tsyringe'; - -import {LoadingBar} from 'Components/LoadingBar/LoadingBar'; -import {ClientState} from 'src/script/client/ClientState'; -import {User} from 'src/script/entity/User'; -import {ContentState} from 'src/script/page/useAppState'; -import {t} from 'Util/LocalizerUtil'; -import {getLogger} from 'Util/Logger'; -import {getCurrentDate} from 'Util/TimeUtil'; -import {downloadBlob} from 'Util/util'; - -import {CancelError} from '../../backup/Error'; -import {Config} from '../../Config'; -import {RootContext} from '../../page/RootProvider'; - -enum ExportState { - COMPRESSING = 'ExportState.STATE.COMPRESSING', - DONE = 'ExportState.STATE.DONE', - EXPORTING = 'ExportState.STATE.EXPORTING', - PREPARING = 'ExportState.STATE.PREPARING', -} - -export const CONFIG = { - FILE_EXTENSION: 'desktop_wbu', -}; - -interface HistoryExportProps { - switchContent: (contentState: ContentState) => void; - readonly user: User; - readonly clientState?: ClientState; -} - -const HistoryExport: FC = ({switchContent, user, clientState = container.resolve(ClientState)}) => { - const logger = getLogger('HistoryExport'); - - const [historyState, setHistoryState] = useState(ExportState.PREPARING); - const [hasError, setHasError] = useState(false); - - const [numberOfRecords, setNumberOfRecords] = useState(0); - const [numberOfProcessedRecords, setNumberOfProcessedRecords] = useState(0); - - const [archiveBlob, setArchiveBlob] = useState(null); - - const mainViewModel = useContext(RootContext); - - useEffect(() => { - exportHistory(); - }, []); - - if (!mainViewModel) { - return null; - } - - const {content: contentViewModel} = mainViewModel; - const backupRepository = contentViewModel.repositories.backup; - - const loadingProgress = Math.floor((numberOfProcessedRecords / numberOfRecords) * 100); - - const isPreparing = !hasError && historyState === ExportState.PREPARING; - const isExporting = !hasError && [ExportState.EXPORTING, ExportState.COMPRESSING].includes(historyState); - const isDone = !hasError && historyState === ExportState.DONE; - - const replacements = { - processed: numberOfProcessedRecords.toString(), - progress: loadingProgress.toString(), - total: numberOfRecords.toString(), - }; - - const historyMessages: Partial> = { - [ExportState.PREPARING]: t('backupExportProgressHeadline'), - [ExportState.EXPORTING]: t('backupExportProgressSecondary', replacements), - [ExportState.COMPRESSING]: t('backupExportProgressCompressing'), - }; - - const loadingMessage = historyMessages?.[historyState] || ''; - - const dismissExport = () => { - switchContent(ContentState.PREFERENCES_ACCOUNT); - }; - - const onProgress = (processedNumber: number) => { - setHistoryState(ExportState.EXPORTING); - setNumberOfProcessedRecords(prevState => prevState + processedNumber); - }; - - const onSuccess = (archiveBlob: Blob) => { - setHistoryState(ExportState.DONE); - setHasError(false); - setArchiveBlob(archiveBlob); - }; - - const onError = (error: Error) => { - if (error instanceof CancelError) { - logger.log('History export was cancelled'); - dismissExport(); - - return; - } - - setHasError(true); - logger.error(`Failed to export history: ${error.message}`, error); - }; - - const downloadArchiveFile = () => { - const userName = user.username(); - const fileExtension = CONFIG.FILE_EXTENSION; - const sanitizedBrandName = Config.getConfig().BRAND_NAME.replace(/[^A-Za-z0-9_]/g, ''); - const filename = `${sanitizedBrandName}-${userName}-Backup_${getCurrentDate()}.${fileExtension}`; - - dismissExport(); - - if (archiveBlob) { - downloadBlob(archiveBlob, filename, 'application/octet-stream'); - } - }; - - const onCancel = () => backupRepository.cancelAction(); - - const exportHistory = async () => { - setHistoryState(ExportState.PREPARING); - setHasError(false); - - try { - const numberOfRecords = await backupRepository.getBackupInitData(); - logger.log(`Exporting '${numberOfRecords}' records from history`); - - setNumberOfRecords(numberOfRecords); - setNumberOfProcessedRecords(0); - - const archiveBlob = await backupRepository.generateHistory(user, clientState.currentClient().id, onProgress); - - onSuccess(archiveBlob); - logger.log(`Completed export of '${numberOfRecords}' records from history`); - } catch (error) { - onError(error as Error); - } - }; - - return ( -
- {isPreparing && } - - {isExporting && ( - <> - - - - - )} - - {isDone && ( - <> -
-

- {t('backupExportSuccessHeadline')} -

- -

- {t('backupExportSuccessSecondary')} -

- -
- -
-
- - - - )} - - {hasError && ( -
-

- {t('backupExportGenericErrorHeadline')} -

- -

- {t('backupExportGenericErrorSecondary')} -

- -
- - - -
-
- )} -
- ); -}; - -export {HistoryExport}; +export * from './HistoryExport'; diff --git a/src/script/components/HistoryImport/BackupFileUpload.tsx b/src/script/components/HistoryImport/BackupFileUpload.tsx new file mode 100644 index 00000000000..ba69d806e22 --- /dev/null +++ b/src/script/components/HistoryImport/BackupFileUpload.tsx @@ -0,0 +1,77 @@ +/* + * Wire + * Copyright (C) 2023 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {useRef} from 'react'; + +import {TabIndex} from '@wireapp/react-ui-kit/lib/types/enums'; + +import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; + +import {CONFIG as HistoryExportConfig} from 'Components/HistoryExport'; +import {handleKeyDown} from 'Util/KeyboardUtil'; + +interface BackupFileUploadProps { + onFileChange: (event: React.ChangeEvent) => void; + backupImportHeadLine: string; + variant: ButtonVariant; + cssClassName?: string; +} + +const BackupFileUpload = ({ + onFileChange, + backupImportHeadLine, + variant, + cssClassName = 'button button-secondary', +}: BackupFileUploadProps) => { + const fileInputRef = useRef(null); + + const fileInputClick = () => fileInputRef.current?.click(); + + return ( + <> + + + + + ); +}; + +export {BackupFileUpload}; diff --git a/src/script/components/HistoryImport/HistoryImport.tsx b/src/script/components/HistoryImport/HistoryImport.tsx new file mode 100644 index 00000000000..1e32ead0480 --- /dev/null +++ b/src/script/components/HistoryImport/HistoryImport.tsx @@ -0,0 +1,271 @@ +/* + * Wire + * Copyright (C) 2022 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {useEffect, useState} from 'react'; + +import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; + +import {Icon} from 'Components/Icon'; +import {LoadingBar} from 'Components/LoadingBar/LoadingBar'; +import {PrimaryModal} from 'Components/Modals/PrimaryModal'; +import {User} from 'src/script/entity/User'; +import {ContentState} from 'src/script/page/useAppState'; +import {checkBackupEncryption} from 'Util/BackupUtil'; +import {t} from 'Util/LocalizerUtil'; +import {getLogger} from 'Util/Logger'; +import {loadFileBuffer} from 'Util/util'; + +import {BackupFileUpload} from './BackupFileUpload'; + +import {BackupRepository} from '../../backup/BackupRepository'; +import { + CancelError, + DifferentAccountError, + IncompatibleBackupError, + IncompatibleBackupFormatError, + InvalidPassword, +} from '../../backup/Error'; +import {Config} from '../../Config'; +import {MotionDuration} from '../../motion/MotionDuration'; + +export enum HistoryImportState { + DONE = 'HistoryImportState.STATE.DONE', + IMPORTING = 'HistoryImportState.STATE.IMPORTING', + PREPARING = 'HistoryImportState.STATE.PREPARING', +} + +interface HistoryImportProps { + readonly backupRepository: BackupRepository; + file: File; + switchContent: (contentState: ContentState) => void; + user: User; +} + +const HistoryImport = ({user, backupRepository, file, switchContent}: HistoryImportProps) => { + const logger = getLogger('HistoryImportViewModel'); + + const [historyImportState, setHistoryImportState] = useState(HistoryImportState.PREPARING); + const [error, setError] = useState(null); + const [errorHeadline, setErrorHeadline] = useState(''); + const [errorSecondary, setErrorSecondary] = useState(''); + + const [numberOfRecords, setNumberOfRecords] = useState(0); + const [numberOfProcessedRecords, setNumberOfProcessedRecords] = useState(0); + const loadingProgress = Math.floor((numberOfProcessedRecords / numberOfRecords) * 100); + + const isPreparing = !error && historyImportState === HistoryImportState.PREPARING; + const isImporting = !error && historyImportState === HistoryImportState.IMPORTING; + const isDone = !error && historyImportState === HistoryImportState.DONE; + + const replacements = { + processed: numberOfProcessedRecords.toString(), + progress: loadingProgress.toString(), + total: numberOfRecords.toString(), + }; + + const historyImportMessages: Partial> = { + [HistoryImportState.PREPARING]: t('backupImportProgressHeadline'), + [HistoryImportState.IMPORTING]: t('backupImportProgressSecondary', replacements), + }; + + const loadingMessage = historyImportMessages?.[historyImportState] || ''; + + const onCancel = () => backupRepository.cancelAction(); + + const dismissImport = () => { + switchContent(ContentState.PREFERENCES_ACCOUNT); + }; + + const onInit = (numberOfRecords: number) => { + setHistoryImportState(HistoryImportState.IMPORTING); + setNumberOfRecords(numberOfRecords); + setNumberOfProcessedRecords(0); + }; + + const onProgress = (numberProcessed: number) => setNumberOfProcessedRecords(prevState => prevState + numberProcessed); + + const onSuccess = (): void => { + setError(null); + setHistoryImportState(HistoryImportState.DONE); + + window.setTimeout(dismissImport, MotionDuration.X_LONG * 2); + }; + + const onError = (error: Error) => { + if (error instanceof CancelError) { + logger.log('History import was cancelled'); + dismissImport(); + + return; + } + + setError(error); + logger.error(`Failed to import history: ${error.message}`, error); + + if (error instanceof DifferentAccountError) { + setErrorHeadline(t('backupImportAccountErrorHeadline')); + setErrorSecondary(t('backupImportAccountErrorSecondary')); + } else if (error instanceof IncompatibleBackupError) { + setErrorHeadline(t('backupImportVersionErrorHeadline')); + setErrorSecondary(t('backupImportVersionErrorSecondary', Config.getConfig().BRAND_NAME)); + } else if (error instanceof IncompatibleBackupFormatError) { + setErrorHeadline(t('backupImportFormatErrorHeadline')); + setErrorSecondary(t('backupImportFormatErrorSecondary')); + } else if (error instanceof InvalidPassword) { + setErrorHeadline(t('backupImportPasswordErrorHeadline')); + setErrorSecondary(t('backupImportPasswordErrorSecondary')); + } else { + setErrorHeadline(t('backupImportGenericErrorHeadline')); + setErrorSecondary(t('backupImportGenericErrorSecondary')); + } + }; + + const getBackUpPassword = (): Promise => { + return new Promise(resolve => { + PrimaryModal.show(PrimaryModal.type.PASSWORD_ADVANCED_SECURITY, { + primaryAction: { + action: async (password: string) => { + resolve(password); + }, + text: t('backupDecryptionModalAction'), + }, + secondaryAction: [ + { + action: () => { + resolve(''); + dismissImport(); + }, + text: t('backupEncryptionModalCloseBtn'), + }, + ], + passwordOptional: false, + text: { + closeBtnLabel: t('backupEncryptionModalCloseBtn'), + input: t('backupDecryptionModalPlaceholder'), + message: t('backupDecryptionModalMessage'), + title: t('backupDecryptionModalTitle'), + }, + }); + }); + }; + + const importHistory = async (file: File) => { + const isEncrypted = await checkBackupEncryption(file); + + if (isEncrypted) { + const password = await getBackUpPassword(); + + if (password) { + await processHistoryImport(file, password); + } + } else { + await processHistoryImport(file); + } + }; + + const processHistoryImport = async (file: File, password?: string) => { + setHistoryImportState(HistoryImportState.PREPARING); + setError(null); + + const data = await loadFileBuffer(file); + + try { + await backupRepository.importHistory(user, data, onInit, onProgress, password); + onSuccess(); + } catch (error) { + onError(error as Error); + } + }; + + useEffect(() => { + importHistory(file); + }, []); + + const handleFileChange = async (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; + if (file) { + setError(null); + await importHistory(file); + } + }; + + return ( +
+

{t('accessibility.headings.historyImport')}

+ +
+ {isPreparing && } + + {isImporting && ( + <> + + + + + )} + + {isDone && ( +
+ +

+ {t('backupImportSuccessHeadline')} +

+
+ )} + + {error && ( +
+

+ {errorHeadline} +

+ +

+ {errorSecondary} +

+ +
+ + +
+
+ )} +
+
+ ); +}; + +export {HistoryImport}; diff --git a/src/script/components/HistoryImport/index.tsx b/src/script/components/HistoryImport/index.tsx index 37d1e823d94..bb683232cc1 100644 --- a/src/script/components/HistoryImport/index.tsx +++ b/src/script/components/HistoryImport/index.tsx @@ -1,6 +1,6 @@ /* * Wire - * Copyright (C) 2022 Wire Swiss GmbH + * Copyright (C) 2023 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,176 +17,4 @@ * */ -import {FC, useEffect, useState} from 'react'; - -import {Icon} from 'Components/Icon'; -import {LoadingBar} from 'Components/LoadingBar/LoadingBar'; -import {User} from 'src/script/entity/User'; -import {ContentState} from 'src/script/page/useAppState'; -import {t} from 'Util/LocalizerUtil'; -import {getLogger} from 'Util/Logger'; -import {loadFileBuffer} from 'Util/util'; - -import {BackupRepository} from '../../backup/BackupRepository'; -import {CancelError, DifferentAccountError, IncompatibleBackupError} from '../../backup/Error'; -import {Config} from '../../Config'; -import {MotionDuration} from '../../motion/MotionDuration'; - -export enum HistoryImportState { - DONE = 'HistoryImportState.STATE.DONE', - IMPORTING = 'HistoryImportState.STATE.IMPORTING', - PREPARING = 'HistoryImportState.STATE.PREPARING', -} - -interface HistoryImportProps { - readonly backupRepository: BackupRepository; - file: File; - switchContent: (contentState: ContentState) => void; - user: User; -} - -const HistoryImport: FC = ({user, backupRepository, file, switchContent}) => { - const logger = getLogger('HistoryImportViewModel'); - - const [historyImportState, setHistoryImportState] = useState(HistoryImportState.PREPARING); - const [error, setError] = useState(null); - const [errorHeadline, setErrorHeadline] = useState(''); - const [errorSecondary, setErrorSecondary] = useState(''); - - const [numberOfRecords, setNumberOfRecords] = useState(0); - const [numberOfProcessedRecords, setNumberOfProcessedRecords] = useState(0); - const loadingProgress = Math.floor((numberOfProcessedRecords / numberOfRecords) * 100); - - const isPreparing = !error && historyImportState === HistoryImportState.PREPARING; - const isImporting = !error && historyImportState === HistoryImportState.IMPORTING; - const isDone = !error && historyImportState === HistoryImportState.DONE; - - const replacements = { - processed: numberOfProcessedRecords.toString(), - progress: loadingProgress.toString(), - total: numberOfRecords.toString(), - }; - - const historyImportMessages: Partial> = { - [HistoryImportState.PREPARING]: t('backupImportProgressHeadline'), - [HistoryImportState.IMPORTING]: t('backupImportProgressSecondary', replacements), - }; - - const loadingMessage = historyImportMessages?.[historyImportState] || ''; - - const onCancel = () => backupRepository.cancelAction(); - - const dismissImport = () => { - switchContent(ContentState.PREFERENCES_ACCOUNT); - }; - - const onInit = (numberOfRecords: number) => { - setHistoryImportState(HistoryImportState.IMPORTING); - setNumberOfRecords(numberOfRecords); - setNumberOfProcessedRecords(0); - }; - - const onProgress = (numberProcessed: number) => setNumberOfProcessedRecords(prevState => prevState + numberProcessed); - - const onSuccess = (): void => { - setError(null); - setHistoryImportState(HistoryImportState.DONE); - - window.setTimeout(dismissImport, MotionDuration.X_LONG * 2); - }; - - const onError = (error: Error) => { - if (error instanceof CancelError) { - logger.log('History import was cancelled'); - dismissImport(); - - return; - } - - setError(error); - logger.error(`Failed to import history: ${error.message}`, error); - - if (error instanceof DifferentAccountError) { - setErrorHeadline(t('backupImportAccountErrorHeadline')); - setErrorSecondary(t('backupImportAccountErrorSecondary')); - } else if (error instanceof IncompatibleBackupError) { - setErrorHeadline(t('backupImportVersionErrorHeadline')); - setErrorSecondary(t('backupImportVersionErrorSecondary', Config.getConfig().BRAND_NAME)); - } else { - setErrorHeadline(t('backupImportGenericErrorHeadline')); - setErrorSecondary(t('backupImportGenericErrorSecondary')); - } - }; - - const importHistory = async (file: File) => { - setHistoryImportState(HistoryImportState.PREPARING); - setError(null); - - const data = await loadFileBuffer(file); - - try { - await backupRepository.importHistory(user, data, onInit, onProgress); - onSuccess(); - } catch (error) { - onError(error as Error); - } - }; - - useEffect(() => { - importHistory(file); - }, []); - - return ( -
-

{t('accessibility.headings.historyImport')}

- -
- {isPreparing && } - - {isImporting && ( - <> - - - - - )} - - {isDone && ( -
- -

- {t('backupImportSuccessHeadline')} -

-
- )} - - {error && ( -
-

- {errorHeadline} -

- -

- {errorSecondary} -

- -
- -
-
- )} -
-
- ); -}; - -export {HistoryImport}; +export * from './HistoryImport'; diff --git a/src/script/components/InputBar/InputBar.test.tsx b/src/script/components/InputBar/InputBar.test.tsx index b7cab7a0198..bf245ded4b5 100644 --- a/src/script/components/InputBar/InputBar.test.tsx +++ b/src/script/components/InputBar/InputBar.test.tsx @@ -24,7 +24,6 @@ import {withTheme} from 'src/script/auth/util/test/TestUtil'; import {Config} from 'src/script/Config'; import {PropertiesService} from 'src/script/properties/PropertiesService'; import {SelfService} from 'src/script/self/SelfService'; -import {createMentionEntity, getMentionCandidate} from 'Util/MentionUtil'; import {createUuid} from 'Util/uuid'; import {TestFactory} from '../../../../test/helper/TestFactory'; @@ -46,18 +45,18 @@ let eventRepository: EventRepository; let searchRepository: SearchRepository; let storageRepository: StorageRepository; -beforeAll(() => { - testFactory.exposeEventActors().then(factory => { +beforeAll(async () => { + await testFactory.exposeEventActors().then(factory => { eventRepository = factory; return eventRepository; }); - testFactory.exposeSearchActors().then(factory => { + await testFactory.exposeSearchActors().then(factory => { searchRepository = factory; return searchRepository; }); - testFactory.exposeStorageActors().then(factory => { + await testFactory.exposeStorageActors().then(factory => { storageRepository = factory; return storageRepository; }); @@ -73,7 +72,7 @@ describe('InputBar', () => { const getDefaultProps = () => ({ assetRepository: new AssetRepository(new AssetService()), - conversationEntity: new Conversation(createUuid()), + conversation: new Conversation(createUuid()), conversationRepository: { sendTypingStart: jest.fn(), sendTypingStop: jest.fn(), @@ -102,35 +101,38 @@ describe('InputBar', () => { jest.clearAllMocks(); }); - const testMessage = 'Write custom text message'; + const testMessage = 'text'; const pngFile = new File(['(⌐□_□)'], 'wire-example-image.png', {type: 'image/png'}); it('has passed value', async () => { - const promise = Promise.resolve(); const props = getDefaultProps(); const {getByTestId} = render(withTheme()); - await promise; - const textArea = getByTestId('input-message'); + await new Promise(resolve => setTimeout(resolve)); + const inputBar = getByTestId('input-message'); - expect(textArea).not.toBeNull(); - fireEvent.change(textArea!, {target: {value: testMessage}}); + expect(inputBar).not.toBeNull(); - await waitFor(() => { - expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); + await act(async () => { + fireEvent.input(inputBar, {data: testMessage}); }); + + expect(inputBar.textContent).toBe(testMessage); }); - it('typing request is sent if the typing indicator mode is enabled and user is typing', async () => { + it.skip('typing request is sent if the typing indicator mode is enabled and user is typing', async () => { const props = getDefaultProps(); - const {getByTestId} = render(withTheme()); - const textArea = getByTestId('input-message'); + const {getByTestId, container} = render(withTheme()); + const inputBar = getByTestId('input-message'); - expect(textArea).not.toBeNull(); - fireEvent.change(textArea!, {target: {value: testMessage}}); + fireEvent.keyDown(container, {key: 'Enter', code: 'Enter'}); + act(() => { + fireEvent.input(inputBar, {data: testMessage}); + fireEvent.keyPress(inputBar, {key: 'Enter', code: 'Enter'}); + }); await waitFor(() => { - expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); + expect(inputBar.textContent).toBe(testMessage); }); const property = PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE; @@ -143,7 +145,7 @@ describe('InputBar', () => { it('typing request is not sent when user is typing but the typing indicator mode is disabled', async () => { const props = getDefaultProps(); const {getByTestId} = render(withTheme()); - const textArea = getByTestId('input-message'); + const inputBar = getByTestId('input-message'); const property = PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE; const defaultValue = property.defaultValue; @@ -152,11 +154,13 @@ describe('InputBar', () => { }); expect(propertiesRepository.typingIndicatorMode()).not.toBe(defaultValue); - expect(textArea).not.toBeNull(); - fireEvent.change(textArea!, {target: {value: testMessage}}); + await new Promise(resolve => setTimeout(resolve)); + await act(async () => { + fireEvent.input(inputBar, {data: testMessage}); + }); await waitFor(() => { - expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); + expect(inputBar.textContent).toBe(testMessage); }); expect(props.conversationRepository.sendTypingStart).not.toHaveBeenCalled(); expect(props.conversationRepository.sendTypingStop).not.toHaveBeenCalled(); @@ -165,14 +169,15 @@ describe('InputBar', () => { it('has pasted image', async () => { const promise = Promise.resolve(); const props = getDefaultProps(); - const {container} = render(withTheme()); + const {getByTestId, queryByTestId} = render(withTheme()); await promise; - const textArea = await container.querySelector('textarea[data-uie-name="input-message"]'); + const textArea = getByTestId('input-message'); expect(textArea).not.toBeNull(); + expect(queryByTestId('pasted-file-controls')).toBeNull(); - fireEvent.paste(textArea!, { + fireEvent.paste(document, { clipboardData: { files: [pngFile], types: ['image/png'], @@ -180,25 +185,8 @@ describe('InputBar', () => { }); await waitFor(() => { - const pastedFileControls = container.querySelector('[data-uie-name="pasted-file-controls"]'); + const pastedFileControls = getByTestId('pasted-file-controls'); expect(pastedFileControls).toBeDefined(); }); }); - - it('matches multibyte characters in mentioned user names', () => { - const selectionStart = 5; - const selectionEnd = 5; - const inputValue = 'Hi @p'; - const userName = 'rzemvs'; - - const mentionCandidate = getMentionCandidate([], selectionStart, selectionEnd, inputValue); - - const userEntity = new User(createUuid()); - userEntity.name(userName); - - const mentionEntity = createMentionEntity(userEntity, mentionCandidate); - - expect(mentionEntity?.startIndex).toBe(3); - expect(mentionEntity?.length).toBe(7); - }); }); diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 1656ead6068..14b5c8cdbc1 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -17,10 +17,11 @@ * */ -import {ChangeEvent, FormEvent, KeyboardEvent as ReactKeyboardEvent, useEffect, useRef, useState} from 'react'; +import {useCallback, useEffect, useRef, useState} from 'react'; import {amplify} from 'amplify'; import cx from 'classnames'; +import {CLEAR_EDITOR_COMMAND, LexicalEditor} from 'lexical'; import {container} from 'tsyringe'; import {useMatchMedia} from '@wireapp/react-ui-kit'; @@ -28,45 +29,36 @@ import {WebAppEvents} from '@wireapp/webapp-events'; import {Avatar, AVATAR_SIZE} from 'Components/Avatar'; import {checkFileSharingPermission} from 'Components/Conversation/utils/checkFileSharingPermission'; -import {useEmoji} from 'Components/Emoji/useEmoji'; -import {Icon} from 'Components/Icon'; -import {ClassifiedBar} from 'Components/input/ClassifiedBar'; +import {ConversationClassifiedBar} from 'Components/input/ClassifiedBar'; +import {PrimaryModal} from 'Components/Modals/PrimaryModal'; import {showWarningModal} from 'Components/Modals/utils/showWarningModal'; +import {RichTextContent, RichTextEditor} from 'Components/RichTextEditor'; +import {SendMessageButton} from 'Components/RichTextEditor/components/SendMessageButton'; import {ConversationRepository} from 'src/script/conversation/ConversationRepository'; +import {useUserPropertyValue} from 'src/script/hooks/useUserProperty'; import {PropertiesRepository} from 'src/script/properties/PropertiesRepository'; +import {PROPERTIES_TYPE} from 'src/script/properties/PropertiesType'; import {CONVERSATION_TYPING_INDICATOR_MODE} from 'src/script/user/TypingIndicatorMode'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {loadDraftState, saveDraftState} from 'Util/DraftStateUtil'; -import {insertAtCaret, isFunctionKey, isTabKey, KEY} from 'Util/KeyboardUtil'; +import {KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; -import { - createMentionEntity, - detectMentionEdgeDeletion, - getMentionCandidate, - updateMentionRanges, -} from 'Util/MentionUtil'; -import {formatDuration, formatLocale, TIME_IN_MILLIS} from 'Util/TimeUtil'; -import {getFileExtension, getSelectionPosition} from 'Util/util'; +import {formatLocale, TIME_IN_MILLIS} from 'Util/TimeUtil'; +import {getFileExtension} from 'Util/util'; import {ControlButtons} from './components/InputBarControls/ControlButtons'; import {GiphyButton} from './components/InputBarControls/GiphyButton'; -import {MentionSuggestionList} from './components/MentionSuggestions'; import {PastedFileControls} from './components/PastedFileControls'; import {ReplyBar} from './components/ReplyBar'; -import {TYPING_TIMEOUT} from './components/TypingIndicator'; import {TypingIndicator} from './components/TypingIndicator/TypingIndicator'; -import {getRichTextInput} from './getRichTextInput'; import {useFilePaste} from './hooks/useFilePaste'; -import {useResizeTarget} from './hooks/useResizeTarget'; -import {useScrollSync} from './hooks/useScrollSync'; -import {useTextAreaFocus} from './hooks/useTextAreaFocus'; +import {useTypingIndicator} from './hooks/useTypingIndicator'; import {handleClickOutsideOfInputBar, IgnoreOutsideClickWrapper} from './util/clickHandlers'; +import {loadDraftState, saveDraftState} from './util/DraftStateUtil'; import {Config} from '../../Config'; import {MessageRepository, OutgoingQuote} from '../../conversation/MessageRepository'; import {Conversation} from '../../entity/Conversation'; import {ContentMessage} from '../../entity/message/ContentMessage'; -import {Text as TextAsset} from '../../entity/message/Text'; import {User} from '../../entity/User'; import {ConversationError} from '../../error/ConversationError'; import {EventRepository} from '../../event/EventRepository'; @@ -83,8 +75,12 @@ const CONFIG = { PING_TIMEOUT: TIME_IN_MILLIS.SECOND * 2, }; +const config = { + GIPHY_TEXT_LENGTH: 256, +}; + interface InputBarProps { - readonly conversationEntity: Conversation; + readonly conversation: Conversation; readonly conversationRepository: ConversationRepository; readonly eventRepository: EventRepository; readonly messageRepository: MessageRepository; @@ -102,8 +98,8 @@ interface InputBarProps { const conversationInputBarClassName = 'conversation-input-bar'; -const InputBar = ({ - conversationEntity, +export const InputBar = ({ + conversation, conversationRepository, eventRepository, messageRepository, @@ -124,17 +120,13 @@ const InputBar = ({ ); const { connection, - participating_user_ets: participatingUserEts, - allUserEntities: allUsers, localMessageTimer, messageTimer, hasGlobalMessageTimer, removed_from_conversation: removedFromConversation, - } = useKoSubscribableChildren(conversationEntity, [ + is1to1, + } = useKoSubscribableChildren(conversation, [ 'connection', - 'firstUserEntity', - 'allUserEntities', - 'participating_user_ets', 'localMessageTimer', 'messageTimer', 'hasGlobalMessageTimer', @@ -146,23 +138,27 @@ const InputBar = ({ 'isIncomingRequest', ]); + // Lexical + const editorRef = useRef(null); + + // Typing indicator const {typingIndicatorMode} = useKoSubscribableChildren(propertiesRepository, ['typingIndicatorMode']); const isTypingIndicatorEnabled = typingIndicatorMode === CONVERSATION_TYPING_INDICATOR_MODE.ON; - const shadowInputRef = useRef(null); - const textareaRef = useRef(null); - const [editMessageEntity, setEditMessageEntity] = useState(null); + // Message + /** the messageContent represents the message being edited. It's directly derived from the editor state */ + const [messageContent, setMessageContent] = useState({text: ''}); + const [editedMessage, setEditedMessage] = useState(); const [replyMessageEntity, setReplyMessageEntity] = useState(null); - const [currentMentions, setCurrentMentions] = useState([]); + const textValue = messageContent.text; + + // Files const [pastedFile, setPastedFile] = useState(null); - const [inputValue, setInputValue] = useState(''); - const [selectionStart, setSelectionStart] = useState(0); - const [selectionEnd, setSelectionEnd] = useState(0); + + // Common const [pingDisabled, setIsPingDisabled] = useState(false); - const [isTyping, setIsTyping] = useState(false); - const hasUserTyped = useRef(false); - const [editedMention, setEditedMention] = useState<{startIndex: number; term: string} | undefined>(undefined); + // Right sidebar const {rightSidebar} = useAppMainState.getState(); const lastItem = rightSidebar.history.length - 1; const currentState = rightSidebar.history[lastItem]; @@ -170,60 +166,45 @@ const InputBar = ({ const inputPlaceholder = messageTimer ? t('tooltipConversationEphemeral') : t('tooltipConversationInputPlaceholder'); - const candidates = participatingUserEts.filter(userEntity => !userEntity.isService); - const mentionSuggestions = editedMention ? searchRepository.searchUserInSet(editedMention.term, candidates) : []; - - const isEditing = !!editMessageEntity; + const isEditing = !!editedMessage; const isReplying = !!replyMessageEntity; const isConnectionRequest = isOutgoingRequest || isIncomingRequest; - const hasLocalEphemeralTimer = isSelfDeletingMessagesEnabled && localMessageTimer && !hasGlobalMessageTimer; - - const richTextInput = getRichTextInput(currentMentions, inputValue); + const hasLocalEphemeralTimer = isSelfDeletingMessagesEnabled && !!localMessageTimer && !hasGlobalMessageTimer; // To be changed when design chooses a breakpoint, the conditional can be integrated to the ui-kit directly const isScaledDown = useMatchMedia('max-width: 768px'); - const config = { - GIPHY_TEXT_LENGTH: 256, - }; + const showGiphyButton = textValue.length > 0 && textValue.length <= config.GIPHY_TEXT_LENGTH; - const showGiphyButton = inputValue.length > 0 && inputValue.length <= config.GIPHY_TEXT_LENGTH; - - const updateSelectionState = (updateOnInit = true) => { - if (!updateOnInit) { - return; - } - - if (!textareaRef.current) { - return; - } - - const {selectionStart: start, selectionEnd: end} = textareaRef.current; - const {newEnd, newStart} = getSelectionPosition(textareaRef.current, currentMentions); - - if (newStart !== start || newEnd !== end) { - textareaRef.current.selectionStart = newStart; - textareaRef.current.selectionEnd = newEnd; - } - - setSelectionStart(newStart); - setSelectionEnd(newEnd); - }; + const shouldReplaceEmoji = useUserPropertyValue( + () => propertiesRepository.getPreference(PROPERTIES_TYPE.EMOJI.REPLACE_INLINE), + WebAppEvents.PROPERTIES.UPDATE.EMOJI.REPLACE_INLINE, + ); - const moveCursorToEnd = (endPosition: number, updateSelection = true) => { - updateSelectionState(updateSelection); - setTimeout(() => { - textareaRef.current?.setSelectionRange(endPosition, endPosition); - textareaRef.current?.focus(); - }, 0); + // Mentions + const getMentionCandidates = (search?: string | null) => { + const candidates = conversation.participating_user_ets().filter(userEntity => !userEntity.isService); + return typeof search === 'string' ? searchRepository.searchUserInSet(search, candidates) : candidates; }; - const resetDraftState = (resetInputValue = false) => { - setCurrentMentions([]); + useTypingIndicator({ + isEnabled: isTypingIndicatorEnabled, + text: textValue, + onTypingChange: useCallback( + isTyping => { + if (isTyping) { + void conversationRepository.sendTypingStart(conversation); + } else { + void conversationRepository.sendTypingStop(conversation); + } + }, + [conversationRepository, conversation], + ), + }); - if (resetInputValue) { - setInputValue(''); - } + const resetDraftState = () => { + setReplyMessageEntity(null); + editorRef.current?.dispatchCommand(CLEAR_EDITOR_COMMAND, undefined); }; const clearPastedFile = () => setPastedFile(null); @@ -235,56 +216,6 @@ const InputBar = ({ } }; - const endMentionFlow = () => { - setEditedMention(undefined); - updateSelectionState(); - }; - - const addMention = (userEntity: User) => { - const mentionEntity = createMentionEntity(userEntity, editedMention); - - if (mentionEntity && editedMention) { - // keep track of what is before and after the mention being edited - const beforeMentionPartial = inputValue.slice(0, mentionEntity.startIndex); - const afterMentionPartial = inputValue - .slice(mentionEntity.startIndex + editedMention.term.length + 1) - .replace(/^ /, ''); - - const newInputValue = `${beforeMentionPartial}@${userEntity.name()} ${afterMentionPartial}`; - // insert the mention in between - setInputValue(newInputValue); - - const currentValueLength = newInputValue.length; - const inputValueLength = inputValue.length; - const difference = currentValueLength - inputValueLength; - - const updatedMentions = updateMentionRanges(currentMentions, selectionStart, selectionEnd, difference); - const newMentions = [...updatedMentions, mentionEntity]; - const sortedMentions = newMentions.sort((mentionA, mentionB) => mentionA.startIndex - mentionB.startIndex); - setCurrentMentions(sortedMentions); - - const caretPosition = mentionEntity.endIndex + 1; - - setEditedMention(undefined); - setSelectionStart(caretPosition); - setSelectionEnd(caretPosition); - - // Need to use setTimeout, because the setSelectionRange works asynchronously - setTimeout(() => { - textareaRef.current?.setSelectionRange(caretPosition, caretPosition); - textareaRef.current?.focus(); - }, 0); - } - }; - - const handleMentionFlow = (event: ReactKeyboardEvent | FormEvent) => { - const {selectionStart: start, selectionEnd: end, value} = event.currentTarget; - const mentionCandidate = getMentionCandidate(currentMentions, start, end, value); - - setEditedMention(mentionCandidate); - updateSelectionState(); - }; - const cancelMessageReply = (resetDraft = true) => { setReplyMessageEntity(null); @@ -293,181 +224,53 @@ const InputBar = ({ } }; - const cancelMessageEditing = (resetDraft = true, resetInputValue = false) => { - setEditMessageEntity(null); + useEffect(() => { + amplify.subscribe(WebAppEvents.CONVERSATION.MESSAGE.EDIT, (messageEntity: ContentMessage) => { + editMessage(messageEntity); + }); + + return () => { + amplify.unsubscribeAll(WebAppEvents.CONVERSATION.MESSAGE.EDIT); + }; + }); + + const cancelMessageEditing = (resetDraft = true) => { + setEditedMessage(undefined); setReplyMessageEntity(null); if (resetDraft) { - resetDraftState(resetInputValue); + resetDraftState(); } }; const handleCancelReply = () => { - if (!mentionSuggestions.length) { - cancelMessageReply(false); - } - - textareaRef.current?.focus(); + cancelMessageReply(false); }; - const editMessage = (messageEntity: ContentMessage) => { - if (messageEntity?.isEditable() && messageEntity !== editMessageEntity) { - const firstAsset = messageEntity.getFirstAsset() as TextAsset; - const newMentions = firstAsset.mentions().slice(); - + const editMessage = (messageEntity?: ContentMessage) => { + if (messageEntity?.isEditable() && messageEntity !== editedMessage) { cancelMessageReply(); - cancelMessageEditing(true, true); - setEditMessageEntity(messageEntity); - setInputValue(firstAsset.text); - setCurrentMentions(newMentions); - - if (messageEntity.quote() && conversationEntity) { - messageRepository - .getMessageInConversationById(conversationEntity, messageEntity.quote().messageId) + cancelMessageEditing(true); + setEditedMessage(messageEntity); + + if (messageEntity.quote() && conversation) { + void messageRepository + .getMessageInConversationById(conversation, messageEntity.quote().messageId) .then(quotedMessage => setReplyMessageEntity(quotedMessage)); } } }; - useEffect(() => { - if (editMessageEntity?.isEditable()) { - const firstAsset = editMessageEntity.getFirstAsset() as TextAsset; - moveCursorToEnd(firstAsset.text.length); - } - }, [editMessageEntity]); // eslint-disable-line react-hooks/exhaustive-deps - - useEffect(() => { - if (!hasUserTyped.current || !isTypingIndicatorEnabled) { - return; - } - if (isTyping) { - conversationRepository.sendTypingStart(conversationEntity); - } else { - conversationRepository.sendTypingStop(conversationEntity); - } - }, [isTyping, conversationRepository, conversationEntity, isTypingIndicatorEnabled]); - - useEffect(() => { - if (!hasUserTyped.current) { - return () => {}; - } - let timerId: number; - if (inputValue.length > 0) { - setIsTyping(true); - timerId = window.setTimeout(() => setIsTyping(false), TYPING_TIMEOUT); - } else { - setIsTyping(false); - } - return () => { - window.clearTimeout(timerId); - }; - }, [inputValue]); - const replyMessage = (messageEntity: ContentMessage): void => { if (messageEntity?.isReplyable() && messageEntity !== replyMessageEntity) { cancelMessageReply(false); - cancelMessageEditing(!!editMessageEntity); + cancelMessageEditing(!!editedMessage); setReplyMessageEntity(messageEntity); - textareaRef.current?.focus(); - } - }; - - const updateMentions = (event: ReactKeyboardEvent) => { - const textarea = event.currentTarget; - const value = textarea.value; - const lengthDifference = value.length - inputValue.length; - - const edgeMention = detectMentionEdgeDeletion( - textarea, - currentMentions, - selectionStart, - selectionEnd, - lengthDifference, - ); - - if (edgeMention) { - textarea.value = inputValue; - textarea.selectionStart = edgeMention.startIndex; - textarea.selectionEnd = edgeMention.endIndex; + editorRef.current?.focus(); } }; - const onTextAreaKeyDown = (keyboardEvent: ReactKeyboardEvent): void | boolean => { - const inputHandledByEmoji = !editedMention && emojiKeyDown(keyboardEvent); - // shift+tab from message input bar set last focused message's elements non focusable - if (keyboardEvent.shiftKey && isTabKey(keyboardEvent)) { - onShiftTab(); - } - if (!inputHandledByEmoji) { - switch (keyboardEvent.key) { - case KEY.ARROW_UP: { - if (!isFunctionKey(keyboardEvent) && !inputValue.length) { - editMessage(conversationEntity.getLastEditableMessage() as ContentMessage); - updateMentions(keyboardEvent); - } - break; - } - case KEY.ESC: { - if (mentionSuggestions.length) { - endMentionFlow(); - } else if (pastedFile) { - setPastedFile(null); - } else if (isEditing) { - cancelMessageEditing(true, true); - } else if (isReplying) { - cancelMessageReply(false); - } - break; - } - case KEY.ENTER: { - if (!keyboardEvent.shiftKey && !keyboardEvent.altKey && !keyboardEvent.metaKey) { - keyboardEvent.preventDefault(); - onSend(inputValue); - } - - if (keyboardEvent.altKey || keyboardEvent.metaKey) { - if (keyboardEvent.target) { - keyboardEvent.preventDefault(); - insertAtCaret(keyboardEvent.target.toString(), '\n'); - } - } - - break; - } - - default: - break; - } - - return true; - } - }; - - const onTextareaKeyUp = (keyboardEvent: ReactKeyboardEvent): void => { - if (!editedMention) { - emojiKeyUp(keyboardEvent); - } - - if (keyboardEvent.key !== KEY.ESC) { - handleMentionFlow(keyboardEvent); - } - }; - - const onChange = (event: ChangeEvent) => { - event.preventDefault(); - - const {value: currentValue} = event.currentTarget; - hasUserTyped.current = true; - setInputValue(currentValue); - const currentValueLength = currentValue.length; - const previousValueLength = inputValue.length; - const difference = currentValueLength - previousValueLength; - - const updatedMentions = updateMentionRanges(currentMentions, selectionStart, selectionEnd, difference); - setCurrentMentions(updatedMentions); - }; - const generateQuote = (): Promise => { return !replyMessageEntity ? Promise.resolve(undefined) @@ -483,48 +286,45 @@ const InputBar = ({ }); }; - const sendMessage = (messageText: string, mentions: MentionEntity[]) => { - if (messageText.length) { - const mentionEntities = mentions.slice(0); - - generateQuote().then(quoteEntity => { - messageRepository.sendTextWithLinkPreview(conversationEntity, messageText, mentionEntities, quoteEntity); - cancelMessageReply(); - }); - } - }; - const sendMessageEdit = (messageText: string, mentions: MentionEntity[]): void | Promise => { const mentionEntities = mentions.slice(0); - cancelMessageEditing(true, true); + cancelMessageEditing(true); - if (!messageText.length && editMessageEntity) { - return messageRepository.deleteMessageForEveryone(conversationEntity, editMessageEntity); + if (!messageText.length && editedMessage) { + return messageRepository.deleteMessageForEveryone(conversation, editedMessage); } - if (editMessageEntity) { - messageRepository - .sendMessageEdit(conversationEntity, messageText, editMessageEntity, mentionEntities) - .catch(error => { - if (error.type !== ConversationError.TYPE.NO_MESSAGE_CHANGES) { - throw error; - } - }); + if (editedMessage) { + messageRepository.sendMessageEdit(conversation, messageText, editedMessage, mentionEntities).catch(error => { + if (error.type !== ConversationError.TYPE.NO_MESSAGE_CHANGES) { + throw error; + } + }); cancelMessageReply(); } }; - const onSend = (text: string): void | boolean => { + const sendTextMessage = (messageText: string, mentions: MentionEntity[]) => { + if (messageText.length) { + const mentionEntities = mentions.slice(0); + + void generateQuote().then(quoteEntity => { + void messageRepository.sendTextWithLinkPreview(conversation, messageText, mentionEntities, quoteEntity); + cancelMessageReply(); + }); + } + }; + + const sendMessage = (): void => { if (pastedFile) { - return sendPastedFile(); + return void sendPastedFile(); } - const beforeLength = text.length; - const messageTrimmedStart = text.trimLeft(); - const trimmedStartLength = messageTrimmedStart.length; - const messageText = messageTrimmedStart.trimRight(); - const isMessageTextTooLong = messageText.length > CONFIG.MAXIMUM_MESSAGE_LENGTH; + const messageTrimmedStart = textValue.trimStart(); + const text = messageTrimmedStart.trimEnd(); + const isMessageTextTooLong = text.length > CONFIG.MAXIMUM_MESSAGE_LENGTH; + const mentions = messageContent.mentions ?? []; if (isMessageTextTooLong) { showWarningModal( @@ -535,48 +335,53 @@ const InputBar = ({ return; } - const updatedMentions = updateMentionRanges(currentMentions, 0, 0, trimmedStartLength - beforeLength); - if (isEditing) { - sendMessageEdit(messageText, updatedMentions); + void sendMessageEdit(text, mentions); } else { - sendMessage(messageText, updatedMentions); + sendTextMessage(text, mentions); } - /* - When trying to update a textarea with japanese value to - empty in onKeyDown handler the text is not fully cleared - and some parts of text is pasted by the OS/Browser after - we do setInputValue(''); - To fix this we have to add a setTimeout in order to postpone - the operation of clearing the text to after of the proccess - of the onKeyDown and onKeyUp DOM events. - */ - setTimeout(() => { - resetDraftState(true); - }, 0); - textareaRef.current?.focus(); + + editorRef.current?.focus(); + resetDraftState(); }; - const { - onInputKeyDown: emojiKeyDown, - onInputKeyUp: emojiKeyUp, - renderEmojiComponent, - } = useEmoji(propertiesRepository, setInputValue, onSend, currentMentions, setCurrentMentions, textareaRef.current); + const onGifClick = () => openGiphy(textValue); - const onGifClick = () => openGiphy(inputValue); + const pingConversation = () => { + setIsPingDisabled(true); + void messageRepository.sendPing(conversation).then(() => { + window.setTimeout(() => setIsPingDisabled(false), CONFIG.PING_TIMEOUT); + }); + }; const onPingClick = () => { - if (conversationEntity && !pingDisabled) { - setIsPingDisabled(true); + if (pingDisabled) { + return; + } - messageRepository.sendPing(conversationEntity).then(() => { - window.setTimeout(() => setIsPingDisabled(false), CONFIG.PING_TIMEOUT); + const totalConversationUsers = conversation.participating_user_ets().length; + if ( + !CONFIG.FEATURE.ENABLE_PING_CONFIRMATION || + is1to1 || + totalConversationUsers < CONFIG.FEATURE.MAX_USERS_TO_PING_WITHOUT_ALERT + ) { + pingConversation(); + } else { + PrimaryModal.show(PrimaryModal.type.CONFIRM, { + primaryAction: { + action: pingConversation, + text: t('tooltipConversationPing'), + }, + text: { + title: t('conversationPingConfirmTitle', {memberCount: totalConversationUsers.toString()}), + }, }); } }; const handlePasteFiles = (files: FileList): void => { const [pastedFile] = files; + if (!pastedFile) { return; } @@ -592,54 +397,21 @@ const InputBar = ({ setPastedFile(newFile); }; - const loadInitialStateForConversation = async (): Promise => { - setPastedFile(null); - cancelMessageEditing(true, true); - cancelMessageReply(); - endMentionFlow(); - - if (conversationEntity) { - const previousSessionData = await loadDraftState(conversationEntity, storageRepository, messageRepository); - - if (previousSessionData?.text) { - setInputValue(previousSessionData.text); - - setSelectionStart(previousSessionData.text.length); - setSelectionEnd(previousSessionData.text.length); - } - - if (previousSessionData?.mentions.length > 0) { - setCurrentMentions(previousSessionData.mentions); - } - - if (previousSessionData.replyEntityPromise) { - previousSessionData.replyEntityPromise.then(replyEntity => { - if (replyEntity?.isReplyable()) { - setReplyMessageEntity(replyEntity); - } - }); - } - - moveCursorToEnd(previousSessionData.text.length, false); - } - }; - const sendGiphy = (gifUrl: string, tag: string): void => { - generateQuote().then(quoteEntity => { - messageRepository.sendGif(conversationEntity, gifUrl, tag, quoteEntity); - cancelMessageEditing(true, true); + void generateQuote().then(quoteEntity => { + void messageRepository.sendGif(conversation, gifUrl, tag, quoteEntity); + cancelMessageEditing(true); }); }; const onWindowClick = (event: Event): void => handleClickOutsideOfInputBar(event, () => { - cancelMessageEditing(true, true); + cancelMessageEditing(true); cancelMessageReply(); }); useEffect(() => { amplify.subscribe(WebAppEvents.CONVERSATION.IMAGE.SEND, uploadImages); - amplify.subscribe(WebAppEvents.CONVERSATION.MESSAGE.EDIT, editMessage); amplify.subscribe(WebAppEvents.CONVERSATION.MESSAGE.REPLY, replyMessage); amplify.subscribe(WebAppEvents.EXTENSIONS.GIPHY.SEND, sendGiphy); amplify.subscribe(WebAppEvents.SHORTCUT.PING, onPingClick); @@ -647,40 +419,28 @@ const InputBar = ({ return () => { amplify.unsubscribeAll(WebAppEvents.SHORTCUT.PING); amplify.unsubscribeAll(WebAppEvents.CONVERSATION.IMAGE.SEND); - amplify.unsubscribeAll(WebAppEvents.CONVERSATION.MESSAGE.EDIT); amplify.unsubscribeAll(WebAppEvents.CONVERSATION.MESSAGE.REPLY); amplify.unsubscribeAll(WebAppEvents.EXTENSIONS.GIPHY.SEND); }; }, []); - useEffect(() => { - hasUserTyped.current = false; - loadInitialStateForConversation(); - }, [conversationEntity]); + const saveDraft = async (editorState: string) => { + await saveDraftState(storageRepository, conversation, editorState, replyMessageEntity?.id); + }; - useEffect(() => { - if (!isEditing) { - saveDraftState(storageRepository, conversationEntity, { - mentions: currentMentions, - text: inputValue, - ...(replyMessageEntity && {reply: replyMessageEntity}), + const loadDraft = async () => { + const draftState = await loadDraftState(conversation, storageRepository, messageRepository); + + if (draftState.messageReply) { + void draftState.messageReply.then(replyEntity => { + if (replyEntity?.isReplyable()) { + setReplyMessageEntity(replyEntity); + } }); } - }, [isEditing, currentMentions, replyMessageEntity, inputValue]); - useTextAreaFocus(() => textareaRef.current?.focus()); - - useScrollSync(textareaRef.current, shadowInputRef.current, [ - textareaRef.current, - shadowInputRef.current, - richTextInput, - ]); - - useResizeTarget(shadowInputRef.current, textareaRef.current, [ - textareaRef.current, - shadowInputRef.current, - richTextInput, - ]); + return draftState; + }; const handleRepliedMessageDeleted = (messageId: string) => { if (replyMessageEntity?.id === messageId) { @@ -736,30 +496,14 @@ const InputBar = ({ }; }, [pastedFile]); - const sendButton = ( -
  • - -
  • - ); - const controlButtonsProps = { - conversation: conversationEntity, + conversation: conversation, disableFilesharing: !isFileSharingSendingEnabled, disablePing: pingDisabled, - input: inputValue, + input: textValue, isEditing: isEditing, isScaledDown: isScaledDown, - onCancelEditing: () => cancelMessageEditing(true, true), + onCancelEditing: () => cancelMessageEditing(true), onClickPing: onPingClick, onGifClick: onGifClick, onSelectFiles: uploadFiles, @@ -767,20 +511,18 @@ const InputBar = ({ showGiphyButton: showGiphyButton, }; + const enableSending = textValue.length > 0; + return ( - {!!isTypingIndicatorEnabled && } + {isTypingIndicatorEnabled && } {classifiedDomains && !isConnectionRequest && ( - + )} {isReplying && !isEditing && } @@ -793,70 +535,59 @@ const InputBar = ({ {!isOutgoingRequest && ( <>
    - {!!inputValue.length && ( + {!!textValue.length && ( )}
    {!removedFromConversation && !pastedFile && ( - <> - {renderEmojiComponent()} - -
    -