diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 74654ed18d8d..5224197e5575 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { "ghcr.io/devcontainers/features/node:1": { - "version": "16" + "version": "20" } }, "hostRequirements": { diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index ab02099b5d2c..000000000000 --- a/.eslintignore +++ /dev/null @@ -1,19 +0,0 @@ -# The build artifacts of the jitsi-meet project. -build/* - -doc/* - -# Third-party source code which we (1) do not want to modify or (2) try to -# modify as little as possible. -libs/* -resources/* -react/features/stream-effects/virtual-background/vendor/* -react/features/face-landmarks/resources/* - -# ESLint will by default ignore its own configuration file. However, there does -# not seem to be a reason why we will want to risk being inconsistent with our -# remaining JavaScript source code. -!.eslintrc.js - -# Not worth it. -actionTypes.ts diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index c81c31085de3..000000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - "extends": "@internxt/eslint-config-internxt", - 'ignorePatterns': [ '*.d.ts' ], - rules: { - 'linebreak-style': ['error', 'unix'], - }, -}; diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.md b/.github/ISSUE_TEMPLATE/1-bug-report.md deleted file mode 100644 index ddce8bdf66bc..000000000000 --- a/.github/ISSUE_TEMPLATE/1-bug-report.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve - ---- - - - -### Description: - - - -### Steps to reproduce: - -1. -2. -3. - -### Expected behavior: - - - -### Actual behavior: - - - - -### Server information: - -- Jitsi Meet version: -- Operating System: - -### Client information: - -- Browser / app version: -- Operating System: - -### Additional information: - - diff --git a/.github/ISSUE_TEMPLATE/1-bug.yml b/.github/ISSUE_TEMPLATE/1-bug.yml new file mode 100644 index 000000000000..f1591f370077 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug.yml @@ -0,0 +1,53 @@ +name: Bug report +description: File a bug report and help us improve +body: + - type: markdown + attributes: + value: | + This issue tracker is only for reporting bugs and tracking issues related to the source code. + + **Before posting, please make sure to check if the same or similar bugs have already been reported.** + + ⚠️ General questions regarding usage, installation, etc. should be posted in our [community forum](https://community.jitsi.org). + - type: textarea + attributes: + label: What happened? + description: Please describe the problem. Be as detailed as possible. + validations: + required: true + - type: checkboxes + attributes: + label: Platform + description: On what platforms can you reproduce the problem? + options: + - label: Chrome (or Chromium based) + - label: Firefox + - label: Safari + - label: Other desktop browser + - label: Android browser + - label: iOS browser + - label: Electron app + - label: Android mobile app + - label: iOS mobile app + - label: Custom app using a mobile SDK + - type: input + attributes: + label: Browser / app / sdk version + description: Please provide the version of the browser / app / sdk where the problem manifests. + validations: + required: true + - type: textarea + attributes: + label: Relevant log output + description: Please copy and paste any relevant log output. The browser console JS logs (if applicable) is a good start. This will be automatically formatted into code, so no need for backticks. + render: shell + - type: checkboxes + attributes: + label: Reproducibility + description: Does the problem reproduce on meet.jit.si using Chrome, Firefox or the official mobile apps? + options: + - label: The problem is reproducible on meet.jit.si + - type: textarea + attributes: + label: More details? + description: Please provide more details in case they apply (such as the Jitsi Meet version you are running, if you are hosting your own server). diff --git a/.github/ISSUE_TEMPLATE/2-feature-request.md b/.github/ISSUE_TEMPLATE/2-feature-request.md deleted file mode 100644 index 54e600fb1637..000000000000 --- a/.github/ISSUE_TEMPLATE/2-feature-request.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: "Feature request" -about: Suggest an idea for this project -title: '' -labels: 'feature-request' -assignees: '' ---- - - - -**Is your feature request related to a problem you are facing?** -Please describe the problem you are trying to solve. - -**Describe the solution you'd like** -Please describe the desired behavior. - -**Describe alternatives you've considered** -Please describe alternative solutions or features you have considered. - diff --git a/.github/ISSUE_TEMPLATE/2-feature.yml b/.github/ISSUE_TEMPLATE/2-feature.yml new file mode 100644 index 000000000000..ec67ba1f963a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-feature.yml @@ -0,0 +1,22 @@ +name: Feature request +description: Suggest an idea for Jitsi Meet +labels: ["feature-request"] +body: + - type: markdown + attributes: + value: | + Thank you for suggesting an idea to make Jitsi Meet better. + + **Note**: the ultimate decision for implementing features lies on the Jitsi team, not all feature requests shall be accepted. + - type: textarea + attributes: + label: What problem are you trying to solve? + description: Tell us what problem your feature request would solve. + - type: textarea + attributes: + label: What solution would you like to see? + description: Please describe the desired behavior or feature. + - type: textarea + attributes: + label: Is there an alternative? + description: Please describe alternative solutions or features you have considered. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 7ca490a289fc..35d5e693d12c 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - - name: Need help with Jitsi Meet? + - name: Need help with your Jitsi Meet installation? url: https://community.jitsi.org - about: Please ask it in our community. + about: Please ask it in our community forum. diff --git a/.github/workflows/ci-lua.yml b/.github/workflows/ci-lua.yml index 45e89a9698e4..25972cc1e219 100644 --- a/.github/workflows/ci-lua.yml +++ b/.github/workflows/ci-lua.yml @@ -7,7 +7,7 @@ jobs: name: Luacheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install luarocks run: sudo apt-get --install-recommends -y install luarocks diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7516c2077f87..39fc45bbd972 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,89 +7,66 @@ jobs: name: Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'npm' - registry-url: 'https://npm.pkg.github.com' - - name: Backup original .npmrc - run: | - if [ -f .npmrc ]; then - cp .npmrc .npmrc.original - fi - - name: Configure NPM - run: | - echo "registry=https://registry.yarnpkg.com/" > .npmrc - echo "@internxt:registry=https://npm.pkg.github.com" >> .npmrc - echo "//npm.pkg.github.com/:_authToken=${{ secrets.PERSONAL_ACCESS_TOKEN }}" >> .npmrc - echo "always-auth=true" >> .npmrc - npm config set legacy-peer-deps true - env: - NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v41 - - name: Get changed lang files - id: lang-files - run: echo "all=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | grep -oE 'lang\/\S+' | tr '\n' ' ')" >> "$GITHUB_OUTPUT" - - run: npm install --legacy-peer-deps - env: - NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - - name: Restore original .npmrc - run: | - if [ -f .npmrc.original ]; then - mv .npmrc.original .npmrc - else - rm .npmrc - fi - - name: Check git status - run: git status - - name: Normalize lang files to ensure sorted - if: steps.lang-files.outputs.all - run: npm run lang-sort - - name: Check lang files are formatted correctly - if: steps.lang-files.outputs.all - run: npm run lint:lang - - name: Check if the git repository is clean - run: $(exit $(git status --porcelain --untracked-files=no | head -255 | wc -l)) || (echo "Dirty git tree"; git diff; exit 1) - - run: npm run lint:ci && npm run tsc:ci + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '24.x' + cache: yarn + + - name: Add .npmrc + run: cp .npmrc.template .npmrc + + - name: Install dependencies + run: yarn + + - name: Get changed files + id: changed-files + uses: jitsi/changed-files@main + + - name: Get changed lang files + id: lang-files + run: echo "all=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | grep -oE 'lang\/\S+' | tr '\n' ' ')" >> "$GITHUB_OUTPUT" + + - name: Check git status + run: git status + + - name: Normalize lang files to ensure sorted + if: steps.lang-files.outputs.all + run: npm run lang-sort + + - name: Check lang files are formatted correctly + if: steps.lang-files.outputs.all + run: npm run lint:lang + + - name: Check if the git repository is clean + run: $(exit $(git status --porcelain --untracked-files=no | head -255 | wc -l)) || (echo "Dirty git tree"; git diff; exit 1) + + - run: npm run lint:ci && npm run tsc:ci linux-build: name: Build Frontend (Linux) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'npm' - registry-url: 'https://npm.pkg.github.com' - - name: Backup original .npmrc - run: | - if [ -f .npmrc ]; then - cp .npmrc .npmrc.original - fi - - name: Configure NPM - run: | - echo "registry=https://registry.yarnpkg.com/" > .npmrc - echo "@internxt:registry=https://npm.pkg.github.com" >> .npmrc - echo "//npm.pkg.github.com/:_authToken=${{ secrets.PERSONAL_ACCESS_TOKEN }}" >> .npmrc - echo "always-auth=true" >> .npmrc - npm config set legacy-peer-deps true - env: - NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - - run: npm install --legacy-peer-deps - env: - NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - - name: Restore original .npmrc - run: | - if [ -f .npmrc.original ]; then - mv .npmrc.original .npmrc - else - rm .npmrc - fi - - run: make + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '24.x' + cache: yarn + + - name: Add .npmrc + run: cp .npmrc.template .npmrc + + - name: Install dependencies + run: yarn + + - run: make + # macos-ci: # name: Build Frontend (macOS) # runs-on: macOS-latest diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a6d6466cfc04..c8f6c2380b01 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -16,31 +16,22 @@ jobs: deployments: write pull-requests: write name: Publish to Cloudflare Pages + steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v3 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: '16' - registry-url: 'https://npm.pkg.github.com' - scope: '@internxt' + node-version: '24.x' + cache: yarn - - name: Configure NPM - run: | - echo "registry=https://registry.yarnpkg.com/" > .npmrc - echo "@internxt:registry=https://npm.pkg.github.com" >> .npmrc - echo "//npm.pkg.github.com/:_authToken=${{ secrets.PERSONAL_ACCESS_TOKEN }}" >> .npmrc - echo "always-auth=true" >> .npmrc - npm config set legacy-peer-deps true - env: - NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + - name: Add .npmrc + run: cp .npmrc.template .npmrc - name: Install dependencies - run: npm install --legacy-peer-deps - env: - NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + run: yarn - name: Configure environment run: | @@ -64,6 +55,7 @@ jobs: accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} projectName: ${{ secrets.CLOUDFLARE_PROJECT_NAME }} directory: . + - name: Comment Preview Link on PR if: github.event_name == 'pull_request' uses: actions/github-script@v6 diff --git a/.github/workflows/sonarcloud-analysis.yml b/.github/workflows/sonarcloud-analysis.yml index fbd974db2717..1a5ad40cab86 100644 --- a/.github/workflows/sonarcloud-analysis.yml +++ b/.github/workflows/sonarcloud-analysis.yml @@ -9,29 +9,22 @@ jobs: sonarcloud: name: SonarCloud runs-on: ubuntu-latest - strategy: - matrix: - node-version: [22.12.0] + steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Checkout + uses: actions/checkout@v4 - - name: Set up Node.js ${{ matrix.node-version }} + - name: Setup Node uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node-version }} - registry-url: "https://npm.pkg.github.com" + node-version: '24.x' + cache: yarn - - run: echo "registry=https://registry.yarnpkg.com/" > .npmrc - - run: echo "@internxt:registry=https://npm.pkg.github.com" >> .npmrc - # You cannot read packages from other private repos with GITHUB_TOKEN - # You have to use a PAT instead https://github.com/actions/setup-node/issues/49 - - run: echo //npm.pkg.github.com/:_authToken=${{ secrets.PERSONAL_ACCESS_TOKEN }} >> .npmrc - - run: echo "always-auth=true" >> .npmrc + - name: Add .npmrc + run: cp .npmrc.template .npmrc - name: Install dependencies - run: npm i --legacy-peer-deps + run: yarn - name: Test and coverage run: yarn test:coverage diff --git a/.gitignore b/.gitignore index 1fbbd41c59b8..747e9fd0e232 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ DerivedData *.dSYM.zip *.xcuserstate project.xcworkspace +**/.xcode.env.local # Android/IntelliJ # @@ -66,6 +67,7 @@ buck-out/ # fastlane # +.bundle/ **/fastlane/report.xml **/fastlane/Preview.html **/fastlane/test_output @@ -105,6 +107,9 @@ tsconfig.json react-native-sdk/*.tgz react-native-sdk/android/src !react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/JitsiMeetReactNativePackage.java +!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java +!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/JMOngoingConferenceModule.java +!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/RNOngoingNotification.java react-native-sdk/images react-native-sdk/ios react-native-sdk/lang @@ -113,3 +118,8 @@ react-native-sdk/node_modules react-native-sdk/react react-native-sdk/service react-native-sdk/sounds + +# tests +tests/.env +test-results + diff --git a/.npmrc.template b/.npmrc.template index 3906d9c299fe..a098528c88dd 100644 --- a/.npmrc.template +++ b/.npmrc.template @@ -1,8 +1,3 @@ -package-lock=true -; FIXME Set legacy-peer-deps=false when we upgrade RN. -legacy-peer-deps=true registry=https://registry.yarnpkg.com/ - -@internxt:registry=https://npm.pkg.github.com -//npm.pkg.github.com/:_authToken=TOKEN -always-auth=true \ No newline at end of file + +@internxt:registry=https://registry.yarnpkg.com/ diff --git a/.nvmrc b/.nvmrc index b6a7d89c68e0..2bd5a0a98a36 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -16 +22 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000000..57992a672267 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,267 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Development Commands + +### Building and Development +- `npm run lint-fix` - Automatically fix linting issues +- `npm run tsc:ci` - Run TypeScript checks for both web and native platforms +- `npm run tsc:web` - TypeScript check for web platform only +- `npm run tsc:native` - TypeScript check for native platform only +- `npm run lint:ci` - Run ESLint without type checking +- `make dev` - Start development server with webpack-dev-server +- `make compile` - Build production bundles +- `make clean` - Clean build directory +- `make all` - Full build (compile + deploy) + +### Testing +- `npm test` - Run full test suite using WebDriverIO +- `npm run test-single -- ` - Run single test file +- `npm run test-dev` - Run tests against development environment +- `npm run test-dev-single -- ` - Run single test in dev mode + + +### Language Tools +- `npm run lang-sort` - Sort language files +- `npm run lint:lang` - Validate JSON language files + +### Platform-Specific TypeScript +TypeScript configuration is split between web and native platforms with separate tsconfig files. + +## Architecture Overview + +### Multi-Platform Structure +Jitsi Meet supports both web and React Native platforms with platform-specific file extensions and directories: +- `.web.ts/.web.tsx` - Web-specific implementations +- `.native.ts/.native.tsx` - React Native-specific implementations +- `.any.ts/.any.tsx` - Shared cross-platform code +- `.android.ts/.android.tsx` - Android-specific code +- `.ios.ts/.ios.tsx` - iOS-specific code +- `web/` directories - Web-specific components and modules +- `native/` directories - React Native-specific components and modules +- `react/features/mobile/` - Native-only features + +### Core Directories +- `react/features/` - Main application features organized by domain (83+ feature modules) +- `modules/` - Legacy JavaScript modules and APIs +- `css/` - SCSS stylesheets compiled to CSS +- `libs/` - Compiled output directory for JavaScript bundles +- `static/` - Static assets and HTML files +- `tests/` - WebDriverIO end-to-end tests + +### Feature-Driven Architecture +The application is organized under `react/features/` with each feature containing: + +- **`actionTypes.ts`** - Redux action type constants +- **`actions.ts`** - Redux action creators (platform-specific variants with `.any.ts`, `.web.ts`, `.native.ts`) +- **`reducer.ts`** - Redux reducer functions +- **`middleware.ts`** - Redux middleware for side effects +- **`functions.ts`** - Utility functions and selectors +- **`constants.ts`** - Feature-specific constants +- **`logger.ts`** - Feature-specific logger instance +- **`types.ts`** - TypeScript type definitions + +### Key Application Files +- `app.js` - Main web application entry point +- `webpack.config.js` - Multi-bundle Webpack configuration +- `Makefile` - Build system for development and production +- `package.json` - Dependencies and scripts with version requirements + +### Bundle Architecture +The application builds multiple bundles: +- `app.bundle.js` / `app.bundle.min.js` - Main application bundle (entry: `./app.js`) +- `external_api.js` / `external_api.min.js` - External API for embedders (entry: `./modules/API/external/index.js`) +- `alwaysontop.js` / `alwaysontop.min.js` - Always-on-top window functionality (entry: `./react/features/always-on-top/index.tsx`) +- `close3.js` / `close3.min.js` - Close3 functionality (entry: `./static/close3.js`) +- `face-landmarks-worker.js` / `face-landmarks-worker.min.js` - Face landmarks detection worker (entry: `./react/features/face-landmarks/faceLandmarksWorker.ts`) +- `noise-suppressor-worklet.js` / `noise-suppressor-worklet.min.js` - Audio noise suppression worklet (entry: `./react/features/stream-effects/noise-suppression/NoiseSuppressorWorklet.ts`) +- `screenshot-capture-worker.js` / `screenshot-capture-worker.min.js` - Screenshot capture worker (entry: `./react/features/screenshot-capture/worker.ts`) + +### Redux Architecture +Features follow a Redux-based architecture with: +- Actions, reducers, and middleware in each feature directory +- Cross-platform state management +- Modular feature organization with clear boundaries + +The codebase uses a registry-based Redux architecture: +- **ReducerRegistry** - Features register their reducers independently +- **MiddlewareRegistry** - Features register middleware without cross-dependencies +- **IReduxState** - Global state is strongly typed with 80+ feature states + +### Dependencies +- Uses `lib-jitsi-meet` as the core WebRTC library +- React with TypeScript support +- React Native for mobile applications +- Webpack for bundling with development server + +### TypeScript Configuration +- `tsconfig.web.json` - Web platform TypeScript config (excludes native files) +- `tsconfig.native.json` - React Native TypeScript config (excludes web files) +- Strict TypeScript settings with ES2024 target +- Platform-specific module suffixes (`.web`, `.native`) + +### Key Base Features +- **`base/app/`** - Application lifecycle management +- **`base/conference/`** - Core conference logic +- **`base/tracks/`** - Media track management +- **`base/participants/`** - Participant management +- **`base/config/`** - Configuration management +- **`base/redux/`** - Redux infrastructure + +### Component Patterns +- **Abstract Components** - Base classes for cross-platform components +- **Platform-Specific Components** - Separate implementations in `web/` and `native/` directories +- **Hook-based patterns** - Modern React patterns for component logic +### Testing Framework +- WebDriverIO for end-to-end testing +- Test files are located in `tests/specs/` and use page objects in `tests/pageobjects/`. +- Environment configuration via `.env` files +- Support for Chrome, Firefox, and grid testing + +## Development Guidelines + +### Adding New Features +1. Create feature directory under `react/features/[feature-name]/` +2. Follow the standard file structure (actionTypes, actions, reducer, etc.) +3. Register reducers and middleware using the registry pattern +4. Define TypeScript interfaces for state and props +5. Use platform-specific files for web/native differences +6. Add feature-specific logger for debugging + +### Working with Existing Features +1. Check for existing `.any.ts`, `.web.ts`, `.native.ts` variants +2. Follow established action-reducer-middleware patterns +3. Use existing base utilities rather than creating new ones +4. Leverage abstract components for cross-platform logic +5. Maintain type safety across the entire state tree + +### Testing +The project uses WebDriver (WebdriverIO) for end-to-end testing. Test files are located in `tests/specs/` and use page objects in `tests/pageobjects/`. + +### Build System +- **Webpack** - Main build system for web bundles +- **Makefile** - Coordinates build process and asset deployment +- **Metro** - React Native bundler (configured in `metro.config.js`) + +### Platform-Specific Notes +- Web builds exclude files matching `**/native/*`, `**/*.native.ts`, etc. +- Native builds exclude files matching `**/web/*`, `**/*.web.ts`, etc. +- Use `moduleSuffixes` in TypeScript config to handle platform-specific imports +- Check `tsconfig.web.json` and `tsconfig.native.json` for platform-specific exclusions + +## Environment and Setup Requirements + +### System Requirements +- **Node.js and npm** are required +- Development server runs at https://localhost:8080/ +- Certificate errors in development are expected (self-signed certificates) + +### Development Workflow +- Development server proxies to configurable target (default: https://alpha.jitsi.net) +- Hot module replacement enabled for development +- Bundle analysis available via `ANALYZE_BUNDLE=true` environment variable +- Circular dependency detection via `DETECT_CIRCULAR_DEPS=true` + +## Code Quality Requirements +- All code must pass `npm run lint:ci` and `npm run tsc:ci` with 0 warnings before committing +- TypeScript strict mode enabled - avoid `any` type +- ESLint config extends `@jitsi/eslint-config` +- Prefer TypeScript for new features, convert existing JavaScript when possible + +## Code Style and Standards + +### Conventional Commits Format +Follow [Conventional Commits](https://www.conventionalcommits.org) with **mandatory scopes**: +``` +feat(feature-name): description +fix(feature-name): description +docs(section): description +``` +Available types: build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test + +### Feature Layout Structure +When adding new features: +``` +react/features/sample/ +├── actionTypes.ts +├── actions.ts +├── components/ +│ ├── AnotherComponent.tsx +│ └── OneComponent.tsx +├── middleware.ts +└── reducer.ts +``` + +### TypeScript Requirements +- All new features must be written in TypeScript +- Convert JavaScript to TypeScript when modifying existing code +- Import middleware in `react/features/app/middlewares.{any,native,web}.js` +- Import reducers in appropriate registry files +- Avoid `index` files + +### Bundle Size Management +- Bundle size limits are enforced to prevent bloat +- For increases, analyze first: `npx webpack -p --analyze-bundle` +- Open analyzer: `npx webpack-bundle-analyzer build/app-stats.json` +- Justify any dependency additions that increase bundle size + +## Testing and Quality Assurance + +### Tests +- End-to-end tests are defined in the tests/ +- Tests run automatically for project member PRs via Jenkins +- Tests cover peer-to-peer, invites, iOS, Android, and web platforms +- Beta testing available at https://beta.meet.jit.si/ + +### Manual Testing Checklist +- Test with 2 participants (P2P mode) +- Test with 3+ participants (JVB mode) +- Verify audio/video in both modes +- Test mobile apps if changes affect mobile +- Check that TLS certificate chain is complete for mobile app compatibility + +## Common Issues and Debugging + +### P2P vs JVB Problems +- **Works with 2 participants, fails with 3+**: JVB/firewall issue, check UDP 10000 +- **Works on web, fails on mobile apps**: TLS certificate chain issue, need fullchain.pem +- Use the tests from tests/ directory to verify functionality across platforms + +### Development Server Issues +- Certificate warnings are normal for development (self-signed) +- Use different backend with WEBPACK_DEV_SERVER_PROXY_TARGET environment variable +- Check firewall settings if local development fails + +### Configuration and Customization +- Extensive configuration options documented in handbook +- See `config.js` for client-side options +- Options marked 🚫 are not overwritable through `configOverwrite` +- Reference [Configuration Guide](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-configuration) for details + +## Architecture Deep Dive + +### Core Application Files +- **`./conference.js`** - Foundation for user-conference interactions (connection, joining, muting) +- **`./modules/external-api`** - External API for iframe integration and events +- **`./lang/`** - Translations in `main-[language].json` files +- **`./css/`** - SCSS files organized by features, matching React feature structure + +### State Management Flow +1. Actions dispatched from components +2. Middleware processes side effects +3. Reducers update state +4. Components re-render based on state changes +5. Registry pattern keeps features decoupled + +### Cross-Platform Strategy +- Abstract components handle shared logic +- Platform files (.web.ts, .native.ts) handle platform differences +- Build system excludes irrelevant platform files +- TypeScript configs ensure proper platform targeting + +## External Resources +- [Jitsi Handbook](https://jitsi.github.io/handbook/) - Comprehensive documentation +- [Community Forum](https://community.jitsi.org/) - Ask questions and get support +- [Architecture Guide](https://jitsi.github.io/handbook/docs/architecture) - System overview +- [Contributing Guidelines](https://jitsi.github.io/handbook/docs/dev-guide/contributing) - Detailed contribution process \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 12e47e0d17e2..db57433533f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,171 +1,20 @@ -# How to contribute -We would love to have your help. Before you start working however, please read -and follow this short guide. +# Follow Our Updated Guide to See How You Can Contribute -# Reporting Issues -Provide as much information as possible. Mention the version of Jitsi Meet, -Jicofo and JVB you are using, and explain (as detailed as you can) how the -problem can be reproduced. +**Hello there! 👋** -# Code contributions -Found a bug and know how to fix it? Great! Please read on. +We're thrilled that you're eager to contribute to **Jitsi Meet! ❤️** -## Contributor License Agreement -While the Jitsi projects are released under the -[Apache License 2.0](https://github.com/jitsi/jitsi-meet/blob/master/LICENSE), the copyright -holder and principal creator is [8x8](https://www.8x8.com/). To -ensure that we can continue making these projects available under an Open Source license, -we need you to sign our Apache-based contributor -license agreement as either a [corporation](https://jitsi.org/ccla) or an -[individual](https://jitsi.org/icla). If you cannot accept the terms laid out -in the agreement, unfortunately, we cannot accept your contribution. +Your interest in improving our platform means a lot to us. To ensure your contributions align seamlessly with our goals and processes, we've recently updated our guide. This guide will provide you with clear instructions on how to get involved effectively. -## Creating Pull Requests -- Make sure your code passes the linter rules beforehand. The linter is executed - automatically when committing code. -- Perform **one** logical change per pull request. -- Maintain a clean list of commits, squash them if necessary. -- Rebase your topic branch on top of the master branch before creating the pull - request. +### 📖 Get Started -## Coding style +Ready to get started? Head over to our [Jitsi Meet Handbook](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-contributing/) and let's make **Jitsi Meet** even better together! -### Comments +### 💬 Join the Discussion -* Comments documenting the source code are required. +Have questions or need help? Join our community discussions on the [Jitsi Forum](https://community.jitsi.org/) where contributors and maintainers can assist you. - * Comments from which documentation is automatically generated are **not** - subject to case-by-case decisions. Such comments are used, for example, on - types and their members. Examples of tools which automatically generate - documentation from such comments include JSDoc, Javadoc, Doxygen. +### ❗️Additional Note +Before sending us your code, double-check that it meets our coding standards. You can do this by running a command: `npm run lint`. If there are any issues, don't worry! You can fix them by running: `npm run lint-fix`. Once your code passes these checks, feel free to submit your pull request. - * Comments which are not automatically processed are strongly encouraged. They - are subject to case-by-case decisions. Such comments are often observed in - function bodies. - -* Comments should be formatted as proper English sentences. Such formatting pays - attention to, for example, capitalization and punctuation. - -### Duplication - -* Don't copy-paste source code. Reuse it. - -### Formatting - -* Line length is limited to 120 characters. - -* Sort by alphabetical order in order to make the addition of new entities as - easy as looking a word up in a dictionary. Otherwise, one risks duplicate - entries (with conflicting values in the cases of key-value pairs). For - example: - - * Within an `import` of multiple names from a module, sort the names in - alphabetical order. (Of course, the default name stays first as required by - the `import` syntax.) - - ````javascript - import { - DOMINANT_SPEAKER_CHANGED, - JITSI_CLIENT_CONNECTED, - JITSI_CLIENT_CREATED, - JITSI_CLIENT_DISCONNECTED, - JITSI_CLIENT_ERROR, - JITSI_CONFERENCE_JOINED, - MODERATOR_CHANGED, - PEER_JOINED, - PEER_LEFT, - RTC_ERROR - } from './actionTypes'; - ```` - - * Within a group of imports (e.g. groups of imports delimited by an empty line - may be: third-party modules, then project modules, and eventually the - private files of a module), sort the module names in alphabetical order. - - ````javascript - import React, { Component } from 'react'; - import { connect } from 'react-redux'; - ```` - -### Indentation - -* Align `switch` and `case`/`default`. Don't indent the `case`/`default` more - than its `switch`. - - ````javascript - switch (i) { - case 0: - ... - break; - default: - ... - } - ```` - -### Naming - -* An abstraction should have one name within the project and across multiple - projects. For example: - - * The instance of lib-jitsi-meet's `JitsiConnection` type should be named - `connection` or `jitsiConnection` in jitsi-meet, not `client`. - - * The class `ReducerRegistry` should be defined in ReducerRegistry.js and its - imports in other files should use the same name. Don't define the class - `Registry` in ReducerRegistry.js and then import it as `Reducers` in other - files. - -* The names of global constants (including ES6 module-global constants) should - be written in uppercase with underscores to separate words. For example, - `BACKGROUND_COLOR`. - -* The underscore character at the beginning of a name signals that the - respective variable, function, property is non-public i.e. private, protected, - or internal. In contrast, the lack of an underscore at the beginning of a name - signals public API. - -### Feature layout - -When adding a new feature, this would be the usual layout. - -``` -react/features/sample/ -├── actionTypes.ts -├── actions.js -├── components -│   ├── AnotherComponent.js -│   ├── OneComponent.js -│   └── index.js -├── middleware.js -└── reducer.js -``` - -The middleware must be imported in `react/features/app/` specifically -in `middlewares.any.ts`, `middlewares.native.ts` or `middlewares.web.ts` where appropriate. -Likewise for the reducer. - -An `index.js` file must not be provided for exporting actions, action types and -component. Features / files requiring those must import them explicitly. - -This has not always been the case and the entire codebase hasn't been migrated to -this model but new features should follow this new layout. - -When working on an old feature, adding the necessary changes to migrate to the new -model is encouraged. - - -### Avoiding bundle bloat - -When adding a new feature it's possible that it triggers a build failure due to the increased bundle size. We have safeguards inplace to avoid bundles growing disproportionatelly. While there are legit reasons for increasing the limits, please analyze the bundle first to make sure no unintended dependencies have been included, causing the increase in size. - -First, make a production build with bundle-analysis enabled: - -``` -npx webpack -p --analyze-bundle -``` - -Then open the interactive bundle analyzer tool: - -``` -npx webpack-bundle-analyzer build/app-stats.json -``` +**Happy coding!** diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000000..3fc60dc4a505 --- /dev/null +++ b/Gemfile @@ -0,0 +1,16 @@ +source "https://rubygems.org" + +ruby ">= 3.4.0" + +gem "cocoapods", "~> 1.16" + +# (Optional) Fastlane for automation +gem "fastlane" +gem "abbrev" +gem "logger" +gem "mutex_m" +gem "csv" +gem "bigdecimal" + +# (Optional) Bundler itself to ensure consistency +gem "bundler" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000000..edf2a4e45587 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,331 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + abbrev (0.1.2) + activesupport (7.2.2.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + artifactory (3.0.17) + atomos (0.1.3) + aws-eventstream (1.3.1) + aws-partitions (1.1050.0) + aws-sdk-core (3.218.1) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.98.0) + aws-sdk-core (~> 3, >= 3.216.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.181.0) + aws-sdk-core (~> 3, >= 3.216.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.11.0) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + base64 (0.2.0) + benchmark (0.4.0) + bigdecimal (3.1.9) + claide (1.1.0) + cocoapods (1.16.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.16.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.27.0, < 2.0) + cocoapods-core (1.16.2) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + concurrent-ruby (1.3.5) + connection_pool (2.5.0) + csv (3.3.2) + declarative (0.0.20) + digest-crc (0.7.0) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.6.20240107) + dotenv (2.8.1) + drb (2.2.1) + emoji_regex (3.2.3) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + excon (0.112.0) + faraday (1.10.4) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.1.0) + multipart-post (~> 2.0) + faraday-net_http (1.0.2) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.1) + faraday (~> 1.0) + fastimage (2.4.0) + fastlane (2.226.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored (~> 1.2) + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + http-cookie (~> 1.0.5) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + naturally (~> 2.2) + optparse (>= 0.1.1, < 1.0.0) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.5) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 3) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.4.0) + xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) + ffi (1.17.1) + ffi (1.17.1-aarch64-linux-gnu) + ffi (1.17.1-aarch64-linux-musl) + ffi (1.17.1-arm-linux-gnu) + ffi (1.17.1-arm-linux-musl) + ffi (1.17.1-arm64-darwin) + ffi (1.17.1-x86-linux-gnu) + ffi (1.17.1-x86-linux-musl) + ffi (1.17.1-x86_64-darwin) + ffi (1.17.1-x86_64-linux-gnu) + ffi (1.17.1-x86_64-linux-musl) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.54.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.3) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.31.0) + google-apis-core (>= 0.11.0, < 2.a) + google-cloud-core (1.7.1) + google-cloud-env (>= 1.0, < 3.a) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.4.0) + google-cloud-storage (1.47.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.31.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.8.1) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.8) + domain_name (~> 0.5) + httpclient (2.8.3) + i18n (1.14.7) + concurrent-ruby (~> 1.0) + jmespath (1.6.2) + json (2.10.1) + jwt (2.10.1) + base64 + logger (1.6.6) + mini_magick (4.13.2) + mini_mime (1.1.5) + minitest (5.25.4) + molinillo (0.8.0) + multi_json (1.15.0) + multipart-post (2.4.1) + mutex_m (0.3.0) + nanaimo (0.4.0) + nap (1.1.0) + naturally (2.2.1) + netrc (0.11.0) + nkf (0.2.0) + optparse (0.6.0) + os (1.1.4) + plist (3.7.2) + public_suffix (4.0.7) + rake (13.2.1) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rexml (3.4.1) + rouge (3.28.0) + ruby-macho (2.5.1) + ruby2_keywords (0.0.5) + rubyzip (2.4.1) + securerandom (0.4.1) + security (0.1.5) + signet (0.19.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + sysrandom (1.0.5) + terminal-notifier (2.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.2) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + uber (0.1.0) + unicode-display_width (2.6.0) + word_wrap (1.0.0) + xcodeproj (1.27.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.0) + rouge (~> 3.28.0) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-musl + arm64-darwin + ruby + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + abbrev + bigdecimal + bundler + cocoapods (~> 1.16) + csv + fastlane + logger + mutex_m + +RUBY VERSION + ruby 3.4.2p28 + +BUNDLED WITH + 2.6.3 diff --git a/Makefile b/Makefile index d1bcc2bf781e..5a198c6eabd2 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ BUILD_DIR = build CLEANCSS = ./node_modules/.bin/cleancss DEPLOY_DIR = libs +ONNX_DIR= node_modules/onnxruntime-web LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet TF_WASM_DIR = node_modules/@tensorflow/tfjs-backend-wasm/dist/ RNNOISE_WASM_DIR = node_modules/@jitsi/rnnoise-wasm/dist @@ -16,16 +17,16 @@ STYLES_BUNDLE = css/all.bundle.css STYLES_DESTINATION = css/all.css STYLES_MAIN = css/main.scss ifeq ($(OS),Windows_NT) - WEBPACK = .\node_modules\.bin\webpack - WEBPACK_DEV_SERVER = .\node_modules\.bin\webpack serve --mode development + WEBPACK = .\node_modules\.bin\webpack --progress + WEBPACK_DEV_SERVER = .\node_modules\.bin\webpack serve --mode development --progress else - WEBPACK = ./node_modules/.bin/webpack - WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development + WEBPACK = ./node_modules/.bin/webpack --progress + WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development --progress endif -all: compile deploy clean +all: compile deploy -compile: +compile: clean NODE_OPTIONS=--max-old-space-size=8192 \ $(WEBPACK) @@ -41,11 +42,8 @@ deploy-init: cp $(LIBJITSIMEET_DIR)/models/RTC/Encoder.onnx \ $(LIBJITSIMEET_DIR)/models/RTC/Decoder.onnx \ $(DEPLOY_DIR)/models - cp $(LIBJITSIMEET_DIR)/wasm/RTC/channels.wasm \ - $(LIBJITSIMEET_DIR)/wasm/RTC/channels.js \ + cp -r $(ONNX_DIR)/dist \ $(DEPLOY_DIR) - cp -r $(LIBJITSIMEET_DIR)/wasm/ONNX \ - $(DEPLOY_DIR) deploy-appbundle: cp \ @@ -55,8 +53,6 @@ deploy-appbundle: $(BUILD_DIR)/external_api.min.js.map \ $(BUILD_DIR)/alwaysontop.min.js \ $(BUILD_DIR)/alwaysontop.min.js.map \ - $(BUILD_DIR)/analytics-ga.min.js \ - $(BUILD_DIR)/analytics-ga.min.js.map \ $(BUILD_DIR)/face-landmarks-worker.min.js \ $(BUILD_DIR)/face-landmarks-worker.min.js.map \ $(BUILD_DIR)/noise-suppressor-worklet.min.js \ diff --git a/README.md b/README.md index 263769c7a90f..9d1fe52603b4 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,7 @@ Our development standards include: ### Prerequisites - Node.js 20.x or higher -- npm 9.x or higher -- Access to Internxt GitHub packages (for private dependencies) +- yarn 1.x or higher ### Installation @@ -41,37 +40,35 @@ Our development standards include: cp .npmrc.template .npmrc ``` -3. Replace `TOKEN` in the `.npmrc` file with your own [GitHub Personal Access Token](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token) with `read:packages` permission **ONLY**. - -4. Install dependencies: +3. Install dependencies: ```bash - npm install + yarn install ``` -5. Create an environment file from the template: +4. Create an environment file from the template: ```bash cp .env.template .env ``` -6. Configure the required environment variables in `.env` file. +5. Configure the required environment variables in `.env` file. ### Scripts -#### `npm start` or `make dev` +#### `yarn start` or `make dev` Runs the app in development mode using webpack-dev-server. Open [http://127.0.0.1:8080/](http://127.0.0.1:8080/) to view it in the browser. The page will reload if you make edits. -#### `npm test` +#### `yarn test` Launches the Vitest test runner in interactive watch mode. -#### `npm test:coverage` +#### `yarn test:coverage` Runs tests with coverage reports generated in the `coverage` directory. -#### `npm run lint` +#### `yarn lint` Runs ESLint to check code quality and style issues across JavaScript and TypeScript files. -#### `npm run lint-fix` +#### `yar lint-fix` Automatically fixes linting issues where possible. #### `make` @@ -106,4 +103,4 @@ The application is built on React and uses the following architecture: ### Styling - Tailwind CSS for styling -- Internxt UI components for consistent design \ No newline at end of file +- Internxt UI components for consistent design diff --git a/SECURITY.md b/SECURITY.md index 58d25b8ac8c8..a9f668aa9616 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,6 +4,6 @@ We take security very seriously and develop all Jitsi projects to be secure and safe. -If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8) or send us an email to security@jitsi.org. +If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8-bounty) or send us an email to security@jitsi.org. **We encourage responsible disclosure for the sake of our users, so please reach out before posting in a public space.** diff --git a/_unlock b/_unlock new file mode 100644 index 000000000000..d86bac9de59a --- /dev/null +++ b/_unlock @@ -0,0 +1 @@ +OK diff --git a/android/app/build.gradle b/android/app/build.gradle index e25a7d5918ce..a83ba3817296 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' // Crashlytics integration is done as part of Firebase now, so it gets // automagically activated with google-services.json @@ -15,12 +16,6 @@ def vcode = (int) (((new Date().getTime() / 1000) - 1546297200) / 10) android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion - packagingOptions { - jniLibs { - excludes += ['lib/*/libhermes*.so'] - } - } - defaultConfig { applicationId 'org.jitsi.meet' @@ -33,6 +28,14 @@ android { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } + + externalNativeBuild { + cmake { + arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", "-DANDROID_STL=c++_shared" + cppFlags "-std=c++17" + cFlags "-DANDROID_PLATFORM=android-26" + } + } } signingConfigs { @@ -48,10 +51,11 @@ android { debug { buildConfigField "boolean", "GOOGLE_SERVICES_ENABLED", "${googleServicesEnabled}" buildConfigField "boolean", "LIBRE_BUILD", "${rootProject.ext.libreBuild}" + applicationIdSuffix ".debug" } release { - // Uncomment the following line for singing a test release build. - //signingConfig signingConfigs.debug + // Uncomment the following line for signing a test release build. + // signingConfig signingConfigs.debug minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-release.pro' buildConfigField "boolean", "GOOGLE_SERVICES_ENABLED", "${googleServicesEnabled}" @@ -71,9 +75,18 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility rootProject.ext.javaVersion + targetCompatibility rootProject.ext.javaVersion } + + kotlinOptions { + jvmTarget = rootProject.ext.jvmTargetVersion + } + + kotlin { + jvmToolchain(rootProject.ext.jvmToolchainVersion) + } + namespace 'org.jitsi.meet' } @@ -88,10 +101,8 @@ dependencies { // Firebase // - Crashlytics - // - Dynamic Links implementation 'com.google.firebase:firebase-analytics:21.3.0' implementation 'com.google.firebase:firebase-crashlytics:18.4.3' - implementation 'com.google.firebase:firebase-dynamic-links:21.1.0' } implementation project(':sdk') @@ -99,8 +110,6 @@ dependencies { gradle.projectsEvaluated { // Dropbox integration - // - def dropboxAppKey if (project.file('dropbox.key').exists()) { dropboxAppKey = project.file('dropbox.key').text.trim() - 'db-' @@ -171,7 +180,6 @@ gradle.projectsEvaluated { packageTask.dependsOn(currentRunPackagerTask) } - } if (googleServicesEnabled) { diff --git a/android/app/proguard-rules-release.pro b/android/app/proguard-rules-release.pro index 45f06f57ffd0..ceedaaf2c9dc 100644 --- a/android/app/proguard-rules-release.pro +++ b/android/app/proguard-rules-release.pro @@ -4,3 +4,7 @@ -keepattributes *Annotation* -keepattributes SourceFile,LineNumberTable -keep public class * extends java.lang.Exception + +# R8 missing classes - suppress warnings +-dontwarn com.facebook.memory.config.MemorySpikeConfig +-dontwarn kotlinx.parcelize.Parcelize diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index dd38d95bc16b..8d3cc19a9f78 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -96,8 +96,3 @@ # Rule to avoid build errors related to SVGs. -keep public class com.horcrux.svg.** {*;} - -# https://github.com/facebook/fresco/issues/2638 --keep public class com.facebook.imageutils.** { - public *; -} diff --git a/android/app/src/main/java/org/jitsi/meet/GoogleServicesHelper.java b/android/app/src/main/java/org/jitsi/meet/GoogleServicesHelper.java index db73aa3ca2c6..4f80ce161f2e 100644 --- a/android/app/src/main/java/org/jitsi/meet/GoogleServicesHelper.java +++ b/android/app/src/main/java/org/jitsi/meet/GoogleServicesHelper.java @@ -4,7 +4,6 @@ import android.util.Log; import com.google.firebase.crashlytics.FirebaseCrashlytics; -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks; import org.jitsi.meet.sdk.JitsiMeet; import org.jitsi.meet.sdk.JitsiMeetActivity; @@ -22,18 +21,6 @@ public static void initialize(JitsiMeetActivity activity) { Log.d(activity.getClass().getSimpleName(), "Initializing Google Services"); FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!JitsiMeet.isCrashReportingDisabled(activity)); - FirebaseDynamicLinks.getInstance().getDynamicLink(activity.getIntent()) - .addOnSuccessListener(activity, pendingDynamicLinkData -> { - Uri dynamicLink = null; - - if (pendingDynamicLinkData != null) { - dynamicLink = pendingDynamicLinkData.getLink(); - } - - if (dynamicLink != null) { - activity.join(dynamicLink.toString()); - } - }); } } } diff --git a/android/app/src/main/java/org/jitsi/meet/MainActivity.java b/android/app/src/main/java/org/jitsi/meet/MainActivity.java index 4849cb5abe7d..3b18fca0b33c 100644 --- a/android/app/src/main/java/org/jitsi/meet/MainActivity.java +++ b/android/app/src/main/java/org/jitsi/meet/MainActivity.java @@ -30,14 +30,16 @@ import androidx.annotation.Nullable; +import com.oney.WebRTCModule.WebRTCModuleOptions; + import org.jitsi.meet.sdk.JitsiMeet; import org.jitsi.meet.sdk.JitsiMeetActivity; import org.jitsi.meet.sdk.JitsiMeetConferenceOptions; +import org.webrtc.Logging; import java.lang.reflect.Method; import java.net.URL; import java.util.Collection; -import java.util.HashMap; /** * The one and only Activity that the Jitsi Meet app needs. The @@ -74,13 +76,16 @@ public class MainActivity extends JitsiMeetActivity { */ private String defaultURL; - // JitsiMeetActivity overrides // @Override protected void onCreate(Bundle savedInstanceState) { JitsiMeet.showSplashScreen(this); + + WebRTCModuleOptions options = WebRTCModuleOptions.getInstance(); + options.loggingSeverity = Logging.Severity.LS_ERROR; + super.onCreate(null); } @@ -146,12 +151,12 @@ public void onDestroy() { } private void setJitsiMeetConferenceDefaultOptions() { + // Set default options JitsiMeetConferenceOptions defaultOptions = new JitsiMeetConferenceOptions.Builder() .setServerURL(buildURL(defaultURL)) .setFeatureFlag("welcomepage.enabled", true) - .setFeatureFlag("resolution", 360) .setFeatureFlag("server-url-change.enabled", !configurationByRestrictions) .build(); JitsiMeet.setDefaultConferenceOptions(defaultOptions); @@ -213,11 +218,6 @@ public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { super.onPictureInPictureModeChanged(isInPictureInPictureMode); Log.d(TAG, "Is in picture-in-picture mode: " + isInPictureInPictureMode); - - if (!isInPictureInPictureMode) { - this.startActivity(new Intent(this, getClass()) - .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); - } } // Helper methods diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml index b78bbe62adef..7ff1327c8bea 100644 --- a/android/app/src/main/res/values/colors.xml +++ b/android/app/src/main/res/values/colors.xml @@ -1,5 +1,6 @@ #17A0DB - #161618 + #040404 + #040404 \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index f269518c1489..6e4737b3c5fe 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -3,6 +3,7 @@ @drawable/rn_edit_text_material false @color/navigationBarColor + @color/statusBarColor true diff --git a/android/build.gradle b/android/build.gradle index ffbc66f19133..5bce937c19b6 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,52 +5,54 @@ import org.gradle.util.VersionNumber // sub-projects/modules. buildscript { + ext { + kotlinVersion = "2.0.21" + gradlePluginVersion = "8.6.0" + buildToolsVersion = "35.0.0" + compileSdkVersion = 35 + minSdkVersion = 26 + targetSdkVersion = 35 + supportLibVersion = "28.0.0" + ndkVersion = "27.1.12297006" + + // The Maven artifact groupId of the third-party react-native modules which + // Jitsi Meet SDK for Android depends on and which are not available in + // third-party Maven repositories so we have to deploy to a Maven repository + // of ours. + moduleGroupId = 'com.facebook.react' + + // Maven repo where artifacts will be published + mavenRepo = System.env.MVN_REPO ?: "" + mavenUser = System.env.MVN_USER ?: "" + mavenPassword = System.env.MVN_PASSWORD ?: "" + + // Libre build + libreBuild = (System.env.LIBRE_BUILD ?: "false").toBoolean() + + googleServicesEnabled = project.file('app/google-services.json').exists() && !libreBuild + + //React Native and Hermes Version + rnVersion = "0.77.2" + + // Java dependencies + javaVersion = JavaVersion.VERSION_17 + jvmToolchainVersion = 17 + jvmTargetVersion = '17' + } repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$rootProject.ext.kotlinVersion" + classpath "com.android.tools.build:gradle:$rootProject.ext.gradlePluginVersion" classpath 'com.google.gms:google-services:4.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' } } -ext { - kotlinVersion = "1.7.0" - buildToolsVersion = "33.0.2" - compileSdkVersion = 34 - minSdkVersion = 24 - targetSdkVersion = 34 - supportLibVersion = "28.0.0" - - // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. - ndkVersion = "23.1.7779620" - - // The Maven artifact groupId of the third-party react-native modules which - // Jitsi Meet SDK for Android depends on and which are not available in - // third-party Maven repositories so we have to deploy to a Maven repository - // of ours. - moduleGroupId = 'com.facebook.react' - - // Maven repo where artifacts will be published - mavenRepo = System.env.MVN_REPO ?: "" - mavenUser = System.env.MVN_USER ?: "" - mavenPassword = System.env.MVN_PASSWORD ?: "" - - // Libre build - libreBuild = (System.env.LIBRE_BUILD ?: "false").toBoolean() - - googleServicesEnabled = project.file('app/google-services.json').exists() && !libreBuild - - //React Native Version - rnVersion = "0.72.9" -} - allprojects { repositories { - // Android JSC is installed from npm. - maven { url("$rootDir/../node_modules/jsc-android/dist") } mavenCentral() google() maven { url 'https://www.jitpack.io' } @@ -76,7 +78,6 @@ allprojects { // Third-party react-native modules which Jitsi Meet SDK for Android depends // on and which are not available in third-party Maven repositories need to // be deployed in a Maven repository of ours. - // if (project.name.startsWith('react-native-')) { apply plugin: 'maven-publish' @@ -119,7 +120,7 @@ allprojects { project.version = "${json.version}-jitsi-${versionQualifierNumber}" task jitsiAndroidSourcesJar(type: Jar) { - classifier = 'sources' + archiveClassifier = 'sources' from android.sourceSets.main.java.source } @@ -170,16 +171,46 @@ allprojects { } } -// Force the version of the Android build tools we have chosen on all -// subprojects. The forcing was introduced for react-native and the third-party -// modules that we utilize such as react-native-background-timer. +// Force the version of the Android build tools we have chosen on all subprojects. subprojects { subproject -> afterEvaluate{ if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library')) && rootProject.ext.has('buildToolsVersion')) { + android { buildToolsVersion rootProject.ext.buildToolsVersion + + buildFeatures { + buildConfig true + } + + // Set JVM target across all subprojects + compileOptions { + sourceCompatibility rootProject.ext.javaVersion + targetCompatibility rootProject.ext.javaVersion + } + + // Disable lint errors for problematic third-party modules + // react-native-background-timer + // react-native-calendar-events + lint { + abortOnError = false + } + } + } + + // Add Kotlin configuration for subprojects that use Kotlin + if (subproject.plugins.hasPlugin('kotlin-android')) { + subproject.kotlin { + jvmToolchain(rootProject.ext.jvmToolchainVersion) + } + + // Set Kotlin JVM target + subproject.android { + kotlinOptions { + jvmTarget = rootProject.ext.jvmTargetVersion + } } } } diff --git a/android/gradle.properties b/android/gradle.properties index 111357527f5b..0858cd759be2 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -11,20 +11,26 @@ # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx1024m -XX:MaxPermSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx4048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -# This one fixes a weird WebRTC runtime problem on some devices. -# https://github.com/jitsi/jitsi-meet/issues/7911#issuecomment-714323255 -android.enableDexingArtifactTransform.desugaring=false - android.useAndroidX=true + android.enableJetifier=true -android.bundle.enableUncompressedNativeLibs=false + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# Use this property to enable or disable the Hermes JS engine. +hermesEnabled=true appVersion=99.0.0 -sdkVersion=99.0.0 +sdkVersion=0.0.0 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 8fad3f5a98bf..5c82cb032420 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/scripts/check_elf_alignment.sh b/android/scripts/check_elf_alignment.sh new file mode 100755 index 000000000000..0cd8f92a9823 --- /dev/null +++ b/android/scripts/check_elf_alignment.sh @@ -0,0 +1,113 @@ +#!/bin/bash +progname="${0##*/}" +progname="${progname%.sh}" + +# usage: check_elf_alignment.sh [path to *.so files|path to *.apk] + +cleanup_trap() { + if [ -n "${tmp}" -a -d "${tmp}" ]; then + rm -rf ${tmp} + fi + exit $1 +} + +usage() { + echo "Host side script to check the ELF alignment of shared libraries." + echo "Shared libraries are reported ALIGNED when their ELF regions are" + echo "16 KB or 64 KB aligned. Otherwise they are reported as UNALIGNED." + echo + echo "Usage: ${progname} [input-path|input-APK|input-APEX]" +} + +if [ ${#} -ne 1 ]; then + usage + exit +fi + +case ${1} in + --help | -h | -\?) + usage + exit + ;; + + *) + dir="${1}" + ;; +esac + +if ! [ -f "${dir}" -o -d "${dir}" ]; then + echo "Invalid file: ${dir}" >&2 + exit 1 +fi + +if [[ "${dir}" == *.apk ]]; then + trap 'cleanup_trap' EXIT + + echo + echo "Recursively analyzing $dir" + echo + + if { zipalign --help 2>&1 | grep -q "\-P "; }; then + echo "=== APK zip-alignment ===" + zipalign -v -c -P 16 4 "${dir}" | egrep 'lib/arm64-v8a|lib/x86_64|Verification' + echo "=========================" + else + echo "NOTICE: Zip alignment check requires build-tools version 35.0.0-rc3 or higher." + echo " You can install the latest build-tools by running the below command" + echo " and updating your \$PATH:" + echo + echo " sdkmanager \"build-tools;35.0.0-rc3\"" + fi + + dir_filename=$(basename "${dir}") + tmp=$(mktemp -d -t "${dir_filename%.apk}_out_XXXXX") + unzip "${dir}" lib/* -d "${tmp}" >/dev/null 2>&1 + dir="${tmp}" +fi + +if [[ "${dir}" == *.apex ]]; then + trap 'cleanup_trap' EXIT + + echo + echo "Recursively analyzing $dir" + echo + + dir_filename=$(basename "${dir}") + tmp=$(mktemp -d -t "${dir_filename%.apex}_out_XXXXX") + deapexer extract "${dir}" "${tmp}" || { echo "Failed to deapex." && exit 1; } + dir="${tmp}" +fi + +RED="\e[31m" +GREEN="\e[32m" +ENDCOLOR="\e[0m" + +unaligned_libs=() + +echo +echo "=== ELF alignment ===" + +matches="$(find "${dir}" -type f)" +IFS=$'\n' +for match in $matches; do + # We could recursively call this script or rewrite it to though. + [[ "${match}" == *".apk" ]] && echo "WARNING: doesn't recursively inspect .apk file: ${match}" + [[ "${match}" == *".apex" ]] && echo "WARNING: doesn't recursively inspect .apex file: ${match}" + + [[ $(file "${match}") == *"ELF"* ]] || continue + + res="$(objdump -p "${match}" | grep LOAD | awk '{ print $NF }' | head -1)" + if [[ $res =~ 2\*\*(1[4-9]|[2-9][0-9]|[1-9][0-9]{2,}) ]]; then + echo -e "${match}: ${GREEN}ALIGNED${ENDCOLOR} ($res)" + else + echo -e "${match}: ${RED}UNALIGNED${ENDCOLOR} ($res)" + unaligned_libs+=("${match}") + fi +done + +if [ ${#unaligned_libs[@]} -gt 0 ]; then + echo -e "${RED}Found ${#unaligned_libs[@]} unaligned libs (only arm64-v8a/x86_64 libs need to be aligned).${ENDCOLOR}" +elif [ -n "${dir_filename}" ]; then + echo -e "ELF Verification Successful" +fi +echo "=====================" \ No newline at end of file diff --git a/android/scripts/release-sdk.sh b/android/scripts/release-sdk.sh index d391fadd7453..63536a9a24e3 100755 --- a/android/scripts/release-sdk.sh +++ b/android/scripts/release-sdk.sh @@ -9,8 +9,6 @@ THE_MVN_REPO=${MVN_REPO:-${1:-$DEFAULT_MVN_REPO}} MVN_HTTP=0 DEFAULT_SDK_VERSION=$(grep sdkVersion ${THIS_DIR}/../gradle.properties | cut -d"=" -f2) SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}} -JSC_VERSION="r"$(jq -r '.dependencies."jsc-android"' ${THIS_DIR}/../../node_modules/react-native/package.json | cut -d . -f 1 | cut -c 2-) -DO_GIT_TAG=${GIT_TAG:-0} if [[ $THE_MVN_REPO == http* ]]; then MVN_HTTP=1 @@ -24,34 +22,7 @@ export MVN_REPO=$THE_MVN_REPO echo "Releasing Jitsi Meet SDK ${SDK_VERSION}" echo "Using ${MVN_REPO} as the Maven repo" - if [[ $MVN_HTTP == 1 ]]; then - # Push JSC - echo "Pushing JSC ${JSC_VERSION} to the Maven repo" - pushd ${THIS_DIR}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION} - mvn \ - deploy:deploy-file \ - -Durl=${MVN_REPO} \ - -DrepositoryId=${MVN_REPO_ID} \ - -Dfile=android-jsc-${JSC_VERSION}.aar \ - -Dpackaging=aar \ - -DgeneratePom=false \ - -DpomFile=android-jsc-${JSC_VERSION}.pom || true - popd -else - # Push JSC, if necessary - if [[ ! -d ${MVN_REPO}/org/webkit/android-jsc/${JSC_VERSION} ]]; then - echo "Pushing JSC ${JSC_VERSION} to the Maven repo" - pushd ${THIS_DIR}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION} - mvn \ - deploy:deploy-file \ - -Durl=${MVN_REPO} \ - -Dfile=android-jsc-${JSC_VERSION}.aar \ - -Dpackaging=aar \ - -DgeneratePom=false \ - -DpomFile=android-jsc-${JSC_VERSION}.pom - popd - fi - + if [[ $MVN_HTTP == 0 ]]; then # Check if an SDK with that same version has already been released if [[ -d ${MVN_REPO}/org/jitsi/react/jitsi-meet-sdk/${SDK_VERSION} ]]; then echo "There is already a release with that version in the Maven repo!" @@ -67,15 +38,12 @@ pushd ${THIS_DIR}/../ ./gradlew publish popd -if [[ $DO_GIT_TAG == 1 ]]; then - # The artifacts are now on the Maven repo, commit them +# The artifacts are now on the Maven repo, commit them +if [[ $MVN_HTTP == 0 ]]; then pushd ${MVN_REPO_PATH} git add -A . git commit -m "Jitsi Meet SDK + dependencies: ${SDK_VERSION}" popd - - # Tag the release - git tag android-sdk-${SDK_VERSION} fi # Done! diff --git a/android/scripts/run-packager-helper.command b/android/scripts/run-packager-helper.command index 68f9867e5846..cf9ebe0afc58 100755 --- a/android/scripts/run-packager-helper.command +++ b/android/scripts/run-packager-helper.command @@ -2,4 +2,4 @@ THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) -exec ${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command --reset-cache +exec ${THIS_DIR}/../../node_modules/react-native/scripts/packager.sh --reset-cache diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle index faf5a5ecb2b6..e17903d60b6b 100644 --- a/android/sdk/build.gradle +++ b/android/sdk/build.gradle @@ -8,6 +8,7 @@ android { defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion + buildConfigField "String", "SDK_VERSION", "\"$sdkVersion\"" } buildTypes { @@ -41,22 +42,19 @@ dependencies { implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' api "com.facebook.react:react-android:$rootProject.ext.rnVersion" + api "com.facebook.react:hermes-android:$rootProject.ext.rnVersion" - //noinspection GradleDynamicVersion - implementation 'org.webkit:android-jsc:+' - - implementation 'com.facebook.fresco:animated-gif:2.5.0' implementation 'com.dropbox.core:dropbox-core-sdk:4.0.1' - implementation 'com.jakewharton.timber:timber:4.7.1' - implementation 'com.squareup.duktape:duktape-android:1.3.0' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.code.gson:gson:2.8.6' implementation 'androidx.startup:startup-runtime:1.1.0' + implementation 'com.google.j2objc:j2objc-annotations:3.0.0' // Only add these packages if we are NOT doing a LIBRE_BUILD if (!rootProject.ext.libreBuild) { implementation project(':react-native-amplitude') implementation project(':react-native-giphy') - implementation(project(":react-native-google-signin")) { + implementation(project(':react-native-google-signin')) { exclude group: 'com.google.android.gms' exclude group: 'androidx' } @@ -75,7 +73,6 @@ dependencies { } implementation project(':react-native-gesture-handler') implementation project(':react-native-get-random-values') - implementation project(':react-native-immersive-mode') implementation project(':react-native-keep-awake') implementation project(':react-native-orientation-locker') implementation project(':react-native-pager-view') @@ -84,11 +81,14 @@ dependencies { implementation project(':react-native-screens') implementation project(':react-native-slider') implementation project(':react-native-sound') - implementation project(':react-native-splash-screen') + implementation project(':react-native-splash-view') implementation project(':react-native-svg') implementation project(':react-native-video') - implementation project(':react-native-webrtc') implementation project(':react-native-webview') + implementation project(':react-native-worklets-core') + + // Use `api` here so consumers can use WebRTCModuleOptions. + api project(':react-native-webrtc') testImplementation 'junit:junit:4.12' } @@ -136,10 +136,17 @@ android.libraryVariants.all { def variant -> def devEnabled = !targetName.toLowerCase().contains("release") // Run the bundler + // Use full path to node to avoid PATH issues in Gradle + def nodePath = System.getenv('NVM_BIN') ? "${System.getenv('NVM_BIN')}/node" : "node" + + // Debug: Print the node path and environment + println "Using node path: ${nodePath}" + println "NVM_BIN: ${System.getenv('NVM_BIN')}" + println "Working directory: ${reactRoot}" + commandLine( - "node", - "node_modules/react-native/local-cli/cli.js", - "bundle", + nodePath, + "node_modules/react-native/scripts/bundle.js", "--platform", "android", "--dev", "${devEnabled}", "--reset-cache", @@ -151,6 +158,70 @@ android.libraryVariants.all { def variant -> enabled !devEnabled } + // GRADLE REQUIREMENTS (Gradle 8.7+ / AGP 8.5.0+): + + // This task requires explicit dependencies on resource tasks from all React Native modules + // due to Gradle's strict validation of task dependencies. + + // Without these dependencies, + // builds will fail with errors like: + // "Task ':sdk:bundleReleaseJsAndAssets' uses the output of task ':react-native-amplitude:packageReleaseResources' + // without declaring a dependency on it." + + // The automatic dependency resolution below ensures all required resource tasks are properly + // declared as dependencies before this task executes. + + if (variant.name.toLowerCase().contains("release")) { + rootProject.subprojects.each { subproject -> + if ( + subproject.name.startsWith("react-native-") || + subproject.name.startsWith("@react-native-") || + subproject.name.startsWith("@giphy/") + ) { + [ + "packageReleaseResources", + "generateReleaseResValues", + "generateReleaseResources", + "generateReleaseBuildConfig", + "processReleaseManifest", + "writeReleaseAarMetadata", + "generateReleaseRFile", + "compileReleaseLibraryResources", + "compileReleaseJavaWithJavac", + "javaPreCompileRelease", + "bundleLibCompileToJarRelease", + "exportReleaseConsumerProguardFiles", + "mergeReleaseGeneratedProguardFiles", + "mergeReleaseJniLibFolders", + "mergeReleaseShaders", + "packageReleaseAssets", + "processReleaseJavaRes", + "prepareReleaseArtProfile", + "copyReleaseJniLibsProjectOnly", + "extractDeepLinksRelease", + "createFullJarRelease", + "generateReleaseLintModel", + "writeReleaseLintModelMetadata", + "generateReleaseLintVitalModel", + "lintVitalAnalyzeRelease", + "lintReportRelease", + "lintAnalyzeRelease", + "lintReportDebug", + "lintAnalyzeDebug" + ].each { taskName -> + if (subproject.tasks.findByName(taskName)) { + currentBundleTask.dependsOn(subproject.tasks.named(taskName)) + } + } + + // Also depend on the main build task to ensure all sub-tasks are completed + if (subproject.tasks.findByName("build")) { + currentBundleTask.dependsOn(subproject.tasks.named("build")) + } + } + } + } + currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask) currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask) variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders) diff --git a/android/sdk/src/main/AndroidManifest.xml b/android/sdk/src/main/AndroidManifest.xml index df494a46136c..d869c4e6e9b0 100644 --- a/android/sdk/src/main/AndroidManifest.xml +++ b/android/sdk/src/main/AndroidManifest.xml @@ -12,7 +12,10 @@ + + + + android:foregroundServiceType="mediaPlayback|microphone" /> + android:exported="false" + tools:node="merge"> diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/AppInfoModule.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/AppInfoModule.java index 479d054f1332..7377fc164a13 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/AppInfoModule.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/AppInfoModule.java @@ -1,5 +1,5 @@ /* - * Copyright @ 2017-present Atlassian Pty Ltd + * Copyright @ 2017-present 8x8, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ class AppInfoModule public static final String NAME = "AppInfo"; public static final boolean GOOGLE_SERVICES_ENABLED = getGoogleServicesEnabled(); public static final boolean LIBRE_BUILD = getLibreBuild(); + public static final String SDK_VERSION = getSdkVersion(); public AppInfoModule(ReactApplicationContext reactContext) { super(reactContext); @@ -79,6 +80,7 @@ public Map getConstants() { constants.put( "version", packageInfo == null ? "" : packageInfo.versionName); + constants.put("sdkVersion", SDK_VERSION); constants.put("LIBRE_BUILD", LIBRE_BUILD); constants.put("GOOGLE_SERVICES_ENABLED", GOOGLE_SERVICES_ENABLED); @@ -116,6 +118,19 @@ private static boolean getLibreBuild() { return false; } + /** + * Gets the SDK version. + */ + private static String getSdkVersion() { + Object sdkVersion = getBuildConfigValue("SDK_VERSION"); + + if (sdkVersion !=null) { + return (String) sdkVersion; + } + + return ""; + } + /** * Gets build config value of a certain field. * diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerConnectionService.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerConnectionService.java index 5d76ba021197..9b5bb1f90ff0 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerConnectionService.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerConnectionService.java @@ -18,7 +18,6 @@ import android.content.Context; import android.media.AudioManager; -import android.os.Build; import android.telecom.CallAudioState; import androidx.annotation.RequiresApi; @@ -34,7 +33,6 @@ * {@link AudioModeModule.AudioDeviceHandlerInterface} module implementing device handling for * Android versions >= O when ConnectionService is enabled. */ -@RequiresApi(Build.VERSION_CODES.O) class AudioDeviceHandlerConnectionService implements AudioModeModule.AudioDeviceHandlerInterface, RNConnectionService.CallAudioStateListener { diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerGeneric.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerGeneric.java index 87bc981b9d19..000cf92cbea4 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerGeneric.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerGeneric.java @@ -20,7 +20,6 @@ import android.media.AudioDeviceInfo; import android.media.AudioFocusRequest; import android.media.AudioManager; -import android.os.Build; import java.util.HashSet; import java.util.Set; @@ -227,22 +226,17 @@ public boolean setMode(int mode) { audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); audioManager.setMicrophoneMute(false); - int gotFocus; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) - .setAudioAttributes( - new AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) - .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) - .build() - ) - .setAcceptsDelayedFocusGain(true) - .setOnAudioFocusChangeListener(this) - .build() - ); - } else { - gotFocus = audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN); - } + int gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes( + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) + .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) + .build() + ) + .setAcceptsDelayedFocusGain(true) + .setOnAudioFocusChangeListener(this) + .build() + ); if (gotFocus == AudioManager.AUDIOFOCUS_REQUEST_FAILED) { JitsiMeetLogger.w(TAG + " Audio focus request failed"); diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioModeModule.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioModeModule.java index 368dc57265a6..95c1241af98f 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioModeModule.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/AudioModeModule.java @@ -20,7 +20,6 @@ import android.app.Activity; import android.content.Context; import android.media.AudioManager; -import android.os.Build; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Promise; @@ -58,7 +57,6 @@ * Before a call has started and after it has ended the * {@code AudioModeModule.DEFAULT} mode should be used. */ -@SuppressLint("AnnotateVersionCheck") @ReactModule(name = AudioModeModule.NAME) class AudioModeModule extends ReactContextBaseJavaModule { public static final String NAME = "AudioMode"; @@ -84,11 +82,10 @@ class AudioModeModule extends ReactContextBaseJavaModule { /** * Whether or not the ConnectionService is used for selecting audio devices. */ - private static final boolean supportsConnectionService = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O; - private static boolean useConnectionService_ = supportsConnectionService; + private static boolean useConnectionService_ = true; static boolean useConnectionService() { - return supportsConnectionService && useConnectionService_; + return useConnectionService_; } /** @@ -139,6 +136,11 @@ static boolean useConnectionService() { */ private String userSelectedDevice; + /** + * Whether or not audio is disabled. + */ + private boolean audioDisabled; + /** * Initializes a new module instance. There shall be a single instance of * this module throughout the lifetime of the application. @@ -239,6 +241,12 @@ private void setAudioDeviceHandler() { audioDeviceHandler.stop(); } + audioDeviceHandler = null; + + if (audioDisabled) { + return; + } + if (useConnectionService()) { audioDeviceHandler = new AudioDeviceHandlerConnectionService(audioManager); } else { @@ -281,6 +289,27 @@ public void run() { }); } + @ReactMethod + public void setDisabled(final boolean disabled, final Promise promise) { + if (audioDisabled == disabled) { + promise.resolve(null); + return; + } + + JitsiMeetLogger.i(TAG + " audio disabled: " + disabled); + + audioDisabled = disabled; + setAudioDeviceHandler(); + + if (disabled) { + mode = -1; + availableDevices.clear(); + resetSelectedDevice(); + } + + promise.resolve(null); + } + /** * Public method to set the current audio mode. * @@ -290,7 +319,12 @@ public void run() { */ @ReactMethod public void setMode(final int mode, final Promise promise) { - if (mode != DEFAULT && mode != AUDIO_CALL && mode != VIDEO_CALL) { + if (audioDisabled) { + promise.resolve(null); + return; + } + + if (mode < DEFAULT || mode > VIDEO_CALL) { promise.reject("setMode", "Invalid audio mode " + mode); return; } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastAction.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastAction.java index e793a99b0d31..81af3cdf71de 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastAction.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastAction.java @@ -3,12 +3,6 @@ import android.content.Intent; import android.os.Bundle; -import com.facebook.react.bridge.WritableNativeMap; - -import org.jitsi.meet.sdk.log.JitsiMeetLogger; - -import java.util.HashMap; - /** * Wraps the name and extra data for events that were broadcasted locally. */ @@ -16,57 +10,21 @@ public class BroadcastAction { private static final String TAG = BroadcastAction.class.getSimpleName(); private final Type type; - private final HashMap data; + private final Bundle data; public BroadcastAction(Intent intent) { this.type = Type.buildTypeFromAction(intent.getAction()); - this.data = buildDataFromBundle(intent.getExtras()); + this.data = intent.getExtras(); } public Type getType() { return this.type; } - public HashMap getData() { + public Bundle getData() { return this.data; } - public WritableNativeMap getDataAsWritableNativeMap() { - WritableNativeMap nativeMap = new WritableNativeMap(); - - for (String key : this.data.keySet()) { - try { - if (this.data.get(key) instanceof Boolean) { - nativeMap.putBoolean(key, (Boolean) this.data.get(key)); - } else if (this.data.get(key) instanceof Integer) { - nativeMap.putInt(key, (Integer) this.data.get(key)); - } else if (this.data.get(key) instanceof Double) { - nativeMap.putDouble(key, (Double) this.data.get(key)); - } else if (this.data.get(key) instanceof String) { - nativeMap.putString(key, (String) this.data.get(key)); - } else { - throw new Exception("Unsupported extra data type"); - } - } catch (Exception e) { - JitsiMeetLogger.w(TAG + " invalid extra data in event", e); - } - } - - return nativeMap; - } - - private static HashMap buildDataFromBundle(Bundle bundle) { - HashMap map = new HashMap<>(); - - if (bundle != null) { - for (String key : bundle.keySet()) { - map.put(key, bundle.get(key)); - } - } - - return map; - } - enum Type { SET_AUDIO_MUTED("org.jitsi.meet.SET_AUDIO_MUTED"), HANG_UP("org.jitsi.meet.HANG_UP"), @@ -78,7 +36,13 @@ enum Type { SEND_CHAT_MESSAGE("org.jitsi.meet.SEND_CHAT_MESSAGE"), SET_VIDEO_MUTED("org.jitsi.meet.SET_VIDEO_MUTED"), SET_CLOSED_CAPTIONS_ENABLED("org.jitsi.meet.SET_CLOSED_CAPTIONS_ENABLED"), - TOGGLE_CAMERA("org.jitsi.meet.TOGGLE_CAMERA"); + TOGGLE_CAMERA("org.jitsi.meet.TOGGLE_CAMERA"), + SHOW_NOTIFICATION("org.jitsi.meet.SHOW_NOTIFICATION"), + HIDE_NOTIFICATION("org.jitsi.meet.HIDE_NOTIFICATION"), + START_RECORDING("org.jitsi.meet.START_RECORDING"), + STOP_RECORDING("org.jitsi.meet.STOP_RECORDING"), + OVERWRITE_CONFIG("org.jitsi.meet.OVERWRITE_CONFIG"), + SEND_CAMERA_FACING_MODE_MESSAGE("org.jitsi.meet.SEND_CAMERA_FACING_MODE_MESSAGE"); private final String action; diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastEvent.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastEvent.java index d90bf07f60d7..6a976719c6c6 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastEvent.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastEvent.java @@ -91,7 +91,9 @@ public enum Type { VIDEO_MUTED_CHANGED("org.jitsi.meet.VIDEO_MUTED_CHANGED"), READY_TO_CLOSE("org.jitsi.meet.READY_TO_CLOSE"), TRANSCRIPTION_CHUNK_RECEIVED("org.jitsi.meet.TRANSCRIPTION_CHUNK_RECEIVED"), - CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED("org.jitsi.meet.CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED"); + CUSTOM_BUTTON_PRESSED("org.jitsi.meet.CUSTOM_BUTTON_PRESSED"), + CONFERENCE_UNIQUE_ID_SET("org.jitsi.meet.CONFERENCE_UNIQUE_ID_SET"), + RECORDING_STATUS_CHANGED("org.jitsi.meet.RECORDING_STATUS_CHANGED"); private static final String CONFERENCE_BLURRED_NAME = "CONFERENCE_BLURRED"; private static final String CONFERENCE_FOCUSED_NAME = "CONFERENCE_FOCUSED"; @@ -109,7 +111,9 @@ public enum Type { private static final String VIDEO_MUTED_CHANGED_NAME = "VIDEO_MUTED_CHANGED"; private static final String READY_TO_CLOSE_NAME = "READY_TO_CLOSE"; private static final String TRANSCRIPTION_CHUNK_RECEIVED_NAME = "TRANSCRIPTION_CHUNK_RECEIVED"; - private static final String CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED_NAME = "CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED"; + private static final String CUSTOM_BUTTON_PRESSED_NAME = "CUSTOM_BUTTON_PRESSED"; + private static final String CONFERENCE_UNIQUE_ID_SET_NAME = "CONFERENCE_UNIQUE_ID_SET"; + private static final String RECORDING_STATUS_CHANGED_NAME = "RECORDING_STATUS_CHANGED"; private final String action; @@ -164,8 +168,12 @@ private static Type buildTypeFromName(String name) { return READY_TO_CLOSE; case TRANSCRIPTION_CHUNK_RECEIVED_NAME: return TRANSCRIPTION_CHUNK_RECEIVED; - case CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED_NAME: - return CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED; + case CUSTOM_BUTTON_PRESSED_NAME: + return CUSTOM_BUTTON_PRESSED; + case CONFERENCE_UNIQUE_ID_SET_NAME: + return CONFERENCE_UNIQUE_ID_SET; + case RECORDING_STATUS_CHANGED_NAME: + return RECORDING_STATUS_CHANGED; } return null; diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastIntentHelper.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastIntentHelper.java index 541fb7463159..f9127129fdb1 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastIntentHelper.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastIntentHelper.java @@ -1,11 +1,13 @@ package org.jitsi.meet.sdk; import android.content.Intent; +import android.os.Bundle; public class BroadcastIntentHelper { public static Intent buildSetAudioMutedIntent(boolean muted) { Intent intent = new Intent(BroadcastAction.Type.SET_AUDIO_MUTED.getAction()); intent.putExtra("muted", muted); + return intent; } @@ -17,18 +19,21 @@ public static Intent buildSendEndpointTextMessageIntent(String to, String messag Intent intent = new Intent(BroadcastAction.Type.SEND_ENDPOINT_TEXT_MESSAGE.getAction()); intent.putExtra("to", to); intent.putExtra("message", message); + return intent; } public static Intent buildToggleScreenShareIntent(boolean enabled) { Intent intent = new Intent(BroadcastAction.Type.TOGGLE_SCREEN_SHARE.getAction()); intent.putExtra("enabled", enabled); + return intent; } public static Intent buildOpenChatIntent(String participantId) { Intent intent = new Intent(BroadcastAction.Type.OPEN_CHAT.getAction()); intent.putExtra("to", participantId); + return intent; } @@ -40,28 +45,113 @@ public static Intent buildSendChatMessageIntent(String participantId, String mes Intent intent = new Intent(BroadcastAction.Type.SEND_CHAT_MESSAGE.getAction()); intent.putExtra("to", participantId); intent.putExtra("message", message); + return intent; } public static Intent buildSetVideoMutedIntent(boolean muted) { Intent intent = new Intent(BroadcastAction.Type.SET_VIDEO_MUTED.getAction()); intent.putExtra("muted", muted); + return intent; } public static Intent buildSetClosedCaptionsEnabledIntent(boolean enabled) { Intent intent = new Intent(BroadcastAction.Type.SET_CLOSED_CAPTIONS_ENABLED.getAction()); intent.putExtra("enabled", enabled); + return intent; } - + public static Intent buildRetrieveParticipantsInfo(String requestId) { Intent intent = new Intent(BroadcastAction.Type.RETRIEVE_PARTICIPANTS_INFO.getAction()); intent.putExtra("requestId", requestId); + return intent; } public static Intent buildToggleCameraIntent() { return new Intent(BroadcastAction.Type.TOGGLE_CAMERA.getAction()); } + + public static Intent buildShowNotificationIntent( + String appearance, String description, String timeout, String title, String uid) { + Intent intent = new Intent(BroadcastAction.Type.SHOW_NOTIFICATION.getAction()); + intent.putExtra("appearance", appearance); + intent.putExtra("description", description); + intent.putExtra("timeout", timeout); + intent.putExtra("title", title); + intent.putExtra("uid", uid); + + return intent; + } + + public static Intent buildHideNotificationIntent(String uid) { + Intent intent = new Intent(BroadcastAction.Type.HIDE_NOTIFICATION.getAction()); + intent.putExtra("uid", uid); + + return intent; + } + + public enum RecordingMode { + FILE("file"), + STREAM("stream"); + + private final String mode; + + RecordingMode(String mode) { + this.mode = mode; + } + + public String getMode() { + return mode; + } + } + + public static Intent buildStartRecordingIntent( + RecordingMode mode, + String dropboxToken, + boolean shouldShare, + String rtmpStreamKey, + String rtmpBroadcastID, + String youtubeStreamKey, + String youtubeBroadcastID, + Bundle extraMetadata, + boolean transcription) { + Intent intent = new Intent(BroadcastAction.Type.START_RECORDING.getAction()); + intent.putExtra("mode", mode.getMode()); + intent.putExtra("dropboxToken", dropboxToken); + intent.putExtra("shouldShare", shouldShare); + intent.putExtra("rtmpStreamKey", rtmpStreamKey); + intent.putExtra("rtmpBroadcastID", rtmpBroadcastID); + intent.putExtra("youtubeStreamKey", youtubeStreamKey); + intent.putExtra("youtubeBroadcastID", youtubeBroadcastID); + intent.putExtra("extraMetadata", extraMetadata); + intent.putExtra("transcription", transcription); + + return intent; + } + + public static Intent buildStopRecordingIntent(RecordingMode mode, boolean transcription) { + Intent intent = new Intent(BroadcastAction.Type.STOP_RECORDING.getAction()); + intent.putExtra("mode", mode.getMode()); + intent.putExtra("transcription", transcription); + + return intent; + } + + public static Intent buildOverwriteConfigIntent(Bundle config) { + Intent intent = new Intent(BroadcastAction.Type.OVERWRITE_CONFIG.getAction()); + intent.putExtra("config", config); + + return intent; + } + + public static Intent buildSendCameraFacingModeMessageIntent(String to, String facingMode) { + Intent intent = new Intent(BroadcastAction.Type.SEND_CAMERA_FACING_MODE_MESSAGE.getAction()); + intent.putExtra("to", to); + intent.putExtra("facingMode", facingMode); + + return intent; + } } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastReceiver.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastReceiver.java index d5ac34ae6bc3..64cec20cb7e7 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastReceiver.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/BroadcastReceiver.java @@ -3,6 +3,9 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Bundle; + +import com.facebook.react.bridge.Arguments; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -28,7 +31,14 @@ public BroadcastReceiver(Context context) { public void onReceive(Context context, Intent intent) { BroadcastAction action = new BroadcastAction(intent); String actionName = action.getType().getAction(); - - ReactInstanceManagerHolder.emitEvent(actionName, action.getDataAsWritableNativeMap()); + Bundle data = action.getData(); + + // For actions without data bundle (like hangup), we create an empty map + // instead of attempting to convert a null bundle to avoid crashes. + if (data != null) { + ReactInstanceManagerHolder.emitEvent(actionName, Arguments.fromBundle(data)); + } else { + ReactInstanceManagerHolder.emitEvent(actionName, Arguments.createMap()); + } } } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/ConnectionService.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/ConnectionService.java index e8e7e270e18d..d66e1d879798 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/ConnectionService.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/ConnectionService.java @@ -37,7 +37,6 @@ * * @author Pawel Domas */ -@RequiresApi(api = Build.VERSION_CODES.O) public class ConnectionService extends android.telecom.ConnectionService { /** diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/ExternalAPIModule.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/ExternalAPIModule.java index 02202c9c8446..5b24140520d9 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/ExternalAPIModule.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/ExternalAPIModule.java @@ -97,6 +97,12 @@ public Map getConstants() { constants.put("SET_VIDEO_MUTED", BroadcastAction.Type.SET_VIDEO_MUTED.getAction()); constants.put("SET_CLOSED_CAPTIONS_ENABLED", BroadcastAction.Type.SET_CLOSED_CAPTIONS_ENABLED.getAction()); constants.put("TOGGLE_CAMERA", BroadcastAction.Type.TOGGLE_CAMERA.getAction()); + constants.put("SHOW_NOTIFICATION", BroadcastAction.Type.SHOW_NOTIFICATION.getAction()); + constants.put("HIDE_NOTIFICATION", BroadcastAction.Type.HIDE_NOTIFICATION.getAction()); + constants.put("START_RECORDING", BroadcastAction.Type.START_RECORDING.getAction()); + constants.put("STOP_RECORDING", BroadcastAction.Type.STOP_RECORDING.getAction()); + constants.put("OVERWRITE_CONFIG", BroadcastAction.Type.OVERWRITE_CONFIG.getAction()); + constants.put("SEND_CAMERA_FACING_MODE_MESSAGE", BroadcastAction.Type.SEND_CAMERA_FACING_MODE_MESSAGE.getAction()); return constants; } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JavaScriptSandboxModule.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JavaScriptSandboxModule.java deleted file mode 100644 index 38d8d94d9101..000000000000 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JavaScriptSandboxModule.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright @ 2019-present 8x8, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jitsi.meet.sdk; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.module.annotations.ReactModule; -import com.squareup.duktape.Duktape; - -@ReactModule(name = JavaScriptSandboxModule.NAME) -class JavaScriptSandboxModule extends ReactContextBaseJavaModule { - public static final String NAME = "JavaScriptSandbox"; - - public JavaScriptSandboxModule(ReactApplicationContext reactContext) { - super(reactContext); - } - - /** - * Evaluates the given code in a Duktape VM. - * @param code - The code that needs to evaluated. - * @param promise - Resolved with the output in case of success or rejected with an exception - * in case of failure. - */ - @ReactMethod - public void evaluate(String code, Promise promise) { - Duktape vm = Duktape.create(); - try { - Object res = vm.evaluate(code); - promise.resolve(res.toString()); - } catch (Throwable tr) { - promise.reject(tr); - } finally { - vm.close(); - } - } - - @Override - public String getName() { - return NAME; - } -} diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiInitializer.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiInitializer.java index 99cf8143dc8b..48544a5f9a9e 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiInitializer.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiInitializer.java @@ -23,8 +23,10 @@ import androidx.startup.Initializer; import com.facebook.soloader.SoLoader; +import com.facebook.react.soloader.OpenSourceMergedSoMapping; import org.wonday.orientation.OrientationActivityLifecycle; +import java.io.IOException; import java.util.Collections; import java.util.List; @@ -35,7 +37,11 @@ public class JitsiInitializer implements Initializer { public Boolean create(@NonNull Context context) { Log.d(this.getClass().getCanonicalName(), "create"); - SoLoader.init(context, /* native exopackage */ false); + try { + SoLoader.init(context, OpenSourceMergedSoMapping.INSTANCE); + } catch (IOException e) { + throw new RuntimeException(e); + } // Register our uncaught exception handler. JitsiMeetUncaughtExceptionHandler.register(); @@ -43,6 +49,10 @@ public Boolean create(@NonNull Context context) { // Register activity lifecycle handler for the orientation locker module. ((Application) context).registerActivityLifecycleCallbacks(OrientationActivityLifecycle.getInstance()); + // Initialize ReactInstanceManager during application startup + // This ensures it's ready before any Activity onCreate is called + ReactInstanceManagerHolder.initReactInstanceManager((Application) context); + return true; } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeet.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeet.java index 88b91b2319e9..b8873e990f6a 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeet.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeet.java @@ -22,7 +22,7 @@ import com.facebook.react.ReactInstanceManager; -import org.devio.rn.splashscreen.SplashScreen; +import com.splashview.SplashView; import org.jitsi.meet.sdk.log.JitsiMeetLogger; public class JitsiMeet { @@ -92,7 +92,7 @@ public static boolean isCrashReportingDisabled(Context context) { */ public static void showSplashScreen(Activity activity) { try { - SplashScreen.show(activity); + SplashView.INSTANCE.showSplashView(activity); } catch (Exception e) { JitsiMeetLogger.e(e, "Failed to show splash screen"); } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java index 816d5a1dd42f..7c0619118573 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java @@ -24,10 +24,17 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.facebook.react.modules.core.PermissionListener; @@ -54,6 +61,8 @@ public class JitsiMeetActivity extends AppCompatActivity private static final String ACTION_JITSI_MEET_CONFERENCE = "org.jitsi.meet.CONFERENCE"; private static final String JITSI_MEET_CONFERENCE_OPTIONS = "JitsiMeetConferenceOptions"; + private boolean isReadyToClose; + private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -85,6 +94,27 @@ public static void launch(Context context, String url) { launch(context, options); } + public static void addTopBottomInsets(@NonNull Window w, @NonNull View v) { + + View decorView = w.getDecorView(); + + decorView.post(() -> { + WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(decorView); + if (insets != null) { + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); + params.topMargin = insets.getInsets(WindowInsetsCompat.Type.systemBars()).top; + params.bottomMargin = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom; + v.setLayoutParams(params); + + decorView.setOnApplyWindowInsetsListener((view, windowInsets) -> { + view.setBackgroundColor(JitsiMeetView.BACKGROUND_COLOR); + + return windowInsets; + }); + } + }); + } + // Overrides // @@ -100,7 +130,17 @@ public void onConfigurationChanged(Configuration newConfig) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // ReactInstanceManager is now initialized by JitsiInitializer during application startup + // Just call onHostResume since the manager is already ready + JitsiMeetActivityDelegate.onHostResume(this); + setContentView(R.layout.activity_jitsi_meet); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM + && getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + addTopBottomInsets(getWindow(), findViewById(android.R.id.content)); + } + this.jitsiView = findViewById(R.id.jitsiView); registerForBroadcastMessages(); @@ -124,6 +164,8 @@ public void onStop() { @Override public void onDestroy() { + JitsiMeetLogger.i("onDestroy()"); + // Here we are trying to handle the following corner case: an application using the SDK // is using this Activity for displaying meetings, but there is another "main" Activity // with other content. If this Activity is "swiped out" from the recent list we will get @@ -131,7 +173,10 @@ public void onDestroy() { // current meeting, but when our view is detached from React the JS <-> Native bridge won't // be operational so the external API won't be able to notify the native side that the // conference terminated. Thus, try our best to clean up. - leave(); + if (!isReadyToClose) { + JitsiMeetLogger.i("onDestroy(): leaving..."); + leave(); + } this.jitsiView = null; @@ -149,8 +194,12 @@ public void onDestroy() { @Override public void finish() { - leave(); + if (!isReadyToClose) { + JitsiMeetLogger.i("finish(): leaving..."); + leave(); + } + JitsiMeetLogger.i("finish(): finishing..."); super.finish(); } @@ -170,8 +219,8 @@ public void join(@Nullable String url) { } public void join(JitsiMeetConferenceOptions options) { - if (this.jitsiView != null) { - this.jitsiView .join(options); + if (this.jitsiView != null) { + this.jitsiView.join(options); } else { JitsiMeetLogger.w("Cannot join, view is null"); } @@ -252,6 +301,7 @@ protected void onParticipantLeft(HashMap extraData) { protected void onReadyToClose() { JitsiMeetLogger.i("SDK is ready to close"); + isReadyToClose = true; finish(); } @@ -259,9 +309,17 @@ protected void onReadyToClose() { // JitsiMeetLogger.i("Transcription chunk received: " + extraData); // } -// protected void onCustomOverflowMenuButtonPressed(HashMap extraData) { -// JitsiMeetLogger.i("Custom overflow menu button pressed: " + extraData); -// } +// protected void onCustomButtonPressed(HashMap extraData) { +// JitsiMeetLogger.i("Custom button pressed: " + extraData); +// } + +// protected void onConferenceUniqueIdSet(HashMap extraData) { +// JitsiMeetLogger.i("Conference unique id set: " + extraData); +// } + +// protected void onRecordingStatusChanged(HashMap extraData) { +// JitsiMeetLogger.i("Recording status changed: " + extraData); +// } // Activity lifecycle methods // @@ -294,8 +352,8 @@ public void onNewIntent(Intent intent) { @Override protected void onUserLeaveHint() { - if (this.jitsiView != null) { - this.jitsiView .enterPictureInPicture(); + if (this.jitsiView != null) { + this.jitsiView.enterPictureInPicture(); } } @@ -346,12 +404,18 @@ private void onBroadcastReceived(Intent intent) { case READY_TO_CLOSE: onReadyToClose(); break; -// case TRANSCRIPTION_CHUNK_RECEIVED: -// onTranscriptionChunkReceived(event.getData()); -// break; -// case CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED: -// onCustomOverflowMenuButtonPressed(event.getData()); -// break; + // case TRANSCRIPTION_CHUNK_RECEIVED: + // onTranscriptionChunkReceived(event.getData()); + // break; + // case CUSTOM_BUTTON_PRESSED: + // onCustomButtonPressed(event.getData()); + // break; + // case CONFERENCE_UNIQUE_ID_SET: + // onConferenceUniqueIdSet(event.getData()); + // break; + // case RECORDING_STATUS_CHANGED: + // onRecordingStatusChanged(event.getData()); + // break; } } } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java index 0b1059f4c829..4145eebfefdd 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java @@ -42,7 +42,7 @@ public class JitsiMeetActivityDelegate { /** * Tells whether or not the permissions request is currently in progress. * - * @return {@code true} if the permssions are being requested or {@code false} otherwise. + * @return {@code true} if the permissions are being requested or {@code false} otherwise. */ static boolean arePermissionsBeingRequested() { return permissionListener != null; diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetConferenceOptions.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetConferenceOptions.java index 1c7e2e466192..22406d329764 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetConferenceOptions.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetConferenceOptions.java @@ -21,6 +21,7 @@ import android.os.Parcelable; import java.net.URL; +import java.util.ArrayList; /** @@ -229,6 +230,12 @@ public Builder setConfigOverride(String config, String[] list) { return this; } + public Builder setConfigOverride(String config, ArrayList arrayList) { + this.config.putParcelableArrayList(config, arrayList); + + return this; + } + /** * Builds the immutable {@link JitsiMeetConferenceOptions} object with the configuration * that this {@link Builder} instance specified. @@ -263,11 +270,6 @@ private JitsiMeetConferenceOptions(Parcel in) { Bundle asProps() { Bundle props = new Bundle(); - // Android always has the PiP flag set by default. - if (!featureFlags.containsKey("pip.enabled")) { - featureFlags.putBoolean("pip.enabled", true); - } - props.putBundle("flags", featureFlags); Bundle urlProps = new Bundle(); diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java index 779fc2599edf..f2ed6c6f0847 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java @@ -16,6 +16,9 @@ package org.jitsi.meet.sdk; +import static android.Manifest.permission.POST_NOTIFICATIONS; +import static android.Manifest.permission.RECORD_AUDIO; + import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; @@ -24,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.os.Build; import android.os.Bundle; @@ -31,9 +35,13 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import com.facebook.react.modules.core.PermissionListener; + import org.jitsi.meet.sdk.log.JitsiMeetLogger; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Random; /** @@ -43,38 +51,39 @@ * * See: https://developer.android.com/guide/components/services */ -public class JitsiMeetOngoingConferenceService extends Service - implements OngoingConferenceTracker.OngoingConferenceListener { +public class JitsiMeetOngoingConferenceService extends Service implements OngoingConferenceTracker.OngoingConferenceListener { private static final String TAG = JitsiMeetOngoingConferenceService.class.getSimpleName(); + private static final String ACTIVITY_DATA_KEY = "activityDataKey"; private static final String EXTRA_DATA_KEY = "extraDataKey"; private static final String EXTRA_DATA_BUNDLE_KEY = "extraDataBundleKey"; private static final String IS_AUDIO_MUTED_KEY = "isAudioMuted"; + private static final int PERMISSIONS_REQUEST_CODE = (int) (Math.random() * Short.MAX_VALUE); + private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver(); private boolean isAudioMuted; + private Class tapBackActivity; static final int NOTIFICATION_ID = new Random().nextInt(99999) + 10000; + private static void doLaunch(Context context, HashMap extraData) { + Activity activity = (Activity) context; - public static void launch(Context context, HashMap extraData) { - - OngoingNotification.createNotificationChannel((Activity) context); + OngoingNotification.createNotificationChannel(activity); Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class); Bundle extraDataBundle = new Bundle(); extraDataBundle.putSerializable(EXTRA_DATA_KEY, extraData); + intent.putExtra(EXTRA_DATA_BUNDLE_KEY, extraDataBundle); + intent.putExtra(ACTIVITY_DATA_KEY, activity.getClass().getCanonicalName()); ComponentName componentName; try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - componentName = context.startForegroundService(intent); - } else { - componentName = context.startService(intent); - } + componentName = context.startForegroundService(intent); } catch (RuntimeException e) { // Avoid crashing due to ForegroundServiceStartNotAllowedException (API level 31). // See: https://developer.android.com/guide/components/foreground-services#background-start-restrictions @@ -87,6 +96,55 @@ public static void launch(Context context, HashMap extraData) { } } + + public static void launch(Context context, HashMap extraData) { + List permissionsList = new ArrayList<>(); + + PermissionListener listener = new PermissionListener() { + @Override + public boolean onRequestPermissionsResult(int i, String[] strings, int[] results) { + int counter = 0; + + if (results.length > 0) { + for (int result : results) { + if (result == PackageManager.PERMISSION_GRANTED) { + counter++; + } + } + + if (counter == results.length){ + doLaunch(context, extraData); + JitsiMeetLogger.w(TAG + " Service launched, permissions were granted"); + } else { + JitsiMeetLogger.w(TAG + " Couldn't launch service, permissions were not granted"); + } + } + + return true; + } + }; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permissionsList.add(POST_NOTIFICATIONS); + permissionsList.add(RECORD_AUDIO); + } + + String[] permissionsArray = new String[ permissionsList.size() ]; + permissionsArray = permissionsList.toArray( permissionsArray ); + + if (permissionsArray.length > 0) { + JitsiMeetActivityDelegate.requestPermissions( + (Activity) context, + permissionsArray, + PERMISSIONS_REQUEST_CODE, + listener + ); + } else { + doLaunch(context, extraData); + JitsiMeetLogger.w(TAG + " Service launched"); + } + } + public static void abort(Context context) { Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class); context.stopService(intent); @@ -96,12 +154,14 @@ public static void abort(Context context) { public void onCreate() { super.onCreate(); - Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, this); + Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, this, tapBackActivity); if (notification == null) { stopSelf(); JitsiMeetLogger.w(TAG + " Couldn't start service, notification is null"); } else { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + startForeground(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK | ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE); + } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) { startForeground(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK); } else { startForeground(NOTIFICATION_ID, notification); @@ -130,13 +190,28 @@ public IBinder onBind(Intent intent) { @Override public int onStartCommand(Intent intent, int flags, int startId) { + final String actionName = intent.getAction(); + final Action action = Action.fromName(actionName); - Boolean isAudioMuted = tryParseIsAudioMuted(intent); + if (action != Action.HANGUP) { + Boolean isAudioMuted = tryParseIsAudioMuted(intent); - if (isAudioMuted != null) { - this.isAudioMuted = Boolean.parseBoolean(intent.getStringExtra("muted")); + if (isAudioMuted != null) { + this.isAudioMuted = Boolean.parseBoolean(intent.getStringExtra("muted")); + } + + if (tapBackActivity == null) { + String targetActivityName = intent.getExtras().getString(ACTIVITY_DATA_KEY); + Class targetActivity = null; + try { + targetActivity = Class.forName(targetActivityName).asSubclass(Activity.class); + tapBackActivity = targetActivity; + } catch (ClassNotFoundException e) { + JitsiMeetLogger.w(TAG + " Could not find target Activity: " + targetActivityName); + } + } - Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, this); + Notification notification = OngoingNotification.buildOngoingConferenceNotification(this.isAudioMuted, this, tapBackActivity); if (notification == null) { stopSelf(); JitsiMeetLogger.w(TAG + " Couldn't start service, notification is null"); @@ -146,9 +221,6 @@ public int onStartCommand(Intent intent, int flags, int startId) { } } - final String actionName = intent.getAction(); - final Action action = Action.fromName(actionName); - // When starting the service, there is no action passed in the intent if (action != null) { switch (action) { @@ -221,8 +293,9 @@ private class BroadcastReceiver extends android.content.BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + Class tapBackActivity = JitsiMeetOngoingConferenceService.this.tapBackActivity; isAudioMuted = Boolean.parseBoolean(intent.getStringExtra("muted")); - Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, context); + Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, context, tapBackActivity); if (notification == null) { stopSelf(); JitsiMeetLogger.w(TAG + " Couldn't update service, notification is null"); diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java index 3c523e44038b..d107d178f0b4 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java @@ -17,6 +17,7 @@ package org.jitsi.meet.sdk; import android.app.Activity; +import android.app.Application; import android.content.Context; import android.os.Bundle; import android.util.AttributeSet; @@ -33,10 +34,9 @@ public class JitsiMeetView extends FrameLayout { /** - * Background color used by {@code BaseReactView} and the React Native root - * view. + * Background color. Should match the background color set in JS. */ - private static final int BACKGROUND_COLOR = 0xFF111111; + public static final int BACKGROUND_COLOR = 0xFF040404; /** * React Native root view. @@ -197,8 +197,6 @@ private void initialize(@NonNull Context context) { } setBackgroundColor(BACKGROUND_COLOR); - - ReactInstanceManagerHolder.initReactInstanceManager((Activity) context); } /** diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiVideoDecoderFactory.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiVideoDecoderFactory.java new file mode 100644 index 000000000000..1beaf4cc63fa --- /dev/null +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiVideoDecoderFactory.java @@ -0,0 +1,84 @@ +package org.jitsi.meet.sdk; + +/* + * Copyright 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +import android.media.MediaCodecInfo; +import androidx.annotation.Nullable; + +import com.oney.WebRTCModule.webrtcutils.SoftwareVideoDecoderFactoryProxy; + +import org.webrtc.EglBase; +import org.webrtc.HardwareVideoDecoderFactory; +import org.webrtc.JitsiPlatformVideoDecoderFactory; +import org.webrtc.Predicate; +import org.webrtc.VideoCodecInfo; +import org.webrtc.VideoDecoder; +import org.webrtc.VideoDecoderFactory; +import org.webrtc.VideoDecoderFallback; + +import java.util.Arrays; +import java.util.LinkedHashSet; + +/** + * Custom decoder factory which uses HW decoders and falls back to SW. + */ +public class JitsiVideoDecoderFactory implements VideoDecoderFactory { + private final VideoDecoderFactory hardwareVideoDecoderFactory; + private final VideoDecoderFactory softwareVideoDecoderFactory = new SoftwareVideoDecoderFactoryProxy(); + private final VideoDecoderFactory platformSoftwareVideoDecoderFactory; + + /** + * Predicate to filter out the AV1 hardware decoder, as we've seen decoding issues with it. + */ + private static final String GOOGLE_AV1_DECODER = "c2.google.av1"; + private static final Predicate hwCodecPredicate = arg -> { + // Filter out the Google AV1 codec. + return !arg.getName().startsWith(GOOGLE_AV1_DECODER); + }; + private static final Predicate swCodecPredicate = arg -> { + // Noop, just making sure we can customize it easily if needed. + return true; + }; + + /** + * Create decoder factory using default hardware decoder factory. + */ + public JitsiVideoDecoderFactory(@Nullable EglBase.Context eglContext) { + this.hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory(eglContext, hwCodecPredicate); + this.platformSoftwareVideoDecoderFactory = new JitsiPlatformVideoDecoderFactory(eglContext, swCodecPredicate); + } + + @Override + public @Nullable VideoDecoder createDecoder(VideoCodecInfo codecType) { + VideoDecoder softwareDecoder = softwareVideoDecoderFactory.createDecoder(codecType); + final VideoDecoder hardwareDecoder = hardwareVideoDecoderFactory.createDecoder(codecType); + if (softwareDecoder == null) { + softwareDecoder = platformSoftwareVideoDecoderFactory.createDecoder(codecType); + } + if (hardwareDecoder != null && softwareDecoder != null) { + // Both hardware and software supported, wrap it in a software fallback + return new VideoDecoderFallback( + /* fallback= */ softwareDecoder, /* primary= */ hardwareDecoder); + } + return hardwareDecoder != null ? hardwareDecoder : softwareDecoder; + } + + @Override + public VideoCodecInfo[] getSupportedCodecs() { + LinkedHashSet supportedCodecInfos = new LinkedHashSet<>(); + + supportedCodecInfos.addAll(Arrays.asList(softwareVideoDecoderFactory.getSupportedCodecs())); + supportedCodecInfos.addAll(Arrays.asList(hardwareVideoDecoderFactory.getSupportedCodecs())); + supportedCodecInfos.addAll(Arrays.asList(platformSoftwareVideoDecoderFactory.getSupportedCodecs())); + + return supportedCodecInfos.toArray(new VideoCodecInfo[supportedCodecInfos.size()]); + } +} diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiVideoEncoderFactory.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiVideoEncoderFactory.java new file mode 100644 index 000000000000..5d075ab75d66 --- /dev/null +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiVideoEncoderFactory.java @@ -0,0 +1,16 @@ +package org.jitsi.meet.sdk; + +import androidx.annotation.Nullable; + +import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoEncoderFactory; + +import org.webrtc.EglBase; + +/** + * Custom encoder factory which uses HW for H.264 and SW for everything else. + */ +public class JitsiVideoEncoderFactory extends H264AndSoftwareVideoEncoderFactory { + public JitsiVideoEncoderFactory(@Nullable EglBase.Context eglContext) { + super(eglContext); + } +} diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingNotification.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingNotification.java index 82a38a391a29..63484f9bf7e7 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingNotification.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingNotification.java @@ -29,8 +29,6 @@ import androidx.annotation.StringRes; import androidx.core.app.NotificationCompat; -import android.os.Build; - /** * Helper class for creating the ongoing notification which is used with @@ -45,10 +43,6 @@ class OngoingNotification { static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel"; static void createNotificationChannel(Activity context) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - return; - } - if (context == null) { JitsiMeetLogger.w(TAG + " Cannot create notification channel: no current context"); return; @@ -73,14 +67,13 @@ static void createNotificationChannel(Activity context) { notificationManager.createNotificationChannel(channel); } - static Notification buildOngoingConferenceNotification(Boolean isMuted, Context context) { - + static Notification buildOngoingConferenceNotification(Boolean isMuted, Context context, Class tapBackActivity) { if (context == null) { JitsiMeetLogger.w(TAG + " Cannot create notification: no current context"); return null; } - Intent notificationIntent = new Intent(context, context.getClass()); + Intent notificationIntent = new Intent(context, tapBackActivity == null ? context.getClass() : tapBackActivity); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, ONGOING_CONFERENCE_CHANNEL_ID); diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/PictureInPictureModule.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/PictureInPictureModule.java index a60e5e78e36a..4a958469a690 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/PictureInPictureModule.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/PictureInPictureModule.java @@ -20,7 +20,6 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.PictureInPictureParams; -import android.os.Build; import android.util.Rational; import com.facebook.react.bridge.Promise; @@ -53,7 +52,7 @@ public PictureInPictureModule(ReactApplicationContext reactContext) { // Android Go devices don't support PiP. There doesn't seem to be a better way to detect it than // to use ActivityManager.isLowRamDevice(). // https://stackoverflow.com/questions/58340558/how-to-detect-android-go - isSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !am.isLowRamDevice(); + isSupported = !am.isLowRamDevice(); } /** @@ -82,7 +81,6 @@ public Map getConstants() { * including when the activity is not visible (paused or stopped), if the * screen is locked or if the user has an activity pinned. */ - @TargetApi(Build.VERSION_CODES.O) public void enterPictureInPicture() { if (!isEnabled) { return; diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/RNConnectionService.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/RNConnectionService.java index 58e48b394883..24451e77fe5d 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/RNConnectionService.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/RNConnectionService.java @@ -3,7 +3,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.telecom.DisconnectCause; import android.telecom.PhoneAccount; @@ -32,7 +31,6 @@ * * @author Pawel Domas */ -@RequiresApi(api = Build.VERSION_CODES.O) @ReactModule(name = RNConnectionService.NAME) class RNConnectionService extends ReactContextBaseJavaModule { @@ -53,7 +51,6 @@ class RNConnectionService extends ReactContextBaseJavaModule { * @param audioRoute the new audio route to be set. See * {@link android.telecom.CallAudioState} constants prefixed with "ROUTE_". */ - @RequiresApi(api = Build.VERSION_CODES.O) static void setAudioRoute(int audioRoute) { for (ConnectionService.ConnectionImpl c : ConnectionService.getConnections()) { diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java index b39cf1dcfb2c..cac5e7832a74 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java @@ -16,28 +16,25 @@ package org.jitsi.meet.sdk; -import android.app.Activity; -import android.util.Log; +import android.annotation.SuppressLint; +import android.app.Application; import androidx.annotation.Nullable; +import com.facebook.hermes.reactexecutor.HermesExecutorFactory; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; import com.facebook.react.common.LifecycleState; -import com.facebook.react.jscexecutor.JSCExecutorFactory; import com.facebook.react.modules.core.DeviceEventManagerModule; import com.facebook.react.uimanager.ViewManager; import com.oney.WebRTCModule.EglUtils; import com.oney.WebRTCModule.WebRTCModuleOptions; -import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoDecoderFactory; -import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoEncoderFactory; -import org.devio.rn.splashscreen.SplashScreenModule; +import org.jitsi.meet.sdk.log.JitsiMeetLogger; import org.webrtc.EglBase; -import org.webrtc.Logging; import java.lang.reflect.Constructor; import java.util.ArrayList; @@ -67,10 +64,8 @@ private static List createNativeModules(ReactApplicationContext re new AudioModeModule(reactContext), new DropboxModule(reactContext), new ExternalAPIModule(reactContext), - new JavaScriptSandboxModule(reactContext), new LocaleDetector(reactContext), new LogBridgeModule(reactContext), - new SplashScreenModule(reactContext), new PictureInPictureModule(reactContext), new ProximityModule(reactContext), new org.jitsi.meet.sdk.net.NAT64AddrInfoModule(reactContext))); @@ -92,7 +87,7 @@ static List getReactNativePackages() { new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(), new com.ocetnik.timer.BackgroundTimerPackage(), new com.calendarevents.RNCalendarEventsPackage(), - new com.corbt.keepawake.KCKeepAwakePackage(), + new com.sayem.keepawake.KCKeepAwakePackage(), new com.facebook.react.shell.MainReactPackage(), new com.reactnativecommunity.clipboard.ClipboardPackage(), new com.reactnativecommunity.netinfo.NetInfoPackage(), @@ -106,12 +101,13 @@ static List getReactNativePackages() { new com.oney.WebRTCModule.WebRTCModulePackage(), new com.swmansion.gesturehandler.RNGestureHandlerPackage(), new org.linusu.RNGetRandomValuesPackage(), - new com.rnimmersivemode.RNImmersiveModePackage(), new com.swmansion.rnscreens.RNScreensPackage(), new com.zmxv.RNSound.RNSoundPackage(), new com.th3rdwave.safeareacontext.SafeAreaContextPackage(), new com.horcrux.svg.SvgPackage(), new org.wonday.orientation.OrientationPackage(), + new com.splashview.SplashViewPackage(), + new com.worklets.WorkletsCorePackage(), new ReactPackageAdapter() { @Override public List createNativeModules(ReactApplicationContext reactContext) { @@ -126,41 +122,36 @@ public List createViewManagers(ReactApplicationContext reactContext // AmplitudeReactNativePackage try { Class amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage"); - Constructor constructor = amplitudePackageClass.getConstructor(); + Constructor constructor = amplitudePackageClass.getConstructor(); packages.add((ReactPackage)constructor.newInstance()); } catch (Exception e) { // Ignore any error, the module is not compiled when LIBRE_BUILD is enabled. - Log.d(TAG, "Not loading AmplitudeReactNativePackage"); + JitsiMeetLogger.d(TAG, "Not loading AmplitudeReactNativePackage"); } // GiphyReactNativeSdkPackage try { - Class giphyPackageClass = Class.forName("com.giphyreactnativesdk.GiphyReactNativeSdkPackage"); - Constructor constructor = giphyPackageClass.getConstructor(); + Class giphyPackageClass = Class.forName("com.giphyreactnativesdk.RTNGiphySdkPackage"); + Constructor constructor = giphyPackageClass.getConstructor(); packages.add((ReactPackage)constructor.newInstance()); } catch (Exception e) { // Ignore any error, the module is not compiled when LIBRE_BUILD is enabled. - Log.d(TAG, "Not loading GiphyReactNativeSdkPackage"); + JitsiMeetLogger.d(TAG, "Not loading GiphyReactNativeSdkPackage"); } // RNGoogleSignInPackage try { Class googlePackageClass = Class.forName("com.reactnativegooglesignin.RNGoogleSigninPackage"); - Constructor constructor = googlePackageClass.getConstructor(); + Constructor constructor = googlePackageClass.getConstructor(); packages.add((ReactPackage)constructor.newInstance()); } catch (Exception e) { // Ignore any error, the module is not compiled when LIBRE_BUILD is enabled. - Log.d(TAG, "Not loading RNGoogleSignInPackage"); + JitsiMeetLogger.d(TAG, "Not loading RNGoogleSignInPackage"); } return packages; } - static JSCExecutorFactory getReactNativeJSFactory() { - // Keep on using JSC, the jury is out on Hermes. - return new JSCExecutorFactory("", ""); - } - /** * Helper function to send an event to JavaScript. * @@ -174,7 +165,7 @@ static void emitEvent( = ReactInstanceManagerHolder.getReactInstanceManager(); if (reactInstanceManager != null) { - ReactContext reactContext + @SuppressLint("VisibleForTests") ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); if (reactContext != null) { @@ -197,7 +188,7 @@ static void emitEvent( */ static T getNativeModule( Class nativeModuleClass) { - ReactContext reactContext + @SuppressLint("VisibleForTests") ReactContext reactContext = reactInstanceManager != null ? reactInstanceManager.getCurrentReactContext() : null; @@ -205,18 +196,6 @@ static T getNativeModule( ? reactContext.getNativeModule(nativeModuleClass) : null; } - /** - * Gets the current {@link Activity} linked to React Native. - * - * @return An activity attached to React Native. - */ - static Activity getCurrentActivity() { - ReactContext reactContext - = reactInstanceManager != null - ? reactInstanceManager.getCurrentReactContext() : null; - return reactContext != null ? reactContext.getCurrentActivity() : null; - } - static ReactInstanceManager getReactInstanceManager() { return reactInstanceManager; } @@ -227,35 +206,38 @@ static ReactInstanceManager getReactInstanceManager() { * time. All {@code ReactRootView} instances will be tied to the one and * only {@code ReactInstanceManager}. * - * @param activity {@code Activity} current running Activity. + * @param app {@code Application} */ - static void initReactInstanceManager(Activity activity) { + static void initReactInstanceManager(Application app) { if (reactInstanceManager != null) { return; } // Initialize the WebRTC module options. WebRTCModuleOptions options = WebRTCModuleOptions.getInstance(); - - EglBase.Context eglContext = EglUtils.getRootEglBaseContext(); - - options.videoDecoderFactory = new H264AndSoftwareVideoDecoderFactory(eglContext); - options.videoEncoderFactory = new H264AndSoftwareVideoEncoderFactory(eglContext); options.enableMediaProjectionService = true; -// options.loggingSeverity = Logging.Severity.LS_INFO; + if (options.videoDecoderFactory == null || options.videoEncoderFactory == null) { + EglBase.Context eglContext = EglUtils.getRootEglBaseContext(); + if (options.videoDecoderFactory == null) { + options.videoDecoderFactory = new JitsiVideoDecoderFactory(eglContext); + } + if (options.videoEncoderFactory == null) { + options.videoEncoderFactory = new JitsiVideoEncoderFactory(eglContext); + } + } - Log.d(TAG, "initializing RN with Activity"); + JitsiMeetLogger.d(TAG, "initializing RN"); reactInstanceManager = ReactInstanceManager.builder() - .setApplication(activity.getApplication()) - .setCurrentActivity(activity) + .setApplication(app) + .setCurrentActivity(null) .setBundleAssetName("index.android.bundle") .setJSMainModulePath("index.android") - .setJavaScriptExecutorFactory(getReactNativeJSFactory()) + .setJavaScriptExecutorFactory(new HermesExecutorFactory()) .addPackages(getReactNativePackages()) .setUseDeveloperSupport(BuildConfig.DEBUG) - .setInitialLifecycleState(LifecycleState.RESUMED) + .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) .build(); } } diff --git a/android/sdk/src/main/java/org/webrtc/JitsiPlatformVideoDecoderFactory.java b/android/sdk/src/main/java/org/webrtc/JitsiPlatformVideoDecoderFactory.java new file mode 100644 index 000000000000..97522a3d89ab --- /dev/null +++ b/android/sdk/src/main/java/org/webrtc/JitsiPlatformVideoDecoderFactory.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +package org.webrtc; + +import android.media.MediaCodecInfo; +import androidx.annotation.Nullable; + +/** Factory for Android platform software VideoDecoders. */ +public class JitsiPlatformVideoDecoderFactory extends MediaCodecVideoDecoderFactory { + /** + * Default allowed predicate. + */ + private static final Predicate defaultAllowedPredicate = + codecInfo -> { + // We only want to use the platform software codecs. + return MediaCodecUtils.isSoftwareOnly(codecInfo); + }; + + /** + * Creates a PlatformSoftwareVideoDecoderFactory that supports surface texture rendering. + * + * @param sharedContext The textures generated will be accessible from this context. May be null, + * this disables texture support. + */ + public JitsiPlatformVideoDecoderFactory(@Nullable EglBase.Context sharedContext) { + super(sharedContext, defaultAllowedPredicate); + } + + public JitsiPlatformVideoDecoderFactory(@Nullable EglBase.Context sharedContext, @Nullable Predicate codecAllowedPredicate) { + super(sharedContext, codecAllowedPredicate == null ? defaultAllowedPredicate : codecAllowedPredicate.and(defaultAllowedPredicate)); + } +} diff --git a/android/sdk/src/main/res/values/colors.xml b/android/sdk/src/main/res/values/colors.xml new file mode 100644 index 000000000000..cd07ec878355 --- /dev/null +++ b/android/sdk/src/main/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #040404 + #040404 + \ No newline at end of file diff --git a/android/sdk/src/main/res/values/styles.xml b/android/sdk/src/main/res/values/styles.xml index 83cac6b10ddb..dd4c3baa5b30 100644 --- a/android/sdk/src/main/res/values/styles.xml +++ b/android/sdk/src/main/res/values/styles.xml @@ -1,3 +1,6 @@ - diff --git a/android/settings.gradle b/android/settings.gradle index 68053e1c1e26..da189dff7419 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,9 +1,7 @@ -rootProject.name = 'jitsi-meet' - include ':app', ':sdk' include ':react-native-amplitude' -project(':react-native-amplitude').projectDir = new File(rootProject.projectDir, '../node_modules/@amplitude/react-native/android') +project(':react-native-amplitude').projectDir = new File(rootProject.projectDir, '../node_modules/@amplitude/analytics-react-native/android') include ':react-native-async-storage' project(':react-native-async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-async-storage/async-storage/android') include ':react-native-background-timer' @@ -11,7 +9,7 @@ project(':react-native-background-timer').projectDir = new File(rootProject.proj include ':react-native-calendar-events' project(':react-native-calendar-events').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-calendar-events/android') include ':react-native-community_clipboard' -project(':react-native-community_clipboard').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/clipboard/android') +project(':react-native-community_clipboard').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-clipboard/clipboard/android') include ':react-native-community_netinfo' project(':react-native-community_netinfo').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/netinfo/android') include ':react-native-default-preference' @@ -26,10 +24,8 @@ include ':react-native-giphy' project(':react-native-giphy').projectDir = new File(rootProject.projectDir, '../node_modules/@giphy/react-native-sdk/android') include ':react-native-google-signin' project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-google-signin/google-signin/android') -include ':react-native-immersive-mode' -project(':react-native-immersive-mode').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive-mode/android') include ':react-native-keep-awake' -project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android') +project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/@sayem314/react-native-keep-awake/android') include ':react-native-orientation-locker' project(':react-native-orientation-locker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation-locker/android') include ':react-native-pager-view' @@ -44,8 +40,8 @@ include ':react-native-slider' project(':react-native-slider').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/slider/android') include ':react-native-sound' project(':react-native-sound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound/android') -include ':react-native-splash-screen' -project(':react-native-splash-screen').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-screen/android') +include ':react-native-splash-view' +project(':react-native-splash-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-view/android') include ':react-native-svg' project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') include ':react-native-video' @@ -54,3 +50,5 @@ include ':react-native-webrtc' project(':react-native-webrtc').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webrtc/android') include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') +include ':react-native-worklets-core' +project(':react-native-worklets-core').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-worklets-core/android') diff --git a/app.js b/app.js index 771eaa4c441e..94bfe2b69d85 100644 --- a/app.js +++ b/app.js @@ -1,4 +1,4 @@ -/* application specific logic */ +/* Jitsi Meet app main entrypoint. */ // Re-export jQuery // FIXME: Remove this requirement from torture tests. @@ -8,6 +8,32 @@ window.$ = window.jQuery = $; import 'focus-visible'; +/* +* Safari polyfill for createImageBitmap +* https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap +* +* Support source image types: Canvas. +*/ +if (!('createImageBitmap' in window)) { + window.createImageBitmap = function(data) { + return new Promise((resolve, reject) => { + let dataURL; + + if (data instanceof HTMLCanvasElement) { + dataURL = data.toDataURL(); + } else { + reject(new Error('createImageBitmap does not handle the provided image source type')); + } + const img = document.createElement('img'); + + img.addEventListener('load', () => { + resolve(img); + }); + img.src = dataURL; + }); + }; +} + // We need to setup the jitsi-local-storage as early as possible so that we can start using it. // NOTE: If jitsi-local-storage is used before the initial setup is performed this will break the use case when we use // the local storage from the parent page when the localStorage is disabled. Also the setup is relying that diff --git a/babel.config.js b/babel.config.js index 543e93d1e59f..4141f6af917e 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,9 +1,20 @@ module.exports = { - presets: [ 'module:metro-react-native-babel-preset' ], + presets: [ 'module:@react-native/babel-preset' ], env: { production: { plugins: [ 'react-native-paper/babel' ] } }, - plugins: [ 'optional-require' ] + + // This happens because react native has conflict with @babel/plugin-transform-private-methods plugin + // https://github.com/ethers-io/ethers.js/discussions/4309#discussioncomment-6694524 + plugins: [ + 'optional-require', + [ + '@babel/plugin-transform-private-methods', { + 'loose': true + } + ], + 'react-native-worklets-core/plugin' + ] }; diff --git a/conference.js b/conference.js index e030755798ea..7658165c7bfb 100644 --- a/conference.js +++ b/conference.js @@ -2,9 +2,7 @@ import { jitsiLocalStorage } from '@jitsi/js-utils'; import Logger from '@jitsi/logger'; -import EventEmitter from 'events'; import { ENDPOINT_TEXT_MESSAGE_NAME } from './modules/API/constants'; -import { AUDIO_ONLY_SCREEN_SHARE_NO_TRACK } from './modules/UI/UIErrors'; import mediaDeviceHelper from './modules/devices/mediaDeviceHelper'; import Recorder from './modules/recorder/Recorder'; import { createTaskQueue } from './modules/util/helpers'; @@ -16,8 +14,6 @@ import { } from './react/features/analytics/AnalyticsEvents'; import { sendAnalytics } from './react/features/analytics/functions'; import { maybeRedirectToWelcomePage, reloadWithStoredParams } from "./react/features/app/actions"; -import { showModeratedNotification } from "./react/features/av-moderation/actions"; -import { shouldShowModeratedNotification } from "./react/features/av-moderation/functions"; import { _conferenceWillJoin, authStatusChanged, @@ -25,6 +21,7 @@ import { conferenceJoinInProgress, conferenceJoined, conferenceLeft, + conferencePropertiesChanged, conferenceSubjectChanged, conferenceTimestampChanged, conferenceUniqueIdSet, @@ -50,9 +47,10 @@ import { commonUserLeftHandling, getConferenceOptions, sendLocalParticipant, -} from "./react/features/base/conference/functions"; -import { getReplaceParticipant } from "./react/features/base/config/functions"; -import { connect } from "./react/features/base/connection/actions.web"; + updateTrackMuteState +} from './react/features/base/conference/functions'; +import { getReplaceParticipant, getSsrcRewritingFeatureFlag } from './react/features/base/config/functions'; +import { connect } from './react/features/base/connection/actions.web'; import { checkAndNotifyForNewDevice, getAvailableDevices, @@ -73,7 +71,6 @@ import { JitsiConferenceEvents, JitsiE2ePingEvents, JitsiMediaDevicesEvents, - JitsiTrackErrors, JitsiTrackEvents, browser, } from "./react/features/base/lib-jitsi-meet"; @@ -82,11 +79,12 @@ import { setAudioAvailable, setAudioMuted, setAudioUnmutePermissions, + setInitialGUMPromise, setVideoAvailable, setVideoMuted, - setVideoUnmutePermissions, -} from "./react/features/base/media/actions"; -import { MEDIA_TYPE, VIDEO_TYPE } from "./react/features/base/media/constants"; + setVideoUnmutePermissions +} from './react/features/base/media/actions'; +import { MEDIA_TYPE, VIDEO_MUTISM_AUTHORITY, VIDEO_TYPE } from './react/features/base/media/constants'; import { getStartWithAudioMuted, getStartWithVideoMuted, @@ -110,13 +108,17 @@ import { import { getLocalParticipant, getNormalizedDisplayName, - getVirtualScreenshareParticipantByOwnerId, -} from "./react/features/base/participants/functions"; -import { updateSettings } from "./react/features/base/settings/actions"; + getParticipantByIdOrUndefined, + getVirtualScreenshareParticipantByOwnerId +} from './react/features/base/participants/functions'; +import { updateSettings } from './react/features/base/settings/actions'; import { addLocalTrack, + createInitialAVTracks, destroyLocalTracks, + displayErrorsForCreateInitialLocalTracks, replaceLocalTrack, + setGUMPendingStateOnFailedTracks, toggleScreensharing as toggleScreensharingA, trackAdded, trackRemoved, @@ -125,18 +127,18 @@ import { createLocalTracksF, getLocalJitsiAudioTrack, getLocalJitsiVideoTrack, - getLocalTracks, getLocalVideoTrack, isLocalTrackMuted, isUserInteractionRequiredForUnmute, } from "./react/features/base/tracks/functions"; +import { getLocalJitsiAudioTrackSettings } from './react/features/base/tracks/functions.web'; import { downloadJSON } from "./react/features/base/util/downloadJSON"; +import { getJitsiMeetGlobalNSConnectionTimes } from './react/features/base/util/helpers'; import { openLeaveReasonDialog } from "./react/features/conference/actions.web"; import { showDesktopPicker } from "./react/features/desktop-picker/actions"; import { appendSuffix } from "./react/features/display-name/functions"; import { toggleE2EE } from "./react/features/e2ee/actions.ts"; import { maybeOpenFeedbackDialog, submitFeedback } from "./react/features/feedback/actions"; -import { initKeyboardShortcuts } from "./react/features/keyboard-shortcuts/actions"; import { maybeSetLobbyChatMessageListener } from "./react/features/lobby/actions.any"; import { setNoiseSuppressionEnabled } from "./react/features/noise-suppression/actions"; import { @@ -147,32 +149,29 @@ import { } from "./react/features/notifications/actions"; import { DATA_CHANNEL_CLOSED_NOTIFICATION_ID, - NOTIFICATION_TIMEOUT_TYPE, -} from "./react/features/notifications/constants"; -import { isModerationNotificationDisplayed } from "./react/features/notifications/functions"; -import { mediaPermissionPromptVisibilityChanged } from "./react/features/overlay/actions"; -import { suspendDetected } from "./react/features/power-monitor/actions"; -import { initPrejoin } from "./react/features/prejoin/actions"; -import { isPrejoinPageVisible } from "./react/features/prejoin/functions"; -import { disableReceiver, stopReceiver } from "./react/features/remote-control/actions"; -import { setScreenAudioShareState } from "./react/features/screen-share/actions.web"; -import { isScreenAudioShared } from "./react/features/screen-share/functions"; -import { toggleScreenshotCaptureSummary } from "./react/features/screenshot-capture/actions"; -import { AudioMixerEffect } from "./react/features/stream-effects/audio-mixer/AudioMixerEffect"; -import { createRnnoiseProcessor } from "./react/features/stream-effects/rnnoise"; -import { handleToggleVideoMuted } from "./react/features/toolbox/actions.any"; -import { muteLocal } from "./react/features/video-menu/actions.any"; -import UIEvents from "./service/UI/UIEvents"; - -const logger = Logger.getLogger(__filename); - -const eventEmitter = new EventEmitter(); - + NOTIFICATION_TIMEOUT_TYPE +} from './react/features/notifications/constants'; +import { suspendDetected } from './react/features/power-monitor/actions'; +import { initPrejoin, isPrejoinPageVisible } from './react/features/prejoin/functions'; +import { disableReceiver, stopReceiver } from './react/features/remote-control/actions'; +import { setScreenAudioShareState } from './react/features/screen-share/actions.web'; +import { isScreenAudioShared } from './react/features/screen-share/functions'; +import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture/actions'; +import { setAudioSettings } from './react/features/settings/actions.web'; +import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect'; +import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise'; +import { handleToggleVideoMuted } from './react/features/toolbox/actions.any'; +import { transcriberJoined, transcriberLeft } from './react/features/transcribing/actions'; +import { muteLocal } from './react/features/video-menu/actions.any'; + +const logger = Logger.getLogger('app:conference-web'); let room; /* * Logic to open a desktop picker put on the window global for - * lib-jitsi-meet to detect and invoke + * lib-jitsi-meet to detect and invoke. + * + * TODO: remove once the Electron SDK supporting gDM has been out for a while. */ window.JitsiMeetScreenObtainer = { openDesktopPicker(options, onSourceChoose) { @@ -204,23 +203,6 @@ function sendData(command, value) { room.sendCommand(command, { value }); } -/** - * Mute or unmute local audio stream if it exists. - * @param {boolean} muted - if audio stream should be muted or unmuted. - */ -function muteLocalAudio(muted) { - APP.store.dispatch(setAudioMuted(muted)); -} - -/** - * Mute or unmute local video stream if it exists. - * @param {boolean} muted if video stream should be muted or unmuted. - * - */ -function muteLocalVideo(muted) { - APP.store.dispatch(setVideoMuted(muted)); -} - /** * A queue for the async replaceLocalTrack action so that multiple audio * replacements cannot happen simultaneously. This solves the issue where @@ -403,27 +385,6 @@ function disconnect() { return APP.connection.disconnect().then(onDisconnected, onDisconnected); } -/** - * Sets the GUM pending state for the tracks that have failed. - * - * NOTE: Some of the track that we will be setting to GUM pending state NONE may not have failed but they may have - * been requested. This won't be a problem because their current GUM pending state will be NONE anyway. - * @param {JitsiLocalTrack} tracks - The tracks that have been created. - * @returns {void} - */ -function setGUMPendingStateOnFailedTracks(tracks) { - const tracksTypes = tracks.map(track => { - if (track.getVideoType() === VIDEO_TYPE.DESKTOP) { - return MEDIA_TYPE.SCREENSHARE; - } - - return track.getType(); - }); - const nonPendingTracks = [ MEDIA_TYPE.AUDIO, MEDIA_TYPE.VIDEO ].filter(type => !tracksTypes.includes(type)); - - APP.store.dispatch(gumPending(nonPendingTracks, IGUMPendingState.NONE)); -} - export default { /** * Flag used to delay modification of the muted status of local media tracks @@ -452,34 +413,26 @@ export default { * without any audio tracks. * @param {boolean} options.startWithVideoMuted - will start the conference * without any video tracks. + * @param {boolean} recordTimeMetrics - If true time metrics will be recorded. * @returns {Promise, Object} */ - createInitialLocalTracks(options = {}) { + createInitialLocalTracks(options = {}, recordTimeMetrics = false) { const errors = {}; // Always get a handle on the audio input device so that we have statistics (such as "No audio input" or // "Are you trying to speak?" ) even if the user joins the conference muted. - const initialDevices = config.startSilent || config.disableInitialGUM ? [] : [ MEDIA_TYPE.AUDIO ]; + const initialDevices = config.startSilent || config.disableInitialGUM ? [] : [MEDIA_TYPE.AUDIO]; const requestedAudio = !config.disableInitialGUM; let requestedVideo = false; if (!config.disableInitialGUM - && !options.startWithVideoMuted - && !options.startAudioOnly - && !options.startScreenSharing) { + && !options.startWithVideoMuted + && !options.startAudioOnly + && !options.startScreenSharing) { initialDevices.push(MEDIA_TYPE.VIDEO); requestedVideo = true; } - if (!config.disableInitialGUM) { - JitsiMeetJS.mediaDevices.addEventListener( - JitsiMediaDevicesEvents.PERMISSION_PROMPT_IS_SHOWN, - browserName => - APP.store.dispatch( - mediaPermissionPromptVisibilityChanged(true, browserName)) - ); - } - let tryCreateLocalTracks = Promise.resolve([]); // On Electron there is no permission prompt for granting permissions. That's why we don't need to @@ -487,27 +440,26 @@ export default { // probably never resolve. const timeout = browser.isElectron() ? 15000 : 60000; const audioOptions = { - devices: [ MEDIA_TYPE.AUDIO ], - timeout, - firePermissionPromptIsShownEvent: true + devices: [MEDIA_TYPE.AUDIO], + timeout }; // Spot uses the _desktopSharingSourceDevice config option to use an external video input device label as // screenshare and calls getUserMedia instead of getDisplayMedia for capturing the media. if (options.startScreenSharing && config._desktopSharingSourceDevice) { tryCreateLocalTracks = this._createDesktopTrack() - .then(([ desktopStream ]) => { + .then(([desktopStream]) => { if (!requestedAudio) { - return [ desktopStream ]; + return [desktopStream]; } return createLocalTracksF(audioOptions) - .then(([ audioStream ]) => - [ desktopStream, audioStream ]) + .then(([audioStream]) => + [desktopStream, audioStream]) .catch(error => { errors.audioOnlyError = error; - return [ desktopStream ]; + return [desktopStream]; }); }) .catch(error => { @@ -522,113 +474,22 @@ export default { return []; }); } else if (requestedAudio || requestedVideo) { - APP.store.dispatch(gumPending(initialDevices, IGUMPendingState.PENDING_UNMUTE)); - tryCreateLocalTracks = createLocalTracksF({ + tryCreateLocalTracks = APP.store.dispatch(createInitialAVTracks({ devices: initialDevices, - timeout, - firePermissionPromptIsShownEvent: true - }) - .catch(async error => { - if (error.name === JitsiTrackErrors.TIMEOUT && !browser.isElectron()) { - errors.audioAndVideoError = error; - - return []; - } - - // Retry with separate gUM calls. - const gUMPromises = []; - const tracks = []; - - if (requestedAudio) { - gUMPromises.push(createLocalTracksF(audioOptions)); - } - - if (requestedVideo) { - gUMPromises.push(createLocalTracksF({ - devices: [ MEDIA_TYPE.VIDEO ], - timeout, - firePermissionPromptIsShownEvent: true - })); - } - - const results = await Promise.allSettled(gUMPromises); - let errorMsg; - - results.forEach((result, idx) => { - if (result.status === 'fulfilled') { - tracks.push(result.value[0]); - } else { - errorMsg = result.reason; - const isAudio = idx === 0; - - logger.error(`${isAudio ? 'Audio' : 'Video'} track creation failed with error ${errorMsg}`); - if (isAudio) { - errors.audioOnlyError = errorMsg; - } else { - errors.videoOnlyError = errorMsg; - } - } - }); - - if (errors.audioOnlyError && errors.videoOnlyError) { - errors.audioAndVideoError = errorMsg; - } + timeout + }, recordTimeMetrics)).then(({ tracks, errors: pErrors }) => { + Object.assign(errors, pErrors); return tracks; }); } - // Hide the permissions prompt/overlay as soon as the tracks are created. Don't wait for the connection to - // be established, as in some cases like when auth is required, connection won't be established until the user - // inputs their credentials, but the dialog would be overshadowed by the overlay. - tryCreateLocalTracks.then(tracks => { - APP.store.dispatch(mediaPermissionPromptVisibilityChanged(false)); - - return tracks; - }); - return { tryCreateLocalTracks, errors }; }, - /** - * Displays error notifications according to the state carried by {@code errors} object returned - * by {@link createInitialLocalTracks}. - * @param {Object} errors - the errors (if any) returned by {@link createInitialLocalTracks}. - * - * @returns {void} - * @private - */ - _displayErrorsForCreateInitialLocalTracks(errors) { - const { - audioAndVideoError, - audioOnlyError, - screenSharingError, - videoOnlyError - } = errors; - - // FIXME If there will be microphone error it will cover any screensharing dialog, but it's still better than in - // the reverse order where the screensharing dialog will sometimes be closing the microphone alert - // ($.prompt.close(); is called). Need to figure out dialogs chaining to fix that. - if (screenSharingError) { - this._handleScreenSharingError(screenSharingError); - } - if (audioAndVideoError || audioOnlyError) { - if (audioOnlyError || videoOnlyError) { - // If both requests for 'audio' + 'video' and 'audio' only failed, we assume that there are some - // problems with user's microphone and show corresponding dialog. - APP.store.dispatch(notifyMicError(audioOnlyError)); - APP.store.dispatch(notifyCameraError(videoOnlyError)); - } else { - // If request for 'audio' + 'video' failed, but request for 'audio' only was OK, we assume that we had - // problems with camera and show corresponding dialog. - APP.store.dispatch(notifyCameraError(audioAndVideoError)); - } - } - }, - startConference(tracks) { tracks.forEach(track => { if ((track.isAudioTrack() && this.isLocalAudioMuted()) @@ -680,10 +541,10 @@ export default { * If prejoin page is enabled open an new connection in the background * and create local tracks. * - * @param {{ roomName: string }} options + * @param {{ roomName: string, shouldDispatchConnect }} options * @returns {Promise} */ - async init({ roomName }) { + async init({ roomName, shouldDispatchConnect }) { const state = APP.store.getState(); const initialOptions = { startAudioOnly: config.startAudioOnly, @@ -691,8 +552,12 @@ export default { startWithAudioMuted: getStartWithAudioMuted(state) || isUserInteractionRequiredForUnmute(state), startWithVideoMuted: getStartWithVideoMuted(state) || isUserInteractionRequiredForUnmute(state) }; + const connectionTimes = getJitsiMeetGlobalNSConnectionTimes(); + const startTime = window.performance.now(); - logger.debug(`Executed conference.init with roomName: ${roomName}`); + connectionTimes['conference.init.start'] = startTime; + + logger.debug(`Executed conference.init with roomName: ${roomName} (performance.now=${startTime})`); this.roomName = roomName; @@ -712,67 +577,89 @@ export default { const handleInitialTracks = (options, tracks) => { let localTracks = tracks; - if (options.startWithAudioMuted || room?.isStartAudioMuted()) { + if (options.startWithAudioMuted) { // Always add the track on Safari because of a known issue where audio playout doesn't happen // if the user joins audio and video muted, i.e., if there is no local media capture. if (browser.isWebKitBased()) { this.muteAudio(true, true); } else { - localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO); + localTracks = localTracks.filter(track => { + if (track.getType() === MEDIA_TYPE.AUDIO) { + track.stopStream(); + + return false; + } + + return true; + }); } } - if (room?.isStartVideoMuted()) { - localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.VIDEO); - } return localTracks; }; + const { dispatch, getState } = APP.store; + const createLocalTracksStart = window.performance.now(); - if (isPrejoinPageVisible(state)) { - const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions); - const localTracks = await tryCreateLocalTracks; - - // Initialize device list a second time to ensure device labels get populated in case of an initial gUM - // acceptance; otherwise they may remain as empty strings. - this._initDeviceList(true); + connectionTimes['conference.init.createLocalTracks.start'] = createLocalTracksStart; - if (isPrejoinPageVisible(state)) { - APP.store.dispatch(gumPending([ MEDIA_TYPE.AUDIO, MEDIA_TYPE.VIDEO ], IGUMPendingState.NONE)); + logger.debug(`(TIME) createInitialLocalTracks: ${createLocalTracksStart} `); - return APP.store.dispatch(initPrejoin(localTracks, errors)); - } + const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions, true); - logger.debug('Prejoin screen no longer displayed at the time when tracks were created'); + tryCreateLocalTracks.then(tr => { + const createLocalTracksEnd = window.performance.now(); - this._displayErrorsForCreateInitialLocalTracks(errors); + connectionTimes['conference.init.createLocalTracks.end'] = createLocalTracksEnd; + logger.debug(`(TIME) createInitialLocalTracks finished: ${createLocalTracksEnd} `); + const tracks = handleInitialTracks(initialOptions, tr); - const tracks = handleInitialTracks(initialOptions, localTracks); - - setGUMPendingStateOnFailedTracks(tracks); + this._initDeviceList(true); - return this._setLocalAudioVideoStreams(tracks); - } + const { initialGUMPromise } = getState()['features/base/media']; - const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions); + // Always clear the GUM pending state first, this fixes new-meeting flow GUMPending sticked state + dispatch(gumPending([MEDIA_TYPE.AUDIO, MEDIA_TYPE.VIDEO], IGUMPendingState.NONE)); - return Promise.all([ - tryCreateLocalTracks.then(tr => { - this._displayErrorsForCreateInitialLocalTracks(errors); + if (isPrejoinPageVisible(getState())) { + // Since the conference is not yet created in redux this function will execute synchronous + // which will guarantee us that the local tracks are added to redux before we proceed. + initPrejoin(tracks, errors, dispatch); - return tr; - }).then(tr => { - this._initDeviceList(true); + connectionTimes['conference.init.end'] = window.performance.now(); - const filteredTracks = handleInitialTracks(initialOptions, tr); + // resolve the initialGUMPromise in case connect have finished so that we can proceed to join. + if (initialGUMPromise) { + logger.debug('Resolving the initialGUM promise! (prejoinVisible=true)'); + initialGUMPromise.resolve({ + tracks, + errors + }); + } - setGUMPendingStateOnFailedTracks(filteredTracks); + logger.debug('Clear the initialGUM promise! (prejoinVisible=true)'); - return filteredTracks; - }), - APP.store.dispatch(connect()) - ]).then(([ tracks, _ ]) => { - this.startConference(tracks).catch(logger.error); + // For prejoin we don't need the initial GUM promise since the tracks are already added to the store + // via initPrejoin + dispatch(setInitialGUMPromise()); + } else { + APP.store.dispatch(displayErrorsForCreateInitialLocalTracks(errors)); + setGUMPendingStateOnFailedTracks(tracks, APP.store.dispatch); + + connectionTimes['conference.init.end'] = window.performance.now(); + if (initialGUMPromise) { + logger.debug('Resolving the initialGUM promise!'); + initialGUMPromise.resolve({ + tracks, + errors + }); + } + } }); + + if (shouldDispatchConnect) { + logger.info('Dispatching connect from init since prejoin is not visible.'); + dispatch(connect()); + } }, /** @@ -826,11 +713,12 @@ export default { /** * Simulates toolbar button click for audio mute. Used by shortcuts and API. + * * @param {boolean} mute true for mute and false for unmute. - * @param {boolean} [showUI] when set to false will not display any error * dialogs in case of media permissions error. + * @returns {Promise} */ - muteAudio(mute, showUI = true) { + async muteAudio(mute) { const state = APP.store.getState(); if (!mute @@ -840,55 +728,7 @@ export default { return; } - // check for A/V Moderation when trying to unmute - if (!mute && shouldShowModeratedNotification(MEDIA_TYPE.AUDIO, state)) { - if (!isModerationNotificationDisplayed(MEDIA_TYPE.AUDIO, state)) { - APP.store.dispatch(showModeratedNotification(MEDIA_TYPE.AUDIO)); - } - - return; - } - - // Not ready to modify track's state yet - if (!this._localTracksInitialized) { - // This will only modify base/media.audio.muted which is then synced - // up with the track at the end of local tracks initialization. - muteLocalAudio(mute); - this.updateAudioIconEnabled(); - - return; - } else if (this.isLocalAudioMuted() === mute) { - // NO-OP - return; - } - - const localAudio = getLocalJitsiAudioTrack(APP.store.getState()); - - if (!localAudio && !mute) { - const maybeShowErrorDialog = error => { - showUI && APP.store.dispatch(notifyMicError(error)); - }; - - APP.store.dispatch(gumPending([ MEDIA_TYPE.AUDIO ], IGUMPendingState.PENDING_UNMUTE)); - createLocalTracksF({ devices: [ 'audio' ] }) - .then(([ audioTrack ]) => audioTrack) - .catch(error => { - maybeShowErrorDialog(error); - - // Rollback the audio muted status by using null track - return null; - }) - .then(async audioTrack => { - await this._maybeApplyAudioMixerEffect(audioTrack); - - return this.useAudioStream(audioTrack); - }) - .finally(() => { - APP.store.dispatch(gumPending([ MEDIA_TYPE.AUDIO ], IGUMPendingState.NONE)); - }); - } else { - muteLocalAudio(mute); - } + await APP.store.dispatch(setAudioMuted(mute, true)); }, /** @@ -918,84 +758,19 @@ export default { /** * Simulates toolbar button click for video mute. Used by shortcuts and API. * @param mute true for mute and false for unmute. - * @param {boolean} [showUI] when set to false will not display any error * dialogs in case of media permissions error. */ - muteVideo(mute, showUI = true) { - if (this.videoSwitchInProgress) { - logger.warn('muteVideo - unable to perform operations while video switch is in progress'); - - return; - } - + muteVideo(mute) { const state = APP.store.getState(); if (!mute - && isUserInteractionRequiredForUnmute(state)) { + && isUserInteractionRequiredForUnmute(state)) { logger.error('Unmuting video requires user interaction'); return; } - // check for A/V Moderation when trying to unmute and return early - if (!mute && shouldShowModeratedNotification(MEDIA_TYPE.VIDEO, state)) { - return; - } - - // If not ready to modify track's state yet adjust the base/media - if (!this._localTracksInitialized) { - // This will only modify base/media.video.muted which is then synced - // up with the track at the end of local tracks initialization. - muteLocalVideo(mute); - this.setVideoMuteStatus(); - - return; - } else if (this.isLocalVideoMuted() === mute) { - // NO-OP - return; - } - - const localVideo = getLocalJitsiVideoTrack(state); - - if (!localVideo && !mute && !this.isCreatingLocalTrack) { - const maybeShowErrorDialog = error => { - showUI && APP.store.dispatch(notifyCameraError(error)); - }; - - this.isCreatingLocalTrack = true; - - APP.store.dispatch(gumPending([ MEDIA_TYPE.VIDEO ], IGUMPendingState.PENDING_UNMUTE)); - - // Try to create local video if there wasn't any. - // This handles the case when user joined with no video - // (dismissed screen sharing screen or in audio only mode), but - // decided to add it later on by clicking on muted video icon or - // turning off the audio only mode. - // - // FIXME when local track creation is moved to react/redux - // it should take care of the use case described above - createLocalTracksF({ devices: [ 'video' ] }) - .then(([ videoTrack ]) => videoTrack) - .catch(error => { - // FIXME should send some feedback to the API on error ? - maybeShowErrorDialog(error); - - // Rollback the video muted status by using null track - return null; - }) - .then(videoTrack => { - logger.debug(`muteVideo: calling useVideoStream for track: ${videoTrack}`); - - return this.useVideoStream(videoTrack); - }) - .finally(() => { - this.isCreatingLocalTrack = false; - APP.store.dispatch(gumPending([ MEDIA_TYPE.VIDEO ], IGUMPendingState.NONE)); - }); - } else { - // FIXME show error dialog if it fails (should be handled by react) - muteLocalVideo(mute); - } + APP.store.dispatch(setVideoMuted(mute, VIDEO_MUTISM_AUTHORITY.USER, true)); }, /** @@ -1130,7 +905,7 @@ export default { }, /** - * Will be filled with values only when config.debug is enabled. + * Will be filled with values only when config.testing.testMode is true. * Its used by torture to check audio levels. */ audioLevelsMap: {}, @@ -1176,6 +951,14 @@ export default { downloadJSON(logs, filename); }, + /** + * Download app state, a function that can be called from console while debugging. + * @param filename (optional) specify target filename + */ + saveState(filename = 'meet-state.json') { + downloadJSON(APP.store.getState(), filename); + }, + /** * Exposes a Command(s) API on this instance. It is necessitated by (1) the * desire to keep room private to this instance and (2) the need of other @@ -1240,13 +1023,12 @@ export default { // Restore initial state. this._localTracksInitialized = false; - this.isSharingScreen = false; this.roomName = roomName; const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options); const localTracks = await tryCreateLocalTracks; - this._displayErrorsForCreateInitialLocalTracks(errors); + APP.store.dispatch(displayErrorsForCreateInitialLocalTracks(errors)); localTracks.forEach(track => { if ((track.isAudioTrack() && this.isLocalAudioMuted()) || (track.isVideoTrack() && this.isLocalVideoMuted())) { @@ -1283,11 +1065,12 @@ export default { APP.store.dispatch(gumPending(mutedTrackTypes, IGUMPendingState.NONE)); } - this._setLocalAudioVideoStreams(tracks); this._room = room; // FIXME do not use this APP.store.dispatch(_conferenceWillJoin(room)); + this._setLocalAudioVideoStreams(tracks); + sendLocalParticipant(APP.store, room); this._setupListeners(); @@ -1398,8 +1181,7 @@ export default { return; } - APP.store.dispatch( - replaceLocalTrack(oldTrack, newTrack, room)) + APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack, room)) .then(() => { this.updateAudioIconEnabled(); }) @@ -1419,8 +1201,6 @@ export default { return Boolean(APP.store.getState()['features/base/audio-only'].enabled); }, - videoSwitchInProgress: false, - /** * This fields stores a handler which will create a Promise which turns off * the screen sharing and restores the previous video state (was there @@ -1449,7 +1229,6 @@ export default { */ async _turnScreenSharingOff(didHaveVideo, ignoreDidHaveVideo) { this._untoggleScreenSharing = null; - this.videoSwitchInProgress = true; APP.store.dispatch(stopReceiver()); @@ -1468,8 +1247,8 @@ export default { this._mixerEffect = undefined; this._desktopAudioStream = undefined; - // In case there was no local audio when screen sharing was started the fact that we set the audio stream to - // null will take care of the desktop audio stream cleanup. + // In case there was no local audio when screen sharing was started the fact that we set the audio stream to + // null will take care of the desktop audio stream cleanup. } else if (this._desktopAudioStream) { await room.replaceTrack(this._desktopAudioStream, null); this._desktopAudioStream.dispose(); @@ -1480,8 +1259,8 @@ export default { let promise; if (didHaveVideo && !ignoreDidHaveVideo) { - promise = createLocalTracksF({ devices: [ 'video' ] }) - .then(([ stream ]) => { + promise = createLocalTracksF({ devices: ['video'] }) + .then(([stream]) => { logger.debug(`_turnScreenSharingOff using ${stream} for useVideoStream`); return this.useVideoStream(stream); @@ -1501,13 +1280,11 @@ export default { return promise.then( () => { - this.videoSwitchInProgress = false; sendAnalytics(createScreenSharingEvent('stopped', duration === 0 ? null : duration)); logger.info('Screen sharing stopped.'); }, error => { - this.videoSwitchInProgress = false; logger.error(`_turnScreenSharingOff failed: ${error}`); throw error; @@ -1517,28 +1294,19 @@ export default { /** * Creates desktop (screensharing) {@link JitsiLocalTrack} * - * @param {Object} [options] - Screen sharing options that will be passed to - * createLocalTracks. - * @param {Object} [options.desktopSharing] - * @param {Object} [options.desktopStream] - An existing desktop stream to - * use instead of creating a new desktop stream. * @return {Promise.} - A Promise resolved with * {@link JitsiLocalTrack} for the screensharing or rejected with * {@link JitsiTrackError}. * * @private */ - _createDesktopTrack(options = {}) { + _createDesktopTrack() { const didHaveVideo = !this.isLocalVideoMuted(); - const getDesktopStreamPromise = options.desktopStream - ? Promise.resolve([ options.desktopStream ]) - : createLocalTracksF({ - desktopSharingSourceDevice: options.desktopSharingSources - ? null : config._desktopSharingSourceDevice, - desktopSharingSources: options.desktopSharingSources, - devices: [ 'desktop' ] - }); + const getDesktopStreamPromise = createLocalTracksF({ + desktopSharingSourceDevice: config._desktopSharingSourceDevice, + devices: ['desktop'] + }); return getDesktopStreamPromise.then(desktopStreams => { // Stores the "untoggle" handler which remembers whether was @@ -1546,14 +1314,13 @@ export default { this._untoggleScreenSharing = this._turnScreenSharingOff.bind(this, didHaveVideo); - const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO); const desktopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO); if (desktopAudioStream) { desktopAudioStream.on( JitsiTrackEvents.LOCAL_TRACK_STOPPED, () => { - logger.debug(`Local screensharing audio track stopped. ${this.isSharingScreen}`); + logger.debug('Local screensharing audio track stopped.'); // Handle case where screen share was stopped from the browsers 'screen share in progress' // window. If audio screen sharing is stopped via the normal UX flow this point shouldn't @@ -1565,71 +1332,12 @@ export default { ); } - if (desktopVideoStream) { - desktopVideoStream.on( - JitsiTrackEvents.LOCAL_TRACK_STOPPED, - () => { - logger.debug(`Local screensharing track stopped. ${this.isSharingScreen}`); - - // If the stream was stopped during screen sharing - // session then we should switch back to video. - this.isSharingScreen - && this._untoggleScreenSharing - && this._untoggleScreenSharing(); - } - ); - } - return desktopStreams; }, error => { throw error; }); }, - /** - * Handles {@link JitsiTrackError} returned by the lib-jitsi-meet when - * trying to create screensharing track. It will either do nothing if - * the dialog was canceled on user's request or display an error if - * screensharing couldn't be started. - * @param {JitsiTrackError} error - The error returned by - * {@link _createDesktopTrack} Promise. - * @private - */ - _handleScreenSharingError(error) { - if (error.name === JitsiTrackErrors.SCREENSHARING_USER_CANCELED) { - return; - } - - logger.error('failed to share local desktop', error); - - // Handling: - // JitsiTrackErrors.CONSTRAINT_FAILED - // JitsiTrackErrors.PERMISSION_DENIED - // JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR - // and any other - let descriptionKey; - let titleKey; - - if (error.name === JitsiTrackErrors.PERMISSION_DENIED) { - descriptionKey = 'dialog.screenSharingPermissionDeniedError'; - titleKey = 'dialog.screenSharingFailedTitle'; - } else if (error.name === JitsiTrackErrors.CONSTRAINT_FAILED) { - descriptionKey = 'dialog.cameraConstraintFailedError'; - titleKey = 'deviceError.cameraError'; - } else if (error.name === JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR) { - descriptionKey = 'dialog.screenSharingFailed'; - titleKey = 'dialog.screenSharingFailedTitle'; - } else if (error === AUDIO_ONLY_SCREEN_SHARE_NO_TRACK) { - descriptionKey = 'notify.screenShareNoAudio'; - titleKey = 'notify.screenShareNoAudioTitle'; - } - - APP.store.dispatch(showErrorNotification({ - descriptionKey, - titleKey - }, NOTIFICATION_TIMEOUT_TYPE.LONG)); - }, - /** * Setup interaction between conference and UI. */ @@ -1683,7 +1391,7 @@ export default { } APP.store.dispatch(updateRemoteParticipantFeatures(user)); - logger.log(`USER ${id} connected:`, user); + logger.log(`USER ${id} connected`); APP.UI.addUser(user); }); @@ -1717,7 +1425,6 @@ export default { } APP.store.dispatch(localParticipantRoleChanged(role)); - APP.API.notifyUserRoleChanged(id, role); } else { APP.store.dispatch(participantRoleChanged(id, role)); } @@ -1759,9 +1466,9 @@ export default { newLvl = 0; } - if (config.debug) { + if (config.testing?.testMode) { this.audioLevelsMap[id] = newLvl; - if (config.debugAudioLevels) { + if (config.testing?.debugAudioLevels) { logger.log(`AudioLevel:${id}/${newLvl}`); } } @@ -1772,10 +1479,6 @@ export default { room.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED, (track, participantThatMutedUs) => { if (participantThatMutedUs) { APP.store.dispatch(participantMutedUs(participantThatMutedUs, track)); - if (this.isSharingScreen && track.isVideoTrack()) { - logger.debug('TRACK_MUTE_CHANGED while screen sharing'); - this._turnScreenSharingOff(false); - } } }); @@ -1802,7 +1505,11 @@ export default { room.on( JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP, - conferenceTimestamp => APP.store.dispatch(conferenceTimestampChanged(conferenceTimestamp))); + conferenceTimestamp => { + APP.store.dispatch(conferenceTimestampChanged(conferenceTimestamp)); + APP.API.notifyConferenceCreatedTimestamp(conferenceTimestamp); + } + ); room.on( JitsiConferenceEvents.DISPLAY_NAME_CHANGED, @@ -1833,10 +1540,22 @@ export default { formattedDisplayName: appendSuffix( formattedDisplayName - || defaultRemoteDisplayName) + || defaultRemoteDisplayName) }); } ); + + room.on( + JitsiConferenceEvents.SILENT_STATUS_CHANGED, + (id, isSilent) => { + APP.store.dispatch(participantUpdated({ + conference: room, + id, + isSilent + })); + } + ); + room.on( JitsiConferenceEvents.BOT_TYPE_CHANGED, (id, botType) => { @@ -1849,6 +1568,16 @@ export default { } ); + room.on( + JitsiConferenceEvents.TRANSCRIPTION_STATUS_CHANGED, + (status, id, abruptly) => { + if (status === JitsiMeetJS.constants.transcriptionStatus.ON) { + APP.store.dispatch(transcriberJoined(id)); + } else if (status === JitsiMeetJS.constants.transcriptionStatus.OFF) { + APP.store.dispatch(transcriberLeft(id, abruptly)); + } + }); + room.on( JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, (participant, data) => { @@ -1875,6 +1604,10 @@ export default { JitsiConferenceEvents.LOCK_STATE_CHANGED, (...args) => APP.store.dispatch(lockStateChanged(room, ...args))); + room.on( + JitsiConferenceEvents.PROPERTIES_CHANGED, + properties => APP.store.dispatch(conferencePropertiesChanged(properties))); + room.on(JitsiConferenceEvents.KICKED, (participant, reason, isReplaced) => { if (isReplaced) { // this event triggers when the local participant is kicked, `participant` @@ -1924,21 +1657,12 @@ export default { JitsiE2ePingEvents.E2E_RTT_CHANGED, (...args) => APP.store.dispatch(e2eRttChanged(...args))); - APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => { - this.muteAudio(muted); - }); - APP.UI.addListener(UIEvents.VIDEO_MUTED, (muted, showUI = false) => { - this.muteVideo(muted, showUI); - }); - room.addCommandListener(this.commands.defaults.ETHERPAD, ({ value }) => { APP.UI.initEtherpad(value); } ); - APP.UI.addListener(UIEvents.EMAIL_CHANGED, - this.changeLocalEmail.bind(this)); room.addCommandListener(this.commands.defaults.EMAIL, (data, from) => { APP.store.dispatch(participantUpdated({ conference: room, @@ -1950,53 +1674,30 @@ export default { room.addCommandListener( this.commands.defaults.AVATAR_URL, (data, from) => { - APP.store.dispatch( - participantUpdated({ - conference: room, - id: from, - avatarURL: data.value - })); - }); + const participant = getParticipantByIdOrUndefined(APP.store, from); - APP.UI.addListener(UIEvents.NICKNAME_CHANGED, - this.changeLocalDisplayName.bind(this)); + // if already set from presence(jwt), skip the command processing + if (!participant?.avatarURL) { + APP.store.dispatch( + participantUpdated({ + conference: room, + id: from, + avatarURL: data.value + })); + } + }); room.on( JitsiConferenceEvents.START_MUTED_POLICY_CHANGED, ({ audio, video }) => { - APP.store.dispatch( - onStartMutedPolicyChanged(audio, video)); - } - ); - room.on(JitsiConferenceEvents.STARTED_MUTED, () => { - const audioMuted = room.isStartAudioMuted(); - const videoMuted = room.isStartVideoMuted(); - const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']); - const promises = []; + APP.store.dispatch(onStartMutedPolicyChanged(audio, video)); - APP.store.dispatch(setAudioMuted(audioMuted)); - APP.store.dispatch(setVideoMuted(videoMuted)); + const state = APP.store.getState(); - // Remove the tracks from the peerconnection. - for (const track of localTracks) { - // Always add the track on Safari because of a known issue where audio playout doesn't happen - // if the user joins audio and video muted, i.e., if there is no local media capture. - if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO && !browser.isWebKitBased()) { - promises.push(this.useAudioStream(null)); - } - if (videoMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.VIDEO) { - promises.push(this.useVideoStream(null)); - } + updateTrackMuteState(state, APP.store.dispatch, true); + updateTrackMuteState(state, APP.store.dispatch, false); } - - Promise.allSettled(promises) - .then(() => { - APP.store.dispatch(showNotification({ - titleKey: 'notify.mutedTitle', - descriptionKey: 'notify.muted' - }, NOTIFICATION_TIMEOUT_TYPE.SHORT)); - }); - }); + ); room.on( JitsiConferenceEvents.DATA_CHANNEL_OPENED, () => { @@ -2007,121 +1708,158 @@ export default { room.on( JitsiConferenceEvents.DATA_CHANNEL_CLOSED, ev => { - APP.store.dispatch(dataChannelClosed(ev.code, ev.reason)); - APP.store.dispatch(showWarningNotification({ - descriptionKey: 'notify.dataChannelClosedDescription', - titleKey: 'notify.dataChannelClosed', - uid: DATA_CHANNEL_CLOSED_NOTIFICATION_ID - }, NOTIFICATION_TIMEOUT_TYPE.STICKY)); + const state = APP.store.getState(); + const { dataChannelOpen } = state['features/base/conference']; + const timeout = typeof dataChannelOpen === 'undefined' ? 15000 : 60000; + + // Show the notification only when the data channel connection doesn't get re-established in 60 secs if + // it was already established at the beginning of the call, show it sooner otherwise. This notification + // can be confusing and alarming to users even when there is no significant impact to user experience + // if the the reconnect happens immediately. + setTimeout(() => { + const { dataChannelOpen: open } = APP.store.getState()['features/base/conference']; + + if (!open) { + const descriptionKey = getSsrcRewritingFeatureFlag(state) + ? 'notify.dataChannelClosedDescriptionWithAudio' : 'notify.dataChannelClosedDescription'; + const titleKey = getSsrcRewritingFeatureFlag(state) + ? 'notify.dataChannelClosedWithAudio' : 'notify.dataChannelClosed'; + + APP.store.dispatch(dataChannelClosed(ev.code, ev.reason)); + APP.store.dispatch(showWarningNotification({ + descriptionKey, + titleKey, + uid: DATA_CHANNEL_CLOSED_NOTIFICATION_ID + }, NOTIFICATION_TIMEOUT_TYPE.STICKY)); + } + }, timeout); } ); - // call hangup - APP.UI.addListener(UIEvents.HANGUP, () => { - this.hangup(true); - }); + room.on(JitsiConferenceEvents.PERMISSIONS_RECEIVED, p => { + const localParticipant = getLocalParticipant(APP.store.getState()); - APP.UI.addListener( - UIEvents.VIDEO_DEVICE_CHANGED, - cameraDeviceId => { - const videoWasMuted = this.isLocalVideoMuted(); - const localVideoTrack = getLocalJitsiVideoTrack(APP.store.getState()); + APP.store.dispatch(participantUpdated({ + id: localParticipant.id, + local: true, + features: p + })); + }); + }, - if (localVideoTrack?.getDeviceId() === cameraDeviceId) { - return; + /** + * Handles audio device changes. + * + * @param {string} cameraDeviceId - The new device id. + * @returns {Promise} + */ + async onAudioDeviceChanged(micDeviceId) { + const audioWasMuted = this.isLocalAudioMuted(); + + // Disable noise suppression if it was enabled on the previous track. + await APP.store.dispatch(setNoiseSuppressionEnabled(false)); + + // When the 'default' mic needs to be selected, we need to pass the real device id to gUM instead of + // 'default' in order to get the correct MediaStreamTrack from chrome because of the following bug. + // https://bugs.chromium.org/p/chromium/issues/detail?id=997689. + const isDefaultMicSelected = micDeviceId === 'default'; + const selectedDeviceId = isDefaultMicSelected + ? getDefaultDeviceId(APP.store.getState(), 'audioInput') + : micDeviceId; + + logger.info(`Switching audio input device to ${selectedDeviceId}`); + sendAnalytics(createDeviceChangedEvent('audio', 'input')); + createLocalTracksF({ + devices: ['audio'], + micDeviceId: selectedDeviceId + }) + .then(([stream]) => { + // if audio was muted before changing the device, mute + // with the new device + if (audioWasMuted) { + return stream.mute() + .then(() => stream); } - sendAnalytics(createDeviceChangedEvent('video', 'input')); + return stream; + }) + .then(async stream => { + await this._maybeApplyAudioMixerEffect(stream); - createLocalTracksF({ - devices: [ 'video' ], - cameraDeviceId - }) - .then(([ stream ]) => { - // if we are in audio only mode or video was muted before - // changing device, then mute - if (this.isAudioOnly() || videoWasMuted) { - return stream.mute() - .then(() => stream); - } + return this.useAudioStream(stream); + }) + .then(() => { + const state = APP.store.getState(); + const localAudio = getLocalJitsiAudioTrack(state); + const settings = getLocalJitsiAudioTrackSettings(state); - return stream; - }) - .then(stream => { - logger.info(`Switching the local video device to ${cameraDeviceId}.`); + APP.store.dispatch(setAudioSettings(settings)); - return this.useVideoStream(stream); - }) - .catch(error => { - logger.error(`Failed to switch to selected camera:${cameraDeviceId}, error:${error}`); + if (localAudio && isDefaultMicSelected) { + // workaround for the default device to be shown as selected in the + // settings even when the real device id was passed to gUM because of the + // above mentioned chrome bug. + localAudio._realDeviceId = localAudio.deviceId = 'default'; + } + }) + .catch(err => { + logger.error(`Failed to switch to selected audio input device ${selectedDeviceId}, error=${err}`); + APP.store.dispatch(notifyMicError(err)); + }); + }, - return APP.store.dispatch(notifyCameraError(error)); - }); - } - ); + /** + * Handles video device changes. + * + * @param {string} cameraDeviceId - The new device id. + * @returns {void} + */ + onVideoDeviceChanged(cameraDeviceId) { + const videoWasMuted = this.isLocalVideoMuted(); + const localVideoTrack = getLocalJitsiVideoTrack(APP.store.getState()); - APP.UI.addListener( - UIEvents.AUDIO_DEVICE_CHANGED, - async micDeviceId => { - const audioWasMuted = this.isLocalAudioMuted(); - - // Disable noise suppression if it was enabled on the previous track. - await APP.store.dispatch(setNoiseSuppressionEnabled(false)); - - // When the 'default' mic needs to be selected, we need to pass the real device id to gUM instead of - // 'default' in order to get the correct MediaStreamTrack from chrome because of the following bug. - // https://bugs.chromium.org/p/chromium/issues/detail?id=997689. - const isDefaultMicSelected = micDeviceId === 'default'; - const selectedDeviceId = isDefaultMicSelected - ? getDefaultDeviceId(APP.store.getState(), 'audioInput') - : micDeviceId; - - logger.info(`Switching audio input device to ${selectedDeviceId}`); - sendAnalytics(createDeviceChangedEvent('audio', 'input')); - createLocalTracksF({ - devices: [ 'audio' ], - micDeviceId: selectedDeviceId - }) - .then(([ stream ]) => { - // if audio was muted before changing the device, mute - // with the new device - if (audioWasMuted) { - return stream.mute() - .then(() => stream); - } + if (localVideoTrack?.getDeviceId() === cameraDeviceId) { + return; + } - return stream; - }) - .then(async stream => { - await this._maybeApplyAudioMixerEffect(stream); + sendAnalytics(createDeviceChangedEvent('video', 'input')); + + createLocalTracksF({ + devices: ['video'], + cameraDeviceId + }) + .then(([stream]) => { + // if we are in audio only mode or video was muted before + // changing device, then mute + if (this.isAudioOnly() || videoWasMuted) { + return stream.mute() + .then(() => stream); + } - return this.useAudioStream(stream); - }) - .then(() => { - const localAudio = getLocalJitsiAudioTrack(APP.store.getState()); + return stream; + }) + .then(stream => { + logger.info(`Switching the local video device to ${cameraDeviceId}.`); - if (localAudio && isDefaultMicSelected) { - // workaround for the default device to be shown as selected in the - // settings even when the real device id was passed to gUM because of the - // above mentioned chrome bug. - localAudio._realDeviceId = localAudio.deviceId = 'default'; - } - }) - .catch(err => { - logger.error(`Failed to switch to selected audio input device ${selectedDeviceId}, error=${err}`); - APP.store.dispatch(notifyMicError(err)); - }); - } - ); + return this.useVideoStream(stream); + }) + .catch(error => { + logger.error(`Failed to switch to selected camera:${cameraDeviceId}, error:${error}`); - APP.UI.addListener(UIEvents.TOGGLE_AUDIO_ONLY, () => { - // Immediately update the UI by having remote videos and the large video update themselves. - const displayedUserId = APP.UI.getLargeVideoID(); + return APP.store.dispatch(notifyCameraError(error)); + }); + }, - if (displayedUserId) { - APP.UI.updateLargeVideo(displayedUserId, true); - } - }); + /** + * Handles audio only changes. + */ + onToggleAudioOnly() { + // Immediately update the UI by having remote videos and the large video update themselves. + const displayedUserId = APP.UI.getLargeVideoID(); + + if (displayedUserId) { + APP.UI.updateLargeVideo(displayedUserId, true); + } }, /** @@ -2154,7 +1892,6 @@ export default { APP.UI.initConference(); - dispatch(initKeyboardShortcuts()); dispatch(conferenceJoined(room)); const participantCount = room?.getParticipants()?.length; if (participantCount === 0) { @@ -2179,8 +1916,7 @@ export default { _initDeviceList(setDeviceListChangeHandler = false) { const { mediaDevices } = JitsiMeetJS; - if (mediaDevices.isDeviceListAvailable() - && mediaDevices.isDeviceChangeAvailable()) { + if (mediaDevices.isDeviceChangeAvailable()) { if (setDeviceListChangeHandler) { this.deviceChangeListener = devices => window.setTimeout(() => this._onDeviceListChanged(devices), 0); @@ -2192,8 +1928,9 @@ export default { const { dispatch } = APP.store; return dispatch(getAvailableDevices()) - .then(devices => { - APP.UI.onAvailableDevicesChanged(devices); + .then(() => { + this.updateAudioIconEnabled(); + this.updateVideoIconEnabled(); }); } @@ -2358,7 +2095,8 @@ export default { return Promise.all(promises) .then(() => { - APP.UI.onAvailableDevicesChanged(filteredDevices); + this.updateAudioIconEnabled(); + this.updateVideoIconEnabled(); }); }, @@ -2403,8 +2141,10 @@ export default { * @param {boolean} [requestFeedback=false] if user feedback should be * @param {string} [hangupReason] the reason for leaving the meeting * requested + * @param {boolean} [notifyOnConferenceTermination] whether to notify + * the user on conference termination */ - hangup(requestFeedback = false, hangupReason) { + hangup(requestFeedback = false, hangupReason, notifyOnConferenceTermination) { APP.store.dispatch(disableReceiver()); this._stopProxyConnection(); @@ -2419,13 +2159,11 @@ export default { this.deviceChangeListener); } - APP.UI.removeAllListeners(); - let feedbackResultPromise = Promise.resolve({}); if (requestFeedback) { const feedbackDialogClosed = (feedbackResult = {}) => { - if (!feedbackResult.wasDialogShown && hangupReason) { + if (!feedbackResult.wasDialogShown && hangupReason && notifyOnConferenceTermination) { return APP.store.dispatch( openLeaveReasonDialog(hangupReason)).then(() => feedbackResult); } @@ -2440,7 +2178,7 @@ export default { const leavePromise = this.leaveRoom().catch(() => Promise.resolve()); - Promise.allSettled([ feedbackResultPromise, leavePromise ]).then(([ feedback, _ ]) => { + Promise.allSettled([feedbackResultPromise, leavePromise]).then(([feedback, _]) => { this._room = undefined; room = undefined; @@ -2477,11 +2215,11 @@ export default { if (room && room.isJoined()) { return room.leave(reason).then(() => maybeDisconnect()) - .catch(e => { - logger.error(e); + .catch(e => { + logger.error(e); - return maybeDisconnect(); - }); + return maybeDisconnect(); + }); } return maybeDisconnect(); @@ -2527,37 +2265,6 @@ export default { room.sendEndpointMessage(to, payload); }, - /** - * Adds new listener. - * @param {String} eventName the name of the event - * @param {Function} listener the listener. - */ - addListener(eventName, listener) { - eventEmitter.addListener(eventName, listener); - }, - - /** - * Removes listener. - * @param {String} eventName the name of the event that triggers the - * listener - * @param {Function} listener the listener. - */ - removeListener(eventName, listener) { - eventEmitter.removeListener(eventName, listener); - }, - - /** - * Changes the display name for the local user - * @param nickname {string} the new display name - */ - changeLocalDisplayName(nickname = '') { - const formattedNickname = getNormalizedDisplayName(nickname); - - APP.store.dispatch(updateSettings({ - displayName: formattedNickname - })); - }, - /** * Callback invoked by the external api create or update a direct connection * from the local client to an external client. diff --git a/config.js b/config.js index 5ab2e05f8301..6391280a0b14 100644 --- a/config.js +++ b/config.js @@ -49,11 +49,19 @@ var config = { bosh: "https://jitsi-meet.example.com/" + subdir + "http-bind", // Websocket URL (XMPP) - // websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket', + websocket: "wss://jitsi-meet.example.com/" + subdir + "xmpp-websocket", + + // websocketKeepAliveUrl: 'https://jitsi-meet.example.com/' + subdir + '_unlock', // Whether BOSH should be preferred over WebSocket if both are configured. // preferBosh: false, + // WebSocket keep-alive to prevent connection drops + websocketKeepAlive: true, + // websocketKeepAliveUrl will be set dynamically based on room + _peerConnStatusOutOfLastNTimeout: 30000, + _peerConnStatusRtcMuteTimeout: 15000, + // The real JID of focus participant - can be overridden here // Do not change username - FIXME: Make focus username configurable // https://github.com/jitsi/jitsi-meet/issues/7376 @@ -73,7 +81,7 @@ var config = { // Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket. // If SCTP is available in the backend it will be used instead of a WS. Defaults to // false (SCTP is used only if available and no WS are available). - // preferSctp: false + preferSctp: true, }, // Testing / experimental features. @@ -89,6 +97,12 @@ var config = { // enableAv1Support: false, // Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users. // mobileXmppWsThreshold: 10, // enable XMPP WebSockets on mobile for 10% of the users + // Enables use of getDisplayMedia in electron + // electronUseGetDisplayMedia: false, + // Enables AV1 codec for FF. Note: By default it is disabled. + // enableAV1ForFF: false, + // Enables the use of the codec selection API supported by the browsers . + // enableCodecSelectionAPI: false, // P2P test mode disables automatic switching to P2P when there are 2 // participants in the conference. // p2pTestMode: false, @@ -101,6 +115,14 @@ var config = { // skipInterimTranscriptions: false, // Dump transcripts to a element for debugging. // dumpTranscript: false, + // Log the audio levels. + // debugAudioLevels: true, + // Will replace ice candidates IPs with invalid ones in order to fail ice. + // failICE: true, + // When running on Spot TV, this controls whether to show the recording consent dialog. + // If false (default), Spot instances will not show the recording consent dialog. + // If true, Spot instances will show the recording consent dialog like regular clients. + // showSpotConsentDialog: false, }, // Disables moderator indicators. @@ -112,9 +134,15 @@ var config = { // Disables the reactions moderation feature. // disableReactionsModeration: false, + // Disables the reactions in chat feature. + // disableReactionsInChat: false, + // Disables polls feature. // disablePolls: false, + // Disables demote button from self-view + // disableSelfDemote: false, + // Disables self-view tile. (hides it from tile view and from filmstrip) // disableSelfView: false, @@ -203,14 +231,45 @@ var config = { // installation. Specifically, these files are needed: // - https://meet.example.com/libs/krisp/krisp.mjs // - https://meet.example.com/libs/krisp/models/model_8.kw - // - https://meet.example.com/libs/krisp/models/model_16.kw - // - https://meet.example.com/libs/krisp/models/model_32.kw - // NOTE: Krisp JS SDK v1.0.9 was tested. + // - https://meet.example.com/libs/krisp/models/model_nc.kw + // - https://meet.example.com/libs/krisp/models/model_bvc.kw + // - https://meet.example.com/libs/krisp/assets/bvc-allowed.txt + // In case when you have known BVC supported devices and you want to extend allowed devices list + // - https://meet.example.com/libs/krisp/assets/bvc-allowed-ext.txt + // In case when you have known BVC supported devices and you want to extend allowed devices list + // - https://meet.example.com/libs/krisp/models/model_inbound_8.kw + // - https://meet.example.com/libs/krisp/models/model_inbound_16.kw + // In case when you want to use inbound noise suppression models + // NOTE: Krisp JS SDK v2.0.0 was tested. // noiseSuppression: { // krisp: { // enabled: false, // logProcessStats: false, // debugLogs: false, + // useBVC: false, + // bufferOverflowMS: 1000, + // inboundModels: { + // modelInbound8: 'model_inbound_8.kef', + // modelInbound16: 'model_inbound_16.kef', + // }, + // preloadInboundModels: { + // modelInbound8: 'model_inbound_8.kef', + // modelInbound16: 'model_inbound_16.kef', + // }, + // preloadModels: { + // modelBVC: 'model_bvc.kef', + // model8: 'model_8.kef', + // modelNC: 'model_nc_mq.kef', + // }, + // models: { + // modelBVC: 'model_bvc.kef', + // model8: 'model_8.kef', + // modelNV: 'model_nc_mq.kef', + // }, + // bvc: { + // allowedDevices: 'bvc-allowed.txt', + // allowedDevicesExt: 'bvc-allowed-ext.txt', + // } // }, // }, @@ -222,9 +281,26 @@ var config = { // Sets the preferred resolution (height) for local video. Defaults to 720. // resolution: 720, + // DEPRECATED. Please use raisedHands.disableRemoveRaisedHandOnFocus instead. // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not // disableRemoveRaisedHandOnFocus: false, + // Specifies which raised hand related config should be set. + // raisedHands: { + // // Specifies whether the raised hand can be lowered by moderator. + // disableLowerHandByModerator: false, + + // // Specifies whether there is a notification before hiding the raised hand + // // when someone becomes the dominant speaker. + // disableLowerHandNotification: true, + + // // Specifies whether there is a notification when you are the next speaker in line. + // disableNextSpeakerNotification: false, + + // // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not. + // disableRemoveRaisedHandOnFocus: false, + // }, + // speakerStats: { // // Specifies whether the speaker stats is enable or not. // disabled: false, @@ -287,6 +363,7 @@ var config = { // Desktop sharing // Optional desktop sharing frame rate options. Default value: min:5, max:5. + // Setting higher min/max values will affect the resolution, it makes it worse. // desktopSharingFrameRate: { // min: 5, // max: 5, @@ -308,9 +385,6 @@ var config = { // Recording - // DEPRECATED. Use recordingService.enabled instead. - // fileRecordingsEnabled: false, - // Enable the dropbox integration. // dropbox: { // appKey: '', // Specify your app key here. @@ -331,6 +405,15 @@ var config = { // // If true, shows a warning label in the prejoin screen to point out the possibility that // // the call you're joining might be recorded. // // showPrejoinWarning: true, + // // If true, the notification for recording start will display a link to download the cloud recording. + // // showRecordingLink: true, + // // If true, mutes audio and video when a recording begins and displays a dialog + // // explaining the effect of unmuting. + // // requireConsent: true, + // // If true consent will be skipped for users who are already in the meeting. + // // skipConsentInMeeting: true, + // // Link for the recording consent dialog's "Learn more" link. + // // consentLearnMoreLink: 'https://jitsi.org/meet/consent', // }, // recordingService: { @@ -403,7 +486,7 @@ var config = { // // Translation languages. // // Available languages can be found in - // // ./src/react/features/transcribing/translation-languages.json. + // // ./lang/translation-languages.json. // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -424,6 +507,19 @@ var config = { // // Enables automatic turning on transcribing when recording is started // autoTranscribeOnRecord: false, + + // // Enables automatic request of subtitles when transcriber is present in the meeting, uses the default + // // language that is set + // autoCaptionOnTranscribe: false, + // + // // Disables everything related to closed captions - the tab in the chat area, the button in the menu, + // // subtitles on stage and the "Show subtitles on stage" checkbox in the settings. + // // Note: Starting transcriptions from the recording dialog will still work. + // disableClosedCaptions: false, + + // // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata). + // // By default, we invite it. + // inviteJigasiOnBackendTranscribing: true, // }, // Misc @@ -431,13 +527,13 @@ var config = { // Default value for the channel "last N" attribute. -1 for unlimited. channelLastN: -1, - // Connection indicators // connectionIndicators: { - // autoHide: true, - // autoHideTimeout: 5000, + // autoHide: false, + // autoHideTimeout: 10000, // disabled: false, // disableDetails: false, - // inactiveDisabled: false + // inactiveDisabled: false, + // }, // }, // Provides a way for the lastN value to be controlled through the UI. @@ -449,7 +545,16 @@ var config = { // videoQuality: { // // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ], + // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264' ], + // + // // Provides a way to set the codec for screenshare. + // screenshareCodec: 'AV1', + // mobileScreenshareCodec: 'VP8', + // + // // Enables the adaptive mode in the client that will make runtime adjustments to selected codecs and received + // // videos for a better user experience. This mode will kick in only when CPU overuse is reported in the + // // WebRTC statistics for the outbound video streams. + // enableAdaptiveMode: false, // // // Codec specific settings for scalability modes and max bitrates. // av1: { @@ -457,6 +562,8 @@ var config = { // low: 100000, // standard: 300000, // high: 1000000, + // fullHd: 2000000, + // ultraHd: 4000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true, @@ -468,6 +575,8 @@ var config = { // low: 200000, // standard: 500000, // high: 1500000, + // fullHd: 3000000, + // ultraHd: 6000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true @@ -477,6 +586,8 @@ var config = { // low: 200000, // standard: 500000, // high: 1500000, + // fullHd: 3000000, + // ultraHd: 6000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: false @@ -486,35 +597,13 @@ var config = { // low: 100000, // standard: 300000, // high: 1200000, + // fullHd: 2500000, + // ultraHd: 5000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true, // useSimulcast: false, // useKSVC: true - // } - // - // DEPRECATED! Use `codec specific settings` instead. - // // Provides a way to configure the maximum bitrates that will be enforced on the simulcast streams for - // // video tracks. The keys in the object represent the type of the stream (LD, SD or HD) and the values - // // are the max.bitrates to be set on that particular type of stream. The actual send may vary based on - // // the available bandwidth calculated by the browser, but it will be capped by the values specified here. - // // This is currently not implemented on app based clients on mobile. - // maxBitratesVideo: { - // H264: { - // low: 200000, - // standard: 500000, - // high: 1500000, - // }, - // VP8 : { - // low: 200000, - // standard: 500000, - // high: 1500000, - // }, - // VP9: { - // low: 100000, - // standard: 300000, - // high: 1200000, - // }, // }, // // // The options can be used to override default thresholds of video thumbnail heights corresponding to @@ -533,30 +622,16 @@ var config = { // }, // // // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint - // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264' ], - // - // // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified - // // here will be removed from the list of codecs present in the SDP answer generated by the client. If the - // // same codec is specified for both the disabled and preferred option, the disable settings will prevail. - // // Note that 'VP8' cannot be disabled since it's a mandatory codec, the setting will be ignored in this case. - // disabledCodec: 'H264', - // - // // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // // Provides a way to set a preferred video codec for the JVB connection. If 'H264' is specified here, - // // simulcast will be automatically disabled since JVB doesn't support H264 simulcast yet. This will only - // // rearrange the the preference order of the codecs in the SDP answer generated by the browser only if the - // // preferred codec specified here is present. Please ensure that the JVB offers the specified codec for this - // // to take effect. - // preferredCodec: 'VP8', - // + // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264', 'AV1' ], // }, - // Notification timeouts + // Notification timeouts - Longer timeouts for connection issues // notificationTimeouts: { - // short: 2500, - // medium: 5000, - // long: 10000, + // short: 5000, + // medium: 10000, + // long: 15000, + // extraLong: 30000, + // sticky: 0, // }, // // Options for the recording limit notification. @@ -578,7 +653,7 @@ var config = { // disableRtx: false, // Moves all Jitsi Meet 'beforeunload' logic (cleanup, leaving, disconnecting, etc) to the 'unload' event. - // disableBeforeUnloadHandlers: true, + disableBeforeUnloadHandlers: false, // Disables or enables TCC support in this client (default: enabled). // enableTcc: true, @@ -586,17 +661,9 @@ var config = { // Disables or enables REMB support in this client (default: enabled). // enableRemb: true, - // Enables ICE restart logic in LJM and displays the page reload overlay on - // ICE failure. Current disabled by default because it's causing issues with - // signaling when Octo is enabled. Also when we do an "ICE restart"(which is - // not a real ICE restart), the client maintains the TCC sequence number - // counter, but the bridge resets it. The bridge sends media packets with - // TCC sequence numbers starting from 0. - // enableIceRestart: false, - // Enables forced reload of the client when the call is migrated as a result of // the bridge going down. - // enableForcedReload: true, + enableForcedReload: true, // Use TURN/UDP servers for the jitsi-videobridge connection (by default // we filter out TURN/UDP because it is usually not needed since the @@ -656,6 +723,8 @@ var config = { // autoKnock: false, // // Enables the lobby chat. Replaces `enableLobbyChat`. // enableChat: true, + // // Shows the hangup button in the lobby screen. + // showHangUp: true, // }, // Configs for the security related UI elements. @@ -695,7 +764,7 @@ var config = { // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. - // DEPRECATED! Use the `lang` iframe option directly instead. + // For iframe integrations, use the `lang` option directly instead. // defaultLanguage: 'en', // Disables profile and the edit of all fields from the profile settings (display name and email) @@ -716,10 +785,15 @@ var config = { // and microsoftApiApplicationClientID // enableCalendarIntegration: false, + // Whether to notify when the conference is terminated because it was destroyed. + // notifyOnConferenceDestruction: true, + + // The client id for the google APIs used for the calendar integration, youtube livestreaming, etc. + // googleApiApplicationClientID: '', + // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. - // // This replaces `prejoinPageEnabled`. Defaults to true. // enabled: true, // // Hides the participant name editing field in the prejoin screen. // // If requireDisplayName is also set as true, a name should still be provided through @@ -727,6 +801,13 @@ var config = { // hideDisplayName: false, // // List of buttons to hide from the extra join options dropdown. // hideExtraJoinButtons: ['no-audio', 'by-phone'], + // // Configuration for pre-call test + // // By setting preCallTestEnabled, you enable the pre-call test in the prejoin page. + // // ICE server credentials need to be provided over the preCallTestICEUrl + // preCallTestEnabled: false, + // preCallTestICEUrl: '', + // // Shows the hangup button in the lobby screen. + // showHangUp: true, // }, // When 'true', the user cannot edit the display name. @@ -745,10 +826,6 @@ var config = { // set or the lobby is not enabled. // enableInsecureRoomNameWarning: false, - // Whether to automatically copy invitation URL after creating a room. - // Document should be focused for this option to work - // enableAutomaticUrlCopy: false, - // Array with avatar URL prefixes that need to use CORS. // corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ], @@ -775,8 +852,7 @@ var config = { // some other values in config.js to be enabled. Also, the "profile" button will // not display for users with a JWT. // Notes: - // - it's impossible to choose which buttons go in the "More actions" menu - // - it's impossible to control the placement of buttons + // - it's possible to reorder the buttons in the maintoolbar by changing the order of the mainToolbarButtons // - 'desktop' controls the "Share your screen" button // - if `toolbarButtons` is undefined, we fallback to enabling all buttons on the UI // toolbarButtons: [ @@ -830,6 +906,22 @@ var config = { // autoHideWhileChatIsOpen: false, // }, + // Overrides the buttons displayed in the main toolbar. Depending on the screen size the number of displayed + // buttons varies from 2 buttons to 8 buttons. Every array in the mainToolbarButtons array will replace the + // corresponding default buttons configuration matched by the number of buttons specified in the array. Arrays with + // more than 8 buttons or less then 2 buttons will be ignored. When there there isn't an override for a certain + // configuration (for example when 3 buttons are displayed) the default jitsi-meet configuration will be used. + // The order of the buttons in the array is preserved. + // mainToolbarButtons: [ + // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'reactions', 'participants-pane', 'tileview' ], + // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane', 'tileview' ], + // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane' ], + // [ 'microphone', 'camera', 'desktop', 'chat', 'participants-pane' ], + // [ 'microphone', 'camera', 'chat', 'participants-pane' ], + // [ 'microphone', 'camera', 'chat' ], + // [ 'microphone', 'camera' ] + // ], + // Toolbar buttons which have their click/tap event exposed through the API on // `toolbarButtonClicked`. Passing a string for the button key will // prevent execution of the click/tap routine; passing an object with `key` and @@ -1010,10 +1102,14 @@ var config = { // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based // endpoints. - // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9' ], + // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9', 'AV1' ], // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264 ], + // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264 ], + + // Provides a way to set the codec for screenshare. + // screenshareCodec: 'AV1', + // mobileScreenshareCodec: 'VP8', // How long we're going to wait, before going back to P2P after the 3rd // participant has left the conference (to filter out page reload). @@ -1024,15 +1120,6 @@ var config = { // { urls: 'stun:jitsi-meet.example.com:3478' }, { urls: "stun:meet-jit-si-turnrelay.jitsi.net:443" }, ], - - // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // Provides a way to set the video codec preference on the p2p connection. Acceptable - // codec values are 'VP8', 'VP9' and 'H264'. - // preferredCodec: 'H264', - - // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // Provides a way to prevent a video codec from being negotiated on the p2p connection. - // disabledCodec: '', }, analytics: { @@ -1069,7 +1156,6 @@ var config = { // rtcstatsSendSdp: false, // Array of script URLs to load as lib-jitsi-meet "analytics handlers". // scriptURLs: [ - // "libs/analytics-ga.min.js", // google-analytics // "https://example.com/my-custom-analytics.js", // ], // By enabling watchRTCEnabled option you would want to use watchRTC feature @@ -1154,6 +1240,7 @@ var config = { // warning: '', // }, // externallyManagedKey: false, + // disabled: false, // }, // Options related to end-to-end (participant to participant) ping. @@ -1185,9 +1272,6 @@ var config = { // disableDeepLinking: false, // The deeplinking config. - // For information about the properties of - // deeplinking.[ios/android].dynamicLink check: - // https://firebase.google.com/docs/dynamic-links/create-manually // deeplinking: { // // // The desktop deeplinking config, disabled by default. @@ -1216,13 +1300,6 @@ var config = { // appScheme: 'org.jitsi.meet', // // Custom URL for downloading ios mobile app. // downloadLink: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905', - // dynamicLink: { - // apn: 'org.jitsi.meet', - // appCode: 'w2atb', - // customDomain: undefined, - // ibi: 'com.atlassian.JitsiMeet.ios', - // isi: '1165103905' - // } // }, // // The android deeplinking config. @@ -1235,13 +1312,6 @@ var config = { // // Android app package name. // appPackage: 'org.jitsi.meet', // fDroidUrl: 'https://f-droid.org/en/packages/org.jitsi.meet/', - // dynamicLink: { - // apn: 'org.jitsi.meet', - // appCode: 'w2atb', - // customDomain: undefined, - // ibi: 'com.atlassian.JitsiMeet.ios', - // isi: '1165103905' - // } // } // }, @@ -1289,19 +1359,13 @@ var config = { // disableKick: true, // // If set to true the 'Grant moderator' button will be disabled. // disableGrantModerator: true, - // // If set to true the 'Send private message' button will be disabled. - // disablePrivateChat: true, + // // If set to 'all' the 'Private chat' button will be disabled for all participants. + // // If set to 'allow-moderator-chat' the 'Private chat' button will be available for chats with moderators. + // // If set to 'disable-visitor-chat' the 'Private chat' button will be disabled for visitor-main participant + // // conversations. + // disablePrivateChat: 'all' | 'allow-moderator-chat' | 'disable-visitor-chat', // }, - // Endpoint that enables support for salesforce integration with in-meeting resource linking - // This is required for: - // listing the most recent records - salesforceUrl/records/recents - // searching records - salesforceUrl/records?text=${text} - // retrieving record details - salesforceUrl/records/${id}?type=${type} - // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id} - // - // salesforceUrl: 'https://api.example.com/', - // If set to true all muting operations of remote participants will be disabled. // disableRemoteMute: true, @@ -1311,8 +1375,12 @@ var config = { The config file should be in JSON. None of the fields are mandatory and the response must have the shape: { + // Whether participant can only send group chat message if `send-groupchat` feature is enabled in jwt. + groupChatRequiresPermission: false, + // Whether participant can only create polls if `create-polls` feature is enabled in jwt. + pollCreationRequiresPermission: false, // The domain url to apply (will replace the domain in the sharing conference link/embed section) - inviteDomain: 'example-company.org, + inviteDomain: 'example-company.org', // The hex value for the colour used as background backgroundColor: '#fff', // The url for the image used as background @@ -1321,6 +1389,13 @@ var config = { logoClickUrl: 'https://example-company.org', // The url used for the image used as logo logoImageUrl: 'https://example.com/logo-img.png', + // Endpoint that enables support for salesforce integration with in-meeting resource linking + // This is required for: + // listing the most recent records - salesforceUrl/records/recents + // searching records - salesforceUrl/records?text=${text} + // retrieving record details - salesforceUrl/records/${id}?type=${type} + // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id} + // salesforceUrl: 'https://api.example.com/', // Overwrite for pool of background images for avatars avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'], // The lobby/prejoin screen background @@ -1371,6 +1446,13 @@ var config = { */ // dynamicBrandingUrl: '', + // A list of allowed URL domains for shared video. + // + // NOTE: + // '*' is allowed value and it will allow any URL to be used for shared video. We do not recommend using '*', + // use it at your own risk! + // sharedVideoAllowedURLDomains: [ ], + // Options related to the participants pane. // participantsPane: { // // Enables feature @@ -1493,26 +1575,70 @@ var config = { // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before // and will automatically redirect to the token service to get the token for the meeting. // tokenAuthUrlAutoRedirect: false + // An option to respect the context.tenant jwt field compared to the current tenant from the url + // tokenRespectTenant: false, + // An option to get for user info (name, picture, email) in the token outside the user context. + // Can be used with Firebase tokens. + // tokenGetUserInfoOutOfContext: false, + + // You can put an array of values to target different entity types in the invite dialog. + // Valid values are "phone", "room", "sip", "user", "videosipgw" and "email" + // peopleSearchQueryTypes: ["user", "email"], + // Directory endpoint which is called for invite dialog autocomplete + // peopleSearchUrl: "https://myservice.com/api/people", + // Endpoint which is called to send invitation requests + // inviteServiceUrl: "https://myservice.com/api/invite", + + // For external entities (e. g. email), the localStorage key holding the token value for directory authentication + // peopleSearchTokenLocation: "mytoken", + + // Options related to visitors. + // visitors: { + // // Starts audio/video when the participant is promoted from visitor. + // enableMediaOnPromote: { + // audio: true, + // video: true + // }, + // // Hides the visitor count for visitors. + // // hideVisitorCountForVisitors: false, + // // Whether to show the join meeting dialog when joining as a visitor. + // // showJoinMeetingDialog: true, + // }, + // The default type of desktop sharing sources that will be used in the electron app. + // desktopSharingSources: ['screen', 'window'], + + // Disables the echo cancelation for local audio tracks. + // disableAEC: true, + + // Disables the auto gain control for local audio tracks. + // disableAGC: true, + + // Disables the audio processing (echo cancelation, auto gain control and noise suppression) for local audio tracks. + // disableAP: true, + + // Disables the anoise suppression for local audio tracks. + // disableNS: true, + + // Replaces the display name with the JID of the participants. + // displayJids: true, + + // Enables disables talk while muted detection. + // enableTalkWhileMuted: true, + + // Sets the peer connection ICE transport policy to "relay". + // forceTurnRelay: true, // List of undocumented settings used in jitsi-meet /** _immediateReloadThreshold - debug - debugAudioLevels deploymentInfo dialOutAuthUrl dialOutCodesUrl dialOutRegionUrl disableRemoteControl - displayJids - firefox_fake_device - googleApiApplicationClientID iAmRecorder iAmSipGateway microsoftApiApplicationClientID - peopleSearchQueryTypes - peopleSearchUrl - requireDisplayName */ /** @@ -1528,14 +1654,7 @@ var config = { _peerConnStatusRtcMuteTimeout avgRtpStatsN desktopSharingSources - disableAEC - disableAGC - disableAP - disableHPF disableLocalStats - disableNS - enableTalkWhileMuted - forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled ignoreStartMuted @@ -1612,7 +1731,7 @@ var config = { // 'notify.participantsWantToJoin', // shown when lobby is enabled and participants request to join meeting // 'notify.passwordRemovedRemotely', // shown when a password has been removed remotely // 'notify.passwordSetRemotely', // shown when a password has been set remotely - // 'notify.raisedHand', // shown when a partcipant used raise hand, + // 'notify.raisedHand', // shown when a participant used raise hand, // 'notify.screenShareNoAudio', // shown when the audio could not be shared for the selected screen // 'notify.screenSharingAudioOnlyTitle', // shown when the best performance has been affected by screen sharing // 'notify.selfViewTitle', // show "You can always un-hide the self-view from settings" @@ -1633,7 +1752,7 @@ var config = { // 'toolbar.noAudioSignalTitle', // shown when a broken mic is detected // 'toolbar.noisyAudioInputTitle', // shown when noise is detected for the current microphone // 'toolbar.talkWhileMutedPopup', // shown when user tries to speak while muted - // 'transcribing.failedToStart', // shown when transcribing fails to start + // 'transcribing.failed', // shown when transcribing fails // ], // List of notifications to be disabled. Works in tandem with the above setting. @@ -1643,7 +1762,7 @@ var config = { // disableFilmstripAutohiding: false, // filmstrip: { - // // Disable the vertical/horizonal filmstrip. + // // Disable the vertical/horizontal filmstrip. // disabled: false, // // Disables user resizable filmstrip. Also, allows configuration of the filmstrip // // (width, tiles aspect ratios) through the interfaceConfig options. @@ -1663,6 +1782,13 @@ var config = { // // The minimum number of participants that must be in the call for // // the top panel layout to be used. // minParticipantCountForTopPanel: 50, + + // // The width of the filmstrip on joining meeting. Can be resized afterwards. + // initialWidth: 400, + + // // Whether the draggable resize bar of the filmstrip is always visible. Setting this to true will make + // // the filmstrip always visible in case `disableResizable` is false. + // alwaysShowResizeBar: true, // }, // Tile view related config options. @@ -1692,8 +1818,6 @@ var config = { // tileTime: 5000, // // Limit results by rating: g, pg, pg-13, r. Default value: g. // rating: 'pg', - // // The proxy server url for giphy requests in the web app. - // proxyUrl: 'https://giphy-proxy.example.com', // }, // Logging @@ -1704,9 +1828,10 @@ var config = { // //disableLogCollector: true, // // Individual loggers are customizable. // loggers: { - // // The following are too verbose in their logging with the default level. - // 'modules/RTC/TraceablePeerConnection.js': 'info', - // 'modules/xmpp/strophe.util.js': 'log', + // // The following are too verbose in their logging with the default level. + // 'modules/RTC/TraceablePeerConnection.js': 'info', + // 'modules/xmpp/strophe.util.js': 'log', + // }, // }, // Application logo url @@ -1723,7 +1848,7 @@ var config = { // // to control the performance. // userLimit: 25, // // The url for more info about the whiteboard and its usage limitations. - // limitUrl: 'https://example.com/blog/whiteboard-limits, + // limitUrl: 'https://example.com/blog/whiteboard-limits', // }, // The watchRTC initialize config params as described : @@ -1759,13 +1884,23 @@ var config = { // collectionInterval?: number; // logGetStats?: boolean; // }, -}; -// Temporary backwards compatibility with old mobile clients. -config.flags = config.flags || {}; -config.flags.sourceNameSignaling = true; -config.flags.sendMultipleVideoStreams = true; -config.flags.receiveMultipleVideoStreams = true; + // Hide login button on auth dialog, you may want to enable this if you are using JWT tokens to authenticate users + // hideLoginButton: true, + + // If true remove the tint foreground on focused user camera in filmstrip + // disableCameraTintForeground: false, + + // File sharign service. + // fileSharing: { + // // The URL of the file sharing service API. See resources/file-sharing.yaml for more details. + // apiUrl: 'https://example.com', + // // Whether the file sharing service is enabled or not. + // enabled: true, + // // Maximum file size limit (-1 value disables any file size limit check) + // maxFileSize: 50, + // }, +}; // Set the default values for JaaS customers if (enableJaaS) { diff --git a/css/404.scss b/css/404.scss index 87f0036dfabf..9c2a956a094a 100644 --- a/css/404.scss +++ b/css/404.scss @@ -4,12 +4,12 @@ text-align: center; h2 { - font-size: 48px; + font-size: 3rem; color : #f2f2f2; } &__message { - font-size: 24px; + font-size: 1.5rem; margin-top: 20px; } } diff --git a/css/_base.scss b/css/_base.scss index 0ee376a5246b..5ac310f86256 100644 --- a/css/_base.scss +++ b/css/_base.scss @@ -28,7 +28,7 @@ body { margin: 0px; width: 100%; height: 100%; - font-size: 12px; + font-size: 0.75rem; font-weight: 400; overflow: hidden; color: #f1f1f1; @@ -122,7 +122,7 @@ form { height: $watermarkHeight; background-size: contain; background-repeat: no-repeat; - z-index: $zindex2; + z-index: $watermarkZ; } .leftwatermark { @@ -150,10 +150,11 @@ form { position: absolute; left: 25; bottom: 7; - font-size: 11pt; - color: rgba(255, 255, 255, 0.5); + // font-size: 11pt; + font-size: 0.875rem; + color: rgba(255,255,255, 0.5); text-decoration: none; - z-index: 100; + z-index: $watermarkZ; } /** diff --git a/css/_chat.scss b/css/_chat.scss index 78977dd82227..86d69c43d62e 100644 --- a/css/_chat.scss +++ b/css/_chat.scss @@ -1,6 +1,10 @@ +@use './variables'; + #chat-conversation-container { // extract message input height - height: calc(100% - 64px); + box-sizing: border-box; + // height: calc(100% - 64px); + height: 100%; overflow: hidden; position: relative; } @@ -8,17 +12,31 @@ #chatconversation { box-sizing: border-box; flex: 1; - font-size: 10pt; - height: 100%; - line-height: 20px; + font-size: 0.75rem; + height: calc(100% - 10px); + line-height: 1.25rem; overflow: auto; - padding: 16px; + padding: 16px 16px 0 16px; text-align: left; word-wrap: break-word; display: flex; flex-direction: column; + scrollbar-width: none; // Firefox + -ms-overflow-style: none; // IE and Edge + + &::-webkit-scrollbar { + display: none; // Chrome, Safari, Opera + } + + &.focus-visible { + outline: 0; + margin: 4px; + border-radius: 0 0 variables.$borderRadius variables.$borderRadius; + box-shadow: 0px 0px 0px 2px #4687ed; // focus01/primary07 + } + & > :first-child { margin-top: auto; } @@ -62,7 +80,7 @@ #nickname { text-align: center; color: #9d9d9d; - font-size: 16px; + font-size: 1rem; margin: auto 0; padding: 0 16px; @@ -76,7 +94,7 @@ } label { - line-height: 24px; + line-height: 1.5rem; } } @@ -88,7 +106,7 @@ } .chatmessage .usermessage { - font-size: 16px; + font-size: 1rem; } } @@ -114,7 +132,7 @@ } #smileys { - font-size: 20pt; + font-size: 1.625rem; margin: auto; cursor: pointer; } @@ -131,34 +149,8 @@ left: 0; } -.smileys-panel { - bottom: 100%; - box-sizing: border-box; - background-color: rgba(0, 0, 0, .6) !important; - height: auto; - display: flex; - overflow: hidden; - position: absolute; - width: calc(#{$sidebarWidth} - 32px); - margin-bottom: 5px; - margin-left: -5px; - - /** - * CSS transitions do not apply for auto dimensions. So to produce the css - * accordion effect for showing and hiding the smiley-panel, while allowing - * for variable panel, height, use a very large max-height and animate off - * of that. - */ - transition: max-height 0.3s; - - #smileysContainer { - background-color: $chatBackgroundColor; - border-top: 1px solid #A4B8D1; - } -} - #smileysContainer .smiley { - font-size: 20pt; + font-size: 1.625rem; } .smileyContainer { @@ -209,8 +201,8 @@ box-sizing: border-box; color: #fff; font-weight: 600; - font-size: 24px; - line-height: 32px; + font-size: 1.5rem; + line-height: 2rem; .jitsi-icon { cursor: pointer; diff --git a/css/_chrome-extension-banner.scss b/css/_chrome-extension-banner.scss index 01854b1228e5..f65568f69698 100644 --- a/css/_chrome-extension-banner.scss +++ b/css/_chrome-extension-banner.scss @@ -34,8 +34,8 @@ } &__checkbox-label { - font-size: 14px; - line-height: 18px; + font-size: 0.875rem; + line-height: 1.125rem; display: flex; align-items: center; letter-spacing: -0.006em; @@ -51,8 +51,8 @@ } &__text-container { - font-size: 14px; - line-height: 18px; + font-size: 0.875rem; + line-height: 1.125rem; display: flex; align-items: center; letter-spacing: -0.006em; @@ -84,8 +84,8 @@ &__button-text { font-weight: 600; - font-size: 14px; - line-height: 40px; + font-size: 0.875rem; + line-height: 2.5rem; text-align: center; letter-spacing: -0.006em; color: #FFFFFF; diff --git a/css/_inlay.scss b/css/_inlay.scss index 9e61aace9b59..f6593b015967 100644 --- a/css/_inlay.scss +++ b/css/_inlay.scss @@ -10,7 +10,7 @@ margin: 17px 0; padding-bottom: 17px; color: #ffffff; - font-size: 21px; + font-size: 1.25rem; letter-spacing: 0.3px; border-bottom: 1px solid lighten(#FFFFFF, 10%); } @@ -19,12 +19,12 @@ color: #ffffff; display: block; margin-top: 22px; - font-size: 16px; + font-size: 1rem; } &__icon { margin: 0 10px; - font-size: 50px; + font-size: 3.125rem; } } diff --git a/css/_meetings_list.scss b/css/_meetings_list.scss index 563e04bbf2ae..9de962eb4343 100644 --- a/css/_meetings_list.scss +++ b/css/_meetings_list.scss @@ -1,14 +1,14 @@ .meetings-list { - font-size: 14px; + font-size: 0.875rem; color: #253858; - line-height: 20px; + line-height: 1.25rem; text-align: left; text-overflow: ellipsis; display: flex; flex-direction: column; position: relative; - overflow: auto; - width: 100%; + overflow-y: auto; + flex-grow: 1; .meetings-list-empty { text-align: center; @@ -19,11 +19,11 @@ flex-direction: column; .description { - color: #2f3237; - font-size: 14px; - line-height: 18px; - margin-bottom: 16px; - max-width: 436px; + color: #2f3237; + font-size: 0.875rem; + line-height: 1.125rem; + margin-bottom: 16px; + max-width: 436px; } } @@ -37,8 +37,8 @@ color: #0163FF; cursor: pointer; display: flex; - font-size: 14px; - line-height: 18px; + font-size: 0.875rem; + line-height: 1.125rem; margin: 24px 0 32px 0; } @@ -101,17 +101,17 @@ } .title { - font-size: 12px; + font-size: 0.75rem; font-weight: 600; - line-height: 16px; + line-height: 1rem; margin-bottom: 4px; } .subtitle { color: #5E6D7A; font-weight: normal; - font-size: 12px; - line-height: 16px; + font-size: 0.75rem; + line-height: 1rem; } @@ -127,7 +127,8 @@ cursor: pointer; } - &.with-click-handler:hover { + &.with-click-handler:hover, + &.with-click-handler:focus { background-color: #c7ddff; } @@ -155,14 +156,30 @@ margin-right: 16px; position: absolute; - &> svg { + &>svg { fill: #0074e0; } } - .item:hover, .item:focus, .item:focus-within { + .item:hover, + .item:focus, + .item:focus-within { .delete-meeting { display: block; } + + .delete-meeting:hover { + &>svg { + fill: #4687ED; + } + } + } + + @media (max-width: 1024px) { /* Targets iPads and smaller devices */ + .item { + .delete-meeting { + display: block !important; + } + } } -} +} \ No newline at end of file diff --git a/css/_navigate_section_list.scss b/css/_navigate_section_list.scss index 019e2b173a57..ba1b45467335 100644 --- a/css/_navigate_section_list.scss +++ b/css/_navigate_section_list.scss @@ -1,7 +1,7 @@ %navigate-section-list-text { width: 100%; - font-size: 14px; - line-height: 20px; + font-size: 0.875rem; + line-height: 1.25rem; color: $welcomePageTitleColor; text-align: left; font-family: 'open_sanslight', Helvetica, sans-serif; @@ -52,7 +52,7 @@ .navigate-section-tile-body { @extend %navigate-section-list-tile-text; font-weight: normal; - line-height: 24px; + line-height: 1.5rem; } .navigate-section-list-tile-info { flex: 1; @@ -61,7 +61,7 @@ .navigate-section-tile-title { @extend %navigate-section-list-tile-text; font-weight: bold; - line-height: 24px; + line-height: 1.5rem; } .navigate-section-section-header { @extend %navigate-section-list-text; diff --git a/css/_participants-pane.scss b/css/_participants-pane.scss index c9caf87dcae7..4ef4d3bd658a 100644 --- a/css/_participants-pane.scss +++ b/css/_participants-pane.scss @@ -4,9 +4,3 @@ border-radius: 3px; } } - -.mobile-browser.shift-right { - .participants_pane { - z-index: -1; - } -} diff --git a/css/_policy.scss b/css/_policy.scss index 73e303bcfcaa..a370f46f2f14 100644 --- a/css/_policy.scss +++ b/css/_policy.scss @@ -8,8 +8,8 @@ &__text { text-align: center; - font-size: 14px; - line-height: 21px; + font-size: 0.875rem; + line-height: 1.25rem; font-weight: 300; } } \ No newline at end of file diff --git a/css/_reactions-menu.scss b/css/_reactions-menu.scss index 99d7450f1a30..3406c25e5d06 100644 --- a/css/_reactions-menu.scss +++ b/css/_reactions-menu.scss @@ -1,14 +1,14 @@ @use 'sass:math'; .reactions-menu { - width: 280px; + width: 330px; background: #242528; box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25); border-radius: 6px; padding: 16px; &.with-gif { - width: 328px; + width: 380px; .reactions-row .toolbox-button:last-of-type { top: 3px; @@ -55,7 +55,7 @@ span.emoji { width: 40px; height: 40px; - font-size: 22px; + font-size: 1.375rem; display: flex; align-items: center; justify-content: center; @@ -63,7 +63,7 @@ @for $i from 1 through 12 { &.increase-#{$i}{ - font-size: calc(20px + #{$i}px); + font-size: calc(1.25rem + #{$i}px); } } } @@ -96,8 +96,8 @@ span.text { font-style: normal; font-weight: 600; - font-size: 14px; - line-height: 24px; + font-size: 0.875rem; + line-height: 1.5rem; margin-left: 8px; } } @@ -132,8 +132,8 @@ $reactionCount: 20; .reaction-emoji { position: absolute; - font-size: 24px; - line-height: 32px; + font-size: 1.5rem; + line-height: 2rem; width: 32px; height: 32px; top: 0; diff --git a/css/_recording.scss b/css/_recording.scss index 10d5f2d6cdaf..681c40770e1b 100644 --- a/css/_recording.scss +++ b/css/_recording.scss @@ -12,7 +12,7 @@ .recording-title { display: inline-flex; align-items: center; - font-size: 14px; + font-size: 0.875rem; margin-left: 16px; max-width: 70%; @@ -35,8 +35,8 @@ .local-recording-warning { margin-top: 8px; display: block; - font-size: 14px; - line-height: 20px; + font-size: 0.875rem; + line-height: 1.25rem; padding: 8px 16px; &.text { @@ -126,7 +126,7 @@ .recording-info-title { display: inline-flex; - font-size: 14px; + font-size: 0.875rem; width: 290px } @@ -150,7 +150,7 @@ /** * Set font-size to be consistent with Atlaskit FieldText. */ - font-size: 14px; + font-size: 0.875rem; .broadcast-dropdown { text-align: left; @@ -194,6 +194,6 @@ .warning-text { color:#FFD740; - font-size: 12px; + font-size: 0.75rem; } } diff --git a/css/_redirect_page.scss b/css/_redirect_page.scss index afaa15935d3c..1fbe47482d74 100644 --- a/css/_redirect_page.scss +++ b/css/_redirect_page.scss @@ -2,7 +2,7 @@ width: 30%; margin: 20% auto; text-align: center; - font-size: 24px; + font-size: 1.5rem; .thanks-msg { border-bottom: 1px solid #FFFFFF; @@ -10,16 +10,16 @@ padding-right: 30px; p { margin: 30px auto; - font-size: 24px; - line-height: 24px; + font-size: 1.5rem; + line-height: 1.5rem; } } .hint-msg { p { margin: 26px auto; font-weight: 600; - font-size: 16px; - line-height: 18px; + font-size: 1rem; + line-height: 1.125rem; .hint-msg__holder{ font-weight: 200; } @@ -33,7 +33,7 @@ } .forbidden-msg { p { - font-size: 16px; + font-size: 1rem; margin-top: 15px; } } diff --git a/css/_reset.scss b/css/_reset.scss index 7a90fcd6f0c3..c9e9e6d09f26 100644 --- a/css/_reset.scss +++ b/css/_reset.scss @@ -75,8 +75,18 @@ select { * TYPOGRAPHY - 14px base font size, agnostic font stack */ body { - font-size: 14px; - line-height: 1.42857142857143; +// color: #333; +// font-family: Arial, sans-serif; +// font-size: 14px; + font-size: 0.875rem; + line-height: 1.42857142857143; +} +/* International Font Stacks*/ +// [lang|=en] { +// font-family: Arial, sans-serif; +// } +[lang|=ja] { + font-family: "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "メイリオ", Meiryo, "MS Pゴシック", Verdana, Arial, sans-serif; } /* Default margins */ @@ -111,51 +121,51 @@ pre:first-child { } /* Headings: desired line height in px / font size = unitless line height */ h1 { - color: #333; - font-size: 32px; - font-weight: normal; - line-height: 1.25; - text-transform: none; - margin: 30px 0 0 0; + color: #333; + font-size: 2rem; + font-weight: normal; + line-height: 1.25; + text-transform: none; + margin: 30px 0 0 0; } h2 { - color: #333; - font-size: 24px; - font-weight: normal; - line-height: 1.25; - text-transform: none; - margin: 30px 0 0 0; + color: #333; + font-size: 1.5rem; + font-weight: normal; + line-height: 1.25; + text-transform: none; + margin: 30px 0 0 0; } h3 { - color: #333; - font-size: 20px; - font-weight: normal; - line-height: 1.5; - text-transform: none; - margin: 30px 0 0 0; + color: #333; + font-size: 1.25rem; + font-weight: normal; + line-height: 1.5; + text-transform: none; + margin: 30px 0 0 0; } h4 { - font-size: 16px; - font-weight: bold; - line-height: 1.25; - text-transform: none; - margin: 20px 0 0 0; + font-size: 1rem; + font-weight: bold; + line-height: 1.25; + text-transform: none; + margin: 20px 0 0 0; } h5 { - color: #333; - font-size: 14px; - font-weight: bold; - line-height: 1.42857143; - text-transform: none; - margin: 20px 0 0 0; + color: #333; + font-size: 0.875rem; + font-weight: bold; + line-height: 1.42857143; + text-transform: none; + margin: 20px 0 0 0; } h6 { - color: #707070; - font-size: 12px; - font-weight: bold; - line-height: 1.66666667; - text-transform: uppercase; - margin: 20px 0 0 0; + color: #707070; + font-size: 0.75rem; + font-weight: bold; + line-height: 1.66666667; + text-transform: uppercase; + margin: 20px 0 0 0; } h1:first-child, h2:first-child, @@ -176,9 +186,9 @@ h5 + h6 { /* Other typographical elements */ small { - color: #707070; - font-size: 12px; - line-height: 1.33333333333333; + color: #707070; + font-size: 0.75rem; + line-height: 1.33333333333333; } code, kbd { diff --git a/css/_responsive.scss b/css/_responsive.scss index 5ab1c018af68..626af69e2a54 100644 --- a/css/_responsive.scss +++ b/css/_responsive.scss @@ -4,7 +4,7 @@ #enter_room { .welcome-page-button { - font-size: 16px; + font-size: 1rem; left: 0; text-align: center; width: 100%; @@ -53,25 +53,10 @@ } .welcome-footer-row-block { - display: block; - } - } -} - -.desktop-browser { - &.shift-right { - - @media only screen and (max-width: $verySmallScreen + $sidebarWidth) { - - #videoResolutionLabel { - display: none; - } - .vertical-filmstrip .filmstrip { - display: none; - } - .chrome-extension-banner { - display: none; - } + display: flex; + flex-direction: column; + gap:12px; + align-items: center; } } } diff --git a/css/_toolbars.scss b/css/_toolbars.scss index d607e582cdf7..d1327a9a000e 100644 --- a/css/_toolbars.scss +++ b/css/_toolbars.scss @@ -9,9 +9,9 @@ // Do not inherit the font-family from the toolbar button, because it's an // icon style. font-family: $baseFontFamily; - font-size: 9px; + font-size: 0.5rem; font-weight: 700; - line-height: 13px; + line-height: 0.75rem; min-width: 13px; overflow: hidden; text-align: center; @@ -69,8 +69,8 @@ .badge-round { bottom: -5px; - font-size: 12px; - line-height: 20px; + font-size: 0.75rem; + line-height: 1.25rem; min-width: 20px; pointer-events: none; position: absolute; diff --git a/css/_transcription-subtitles.scss b/css/_transcription-subtitles.scss deleted file mode 100644 index 9a125a308168..000000000000 --- a/css/_transcription-subtitles.scss +++ /dev/null @@ -1,26 +0,0 @@ -.transcription-subtitles { - bottom: $newToolbarSize + 40px; - font-size: 16px; - font-weight: 1000; - left: 50%; - max-width: 50vw; - opacity: 0.80; - overflow-wrap: break-word; - pointer-events: none; - position: absolute; - text-shadow: 0px 0px 1px rgba(0,0,0,0.3), - 0px 1px 1px rgba(0,0,0,0.3), - 1px 0px 1px rgba(0,0,0,0.3), - 0px 0px 1px rgba(0,0,0,0.3); - transform: translateX(-50%); - z-index: 7; - - &.lifted { - // Lift subtitle above toolbar+dominant speaker box. - bottom: $newToolbarSize + 36px + 40px; - } - - span { - background: black; - } -} diff --git a/css/_variables.scss b/css/_variables.scss index eaa8dc09ccdf..045094d3323f 100644 --- a/css/_variables.scss +++ b/css/_variables.scss @@ -22,7 +22,6 @@ $newToolbarSizeWithPadding: calc(#{$newToolbarSize} + 24px); * Chat */ $chatBackgroundColor: #131519; -$sidebarWidth: 315px; /** * Misc. @@ -38,6 +37,8 @@ $zindex1: 1; $zindex2: 2; $zindex3: 3; $toolbarZ: 250; +$watermarkZ: 253; + // Place filmstrip videos over toolbar in order // to make connection info visible. $filmstripVideosZ: $toolbarZ + 1; @@ -48,11 +49,11 @@ $filmstripVideosZ: $toolbarZ + 1; $primaryUnsupportedBrowserButtonBgColor: #0052cc; $unsupportedBrowserButtonBgColor: rgba(9, 30, 66, 0.04); $unsupportedBrowserTextColor: #4a4a4a; -$unsupportedBrowserTextSmallFontSize: 17px; +$unsupportedBrowserTextSmallFontSize: 1rem; $unsupportedBrowserTitleColor: #fff; -$unsupportedBrowserTitleFontSize: 24px; +$unsupportedBrowserTitleFontSize: 1.5rem; $unsupportedDesktopBrowserTextColor: rgba(255, 255, 255, 0.7); -$unsupportedDesktopBrowserTextFontSize: 21px; +$unsupportedDesktopBrowserTextFontSize: 1.25rem; /** * The size of the default watermark. @@ -76,18 +77,21 @@ $welcomePageHeaderBackground: linear-gradient(0deg, rgba(0, 0, 0, 0.2), rgba(0, $welcomePageHeaderBackgroundPosition: center; $welcomePageHeaderBackgroundRepeat: none; $welcomePageHeaderBackgroundSize: cover; -$welcomePageHeaderPaddingBottom: 15px; +$welcomePageHeaderPadding: 1rem; $welcomePageHeaderTitleMaxWidth: initial; $welcomePageHeaderTextAlign: center; +$welcomePageButtonBg: #0074E0; +$welcomePageButtonHoverBg: #4687ED; +$welcomePageButtonFocusOutline: #00225A; $welcomePageHeaderContainerMarginTop: 104px; $welcomePageHeaderContainerDisplay: flex; $welcomePageHeaderContainerMargin: $welcomePageHeaderContainerMarginTop auto 0; $welcomePageHeaderTextTitleMarginBottom: 0; -$welcomePageHeaderTextTitleFontSize: 42px; +$welcomePageHeaderTextTitleFontSize: 2.625rem; $welcomePageHeaderTextTitleFontWeight: normal; -$welcomePageHeaderTextTitleLineHeight: 50px; +$welcomePageHeaderTextTitleLineHeight: 3.125rem; $welcomePageHeaderTextTitleOpacity: 1; $welcomePageEnterRoomDisplay: flex; diff --git a/css/_videolayout_default.scss b/css/_videolayout_default.scss index 5c3e0855f3bc..6b505121cce3 100644 --- a/css/_videolayout_default.scss +++ b/css/_videolayout_default.scss @@ -160,7 +160,7 @@ } #alwaysOnTop .displayname { - font-size: 15px; + font-size: 0.875rem; position: inherit; width: 100%; left: 0px; @@ -294,7 +294,7 @@ width: auto; z-index: $zindex2; font-weight: 600; - font-size: 14px; + font-size: 0.875rem; text-align: center; color: #FFF; left: 50%; @@ -340,7 +340,7 @@ .presence-label { color: #fff; - font-size: 12px; + font-size: 0.75rem; font-weight: 100; left: 0; margin: 0 auto; diff --git a/css/_welcome_page.scss b/css/_welcome_page.scss index b09441d3098b..2e49d1f39ac7 100644 --- a/css/_welcome_page.scss +++ b/css/_welcome_page.scss @@ -18,6 +18,7 @@ body.welcome-page { background-position: $welcomePageHeaderBackgroundPosition; background-repeat: $welcomePageHeaderBackgroundRepeat; background-size: $welcomePageHeaderBackgroundSize; + padding: $welcomePageHeaderPadding; background-color: #131519; overflow: hidden; position: relative; @@ -52,9 +53,9 @@ body.welcome-page { .header-text-subtitle { color: #fff; - font-size: 20px; + font-size: 1.25rem; font-weight: 600; - line-height: 26px; + line-height: 1.625rem; margin: 16px 0 32px 0; text-align: $welcomePageHeaderTextAlign; } @@ -62,7 +63,7 @@ body.welcome-page { .not-allow-title-character-div { color: #f03e3e; background-color: #fff; - font-size: 12px; + font-size: 0.75rem; font-weight: 600; margin: 10px 0px 5px 0px; text-align: $welcomePageHeaderTextAlign; @@ -145,7 +146,7 @@ body.welcome-page { display: inline-block; height: 50px; width: 100%; - font-size: 14px; + font-size: 0.875rem; padding-left: 10px; &.focus-visible { @@ -169,7 +170,7 @@ body.welcome-page { } .tab-container { - font-size: 16px; + font-size: 1rem; position: relative; text-align: left; display: $welcomePageTabContainerDisplay; @@ -187,9 +188,9 @@ body.welcome-page { .tab-buttons { background-color: #c7ddff; border-radius: 6px; - color: #0163ff; - font-size: 14px; - line-height: 18px; + color: #0163FF; + font-size: 0.875rem; + line-height: 1.125rem; margin: 4px; display: $welcomePageTabButtonsDisplay; @@ -214,15 +215,19 @@ body.welcome-page { .welcome-page-button { border: 0; - font-size: 14px; - background: #0074e0; + font-size: 0.875rem; + background: $welcomePageButtonBg; border-radius: 3px; color: #ffffff; cursor: pointer; padding: 16px 20px; - + transition: all 0.2s; &:focus-within { - outline: auto 2px #022e61; + outline: auto 2px $welcomePageButtonFocusOutline; + } + + &:hover { + background-color: $welcomePageButtonHoverBg; } } @@ -238,7 +243,7 @@ body.welcome-page { * { cursor: pointer; - font-size: 32px; + font-size: 2rem; } .toolbox-icon { @@ -260,8 +265,7 @@ body.welcome-page { &.without-content { .welcome-card { - min-width: 500px; - max-width: 580px; + max-width: 100dvw; } } @@ -342,7 +346,7 @@ body.welcome-page { .welcome-footer-row-1-text { max-width: 200px; - margin-right: 16px; + text-align: center; } } diff --git a/css/filmstrip/_tile_view.scss b/css/filmstrip/_tile_view.scss index 083b4c083bc8..d461737086d6 100644 --- a/css/filmstrip/_tile_view.scss +++ b/css/filmstrip/_tile_view.scss @@ -91,15 +91,3 @@ } } } - -.shift-right .remote-videos > div { - /** - * Max-width corresponding to the ASPECT_RATIO_BREAKPOINT from features/filmstrip/constants, - * from which we subtract the chat size. - */ - @media only screen and (max-width: calc(500px + #{$sidebarWidth})) { - video { - object-fit: cover; - } - } -} diff --git a/css/filmstrip/_tile_view_overrides.scss b/css/filmstrip/_tile_view_overrides.scss index 8c53dffa47d6..e24376b52212 100644 --- a/css/filmstrip/_tile_view_overrides.scss +++ b/css/filmstrip/_tile_view_overrides.scss @@ -18,8 +18,7 @@ */ #dominantSpeaker, #largeVideoElementsContainer, - #sharedVideo, - .stage-participant-label { + #sharedVideo { display: none; } diff --git a/css/main.scss b/css/main.scss index 3ebb79f59aa5..6e7d378802c6 100644 --- a/css/main.scss +++ b/css/main.scss @@ -61,7 +61,6 @@ $flagsImagePath: "../images/"; @import "filmstrip/vertical_filmstrip_overrides"; @import "unsupported-browser/main"; @import "deep-linking/main"; -@import "transcription-subtitles"; @import "_meetings_list.scss"; @import "navigate_section_list"; @import "third-party-branding/google"; diff --git a/css/modals/invite/_add-people.scss b/css/modals/invite/_add-people.scss index bb2d0ee556ff..be9c10e1a34b 100644 --- a/css/modals/invite/_add-people.scss +++ b/css/modals/invite/_add-people.scss @@ -20,7 +20,7 @@ width: 28px; i { - line-height: 28px; + line-height: 1.75rem; margin: auto; } } @@ -35,7 +35,7 @@ padding-left: 10px; i { - line-height: 20px; + line-height: 1.25rem; margin: auto; } } diff --git a/css/modals/invite/_info.scss b/css/modals/invite/_info.scss index ec6f97fe080f..bcec7de10804 100644 --- a/css/modals/invite/_info.scss +++ b/css/modals/invite/_info.scss @@ -1,7 +1,7 @@ .info-dialog { cursor: default; display: flex; - font-size: 14px; + font-size: 0.875rem; .info-dialog-column { margin-right: 10px; @@ -53,8 +53,8 @@ max-width: 334px; width: 100%; margin-top: 20px; - font-size: 12px; - line-height: 24px; + font-size: 0.75rem; + line-height: 1.5rem; border-collapse: collapse; * { @@ -107,7 +107,7 @@ box-sizing: border-box; display: flex; flex-direction: column; - font-size: 12px; + font-size: 0.75rem; max-height: 100%; overflow: auto; padding: 15pt; diff --git a/css/modals/invite/_invite_more.scss b/css/modals/invite/_invite_more.scss index 4a77f6dcd2a5..dd85bd67ed67 100644 --- a/css/modals/invite/_invite_more.scss +++ b/css/modals/invite/_invite_more.scss @@ -1,8 +1,8 @@ .invite-more { &-dialog { color: #fff; - font-size: 15px; - line-height: 24px; + font-size: 0.875rem; + line-height: 1.5rem; &.separator { margin: 24px 0 24px -20px; diff --git a/css/modals/screen-share/_share-screen-warning.scss b/css/modals/screen-share/_share-screen-warning.scss index a6bea32a8034..277432f5f821 100644 --- a/css/modals/screen-share/_share-screen-warning.scss +++ b/css/modals/screen-share/_share-screen-warning.scss @@ -1,5 +1,5 @@ .share-screen-warn-dialog { - font-size: 14px; + font-size: 0.875rem; .separator-line { margin: 24px 0 24px -20px; diff --git a/css/modals/security/_security.scss b/css/modals/security/_security.scss index 0d69df6d2dbf..78f67911f12c 100644 --- a/css/modals/security/_security.scss +++ b/css/modals/security/_security.scss @@ -1,15 +1,15 @@ .security { &-dialog { color: #fff; - font-size: 15px; - line-height: 24px; + font-size: 0.875rem; + line-height: 1.5rem; &.password-section { display: flex; flex-direction: column; .description { - font-size: 13px; + font-size: 0.75rem; } .password { @@ -24,7 +24,7 @@ button { cursor: pointer; text-decoration: none; - font-size: 14px; + font-size: 0.875rem; color: #6FB1EA; } diff --git a/css/premeeting/_lobby.scss b/css/premeeting/_lobby.scss index bd114834d9e4..bfaf9b6e4a40 100644 --- a/css/premeeting/_lobby.scss +++ b/css/premeeting/_lobby.scss @@ -1,7 +1,7 @@ .lobby-screen { - font-size: 16px; + font-size: 1rem; font-weight: 400; - line-height: 26px; + line-height: 1.625rem; &-content { align-items: center; @@ -43,7 +43,7 @@ flex-direction: column; .description { - font-size: 13px; + font-size: 0.75rem; } .control-row { @@ -53,7 +53,7 @@ margin-top: 15px; label { - font-size: 14px; + font-size: 0.875rem; font-weight: bold; } } @@ -191,9 +191,9 @@ .title { flex: 1; color: #fff; - font-size: 20px; + font-size: 1.25rem; font-weight: 600; - line-height: 28px; + line-height: 1.75rem; letter-spacing: -1.2%; } } @@ -214,8 +214,8 @@ border-radius: 6px; box-sizing: border-box; color: white; - font-size: 12px; - line-height: 16px; + font-size: 0.75rem; + line-height: 1rem; margin-bottom: 16px; margin-top: -8px; padding: 4px; diff --git a/css/premeeting/_premeeting-screens.scss b/css/premeeting/_premeeting-screens.scss index c1137728c534..dad3e60b2fa7 100644 --- a/css/premeeting/_premeeting-screens.scss +++ b/css/premeeting/_premeeting-screens.scss @@ -5,9 +5,9 @@ color: #fff; cursor: pointer; display: inline-block; - font-size: 14px; + font-size: 0.875rem; font-weight: 600; - line-height: 24px; + line-height: 1.5rem; margin-bottom: 16px; padding: 7px 16px; position: relative; @@ -26,7 +26,7 @@ &.text { width: auto; - font-size: 13px; + font-size: 0.75rem; margin: 0; padding: 0; } @@ -98,7 +98,8 @@ } .action-btn { - font-size: 16px; + font-size: 1rem; + // margin-bottom: 8px; padding: 11px 16px; } } diff --git a/css/reload_overlay/_reload_overlay.scss b/css/reload_overlay/_reload_overlay.scss index 1356e4ba89cb..89e68ad13609 100644 --- a/css/reload_overlay/_reload_overlay.scss +++ b/css/reload_overlay/_reload_overlay.scss @@ -1,13 +1,13 @@ .reload_overlay_title { display: block; - font-size: 16px; - line-height: 20px; + font-size: 1rem; + line-height: 1.25rem; } .reload_overlay_text { display: block; - font-size: 12px; - line-height: 30px; + font-size: 0.75rem; + line-height: 1.875rem; } #reloadProgressBar { diff --git a/css/ringing/_ringing.scss b/css/ringing/_ringing.scss index c05e3fd54768..0663c8ce3e52 100644 --- a/css/ringing/_ringing.scss +++ b/css/ringing/_ringing.scss @@ -34,12 +34,12 @@ &__status{ margin-top: 15px; - font-size: 14px; - line-height: 20px; + font-size: 0.875rem; + line-height: 1.25rem; } &__name { - font-size: 24px; - line-height: 32px; + font-size: 1.5rem; + line-height: 2rem; } } diff --git a/css/third-party-branding/google.scss b/css/third-party-branding/google.scss index 10d96d3d0463..e8bc7a365346 100644 --- a/css/third-party-branding/google.scss +++ b/css/third-party-branding/google.scss @@ -8,7 +8,7 @@ cursor: pointer; display: inline-flex; font-family: Roboto, arial, sans-serif; - font-size: 14px; + font-size: 0.875rem; padding: 1px; .google-cta { @@ -17,7 +17,7 @@ /** * Hack the line height for vertical centering of text. */ - line-height: 32px; + line-height: 2rem; margin: 0 15px; } diff --git a/css/third-party-branding/microsoft.scss b/css/third-party-branding/microsoft.scss index 47ea5e8d8210..ccaa1ffc1117 100644 --- a/css/third-party-branding/microsoft.scss +++ b/css/third-party-branding/microsoft.scss @@ -17,8 +17,8 @@ .microsoft-cta { display: inline-block; color: #5E5E5E; - font-size: 15px; - line-height: 41px; + font-size: 0.875rem; + line-height: 2.5rem; } .microsoft-logo { diff --git a/debian/control b/debian/control index fc4dde1ab89f..b4569a4fe710 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: net Priority: extra Maintainer: Jitsi Team Uploaders: Emil Ivov , Damian Minkov -Build-Depends: debhelper (>= 8.0.0), nodejs +Build-Depends: debhelper (>= 8.0.0) Standards-Version: 3.9.6 Homepage: https://jitsi.org/meet @@ -20,7 +20,8 @@ Description: WebRTC JavaScript video conferences Package: jitsi-meet-web-config Architecture: all -Depends: openssl, nginx | nginx-full | nginx-extras | openresty | apache2, curl +Pre-Depends: nginx | nginx-full | nginx-extras | openresty | apache2 +Depends: openssl, curl Description: Configuration for web serving of Jitsi Meet Jitsi Meet is a WebRTC JavaScript application that uses Jitsi Videobridge to provide high quality, scalable video conferences. @@ -33,7 +34,7 @@ Description: Configuration for web serving of Jitsi Meet Package: jitsi-meet-prosody Architecture: all -Depends: openssl, prosody (>= 0.11.7) | prosody-trunk | prosody-0.12 | prosody-0.11, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect +Depends: openssl, prosody (>= 0.12.0) | prosody-trunk | prosody-0.12 | prosody-13.0, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect Replaces: jitsi-meet-tokens Description: Prosody configuration for Jitsi Meet Jitsi Meet is a WebRTC JavaScript application that uses Jitsi @@ -47,7 +48,7 @@ Description: Prosody configuration for Jitsi Meet Package: jitsi-meet-tokens Architecture: all -Depends: ${misc:Depends}, prosody-trunk | prosody-0.11 | prosody-0.12 | prosody (>= 0.11.7), jitsi-meet-prosody +Depends: ${misc:Depends}, prosody-trunk | prosody-0.12 | prosody-13.0 | prosody (>= 0.12.0), jitsi-meet-prosody Description: Prosody token authentication plugin for Jitsi Meet Package: jitsi-meet-turnserver diff --git a/debian/jitsi-meet-prosody.postinst b/debian/jitsi-meet-prosody.postinst index fcf3906f965b..a06edeccc142 100644 --- a/debian/jitsi-meet-prosody.postinst +++ b/debian/jitsi-meet-prosody.postinst @@ -131,18 +131,6 @@ case "$1" in fi fi - if [ "$PROSODY_CREATE_JICOFO_USER" = "true" ]; then - # create 'focus@auth.domain' prosody user - prosodyctl register $JICOFO_AUTH_USER $JICOFO_AUTH_DOMAIN $JICOFO_AUTH_PASSWORD - # trigger a restart - PROSODY_CONFIG_PRESENT="false" - fi - - USER_EXISTS_CHECK=`prosodyctl adduser jvb@$JICOFO_AUTH_DOMAIN < /dev/null || true` - if [ ! "$USER_EXISTS_CHECK" = "That user already exists" ]; then - prosodyctl register jvb $JICOFO_AUTH_DOMAIN $JVB_SECRET || true - fi - # Check whether prosody config has the internal muc, if not add it, # as we are migrating configs if [ -f $PROSODY_HOST_CONFIG ] && ! grep -q "internal.$JICOFO_AUTH_DOMAIN" $PROSODY_HOST_CONFIG; then @@ -166,6 +154,16 @@ case "$1" in PROSODY_CONFIG_PRESENT="false" fi + # Start using the polls component + if ! grep -q "Component \"polls.$JVB_HOSTNAME\"" $PROSODY_HOST_CONFIG ;then + echo -e "\nComponent \"polls.$JVB_HOSTNAME\" \"polls_component\"" >> $PROSODY_HOST_CONFIG + PROSODY_CONFIG_PRESENT="false" + fi + if ! grep -q -- '--"polls";' $PROSODY_HOST_CONFIG ;then + sed -i "s/\"polls\";/--\"polls\";/g" $PROSODY_HOST_CONFIG + PROSODY_CONFIG_PRESENT="false" + fi + # Old versions of jitsi-meet-prosody come with the extra plugin path commented out (https://github.com/jitsi/jitsi-meet/commit/e11d4d3101e5228bf956a69a9e8da73d0aee7949) # Make sure it is uncommented, as it contains required modules. if grep -q -- '--plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }' $PROSODY_HOST_CONFIG ;then @@ -186,6 +184,12 @@ case "$1" in PROSODY_CONFIG_PRESENT="false" fi + # Since prosody 13 admins are not automatically room owners and we expect that for jicofo + if ! grep -q -- 'component_admins_as_room_owners = ' $PROSODY_HOST_CONFIG ;then + sed -i "1s/^/component_admins_as_room_owners = true\n/" $PROSODY_HOST_CONFIG + PROSODY_CONFIG_PRESENT="false" + fi + JAAS_HOST_CONFIG="/etc/prosody/conf.avail/jaas.cfg.lua" if [ "${JAAS_INPUT}" = "true" ] && [ ! -f $JAAS_HOST_CONFIG ]; then sed -i "s/enabled = false -- Jitsi meet components/enabled = true -- Jitsi meet components/g" $PROSODY_HOST_CONFIG @@ -209,9 +213,6 @@ case "$1" in fi fi - # Make sure the focus@auth user's roster includes the proxy component (this is idempotent) - prosodyctl mod_roster_command subscribe focus.$JVB_HOSTNAME $JICOFO_AUTH_USER@$JICOFO_AUTH_DOMAIN - if [ ! -f /var/lib/prosody/$JVB_HOSTNAME.crt ]; then # prosodyctl takes care for the permissions # echo for using all default values @@ -254,9 +255,33 @@ case "$1" in if [ "$PROSODY_CONFIG_PRESENT" = "false" ]; then invoke-rc.d prosody restart || true - # In case we had updated the certificates and restarted prosody, let's restart and the bridge if possible + # give it some time to warm up + sleep 10 + + if [ "$PROSODY_CREATE_JICOFO_USER" = "true" ]; then + # create 'focus@auth.domain' prosody user + echo -e "$JICOFO_AUTH_PASSWORD\n$JICOFO_AUTH_PASSWORD" | prosodyctl adduser $JICOFO_AUTH_USER@$JICOFO_AUTH_DOMAIN > /dev/null || true + + # trigger a restart + PROSODY_CONFIG_PRESENT="false" + fi + + # creates the user if it does not exist + echo -e "$JVB_SECRET\n$JVB_SECRET" | prosodyctl adduser jvb@$JICOFO_AUTH_DOMAIN > /dev/null || true + + # Make sure the focus@auth user's roster includes the proxy component (this is idempotent) + prosodyctl mod_roster_command subscribe focus.$JVB_HOSTNAME $JICOFO_AUTH_USER@$JICOFO_AUTH_DOMAIN + + # To make sure the roster command is loaded + # Once we have https://issues.prosody.im/1908 we can start using prosodyctl shell roster subscribe + # and drop the wait and the prosody restart + sleep 1 + invoke-rc.d prosody restart || true + + # In case we had updated the certificates and restarted prosody, let's restart and the bridge and jicofo if possible if [ -d /run/systemd/system ] && [ "$CERT_ADDED_TO_TRUST" = "true" ]; then systemctl restart jitsi-videobridge2.service >/dev/null || true + systemctl restart jicofo.service >/dev/null || true fi fi ;; diff --git a/debian/jitsi-meet-web-config.postinst b/debian/jitsi-meet-web-config.postinst index 4c5df7c1ca4e..a24a71e2b97a 100644 --- a/debian/jitsi-meet-web-config.postinst +++ b/debian/jitsi-meet-web-config.postinst @@ -175,22 +175,6 @@ case "$1" in fi fi - # Fixes multi-stream flags to workaround problem with mobile joining a multi-stream call with multi-stream disabled - FIX_MSG="// Temporary backwards compatibility with old mobile clients." - if ! grep -q "^${FIX_MSG}" $JITSI_MEET_CONFIG; then - echo $FIX_MSG >> $JITSI_MEET_CONFIG - echo "config.flags = config.flags || {};" >> $JITSI_MEET_CONFIG - fi - if ! grep -q "^config.flags.sourceNameSignaling*" $JITSI_MEET_CONFIG; then - echo "config.flags.sourceNameSignaling = true;" >> $JITSI_MEET_CONFIG - fi - if ! grep -q "^config.flags.sendMultipleVideoStreams*" $JITSI_MEET_CONFIG; then - echo "config.flags.sendMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG - fi - if ! grep -q "^config.flags.receiveMultipleVideoStreams*" $JITSI_MEET_CONFIG; then - echo "config.flags.receiveMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG - fi - if [[ "$FORCE_OPENRESTY" = "true" ]]; then NGX_COMMON_CONF_PATH="/usr/local/openresty/nginx/conf/$JVB_HOSTNAME.conf" NGX_SVC_NAME=openresty diff --git a/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example b/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example index 49ae215d0fe5..bfd5e6a0ff5d 100644 --- a/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example +++ b/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example @@ -1,3 +1,6 @@ +-- We need this for prosody 13.0 +component_admins_as_room_owners = true + plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" } -- domain mapper options, must at least have domain base set to use the mapper @@ -12,6 +15,7 @@ external_services = { cross_domain_bosh = false; consider_bosh_secure = true; +consider_websocket_secure = true; -- https_ports = { }; -- Remove this line to prevent listening on port 5284 -- by default prosody 0.12 sends cors headers, if you want to disable it uncomment the following (the config is available on 0.12.1) @@ -35,6 +39,11 @@ unlimited_jids = { "jvb@auth.jitmeet.example.com" } +-- https://prosody.im/doc/modules/mod_smacks +smacks_max_unacked_stanzas = 5; +smacks_hibernation_time = 60; +smacks_max_old_sessions = 1; + VirtualHost "jitmeet.example.com" authentication = "jitsi-anonymous" -- do not delete me -- Properties below are modified by jitsi-meet-tokens package config @@ -49,26 +58,21 @@ VirtualHost "jitmeet.example.com" key = "/etc/prosody/certs/jitmeet.example.com.key"; certificate = "/etc/prosody/certs/jitmeet.example.com.crt"; } - av_moderation_component = "avmoderation.jitmeet.example.com" - speakerstats_component = "speakerstats.jitmeet.example.com" - end_conference_component = "endconference.jitmeet.example.com" -- we need bosh modules_enabled = { "bosh"; + "websocket"; + "smacks"; "ping"; -- Enable mod_ping - "speakerstats"; "external_services"; + "features_identity"; "conference_duration"; - "end_conference"; "muc_lobby_rooms"; "muc_breakout_rooms"; - "av_moderation"; - "room_metadata"; } c2s_require_encryption = false lobby_muc = "lobby.jitmeet.example.com" breakout_rooms_muc = "breakout.jitmeet.example.com" - room_metadata_component = "metadata.jitmeet.example.com" main_muc = "conference.jitmeet.example.com" -- muc_lobby_whitelist = { "recorder.jitmeet.example.com" } -- Here we can whitelist jibri to enter lobby enabled rooms @@ -79,7 +83,6 @@ Component "conference.jitmeet.example.com" "muc" "muc_hide_all"; "muc_meeting_id"; "muc_domain_mapper"; - "polls"; --"token_verification"; "muc_rate_limit"; "muc_password_whitelist"; @@ -119,8 +122,17 @@ Component "internal.auth.jitmeet.example.com" "muc" VirtualHost "auth.jitmeet.example.com" modules_enabled = { "limits_exception"; + "smacks"; } authentication = "internal_hashed" + smacks_hibernation_time = 15; + +VirtualHost "recorder.jitmeet.example.com" + modules_enabled = { + "smacks"; + } + authentication = "internal_hashed" + smacks_max_old_sessions = 2000; -- Proxy to jicofo's user JID, so that it doesn't have to register as a component. Component "focus.jitmeet.example.com" "client_proxy" @@ -135,6 +147,9 @@ Component "endconference.jitmeet.example.com" "end_conference" Component "avmoderation.jitmeet.example.com" "av_moderation_component" muc_component = "conference.jitmeet.example.com" +Component "filesharing.jitmeet.example.com" "filesharing_component" + muc_component = "conference.jitmeet.example.com" + Component "lobby.jitmeet.example.com" "muc" storage = "memory" restrict_room_creation = true @@ -143,9 +158,10 @@ Component "lobby.jitmeet.example.com" "muc" modules_enabled = { "muc_hide_all"; "muc_rate_limit"; - "polls"; } Component "metadata.jitmeet.example.com" "room_metadata_component" muc_component = "conference.jitmeet.example.com" breakout_rooms_component = "breakout.jitmeet.example.com" + +Component "polls.jitmeet.example.com" "polls_component" diff --git a/doc/debian/jitsi-meet/jitsi-meet.example b/doc/debian/jitsi-meet/jitsi-meet.example index 5b96ec90bb60..0ea213dbad1d 100644 --- a/doc/debian/jitsi-meet/jitsi-meet.example +++ b/doc/debian/jitsi-meet/jitsi-meet.example @@ -150,10 +150,18 @@ server { # alias /usr/share/jitsi-meet/load-test/libs/$1; #} + location = /_unlock { + add_header 'Access-Control-Allow-Origin' '*'; + add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains'; + add_header "Cache-Control" "no-cache, no-store"; + } + location ~ ^/conference-request/v1(\/.*)?$ { proxy_pass http://127.0.0.1:8888/conference-request/v1$1; add_header "Cache-Control" "no-cache, no-store"; add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Content-Type'; } location ~ ^/([^/?&:'"]+)/conference-request/v1(\/.*)?$ { rewrite ^/([^/?&:'"]+)/conference-request/v1(\/.*)?$ /conference-request/v1$2; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000000..4b07d0256285 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,31 @@ +import eslintConfigInternxt from '@internxt/eslint-config-internxt'; + +export default [ + { + ignores: [ + 'build/', + 'doc/', + 'libs/', + 'resources/', + 'react/features/stream-effects/virtual-background/vendor/', + 'react/features/face-landmarks/resources/', + 'actionTypes.ts', + 'react-native-sdk/', + '*.d.ts', + 'webpack.config.js', + 'tests/' + ] + }, + ...eslintConfigInternxt, + { + rules: { + 'linebreak-style': ['error', 'unix'], + 'quotes': 'off', + 'max-len': 'warn', + 'no-undef': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-unused-vars': 'warn', + '@typescript-eslint/no-unsafe-function-type': 'warn' + } + } +]; \ No newline at end of file diff --git a/giphy-analytics-stub.js b/giphy-analytics-stub.js new file mode 100644 index 000000000000..f9f293685deb --- /dev/null +++ b/giphy-analytics-stub.js @@ -0,0 +1,16 @@ +// Stub replacement for @giphy/js-analytics to prevent beforeunload handlers +// This completely disables all Giphy analytics functionality + +export const pingback = () => { + // Completely disabled - do nothing + +}; + +export const mergeAttributes = (attributes, newAttributes) => { + // Return merged attributes without any analytics calls + return { ...attributes, + ...newAttributes }; +}; + +// Ensure no beforeunload handlers are ever registered +export default pingback; diff --git a/globals.d.ts b/globals.d.ts index ba59a3fbbd5e..aec042b5c952 100644 --- a/globals.d.ts +++ b/globals.d.ts @@ -18,7 +18,6 @@ declare global { JITSI_MEET_LITE_SDK?: boolean; interfaceConfig?: any; JitsiMeetJS?: any; - JitsiMeetElectron?: any; PressureObserver?: any; PressureRecord?: any; ReactNativeWebView?: any; diff --git a/globals.native.d.ts b/globals.native.d.ts index 23e0e3e9248f..8e7d1bcff2fa 100644 --- a/globals.native.d.ts +++ b/globals.native.d.ts @@ -40,6 +40,7 @@ interface IWindow { interface INavigator { product: string; + userAgent: string; } declare global { diff --git a/images/google-play-badge.png b/images/google-play-badge.png index d34533767940..c778da6828bb 100644 Binary files a/images/google-play-badge.png and b/images/google-play-badge.png differ diff --git a/index.html b/index.html index 1d76a4376d99..9c718ec1fb2c 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,7 @@ Component: JitsiMeetJS.app.entryPoints.APP }) - const inIframe = () => { + const isEmbedded = () => { try { return window.self !== window.top; } catch (e) { @@ -45,7 +45,7 @@ }; const isElectron = navigator.userAgent.includes('Electron'); - const shouldRegisterWorker = !isElectron && !inIframe() && 'serviceWorker' in navigator; + const shouldRegisterWorker = !isElectron && !isEmbedded() && 'serviceWorker' in navigator; if (shouldRegisterWorker) { navigator.serviceWorker @@ -69,6 +69,11 @@ window.indexLoadedTime = window.performance.now(); console.log("(TIME) index.html loaded:\t", indexLoadedTime); + window.addEventListener('load', function() { + window.loadedEventTime = window.performance.now(); + console.log("(TIME) window loaded event:\t", loadedEventTime); + }); + // XXX the code below listeners for errors and displays an error message // in the document body when any of the required files fails to load. // The intention is to prevent from displaying broken page. diff --git a/interface_config.js b/interface_config.js index 4dc86d3ccf38..2c538c349f8e 100644 --- a/interface_config.js +++ b/interface_config.js @@ -41,14 +41,6 @@ var interfaceConfig = { */ DISABLE_PRESENCE_STATUS: false, - /** - * Whether the ringing sound in the call/ring overlay is disabled. If - * {@code undefined}, defaults to {@code false}. - * - * @type {boolean} - */ - DISABLE_RINGING: false, - /** * Whether the speech to text transcription subtitles panel is disabled. * If {@code undefined}, defaults to {@code false}. @@ -70,9 +62,6 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, - // DEPRECATED. Animation no longer supported. - // ENABLE_FEEDBACK_ANIMATION: false, - FILM_STRIP_MAX_HEIGHT: 120, GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true, @@ -203,17 +192,6 @@ var interfaceConfig = { // NATIVE_APP_NAME: 'Jitsi Meet', - /** - * Specify Firebase dynamic link properties for the mobile apps. - */ - // MOBILE_DYNAMIC_LINK: { - // APN: 'org.jitsi.meet', - // APP_CODE: 'w2atb', - // CUSTOM_DOMAIN: undefined, - // IBI: 'com.atlassian.JitsiMeet.ios', - // ISI: '1165103905' - // }, - /** * Hide the logo on the deep linking pages. */ @@ -227,7 +205,7 @@ var interfaceConfig = { /** * Specify custom URL for downloading f droid app. */ - // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/', + // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/packages/org.jitsi.meet/', // Connection indicators ( // CONNECTION_INDICATOR_AUTO_HIDE_ENABLED, diff --git a/ios/.xcode.env b/ios/.xcode.env index c6c417032df1..94f5fa4541c7 100644 --- a/ios/.xcode.env +++ b/ios/.xcode.env @@ -1,2 +1,6 @@ +THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) + +. ${THIS_DIR}/../node_modules/react-native/scripts/find-node-for-xcode.sh + export NODE_BINARY=$(command -v node) export ENTRY_FILE="${PROJECT_DIR}/../../index.ios.js" diff --git a/ios/Podfile b/ios/Podfile index b1b25a888a0e..c81916bb5592 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -5,17 +5,20 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip -platform :ios, '13.4' +platform :ios, '15.1' workspace 'jitsi-meet' install! 'cocoapods', :deterministic_uuids => false +def cocoa_utilities + pod 'CocoaLumberjack', '3.7.4' +end + target 'JitsiMeet' do project 'app/app.xcodeproj' pod 'Firebase/Analytics', '~> 8.0' pod 'Firebase/Crashlytics', '~> 8.0' - pod 'Firebase/DynamicLinks', '~> 8.0' end target 'JitsiMeetSDK' do @@ -28,8 +31,9 @@ target 'JitsiMeetSDK' do flags = get_default_flags() use_react_native!( :path => config[:reactNativePath], - :hermes_enabled => false, + :hermes_enabled => true, :fabric_enabled => false, + :new_arch_enabled => false, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) @@ -40,12 +44,11 @@ target 'JitsiMeetSDK' do pod 'giphy-react-native-sdk', :path => '../node_modules/@giphy/react-native-sdk' pod 'RNCalendarEvents', :path => '../node_modules/react-native-calendar-events' pod 'RNGoogleSignin', :path => '../node_modules/@react-native-google-signin/google-signin' - pod 'RNWatch', :path => '../node_modules/react-native-watch-connectivity' # Native pod dependencies # - pod 'CocoaLumberjack', '3.7.2' + cocoa_utilities pod 'ObjectiveDropboxOfficial', '6.2.3' end @@ -61,8 +64,9 @@ target 'JitsiMeetSDKLite' do config = use_native_modules! use_react_native!( :path => config[:reactNativePath], - :hermes_enabled => false, + :hermes_enabled => true, :fabric_enabled => false, + :new_arch_enabled => false, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) @@ -70,16 +74,17 @@ target 'JitsiMeetSDKLite' do # Native pod dependencies # - pod 'CocoaLumberjack', '3.7.2' + cocoa_utilities end post_install do |installer| + react_native_post_install( installer, use_native_modules![:reactNativePath], - :mac_catalyst_enabled => false + :mac_catalyst_enabled => false, + # :ccache_enabled => true ) - __apply_Xcode_12_5_M1_post_install_workaround(installer) installer.pods_project.targets.each do |target| # https://github.com/CocoaPods/CocoaPods/issues/11402 if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" @@ -87,10 +92,15 @@ post_install do |installer| config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end + target.build_configurations.each do |config| config.build_settings['SUPPORTS_MACCATALYST'] = 'NO' - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.4' + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.1' config.build_settings['OTHER_SWIFT_FLAGS'] = '$(inherited) -no-verify-emitted-module-interface' end end + + # Patch SocketRocket to support TLS 1.3 + %x(patch Pods/SocketRocket/SocketRocket/SRSecurityPolicy.m -N < patches/ws-tls13.diff) + end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index a5fa6121acbf..b2fd038f7076 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,27 +1,19 @@ PODS: - - Amplitude (8.7.1) - - amplitude-react-native (2.7.0): - - Amplitude (= 8.7.1) - - React-Core - - AppAuth (1.6.2): - - AppAuth/Core (= 1.6.2) - - AppAuth/ExternalUserAgent (= 1.6.2) - - AppAuth/Core (1.6.2) - - AppAuth/ExternalUserAgent (1.6.2): + - amplitude-react-native (1.4.13): + - React-Core + - AppAuth (1.7.6): + - AppAuth/Core (= 1.7.6) + - AppAuth/ExternalUserAgent (= 1.7.6) + - AppAuth/Core (1.7.6) + - AppAuth/ExternalUserAgent (1.7.6): - AppAuth/Core - - boost (1.76.0) - - CocoaLumberjack (3.7.2): - - CocoaLumberjack/Core (= 3.7.2) - - CocoaLumberjack/Core (3.7.2) + - boost (1.84.0) + - CocoaLumberjack (3.7.4): + - CocoaLumberjack/Core (= 3.7.4) + - CocoaLumberjack/Core (3.7.4) - DoubleConversion (1.1.6) - - FBLazyVector (0.72.9) - - FBReactNativeSpec (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.72.9) - - RCTTypeSafety (= 0.72.9) - - React-Core (= 0.72.9) - - React-jsi (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) + - fast_float (6.1.4) + - FBLazyVector (0.77.2) - Firebase/Analytics (8.15.0): - Firebase/Core - Firebase/Core (8.15.0): @@ -32,9 +24,6 @@ PODS: - Firebase/Crashlytics (8.15.0): - Firebase/CoreOnly - FirebaseCrashlytics (~> 8.15.0) - - Firebase/DynamicLinks (8.15.0): - - Firebase/CoreOnly - - FirebaseDynamicLinks (~> 8.15.0) - FirebaseAnalytics (8.15.0): - FirebaseAnalytics/AdIdSupport (= 8.15.0) - FirebaseCore (~> 8.0) @@ -69,19 +58,36 @@ PODS: - GoogleUtilities/Environment (~> 7.7) - nanopb (~> 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - FirebaseDynamicLinks (8.15.0): - - FirebaseCore (~> 8.0) - FirebaseInstallations (8.15.0): - FirebaseCore (~> 8.0) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/UserDefaults (~> 7.7) - PromisesObjC (< 3.0, >= 1.2) - - fmt (6.2.1) - - Giphy (2.2.4): + - fmt (11.0.2) + - Giphy (2.2.16): - libwebp - - giphy-react-native-sdk (2.3.0): - - Giphy (= 2.2.4) + - giphy-react-native-sdk (4.1.0): + - DoubleConversion + - Giphy (= 2.2.16) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - glog (0.3.5) - GoogleAppMeasurement (8.15.0): - GoogleAppMeasurement/AdIdSupport (= 8.15.0) @@ -103,49 +109,61 @@ PODS: - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - nanopb (~> 2.30908.0) - - GoogleDataTransport (9.3.0): + - GoogleDataTransport (9.4.1): - GoogleUtilities/Environment (~> 7.7) - - nanopb (< 2.30910.0, >= 2.30908.0) + - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleSignIn (7.0.0): - - AppAuth (~> 1.5) - - GTMAppAuth (< 3.0, >= 1.3) - - GTMSessionFetcher/Core (< 4.0, >= 1.1) - - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleSignIn (7.1.0): + - AppAuth (< 2.0, >= 1.7.3) + - GTMAppAuth (< 5.0, >= 4.1.1) + - GTMSessionFetcher/Core (~> 3.3) + - GoogleUtilities/AppDelegateSwizzler (7.13.3): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Privacy - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/Logger (7.13.3): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (7.13.3): - GoogleUtilities/Logger - - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.3): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.12.0)" - - GoogleUtilities/Reachability (7.12.0): + - "GoogleUtilities/NSData+zlib (7.13.3)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.3) + - GoogleUtilities/Reachability (7.13.3): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.3): - GoogleUtilities/Logger - - GTMAppAuth (2.0.0): - - AppAuth/Core (~> 1.6) - - GTMSessionFetcher/Core (< 4.0, >= 1.5) - - GTMSessionFetcher/Core (3.2.0) - - JitsiWebRTC (118.0.0) - - libwebp (1.3.2): - - libwebp/demux (= 1.3.2) - - libwebp/mux (= 1.3.2) - - libwebp/sharpyuv (= 1.3.2) - - libwebp/webp (= 1.3.2) - - libwebp/demux (1.3.2): + - GoogleUtilities/Privacy + - GTMAppAuth (4.1.1): + - AppAuth/Core (~> 1.7) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher/Core (3.5.0) + - hermes-engine (0.77.2): + - hermes-engine/Pre-built (= 0.77.2) + - hermes-engine/Pre-built (0.77.2) + - JitsiWebRTC (124.0.2) + - libwebp (1.5.0): + - libwebp/demux (= 1.5.0) + - libwebp/mux (= 1.5.0) + - libwebp/sharpyuv (= 1.5.0) + - libwebp/webp (= 1.5.0) + - libwebp/demux (1.5.0): - libwebp/webp - - libwebp/mux (1.3.2): + - libwebp/mux (1.5.0): - libwebp/demux - - libwebp/sharpyuv (1.3.2) - - libwebp/webp (1.3.2): + - libwebp/sharpyuv (1.5.0) + - libwebp/webp (1.5.0): - libwebp/sharpyuv - nanopb (2.30908.0): - nanopb/decode (= 2.30908.0) @@ -153,508 +171,1819 @@ PODS: - nanopb/decode (2.30908.0) - nanopb/encode (2.30908.0) - ObjectiveDropboxOfficial (6.2.3) - - PromisesObjC (2.3.1) - - PromisesSwift (2.3.1): - - PromisesObjC (= 2.3.1) - - RCT-Folly (2021.07.22.00): + - PromisesObjC (2.4.0) + - RCT-Folly (2024.11.18.00): - boost - DoubleConversion - - fmt (~> 6.2.1) + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly/Default (= 2021.07.22.00) - - RCT-Folly/Default (2021.07.22.00): + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): - boost - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCTRequired (0.72.9) - - RCTTypeSafety (0.72.9): - - FBLazyVector (= 0.72.9) - - RCTRequired (= 0.72.9) - - React-Core (= 0.72.9) - - React (0.72.9): - - React-Core (= 0.72.9) - - React-Core/DevSupport (= 0.72.9) - - React-Core/RCTWebSocket (= 0.72.9) - - React-RCTActionSheet (= 0.72.9) - - React-RCTAnimation (= 0.72.9) - - React-RCTBlob (= 0.72.9) - - React-RCTImage (= 0.72.9) - - React-RCTLinking (= 0.72.9) - - React-RCTNetwork (= 0.72.9) - - React-RCTSettings (= 0.72.9) - - React-RCTText (= 0.72.9) - - React-RCTVibration (= 0.72.9) - - React-callinvoker (0.72.9) - - React-Codegen (0.72.9): - - DoubleConversion - - FBReactNativeSpec + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-Core - - React-jsc + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCTDeprecation (0.77.2) + - RCTRequired (0.77.2) + - RCTTypeSafety (0.77.2): + - FBLazyVector (= 0.77.2) + - RCTRequired (= 0.77.2) + - React-Core (= 0.77.2) + - React (0.77.2): + - React-Core (= 0.77.2) + - React-Core/DevSupport (= 0.77.2) + - React-Core/RCTWebSocket (= 0.77.2) + - React-RCTActionSheet (= 0.77.2) + - React-RCTAnimation (= 0.77.2) + - React-RCTBlob (= 0.77.2) + - React-RCTImage (= 0.77.2) + - React-RCTLinking (= 0.77.2) + - React-RCTNetwork (= 0.77.2) + - React-RCTSettings (= 0.77.2) + - React-RCTText (= 0.77.2) + - React-RCTVibration (= 0.77.2) + - React-callinvoker (0.77.2) + - React-Core (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.77.2) + - React-cxxreact + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor - - React-NativeModulesApple - - React-rncore - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - React-Core (0.72.9): + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/CoreModulesHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.72.9) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/Default (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/DevSupport (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.77.2) + - React-Core/RCTWebSocket (= 0.77.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.72.9): + - React-Core/RCTActionSheetHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.72.9): + - React-Core/RCTAnimationHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.72.9): + - React-Core/RCTBlobHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.72.9) - - React-Core/RCTWebSocket (= 0.72.9) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor - - React-jsinspector (= 0.72.9) + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.72.9): + - React-Core/RCTImageHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.72.9): + - React-Core/RCTLinkingHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.72.9): + - React-Core/RCTNetworkHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.72.9): + - React-Core/RCTSettingsHeaders (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation - React-Core/Default - React-cxxreact - - React-jsc + - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTTextHeaders (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTVibrationHeaders (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTWebSocket (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.77.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-CoreModules (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety (= 0.77.2) + - React-Core/CoreModulesHeaders (= 0.77.2) + - React-jsi (= 0.77.2) + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.77.2) + - ReactCommon + - SocketRocket (= 0.7.1) + - React-cxxreact (0.77.2): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-debug (= 0.77.2) + - React-jsi (= 0.77.2) + - React-jsinspector + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - React-runtimeexecutor (= 0.77.2) + - React-timing (= 0.77.2) + - React-debug (0.77.2) + - React-defaultsnativemodule (0.77.2): + - hermes-engine + - RCT-Folly + - React-domnativemodule + - React-featureflagsnativemodule + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - React-domnativemodule (0.77.2): + - hermes-engine + - RCT-Folly + - React-Fabric + - React-FabricComponents + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.77.2) + - React-Fabric/attributedstring (= 0.77.2) + - React-Fabric/componentregistry (= 0.77.2) + - React-Fabric/componentregistrynative (= 0.77.2) + - React-Fabric/components (= 0.77.2) + - React-Fabric/core (= 0.77.2) + - React-Fabric/dom (= 0.77.2) + - React-Fabric/imagemanager (= 0.77.2) + - React-Fabric/leakchecker (= 0.77.2) + - React-Fabric/mounting (= 0.77.2) + - React-Fabric/observers (= 0.77.2) + - React-Fabric/scheduler (= 0.77.2) + - React-Fabric/telemetry (= 0.77.2) + - React-Fabric/templateprocessor (= 0.77.2) + - React-Fabric/uimanager (= 0.77.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.77.2) + - React-Fabric/components/root (= 0.77.2) + - React-Fabric/components/view (= 0.77.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/dom (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.77.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers/events (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.77.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager/consistency (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricComponents (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.77.2) + - React-FabricComponents/textlayoutmanager (= 0.77.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.77.2) + - React-FabricComponents/components/iostextinput (= 0.77.2) + - React-FabricComponents/components/modal (= 0.77.2) + - React-FabricComponents/components/rncore (= 0.77.2) + - React-FabricComponents/components/safeareaview (= 0.77.2) + - React-FabricComponents/components/scrollview (= 0.77.2) + - React-FabricComponents/components/text (= 0.77.2) + - React-FabricComponents/components/textinput (= 0.77.2) + - React-FabricComponents/components/unimplementedview (= 0.77.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/inputaccessory (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/iostextinput (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/modal (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/rncore (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/safeareaview (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/scrollview (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/text (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/textinput (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core - Yoga - - React-Core/RCTLinkingHeaders (0.72.9): + - React-FabricComponents/components/unimplementedview (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core - React-cxxreact - - React-jsc + - React-debug + - React-Fabric + - React-featureflags + - React-graphics - React-jsi - React-jsiexecutor - - React-perflogger - - React-runtimeexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - ReactCommon/turbomodule/core - Yoga - - React-Core/RCTNetworkHeaders (0.72.9): + - React-FabricComponents/textlayoutmanager (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core - React-cxxreact - - React-jsc + - React-debug + - React-Fabric + - React-featureflags + - React-graphics - React-jsi - React-jsiexecutor - - React-perflogger - - React-runtimeexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - ReactCommon/turbomodule/core - Yoga - - React-Core/RCTSettingsHeaders (0.72.9): + - React-FabricImage (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact - - React-jsc + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired (= 0.77.2) + - RCTTypeSafety (= 0.77.2) + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimeexecutor + - React-jsiexecutor (= 0.77.2) + - React-logger + - React-rendererdebug - React-utils - - SocketRocket (= 0.6.1) + - ReactCommon - Yoga - - React-Core/RCTTextHeaders (0.72.9): + - React-featureflags (0.77.2) + - React-featureflagsnativemodule (0.77.2): + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - React-graphics (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact - - React-jsc + - RCT-Folly/Fabric (= 2024.11.18.00) - React-jsi - React-jsiexecutor - - React-perflogger - - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTVibrationHeaders (0.72.9): + - React-hermes (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact - - React-jsc + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.77.2) - React-jsi - - React-jsiexecutor - - React-perflogger + - React-jsiexecutor (= 0.77.2) + - React-jsinspector + - React-perflogger (= 0.77.2) - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.77.2): + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimescheduler + - ReactCommon/turbomodule/core + - React-ImageManager (0.77.2): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTWebSocket (0.72.9): + - React-jserrorhandler (0.77.2): - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.72.9) + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) - React-cxxreact - - React-jsc + - React-debug + - React-featureflags - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimeexecutor - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-CoreModules (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.9) - - React-Codegen (= 0.72.9) - - React-Core/CoreModulesHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - React-RCTBlob - - React-RCTImage (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - SocketRocket (= 0.6.1) - - React-cxxreact (0.72.9): - - boost (= 1.76.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.72.9) - - React-debug (= 0.72.9) - - React-jsi (= 0.72.9) - - React-jsinspector (= 0.72.9) - - React-logger (= 0.72.9) - - React-perflogger (= 0.72.9) - - React-runtimeexecutor (= 0.72.9) - - React-debug (0.72.9) - - React-jsc (0.72.9): - - React-jsc/Fabric (= 0.72.9) - - React-jsi (= 0.72.9) - - React-jsc/Fabric (0.72.9): - - React-jsi (= 0.72.9) - - React-jsi (0.72.9): - - boost (= 1.76.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.72.9): - - DoubleConversion - - glog - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.72.9) - - React-jsi (= 0.72.9) - - React-perflogger (= 0.72.9) - - React-jsinspector (0.72.9) - - React-logger (0.72.9): + - ReactCommon/turbomodule/bridging + - React-jsi (0.77.2): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-jsiexecutor (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.77.2) + - React-jsi (= 0.77.2) + - React-jsinspector + - React-perflogger (= 0.77.2) + - React-jsinspector (0.77.2): + - DoubleConversion - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-featureflags + - React-jsi + - React-perflogger (= 0.77.2) + - React-runtimeexecutor (= 0.77.2) + - React-jsitracing (0.77.2): + - React-jsi + - React-logger (0.77.2): + - glog + - React-Mapbuffer (0.77.2): + - glog + - React-debug + - React-microtasksnativemodule (0.77.2): + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core - react-native-background-timer (2.4.1): - React-Core - - react-native-get-random-values (1.9.0): + - react-native-get-random-values (1.11.0): + - React-Core + - react-native-keep-awake (1.3.1): - React-Core - - react-native-keep-awake (4.0.0): - - React - react-native-netinfo (11.1.0): - React-Core - - react-native-orientation-locker (1.6.0): + - react-native-orientation-locker (1.5.0): - React-Core - - react-native-pager-view (6.2.0): + - react-native-pager-view (6.8.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - react-native-performance (5.0.0): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-performance (5.1.2): - React-Core - - react-native-safe-area-context (4.7.1): + - react-native-safe-area-context (5.5.2): - React-Core - - react-native-slider (4.4.3): + - react-native-slider (4.5.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - react-native-splash-screen (3.3.0): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video (6.13.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - react-native-video (6.0.0-alpha.11): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-video/Video (= 6.13.0) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video/Video (6.13.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - react-native-video/Video (= 6.0.0-alpha.11) - - react-native-video/Video (6.0.0-alpha.11): - - PromisesSwift + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-webrtc (124.0.7): + - JitsiWebRTC (~> 124.0.0) - React-Core - - react-native-webrtc (118.0.6): - - JitsiWebRTC (~> 118.0.0) + - react-native-webview (13.13.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - react-native-webview (13.5.1): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-worklets-core (1.6.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - React-NativeModulesApple (0.72.9): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-nativeconfig (0.77.2) + - React-NativeModulesApple (0.77.2): + - glog + - hermes-engine - React-callinvoker - React-Core - React-cxxreact - React-jsi + - React-jsinspector - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.72.9) - - React-RCTActionSheet (0.72.9): - - React-Core/RCTActionSheetHeaders (= 0.72.9) - - React-RCTAnimation (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.9) - - React-Codegen (= 0.72.9) - - React-Core/RCTAnimationHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-RCTAppDelegate (0.72.9): - - RCT-Folly + - React-perflogger (0.77.2): + - DoubleConversion + - RCT-Folly (= 2024.11.18.00) + - React-performancetimeline (0.77.2): + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact + - React-featureflags + - React-timing + - React-RCTActionSheet (0.77.2): + - React-Core/RCTActionSheetHeaders (= 0.77.2) + - React-RCTAnimation (0.77.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTAppDelegate (0.77.2): + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-CoreModules - - React-jsc + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-nativeconfig - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec - React-RCTImage - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes - React-runtimescheduler - - ReactCommon/turbomodule/core - - React-RCTBlob (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.72.9) - - React-Core/RCTBlobHeaders (= 0.72.9) - - React-Core/RCTWebSocket (= 0.72.9) - - React-jsi (= 0.72.9) - - React-RCTNetwork (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-RCTImage (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.9) - - React-Codegen (= 0.72.9) - - React-Core/RCTImageHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - React-RCTNetwork (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-RCTLinking (0.72.9): - - React-Codegen (= 0.72.9) - - React-Core/RCTLinkingHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-RCTNetwork (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.9) - - React-Codegen (= 0.72.9) - - React-Core/RCTNetworkHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-RCTSettings (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.9) - - React-Codegen (= 0.72.9) - - React-Core/RCTSettingsHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-RCTText (0.72.9): - - React-Core/RCTTextHeaders (= 0.72.9) - - React-RCTVibration (0.72.9): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.72.9) - - React-Core/RCTVibrationHeaders (= 0.72.9) - - React-jsi (= 0.72.9) - - ReactCommon/turbomodule/core (= 0.72.9) - - React-rncore (0.72.9) - - React-runtimeexecutor (0.72.9): - - React-jsi (= 0.72.9) - - React-runtimescheduler (0.72.9): - - glog - - RCT-Folly (= 2021.07.22.00) + - React-utils + - ReactCommon + - React-RCTBlob (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - React-RCTFabric (0.77.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-nativeconfig + - React-performancetimeline + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTFBReactNativeSpec (0.77.2): + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - ReactCommon + - React-RCTImage (0.77.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.77.2): + - React-Core/RCTLinkingHeaders (= 0.77.2) + - React-jsi (= 0.77.2) + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - ReactCommon/turbomodule/core (= 0.77.2) + - React-RCTNetwork (0.77.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTSettings (0.77.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTText (0.77.2): + - React-Core/RCTTextHeaders (= 0.77.2) + - Yoga + - React-RCTVibration (0.77.2): + - RCT-Folly (= 2024.11.18.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-rendererconsistency (0.77.2) + - React-rendererdebug (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) + - React-debug + - React-rncore (0.77.2) + - React-RuntimeApple (0.77.2): + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - React-RuntimeCore (0.77.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-cxxreact + - React-Fabric + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.77.2): + - React-jsi (= 0.77.2) + - React-RuntimeHermes (0.77.2): + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) - React-callinvoker + - React-cxxreact - React-debug + - React-featureflags - React-jsi + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug - React-runtimeexecutor - - React-utils (0.72.9): + - React-timing + - React-utils + - React-timing (0.77.2) + - React-utils (0.77.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-debug + - React-jsi (= 0.77.2) + - ReactAppDependencyProvider (0.77.2): + - ReactCodegen + - ReactCodegen (0.77.2): + - DoubleConversion - glog - - RCT-Folly (= 2021.07.22.00) + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core - React-debug - - ReactCommon/turbomodule/bridging (0.72.9): + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-RCTAppDelegate + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactCommon (0.77.2): + - ReactCommon/turbomodule (= 0.77.2) + - ReactCommon/turbomodule (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-cxxreact (= 0.77.2) + - React-jsi (= 0.77.2) + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - ReactCommon/turbomodule/bridging (= 0.77.2) + - ReactCommon/turbomodule/core (= 0.77.2) + - ReactCommon/turbomodule/bridging (0.77.2): - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.72.9) - - React-cxxreact (= 0.72.9) - - React-jsi (= 0.72.9) - - React-logger (= 0.72.9) - - React-perflogger (= 0.72.9) - - ReactCommon/turbomodule/core (0.72.9): + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-cxxreact (= 0.77.2) + - React-jsi (= 0.77.2) + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - ReactCommon/turbomodule/core (0.77.2): - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.72.9) - - React-cxxreact (= 0.72.9) - - React-jsi (= 0.72.9) - - React-logger (= 0.72.9) - - React-perflogger (= 0.72.9) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-cxxreact (= 0.77.2) + - React-debug (= 0.77.2) + - React-featureflags (= 0.77.2) + - React-jsi (= 0.77.2) + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - React-utils (= 0.77.2) - RNCalendarEvents (2.2.0): - - React - - RNCAsyncStorage (1.19.4): - React-Core - - RNCClipboard (1.5.1): + - RNCAsyncStorage (1.23.1): + - React-Core + - RNCClipboard (1.14.3): - React-Core - RNDefaultPreference (1.4.4): - React-Core - - RNDeviceInfo (10.9.0): + - RNDeviceInfo (12.1.0): - React-Core - - RNGestureHandler (2.9.0): + - RNGestureHandler (2.24.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNGoogleSignin (10.1.0): - GoogleSignIn (~> 7.0) - React-Core - - RNScreens (3.24.0): + - RNScreens (4.11.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNSound (0.11.2): - React-Core - RNSound/Core (= 0.11.2) - RNSound/Core (0.11.2): - React-Core - - RNSVG (13.13.0): + - RNSVG (15.11.2): + - React-Core + - SocketRocket (0.7.1) + - SplashView (0.0.18): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - RNWatch (1.1.0): - - React - - SocketRocket (0.6.1) - - Yoga (1.14.0) + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - Yoga (0.0.0) DEPENDENCIES: - - "amplitude-react-native (from `../node_modules/@amplitude/react-native`)" + - "amplitude-react-native (from `../node_modules/@amplitude/analytics-react-native`)" - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - CocoaLumberjack (= 3.7.2) + - CocoaLumberjack (= 3.7.4) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - Firebase/Analytics (~> 8.0) - Firebase/Crashlytics (~> 8.0) - - Firebase/DynamicLinks (~> 8.0) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - "giphy-react-native-sdk (from `../node_modules/@giphy/react-native-sdk`)" - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - ObjectiveDropboxOfficial (= 6.2.3) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-jsc (from `../node_modules/react-native/ReactCommon/jsc`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) - react-native-get-random-values (from `../node_modules/react-native-get-random-values`) - - react-native-keep-awake (from `../node_modules/react-native-keep-awake`) + - "react-native-keep-awake (from `../node_modules/@sayem314/react-native-keep-awake`)" - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`) - react-native-pager-view (from `../node_modules/react-native-pager-view`) - react-native-performance (from `../node_modules/react-native-performance`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - "react-native-slider (from `../node_modules/@react-native-community/slider`)" - - react-native-splash-screen (from `../node_modules/react-native-splash-screen`) - react-native-video (from `../node_modules/react-native-video`) - react-native-webrtc (from `../node_modules/react-native-webrtc`) - react-native-webview (from `../node_modules/react-native-webview`) + - react-native-worklets-core (from `../node_modules/react-native-worklets-core`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactAppDependencyProvider (from `build/generated/ios`) + - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - RNCalendarEvents (from `../node_modules/react-native-calendar-events`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - - "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)" + - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - RNDefaultPreference (from `../node_modules/react-native-default-preference`) - RNDeviceInfo (from `../node_modules/react-native-device-info`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) @@ -662,12 +1991,11 @@ DEPENDENCIES: - RNScreens (from `../node_modules/react-native-screens`) - RNSound (from `../node_modules/react-native-sound`) - RNSVG (from `../node_modules/react-native-svg`) - - RNWatch (from `../node_modules/react-native-watch-connectivity`) + - SplashView (from `../node_modules/react-native-splash-view`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: trunk: - - Amplitude - AppAuth - CocoaLumberjack - Firebase @@ -675,9 +2003,7 @@ SPEC REPOS: - FirebaseCore - FirebaseCoreDiagnostics - FirebaseCrashlytics - - FirebaseDynamicLinks - FirebaseInstallations - - fmt - Giphy - GoogleAppMeasurement - GoogleDataTransport @@ -690,36 +2016,40 @@ SPEC REPOS: - nanopb - ObjectiveDropboxOfficial - PromisesObjC - - PromisesSwift - SocketRocket EXTERNAL SOURCES: amplitude-react-native: - :path: "../node_modules/@amplitude/react-native" + :path: "../node_modules/@amplitude/analytics-react-native" boost: :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" - FBReactNativeSpec: - :path: "../node_modules/react-native/React/FBReactNativeSpec" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" giphy-react-native-sdk: :path: "../node_modules/@giphy/react-native-sdk" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2024-11-25-RNv0.77.0-d4f25d534ab744866448b36ca3bf3d97c08e638c RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: - :path: "../node_modules/react-native/Libraries/RCTRequired" + :path: "../node_modules/react-native/Libraries/Required" RCTTypeSafety: :path: "../node_modules/react-native/Libraries/TypeSafety" React: :path: "../node_modules/react-native/" React-callinvoker: :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Codegen: - :path: build/generated/ios React-Core: :path: "../node_modules/react-native/" React-CoreModules: @@ -728,22 +2058,50 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/cxxreact" React-debug: :path: "../node_modules/react-native/ReactCommon/react/debug" - React-jsc: - :path: "../node_modules/react-native/ReactCommon/jsc" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector" + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" React-logger: :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" react-native-background-timer: :path: "../node_modules/react-native-background-timer" react-native-get-random-values: :path: "../node_modules/react-native-get-random-values" react-native-keep-awake: - :path: "../node_modules/react-native-keep-awake" + :path: "../node_modules/@sayem314/react-native-keep-awake" react-native-netinfo: :path: "../node_modules/@react-native-community/netinfo" react-native-orientation-locker: @@ -756,18 +2114,22 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-safe-area-context" react-native-slider: :path: "../node_modules/@react-native-community/slider" - react-native-splash-screen: - :path: "../node_modules/react-native-splash-screen" react-native-video: :path: "../node_modules/react-native-video" react-native-webrtc: :path: "../node_modules/react-native-webrtc" react-native-webview: :path: "../node_modules/react-native-webview" + react-native-worklets-core: + :path: "../node_modules/react-native-worklets-core" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" React-NativeModulesApple: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" React-RCTActionSheet: :path: "../node_modules/react-native/Libraries/ActionSheetIOS" React-RCTAnimation: @@ -776,6 +2138,10 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/AppDelegate" React-RCTBlob: :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../node_modules/react-native/React" React-RCTImage: :path: "../node_modules/react-native/Libraries/Image" React-RCTLinking: @@ -788,14 +2154,30 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" React-rncore: :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimescheduler: :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" React-utils: :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios + ReactCodegen: + :path: build/generated/ios ReactCommon: :path: "../node_modules/react-native/ReactCommon" RNCalendarEvents: @@ -803,7 +2185,7 @@ EXTERNAL SOURCES: RNCAsyncStorage: :path: "../node_modules/@react-native-async-storage/async-storage" RNCClipboard: - :path: "../node_modules/@react-native-community/clipboard" + :path: "../node_modules/@react-native-clipboard/clipboard" RNDefaultPreference: :path: "../node_modules/react-native-default-preference" RNDeviceInfo: @@ -818,102 +2200,126 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-sound" RNSVG: :path: "../node_modules/react-native-svg" - RNWatch: - :path: "../node_modules/react-native-watch-connectivity" + SplashView: + :path: "../node_modules/react-native-splash-view" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - Amplitude: 834c7332dfb9640a751e21c13efb22a07c0c12d4 - amplitude-react-native: 0ed8cab759aafaa94961b82122bf56297da607ad - AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 - boost: 7dcd2de282d72e344012f7d6564d024930a6a440 - CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da - DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 - FBLazyVector: dc178b8748748c036ef9493a5d59d6d1f91a36ce - FBReactNativeSpec: d0aaae78e93c89dc2d691d8052a4d2aeb1b461ee + amplitude-react-native: d0039a3ce502eb441ba818af1b8c8ba710ef16e7 + AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + CocoaLumberjack: 543c79c114dadc3b1aba95641d8738b06b05b646 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: 4c16dde959a9d6b24f2aa32cb87cb919a1ace3f3 Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1 FirebaseCoreDiagnostics: 92e07a649aeb66352b319d43bdd2ee3942af84cb FirebaseCrashlytics: feb07e4e9187be3c23c6a846cce4824e5ce2dd0b - FirebaseDynamicLinks: 1dc816ef789c5adac6fede0b46d11478175c70e4 FirebaseInstallations: 40bd9054049b2eae9a2c38ef1c3dd213df3605cd - fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - Giphy: 6b5f6986c8df4f71e01a8ef86595f426b3439fb5 - giphy-react-native-sdk: fcda9639f8ca2cc47e0517b6ef11c19359db5f5a - glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + Giphy: 55914215541027873875757f350530e6d8986fba + giphy-react-native-sdk: 733177b2537b527cfa55979c396cc1f2046eb457 + glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 GoogleAppMeasurement: 4c19f031220c72464d460c9daa1fb5d1acce958e - GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe - GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 - GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 - GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae - GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8 - JitsiWebRTC: 3a41671ef65a51d7204323814b055a2690b921c7 - libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db + GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de + GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + hermes-engine: 8eb265241fa1d7095d3a40d51fd90f7dce68217c + JitsiWebRTC: b47805ab5668be38e7ee60e2258f49badfe8e1d0 + libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 ObjectiveDropboxOfficial: fe206ce8c0bc49976c249d472db7fdbc53ebbd53 - PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 - PromisesSwift: 28dca69a9c40779916ac2d6985a0192a5cb4a265 - RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: f30c3213569b1dc43659ecc549a6536e1e11139e - RCTTypeSafety: e1ed3137728804fa98bce30b70e3da0b8e23054e - React: 54070abee263d5773486987f1cf3a3616710ed52 - React-callinvoker: 794ea19cc4d8ce25921893141e131b9d6b7d02eb - React-Codegen: d5dc2cae27c93b0fab4241816343c586c58965c1 - React-Core: f82477baba3526cf8a4f70055a22a8e878e3ef9c - React-CoreModules: 87cc386c2200862672b76bb02c4574b4b1d11b3c - React-cxxreact: c7163706a8391f373cd513348a8ebbd5a4444626 - React-debug: 4dca41301a67ab2916b2c99bef60344a7b653ac5 - React-jsc: 44ec1ce4171f4b6776810618da8e3da45899ea77 - React-jsi: 799e7004db36b0b6da2d0969ce07bf3a96df8d19 - React-jsiexecutor: bb34b280cfad63aedb266571a305b6365affb875 - React-jsinspector: 54205b269da20c51417e0fc02c4cde9f29a4bf1a - React-logger: f42d2f2bc4cbb5d19d7c0ce84b8741b1e54e88c8 - react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe - react-native-get-random-values: dee677497c6a740b71e5612e8dbd83e7539ed5bb - react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774 - react-native-netinfo: 3aa5637c18834966e0c932de8ae1ae56fea20a97 - react-native-orientation-locker: 4409c5b12b65f942e75449872b4f078b6f27af81 - react-native-pager-view: 0ccb8bf60e2ebd38b1f3669fa3650ecce81db2df - react-native-performance: 47ac22ebf2aa24f324a96a5825581f6ce18c09e8 - react-native-safe-area-context: 9697629f7b2cda43cf52169bb7e0767d330648c2 - react-native-slider: 1cdd6ba29675df21f30544253bf7351d3c2d68c4 - react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457 - react-native-video: 472b7c366eaaaa0207e546d9a50410df89790bcf - react-native-webrtc: 4a9428c3ced472d3b08e1fbc4bfdc082692f2d5d - react-native-webview: 8baa0f5c6d336d6ba488e942bcadea5bf51f050a - React-NativeModulesApple: 4225ac31a26696c02c54b471052b3e85e74a9a0c - React-perflogger: cb433f318c6667060fc1f62e26eb58d6eb30a627 - React-RCTActionSheet: 0af3f8ac067e8a1dde902810b7ad169d0a0ec31e - React-RCTAnimation: 453a88e76ba6cb49819686acd8b21ce4d9ee4232 - React-RCTAppDelegate: 009ede96d00f79460a75ab5071eadb4aaa1e5012 - React-RCTBlob: a64134435f331c7cc716dcea6944a1443af49d32 - React-RCTImage: 8e059fbdfab18b86127424dc3742532aab960760 - React-RCTLinking: 05ae2aa525b21a7f1c5069c14330700f470efd97 - React-RCTNetwork: 7ed9d99d028c53e9a23e318f65937f499ba8a6fd - React-RCTSettings: 8b12ebf04d4baa0e259017fcef6cf7abd7d8ac51 - React-RCTText: a062ade9ff1591c46bcb6c5055fd4f96c154b8aa - React-RCTVibration: 87c490b6f01746ab8f9b4e555f514cc030c06731 - React-rncore: 140bc11b316da7003bf039844aef39e1c242d7ad - React-runtimeexecutor: 226ebef5f625878d3028b196cbecbbdeb6f208e4 - React-runtimescheduler: 75f2210cd7a50c4565dfd218e320479013b82f70 - React-utils: a3ffbc321572ee91911d7bc30965abe9aa4e16af - ReactCommon: d3522e54560e4d940554aa074a0206bf4d39ae5e - RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3 - RNCAsyncStorage: 3a8f7145d17cdd9f88e7b77666c94a09e4f759c8 - RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495 - RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31 - RNDeviceInfo: 02ea8b23e2280fa18e00a06d7e62804d74028579 - RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39 - RNGoogleSignin: a6a612cce56a45ab701c5c5c6e36f5390522d100 - RNScreens: b21dc57dfa2b710c30ec600786a3fc223b1b92e7 - RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 - RNSVG: ed492aaf3af9ca01bc945f7a149d76d62e73ec82 - RNWatch: fd30ca40a5b5ef58dcbc195638e68219bc455236 - SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 - Yoga: eddf2bbe4a896454c248a8f23b4355891eb720a6 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 + RCTDeprecation: 85b72250b63cfb54f29ca96ceb108cb9ef3c2079 + RCTRequired: 567cb8f5d42b990331bfd93faad1d8999b1c1736 + RCTTypeSafety: 5e57924492a5e0a762654f814dd018953274eca9 + React: 53c9bd6f974c5dd019ee466e46477eb679149c38 + React-callinvoker: d6484472c1c742917b51338525336d6a74ab8a9f + React-Core: 4ddb741e08144902ce4e0e66b7c67c6f2dc5bfc7 + React-CoreModules: 0a31ca662ac169edd0c210efd324e19b3012d7ed + React-cxxreact: f8ecc64ebf8b795c550ae8b65ba4908ffe7350d0 + React-debug: bcb3ad3ac30170b3dad4a35b4b85db17ff9553b2 + React-defaultsnativemodule: 6f82446e1c372d904fd06f7c405fcb04f76e3d24 + React-domnativemodule: 6af75363e305253251475a82df996cde8a53e066 + React-Fabric: 0a8ef32ba4f8516c89d89126434ead8c0c564da1 + React-FabricComponents: 7c69a91400e6c1766ad9d44b7fa73871559ead30 + React-FabricImage: dc71846e7a8b0825890faacf88a2a1cf771c7108 + React-featureflags: 1d15b368330ec96edc02e68cdae0f266efad5ebe + React-featureflagsnativemodule: 45f51f78d54579087e1233dc8bae31e2536c4208 + React-graphics: 235f82ac0ca6b4533049e10baf202f521804baef + React-hermes: 104bc85f9903f1caa91db6b09a5f97ceda6c50af + React-idlecallbacksnativemodule: 47f766f119cccd4486081f88ebc30e3046130ce0 + React-ImageManager: 0190f64acb02be89d57764f608989297409eba30 + React-jserrorhandler: 30f3a3a2e54ac2528bf93b59f764a8ae1bcd88eb + React-jsi: 0a6dd1eafe243a6c19c5207103aa0fba3c45a46d + React-jsiexecutor: 9aba4e775cc17d9c4311caf1bf2158a570380a9a + React-jsinspector: 6982d464d92181217de063cebc4a992d99d85b7f + React-jsitracing: a6569c6c0dadecdce4821f87a420b409a19e42d3 + React-logger: 592d84bed2e04db64c0b3725f9970b437473f3d3 + React-Mapbuffer: 595c88852c1dcb1c4faafad88148de8690a70aae + React-microtasksnativemodule: b56986b155ae82e9bcb1d1c0ca8726bac52dbb6e + react-native-background-timer: 4638ae3bee00320753647900b21260b10587b6f7 + react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba + react-native-keep-awake: 03b74eebe4f2bb5e8478fc8f420651a92463b6f8 + react-native-netinfo: 5364263f903da576bdef9c84a76fe243ab06812c + react-native-orientation-locker: dbd3f6ddbe9e62389cb0807dc2af63f6c36dec36 + react-native-pager-view: 11662c698c8f11d39e05891316d2a144fa00adc4 + react-native-performance: 125a96c145e29918b55b45ce25cbba54f1e24dcd + react-native-safe-area-context: 0f7bf11598f9a61b7ceac8dc3f59ef98697e99e1 + react-native-slider: 1205801a8d29b28cacc14eef08cb120015cdafcb + react-native-video: eb861d67a71dfef1bbf6086a811af5f338b13781 + react-native-webrtc: e8f0ce746353adc2744a2b933645e1aeb41eaa74 + react-native-webview: 079eca50edf657503318b66687dadfb903731aa8 + react-native-worklets-core: b59cf88762c8fb6132d8796babd4cec15217d6f0 + React-nativeconfig: ecf4dc92c40b97e2b3f0c619938f78bfd6507b08 + React-NativeModulesApple: f457bbfb30fb3bc41979b1a87b99d292d7340d39 + React-perflogger: 1111b5feb064c4cc83df88fb403efda54b387951 + React-performancetimeline: f04d09d6c0da5c31c9c3a10afe6fcfdaddbb8624 + React-RCTActionSheet: 150cfe1df4275db2251a2a4a1b22be3294e94ef7 + React-RCTAnimation: 1de976f7a660429c39e20a81a728eb0102226f9b + React-RCTAppDelegate: 4d0243b352cd6c12744ffaa1b7e6aa90eaa3c291 + React-RCTBlob: 27c8f8fa6cb47cd4cb422d74d015722f01835493 + React-RCTFabric: fd2345f7a3c1415f988df0640d0e525d62fa4932 + React-RCTFBReactNativeSpec: e7554dd3838a0d17e2e361e737ede98dfe2ebc9c + React-RCTImage: 148afd89e4de0c36b87df0d1e8c0007fa89fb055 + React-RCTLinking: 389458d08b891fa0a03e4c2cee545ebff341d06f + React-RCTNetwork: a78572948341ef0f9438b2d1cd685be564256518 + React-RCTSettings: 484e4ec805ff8ab6c0af21fe90f415a8fae89f43 + React-RCTText: 0d6fbf6ebe6eaa749bc7d672ba01a3e96553e941 + React-RCTVibration: 4baa58b79be7062096e0f0b7575d4f0507952449 + React-rendererconsistency: 5f7773101a5d744d37967faabdb1b259c8f0b481 + React-rendererdebug: d6da0f1dd47e4a087396ec7e7c37d2f0a469d2bd + React-rncore: 679835b31b637897cfd0b2ede7f9c206b9a688ff + React-RuntimeApple: 532438b9b2a0438639ebfae26117a23615b89d09 + React-RuntimeCore: 8cb8fa729bf409730fc38a019556afc02e45989b + React-runtimeexecutor: e6e7af01f9989f931289250ee9060604bc0f0144 + React-RuntimeHermes: 825d11cbef3dac839016830bdb93d815492bbe94 + React-runtimescheduler: a3560dd66614edaf2f2fb90697474802f8bdd358 + React-timing: d9adb125887c734222f455da146e2ff1a7b2b9c1 + React-utils: 5642285f8379e4d024f1f158ffcc77d9c52c877c + ReactAppDependencyProvider: f334cebc0beed0a72490492e978007082c03d533 + ReactCodegen: 6f764a42662ad6379fd3fbb9c09baff6e4797b20 + ReactCommon: 7763e59534d58e15f8f22121cdfe319040e08888 + RNCalendarEvents: 62e1ac89d3afbfa77cf2dafa8727af93fa70825f + RNCAsyncStorage: aa75595c1aefa18f868452091fa0c411a516ce11 + RNCClipboard: 7c3e3b5f71d84ef61690ad377b6c50cf27864ff5 + RNDefaultPreference: ee13d69e6693d193cd223d10e15e5b3c012d31ba + RNDeviceInfo: 723e97dd98af9b7913477e7a40252c15517c258c + RNGestureHandler: 9f3109e11ed88fe5bed280bf7762b25e4c52f396 + RNGoogleSignin: 30e1aee80140dc0706cd78a4951c411376c88329 + RNScreens: 9ef996b6041d0960a4794a845f7d0808b171b4ef + RNSound: 314cc5226453ef4a3314a196c65e8a65e5106a7b + RNSVG: 67de7abef81f367387b708ba6d2acefe7d4f5895 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + SplashView: ed71a114c3ffe60dc3a9e5aa2cefb352c3794a70 + Yoga: 31a098f74c16780569aebd614a0f37a907de0189 -PODFILE CHECKSUM: ec00682c7062a323dff24a3c3643ca0bbb420d01 +PODFILE CHECKSUM: 7c37a89916893e11159576c8b308b7b5c25246c9 -COCOAPODS: 1.14.3 +COCOAPODS: 1.16.2 diff --git a/ios/app/PrivacyInfo.xcprivacy b/ios/app/PrivacyInfo.xcprivacy new file mode 100644 index 000000000000..f5d41601cec7 --- /dev/null +++ b/ios/app/PrivacyInfo.xcprivacy @@ -0,0 +1,47 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + 1C8F.1 + C56D.1 + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + 85F4.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/ios/app/app.xcodeproj/project.pbxproj b/ios/app/app.xcodeproj/project.pbxproj index 187e2bb0a4dd..b7ff1613a5dc 100644 --- a/ios/app/app.xcodeproj/project.pbxproj +++ b/ios/app/app.xcodeproj/project.pbxproj @@ -3,27 +3,16 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ - 0B412F1F1EDEE6E800B1A0A6 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */; }; - 0B412F211EDEE95300B1A0A6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0B412F201EDEE95300B1A0A6 /* Main.storyboard */; }; - 0B5418471F7C5D8C00A2DD86 /* MeetingRowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B5418461F7C5D8C00A2DD86 /* MeetingRowController.swift */; }; - 0B7001701F7C51CC005944F4 /* InCallController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B70016F1F7C51CC005944F4 /* InCallController.swift */; }; - 0BEA5C291F7B8F73000D0AB4 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0BEA5C271F7B8F73000D0AB4 /* Interface.storyboard */; }; - 0BEA5C2B1F7B8F73000D0AB4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BEA5C2A1F7B8F73000D0AB4 /* Assets.xcassets */; }; - 0BEA5C321F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 0BEA5C371F7B8F73000D0AB4 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA5C361F7B8F73000D0AB4 /* InterfaceController.swift */; }; - 0BEA5C391F7B8F73000D0AB4 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA5C381F7B8F73000D0AB4 /* ExtensionDelegate.swift */; }; - 0BEA5C3B1F7B8F73000D0AB4 /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */; }; - 0BEA5C3D1F7B8F73000D0AB4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */; }; - 0BEA5C411F7B8F73000D0AB4 /* JitsiMeetCompanion.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; - 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.storyboard */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; }; + 361974E2A13624D7735D619D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */; }; + 4341A9062CF0D63200940D93 /* hermes.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4341A9052CF0D63200940D93 /* hermes.xcframework */; }; + 4341A9072CF0D63200940D93 /* hermes.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4341A9052CF0D63200940D93 /* hermes.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; }; 4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; }; 4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; }; @@ -31,32 +20,17 @@ 4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; }; 4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; }; 4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; }; - DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; }; + DEA0B7122D7EF16E0062A9F6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEA0B7112D7EF16E0062A9F6 /* ViewController.swift */; }; + DEA0B7142D7EF7590062A9F6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEA0B7132D7EF7590062A9F6 /* AppDelegate.swift */; }; DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; }; DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */; }; DED016F228ECBC9D009D5E8D /* WebRTC.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - E588011722789D43008B0561 /* JitsiMeetContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E58801132278944E008B0561 /* JitsiMeetContext.swift */; }; - E5C97B63227A1EB400199214 /* JitsiMeetCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */; }; FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */; }; FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0BEA5C331F7B8F73000D0AB4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0BEA5C301F7B8F73000D0AB4; - remoteInfo = "JitsiMeetCompanion Extension"; - }; - 0BEA5C3F1F7B8F73000D0AB4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0BEA5C241F7B8F73000D0AB4; - remoteInfo = JitsiMeetCompanion; - }; 4EB06029260E026600F524C5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; @@ -74,30 +48,19 @@ dstSubfolderSpec = 10; files = ( DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */, + 4341A9072CF0D63200940D93 /* hermes.xcframework in Embed Frameworks */, FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */, DED016F228ECBC9D009D5E8D /* WebRTC.xcframework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 0BEA5C471F7B8F73000D0AB4 /* Embed App Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - 0BEA5C321F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex in Embed App Extensions */, - ); - name = "Embed App Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; 0BEA5C491F7B8F73000D0AB4 /* Embed Watch Content */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; dstSubfolderSpec = 16; files = ( - 0BEA5C411F7B8F73000D0AB4 /* JitsiMeetCompanion.app in Embed Watch Content */, ); name = "Embed Watch Content"; runOnlyForDeploymentPostprocessing = 0; @@ -117,31 +80,13 @@ /* Begin PBXFileReference section */ 0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 0B412F201EDEE95300B1A0A6 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 0B5418461F7C5D8C00A2DD86 /* MeetingRowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRowController.swift; sourceTree = ""; }; - 0B70016F1F7C51CC005944F4 /* InCallController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InCallController.swift; sourceTree = ""; }; - 0BBD021F212EB69D00CCB19F /* Types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; 0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebRTC.framework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.framework"; sourceTree = ""; }; - 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JitsiMeetCompanion.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 0BEA5C281F7B8F73000D0AB4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; - 0BEA5C2A1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0BEA5C2C1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "JitsiMeetCompanion Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0BEA5C361F7B8F73000D0AB4 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; - 0BEA5C381F7B8F73000D0AB4 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; - 0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplicationController.swift; sourceTree = ""; }; - 0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* jitsi-meet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "jitsi-meet.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = src/Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = ""; }; + 4341A9052CF0D63200940D93 /* hermes.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = hermes.xcframework; path = "../Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework"; sourceTree = ""; }; 4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = ""; }; 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = JitsiMeetBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 4EB06026260E026600F524C5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = ""; }; @@ -151,28 +96,20 @@ 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinNotificationCenter.swift; sourceTree = ""; }; 4EB0603B260E09D000F524C5 /* SampleUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleUploader.swift; sourceTree = ""; }; 4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; + 5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = ""; }; B3B083EB1D4955FF0069CEE7 /* app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app.entitlements; sourceTree = ""; }; D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; }; DE050388256E904600DEE3A5 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/apple/WebRTC.xcframework"; sourceTree = ""; }; - DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = ""; }; - DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = ""; }; + DEA0B7112D7EF16E0062A9F6 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DEA0B7132D7EF7590062A9F6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeetSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = ../Pods/JitsiWebRTC/WebRTC.xcframework; sourceTree = ""; }; DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.xcframework"; sourceTree = ""; }; - E58801132278944E008B0561 /* JitsiMeetContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetContext.swift; sourceTree = ""; }; - E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetCommands.swift; sourceTree = ""; }; - FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GiphyUISDK.xcframework; path = ../Pods/Giphy/GiphySDK/GiphyUISDK.xcframework; sourceTree = ""; }; + FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:925PGC4MV7:Giphy, Inc."; lastKnownFileType = wrapper.xcframework; name = GiphyUISDK.xcframework; path = ../Pods/Giphy/GiphySDK/GiphyUISDK.xcframework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0BEA5C2E1F7B8F73000D0AB4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -181,13 +118,7 @@ DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */, FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */, 2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F021A8A5B056078665DE530 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( + 4341A9062CF0D63200940D93 /* hermes.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -205,6 +136,7 @@ 0B26BE711EC5BC4D00EEFB41 /* Frameworks */ = { isa = PBXGroup; children = ( + 4341A9052CF0D63200940D93 /* hermes.xcframework */, DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */, FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */, DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */, @@ -218,49 +150,13 @@ name = Frameworks; sourceTree = ""; }; - 0BEA5C261F7B8F73000D0AB4 /* Watch app */ = { - isa = PBXGroup; - children = ( - 0BEA5C271F7B8F73000D0AB4 /* Interface.storyboard */, - 0BEA5C2A1F7B8F73000D0AB4 /* Assets.xcassets */, - 0BEA5C2C1F7B8F73000D0AB4 /* Info.plist */, - ); - name = "Watch app"; - path = watchos/app; - sourceTree = ""; - }; - 0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */ = { - isa = PBXGroup; - children = ( - 0BEA5C361F7B8F73000D0AB4 /* InterfaceController.swift */, - 0BEA5C381F7B8F73000D0AB4 /* ExtensionDelegate.swift */, - 0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */, - 0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */, - 0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */, - 0B70016F1F7C51CC005944F4 /* InCallController.swift */, - 0B5418461F7C5D8C00A2DD86 /* MeetingRowController.swift */, - E58801132278944E008B0561 /* JitsiMeetContext.swift */, - E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */, - ); - name = "WatchKit extension"; - path = watchos/extension; - sourceTree = ""; - }; 13B07FAE1A68108700A75B9A /* src */ = { isa = PBXGroup; children = ( - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, - DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */, - DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */, + DEA0B7132D7EF7590062A9F6 /* AppDelegate.swift */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, - 13B07FB71A68108700A75B9A /* main.m */, - 0B412F201EDEE95300B1A0A6 /* Main.storyboard */, - 0BBD021F212EB69D00CCB19F /* Types.h */, - 0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */, - 0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */, + DEA0B7112D7EF16E0062A9F6 /* ViewController.swift */, ); path = src; sourceTree = ""; @@ -289,10 +185,10 @@ 0B26BE711EC5BC4D00EEFB41 /* Frameworks */, 83CBBA001A601CBA00E9B192 /* Products */, 13B07FAE1A68108700A75B9A /* src */, - 0BEA5C261F7B8F73000D0AB4 /* Watch app */, - 0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */, 4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */, CDD71F5E1157E9F283DF92A8 /* Pods */, + 5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */, + DEAC44E22E97D2C200AD7BEE /* Recovered References */, ); indentWidth = 2; sourceTree = ""; @@ -302,8 +198,6 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* jitsi-meet.app */, - 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */, - 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */, 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */, ); name = Products; @@ -319,44 +213,17 @@ path = ../Pods; sourceTree = ""; }; + DEAC44E22E97D2C200AD7BEE /* Recovered References */ = { + isa = PBXGroup; + children = ( + 13B07FB11A68108700A75B9A /* LaunchScreen.storyboard */, + ); + name = "Recovered References"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0BEA5C481F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion" */; - buildPhases = ( - 0BEA5C231F7B8F73000D0AB4 /* Resources */, - 0BEA5C471F7B8F73000D0AB4 /* Embed App Extensions */, - 1F021A8A5B056078665DE530 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 0BEA5C341F7B8F73000D0AB4 /* PBXTargetDependency */, - ); - name = JitsiMeetCompanion; - productName = JitsiMeetCompanion; - productReference = 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */; - productType = "com.apple.product-type.application.watchapp2"; - }; - 0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0BEA5C461F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion Extension" */; - buildPhases = ( - 0BEA5C2D1F7B8F73000D0AB4 /* Sources */, - 0BEA5C2E1F7B8F73000D0AB4 /* Frameworks */, - 0BEA5C2F1F7B8F73000D0AB4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "JitsiMeetCompanion Extension"; - productName = "JitsiMeetCompanion Extension"; - productReference = 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */; - productType = "com.apple.product-type.watchkit2-extension"; - }; 13B07F861A680F5B00A75B9A /* JitsiMeet */ = { isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */; @@ -367,18 +234,17 @@ 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 0B26BE701EC5BC3C00EEFB41 /* Embed Frameworks */, - 0BB7DA181EC9E695007AAE98 /* Adjust ATS */, - DEF4813D224925A2002AD03A /* Copy Google Plist file */, - DE11877A21EE09640078D059 /* Setup Google reverse URL handler */, - DE4F6D6E22005C0400DE699E /* Setup Dropbox */, - 4E81688528A408E600F8FA9E /* Update App Entitlements */, 0BEA5C491F7B8F73000D0AB4 /* Embed Watch Content */, 4EC49B9025BED71300E76218 /* Embed App Extensions */, + 4E81688528A408E600F8FA9E /* Update App Entitlements */, + DE11877A21EE09640078D059 /* Setup Google reverse URL handler */, + 0BB7DA181EC9E695007AAE98 /* Adjust ATS */, + DE4F6D6E22005C0400DE699E /* Setup Dropbox */, + E9D850368D253EFA8AB3B8D1 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( - 0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */, 4EB0602A260E026600F524C5 /* PBXTargetDependency */, ); name = JitsiMeet; @@ -411,19 +277,10 @@ attributes = { LastSwiftUpdateCheck = 1240; LastUpgradeCheck = 1020; - ORGANIZATIONNAME = Facebook; + ORGANIZATIONNAME = Jitsi; TargetAttributes = { - 0BEA5C241F7B8F73000D0AB4 = { - CreatedOnToolsVersion = 9.0; - DevelopmentTeam = FC967L3QRG; - ProvisioningStyle = Automatic; - }; - 0BEA5C301F7B8F73000D0AB4 = { - CreatedOnToolsVersion = 9.0; - DevelopmentTeam = FC967L3QRG; - ProvisioningStyle = Automatic; - }; 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1620; SystemCapabilities = { com.apple.SafariKeychain = { enabled = 1; @@ -452,38 +309,19 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* JitsiMeet */, - 0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */, - 0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */, 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0BEA5C231F7B8F73000D0AB4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0BEA5C2B1F7B8F73000D0AB4 /* Assets.xcassets in Resources */, - 0BEA5C291F7B8F73000D0AB4 /* Interface.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0BEA5C2F1F7B8F73000D0AB4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0BEA5C3D1F7B8F73000D0AB4 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0B412F211EDEE95300B1A0A6 /* Main.storyboard in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.storyboard in Resources */, + 361974E2A13624D7735D619D /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -499,10 +337,12 @@ /* Begin PBXShellScriptBuildPhase section */ 0BB7DA181EC9E695007AAE98 /* Adjust ATS */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + $BUILT_PRODUCTS_DIR/$INFOPLIST_PATH, ); name = "Adjust ATS"; outputPaths = ( @@ -513,6 +353,7 @@ }; 0BBA83C41EC9F7600075A103 /* Run React packager */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -527,12 +368,14 @@ }; 4E81688528A408E600F8FA9E /* Update App Entitlements */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + $PROJECT_DIR/app.entitlements, ); name = "Update App Entitlements"; outputFileListPaths = ( @@ -541,7 +384,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if test \"$PRODUCT_BUNDLE_IDENTIFIER\" = \"com.atlassian.JitsiMeet.ios\"; then\n ENTITLEMENTS_PLIST=\"$PROJECT_DIR/app.entitlements\"\n \n /usr/libexec/PlistBuddy -c \"Add :com.apple.developer.avfoundation.multitasking-camera-access bool 1\" $ENTITLEMENTS_PLIST\nfi\n"; + shellScript = "#if test \"$PRODUCT_BUNDLE_IDENTIFIER\" = \"com.atlassian.JitsiMeet.ios\"; then\n# ENTITLEMENTS_PLIST=\"$PROJECT_DIR/app.entitlements\"\n# \n# /usr/libexec/PlistBuddy -c \"Add :com.apple.developer.avfoundation.multitasking-camera-access bool 1\" $ENTITLEMENTS_PLIST\n#fi\n"; }; 69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -567,12 +410,14 @@ }; DE11877A21EE09640078D059 /* Setup Google reverse URL handler */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + $BUILT_PRODUCTS_DIR/$INFOPLIST_PATH, ); name = "Setup Google reverse URL handler"; outputFileListPaths = ( @@ -581,16 +426,18 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "INFO_PLIST=\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"\nGOOGLE_PLIST=\"$PROJECT_DIR/GoogleService-Info.plist\"\n\nif [[ -f $GOOGLE_PLIST ]]; then\n REVERSED_CLIENT_ID=$(/usr/libexec/PlistBuddy -c \"Print :REVERSED_CLIENT_ID:\" $GOOGLE_PLIST)\n /usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:1:CFBundleURLSchemes:0 $REVERSED_CLIENT_ID\" $INFO_PLIST\nfi\n"; + shellScript = "GOOGLE_PLIST_NAME=\"GoogleService-Info.plist\"\nGOOGLE_PLIST=\"$PROJECT_DIR/$GOOGLE_PLIST_NAME\"\nBUILD_APP_DIR=\"$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app\"\nINFO_PLIST=\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"\n\nif [[ -f $GOOGLE_PLIST ]]; then\n cp $GOOGLE_PLIST \"$BUILD_APP_DIR/$GOOGLE_PLIST_NAME\"\n REVERSED_CLIENT_ID=$(/usr/libexec/PlistBuddy -c \"Print :REVERSED_CLIENT_ID:\" $GOOGLE_PLIST)\n /usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:1:CFBundleURLSchemes:0 $REVERSED_CLIENT_ID\" $INFO_PLIST\nfi\n"; }; DE4F6D6E22005C0400DE699E /* Setup Dropbox */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + $BUILT_PRODUCTS_DIR/$INFOPLIST_PATH, ); name = "Setup Dropbox"; outputFileListPaths = ( @@ -601,49 +448,32 @@ shellPath = /bin/sh; shellScript = "INFO_PLIST=\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"\nDROPBOX_KEY_FILE=\"$PROJECT_DIR/dropbox.key\"\n\nif [[ -f $DROPBOX_KEY_FILE ]]; then\n /usr/libexec/PlistBuddy -c \"Delete :LSApplicationQueriesSchemes\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes array\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes:0 string 'dbapi-2'\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes:1 string 'dbapi-8-emm'\" $INFO_PLIST\n\n DROPBOX_KEY=$(head -n 1 $DROPBOX_KEY_FILE)\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLName string dropbox\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLSchemes array\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLSchemes:0 string $DROPBOX_KEY\" $INFO_PLIST\nfi\n"; }; - DEF4813D224925A2002AD03A /* Copy Google Plist file */ = { + E9D850368D253EFA8AB3B8D1 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); - name = "Copy Google Plist file"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "GOOGLE_PLIST_NAME=\"GoogleService-Info.plist\"\nGOOGLE_PLIST=\"$PROJECT_DIR/$GOOGLE_PLIST_NAME\"\nBUILD_APP_DIR=\"$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app\"\n\nif [[ -f $GOOGLE_PLIST ]]; then\n cp $GOOGLE_PLIST \"$BUILD_APP_DIR/$GOOGLE_PLIST_NAME\"\nfi\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet-resources.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0BEA5C2D1F7B8F73000D0AB4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0B7001701F7C51CC005944F4 /* InCallController.swift in Sources */, - E5C97B63227A1EB400199214 /* JitsiMeetCommands.swift in Sources */, - 0B5418471F7C5D8C00A2DD86 /* MeetingRowController.swift in Sources */, - E588011722789D43008B0561 /* JitsiMeetContext.swift in Sources */, - 0BEA5C391F7B8F73000D0AB4 /* ExtensionDelegate.swift in Sources */, - 0BEA5C371F7B8F73000D0AB4 /* InterfaceController.swift in Sources */, - 0BEA5C3B1F7B8F73000D0AB4 /* ComplicationController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F871A680F5B00A75B9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0B412F1F1EDEE6E800B1A0A6 /* ViewController.m in Sources */, - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, - DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */, - 13B07FC11A68108700A75B9A /* main.m in Sources */, + DEA0B7122D7EF16E0062A9F6 /* ViewController.swift in Sources */, + DEA0B7142D7EF7590062A9F6 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -662,16 +492,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0BEA5C341F7B8F73000D0AB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */; - targetProxy = 0BEA5C331F7B8F73000D0AB4 /* PBXContainerItemProxy */; - }; - 0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */; - targetProxy = 0BEA5C3F1F7B8F73000D0AB4 /* PBXContainerItemProxy */; - }; 4EB0602A260E026600F524C5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */; @@ -680,176 +500,23 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 0BEA5C271F7B8F73000D0AB4 /* Interface.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 0BEA5C281F7B8F73000D0AB4 /* Base */, - ); - name = Interface.storyboard; - sourceTree = ""; - }; - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + 13B07FB11A68108700A75B9A /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( 13B07FB21A68108700A75B9A /* Base */, ); - name = LaunchScreen.xib; + name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 0BEA5C421F7B8F73000D0AB4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - IBSC_MODULE = JitsiMeetCompanion_Extension; - INFOPLIST_FILE = watchos/app/Info.plist; - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Debug; - }; - 0BEA5C431F7B8F73000D0AB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - IBSC_MODULE = JitsiMeetCompanion_Extension; - INFOPLIST_FILE = watchos/app/Info.plist; - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Release; - }; - 0BEA5C441F7B8F73000D0AB4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = watchos/extension/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit.extension; - PRODUCT_NAME = "${TARGET_NAME}"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Debug; - }; - 0BEA5C451F7B8F73000D0AB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = watchos/extension/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit.extension; - PRODUCT_NAME = "${TARGET_NAME}"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Release; - }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = app.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; @@ -870,6 +537,13 @@ PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet; PRODUCT_NAME = "jitsi-meet"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 6.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -877,9 +551,8 @@ isa = XCBuildConfiguration; baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = app.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; @@ -899,6 +572,12 @@ PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet; PRODUCT_NAME = "jitsi-meet"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_VERSION = 6.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; @@ -930,6 +609,10 @@ PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.broadcast.extension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -965,6 +648,10 @@ PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.broadcast.extension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -975,8 +662,9 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -1001,6 +689,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + CXX = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; @@ -1024,18 +713,19 @@ "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ); - IPHONEOS_DEPLOYMENT_TARGET = 13.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD = ""; + LDPLUSPLUS = ""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; TARGETED_DEVICE_FAMILY = "1,2"; + USE_HERMES = true; }; name = Debug; }; @@ -1043,8 +733,9 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -1069,6 +760,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + CXX = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; @@ -1088,18 +780,18 @@ "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ); - IPHONEOS_DEPLOYMENT_TARGET = 13.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD = ""; + LDPLUSPLUS = ""; MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; TARGETED_DEVICE_FAMILY = "1,2"; + USE_HERMES = true; VALIDATE_PRODUCT = YES; }; name = Release; @@ -1107,24 +799,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0BEA5C461F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion Extension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0BEA5C441F7B8F73000D0AB4 /* Debug */, - 0BEA5C451F7B8F73000D0AB4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0BEA5C481F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0BEA5C421F7B8F73000D0AB4 /* Debug */, - 0BEA5C431F7B8F73000D0AB4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/app/src/AppDelegate.h b/ios/app/src/AppDelegate.h deleted file mode 100644 index 019665166668..000000000000 --- a/ios/app/src/AppDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright @ 2017-present Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@interface AppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; - -@end diff --git a/ios/app/src/AppDelegate.m b/ios/app/src/AppDelegate.m deleted file mode 100644 index 35e4a433d8c4..000000000000 --- a/ios/app/src/AppDelegate.m +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "AppDelegate.h" -#import "FIRUtilities.h" -#import "Types.h" -#import "ViewController.h" - -@import Firebase; -@import JitsiMeetSDK; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - JitsiMeet *jitsiMeet = [JitsiMeet sharedInstance]; - - jitsiMeet.conferenceActivityType = JitsiMeetConferenceActivityType; - jitsiMeet.customUrlScheme = @"org.jitsi.meet"; - jitsiMeet.universalLinkDomains = @[@"meet.jit.si", @"alpha.jitsi.net", @"beta.meet.jit.si"]; - - jitsiMeet.defaultConferenceOptions = [JitsiMeetConferenceOptions fromBuilder:^(JitsiMeetConferenceOptionsBuilder *builder) { - [builder setFeatureFlag:@"welcomepage.enabled" withBoolean:YES]; - [builder setFeatureFlag:@"resolution" withValue:@(360)]; - [builder setFeatureFlag:@"ios.screensharing.enabled" withBoolean:YES]; - [builder setFeatureFlag:@"ios.recording.enabled" withBoolean:YES]; - }]; - - [jitsiMeet application:application didFinishLaunchingWithOptions:launchOptions]; - - // Initialize Crashlytics and Firebase if a valid GoogleService-Info.plist file was provided. - if ([FIRUtilities appContainsRealServiceInfoPlist]) { - NSLog(@"Enabling Firebase"); - [FIRApp configure]; - // Crashlytics defaults to disabled with the FirebaseCrashlyticsCollectionEnabled Info.plist key. - [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:![jitsiMeet isCrashReportingDisabled]]; - } - - ViewController *rootController = (ViewController *)self.window.rootViewController; - [jitsiMeet showSplashScreen:rootController.view]; - - return YES; -} - -- (void) applicationWillTerminate:(UIApplication *)application { - NSLog(@"Application will terminate!"); - // Try to leave the current meeting graceefully. - ViewController *rootController = (ViewController *)self.window.rootViewController; - [rootController terminate]; -} - -#pragma mark Linking delegate methods - -- (BOOL)application:(UIApplication *)application - continueUserActivity:(NSUserActivity *)userActivity - restorationHandler:(void (^)(NSArray> *restorableObjects))restorationHandler { - - if ([FIRUtilities appContainsRealServiceInfoPlist]) { - // 1. Attempt to handle Universal Links through Firebase in order to support - // its Dynamic Links (which we utilize for the purposes of deferred deep - // linking). - BOOL handled - = [[FIRDynamicLinks dynamicLinks] - handleUniversalLink:userActivity.webpageURL - completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { - NSURL *firebaseUrl = [FIRUtilities extractURL:dynamicLink]; - if (firebaseUrl != nil) { - userActivity.webpageURL = firebaseUrl; - [[JitsiMeet sharedInstance] application:application - continueUserActivity:userActivity - restorationHandler:restorationHandler]; - } - }]; - - if (handled) { - return handled; - } - } - - // 2. Default to plain old, non-Firebase-assisted Universal Links. - return [[JitsiMeet sharedInstance] application:application - continueUserActivity:userActivity - restorationHandler:restorationHandler]; -} - -- (BOOL)application:(UIApplication *)app - openURL:(NSURL *)url - options:(NSDictionary *)options { - - // This shows up during a reload in development, skip it. - // https://github.com/firebase/firebase-ios-sdk/issues/233 - if ([[url absoluteString] containsString:@"google/link/?dismiss=1&is_weak_match=1"]) { - return NO; - } - - NSURL *openUrl = url; - - if ([FIRUtilities appContainsRealServiceInfoPlist]) { - // Process Firebase Dynamic Links - FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; - NSURL *firebaseUrl = [FIRUtilities extractURL:dynamicLink]; - if (firebaseUrl != nil) { - openUrl = firebaseUrl; - } - } - - return [[JitsiMeet sharedInstance] application:app - openURL:openUrl - options:options]; -} - -- (UIInterfaceOrientationMask)application:(UIApplication *)application - supportedInterfaceOrientationsForWindow:(UIWindow *)window { - return [[JitsiMeet sharedInstance] application:application - supportedInterfaceOrientationsForWindow:window]; -} - -@end diff --git a/ios/app/src/AppDelegate.swift b/ios/app/src/AppDelegate.swift new file mode 100644 index 000000000000..e9fe234f0c41 --- /dev/null +++ b/ios/app/src/AppDelegate.swift @@ -0,0 +1,78 @@ +import UIKit +import Firebase +import JitsiMeetSDK + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + self.window = UIWindow(frame: UIScreen.main.bounds) + + let jitsiMeet = JitsiMeet.sharedInstance() + + // jitsiMeet.webRtcLoggingSeverity = .verbose + + jitsiMeet.conferenceActivityType = "org.jitsi.JitsiMeet.ios.conference" // Must match the one defined in Info.plist{} + jitsiMeet.customUrlScheme = "org.jitsi.meet" + jitsiMeet.universalLinkDomains = ["meet.jit.si", "alpha.jitsi.net", "beta.meet.jit.si"] + + jitsiMeet.defaultConferenceOptions = JitsiMeetConferenceOptions.fromBuilder { builder in + // For testing configOverrides a room needs to be set + // builder.room = "https://meet.jit.si/test0988test" + + builder.setFeatureFlag("welcomepage.enabled", withBoolean: true) + builder.setFeatureFlag("ios.screensharing.enabled", withBoolean: true) + builder.setFeatureFlag("ios.recording.enabled", withBoolean: true) + } + + jitsiMeet.application(application, didFinishLaunchingWithOptions: launchOptions ?? [:]) + + if self.appContainsRealServiceInfoPlist() { + print("Enabling Firebase") + FirebaseApp.configure() + Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(!jitsiMeet.isCrashReportingDisabled()) + } + + let vc = ViewController() + self.window?.rootViewController = vc + jitsiMeet.showSplashScreen() + + self.window?.makeKeyAndVisible() + + return true + } + + func applicationWillTerminate(_ application: UIApplication) { + print("Application will terminate!") + if let rootController = self.window?.rootViewController as? ViewController { + rootController.terminate() + } + } + + // MARK: Linking delegate methods + + func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { + return JitsiMeet.sharedInstance().application(application, continue: userActivity, restorationHandler: restorationHandler) + } + + func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { + if url.absoluteString.contains("google/link/?dismiss=1&is_weak_match=1") { + return false + } + + return JitsiMeet.sharedInstance().application(app, open: url, options: options) + } + + func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { + return JitsiMeet.sharedInstance().application(application, supportedInterfaceOrientationsFor: window) + } +} + +// Firebase utilities +extension AppDelegate { + func appContainsRealServiceInfoPlist() -> Bool { + return InfoPlistUtil.containsRealServiceInfoPlist(in: Bundle.main) + } +} diff --git a/ios/app/src/Base.lproj/LaunchScreen.storyboard b/ios/app/src/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000000..b0ff42f32e9e --- /dev/null +++ b/ios/app/src/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/app/src/Base.lproj/LaunchScreen.xib b/ios/app/src/Base.lproj/LaunchScreen.xib deleted file mode 100644 index deb56c253cce..000000000000 --- a/ios/app/src/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/app/src/Base.lproj/Main.storyboard b/ios/app/src/Base.lproj/Main.storyboard deleted file mode 100644 index 51e552fa0cb3..000000000000 --- a/ios/app/src/Base.lproj/Main.storyboard +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/app/src/FIRUtilities.h b/ios/app/src/FIRUtilities.h deleted file mode 100644 index 3e79064753bb..000000000000 --- a/ios/app/src/FIRUtilities.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@import Firebase; - - -@interface FIRUtilities : NSObject - -+ (BOOL)appContainsRealServiceInfoPlist; -+ (NSURL *_Nullable)extractURL: (FIRDynamicLink* _Nullable)dynamicLink; - -@end diff --git a/ios/app/src/FIRUtilities.m b/ios/app/src/FIRUtilities.m deleted file mode 100644 index 69c47f7dbffb..000000000000 --- a/ios/app/src/FIRUtilities.m +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRUtilities.h" - -@import JitsiMeetSDK; - -@implementation FIRUtilities - -+ (BOOL)appContainsRealServiceInfoPlist { - static BOOL containsRealServiceInfoPlist = NO; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSBundle *bundle = [NSBundle mainBundle]; - containsRealServiceInfoPlist = [InfoPlistUtil containsRealServiceInfoPlistInBundle:bundle]; - }); - return containsRealServiceInfoPlist; -} - -+ (NSURL *)extractURL: (FIRDynamicLink*)dynamicLink { - NSURL *url = nil; - if (dynamicLink != nil) { - NSURL *dynamicLinkURL = dynamicLink.url; - if (dynamicLinkURL != nil - && (dynamicLink.matchType == FIRDLMatchTypeUnique - || dynamicLink.matchType == FIRDLMatchTypeDefault)) { - // Strong match, process it. - url = dynamicLinkURL; - } - } - - return url; -} - -@end diff --git a/ios/app/src/Info.plist b/ios/app/src/Info.plist index ebcc3002b1da..18ac64974c5b 100644 --- a/ios/app/src/Info.plist +++ b/ios/app/src/Info.plist @@ -88,11 +88,9 @@ UILaunchStoryboardName LaunchScreen - UIMainStoryboardFile - Main UIRequiredDeviceCapabilities - armv7 + arm64 UIStatusBarStyle UIStatusBarStyleLightContent diff --git a/ios/app/src/Types.h b/ios/app/src/Types.h deleted file mode 100644 index c44cd888ef05..000000000000 --- a/ios/app/src/Types.h +++ /dev/null @@ -1,7 +0,0 @@ - -#import - -// This must match what's defined in the NSUserActivityTypes array in the -// Info.plist file. -static NSString *const JitsiMeetConferenceActivityType - = @"org.jitsi.JitsiMeet.ios.conference"; diff --git a/ios/app/src/ViewController.h b/ios/app/src/ViewController.h deleted file mode 100644 index 1b1d967fd6e7..000000000000 --- a/ios/app/src/ViewController.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright @ 2017-present Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@import UIKit; -@import JitsiMeetSDK; - -@interface ViewController : UIViewController - -- (void)terminate; - -@end diff --git a/ios/app/src/ViewController.m b/ios/app/src/ViewController.m deleted file mode 100644 index a169c17d3cef..000000000000 --- a/ios/app/src/ViewController.m +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright @ 2017-present 8x8, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@import CoreSpotlight; -@import MobileCoreServices; -@import Intents; // Needed for NSUserActivity suggestedInvocationPhrase - -@import JitsiMeetSDK; - -#import "Types.h" -#import "ViewController.h" - - -@implementation ViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - JitsiMeetView *view = (JitsiMeetView *) self.view; - view.delegate = self; - - [view join:[[JitsiMeet sharedInstance] getInitialConferenceOptions]]; -} - -// JitsiMeetViewDelegate - -- (void)_onJitsiMeetViewDelegateEvent:(NSString *)name - withData:(NSDictionary *)data { - NSLog( - @"[%s:%d] JitsiMeetViewDelegate %@ %@", - __FILE__, __LINE__, name, data); - -#if DEBUG - NSAssert( - [NSThread isMainThread], - @"JitsiMeetViewDelegate %@ method invoked on a non-main thread", - name); -#endif -} - -- (void)conferenceJoined:(NSDictionary *)data { - [self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_JOINED" withData:data]; - - // Register a NSUserActivity for this conference so it can be invoked as a - // Siri shortcut. - NSUserActivity *userActivity - = [[NSUserActivity alloc] initWithActivityType:JitsiMeetConferenceActivityType]; - - NSString *urlStr = data[@"url"]; - NSURL *url = [NSURL URLWithString:urlStr]; - NSString *conference = [url.pathComponents lastObject]; - - userActivity.title = [NSString stringWithFormat:@"Join %@", conference]; - userActivity.suggestedInvocationPhrase = @"Join my Jitsi meeting"; - userActivity.userInfo = @{@"url": urlStr}; - [userActivity setEligibleForSearch:YES]; - [userActivity setEligibleForPrediction:YES]; - [userActivity setPersistentIdentifier:urlStr]; - - // Subtitle - CSSearchableItemAttributeSet *attributes - = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem]; - attributes.contentDescription = urlStr; - userActivity.contentAttributeSet = attributes; - - self.userActivity = userActivity; - [userActivity becomeCurrent]; -} - -- (void)conferenceTerminated:(NSDictionary *)data { - [self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_TERMINATED" withData:data]; -} - -- (void)conferenceWillJoin:(NSDictionary *)data { - [self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_WILL_JOIN" withData:data]; -} - -// - (void)customOverflowMenuButtonPressed:(NSDictionary *)data { -// [self _onJitsiMeetViewDelegateEvent:@"CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED" withData:data]; -// } - -#if 0 -- (void)enterPictureInPicture:(NSDictionary *)data { - [self _onJitsiMeetViewDelegateEvent:@"ENTER_PICTURE_IN_PICTURE" withData:data]; -} -#endif - -- (void)readyToClose:(NSDictionary *)data { - [self _onJitsiMeetViewDelegateEvent:@"READY_TO_CLOSE" withData:data]; -} - -// - (void)transcriptionChunkReceived:(NSDictionary *)data { -// [self _onJitsiMeetViewDelegateEvent:@"TRANSCRIPTION_CHUNK_RECEIVED" withData:data]; -// } - -- (void)participantJoined:(NSDictionary *)data { - NSLog(@"%@%@", @"Participant joined: ", data[@"participantId"]); -} - -- (void)participantLeft:(NSDictionary *)data { - NSLog(@"%@%@", @"Participant left: ", data[@"participantId"]); -} - -- (void)audioMutedChanged:(NSDictionary *)data { - NSLog(@"%@%@", @"Audio muted changed: ", data[@"muted"]); -} - -- (void)endpointTextMessageReceived:(NSDictionary *)data { - NSLog(@"%@%@", @"Endpoint text message received: ", data); -} - -- (void)screenShareToggled:(NSDictionary *)data { - NSLog(@"%@%@", @"Screen share toggled: ", data); -} - -- (void)chatMessageReceived:(NSDictionary *)data { - NSLog(@"%@%@", @"Chat message received: ", data); -} - -- (void)chatToggled:(NSDictionary *)data { - NSLog(@"%@%@", @"Chat toggled: ", data); -} - -- (void)videoMutedChanged:(NSDictionary *)data { - NSLog(@"%@%@", @"Video muted changed: ", data[@"muted"]); -} - - -#pragma mark - Helpers - -- (void)terminate { - JitsiMeetView *view = (JitsiMeetView *) self.view; - [view leave]; -} - -@end diff --git a/ios/app/src/ViewController.swift b/ios/app/src/ViewController.swift new file mode 100644 index 000000000000..7cda6258a90e --- /dev/null +++ b/ios/app/src/ViewController.swift @@ -0,0 +1,94 @@ +/* + * Copyright @ 2025-present 8x8, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CoreSpotlight +import Intents +import MobileCoreServices +import UIKit + +import JitsiMeetSDK + +@objcMembers +class ViewController: UIViewController { + + override func loadView() { + let jitsiView = JitsiMeetView(frame: UIScreen.main.bounds) + self.view = jitsiView + } + + override func viewDidLoad() { + super.viewDidLoad() + + guard let view = self.view as? JitsiMeetView else { return } + view.delegate = self + view.join(JitsiMeet.sharedInstance().getInitialConferenceOptions()) + } + + // MARK: - Helper Methods + + func terminate() { + guard let view = self.view as? JitsiMeetView else { return } + view.leave() + } +} + + +extension ViewController: @preconcurrency JitsiMeetViewDelegate { + + // MARK: - Private Helper Methods + + private func onJitsiMeetViewDelegateEvent(_ name: String, withData data: [AnyHashable: Any]?) { + NSLog("[%@:%d] JitsiMeetViewDelegate %@ %@", #file, #line, name, data ?? [:]) + + #if DEBUG + assert(Thread.isMainThread, "JitsiMeetViewDelegate \(name) method invoked on a non-main thread") + #endif + } + + // MARK: - JitsiMeetViewDelegate + + func conferenceJoined(_ data: [AnyHashable: Any]) { + onJitsiMeetViewDelegateEvent("CONFERENCE_JOINED", withData: data) + + // Register a NSUserActivity for this conference so it can be invoked as a Siri shortcut. + // Must match the one defined in Info.plist + let userActivity = NSUserActivity(activityType: "org.jitsi.JitsiMeet.ios.conference") + + if let urlStr = data["url"] as? String, + let url = URL(string: urlStr), + let conference = url.pathComponents.last { + + userActivity.title = "Join \(conference)" + userActivity.suggestedInvocationPhrase = "Join my Jitsi meeting" + userActivity.userInfo = ["url": urlStr] + userActivity.isEligibleForSearch = true + userActivity.isEligibleForPrediction = true + userActivity.persistentIdentifier = urlStr + + // Subtitle + let attributes = CSSearchableItemAttributeSet(contentType: UTType.item) + attributes.contentDescription = urlStr + userActivity.contentAttributeSet = attributes + + self.userActivity = userActivity + userActivity.becomeCurrent() + } + } + + func ready(toClose data: [AnyHashable: Any]) { + onJitsiMeetViewDelegateEvent("READY_TO_CLOSE", withData: data) + } +} diff --git a/ios/app/src/main.m b/ios/app/src/main.m deleted file mode 100644 index e311bbf66a98..000000000000 --- a/ios/app/src/main.m +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright @ 2017-present Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain( - argc, argv, - nil, - NSStringFromClass([AppDelegate class])); - } -} diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index be874423dbd8..000000000000 --- a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "images" : [ - { - "size" : "24x24", - "idiom" : "watch", - "filename" : "Icon-24@2x.png", - "scale" : "2x", - "role" : "notificationCenter", - "subtype" : "38mm" - }, - { - "size" : "27.5x27.5", - "idiom" : "watch", - "filename" : "Icon-27.5@2x.png", - "scale" : "2x", - "role" : "notificationCenter", - "subtype" : "42mm" - }, - { - "size" : "29x29", - "idiom" : "watch", - "filename" : "Icon-29@2x.png", - "role" : "companionSettings", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "watch", - "filename" : "Icon-29@3x.png", - "role" : "companionSettings", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "watch", - "filename" : "Icon-40@2x.png", - "scale" : "2x", - "role" : "appLauncher", - "subtype" : "38mm" - }, - { - "size" : "44x44", - "idiom" : "watch", - "filename" : "Icon-88@2x.png", - "scale" : "2x", - "role" : "appLauncher", - "subtype" : "40mm" - }, - { - "size" : "50x50", - "idiom" : "watch", - "filename" : "Icon-100@2x.png", - "scale" : "2x", - "role" : "appLauncher", - "subtype" : "44mm" - }, - { - "size" : "86x86", - "idiom" : "watch", - "filename" : "Icon-86@2x.png", - "scale" : "2x", - "role" : "quickLook", - "subtype" : "38mm" - }, - { - "size" : "98x98", - "idiom" : "watch", - "filename" : "Icon-98@2x.png", - "scale" : "2x", - "role" : "quickLook", - "subtype" : "42mm" - }, - { - "size" : "108x108", - "idiom" : "watch", - "filename" : "Icon-216@2x.png", - "scale" : "2x", - "role" : "quickLook", - "subtype" : "44mm" - }, - { - "size" : "1024x1024", - "idiom" : "watch-marketing", - "filename" : "Icon-1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-100@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-100@2x.png deleted file mode 100644 index 862d33bb02ff..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-100@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-1024@1x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-1024@1x.png deleted file mode 100644 index 5f5f64aeffb7..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-1024@1x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-216@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-216@2x.png deleted file mode 100644 index 58f83c649e55..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-216@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png deleted file mode 100644 index b1d4b0e331b6..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png deleted file mode 100644 index d911a3ccaedb..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png deleted file mode 100644 index ea457cdc27c3..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png deleted file mode 100644 index 4024e4af007e..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png deleted file mode 100644 index f35c5387f478..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png deleted file mode 100644 index ee7b4ea8c562..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-88@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-88@2x.png deleted file mode 100644 index 6022c35a6a33..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-88@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png deleted file mode 100644 index ca29e92611d3..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/Contents.json b/ios/app/watchos/app/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c9186..000000000000 --- a/ios/app/watchos/app/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/Contents.json b/ios/app/watchos/app/Assets.xcassets/hangup.imageset/Contents.json deleted file mode 100644 index e79f5354111a..000000000000 --- a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hangup@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/hangup@2x.png b/ios/app/watchos/app/Assets.xcassets/hangup.imageset/hangup@2x.png deleted file mode 100644 index 0d89ceeb1499..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/hangup@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/Contents.json b/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/Contents.json deleted file mode 100644 index 8a90fdc55ffa..000000000000 --- a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mute-off@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/mute-off@2x.png b/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/mute-off@2x.png deleted file mode 100644 index fc1f1a7588f5..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/mute-off@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/Contents.json b/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/Contents.json deleted file mode 100644 index ace7f01dab71..000000000000 --- a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mute-on@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/mute-on@2x.png b/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/mute-on@2x.png deleted file mode 100644 index 46c1f21a289a..000000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/mute-on@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Base.lproj/Interface.storyboard b/ios/app/watchos/app/Base.lproj/Interface.storyboard deleted file mode 100644 index 3cdac948cc6e..000000000000 --- a/ios/app/watchos/app/Base.lproj/Interface.storyboard +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/app/watchos/app/Info.plist b/ios/app/watchos/app/Info.plist deleted file mode 100644 index 0bdc0677f8b7..000000000000 --- a/ios/app/watchos/app/Info.plist +++ /dev/null @@ -1,33 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Jitsi Meet - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 99.0.0 - CFBundleVersion - 1 - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - WKCompanionAppBundleIdentifier - org.jitsi.meet - WKWatchKitApp - - - diff --git a/ios/app/watchos/extension/Assets.xcassets/Contents.json b/ios/app/watchos/extension/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c9186..000000000000 --- a/ios/app/watchos/extension/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/Contents.json b/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/Contents.json deleted file mode 100644 index 4a1fb76795fd..000000000000 --- a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "jitsi@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/jitsi@2x.png b/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/jitsi@2x.png deleted file mode 100644 index 059fb5c8fd81..000000000000 Binary files a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/jitsi@2x.png and /dev/null differ diff --git a/ios/app/watchos/extension/ComplicationController.swift b/ios/app/watchos/extension/ComplicationController.swift deleted file mode 100644 index d5f2b46fa79f..000000000000 --- a/ios/app/watchos/extension/ComplicationController.swift +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ClockKit - - -class ComplicationController: NSObject, CLKComplicationDataSource { - - // MARK: - Timeline Configuration - - func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) { - handler([]) - } - - func getPrivacyBehavior(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) { - handler(.showOnLockScreen) - } - - // MARK: - Timeline Population - - func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) { - // Call the handler with the current timeline entry - getLocalizableSampleTemplate(for: complication) {template in - guard let template = template else { - handler(nil) - return - } - handler(CLKComplicationTimelineEntry(date: Date(), complicationTemplate: template)) - } - } - - func getTimelineEntries(for complication: CLKComplication, before date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) { - // Call the handler with the timeline entries prior to the given date - handler(nil) - } - - func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) { - // Call the handler with the timeline entries after to the given date - handler(nil) - } - - // MARK: - Placeholder Templates - - func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) { - // This method will be called once per supported complication, and the results will be cached - - let imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "jitsi")!) - if complication.family == .circularSmall { - let small = CLKComplicationTemplateCircularSmallRingImage() - small.imageProvider = imageProvider - small.ringStyle = .closed - small.fillFraction = 0 - handler(small) - } else if complication.family == .utilitarianSmall { - let utilitarian = CLKComplicationTemplateUtilitarianSmallSquare() - utilitarian.imageProvider = imageProvider - handler(utilitarian) - } else if complication.family == .modularSmall { - let modular = CLKComplicationTemplateModularSmallRingImage() - modular.imageProvider = imageProvider - modular.ringStyle = .closed - modular.fillFraction = 0 - handler(modular) - } - } - -} diff --git a/ios/app/watchos/extension/ExtensionDelegate.swift b/ios/app/watchos/extension/ExtensionDelegate.swift deleted file mode 100644 index bb7a5fd8de43..000000000000 --- a/ios/app/watchos/extension/ExtensionDelegate.swift +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchConnectivity -import WatchKit - -class ExtensionDelegate: NSObject, WCSessionDelegate, WKExtensionDelegate { - - var currentContext : JitsiMeetContext = JitsiMeetContext() - - static var currentJitsiMeetContext: JitsiMeetContext { - get { - return (WKExtension.shared().delegate as! ExtensionDelegate).currentContext - } - } - - func applicationDidFinishLaunching() { - // Start Watch Connectivity - if WCSession.isSupported() { - let session = WCSession.default - session.delegate = self - session.activate() - } - } - - func handle(_ backgroundTasks: Set) { - // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one. - for task in backgroundTasks { - // Use a switch statement to check the task type - switch task { - case let backgroundTask as WKApplicationRefreshBackgroundTask: - // Be sure to complete the background task once you’re done. - backgroundTask.setTaskCompletedWithSnapshot(false) - case let snapshotTask as WKSnapshotRefreshBackgroundTask: - // Snapshot tasks have a unique completion call, make sure to set your expiration date - snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil) - case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask: - // Be sure to complete the connectivity task once you’re done. - connectivityTask.setTaskCompletedWithSnapshot(false) - case let urlSessionTask as WKURLSessionRefreshBackgroundTask: - // Be sure to complete the URL session task once you’re done. - urlSessionTask.setTaskCompletedWithSnapshot(false) - default: - // make sure to complete unhandled task types - task.setTaskCompletedWithSnapshot(false) - } - } - } - - func session(_ session: WCSession, activationDidCompleteWith - activationState: WCSessionActivationState, error: Error?) { - if let error = error { - print("WATCH Session activation failed with error: \(error.localizedDescription)") - return - } - print("WATCH Session activated with state: \(activationState.rawValue)") - } - - func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { - DispatchQueue.main.async { - let newContext = JitsiMeetContext(context: applicationContext) - - print("WATCH got new context: \(newContext.description)"); - - // Update context on the root controller which displays the recent list - let controller = WKExtension.shared().rootInterfaceController as! InterfaceController - controller.updateUI(newContext) - - // If the current controller is not the in-call controller and we have a - // conference URL, show the in-call controller - if let currentController = WKExtension.shared().visibleInterfaceController as? InterfaceController { - // Go to the in-call controller only if the conference URL has changed, because the user may have - // clicked the back button - if newContext.conferenceURL != nil - && self.currentContext.conferenceURL != newContext.conferenceURL { - currentController.pushController(withName: "InCallController", context: newContext) - } - } else if let inCallController = WKExtension.shared().visibleInterfaceController as? InCallController { - if newContext.conferenceURL == nil { - inCallController.popToRootController() - } else { - inCallController.updateUI(newContext) - } - } - - self.currentContext = newContext; - } - } -} diff --git a/ios/app/watchos/extension/InCallController.swift b/ios/app/watchos/extension/InCallController.swift deleted file mode 100644 index 57c3d3bb8926..000000000000 --- a/ios/app/watchos/extension/InCallController.swift +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchConnectivity -import WatchKit -import Foundation - - -class InCallController: WKInterfaceController { - @IBOutlet var mutedButton: WKInterfaceButton! - @IBOutlet var roomLabel: WKInterfaceLabel! - @IBOutlet var timer: WKInterfaceTimer! - - @IBAction func hangupClicked() { - sendCommand(JitsiMeetCommands.CMD_HANG_UP, message: nil) - } - - @IBAction func muteClicked() { - if var micMuted = ExtensionDelegate.currentJitsiMeetContext.micMuted { - micMuted = !micMuted; - sendCommand( - JitsiMeetCommands.CMD_SET_MUTED, - message: [ - "muted": micMuted ? "true" : "false" - ]) - updateMutedButton(withMuted: micMuted) - } - } - - func sendCommand(_ command: JitsiMeetCommands, message: [String : Any]?) { - if WCSession.isSupported() { - let session = WCSession.default - var data = [String: Any]() - - if let sessionID = ExtensionDelegate.currentJitsiMeetContext.sessionID { - if message != nil { - message!.forEach { data[$0] = $1 } - } - - data["command"] = command.rawValue; - data["sessionID"] = sessionID; - - session.sendMessage(data, replyHandler: nil, errorHandler: nil) - } - } - } - - func updateUI(_ newContext: JitsiMeetContext) { - var conferenceURL = newContext.conferenceURL - - if let joinConferenceURL = newContext.joinConferenceURL { - sendCommand(JitsiMeetCommands.CMD_JOIN_CONFERENCE, message: [ "data" : joinConferenceURL ]) - conferenceURL = joinConferenceURL - } - - let newRoomName = conferenceURL != nil ? conferenceURL!.components(separatedBy: "/").last : "" - - roomLabel.setText(newRoomName) - - if let newTimestamp = newContext.conferenceTimestamp { - restartTimer(newTimestamp) - } - if let newMuted = newContext.micMuted { - updateMutedButton(withMuted: newMuted) - } - } - - func restartTimer(_ conferenceTimestamp: Int64) { - if (conferenceTimestamp != 0) { - let newDate = Date(timeIntervalSince1970: TimeInterval(conferenceTimestamp / 1000)) - timer.setDate(newDate) - timer.start(); - print("WATCH timer set date to: \(newDate) and start") - } else { - print("WATCH timer stop") - timer.stop(); - } - } - - func updateMutedButton(withMuted isMuted: Bool) { - if isMuted { - mutedButton.setBackgroundImageNamed("mute-on.png") - } else { - mutedButton.setBackgroundImageNamed("mute-off.png") - } - } - - override func awake(withContext context: Any?) { - super.awake(withContext: context) - - if let data = context as? JitsiMeetContext { - updateUI(data) - } - } -} diff --git a/ios/app/watchos/extension/Info.plist b/ios/app/watchos/extension/Info.plist deleted file mode 100644 index 3f172dc7f63a..000000000000 --- a/ios/app/watchos/extension/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Jitsi Meet Companion Extension - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - 99.0.0 - CFBundleVersion - 1 - CLKComplicationPrincipalClass - $(PRODUCT_MODULE_NAME).ComplicationController - CLKComplicationSupportedFamilies - - CLKComplicationFamilyModularSmall - CLKComplicationFamilyUtilitarianSmall - CLKComplicationFamilyCircularSmall - - NSExtension - - NSExtensionAttributes - - WKAppBundleIdentifier - org.jitsi.meet.watchkit - - NSExtensionPointIdentifier - com.apple.watchkit - - WKExtensionDelegateClassName - $(PRODUCT_MODULE_NAME).ExtensionDelegate - - diff --git a/ios/app/watchos/extension/InterfaceController.swift b/ios/app/watchos/extension/InterfaceController.swift deleted file mode 100644 index b57219cb87a8..000000000000 --- a/ios/app/watchos/extension/InterfaceController.swift +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchKit -import WatchConnectivity -import Foundation - - -class InterfaceController: WKInterfaceController { - - @IBOutlet var infoLabel: WKInterfaceLabel! - @IBOutlet var table: WKInterfaceTable! - - override func didAppear(){ - self.updateUI(ExtensionDelegate.currentJitsiMeetContext) - } - - func updateUI(_ newContext:JitsiMeetContext) { - if (newContext.recentURLs == nil || newContext.recentURLs!.count == 0) { - infoLabel.setText("There are no recent meetings. Please use the app on the phone to start a new call.") - - table.setHidden(true) - infoLabel.setHidden(false) - } else { - updateRecents(withRecents: newContext.recentURLs!, currentContext: newContext) - - table.setHidden(false) - infoLabel.setHidden(true) - } - } - - private func updateRecents(withRecents recents: NSArray, currentContext: JitsiMeetContext) { - // Updating the # of rows only if it actually changed prevents from blinking the UI - if (table.numberOfRows != recents.count) { - table.setNumberOfRows(recents.count, withRowType: "MeetingRowType") - } - - for (index, entry) in recents.enumerated() { - let entryDict = entry as! NSDictionary - let roomURL = entryDict["conference"] as! NSString - let timestamp = entryDict["date"] as! NSNumber - - // Prepare values - let room = roomURL.components(separatedBy: "/").last - let date = Date(timeIntervalSince1970: timestamp.doubleValue / 1000) // timestamp is taken with Date.now() in JS, which uses milliseconds - let dateFormatter = DateFormatter() - dateFormatter.timeZone = TimeZone.current - dateFormatter.locale = NSLocale.current - dateFormatter.dateFormat = "HH:mm yyyy-MM-dd" - let strDate = dateFormatter.string(from: date) - - // Update row controller - let controller = table.rowController(at: index) as! MeetingRowController - controller.room = room - controller.roomUrl = roomURL as String - controller.roomLabel.setText(room) - controller.timeLabel.setText(strDate) - - // Change the background for the active meeting - if (controller.roomUrl == currentContext.conferenceURL) { - controller.rowGroup.setBackgroundColor(UIColor(red: 0.125, green: 0.58, blue: 0.98, alpha: 1)) - } else { - controller.rowGroup.setBackgroundColor(UIColor(red: 0.949, green: 0.956, blue: 1, alpha: 0.14)) - } - } - } - - override func contextForSegue(withIdentifier segueIdentifier: String, in table: WKInterfaceTable, rowIndex: Int) -> Any? { - let controller = table.rowController(at: rowIndex) as! MeetingRowController - let currentContext = ExtensionDelegate.currentJitsiMeetContext - - // Copy the current context and add the joinConferenceURL to trigger the command when the in-call screen is displayed - let actionContext = JitsiMeetContext(jmContext: currentContext) - actionContext.joinConferenceURL = controller.roomUrl - - print("WATCH contextForSegue: \(actionContext.description)"); - - return actionContext; - } -} diff --git a/ios/app/watchos/extension/JitsiMeetCommands.swift b/ios/app/watchos/extension/JitsiMeetCommands.swift deleted file mode 100644 index f5d397121f96..000000000000 --- a/ios/app/watchos/extension/JitsiMeetCommands.swift +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This needs to be in sync with features/mobile/watchos/constants.js -enum JitsiMeetCommands : String { - typealias RawValue = String - - case CMD_HANG_UP = "hangup"; - - case CMD_JOIN_CONFERENCE = "joinConference"; - - case CMD_SET_MUTED = "setMuted"; -} diff --git a/ios/app/watchos/extension/JitsiMeetContext.swift b/ios/app/watchos/extension/JitsiMeetContext.swift deleted file mode 100644 index bfdbfdfaae70..000000000000 --- a/ios/app/watchos/extension/JitsiMeetContext.swift +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Foundation - -class JitsiMeetContext { - private var dictionary : [String : Any] - - var joinConferenceURL : String? = nil; - - init() { - dictionary = [:] - } - - init(context: [String : Any]) { - dictionary = context - } - - init(jmContext: JitsiMeetContext) { - dictionary = jmContext.dictionary - joinConferenceURL = jmContext.joinConferenceURL - } - - var conferenceURL : String? { - get { - return dictionary["conferenceURL"] as? String - } - } - - var conferenceTimestamp : Int64? { - get { - return dictionary["conferenceTimestamp"] as? Int64; - } - } - - var sessionID : Int64? { - get { - return dictionary["sessionID"] as? Int64; - } - } - - var recentURLs : NSArray? { - get { - return dictionary["recentURLs"] as? NSArray - } - } - - var micMuted : Bool? { - get { - return (dictionary["micMuted"] as? NSNumber)?.boolValue ?? nil; - } - } - - public var description: String { - return "JitsiMeetContext[conferenceURL: \(String(describing: conferenceURL)), conferenceTimestamp: \(String(describing:conferenceTimestamp)), sessionID: \(String(describing:sessionID)), recentURLs: \(String(describing:recentURLs)), joinConferenceURL: \(String(describing:joinConferenceURL)) " - } -} diff --git a/ios/app/watchos/extension/MeetingRowController.swift b/ios/app/watchos/extension/MeetingRowController.swift deleted file mode 100644 index cf1a8ad82adb..000000000000 --- a/ios/app/watchos/extension/MeetingRowController.swift +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchKit - -class MeetingRowController: NSObject { - @IBOutlet var roomLabel: WKInterfaceLabel! - @IBOutlet var timeLabel: WKInterfaceLabel! - @IBOutlet var rowGroup: WKInterfaceGroup! - - var room: String! - var roomUrl: String! -} diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 29c35f41fa1e..fc44ef125957 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -39,37 +39,7 @@ platform :ios do end ) - # Set the (watch) app identifier - update_app_identifier( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/app/Info.plist", - app_identifier: "com.atlassian.JitsiMeet.ios.watchkit" - ) - - # Set the (watch) extension identifier - update_app_identifier( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/extension/Info.plist", - app_identifier: "com.atlassian.JitsiMeet.ios.watchkit.extension" - ) - - update_info_plist( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/app/Info.plist", - block: proc do |plist| - plist["WKCompanionAppBundleIdentifier"] = "com.atlassian.JitsiMeet.ios" - end - ) - - update_info_plist( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/extension/Info.plist", - block: proc do |plist| - plist["NSExtension"]["NSExtensionAttributes"]["WKAppBundleIdentifier"] = "com.atlassian.JitsiMeet.ios.watchkit" - end - ) - - # Inrement the build number by 1 + # Increment the build number by 1 increment_build_number( build_number: Time.now.to_i, xcodeproj: "app/app.xcodeproj" @@ -79,7 +49,8 @@ platform :ios do build_app( scheme: "JitsiMeet", include_symbols: true, - export_xcargs: "-allowProvisioningUpdates" + export_xcargs: "-allowProvisioningUpdates", + xcodebuild_formatter: "" ) # Upload the build to TestFlight diff --git a/ios/patches/ws-tls13.diff b/ios/patches/ws-tls13.diff new file mode 100644 index 000000000000..1f04e2eb469b --- /dev/null +++ b/ios/patches/ws-tls13.diff @@ -0,0 +1,15 @@ +diff --git a/SocketRocket/SRSecurityPolicy.m b/SocketRocket/SRSecurityPolicy.m +index 3759d26e..271477e8 100644 +--- a/SocketRocket/SRSecurityPolicy.m ++++ b/SocketRocket/SRSecurityPolicy.m +@@ -56,8 +56,8 @@ - (instancetype)init + + - (void)updateSecurityOptionsInStream:(NSStream *)stream + { +- // Enforce TLS 1.2 +- [stream setProperty:(__bridge id)CFSTR("kCFStreamSocketSecurityLevelTLSv1_2") forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel]; ++ // Enforce TLS >= 1.2 ++ [stream setProperty:(__bridge id)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel]; + + // Validate certificate chain for this stream if enabled. + NSDictionary *sslOptions = @{ (__bridge NSString *)kCFStreamSSLValidatesCertificateChain : @(self.certificateChainValidationEnabled) }; diff --git a/ios/scripts/release-sdk-lite.sh b/ios/scripts/release-sdk-lite.sh index 2379f33719e0..13f39c594616 100755 --- a/ios/scripts/release-sdk-lite.sh +++ b/ios/scripts/release-sdk-lite.sh @@ -1,14 +1,12 @@ #!/bin/bash -set -e -u +set -e -u -x THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) PROJECT_REPO=$(realpath ${THIS_DIR}/../..) RELEASE_REPO=$(realpath ${THIS_DIR}/../../../jitsi-meet-ios-sdk-releases) DEFAULT_SDK_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${THIS_DIR}/../sdk/src/Lite-Info.plist) SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}} -DO_GIT_TAG=${GIT_TAG:-0} - echo "Releasing Jitsi Meet SDK Lite ${SDK_VERSION}" @@ -50,22 +48,18 @@ xcodebuild -create-xcframework \ -framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \ -framework ios/sdk/out/ios-simulator.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \ -output ios/sdk/out/JitsiMeetSDK.xcframework -if [[ $DO_GIT_TAG == 1 ]]; then - git tag ios-sdk-lite-${SDK_VERSION} -fi popd pushd ${RELEASE_REPO} # Put the new files in the repo cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework lite/Frameworks/ +cp -a ${PROJECT_REPO}/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework lite/Frameworks/ # Add all files to git -if [[ $DO_GIT_TAG == 1 ]]; then - git add -A . - git commit -m "${SDK_VERSION} lite" - git tag "${SDK_VERSION}-lite" -fi +git add -A . +git commit --allow-empty -m "${SDK_VERSION} lite" +git tag "${SDK_VERSION}-lite" popd diff --git a/ios/scripts/release-sdk.sh b/ios/scripts/release-sdk.sh index 4689d9c45c5c..5ff522760eb9 100755 --- a/ios/scripts/release-sdk.sh +++ b/ios/scripts/release-sdk.sh @@ -1,14 +1,12 @@ #!/bin/bash -set -e -u +set -e -u -x THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) PROJECT_REPO=$(realpath ${THIS_DIR}/../..) RELEASE_REPO=$(realpath ${THIS_DIR}/../../../jitsi-meet-ios-sdk-releases) DEFAULT_SDK_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${THIS_DIR}/../sdk/src/Info.plist) SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}} -DO_GIT_TAG=${GIT_TAG:-0} - echo "Releasing Jitsi Meet SDK ${SDK_VERSION}" @@ -50,22 +48,18 @@ xcodebuild -create-xcframework \ -framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \ -framework ios/sdk/out/ios-simulator.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \ -output ios/sdk/out/JitsiMeetSDK.xcframework -if [[ $DO_GIT_TAG == 1 ]]; then - git tag ios-sdk-${SDK_VERSION} -fi popd pushd ${RELEASE_REPO} # Put the new files in the repo cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework Frameworks/ +cp -a ${PROJECT_REPO}/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework Frameworks/ # Add all files to git -if [[ $DO_GIT_TAG == 1 ]]; then - git add -A . - git commit -m "${SDK_VERSION}" - git tag ${SDK_VERSION} -fi +git add -A . +git commit --allow-empty -m "${SDK_VERSION}" +git tag "${SDK_VERSION}" popd diff --git a/ios/scripts/run-packager-helper.command b/ios/scripts/run-packager-helper.command index 68f9867e5846..cf9ebe0afc58 100755 --- a/ios/scripts/run-packager-helper.command +++ b/ios/scripts/run-packager-helper.command @@ -2,4 +2,4 @@ THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) -exec ${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command --reset-cache +exec ${THIS_DIR}/../../node_modules/react-native/scripts/packager.sh --reset-cache diff --git a/ios/sdk/sdk.xcodeproj/project.pbxproj b/ios/sdk/sdk.xcodeproj/project.pbxproj index 2039fd70f1f0..e14b5a8aa925 100644 --- a/ios/sdk/sdk.xcodeproj/project.pbxproj +++ b/ios/sdk/sdk.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -51,7 +51,6 @@ C81E9AB925AC5AD800B134D9 /* ExternalAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */; }; C8AFD27F2462C613000293D2 /* InfoPlistUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C8AFD27D2462C613000293D2 /* InfoPlistUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; C8AFD2802462C613000293D2 /* InfoPlistUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C8AFD27E2462C613000293D2 /* InfoPlistUtil.m */; }; - DE438CDA2350934700DD541D /* JavaScriptSandbox.m in Sources */ = {isa = PBXBuildFile; fileRef = DE438CD82350934700DD541D /* JavaScriptSandbox.m */; }; DE65AACA2317FFCD00290BEC /* LogUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AAC92317FFCD00290BEC /* LogUtils.h */; }; DE65AACC2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */; }; DE762DB422AFDE76000DEBD6 /* JitsiMeetUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DE762DB322AFDE76000DEBD6 /* JitsiMeetUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -98,7 +97,6 @@ DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D32316AC4D00AE1940 /* JitsiMeetLogger.m */; }; DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */; }; DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535321FB1BF800011A3A /* JitsiMeet.m */; }; - DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */ = {isa = PBXBuildFile; fileRef = DE438CD82350934700DD541D /* JavaScriptSandbox.m */; }; DE9A0162289A9A9A00E41CBB /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB9AD781F5EC6D7001C08DB /* Intents.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; DE9A0163289A9A9A00E41CBB /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB9AD761F5EC6CE001C08DB /* CallKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; DE9A0166289A9A9A00E41CBB /* CallKitIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BC4B8681F8C01E100CE8B21 /* CallKitIcon.png */; }; @@ -161,7 +159,6 @@ C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExternalAPI.h; sourceTree = ""; }; C8AFD27D2462C613000293D2 /* InfoPlistUtil.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InfoPlistUtil.h; sourceTree = ""; }; C8AFD27E2462C613000293D2 /* InfoPlistUtil.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InfoPlistUtil.m; sourceTree = ""; }; - DE438CD82350934700DD541D /* JavaScriptSandbox.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JavaScriptSandbox.m; sourceTree = ""; }; DE65AAC92317FFCD00290BEC /* LogUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LogUtils.h; sourceTree = ""; }; DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeetBaseLogHandler+Private.h"; sourceTree = ""; }; DE762DB322AFDE76000DEBD6 /* JitsiMeetUserInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetUserInfo.h; sourceTree = ""; }; @@ -250,7 +247,6 @@ C69EFA02209A0EFD0027712B /* callkit */, A4A934E7212F3AB8001E9388 /* dropbox */, 0BD906E91EC0C00300C8C18E /* Info.plist */, - DE438CD82350934700DD541D /* JavaScriptSandbox.m */, 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */, DEFE535821FB311F00011A3A /* JitsiMeet+Private.h */, DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */, @@ -681,7 +677,6 @@ DE81A2D52316AC4D00AE1940 /* JitsiMeetLogger.m in Sources */, 0B412F191EDEC65D00B1A0A6 /* JitsiMeetView.m in Sources */, DEFE535421FB1BF800011A3A /* JitsiMeet.m in Sources */, - DE438CDA2350934700DD541D /* JavaScriptSandbox.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -714,7 +709,6 @@ 4E0EF63328CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */, DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */, DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */, - DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -725,10 +719,11 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -755,6 +750,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; + CXX = ""; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -774,18 +770,19 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD = ""; + LDPLUSPLUS = ""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; TARGETED_DEVICE_FAMILY = "1,2"; + USE_HERMES = true; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -795,10 +792,11 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -825,6 +823,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; + CXX = ""; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -841,18 +840,18 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD = ""; + LDPLUSPLUS = ""; MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; TARGETED_DEVICE_FAMILY = "1,2"; + USE_HERMES = true; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -864,7 +863,7 @@ baseConfigurationReference = 09A78016288AF50ACD28A10D /* Pods-JitsiMeetSDK.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -875,16 +874,22 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; INFOPLIST_FILE = src/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -893,7 +898,7 @@ baseConfigurationReference = 891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -904,15 +909,21 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; INFOPLIST_FILE = src/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; @@ -921,7 +932,7 @@ baseConfigurationReference = 8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -937,16 +948,22 @@ "JITSI_MEET_SDK_LITE=1", ); INFOPLIST_FILE = "src/Lite-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios; PRODUCT_NAME = JitsiMeetSDK; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -955,7 +972,7 @@ baseConfigurationReference = 86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -971,15 +988,21 @@ JITSI_MEET_SDK_LITE, ); INFOPLIST_FILE = "src/Lite-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios; PRODUCT_NAME = JitsiMeetSDK; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git a/ios/sdk/src/AudioMode.m b/ios/sdk/src/AudioMode.m index b35113b8e9ab..f5fc71d9e3d9 100644 --- a/ios/sdk/src/AudioMode.m +++ b/ios/sdk/src/AudioMode.m @@ -21,6 +21,7 @@ #import #import "JitsiAudioSession+Private.h" +#import "callkit/JMCallKitProxy.h" // Audio mode @@ -54,6 +55,7 @@ @implementation AudioMode { RTCAudioSessionConfiguration *audioCallConfig; RTCAudioSessionConfiguration *videoCallConfig; RTCAudioSessionConfiguration *earpieceConfig; + BOOL audioDisabled; BOOL forceSpeaker; BOOL forceEarpiece; BOOL isSpeakerOn; @@ -146,9 +148,36 @@ - (BOOL)setConfig:(RTCAudioSessionConfiguration *)config #pragma mark - Exported methods +RCT_EXPORT_METHOD(setDisabled:(BOOL)disabled + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) { + if (audioDisabled == disabled) { + resolve(nil); + return; + } + + RCTLogInfo(@"[AudioMode] audio disabled: %d", disabled); + + audioDisabled = disabled; + JMCallKitProxy.enabled = !disabled; + + RTCAudioSession *session = JitsiAudioSession.rtcAudioSession; + if (disabled) { + [session removeDelegate:self]; + } else { + [session addDelegate:self]; + } + session.useManualAudio = disabled; +} + RCT_EXPORT_METHOD(setMode:(int)mode resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + if (audioDisabled) { + resolve(nil); + return; + } + RTCAudioSessionConfiguration *config = [self configForMode:mode]; NSError *error; @@ -177,6 +206,11 @@ - (BOOL)setConfig:(RTCAudioSessionConfiguration *)config RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + if (audioDisabled) { + resolve(nil); + return; + } + RCTLogInfo(@"[AudioMode] Selected device: %@", device); RTCAudioSession *session = JitsiAudioSession.rtcAudioSession; @@ -239,6 +273,10 @@ - (BOOL)setConfig:(RTCAudioSessionConfiguration *)config } RCT_EXPORT_METHOD(updateDeviceList) { + if (audioDisabled) { + return; + } + [self notifyDevicesChanged]; } diff --git a/ios/sdk/src/ExternalAPI.h b/ios/sdk/src/ExternalAPI.h index e3c43a22ec83..2e29db0a8a3e 100644 --- a/ios/sdk/src/ExternalAPI.h +++ b/ios/sdk/src/ExternalAPI.h @@ -27,9 +27,15 @@ static NSString * const sendEventNotificationName = @"org.jitsi.meet.SendEvent"; - (void)retrieveParticipantsInfo:(void (^)(NSArray*))completion; - (void)openChat:(NSString*)to; - (void)closeChat; -- (void)sendChatMessage:(NSString*)message :(NSString*)to ; +- (void)sendChatMessage:(NSString*)message :(NSString*)to; - (void)sendSetVideoMuted:(BOOL)muted; - (void)sendSetClosedCaptionsEnabled:(BOOL)enabled; - (void)toggleCamera; +- (void)showNotification:(NSString*)appearance :(NSString*)description :(NSString*)timeout :(NSString*)title :(NSString*)uid; +- (void)hideNotification:(NSString*)uid; +- (void)startRecording:(NSString*)mode :(NSString*)dropboxToken :(BOOL)shouldShare :(NSString*)rtmpStreamKey :(NSString*)rtmpBroadcastID :(NSString*)youtubeStreamKey :(NSString*)youtubeBroadcastID :(NSDictionary*)extraMetadata :(BOOL)transcription; +- (void)stopRecording:(NSString*)mode :(BOOL)transcription; +- (void)overwriteConfig:(NSDictionary*)config; +- (void)sendCameraFacingModeMessage:(NSString*)to :(NSString*)facingMode; @end diff --git a/ios/sdk/src/ExternalAPI.m b/ios/sdk/src/ExternalAPI.m index 7437d43f838a..b818f71a50e0 100644 --- a/ios/sdk/src/ExternalAPI.m +++ b/ios/sdk/src/ExternalAPI.m @@ -28,13 +28,19 @@ static NSString * const setVideoMutedAction = @"org.jitsi.meet.SET_VIDEO_MUTED"; static NSString * const setClosedCaptionsEnabledAction = @"org.jitsi.meet.SET_CLOSED_CAPTIONS_ENABLED"; static NSString * const toggleCameraAction = @"org.jitsi.meet.TOGGLE_CAMERA"; +static NSString * const showNotificationAction = @"org.jitsi.meet.SHOW_NOTIFICATION"; +static NSString * const hideNotificationAction = @"org.jitsi.meet.HIDE_NOTIFICATION"; +static NSString * const startRecordingAction = @"org.jitsi.meet.START_RECORDING"; +static NSString * const stopRecordingAction = @"org.jitsi.meet.STOP_RECORDING"; +static NSString * const overwriteConfigAction = @"org.jitsi.meet.OVERWRITE_CONFIG"; +static NSString * const sendCameraFacingModeMessageAction = @"org.jitsi.meet.SEND_CAMERA_FACING_MODE_MESSAGE"; @implementation ExternalAPI static NSMapTable *participantInfoCompletionHandlers; __attribute__((constructor)) -static void initializeViewsMap() { +static void initializeViewsMap(void) { participantInfoCompletionHandlers = [NSMapTable strongToStrongObjectsMapTable]; } @@ -52,7 +58,13 @@ - (NSDictionary *)constantsToExport { @"SEND_CHAT_MESSAGE": sendChatMessageAction, @"SET_VIDEO_MUTED" : setVideoMutedAction, @"SET_CLOSED_CAPTIONS_ENABLED": setClosedCaptionsEnabledAction, - @"TOGGLE_CAMERA": toggleCameraAction + @"TOGGLE_CAMERA": toggleCameraAction, + @"SHOW_NOTIFICATION": showNotificationAction, + @"HIDE_NOTIFICATION": hideNotificationAction, + @"START_RECORDING": startRecordingAction, + @"STOP_RECORDING": stopRecordingAction, + @"OVERWRITE_CONFIG": overwriteConfigAction, + @"SEND_CAMERA_FACING_MODE_MESSAGE": sendCameraFacingModeMessageAction }; }; @@ -78,7 +90,13 @@ + (BOOL)requiresMainQueueSetup { sendChatMessageAction, setVideoMutedAction, setClosedCaptionsEnabledAction, - toggleCameraAction + toggleCameraAction, + showNotificationAction, + hideNotificationAction, + startRecordingAction, + stopRecordingAction, + overwriteConfigAction, + sendCameraFacingModeMessageAction ]; } @@ -180,4 +198,63 @@ - (void)toggleCamera { [self sendEventWithName:toggleCameraAction body:nil]; } +- (void)showNotification:(NSString*)appearance :(NSString*)description :(NSString*)timeout :(NSString*)title :(NSString*)uid { + NSMutableDictionary *data = [[NSMutableDictionary alloc] init]; + data[@"appearance"] = appearance; + data[@"description"] = description; + data[@"timeout"] = timeout; + data[@"title"] = title; + data[@"uid"] = uid; + + [self sendEventWithName:showNotificationAction body:data]; +} + +- (void)hideNotification:(NSString*)uid { + NSMutableDictionary *data = [[NSMutableDictionary alloc] init]; + data[@"uid"] = uid; + + [self sendEventWithName:hideNotificationAction body:data]; +} + +- (void)startRecording:(NSString*)mode :(NSString*)dropboxToken :(BOOL)shouldShare :(NSString*)rtmpStreamKey :(NSString*)rtmpBroadcastID :(NSString*)youtubeStreamKey :(NSString*)youtubeBroadcastID :(NSDictionary*)extraMetadata :(BOOL)transcription { + NSDictionary *data = @{ + @"mode": mode, + @"dropboxToken": dropboxToken, + @"shouldShare": @(shouldShare), + @"rtmpStreamKey": rtmpStreamKey, + @"rtmpBroadcastID": rtmpBroadcastID, + @"youtubeStreamKey": youtubeStreamKey, + @"youtubeBroadcastID": youtubeBroadcastID, + @"extraMetadata": extraMetadata, + @"transcription": @(transcription) + }; + + [self sendEventWithName:startRecordingAction body:data]; +} + +- (void)stopRecording:(NSString*)mode :(BOOL)transcription { + NSDictionary *data = @{ + @"mode": mode, + @"transcription": @(transcription) + }; + + [self sendEventWithName:stopRecordingAction body:data]; +} + +- (void)overwriteConfig:(NSDictionary*)config { + NSDictionary *data = @{ + @"config": config + }; + + [self sendEventWithName:overwriteConfigAction body:data]; +} + +- (void)sendCameraFacingModeMessage:(NSString*)to :(NSString*)facingMode { + NSDictionary *data = @{ + @"to": to, + @"facingMode": facingMode + }; + + [self sendEventWithName:sendCameraFacingModeMessageAction body:data]; +} @end diff --git a/ios/sdk/src/JavaScriptSandbox.m b/ios/sdk/src/JavaScriptSandbox.m deleted file mode 100644 index 66a9d74a1e05..000000000000 --- a/ios/sdk/src/JavaScriptSandbox.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright @ 2019-present 8x8, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@import JavaScriptCore; - -#import - - -@interface JavaScriptSandbox : NSObject -@end - -@implementation JavaScriptSandbox - -RCT_EXPORT_MODULE(); - -+ (BOOL)requiresMainQueueSetup { - return NO; -} - -#pragma mark - Exported methods - -RCT_EXPORT_METHOD(evaluate:(NSString *)code - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject) { - __block BOOL hasError = NO; - JSContext *ctx = [[JSContext alloc] init]; - ctx.exceptionHandler = ^(JSContext *context, JSValue *exception) { - hasError = YES; - reject(@"evaluate", [exception toString], nil); - }; - JSValue *ret = [ctx evaluateScript:code]; - if (!hasError) { - NSString *result = [ret toString]; - if (result == nil) { - reject(@"evaluate", @"Error in string coercion", nil); - } else { - resolve(result); - } - } -} - -@end diff --git a/ios/sdk/src/JitsiMeet.h b/ios/sdk/src/JitsiMeet.h index 850d6d36bd19..30e338d41fde 100644 --- a/ios/sdk/src/JitsiMeet.h +++ b/ios/sdk/src/JitsiMeet.h @@ -19,6 +19,15 @@ #import +// Matches RTCLoggingSeverity from RTCLogging.h +typedef NS_ENUM(NSInteger, WebRTCLoggingSeverity) { + WebRTCLoggingSeverityVerbose, + WebRTCLoggingSeverityInfo, + WebRTCLoggingSeverityWarning, + WebRTCLoggingSeverityError, + WebRTCLoggingSeverityNone, +}; + @interface JitsiMeet : NSObject /** @@ -26,20 +35,35 @@ * SiriKit or Handoff, for example. */ @property (copy, nonatomic, nullable) NSString *conferenceActivityType; + /** * Custom URL scheme used for deep-linking. */ @property (copy, nonatomic, nullable) NSString *customUrlScheme; + /** * List of domains used for universal linking. */ @property (copy, nonatomic, nullable) NSArray *universalLinkDomains; + /** * Default conference options used for all conferences. These options will be merged * with those passed to JitsiMeetView.join when joining a conference. */ @property (nonatomic, nullable) JitsiMeetConferenceOptions *defaultConferenceOptions; +/** + * Custom RTCAudioDevice implementation. + * https://github.com/jitsi/webrtc/blob/M124/sdk/objc/components/audio/RTCAudioDevice.h + * https://github.com/mstyura/RTCAudioDevice + */ +@property (nonatomic, strong, nullable) id rtcAudioDevice; + +/** + * Specify WebRTC logging severity. + */ +@property (nonatomic, assign) WebRTCLoggingSeverity webRtcLoggingSeverity; + #pragma mark - This class is a singleton + (instancetype _Nonnull)sharedInstance; @@ -58,7 +82,7 @@ options:(NSDictionary *_Nonnull)options; - (UIInterfaceOrientationMask)application:(UIApplication *_Nonnull)application - supportedInterfaceOrientationsForWindow:(UIWindow *_Nonnull)window; + supportedInterfaceOrientationsForWindow:(UIWindow *_Nullable)window; #pragma mark - Utility methods @@ -76,6 +100,9 @@ - (BOOL)isCrashReportingDisabled; -- (void)showSplashScreen:(UIView * _Nonnull) rootView; +/** + * Shows the splash screen. + */ +- (void)showSplashScreen; @end diff --git a/ios/sdk/src/JitsiMeet.m b/ios/sdk/src/JitsiMeet.m index e5f9f63fcd96..bc7f5f3f13e9 100644 --- a/ios/sdk/src/JitsiMeet.m +++ b/ios/sdk/src/JitsiMeet.m @@ -23,7 +23,6 @@ #import "JitsiMeetView+Private.h" #import "RCTBridgeWrapper.h" #import "ReactUtils.h" -#import "RNSplashScreen.h" #import "ScheenshareEventEmiter.h" #import @@ -54,15 +53,10 @@ + (instancetype)sharedInstance { - (instancetype)init { if (self = [super init]) { -#if 0 // Initialize WebRTC options. - WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance]; - options.loggingSeverity = RTCLoggingSeverityInfo; -#endif + self.rtcAudioDevice = nil; + self.webRtcLoggingSeverity = WebRTCLoggingSeverityNone; - // Initialize the one and only bridge for interfacing with React Native. - _bridgeWrapper = [[RCTBridgeWrapper alloc] init]; - // Initialize the listener for handling start/stop screensharing notifications. _screenshareEventEmiter = [[ScheenshareEventEmiter alloc] init]; @@ -141,7 +135,13 @@ - (void)instantiateReactNativeBridge { if (_bridgeWrapper != nil) { return; }; - + + // Initialize WebRTC options. + WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance]; + options.audioDevice = _rtcAudioDevice; + options.loggingSeverity = (RTCLoggingSeverity)_webRtcLoggingSeverity; + + // Initialize the one and only bridge for interfacing with React Native. _bridgeWrapper = [[RCTBridgeWrapper alloc] init]; } @@ -220,8 +220,17 @@ - (JitsiMeetConferenceOptions *)optionsFromUserActivity:(NSUserActivity *)userAc return nil; } -- (void)showSplashScreen:(UIView*)rootView { - [RNSplashScreen showSplash:@"LaunchScreen" inRootView:rootView]; +- (void)showSplashScreen { + Class splashClass = NSClassFromString(@"SplashView"); + if (splashClass && [splashClass respondsToSelector:@selector(sharedInstance)]) { + id splashInstance = [splashClass performSelector:@selector(sharedInstance)]; + if (splashInstance && [splashInstance respondsToSelector:@selector(showSplash)]) { + [splashInstance performSelector:@selector(showSplash)]; + NSLog(@"✅ Splash Screen Shown Successfully"); + } + } else { + NSLog(@"⚠️ SplashView module not found"); + } } #pragma mark - Property getter / setters @@ -231,7 +240,10 @@ - (void)showSplashScreen:(UIView*)rootView { } - (void)setDefaultConferenceOptions:(JitsiMeetConferenceOptions *)defaultConferenceOptions { - if (defaultConferenceOptions != nil && _defaultConferenceOptions.room != nil) { + + // For testing configOverrides a room needs to be set, + // thus the following check needs to be commented out + if (defaultConferenceOptions != nil && defaultConferenceOptions.room != nil) { @throw [NSException exceptionWithName:@"RuntimeError" reason:@"'room' must be null in the default conference options" userInfo:nil]; @@ -246,6 +258,8 @@ - (NSDictionary *)getDefaultProps { } - (RCTBridge *)getReactBridge { + // Initialize bridge lazily. + [self instantiateReactNativeBridge]; return _bridgeWrapper.bridge; } diff --git a/ios/sdk/src/JitsiMeetView.h b/ios/sdk/src/JitsiMeetView.h index 323f67ccf57b..4983145133aa 100644 --- a/ios/sdk/src/JitsiMeetView.h +++ b/ios/sdk/src/JitsiMeetView.h @@ -21,6 +21,11 @@ #import "JitsiMeetConferenceOptions.h" #import "JitsiMeetViewDelegate.h" +typedef NS_ENUM(NSInteger, RecordingMode) { + RecordingModeFile, + RecordingModeStream +}; + @interface JitsiMeetView : UIView @property (nonatomic, nullable, weak) id delegate; @@ -47,5 +52,10 @@ - (void)setVideoMuted:(BOOL)muted; - (void)setClosedCaptionsEnabled:(BOOL)enabled; - (void)toggleCamera; - +- (void)showNotification:(NSString * _Nonnull)appearance :(NSString * _Nullable)description :(NSString * _Nullable)timeout :(NSString * _Nullable)title :(NSString * _Nullable)uid; +- (void)hideNotification:(NSString * _Nullable)uid; +- (void)startRecording:(RecordingMode)mode :(NSString * _Nullable)dropboxToken :(BOOL)shouldShare :(NSString * _Nullable)rtmpStreamKey :(NSString * _Nullable)rtmpBroadcastID :(NSString * _Nullable)youtubeStreamKey :(NSString * _Nullable)youtubeBroadcastID :(NSDictionary * _Nullable)extraMetadata :(BOOL)transcription; +- (void)stopRecording:(RecordingMode)mode :(BOOL)transcription; +- (void)overwriteConfig:(NSDictionary * _Nonnull)config; +- (void)sendCameraFacingModeMessage:(NSString * _Nonnull)to :(NSString * _Nullable)facingMode; @end diff --git a/ios/sdk/src/JitsiMeetView.m b/ios/sdk/src/JitsiMeetView.m index 5691de1b0c22..ba3ba0577c75 100644 --- a/ios/sdk/src/JitsiMeetView.m +++ b/ios/sdk/src/JitsiMeetView.m @@ -17,6 +17,8 @@ #include +#import + #import "ExternalAPI.h" #import "JitsiMeet+Private.h" #import "JitsiMeetConferenceOptions+Private.h" @@ -25,11 +27,43 @@ #import "RNRootView.h" +#pragma mark UIColor helpers + +@interface UIColor (Hex) + ++ (UIColor *)colorWithHex:(uint32_t)hex; ++ (UIColor *)colorWithHex:(uint32_t)hex alpha:(CGFloat)alpha; + +@end + +@implementation UIColor (Hex) + ++ (UIColor *)colorWithHex:(uint32_t)hex { + return [self colorWithHex:hex alpha:1.0]; +} + ++ (UIColor *)colorWithHex:(uint32_t)hex alpha:(CGFloat)alpha { + CGFloat red = ((hex >> 16) & 0xFF) / 255.0; + CGFloat green = ((hex >> 8) & 0xFF) / 255.0; + CGFloat blue = (hex & 0xFF) / 255.0; + + return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; +} + +@end + +#pragma mark UIColor helpers end + /** * Backwards compatibility: turn the boolean prop into a feature flag. */ static NSString *const PiPEnabledFeatureFlag = @"pip.enabled"; +/** + * Forward declarations. + */ +static NSString *recordingModeToString(RecordingMode mode); + @implementation JitsiMeetView { /** @@ -65,11 +99,8 @@ - (instancetype)initWithFrame:(CGRect)frame { * - registers necessary observers */ - (void)doInitialize { - // Set a background color which is in accord with the JavaScript and Android - // parts of the application and causes less perceived visual flicker than - // the default background color. - self.backgroundColor - = [UIColor colorWithRed:.07f green:.07f blue:.07f alpha:1]; + // Set a background color which matches the one used in JS. + self.backgroundColor = [UIColor colorWithHex:0x040404 alpha:1]; [self registerObservers]; } @@ -143,6 +174,36 @@ - (void)toggleCamera { [externalAPI toggleCamera]; } +- (void)showNotification:(NSString *)appearance :(NSString *)description :(NSString *)timeout :(NSString *)title :(NSString *)uid { + ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI]; + [externalAPI showNotification:appearance :description :timeout :title :uid]; +} + +-(void)hideNotification:(NSString *)uid { + ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI]; + [externalAPI hideNotification:uid]; +} + +- (void)startRecording:(RecordingMode)mode :(NSString * _Nullable)dropboxToken :(BOOL)shouldShare :(NSString * _Nullable)rtmpStreamKey :(NSString * _Nullable)rtmpBroadcastID :(NSString * _Nullable)youtubeStreamKey :(NSString * _Nullable)youtubeBroadcastID :(NSDictionary * _Nullable)extraMetadata :(BOOL)transcription { + ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI]; + [externalAPI startRecording:recordingModeToString(mode) :dropboxToken :shouldShare :rtmpStreamKey :rtmpBroadcastID :youtubeStreamKey :youtubeBroadcastID :extraMetadata :transcription]; +} + +- (void)stopRecording:(RecordingMode)mode :(BOOL)transcription { + ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI]; + [externalAPI stopRecording:recordingModeToString(mode) :transcription]; +} + +- (void)overwriteConfig:(NSDictionary * _Nonnull)config { + ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI]; + [externalAPI overwriteConfig:config]; +} + +- (void)sendCameraFacingModeMessage:(NSString * _Nonnull)to :(NSString * _Nullable)facingMode { + ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI]; + [externalAPI sendCameraFacingModeMessage:to :facingMode]; +} + #pragma mark Private methods - (void)registerObservers { @@ -237,3 +298,14 @@ - (void)setProps:(NSDictionary *_Nonnull)newProps { } @end + +static NSString *recordingModeToString(RecordingMode mode) { + switch (mode) { + case RecordingModeFile: + return @"file"; + case RecordingModeStream: + return @"stream"; + default: + return nil; + } +} diff --git a/ios/sdk/src/JitsiMeetViewDelegate.h b/ios/sdk/src/JitsiMeetViewDelegate.h index 56f388eaeb6c..0e3e925bb653 100644 --- a/ios/sdk/src/JitsiMeetViewDelegate.h +++ b/ios/sdk/src/JitsiMeetViewDelegate.h @@ -128,6 +128,20 @@ * * The `data` dictionary contains a `id`, `text` key. */ -- (void)customOverflowMenuButtonPressed:(NSDictionary *)data; +- (void)customButtonPressed:(NSDictionary *)data; + +/** + * Called when the unique identifier for conference has been set. + * + * The `data` dictionary contains a `sessionId` key. + */ +- (void)conferenceUniqueIdSet:(NSDictionary *)data; + +/** + * Called when the recording status has changed. + * + * The `data` dictionary contains a `sessionData` key. + */ +- (void)recordingStatusChanged:(NSDictionary *)data; @end diff --git a/ios/travis-ci/build-ipa.sh b/ios/travis-ci/build-ipa.sh deleted file mode 100755 index eccca231c9a2..000000000000 --- a/ios/travis-ci/build-ipa.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/bash -set -e - -# The script is based on tutorial written by Antonis Tsakiridis published at: -# https://medium.com/@atsakiridis/continuous-deployment-for-ios-using-travis-ci-55dcea342d9 -# -# It is intended to be executed through the Travis CI REST API call, as it -# requires few arguments which are mandatory with no default values provided: -# PR_REPO_SLUG - the Github name of the repo to be merged into the origin/master -# PR_BRANCH - the branch to be merged, if set to "master" no merge will happen -# IPA_DEPLOY_LOCATION - the location understandable by the "scp" command -# executed at the end of the script to deploy the output .ipa file -# LIB_JITSI_MEET_PKG (optional) - the npm package for lib-jitsi-meet which will -# be put in place of the current version in the package.json file. -# -# Other than that the script requires the following env variables to be set -# (reading the tutorial mentioned above will help in understanding the -# variables): -# -# APPLE_CERT_URL - the URL pointing to Apple certificate (set to -# http://developer.apple.com/certificationauthority/AppleWWDRCA.cer by default) -# DEPLOY_SSH_CERT_URL - the SSH private key used by the 'scp' command to deploy -# the .ipa. It is expected to be encrypted with the $ENCRYPTION_PASSWORD. -# ENCRYPTION_PASSWORD - the password used to decrypt certificate/key files used -# in the script. -# IOS_DEV_CERT_KEY_URL - URL pointing to provisioning profile certificate key -# file (development-key.p12.enc from the tutorial) encrypted with the -# $ENCRYPTION_PASSWORD. -# IOS_DEV_CERT_URL - URL pointing to provisioning profile certificate file -# (development-cert.cer.enc from the tutorial) encrypted with the -# $ENCRYPTION_PASSWORD. -# IOS_DEV_PROV_PROFILE_URL - URL pointing to provisioning profile file -# (profile-development-olympus.mobileprovision.enc from the tutorial) encrypted -# with the $ENCRYPTION_PASSWORD. -# IOS_SIGNING_CERT_PASSWORD - the password to the provisioning profile -# certificate key (used to open development-key.p12 from the tutorial). -# IOS_TEAM_ID - the team ID inserted into build-ipa-.plist.template file in -# place of "YOUR_TEAM_ID". - - -# Travis will not print the last echo if there's no sleep 1 -function echoSleepAndExit1() { - echo $1 - sleep 1 - exit 1 -} - -echo "TRAVIS_BRANCH=${TRAVIS_BRANCH}" -echo "TRAVIS_REPO_SLUG=${TRAVIS_REPO_SLUG}" - -if [ -z $PR_REPO_SLUG ]; then - echoSleepAndExit1 "No PR_REPO_SLUG defined" -fi -if [ -z $PR_BRANCH ]; then - echoSleepAndExit1 "No PR_BRANCH defined" -fi -if [ -z $IPA_DEPLOY_LOCATION ]; then - echoSleepAndExit1 "No IPA_DEPLOY_LOCATION defined" -fi - -echo "PR_REPO_SLUG=${PR_REPO_SLUG} PR_BRANCH=${PR_BRANCH}" - -# do the merge and git log - -if [ $PR_BRANCH != "master" ]; then - echo "Will merge ${PR_REPO_SLUG}/${PR_BRANCH} into master" - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch origin master - git checkout master - git pull https://github.com/${PR_REPO_SLUG}.git $PR_BRANCH --no-edit -fi - -# Link this lib-jitsi-meet checkout in jitsi-meet through the package.json -if [ ! -z ${LIB_JITSI_MEET_PKG} ]; -then - echo "Adjusting lib-jitsi-meet package in package.json to ${LIB_JITSI_MEET_PKG}" - # escape for the sed - LIB_JITSI_MEET_PKG=$(echo $LIB_JITSI_MEET_PKG | sed -e 's/\\/\\\\/g; s/\//\\\//g; s/&/\\\&/g') - sed -i.bak -e "s/\"lib-jitsi-meet.*/\"lib-jitsi-meet\"\: \"${LIB_JITSI_MEET_PKG}\",/g" package.json - echo "Package.json lib-jitsi-meet line:" - grep lib-jitsi-meet package.json -else - echo "LIB_JITSI_MEET_PKG var not set - will not modify the package.json" -fi - -git log -20 --graph --pretty=format':%C(yellow)%h%Cblue%d%Creset %s %C(white) %an, %ar%Creset' - -#certificates -CERT_DIR="ios/travis-ci/certs" - -mkdir -p $CERT_DIR - -./ios/ci/setup-certificates.sh $CERT_DIR - -curl -L -o ${CERT_DIR}/id_rsa.enc ${DEPLOY_SSH_CERT_URL} -openssl aes-256-cbc -k "$ENCRYPTION_PASSWORD" -in ${CERT_DIR}/id_rsa.enc -d -a -out ${CERT_DIR}/id_rsa -chmod 0600 ${CERT_DIR}/id_rsa -ssh-add ${CERT_DIR}/id_rsa - -npm install - -# Ever since the Apple Watch app has been added the bitcode for WebRTC needs to be downloaded in order to build successfully -./node_modules/react-native-webrtc/tools/downloadBitcode.sh - -cd ios -pod install --repo-update --no-ansi -cd .. - -mkdir -p /tmp/jitsi-meet/ - -xcodebuild archive -quiet -workspace ios/jitsi-meet.xcworkspace -scheme jitsi-meet -configuration Release -archivePath /tmp/jitsi-meet/jitsi-meet.xcarchive - -sed -e "s/YOUR_TEAM_ID/${IOS_TEAM_ID}/g" ios/ci/build-ipa.plist.template > ios/ci/build-ipa.plist - -IPA_EXPORT_DIR=/tmp/jitsi-meet/jitsi-meet-ipa - -xcodebuild -quiet -exportArchive -archivePath /tmp/jitsi-meet/jitsi-meet.xcarchive -exportPath $IPA_EXPORT_DIR -exportOptionsPlist ios/ci/build-ipa.plist - -echo "Will try deploy the .ipa to: ${IPA_DEPLOY_LOCATION}" - -if [ ! -z ${SCP_PROXY_HOST} ]; -then - scp -o ProxyCommand="ssh -t -A -l %r ${SCP_PROXY_HOST} -o \"StrictHostKeyChecking no\" -o \"BatchMode yes\" -W %h:%p" -o StrictHostKeyChecking=no -o LogLevel=DEBUG "${IPA_EXPORT_DIR}/jitsi-meet.ipa" "${IPA_DEPLOY_LOCATION}" -else - scp -o StrictHostKeyChecking=no -o LogLevel=DEBUG "${IPA_EXPORT_DIR}/jitsi-meet.ipa" "${IPA_DEPLOY_LOCATION}" -fi - diff --git a/lang/languages.json b/lang/languages.json index 919ed4611bda..1ba559ffe69c 100644 --- a/lang/languages.json +++ b/lang/languages.json @@ -12,13 +12,13 @@ "en": "English", "eo": "Esperanto", "es": "Español", - "esUS": "Español (Latinoamérica)", + "es-US": "Español (Latinoamérica)", "et": "Eesti", "eu": "Euskara", "fa": "فارسی", "fi": "Suomi", "fr": "Français", - "frCA": "Français (Canada)", + "fr-CA": "Français (Canada)", "gl": "Galego", "he": "עברית", "hi": "हिन्दी", @@ -26,6 +26,7 @@ "hsb": "Hornjoserbšćina", "hu": "Magyar", "hy": "Հայերեն", + "id": "Bahasa", "is": "Íslenska", "it": "Italiano", "ja": "日本語", @@ -36,11 +37,13 @@ "ml": "മലയാളം", "mn": "Монгол", "mr": "मराठी", + "nb": "Norsk bokmål", "nl": "Nederlands", + "no": "Norsk", "oc": "Occitan", "pl": "Polski", "pt": "Português", - "ptBR": "Português (Brasil)", + "pt-BR": "Português (Brasil)", "ro": "Română", "ru": "Русский", "sc": "Sardu", @@ -53,6 +56,6 @@ "tr": "Türkçe", "uk": "Українська", "vi": "Tiếng Việt", - "zhCN": "中文(简体)", - "zhTW": "中文(繁體)" + "zh-CN": "中文(简体)", + "zh-TW": "中文(繁體)" } diff --git a/lang/main-af.json b/lang/main-af.json index 9548c78d8aab..b902b6215798 100644 --- a/lang/main-af.json +++ b/lang/main-af.json @@ -68,7 +68,7 @@ "DISCONNECTED": "Ontkoppeld", "DISCONNECTING": "Ontkoppel tans", "ERROR": "Fout", - "RECONNECTING": "’n Netwerkprobleem het voorgekom. Herkoppel tans..." + "RECONNECTING": "’n Netwerkprobleem het voorgekom. Herkoppel tans…" }, "connectionindicator": { "address": "Adres:", @@ -426,7 +426,7 @@ "somebody": "Iemand", "startSilentDescription": "", "startSilentTitle": "", - "suboptimalExperienceDescription": "Gits... ons is bevrees u ervaring met {{appName}} gaan nie so goed wees hier nie. Ons soek maniere om dit die hoof te bied, maar probeer intussen een van die volledig ondersteunde blaaiers.", + "suboptimalExperienceDescription": "Gits… ons is bevrees u ervaring met {{appName}} gaan nie so goed wees hier nie. Ons soek maniere om dit die hoof te bied, maar probeer intussen een van die volledig ondersteunde blaaiers.", "suboptimalExperienceTitle": "Blaaierwaarskuwing", "unmute": "" }, @@ -443,7 +443,7 @@ "calling": "Bel tans…", "connected": "Gekoppel", "connecting": "Koppel tans…", - "connecting2": "Koppel tans*...", + "connecting2": "Koppel tans*…", "disconnected": "Ontkoppeld", "expired": "Verval", "ignored": "Geïgnoreer", @@ -641,16 +641,7 @@ "tr": "" }, "userMedia": { - "androidGrantPermissions": "Kies Allow wanneer die blaaier vir toestemming vra.", - "chromeGrantPermissions": "Kies Allow wanneer die blaaier vir toestemming vra.", - "edgeGrantPermissions": "Kies Yes wanneer die blaaier vir toestemming vra.", - "electronGrantPermissions": "Gee asb. toestemming vir die gebruik van u kamera en mikrofoon", - "firefoxGrantPermissions": "Kies Deel gekose toestel wanneer die blaaier vir toestemming vra.", - "iexplorerGrantPermissions": "Kies OK wanneer die blaaier vir toestemming vra.", - "nwjsGrantPermissions": "Gee asb. toestemming vir die gebruik van u kamera en mikrofoon", - "operaGrantPermissions": "Kies Allow wanneer die blaaier vir toestemming vra.", - "react-nativeGrantPermissions": "Kies Allow wanneer die blaaier vir toestemming vra.", - "safariGrantPermissions": "Kies OK wanneer die blaaier vir toestemming vra." + "grantPermissions": "Gee asb. toestemming vir die gebruik van u kamera en mikrofoon." }, "videoSIPGW": { "busy": "Ons probeer tans hulpbronne vry te stel. Probeer gerus weer oor ’n paar minute.", diff --git a/lang/main-ar.json b/lang/main-ar.json index b0a610c4ea6e..bbb34dacd45f 100644 --- a/lang/main-ar.json +++ b/lang/main-ar.json @@ -122,7 +122,7 @@ "installExtensionText": "نزِّل الإضافة للدمج مع رزنامة غوغل ورزنامة أوفيس 365" }, "connectingOverlay": { - "joiningRoom": "قيد وصلك بالإجتماع..." + "joiningRoom": "قيد وصلك بالإجتماع…" }, "connection": { "ATTACHED": "رُبِط", @@ -134,7 +134,7 @@ "DISCONNECTED": "فُصِل", "DISCONNECTING": "قيد الفصل", "ERROR": "خطأ", - "FETCH_SESSION_ID": "قيد الحصول على مُعرِّف الجلسة...", + "FETCH_SESSION_ID": "قيد الحصول على مُعرِّف الجلسة…", "GET_SESSION_ID_ERROR": "خطأ في الحصول على مُعرِّف الجلسة: {{code}}", "GOT_SESSION_ID": "جرى الحصول على مُعرِّف الجلسة", "LOW_BANDWIDTH": "أوقف فيديو {{displayName}} لتوفير كمية البيانات المتبادلة" @@ -189,7 +189,7 @@ "ifHaveApp": "إن كان لديك التطبيق:", "joinInApp": "انضم للمُلتقى عبر تطبيق الجوال", "launchWebButton": "افتح تطبيق الويب", - "title": "قيد عقد مُلتقىك في {{app}}...", + "title": "قيد عقد مُلتقىك في {{app}}…", "tryAgainButton": "جرب مرة أخرى في تطبيق الحاسوب", "unsupportedBrowser": "يبدو أنك تستخدم متصفحًا لا ندعمه." }, @@ -222,7 +222,7 @@ "Share": "شارك", "Submit": "أرسل", "WaitForHostMsg": "لم يبدأ المؤتمر بعد. إن كنت المضيف والراعي، فنرجو تأكيد ذلك عبر الاستيثاق أو انتظر وصول المضيف رجاءً. ", - "WaitingForHostTitle": "في انتظار المضيف ...", + "WaitingForHostTitle": "في انتظار المضيف…", "Yes": "نعم", "accessibilityLabel": { "liveStreaming": "بث حي مباشر" @@ -244,9 +244,9 @@ "cameraUnknownError": "يصعب استعمال الكاميرا لأسباب مجهولة.", "cameraUnsupportedResolutionError": "لا تدعم كاميرتك دقة الفيديو المطلوبة.", "close": "أغلق", - "conferenceDisconnectMsg": "قد تضطر للتحقق من اتصال الشبكة لديك. سيعاد الاتصال خلال {{seconds}} ثانية...", + "conferenceDisconnectMsg": "قد تضطر للتحقق من اتصال الشبكة لديك. سيعاد الاتصال خلال {{seconds}} ثانية…", "conferenceDisconnectTitle": "فُصِل الاتصال لديك.", - "conferenceReloadMsg": "نحاول إصلاح الأمر. سيعاد الاتصال خلال {{seconds}} ثانية...", + "conferenceReloadMsg": "نحاول إصلاح الأمر. سيعاد الاتصال خلال {{seconds}} ثانية…", "conferenceReloadTitle": "لم تسر الأمور على ما يرام، نأسف لذلك!", "confirm": "أكِّد", "confirmNo": "لا", @@ -531,7 +531,7 @@ "errorLiveStreamNotEnabled": "البث الحي غير مفعَّل على على {{email}}. فعَّل البث الحي رجاءً، أو سجِّل الدخل إلى حسابٍ مُفعَّل فيه البث الحي", "expandedOff": "أُوقِف البث الحي", "expandedOn": "يجري بث المُلتقى على يوتيوب", - "expandedPending": "تبدأ عملية البث الحي...", + "expandedPending": "تبدأ عملية البث الحي…", "failedToStart": "فشلت عملية بدء البث الحي", "getStreamKeyManually": "لم نتمكن من الوصول إلى أي بث حي. جرب جلب مفتاح بث حي خاص بك من يوتيوب.", "googlePrivacyPolicy": "سياسية خصوصية غوغل", @@ -574,10 +574,10 @@ "joinRejectedMessage": "رفض رئيس الجلسة منحك الإذن بالدخول إلى المُلتقى", "joinRejectedTitle": "تم رفض طلب الانضمام.", "joinTitle": "انضم للمُلتقى", - "joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور...", + "joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور…", "joiningMessage": "ستتمكن من الانضمام للمُلتقى بعد الموافقة على طلبك", - "joiningTitle": "يجري طلب إذنٍ للدخول...", - "joiningWithPasswordTitle": "الدخول مع كلمة مرور...", + "joiningTitle": "يجري طلب إذنٍ للدخول…", + "joiningWithPasswordTitle": "الدخول مع كلمة مرور…", "knockButton": "اطلب إذن الدخول", "knockTitle": "يريد أحدٌ الدخول إلى المُلتقى", "knockingParticipantList": "تنبيه قائمة المشاركين", @@ -658,7 +658,7 @@ "linkToSalesforceDescription": "يمكنك ربط ملخص الاجتماع بكائن Salesforce.", "linkToSalesforceError": "فشل ربط المُلتقى بـ Salesforce", "linkToSalesforceKey": "ربط هذا المُلتقى", - "linkToSalesforceProgress": "جارٍ ربط الاجتماع بـ Salesforce ...", + "linkToSalesforceProgress": "جارٍ ربط الاجتماع بـ Salesforce…", "linkToSalesforceSuccess": "تم ربط الاجتماع بـ Salesforce", "localRecordingStarted": "بدأ {{name}} تسجيلًا محليًا.", "localRecordingStopped": "أوقف {{name}} التسجيل المحلي.", @@ -789,7 +789,7 @@ "callMe": "اتصل بي", "callMeAtNumber": "اتصل بي على هذا الرقم:", "calling": "قيد الاتصال", - "configuringDevices": "يجري ضبط الأجهزة...", + "configuringDevices": "يجري ضبط الأجهزة…", "connectedWithAudioQ": "هل متصل بجهاز صوت؟", "connection": { "good": "اتصال الإنترنت لديك جيد!", @@ -835,7 +835,6 @@ "or": "أو", "premeeting": "ما قبل المُلتقى", "screenSharingError": "خطأ في مشاركة الشاشة:", - "showScreen": "تفعيل واجهة ما قبل المُلتقى", "startWithPhone": "البدء مع جهاز الصوت من الجوال", "videoOnlyError": "خطأ في الفيديو:", "videoTrackError": "لم نتمكن من إنشاء ملف الفيديو", @@ -843,17 +842,17 @@ }, "presenceStatus": { "busy": "مشغول", - "calling": "يتحدث...", + "calling": "يتحدث…", "connected": "متصل", - "connecting": "يتصل...", - "connecting2": "يتصل...", + "connecting": "يتصل…", + "connecting2": "يتصل…", "disconnected": "غير الاتصال", "expired": "منتهي الصلاحية", "ignored": "مهمل", - "initializingCall": "تهيئة مكالمة...", + "initializingCall": "تهيئة مكالمة…", "invited": "مدعو", "rejected": "مرفوض", - "ringing": "يرن..." + "ringing": "يرن…" }, "privacyView": { "title": "خصوصية" @@ -890,7 +889,7 @@ "errorFetchingLink": "خطأ في جلب رابط التسجيل.", "expandedOff": "أوقٍف التسجيل", "expandedOn": "يُسجَّل المُلتقى الآن", - "expandedPending": "بدء التسجيل...", + "expandedPending": "بدء التسجيل…", "failedToStart": "فشل بدء التسجيل", "fileSharingdescription": "شارك التسجيل مع المشاركين للمُلتقى", "highlight": "تسليط الضوء", @@ -917,7 +916,7 @@ "on": "تسجيل", "onBy": "بدأ {{name}} التسجيل", "onlyRecordSelf": "تسجيل فقط دفق الصوت والفيديو الخاصة بي", - "pending": "التحضير لتسجيل المُلتقى...", + "pending": "التحضير لتسجيل المُلتقى…", "rec": "تسجيل", "saveLocalRecording": "حفظ ملف التسجيل محليا", "serviceDescription": "ستحفظ خدمة التسجيل الفيديو المستجل", @@ -944,6 +943,7 @@ "title": "خيارات الأمان" }, "settings": { + "audio": "الصوت", "buttonLabel": "إعدادات", "calendar": { "about": "تُستعمَل الرزنامة {{appName}} المدمجة للوصل بأمان إلى رزنامتك، لذا بالإمكان معرفة الأحداث القادمة.", @@ -967,6 +967,7 @@ "more": "المزيد", "name": "الاسم", "noDevice": "لا يوجد", + "notifications": "الإشعارات", "participantJoined": "انضم مشارك", "participantKnocking": "دخل المشارك في الردهة", "participantLeft": "غادر المشارك", @@ -977,13 +978,15 @@ "selectCamera": "الكاميرا", "selectMic": "المايكروفون", "selfView": "عرض ذاتي", + "shortcuts": "اختصارات لوحة المفاتيح", "sounds": "اصوات", "speakers": "المذياع (مكبر الصوت)", "startAudioMuted": "بدء الجميع مكتومي الصوت", "startReactionsMuted": "كتم رد فعل الصوت للجميع", "startVideoMuted": "بدء الجميع دون فيديو", "talkWhileMuted": "تحدث أثناء كتم الصوت", - "title": "الإعدادات" + "title": "الإعدادات", + "video": "الفيديو" }, "settingsView": { "advanced": "إعدادات متقدمة", @@ -1215,7 +1218,7 @@ "failedToStart": "فشلت عملية بدء الإذاعة", "labelToolTip": "يجري إذاعة المُلتقى", "off": "أوقفت الإذاعة", - "pending": "التحضير لإذاعة المُلتقى...", + "pending": "التحضير لإذاعة المُلتقى…", "start": "بدء إظهار الترجمة", "stop": "إيقاف عرض الترجمة", "subtitles": "ترجمات", @@ -1223,16 +1226,7 @@ "tr": "يذاع" }, "userMedia": { - "androidGrantPermissions": "اختر السماح عندما يطلب المتصفح الأذونات.", - "chromeGrantPermissions": "اختر السماح عندما يطلب المتصفح الأذونات.", - "edgeGrantPermissions": "اختر نعم عندما يطلب المتصفح الأذونات.", - "electronGrantPermissions": "امنح إذنًا باستعمال الكاميرا والمايكروفون.", - "firefoxGrantPermissions": "اختر مشاركة الجهاز المحدَّد عندما يطل بالمتصفح الأذونات.", - "iexplorerGrantPermissions": "اختر تمام عندما يطلب المتصفح الأذونات.", - "nwjsGrantPermissions": "امنح إذنًا باستعمال الكاميرا والمايكروفون.", - "operaGrantPermissions": "اختر السماح عندما يطلب المتصفح الأذونات.", - "react-nativeGrantPermissions": "اختر السماح عندما يطلب المتصفح الأذونات.", - "safariGrantPermissions": "اختر تمام عندما يطلب المتصفح الأذونات." + "grantPermissions": "امنح إذنًا باستعمال الكاميرا والمايكروفون." }, "videoSIPGW": { "busy": "نعمل على تحرير الموارد. حاول مرة أخرى لاحقًا بعد بضعة دقائق.", @@ -1302,7 +1296,7 @@ "image6": "غابة", "image7": "شروق الشمس", "none": "بدون", - "pleaseWait": "يرجى الانتظار...", + "pleaseWait": "يرجى الانتظار…", "removeBackground": "إزالة خلفية", "slightBlur": "طمس طفيف", "title": "خلفيات افتراضية", diff --git a/lang/main-be.json b/lang/main-be.json index 5b1bca12a3bd..8866b44aa839 100644 --- a/lang/main-be.json +++ b/lang/main-be.json @@ -489,7 +489,7 @@ "calling": "Выклікаю…", "connected": "Падключана", "connecting": "Падлучэнне…", - "connecting2": "Падлучэнне * ...", + "connecting2": "Падлучэнне *…", "disconnected": "Адключана", "expired": "Скончыўся", "ignored": "праігнаравалі", @@ -714,16 +714,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Калі ласка, пазначце Дазволіць , калі браўзэр спытае пра дазволы.", - "chromeGrantPermissions": "Калі ласка, пазначце Дазволіць , калі браўзэр спытае пра дазволы.", - "edgeGrantPermissions": "Калі ласка, пазначце Ды , калі браўзэр спытае пра дазволы.", - "electronGrantPermissions": "Калі ласка, дайце дазвол на доступ да камеры і мікрафону", - "firefoxGrantPermissions": "Калі ласка, пазначце Падзяліцца абраным прыладай , калі браўзэр спытае пра дазволы.", - "iexplorerGrantPermissions": "Калі ласка, пазначце OK , калі браўзэр спытае пра дазволы.", - "nwjsGrantPermissions": "Калі ласка, дайце дазвол на доступ да камеры і мікрафону", - "operaGrantPermissions": "Калі ласка, пазначце Дазволіць , калі браўзэр спытае пра дазволы.", - "react-nativeGrantPermissions": "Калі ласка, пазначце Дазволіць , калі браўзэр спытае пра дазволы.", - "safariGrantPermissions": "Калі ласка, пазначце OK , калі браўзэр спытае пра дазволы." + "grantPermissions": "Калі ласка, дайце дазвол на доступ да камеры і мікрафону." }, "videoSIPGW": { "busy": "Мы працуем над вызваленнем рэсурсаў. Калі ласка, паспрабуйце праз некалькі хвілін.", diff --git a/lang/main-bg.json b/lang/main-bg.json index ca50a9f58d50..119f75ee444f 100644 --- a/lang/main-bg.json +++ b/lang/main-bg.json @@ -1,7 +1,11 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "Линк за среща: {{url}}" + }, "add": "Покани", "addContacts": "Покани участници", + "contacts": "контакти", "copyInvite": "Копирай покана в срещата", "copyLink": "Копирай линк към срещата", "copyStream": "Копирай линк за излъчване на живо", @@ -10,27 +14,26 @@ "defaultEmail": "Покана по имейл", "disabled": "Не можете да каните хора.", "failedToAdd": "Неуспешно добавяне на участници", - "footerText": "Изходящите разговори не са разрешени.", + "googleEmail": "Google имейл", "inviteMoreHeader": "Вие сте единственият участник в срещата", "inviteMoreMailSubject": "Включи се в {{appName}} среща", "inviteMorePrompt": "Покани още участници", "linkCopied": "Линкът е копиран", - "loading": "Търсене на хора и телефонни номера", - "loadingNumber": "Валидиране на номер", - "loadingPeople": "Търсене на хора", "noResults": "Няма резултати", - "noValidNumbers": "Въведете телефонен номер", - "searchNumbers": "Добави номер", - "searchPeople": "Търсене на хора", - "searchPeopleAndNumbers": "Търсене на участници или добавяне по телефонен номер", + "outlookEmail": "Outlook имейл", + "phoneNumbers": "телефонни номера", + "searching": "Търсене…", "shareInvite": "Сподели покана за среща", "shareLink": "Сподели линк към срещата, за да поканиш някого", "shareStream": "Сподели линк за излъчване на живо", + "sipAddresses": "SIP адреси", "telephone": "Телефон: {{number}}", - "title": "Добавяне на участници в срещата" + "title": "Добавяне на участници в срещата", + "yahooEmail": "Yahoo имейл" }, "audioDevices": { "bluetooth": "Bluetooth", + "car": "Аудио в кола", "headphones": "Слушалки", "none": "Няма налични устройства за звук", "phone": "Телефон", @@ -39,6 +42,44 @@ "audioOnly": { "audioOnly": "Само звук" }, + "bandwidthSettings": { + "assumedBandwidthBps": "напр. 10000000 за 10 Mbps", + "assumedBandwidthBpsWarning": "Високи стойности могат да причинят проблеми с мрежата.", + "customValue": "персонализирана стойност", + "customValueEffect": "Задайте текущата стойност в bps", + "leaveEmpty": "оставете празно", + "leaveEmptyEffect": "за автоматично настройване", + "possibleValues": "Възможни стойности:", + "setAssumedBandwidthBps": "Предполагаема скорост (bps)", + "title": "Настройки за скоростта", + "zeroEffect": "за деактивиране на видеото" + }, + "breakoutRooms": { + "actions": { + "add": "Добави работна стая", + "autoAssign": "Автоматично разпредели в работни стаи", + "close": "Затвори", + "join": "Влез", + "leaveBreakoutRoom": "Излез от работната стая", + "more": "Още", + "remove": "Премахни", + "rename": "Преименувай", + "renameBreakoutRoom": "Преименувай работната стая", + "sendToBreakoutRoom": "Изпрати участника в:" + }, + "breakoutList": "Списък с работни стаи", + "buttonLabel": "Работни стаи", + "defaultName": "Работна стая #{{index}}", + "hideParticipantList": "Скрий списъка с участници", + "mainRoom": "Основна стая", + "notifications": { + "joined": "Влизане в работната стая \"{{name}}\"", + "joinedMainRoom": "Влизане в основната стая", + "joinedTitle": "Работни стаи" + }, + "showParticipantList": "Покажи списъка с участници", + "title": "Работни стаи" + }, "calendarSync": { "addMeetingURL": "Добавяне на връзка за среща", "confirmAddLink": "Искате ли да добавите връзка към това събитие?", @@ -57,30 +98,69 @@ "refresh": "Обновяване на календара", "today": "Днес" }, + "carmode": { + "actions": { + "selectSoundDevice": "Изберете аудио устройство" + }, + "labels": { + "buttonLabel": "Автомобилен режим", + "title": "Автомобилен режим", + "videoStopped": "Видеото ви е спряно" + } + }, "chat": { + "disabled": "Изпращането на съобщения е деактивирано.", + "enter": "Влизане в стаята", "error": "Грешка: вашето съобщение не бе изпратено, поради: {{error}}", + "everyone": "Всички", "fieldPlaceHolder": "Въведете съобщението", + "guestsChatIndicator": "(гост)", + "lobbyChatMessageTo": "Съобщение в лобито до {{recipient}}", + "message": "Съобщение", + "messageAccessibleTitle": "{{user}} казва:", + "messageAccessibleTitleMe": "аз казвам:", "messageTo": "Лично съобщение до {{recipient}}", "messagebox": "Въведете съобщение", + "newMessages": "Нови съобщения", "nickname": { "popover": "Избор на име", "title": "Въведете име, за да обменяте съобщения", - "titleWithPolls": "Въведете име, за да обменяте съобщения" + "titleWithCC": "Въведете име, за да използвате съобщения и субтитри", + "titleWithPolls": "Въведете име, за да обменяте съобщения", + "titleWithPollsAndCC": "Въведете име, за да използвате съобщения, анкети и субтитри", + "titleWithPollsAndCCAndFileSharing": "Въведете име, за да използвате съобщения, анкети, субтитри и споделени файлове" }, "noMessagesMessage": "Все още няма съобщения в срещата. Започнете разговор тук!", "privateNotice": "Лично съобщение до {{recipient}}", "sendButton": "Изпрати", - "title": "Текстови съобщения", - "titleWithPolls": "Текстови съобщения", + "smileysPanel": "Панел за емотикони", + "systemDisplayName": "Система", + "tabs": { + "chat": "Чат", + "closedCaptions": "Субтитри", + "fileSharing": "Файлове", + "polls": "Анкети" + }, + "title": "Чат", + "titleWithCC": "Субтитри", + "titleWithFeatures": "Чат и", + "titleWithFileSharing": "Файлове", + "titleWithPolls": "Анкети", "you": "вие" }, "chromeExtensionBanner": { "buttonText": "Инсталирайте разширението за Chrome", + "buttonTextEdge": "Инсталирай разширението за Edge", + "close": "Затвори", "dontShowAgain": "Не показвай повече", "installExtensionText": "Инсталирайте разширенията за Google Calendar и Office 365" }, + "closedCaptionsTab": { + "emptyState": "Съдържанието на субтитрите ще бъде достъпно, след като модератор ги стартира", + "startClosedCaptionsButton": "Стартирай субтитри" + }, "connectingOverlay": { - "joiningRoom": "Свързване с вашата среща..." + "joiningRoom": "Свързване с вашата среща…" }, "connection": { "ATTACHED": "Прикрепен", @@ -92,26 +172,31 @@ "DISCONNECTED": "Изключен", "DISCONNECTING": "Прекъсване на връзката", "ERROR": "Грешка", - "FETCH_SESSION_ID": "Отваряне на сесия...", + "FETCH_SESSION_ID": "Отваряне на сесия…", "GET_SESSION_ID_ERROR": "Грешка при отваряне на сесията: {{code}}", - "GOT_SESSION_ID": "Отваряне на сесията... Готово", - "LOW_BANDWIDTH": "Видеото на {{displayName}} беше изключено, поради слаба Интернет връзка", - "RECONNECTING": "Появи се проблем с мрежата. Връзваме се наново..." + "GOT_SESSION_ID": "Отваряне на сесията… Готово", + "LOW_BANDWIDTH": "Видеото на {{displayName}} беше изключено, поради слаба Интернет връзка" }, "connectionindicator": { "address": "Адрес:", + "audio_ssrc": "Аудио SSRC:", "bandwidth": "Предполагаема скорост:", "bitrate": "Скорост:", "bridgeCount": "Брой сървъри: ", + "codecs": "Кодеци (А/В): ", "connectedTo": "Свързан към:", + "e2eeVerified": "E2EE потвърден:", "framerate": "Кадри в секунда:", "less": "Скриване", "localaddress": "Локален адрес:", "localaddress_plural": "Локални адреси:", "localport": "Локален порт:", "localport_plural": "Локални портове:", + "maxEnabledResolution": "макс. изпращане", "more": "Показване", + "no": "не", "packetloss": "Загуба на пакети:", + "participant_id": "ID на участник:", "quality": { "good": "Добра", "inactive": "Няма", @@ -124,9 +209,12 @@ "remoteport": "Отдалечен порт:", "remoteport_plural": "Отдалечени портове:", "resolution": "Резолюция:", + "savelogs": "Запази логовете", "status": "Връзка:", "transport": "Транспорт:", - "transport_plural": "Транспорти:" + "transport_plural": "Транспорти:", + "video_ssrc": "Видео SSRC:", + "yes": "да" }, "dateUtils": { "earlier": "По-рано", @@ -136,12 +224,25 @@ "deepLinking": { "appNotInstalled": "Имате нужда от мобилното приложение {{app}} за влизане в тази среща от телефона.", "description": "Нищо не се случва? Опитахме се да заредим срещата в приложението {{app}}. Пробвайте отново или влезте чрез уеб приложението {{app}}.", + "descriptionNew": "Нищо не се случва? Опитахме се да заредим срещата в настолното приложение {{app}}.

Можете да опитате отново или да я заредите в уеб браузъра.", "descriptionWithoutWeb": "Нищо не се случва? Опитахме се да заредим срещата в приложението {{app}}.", "downloadApp": "Свалете приложението", + "downloadMobileApp": "Изтеглете от App Store", + "ifDoNotHaveApp": "Ако все още нямате приложението:", + "ifHaveApp": "Ако вече имате приложението:", + "joinInApp": "Влез чрез приложението", + "joinInAppNew": "Влез в приложението", + "joinInBrowser": "Влез чрез браузъра", + "launchMeetingLabel": "Как искате да влезете в срещата?", "launchWebButton": "Заредете уеб страницата", - "openApp": "Продължете към приложението", - "title": "Зареждане на срещата в {{app}}...", - "tryAgainButton": "Пробвайте отново" + "noDesktopApp": "Нямате настолното приложение?", + "noMobileApp": "Нямате мобилното приложение?", + "or": "ИЛИ", + "termsAndConditions": "Продължавайки, вие се съгласявате с нашите правила и условия.", + "title": "Зареждане на срещата в {{app}}…", + "titleNew": "Зареждане на срещата…", + "tryAgainButton": "Пробвайте отново в настолното приложение", + "unsupportedBrowser": "Изглежда, че използвате браузър, който не поддържаме." }, "defaultLink": "напр. {{url}}", "defaultNickname": "напр. Иван Иванов", @@ -152,10 +253,19 @@ "microphonePermission": "Грешка при получаване на разрешение за достъп до микрофона" }, "deviceSelection": { + "hid": { + "callControl": "Управление на повикванията", + "connectedDevices": "Свързани устройства:", + "deleteDevice": "Изтрий устройство", + "pairDevice": "Сдвояване на устройство" + }, "noPermission": "Не е получено разрешение", "previewUnavailable": "Няма възможност за преглед", "selectADevice": "Изберете устройство", - "testAudio": "Пусни пробен звук" + "testAudio": "Тест" + }, + "dialIn": { + "screenTitle": "Резюме за влизане по телефон" }, "dialOut": { "statusMessage": "в момента е {{status}}" @@ -168,22 +278,41 @@ "Remove": "Премахване", "Share": "Споделяне", "Submit": "Изпращане", - "WaitForHostMsg": "Конференцията все още не е започнала. Ако сте домакинът, тогава се идентифицирайте. В противен случай изчакайте докато домакинът пристигне.", - "WaitingForHost": "Чакаме домакина...", + "Understand": "Разбирам, остави ме заглушен засега", + "UnderstandAndUnmute": "Разбирам, моля включи ми звука", + "WaitForHostNoAuthMsg": "Конференцията все още не е започнала, защото няма пристигнали модератори. Моля, изчакайте.", + "WaitingForHostButton": "Изчакване на модератор", + "WaitingForHostTitle": "Изчакване на модератор…", "Yes": "Да", "accessibilityLabel": { - "liveStreaming": "Излъчване на живо" + "Cancel": "Отказ (напускане на диалога)", + "Ok": "ОК (запазване и напускане на диалога)", + "close": "Затвори диалога", + "liveStreaming": "Излъчване на живо", + "sharingTabs": "Опции за споделяне" }, "add": "Добави", + "addMeetingNote": "Добави бележка за тази среща", + "addOptionalNote": "Добави бележка (не е задължително):", "allow": "Разреши", + "allowToggleCameraDialog": "Разрешавате ли на {{initiatorName}} да превключи режима на вашата камера?", + "allowToggleCameraTitle": "Разреши превключване на камерата?", "alreadySharedVideoMsg": "Друг участник вече е споделил видео. Тази среща позволява само едно споделено видео.", "alreadySharedVideoTitle": "Разрешено е споделянето само на едно видео в даден момент", "applicationWindow": "Прозорец на програмата", + "authenticationRequired": "Изисква се идентификация", + "cameraCaptureDialog": { + "description": "Направи и изпрати снимка с мобилната си камера", + "ok": "Отвори камерата", + "reject": "Не сега", + "title": "Направи снимка" + }, "cameraConstraintFailedError": "Камерата Ви не покрива някои от изискванията.", "cameraNotFoundError": "Не е открита камера.", "cameraNotSendingData": "Камерата е недостъпна. Моля, проверете дали друго приложение не използва това устройство, изберете друго устройство от менюто с настройките, или презаредете приложението.", "cameraNotSendingDataTitle": "Камерата е недостъпна", "cameraPermissionDeniedError": "Не сте дали разрешение за използване на камерата. Ще можете да се присъедините в срещата, но другите няма да Ви виждат. Използвайте бутона с камерата в адресната лента, за да оправите това.", + "cameraTimeoutError": "Не можа да стартира видео източника. Операцията не завърши в определеното време!", "cameraUnknownError": "Невъзможен достъп до камерата по неясна причина.", "cameraUnsupportedResolutionError": "Камерата Ви не поддържа нужната резолюция.", "close": "Затваряне", @@ -192,39 +321,55 @@ "conferenceReloadMsg": "Опитваме се да оправим нещата. Повторно свързване след {{seconds}} сек…", "conferenceReloadTitle": "За съжаление, нещо се обърка.", "confirm": "Потвърждение", + "confirmBack": "Назад", "confirmNo": "Не", "confirmYes": "Да", "connectError": "Опа! Нещо се обърка и не успяхме да се свържем с конференцията.", "connectErrorWithMsg": "Опа! Нещо се обърка и не успяхме да се свържем с конференцията: {{msg}}", "connecting": "Свързване", "contactSupport": "Връзка с отдела по поддръжка", + "copied": "Копирано", "copy": "Копиране", + "demoteParticipantDialog": "Сигурни ли сте, че искате да преместите този участник в режим на зрител?", + "demoteParticipantTitle": "Премести в режим на зрител", "dismiss": "Отхвърляне", "displayNameRequired": "Здравей! Как се казваш?", "done": "Готово", + "e2eeDescription": "Криптирането от край до край в момента е ЕКСПЕРИМЕНТАЛНО. Моля, имайте предвид, че включването на криптирането от край до край ще деактивира услугите, предоставени от сървъра, като: участие по телефон. Също така имайте предвид, че срещата ще работи само за хора, присъединяващи се от браузъри с поддръжка на insertable streams.", + "e2eeDisabledDueToMaxModeDescription": "Не може да се активира криптирането от край до край поради голям брой участници в конференцията.", + "e2eeLabel": "Включи криптирането от край до край", + "e2eeWarning": "ПРЕДУПРЕЖДЕНИЕ: Не всички участници в тази среща изглежда имат поддръжка за криптиране от край до край. Ако го включите, те няма да могат да ви виждат или чуват.", + "e2eeWillDisableDueToMaxModeDescription": "ПРЕДУПРЕЖДЕНИЕ: Криптирането от край до край автоматично ще бъде деактивирано ако повече участници се присъединят към конференцията.", + "embedMeeting": "Вграждане на среща", "enterDisplayName": "Моля, въведете Вашето име", "error": "Грешка", - "externalInstallationMsg": "Трябва да инсталирате разширението за споделяне на екрана.", - "externalInstallationTitle": "Нужно е разширение", - "goToStore": "Към магазина в Интернет", + "errorRoomCreationRestriction": "Опитахте се да се присъедините твърде бързо, моля върнете се след малко.", "gracefulShutdown": "Услугата временно не е достъпна поради профилактика. Моля, опитайте по-късно.", + "grantModeratorDialog": "Сигурни ли сте, че искате да дадете права на модератор на {{participantName}}?", + "grantModeratorTitle": "Даване на права на модератор", + "hide": "Скрий", + "hideShareAudioHelper": "Не показвай повече този диалог", "incorrectPassword": "Неправилно потребителско име или парола", "incorrectRoomLockPassword": "Грешна парола", - "inlineInstallExtension": "Инсталиране сега", - "inlineInstallationMsg": "Трябва да инсталирате разширението за споделяне на екрана.", "internalError": "Опа! Нещо се обърка. Възникна следната грешка: {{error}}", "internalErrorTitle": "Вътрешна грешка", "kickMessage": "Може да се свържете с {{participantDisplayName}} за повече подробности.", "kickParticipantButton": "Изгони", "kickParticipantDialog": "Сигурни ли сте, че искате да изгоните участника?", "kickParticipantTitle": "Изгонване на този участник?", + "kickSystemTitle": "Ауч! Бяхте изгонени от срещата", "kickTitle": "Ауч! {{participantDisplayName}} Ви изгони от тази среща", + "learnMore": "научи повече", + "linkMeeting": "Свързване на среща", + "linkMeetingTitle": "Свързване на среща със Salesforce", "liveStreaming": "Излъчване на живо", - "liveStreamingDisabledForGuestTooltip": "Гостите не могат да стартират излъчване на живо.", - "liveStreamingDisabledTooltip": "Излъчването на живо е деактивирано.", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Невъзможно докато е активен запис", + "localUserControls": "Контроли на локален потребител", "lockMessage": "Неуспешно заключване на конференцията.", "lockRoom": "Добавяне $t(lockRoomPasswordUppercase) за срещата", "lockTitle": "Неуспешно заключване", + "login": "Вход", + "loginQuestion": "Сигурни ли сте, че искате да влезете в системата и да напуснете конференцията?", "logoutQuestion": "Сигурни ли сте, че искате да излезете и да прекъснете конференцията?", "logoutTitle": "Изход", "maxUsersLimitReached": "Лимитът за максимален брой участници бе достигнат. Капацитетът на срещата е запълнен. Моля, свържете се с организатора или опитайте по-късно!", @@ -234,26 +379,60 @@ "micNotSendingData": "Пуснете микрофона си от системните настройки на компютъра", "micNotSendingDataTitle": "Микрофонът Ви е спрян от системните настройки", "micPermissionDeniedError": "Не сте дали разрешение за използване на микрофона. Ще можете да се присъедините в срещата, но другите няма да Ви чуват. Използвайте бутона с микрофон в адресната лента, за да оправите това.", + "micTimeoutError": "Не можа да стартира аудио източника. Изтече времето!", "micUnknownError": "Невъзможен достъп до микрофона по неясна причина.", + "moderationAudioLabel": "Позволи на не-модераторите да включват микрофоните си", + "moderationDesktopLabel": "Позволи на не-модераторите да споделят екрана си", + "moderationVideoLabel": "Позволи на не-модераторите да стартират видеото си", "muteEveryoneDialog": "Сигурни ли сте, че искате да заглушите всички? Няма да можете да пуснете звука им отново, но участниците ще могат да направят това сами.", + "muteEveryoneDialogModerationOn": "Участниците могат да изпратят заявка за говорене по всяко време.", "muteEveryoneElseDialog": "След като заглушите някого, няма да можете да пуснете обратно звука му, но участникът ще може да направи това сам.", "muteEveryoneElseTitle": "Заглушете всички, освен {{whom}}?", + "muteEveryoneElsesDesktopDialog": "След като спрете споделянето, няма да можете да го рестартирате, но те могат да го направят по всяко време.", + "muteEveryoneElsesDesktopTitle": "Спри споделянето на екран на всички освен {{whom}}?", + "muteEveryoneElsesVideoDialog": "След като камерата се деактивира, няма да можете да я включите отново, но те могат да я включат по всяко време.", + "muteEveryoneElsesVideoTitle": "Спри видеото на всички освен {{whom}}?", "muteEveryoneSelf": "себе си", "muteEveryoneStartMuted": "Всички да влизат без звук", "muteEveryoneTitle": "Заглуши всички?", + "muteEveryonesDesktopDialog": "Участниците могат да споделят екрана си по всяко време.", + "muteEveryonesDesktopDialogModerationOn": "Участниците могат да изпратят заявка за споделяне на екран по всяко време.", + "muteEveryonesDesktopTitle": "Спри споделянето на екран на всички?", + "muteEveryonesVideoDialog": "Участниците могат да включат видеото си по всяко време.", + "muteEveryonesVideoDialogModerationOn": "Участниците могат да изпратят заявка за включване на видео по всяко време.", + "muteEveryonesVideoDialogOk": "Деактивирай", + "muteEveryonesVideoTitle": "Спри видеото на всички?", "muteParticipantBody": "Вие няма да можете да спрете заглушаването на участника, но той ще може да го направи по всяко време.", "muteParticipantButton": "Изключи микрофона", - "muteParticipantDialog": "Сигурни ли сте, че искате да заглушите този участник? Няма да можете да пуснете обратно звука му, но участникът ще може да направи това сам.", - "muteParticipantTitle": "Спиране звука на участник?", + "muteParticipantsDesktopBody": "Няма да можете да стартирате споделянето на техния екран, но те могат да го направят по всяко време.", + "muteParticipantsDesktopBodyModerationOn": "Няма да можете да стартирате споделянето на техния екран и нито те няма да могат.", + "muteParticipantsDesktopButton": "Спри споделянето на екран", + "muteParticipantsDesktopDialog": "Сигурни ли сте, че искате да изключите споделянето на екран на този участник? Няма да можете да го рестартирате, но той може да го направи по всяко време.", + "muteParticipantsDesktopDialogModerationOn": "Сигурни ли сте, че искате да изключите споделянето на екран на този участник? Няма да можете да включите екрана отново и нито той няма да може.", + "muteParticipantsDesktopTitle": "Деактивирай споделянето на екран на този участник?", + "muteParticipantsVideoBody": "Няма да можете да включите камерата отново, но те могат да я включат по всяко време.", + "muteParticipantsVideoBodyModerationOn": "Нито Вие, нито участниците ще можете да включите камерите си отново.", + "muteParticipantsVideoButton": "Спри видеото", + "muteParticipantsVideoDialog": "Сигурни ли сте, че искате да изключите камерата на този участник? Няма да можете да я включите отново, но той може да я включи по всяко време.", + "muteParticipantsVideoDialogModerationOn": "Сигурни ли сте, че искате да изключите камерата на този участник? Нито Вие, нито участника ще можете да я включите отново", + "muteParticipantsVideoTitle": "Деактивирай камерата на този участник?", + "noDropboxToken": "Няма валиден Dropbox токен", + "password": "Парола", "passwordLabel": "Тази среща е заключена. Моля, въведете $t(lockRoomPassword), за да влезете.", "passwordNotSupported": "Задаването на $t(lockRoomPassword) за срещата не се поддържа.", "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) не се поддържа", "passwordRequired": "Изисква се $t(lockRoomPassword)", - "popupError": "Браузърът Ви блокира изскачащите прозорци от този уеб сайт. Моля, разрешете изскачащите прозорци от настройките за сигурност на браузъра си и след това опитайте отново.", - "popupErrorTitle": "Блокиран изскачащ прозорец", + "permissionCameraRequiredError": "Разрешението за камера е необходимо за участие в конференции с видео. Моля, дайте го в Настройките", + "permissionErrorTitle": "Необходимо е разрешение", + "permissionMicRequiredError": "Разрешението за микрофон е необходимо за участие в конференции с аудио. Моля, дайте го в Настройките", + "readMore": "още", + "recentlyUsedObjects": "Вашите наскоро използвани обекти", "recording": "Запис", - "recordingDisabledForGuestTooltip": "Гостите не могат да стартират запис.", - "recordingDisabledTooltip": "Стартирането на запис е спряно.", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Невъзможно докато е активно излъчване на живо", + "recordingInProgressDescription": "Тази среща се записва и анализира от AI{{learnMore}}. Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.", + "recordingInProgressDescriptionFirstHalf": "Тази среща се записва и анализира от AI", + "recordingInProgressDescriptionSecondHalf": ". Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.", + "recordingInProgressTitle": "В момента се записва", "rejoinNow": "Повторно присъединяване сега", "remoteControlAllowedMessage": "{{user}} прие заявката Ви за отдалечено управление!", "remoteControlDeniedMessage": "{{user}} отказа заявката Ви за отдалечено управление!", @@ -262,29 +441,56 @@ "remoteControlShareScreenWarning": "Ако натиснете „Разрешаване“, ще споделите екрана си!", "remoteControlStopMessage": "Сесията за отдалечено управление приключи!", "remoteControlTitle": "Отдалечено управление на компютъра", + "remoteUserControls": "Отдалечени потребителски контроли на {{username}}", "removePassword": "Премахване на $t(lockRoomPassword)", "removeSharedVideoMsg": "Наистина ли искате да премахнете споделеното си видео?", "removeSharedVideoTitle": "Край на споделянето на видео", + "renameBreakoutRoomLabel": "Име на стаята", + "renameBreakoutRoomTitle": "Преименувай работна стая", "reservationError": "Грешка в системата за резервации", "reservationErrorMsg": "Грешка номер: {{code}}, съобщение: {{msg}}", "retry": "Повторен опит", "screenSharingAudio": "Сподели и звука", - "screenSharingFailedToInstall": "Опа! Разширението за споделяне на екрана не успя да се инсталира.", - "screenSharingFailedToInstallTitle": "Разширението за споделяне на екрана не успя да се инсталира", - "screenSharingFirefoxPermissionDeniedError": "Нещо се обърка докато се опитвахме да споделим екрана. Моля, уверете се, че сте дали права за това. ", - "screenSharingFirefoxPermissionDeniedTitle": "Упс! Не успяхме да стартираме споделянето на екрана!", + "screenSharingFailed": "Опа! Нещо се обърка, не успяхме да стартираме споделянето на екран!", + "screenSharingFailedTitle": "Споделянето на екран се провали!", "screenSharingPermissionDeniedError": "Опа! Нещо се обърка с разрешенията на разширението за споделяне на екрана. Моля, презаредете и опитайте отново.", + "searchInSalesforce": "Търси в Salesforce", + "searchResults": "Резултати от търсенето ({{count}})", + "searchResultsDetailsError": "Нещо се обърка при извличането на данни за собственика.", + "searchResultsError": "Нещо се обърка при извличането на данни.", + "searchResultsNotFound": "Не са намерени резултати от търсенето.", + "searchResultsTryAgain": "Опитайте с алтернативни ключови думи.", "sendPrivateMessage": "Наскоро получихте лично съобщение. Искате да отговорите на това съобшение или да изпратите до всички?", "sendPrivateMessageCancel": "Изпрати до всички", "sendPrivateMessageOk": "Изпрати лично", "sendPrivateMessageTitle": "Да се изпрати лично?", "serviceUnavailable": "Услугата не е налична", "sessTerminated": "Разговорът приключи", + "sessTerminatedReason": "Срещата беше прекратена", + "sessionRestarted": "Повикването беше рестартирано поради проблем с връзката.", + "shareAudio": "Продължи", + "shareAudioAltText": "за да споделите желаното съдържание, навигирайте до \"Browser Tab\", изберете съдържанието, активирайте отметката \"споделяне на аудио\" и след това кликнете върху бутона \"споделяне\"", + "shareAudioTitle": "Как да споделите аудио", + "shareAudioWarningD1": "трябва да спрете споделянето на екран преди да споделите аудиото си.", + "shareAudioWarningD2": "трябва да рестартирате споделянето на екран и да отметнете опцията \"споделяне на аудио\".", + "shareAudioWarningH1": "Ако искате да споделите само аудио:", + "shareAudioWarningTitle": "Трябва да спрете споделянето на екран преди да споделите аудио", + "shareMediaWarningGenericH2": "Ако искате да споделите екрана и аудиото си", + "shareScreenWarningD1": "трябва да спрете споделянето на аудио преди да споделите екрана си.", + "shareScreenWarningD2": "трябва да спрете споделянето на аудио, да стартирате споделяне на екран и да отметнете опцията \"споделяне на аудио\".", + "shareScreenWarningH1": "Ако искате да споделите само екрана си:", + "shareScreenWarningTitle": "Трябва да спрете споделянето на аудио преди да споделите екрана си", + "shareVideoConfirmPlay": "На път сте да отворите външен уебсайт. Искате ли да продължите?", + "shareVideoConfirmPlayTitle": "{{name}} сподели видео с вас.", "shareVideoLinkError": "Моля, въведете правилна връзка.", + "shareVideoLinkStopped": "Видеото от {{name}} беше спряно.", "shareVideoTitle": "Сподели видео", "shareYourScreen": "Споделяне на екрана", "shareYourScreenDisabled": "Споделянето на екрана не се поддържа.", - "shareYourScreenDisabledForGuest": "Гостите не могат да споделят екрана.", + "sharedVideoDialogError": "Грешка: Невалиден или забранен URL", + "sharedVideoLinkPlaceholder": "YouTube връзка или директна видео връзка", + "show": "Покажи", + "start": "Започни ", "startLiveStreaming": "Започване на излъчване на живо", "startRecording": "Стартиране на запис", "startRemoteControlErrorMessage": "Възникна грешка при опита за започване на сесията за отдалечено управление!", @@ -296,27 +502,91 @@ "thankYou": "Благодарим, че използвахте {{appName}}!", "token": "код за достъп", "tokenAuthFailed": "Съжаляваме, но не можете да се присъедините към този разговор.", + "tokenAuthFailedReason": { + "audInvalid": "Невалидна стойност на `aud`. Трябва да бъде `jitsi`.", + "contextNotFound": "Обектът `context` липсва.", + "expInvalid": "Невалидна стойност на `exp`.", + "featureInvalid": "Невалидна функция: {{feature}}, най-вероятно все още не е внедрена.", + "featureValueInvalid": "Невалидна стойност за функция: {{feature}}.", + "featuresNotFound": "Обектът `features` липсва.", + "headerNotFound": "Липсва заглавката.", + "issInvalid": "Невалидна стойност на `iss`. Трябва да бъде `chat`.", + "kidMismatch": "Key ID (kid) не съвпада с sub.", + "kidNotFound": "Липсва Key ID (kid).", + "nbfFuture": "Стойността `nbf` е в бъдещето.", + "nbfInvalid": "Невалидна стойност на `nbf`.", + "payloadNotFound": "Липсва съдържание.", + "tokenExpired": "Токенът е изтекъл." + }, "tokenAuthFailedTitle": "Неуспешна идентификация", + "tokenAuthFailedWithReasons": "Съжаляваме, не ви е разрешено да се присъедините към това повикване. Възможни причини: {{reason}}", + "tokenAuthUnsupported": "Token URL не се поддържа.", "transcribing": "Транскрипция", "unlockRoom": "Премахване $t(lockRoomPassword) от срещата", + "user": "Потребител", + "userIdentifier": "Идентификатор на потребител", "userPassword": "потребителска парола", + "verifyParticipantConfirm": "Съвпадат", + "verifyParticipantDismiss": "Не съвпадат", + "verifyParticipantQuestion": "ЕКСПЕРИМЕНТАЛНО: Попитайте участника {{participantName}} дали виждат същото съдържание в същия ред.", + "verifyParticipantTitle": "Верификация на потребител", "videoLink": "Линк към видео", + "viewUpgradeOptions": "Виж опциите за надстройване", + "viewUpgradeOptionsContent": "За да получите неограничен достъп до премиум функции като запис, транскрипции, RTMP Streaming и други, ще трябва да надстроите плана си.", + "viewUpgradeOptionsTitle": "Открихте премиум функция!", + "whiteboardLimitContent": "Съжалявам, лимитът на едновременни потребители на бялата дъска е достигнат.", + "whiteboardLimitReference": "За повече информация, моля посетете", + "whiteboardLimitReferenceUrl": "нашия уебсайт", + "whiteboardLimitTitle": "Използването на бялата дъска е ограничено", "yourEntireScreen": "Целият екран" }, "documentSharing": { "title": "Споделен документ" }, + "e2ee": { + "labelToolTip": "Аудио и видео комуникацията в този разговор е криптирана от край до край" + }, + "embedMeeting": { + "title": "Вградете тази среща" + }, "feedback": { + "accessibilityLabel": { + "yourChoice": "Вашият избор: {{rating}}" + }, "average": "Средно", "bad": "Лошо", "detailsLabel": "Разкажете ни повече.", "good": "Добро", "rateExperience": "Моля, оценете качеството на срещата", + "star": "Звезда", "veryBad": "Много лошо", "veryGood": "Много добро" }, - "helpView": { - "title": "Място за помощ" + "fileSharing": { + "downloadFailedDescription": "Моля, опитайте отново.", + "downloadFailedTitle": "Изтеглянето е неуспешно", + "downloadFile": "Изтегли", + "downloadStarted": "Изтеглянето на файла започна", + "dragAndDrop": "Пуснете файлове тук или където и да е на екрана", + "fileAlreadyUploaded": "Файлът вече е качен в тази среща.", + "fileTooLargeDescription": "Моля, уверете се, че файлът не превишава {{ maxFileSize }}.", + "fileTooLargeTitle": "Избраният файл е твърде голям", + "fileUploadProgress": "Процес на качване на файл", + "fileUploadedSuccessfully": "Файлът е качен успешно", + "removeFile": "Премахни", + "removeFileSuccess": "Файлът е премахнат успешно", + "uploadFailedDescription": "Моля, опитайте отново.", + "uploadFailedTitle": "Качването е неуспешно", + "uploadFile": "Сподели файл" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Видео миниатюри" + } + }, + "giphy": { + "noResults": "Не са намерени резултати :(", + "search": "Търси в GIPHY" }, "incomingCall": { "answer": "Вдигни", @@ -330,6 +600,7 @@ "addPassword": "Добави $t(lockRoomPassword)", "cancelPassword": "Премахни $t(lockRoomPassword)", "conferenceURL": "Връзка:", + "copyNumber": "Копирай номера", "country": "Страна", "dialANumber": "За влизане в срещата, наберете един от изброените номера и въведете кода.", "dialInConferenceID": "Код:", @@ -341,6 +612,11 @@ "inviteLiveStream": "За да видите предаването на живо на срещата, използвйте тази връзка: {{url}}", "invitePhone": "За влизане през телефон, използвайте: {{number}},,{{conferenceID}}#\n", "invitePhoneAlternatives": "Вижте още номера: {{url}}\n\n\nАко вече сте набрали от телефон в стаята, влезте без да е пуснат звукът: {{silentUrl}}", + "inviteSipEndpoint": "За влизане чрез SIP адрес, въведете: {{sipUri}}", + "inviteTextiOSInviteUrl": "Натиснете следният линк за да се включите: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "Ако влизате чрез телефон в стаята, използвайте този линк за влизане без аудио: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}} ви кани на среща.", + "inviteTextiOSPhone": "За влизане чрез телефон, използвайте: {{number}},,{{conferenceID}}#. Ако търсите друг номер, ето пълния списък: {{didUrl}}.", "inviteURLFirstPartGeneral": "Поканени сте да се присъедините към среща.", "inviteURLFirstPartPersonal": "{{name}} ви кани за среща.\n", "inviteURLSecondPart": "\nВлезте в срещата:\n{{url}}\n", @@ -350,10 +626,16 @@ "noNumbers": "Няма номера за набиране.", "noPassword": "Няма", "noRoom": "Няма посочена стая за информация за номера за набиране.", + "noWhiteboard": "Не може да се зареди бялата дъска.", "numbers": "Номера", "password": "$t(lockRoomPasswordUppercase):", + "reachedLimit": "Достигнахте лимита на вашия план.", + "sip": "SIP адрес", + "sipAudioOnly": "SIP адрес само за аудио", "title": "Споделяне", - "tooltip": "Споделете връзката и информацията за номера свързани със срещата" + "tooltip": "Споделете връзката и информацията за номера свързани със срещата", + "upgradeOptions": "Моля, проверете опциите за надстройване на", + "whiteboardError": "Грешка при зареждане на бялата дъска. Моля, опитайте отново по-късно." }, "inlineDialogFailure": { "msg": "Имаше грешка.", @@ -369,22 +651,28 @@ "searchPlaceholder": "Участник или телефонен номер", "send": "Изпрати" }, + "jitsiHome": "{{logo}} Лого, води към началната страница", "keyboardShortcuts": { "focusLocal": "Фокусиране върху Вашето видео", "focusRemote": "Фокусирай видеото на друг участник", "fullScreen": "Влизане/излизане от режим на цял екран", + "giphyMenu": "Превключване на GIPHY менюто", "keyboardShortcuts": "Клавишни комбинации", "localRecording": "Показване или скриване на контролите за локален запис", "mute": "Спиране/пускане на микрофона", "pushToTalk": "Натиснете, за да говорите", "raiseHand": "Вдигнете или свалете ръка", "showSpeakerStats": "Показване на статистика за говорителя", - "toggleChat": "Отваряне/скриване на текстовите съобщения", + "toggleChat": "Отваряне/скриване на чата", "toggleFilmstrip": "Показване или скриване на видео миниатюрите", + "toggleParticipantsPane": "Показване или скриване на панела с участници", "toggleScreensharing": "Смяна между камера и споделен екран", "toggleShortcuts": "Показване или скриване на клавишните комбинации", - "videoMute": "Пускане/спиране на камерата", - "videoQuality": "Управление на качество на обаждането" + "videoMute": "Пускане/спиране на камерата" + }, + "largeVideo": { + "screenIsShared": "Споделяте екрана си", + "showMeWhatImSharing": "Покажи ми какво споделям" }, "liveStreaming": { "busy": "Работим върху това да освободим ресурси за излъчване. Моля, опитайте отново след няколко минути.", @@ -398,17 +686,22 @@ "errorLiveStreamNotEnabled": "Предаването на живо не е пуснато за {{email}}. Моля, активирайте го или сменете акаунта.", "expandedOff": "Предаването на живо бе спряно", "expandedOn": "Срещата се излъчва на живо в YouTube.", - "expandedPending": "Излъчването на живо се стартира...", + "expandedPending": "Излъчването на живо се стартира…", "failedToStart": "Излъчването на живо не успя да започне", "getStreamKeyManually": "Не успяхме да открием никакво предаване на живо. Опитайте да вземете ключа за такова от YouTube.", "googlePrivacyPolicy": "Политика за поверителност на Google", + "inProgress": "В ход е запис или излъчване на живо", "invalidStreamKey": "Ключът за предаване на живо е грешен.", + "limitNotificationDescriptionNative": "Излъчването ви ще бъде ограничено до {{limit}} мин. За неограничено излъчване опитайте {{app}}.", + "limitNotificationDescriptionWeb": "Поради голямото търсене, излъчването ви ще бъде ограничено до {{limit}} мин. За неограничено излъчване опитайте {{app}}.", "off": "Край на излъчването на живо", "offBy": "{{name}} спря излъчването на живо", "on": "Излъчване на живо", "onBy": "{{name}} пусна излъчване на живо", "pending": "Започване на излъчването на живо…", + "policyError": "Опитахте се да стартирате излъчване на живо твърде бързо. Моля, опитайте отново по-късно!", "serviceName": "Предаване на живо", + "sessionAlreadyActive": "Тази сесия вече се записва или излъчва на живо.", "signIn": "Влезте с Гугъл", "signInCTA": "Влезте или въведете ключа за излъчване на живо от YouTube.", "signOut": "Излизане", @@ -421,6 +714,7 @@ }, "lobby": { "backToKnockModeButton": "Заявка за включване без парола", + "chat": "Чат", "dialogTitle": "Режим лоби", "disableDialogContent": "Режим Лоби е включен. Този решим защитава срещите Ви от случайни посетители. Искате ли да го изключите?", "disableDialogSubmit": "Изключи", @@ -430,26 +724,31 @@ "enableDialogText": "Режимът Лоби защитава срещите Ви от случайни посетители, чрез изрично одобрение на участниците от модератор.", "enterPasswordButton": "Въведи парола за срещата", "enterPasswordTitle": "Въведи парола за влезеш в срещата", + "errorMissingPassword": "Моля, въведете паролата за срещата", "invalidPassword": "Невалидна парола", "joinRejectedMessage": "Вашето желание за включване беше отхвърлено от модератор.", + "joinRejectedTitle": "Заявката за присъединяване беше отхвърлена.", "joinTitle": "Включи се в срещата", - "joinWithPasswordMessage": "Опит за включване с парола, моля изчакайте...", + "joinWithPasswordMessage": "Опит за включване с парола, моля изчакайте…", "joiningMessage": "Ще влезете в срещата, когато някой ви приеме", - "joiningTitle": "Изчаква одобрение...", - "joiningWithPasswordTitle": "Включване с парола...", + "joiningTitle": "Изчаква одобрение…", + "joiningWithPasswordTitle": "Включване с парола…", "knockButton": "Поискай достъп", "knockTitle": "Някой желае да се включи в срещата", "knockingParticipantList": "Списък с чакащи участници", + "lobbyChatStartedNotification": "{{moderator}} започна чат в лобито с {{attendee}}", + "lobbyChatStartedTitle": "{{moderator}} започна чат в лобито с вас.", + "lobbyClosed": "Лобито беше затворено.", "nameField": "Въведи име", "notificationLobbyAccessDenied": "{{targetParticipantName}} не беше допуснат от {{originParticipantName}}", "notificationLobbyAccessGranted": "{{targetParticipantName}} беше допуснат от {{originParticipantName}}", "notificationLobbyDisabled": "Лобито беше изключено от {{originParticipantName}}", "notificationLobbyEnabled": "Лобито беше включено от {{originParticipantName}}", "notificationTitle": "Лоби", - "passwordField": "Въведи парола за срещата", "passwordJoinButton": "Влез", "title": "Лоби", - "toggleLabel": "Включи лоби" + "toggleLabel": "Включи лоби", + "waitForModerator": "Срещата все още не е започнала, защото няма пристигнали модератори. Ако искате да станете модератор, моля влезте в системата. В противен случай, моля изчакайте." }, "localRecording": { "clientState": { @@ -475,9 +774,12 @@ "no": "Не", "participant": "Участник", "participantStats": "Статистика на участник", + "selectTabTitle": "🎥 Моля, изберете този таб за запис", "sessionToken": "Тоукън за сесията", "start": "Започни запис", "stop": "Спри записа", + "stopping": "Спиране на записа", + "wait": "Моля изчакайте, докато запазим вашия запис", "yes": "Да" }, "lockRoomPassword": "парола", @@ -488,18 +790,66 @@ }, "me": "аз", "notify": { + "OldElectronAPPTitle": "Уязвимост в сигурността!", + "allowAll": "Разреши всичко", + "allowAudio": "Разреши звук", + "allowDesktop": "Разреши споделяне на екран", + "allowVideo": "Разреши видео", + "allowedUnmute": "Можете да включите микрофона си, да стартирате камерата си или да споделите екрана си.", + "audioUnmuteBlockedDescription": "Операцията за включване на микрофона е временно блокирана поради системни ограничения.", + "audioUnmuteBlockedTitle": "Включването на микрофона е блокирано!", + "chatMessages": "Съобщения от чата", "connectedOneMember": "{{name}} влезе в срещата", "connectedThreePlusMembers": "{{name}} и още {{count}} влязоха в срещата", "connectedTwoMembers": "{{first}} и {{second}} влязоха в срещата", + "connectionFailed": "Връзката се провали. Моля, опитайте отново по-късно!", + "dataChannelClosed": "Качеството на видеото може да бъде нарушено", + "dataChannelClosedDescription": "Каналът на видео-моста е недостъпен и затова качеството на видеото може да бъде ограничено до най-ниската настройка.", + "dataChannelClosedDescriptionWithAudio": "Каналът на видео-моста е недостъпен и затова могат да възникнат прекъсвания в аудиото и видеото.", + "dataChannelClosedWithAudio": "Качеството на аудиото и видеото може да бъде нарушено", + "desktopMutedRemotelyTitle": "Споделянето на екрана ви беше спряно от {{participantDisplayName}}", + "disabledIframe": "Вграждането е предназначено само за демонстрационни цели, така че този разговор ще се прекрати след {{timeout}} минути.", + "disabledIframeSecondaryNative": "Вграждането на {{domain}} е предназначено само за демонстрационни цели, затова този разговор ще се прекрати след {{timeout}} минути.", + "disabledIframeSecondaryWeb": "Вграждането на {{domain}} е предназначено само за демонстрационни цели, затова този разговор ще се прекрати след {{timeout}} минути. Моля, използвайте Jitsi as a Service за комерсиално вграждане!", "disconnected": "Напусна срещата", + "displayNotifications": "Показване на уведомления за", + "dontRemindMe": "Не ме напомняй", "focus": "Фокус на срещата", "focusFail": "{{component}} не е на раположение - следващ опит след {{ms}} секунди", - "grantedTo": "Даване на роля модератор на {{to}}!", + "gifsMenu": "GIPHY", + "groupTitle": "Уведомления", + "hostAskedUnmute": "Модераторът би искал да участвате.", + "invalidTenant": "Невалиден tenant", + "invalidTenantHyphenDescription": "Tenant-ът, който използвате е невалиден (започва или завършва с '-').", + "invalidTenantLengthDescription": "Tenant-ът, който използвате е твърде дълъг.", "invitedOneMember": "{{name}} бе поканен", "invitedThreePlusMembers": "{{name}} и още {{count}} бяха поканени", "invitedTwoMembers": "{{first}} и {{second}} бяха поканени", + "joinMeeting": "Присъединете се", "kickParticipant": "{{kicked}} беше изгонен от {{kicker}}", + "leftOneMember": "{{name}} напусна срещата", + "leftThreePlusMembers": "{{name}} и много други напуснаха срещата", + "leftTwoMembers": "{{first}} и {{second}} напуснаха срещата", + "linkToSalesforce": "Свърже със Salesforce", + "linkToSalesforceDescription": "Можете да свържете резюмето от срещата с Salesforce обект.", + "linkToSalesforceError": "Не успя да се свърже срещата със Salesforce", + "linkToSalesforceKey": "Свърже тази среща", + "linkToSalesforceProgress": "Свързване на срещата със Salesforce…", + "linkToSalesforceSuccess": "Срещата беше свързана със Salesforce", + "localRecordingStarted": "{{name}} стартира локален запис.", + "localRecordingStopped": "{{name}} спря локален запис.", "me": "Аз", + "moderationInEffectCSDescription": "Моля, вдигнете ръка ако искате да споделите екрана си.", + "moderationInEffectCSTitle": "Споделянето на екран е блокирано от модератора", + "moderationInEffectDescription": "Моля, вдигнете ръка ако искате да говорите.", + "moderationInEffectTitle": "Микрофонът ви е заглушен от модератора", + "moderationInEffectVideoDescription": "Моля, вдигнете ръка ако искате да стартирате камерата си.", + "moderationInEffectVideoTitle": "Камерата ви е блокирана от модератора", + "moderationRequestFromModerator": "Домакинът би искал да включите микрофона си", + "moderationRequestFromParticipant": "Иска да говори", + "moderationStartedTitle": "Модерацията започна", + "moderationStoppedTitle": "Модерацията спря", + "moderationToggleDescription": "от {{participantDisplayName}}", "moderator": "Придобихте права на модератор!", "muted": "Започвате разговора без звук.", "mutedRemotelyDescription": "Винаги можете да пуснете микрофона си, когато сте готови да говорите. Заглушете го отново, за да не изпращате шум в срещата.", @@ -508,90 +858,315 @@ "newDeviceAction": "Използвай", "newDeviceAudioTitle": "Засечено е ново аудио устройство", "newDeviceCameraTitle": "Засечена е нова камера", + "nextToSpeak": "Вие сте следващият на ред за говорене", + "noiseSuppressionDesktopAudioDescription": "Допълнителното заглушаване на шум не може да бъде включено докато споделяте аудио от настолния компютър, моля изключете го и опитайте отново.", + "noiseSuppressionFailedTitle": "Неуспешно стартиране на допълнителното заглушаване на шум", + "noiseSuppressionStereoDescription": "Допълнителното заглушаване на шум в момента не се поддържа със стерео аудио.", + "oldElectronClientDescription1": "Изглежда използвате стара версия на Jitsi Meet клиента, която има известни уязвимости в сигурността. Моля, уверете се, че актуализирате до нашата ", + "oldElectronClientDescription2": "най-нова версия", + "oldElectronClientDescription3": " сега!", + "openChat": "Отвори съобщенията", + "participantWantsToJoin": "Иска да се присъедини към срещата", + "participantsWantToJoin": "Искат да се присъединят към срещата", "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) е премахната от друг потребител", "passwordSetRemotely": "$t(lockRoomPasswordUppercase) създадена от друг потребител", + "raiseHandAction": "Вдигни ръка", "raisedHand": "{{name}} иска думата.", + "raisedHands": "{{participantName}} и още {{raisedHands}} души", + "reactionSounds": "Изключи звуците", + "reactionSoundsForAll": "Изключи звуците за всички", + "screenShareNoAudio": "Полето за споделяне на аудио не беше отметнато в прозореца за избор.", + "screenShareNoAudioTitle": "Не успя да сподели системното аудио!", + "screenSharingAudioOnlyDescription": "Моля, имайте предвид, че споделяйки екрана си засягате режима \"Най-добра производителност\" и ще използвате повече трафик.", + "screenSharingAudioOnlyTitle": "Режим \"Най-добра производителност\"", + "selfViewTitle": "Винаги можете да покажете собствения си изглед от настройките", "somebody": "Някой", "startSilentDescription": "Влезте повторно, за да пуснете звука", "startSilentTitle": "Влязохте с опция да не чувате аудио!", "suboptimalBrowserWarning": "Опасяваме се, че няма да можете да се насладите на срещата. Работим по въпроса, междувременно използвайте някой от напълно поддържаните браузъри.", "suboptimalExperienceTitle": "Внимание", - "unmute": "Пускане на микрофона" + "suggestRecordingAction": "Започни", + "suggestRecordingDescription": "Бихте ли искали да стартирате запис?", + "suggestRecordingTitle": "Запишете тази среща", + "unmute": "Пускане на микрофона", + "unmuteScreen": "Започни споделяне на екран", + "unmuteVideo": "Включи видеото", + "videoMutedRemotelyDescription": "Винаги можете да го включите отново.", + "videoMutedRemotelyTitle": "Видеото ви беше изключено от {{participantDisplayName}}", + "videoUnmuteBlockedDescription": "Операцията за включване на камера и споделяне на работен плот е временно блокирана поради системни ограничения.", + "videoUnmuteBlockedTitle": "Включването на камера и споделянето на работен плот е блокирано!", + "viewLobby": "Виж лобито", + "viewParticipants": "Виж участниците", + "viewVisitors": "Виж зрителите", + "waitingParticipants": "{{waitingParticipants}} души", + "waitingVisitors": "Зрители, чакащи на опашката: {{waitingVisitors}}", + "waitingVisitorsTitle": "Срещата все още не е на живо!", + "whiteboardLimitDescription": "Моля, запазете прогреса си, тъй като лимитът на потребители скоро ще бъде достигнат и бялата дъска ще се затвори.", + "whiteboardLimitTitle": "Използване на бялата дъска" }, "participantsPane": { "actions": { "admit": "Допусни", + "admitAll": "Допусни всички", "allow": "Разреши", - "reject": "Откажи" - } + "allowDesktop": "Разреши споделяне на екран", + "allowVideo": "Разреши видео", + "askDesktop": "Помоли за споделяне на екран", + "askUnmute": "Помоли да включи микрофона", + "audioModeration": "Включват микрофоните си", + "blockEveryoneMicCamera": "Блокирай микрофона и камерата на всички", + "breakoutRooms": "Работни стаи", + "desktopModeration": "Започни споделяне на екран", + "goLive": "Започни на живо", + "invite": "Покани някого", + "lowerAllHands": "Свали всички ръце", + "lowerHand": "Свали ръката", + "moreModerationActions": "Още опции за модерация", + "moreModerationControls": "Още контроли за модерация", + "moreParticipantOptions": "Още опции за участника", + "mute": "Заглуши", + "muteAll": "Заглуши всички", + "muteEveryoneElse": "Заглуши всички останали", + "reject": "Откажи", + "stopDesktop": "Спри споделянето на екран", + "stopEveryonesDesktop": "Спри споделянето на екран за всички", + "stopEveryonesVideo": "Спри видеото на всички", + "stopVideo": "Спри видеото", + "unblockEveryoneMicCamera": "Разблокирай микрофона и камерата на всички", + "videoModeration": "Стартирай тяхното видео" + }, + "close": "Затвори", + "headings": { + "lobby": "Лоби ({{count}})", + "participantsList": "Участници в срещата ({{count}})", + "viewerRequests": "Заявки от зрители {{count}}", + "visitorInQueue": " (чакащи {{count}})", + "visitorRequests": " (заявки {{count}})", + "visitors": "Зрители {{count}}", + "visitorsList": "Зрители ({{count}})", + "waitingLobby": "Чакащи в лобито ({{count}})" + }, + "search": "Търсене на участници", + "searchDescription": "Започнете да пишете, за да филтрирате участниците", + "title": "Участници" }, "passwordDigitsOnly": "До {{number}} цифри", "passwordSetRemotely": "зададена от друг участник", + "pinParticipant": "{{participantName}} - Фокусирай", + "pinnedParticipant": "Участникът е на фокус", "polls": { + "answer": { + "edit": "Редактирай", + "send": "Изпрати", + "skip": "Пропусни", + "submit": "Подай" + }, + "by": "От {{ name }}", + "closeButton": "Затвори анкетата", + "create": { + "addOption": "Добави опция", + "answerPlaceholder": "Опция {{index}}", + "cancel": "Отказ", + "create": "Създай анкета", + "pollOption": "Опция за анкета {{index}}", + "pollQuestion": "Въпрос за анкета", + "questionPlaceholder": "Задай въпрос", + "removeOption": "Премахни опция", + "save": "Запази", + "send": "Изпрати" + }, "errors": { "notUniqueOption": "Опциите трябва да са уникални" + }, + "notification": { + "description": "Отвори таба за анкети за да гласуваш", + "title": "Нова анкета беше добавена в тази среща" + }, + "results": { + "changeVote": "Промени гласа", + "empty": "Все още няма анкети в срещата.", + "hideDetailedResults": "Скрий подробностите", + "showDetailedResults": "Покажи подробностите", + "vote": "Гласувай" } }, "poweredby": "с подкрепата на", + "prejoin": { + "audioAndVideoError": "Грешка в аудио и видео:", + "audioDeviceProblem": "Има проблем с вашето аудио устройство", + "audioOnlyError": "Грешка в аудиото:", + "audioTrackError": "Не можа да се създаде аудио запис.", + "callMe": "Позвънете ми", + "callMeAtNumber": "Позвънете ми на този номер:", + "calling": "Звъня", + "configuringDevices": "Конфигуриране на устройствата…", + "connectedWithAudioQ": "Свързани сте с аудио?", + "connection": { + "failed": "Тестът на връзката се провали!", + "good": "Интернет връзката ви изглежда добра!", + "nonOptimal": "Интернет връзката ви не е оптимална", + "poor": "Имате слаба интернет връзка", + "running": "Изпълнява се тест на връзката…" + }, + "connectionDetails": { + "audioClipping": "Очакваме аудиото ви да е накъсано.", + "audioHighQuality": "Очакваме аудиото ви да има отлично качество.", + "audioLowNoVideo": "Очакваме качеството на аудиото ви да бъде ниско и без видео.", + "goodQuality": "Страхотно! Качеството на медията ви ще бъде превъзходно.", + "noMediaConnectivity": "Не успяхме да намерим начин да установим медийна свързаност за този тест. Това обикновено се причинява от защитна стена или NAT.", + "noVideo": "Очакваме видеото ви да бъде ужасно.", + "testFailed": "Тестът на връзката срещна неочаквани проблеми, но това може да не повлияе на преживяването ви.", + "undetectable": "Ако все още не можете да правите разговори в браузъра, препоръчваме да се уверите, че говорителите, микрофонът и камерата ви са правилно настроени, че сте дали на браузъра си права да използва микрофона и камерата ви, и че версията на браузъра ви е актуална. Ако все още имате проблеми с обажданията, трябва да се свържете с разработчика на уеб приложението.", + "veryPoorConnection": "Очакваме качеството на разговора ви да бъде наистина ужасно.", + "videoFreezing": "Очакваме видеото ви да замръзва, да почернее и да бъде пикселирано.", + "videoHighQuality": "Очакваме видеото ви да има добро качество.", + "videoLowQuality": "Очакваме видеото ви да има ниско качество по отношение на кадрова честота и резолюция.", + "videoTearing": "Очакваме видеото ви да бъде пикселирано или да има визуални артефакти." + }, + "copyAndShare": "Копирай и сподели линк за срещата", + "dialInMeeting": "Обади се в срещата", + "dialInPin": "Обади се в срещата и въведи PIN кода:", + "dialing": "Набиране", + "doNotShow": "Не показвай този екран отново", + "errorDialOut": "Не можа да се обади", + "errorDialOutDisconnected": "Не можа да се обади. Прекъсната връзка", + "errorDialOutFailed": "Не можа да се обади. Неуспешно повикване", + "errorDialOutStatus": "Грешка при получаване на статус за обаждане", + "errorMissingName": "Моля, въведете името си, за да се присъедините към срещата", + "errorNoPermissions": "Трябва да разрешите достъп до микрофона и камерата", + "errorStatusCode": "Грешка при обаждане, статус код: {{status}}", + "errorValidation": "Проверката на номера се провали", + "iWantToDialIn": "Искам да се обадя", + "initiated": "Повикването е инициирано", + "joinAudioByPhone": "Присъедини се с телефонно аудио", + "joinMeeting": "Присъедини се към срещата", + "joinMeetingInLowBandwidthMode": "Присъедини се в режим с ниски скорости", + "joinWithoutAudio": "Присъедини се без аудио", + "keyboardShortcuts": "Включи клавиатурните комбинации", + "linkCopied": "Линкът е копиран в клипборда", + "lookGood": "Устройствата ви работят правилно", + "or": "или", + "premeeting": "Преди срещата", + "proceedAnyway": "Продължи въпреки това", + "recordingWarning": "Други участници може да записват този разговор", + "screenSharingError": "Грешка при споделяне на екран:", + "startWithPhone": "Започни с телефонно аудио", + "unsafeRoomConsent": "Разбирам рисковете, искам да се присъединя към срещата", + "videoOnlyError": "Грешка във видеото:", + "videoTrackError": "Не можа да се създаде видео запис.", + "viewAllNumbers": "виж всички номера" + }, "presenceStatus": { "busy": "Зает", - "calling": "Обаждане...", + "calling": "Обаждане…", "connected": "Свързан", - "connecting": "Свързване...", - "connecting2": "Свързване*...", + "connecting": "Свързване…", + "connecting2": "Свързване*…", "disconnected": "Изключен", "expired": "Изтекъл", "ignored": "Пренебрегнат", - "initializingCall": "Започване на обаждането...", + "initializingCall": "Започване на обаждането…", "invited": "Поканен", "rejected": "Отхвърлен", - "ringing": "Звъни..." + "ringing": "Звъни…" }, "profile": { + "avatar": "аватар", "setDisplayNameLabel": "Задайте екранното си име", "setEmailInput": "Въведете е-поща", "setEmailLabel": "Задайте е-пощата си в „Gravatar“", "title": "Профил" }, "raisedHand": "Иска думата", + "raisedHandsLabel": "Брой вдигнати ръце", + "record": { + "already": { + "linked": "Срещата вече е свързана с този Salesforce обект." + }, + "type": { + "account": "Акаунт", + "contact": "Контакт", + "lead": "Потенциален клиент", + "opportunity": "Възможност", + "owner": "Собственик" + } + }, "recording": { "authDropboxText": "Качете в Dropbox", "availableSpace": "Налично място: {{spaceLeft}} MB (приблизително {{duration}} минути запис)", "beta": "БЕТА", "busy": "Работим върху това да освободим ресурси за запис. Моля, опитайте отново след няколко минути.", "busyTitle": "Всички възможности за запис в момента са заети", + "copyLink": "Копирай линка", "error": "Грешка при опит за запис. Моля, опитайте отново.", + "errorFetchingLink": "Грешка при извличане на линка за запис.", "expandedOff": "Записът спря", "expandedOn": "Срещата се записва в момента.", - "expandedPending": "Записът започва...", + "expandedPending": "Записът започва…", "failedToStart": "Неуспешен опит за записване", "fileSharingdescription": "Споделете записа с участниците в срещата", - "live": "На Живо", + "highlight": "Отбележи", + "highlightMoment": "Отбележи момента", + "highlightMomentDisabled": "Можете да отбелязвате моменти когато записът започне", + "highlightMomentSuccess": "Моментът е отбелязан", + "highlightMomentSucessDescription": "Отбелязаният момент ще бъде добавен към резюмето на срещата.", + "inProgress": "В ход е запис или излъчване на живо", + "limitNotificationDescriptionNative": "Поради голямото търсене записът ви ще бъде ограничен до {{limit}} мин. За неограничени записи опитайте <3>{{app}}.", + "limitNotificationDescriptionWeb": "Поради голямото търсене записът ви ще бъде ограничен до {{limit}} мин. За неограничени записи опитайте {{app}}.", + "linkGenerated": "Генерирахме линк към вашия запис.", + "localRecordingNoNotificationWarning": "Записът няма да бъде обявен на другите участници. Ще трябва да ги уведомите, че срещата се записва.", + "localRecordingNoVideo": "Видеото не се записва", + "localRecordingStartWarning": "Моля, уверете се, че спирате записа преди да излезете от срещата, за да го запазите.", + "localRecordingStartWarningTitle": "Спрете записа, за да го запазите", + "localRecordingVideoStop": "Спирането на видеото ви също ще спре локалния запис. Сигурни ли сте, че искате да продължите?", + "localRecordingVideoWarning": "За да запишете видеото си, трябва да го имате включено при започване на записа", + "localRecordingWarning": "Уверете се, че сте избрали текущия таб, за да използвате правилното видео и аудио.", "loggedIn": "Влезли сте като {{userName}}", + "noMicPermission": "Аудио записът не можа да бъде създаден. Моля, дайте разрешение за използване на микрофона.", + "noStreams": "Не е засечен аудио или видео поток.", "off": "Записът е спрян", "offBy": "{{name}} спря записа", "on": "Запис", "onBy": "{{name}} пусна запис", - "pending": "Стартира запис на срещата...", - "rec": "ЗАПИС", + "onlyRecordSelf": "Записвай само моите аудио и видео потоци", + "pending": "Стартира запис на срещата…", + "policyError": "Опитахте се да започнете запис твърде бързо. Моля, опитайте отново по-късно!", + "recordAudioAndVideo": "Записвай аудио и видео", + "recordTranscription": "Записвай транскрипция", + "saveLocalRecording": "Запази записа локално (Бета)", "serviceDescription": "Записът Ви ще се запише от специална записваща услуга", + "serviceDescriptionCloud": "Облачен запис", + "serviceDescriptionCloudInfo": "Записаните срещи автоматично се изчистват 24 часа след времето на записа.", "serviceName": "Записваща услуга", + "sessionAlreadyActive": "Тази сесия вече се записва или излъчва на живо.", + "showAdvancedOptions": "Разширени опции", "signIn": "Влизане", "signOut": "Излизане", + "surfaceError": "Моля, изберете текущия таб.", "title": "Запис", "unavailable": "Упс! В момента {{serviceName}} е недостъпна. В момента се опитваме да решим проблема. Моля, опитайте отново малко по-късно.", - "unavailableTitle": "Записът е невъзможен" + "unavailableTitle": "Записът е невъзможен", + "uploadToCloud": "Качи в облака" }, + "screenshareDisplayName": "Екранът на {{name}}", "sectionList": { "pullToRefresh": "Издърпай, за да се обнови" }, "security": { "about": "Може да добавите парола към вашите срещи. Участниците ще трябва да въведат паролата преди да бъдат допуснати до срещата.", "aboutReadOnly": "Модераторите могат да добавят парола към срещата. Участниците ще трябва да въведат паролата преди да бъдат допуснати до срещата.", - "insecureRoomNameWarning": "Вашата среща не е обезопасена и нежелани участници могат да се включат. Можете да подсигурите срещата с помощта на бутона сигурност.", - "securityOptions": "Сигурност" + "insecureRoomNameWarningNative": "Името на стаята е несигурно. Нежелани участници може да се присъединят към срещата ви. {{recommendAction}} Научете повече за защитаване на срещата си ", + "insecureRoomNameWarningWeb": "Името на стаята е несигурно. Нежелани участници може да се присъединят към срещата ви. {{recommendAction}} Научете повече за защитаване на срещата си тук.", + "title": "Опции за сигурност", + "unsafeRoomActions": { + "meeting": "Помислете да защитите срещата си с помощта на бутона за сигурност.", + "prejoin": "Помислете да използвате по-уникално име за срещата.", + "welcome": "Помислете да използвате по-уникално име за срещата или изберете едно от предложенията." + } }, "settings": { + "audio": "Аудио", + "buttonLabel": "Настройки", "calendar": { "about": "Календарната интеграция на {{appName}} сигурно достъпва Вашия календар, за да покаже настъпващите събития.", "disconnect": "Разкачи", @@ -599,40 +1174,76 @@ "signedIn": "В момента достъпва календара с {{email}}. Натиснете бутона Разкачи, за да спрете достъпа.", "title": "Календар" }, + "chatWithPermissions": "Съобщенията изискват разрешение", + "desktopShareFramerate": "Честота на опресняване за споделяне на работния плот", + "desktopShareHighFpsWarning": "По-високата честота на опресняване за споделяне на работния плот може да повлияе на трафика ви. Трябва да рестартирате споделянето на екрана, за да влязат в сила новите настройки.", + "desktopShareWarning": "Трябва да рестартирате споделянето на екрана, за да влязат в сила новите настройки.", "devices": "Устройства", "followMe": "Всички ме следват", + "followMeRecorder": "Записвачът ме следва", + "framesPerSecond": "кадъра в секунда", + "incomingMessage": "Входящо съобщение", "language": "Език", "loggedIn": "Влезли сте като {{name}}", + "maxStageParticipants": "Максимален брой участници, които могат да бъдат фокусирани на главната сцена", "microphones": "Микрофони", "moderator": "Модератор", + "moderatorOptions": "Опции за модератор", "more": "Повече", "name": "Име", "noDevice": "Няма", + "notifications": "Уведомления", + "participantJoined": "Участник се присъедини", + "participantKnocking": "Участник влезе в лобито", + "participantLeft": "Участник напусна", + "playSounds": "Възпроизвеждай звук при", + "reactions": "Реакции в срещата", + "sameAsSystem": "Същото като системата ({{label}})", "selectAudioOutput": "Звуков изход", "selectCamera": "Камера", "selectMic": "Микрофон", + "selfView": "Собствен изглед", + "shortcuts": "Бързи клавиши", + "showSubtitlesOnStage": "Покажи субтитрите на сцената", "speakers": "Говорители", "startAudioMuted": "Всички започват заглушени", + "startReactionsMuted": "Заглуши звуците на реакциите за всички", "startVideoMuted": "Всички започват скрити", - "title": "Настройки" + "talkWhileMuted": "Говори докато си заглушен", + "title": "Настройки", + "video": "Видео" }, "settingsView": { "advanced": "Разширени", + "alertCancel": "Отказ", "alertOk": "Потвърди", "alertTitle": "Внимание", "alertURLText": "Въведената връзка за сървър е невалидна", + "apply": "Приложи", "buildInfoSection": "Информация за програмата", "conferenceSection": "Конференция", "disableCallIntegration": "Деактивиране на интеграция с обажданията", + "disableCrashReporting": "Изключи отчитането на грешки", + "disableCrashReportingWarning": "Сигурни ли сте, че искате да изключите отчитането на грешки? Настройката ще бъде приложена след рестартиране на приложението.", "disableP2P": "Деактивиране на опцията за пряка връзка (p2p)", "displayName": "Име", + "displayNamePlaceholderText": "Напр: Иван Иванов", "email": "Поща", + "emailPlaceholderText": "email@example.com", + "gavatarMessage": "Ако имейлът ви е свързан с Gravatar акаунт, ще го използваме за показване на профилната ви снимка.", + "goTo": "Отиди на", "header": "Настройки", + "help": "Помощ", + "links": "Връзки", + "privacy": "Поверителност", "profileSection": "Профил", + "sdkVersion": "SDK версия", "serverURL": "Линк на сървъра", "showAdvanced": "Показване на разширени настройки", + "startCarModeInLowBandwidthMode": "Стартирай автомобилния режим в режим с ниска скорост", "startWithAudioMuted": "Започни със спрян звук", "startWithVideoMuted": "Започни със спряно видео", + "terms": "Условия", "version": "Версия" }, "share": { @@ -641,14 +1252,24 @@ }, "speaker": "Говорещ", "speakerStats": { + "angry": "Ядосан", + "disgusted": "Отвратен", + "displayEmotions": "Покажи емоциите", + "fearful": "Уплашен", + "happy": "Щастлив", "hours": "{{count}}ч", + "labelTooltip": "Брой участници: {{count}}", "minutes": "{{count}}мин", "name": "Име", + "neutral": "Неутрален", + "sad": "Тъжен", "search": "Търсене", + "searchDescription": "Започнете да пишете, за да филтрирате участниците", "searchHint": "Търсене участници", "seconds": "{{count}}сек", "speakerStats": "Статистика на говорителя", - "speakerTime": "Време на говорене" + "speakerTime": "Време на говорене", + "surprised": "Изненадан" }, "startupoverlay": { "genericTitle": "Срещата се нуждае от достъп до микрофона и камерата Ви.", @@ -660,126 +1281,239 @@ "text": "Натиснете бутона Повторно присъединяване, за да се свържете отново.", "title": "Вашият видео разговор беше прекъснат, тъй като компютърът Ви заспа." }, + "termsView": { + "title": "Условия" + }, + "toggleTopPanelLabel": "Превключи горния панел", "toolbar": { "Settings": "Настройки", "accessibilityLabel": { "Settings": "Промяна на настройки", "audioOnly": "Пускане на режим само със звук", "audioRoute": "Изберете устройство за звук", + "boo": "Бу", + "breakoutRooms": "Работни стаи", "callQuality": "Промяна качеството на видеото", + "carmode": "Автомобилен режим", "cc": "Пускане на субтитри", "chat": "Активиране на прозорец за съобщения", + "clap": "Ръкопляскане", + "closeChat": "Затвори чата", + "closeMoreActions": "Затвори менюто с още действия", + "closeParticipantsPane": "Затвори панела с участници", + "closedCaptions": "Субтитри", + "collapse": "Свий", "document": "Показване на споделен документ", + "documentClose": "Затвори споделения документ", + "documentOpen": "Отвори споделен документ", "download": "Свалете приложението", + "embedMeeting": "Вграждане на среща", + "endConference": "Приключи срещата за всички", + "enterFullScreen": "Преглед на цял екран", + "enterTileView": "Влез в изглед галерия", + "exitFullScreen": "Изход от цял екран", + "exitTileView": "Изход от изглед галерия", + "expand": "Разгъни", "feedback": "Отзиви", "fullScreen": "Пускане/спиране на изглед в цял екран", + "giphy": "Превключи GIPHY менюто", + "grantModerator": "Дай права на модератор", "hangup": "Напускане на срещата", + "heading": "Лента с инструменти", "help": "Помощ", + "hideWhiteboard": "Скрий бялата дъска", "invite": "Поканете участници", "kick": "Изгони участник", + "laugh": "Смях", + "leaveConference": "Напусни срещата", + "like": "Харесвам", + "linkToSalesforce": "Свърже със Salesforce", + "lobbyButton": "Включи/изключи режим лоби", "localRecording": "Показване на контроли за локален запис", "lockRoom": "Смяна парола на среща", + "love": "Сърце", + "lowerHand": "Свали ръката", "moreActions": "Показване на меню с повече опции", "moreActionsMenu": "Меню с повече опции", "moreOptions": "Покажи повече опции", "mute": "Пускане/спиране на видеото", "muteEveryone": "Заглуши всички", + "muteEveryoneElse": "Заглуши всички останали", + "muteEveryoneElsesVideoStream": "Спри видеото на всички останали", + "muteEveryonesVideoStream": "Спри видеото на всички", + "muteGUMPending": "Свързване на микрофона ви", + "noiseSuppression": "Допълнително заглушаване на шум (БЕТА)", + "openChat": "Отвори чата", + "participants": "Отвори панела с участници. {{participantsCount}} участници", "pip": "Пускане на Картина-в-Картина", "privateMessage": "Изпрати лично съобщение", "profile": "Редактиране на профила", "raiseHand": "Смяна искане на думата", + "react": "Реакции на съобщения", + "reactions": "Реакции", + "reactionsMenu": "Меню за реакции", "recording": "Пускане/спиране на запис", "remoteMute": "Заглуши участник", + "remoteVideoMute": "Изключи камерата на участника", + "security": "Опции за сигурност", + "selectBackground": "Избери фон", + "selfView": "Превключи собствения изглед", "shareRoom": "Добавете някого", "shareYourScreen": "Споделяне на екрана", + "shareaudio": "Сподели аудио", "sharedvideo": "Пускане/спиране на споделеното видео", "shortcuts": "Бързи клавиши", "show": "Покажи на главния екран", + "showWhiteboard": "Покажи бялата дъска", + "silence": "Тишина", "speakerStats": "Показване на статистики за участниците", + "stopScreenSharing": "Спри споделянето на екрана ви", + "stopSharedVideo": "Спри видеото", + "surprised": "Изненадан", "tileView": "Превключване на изглед галерия", "toggleCamera": "Пускане/спиране на камера", "toggleFilmstrip": "Превключи видео миниатюрите", + "unmute": "Включи микрофона", "videoblur": "Пускане/спиране на замъгляване на видеото", - "videomute": "Пускане/спиране на видеото" + "videomute": "Пускане/спиране на видеото", + "videomuteGUMPending": "Свързване на камерата ви", + "videounmute": "Стартирай камерата" }, "addPeople": "Добавяне на участници в разговора", + "advancedAudioSettings": { + "aec": { + "label": "Потискане на акустичното ехо" + }, + "agc": { + "label": "Автоматичен контрол на усилването" + }, + "ns": { + "label": "Заглушаване на шума" + }, + "stereo": { + "label": "Стерео" + } + }, "audioOnlyOff": "Спиране режима с нисък трафик", "audioOnlyOn": "Пускане режима с нисък трафик", "audioRoute": "Изберете устройство за звук", + "audioSettings": "Аудио настройки", "authenticate": "Идентификация", + "boo": "Бу", "callQuality": "Промяна качеството на видеото", "chat": "Отваряне/затваряне на текстовите съобщения", + "clap": "Ръкопляскане", "closeChat": "Затваряне на съобщенията", + "closeParticipantsPane": "Затвори панела с участници", + "closeReactionsMenu": "Затвори менюто за реакции", + "closedCaptions": "Субтитри", + "disableNoiseSuppression": "Изключи допълнителното заглушаване на шум (БЕТА)", + "disableReactionSounds": "Можете да изключите звуците на реакциите за тази среща", "documentClose": "Затваряне на споделения документ", "documentOpen": "Отваряне на споделен документ", "download": "Свалете приложението", + "e2ee": "Криптиране от край до край", + "embedMeeting": "Вграждане на среща", + "enableNoiseSuppression": "Включи допълнителното заглушаване на шум (БЕТА)", + "endConference": "Приключи срещата за всички", "enterFullScreen": "Вижте на цял екран", "enterTileView": "Влизане в изглед галерия", "exitFullScreen": "Изход от цял екран", "exitTileView": "Спиране на изглед галерия", "feedback": "Отзиви", + "giphy": "Превключи GIPHY менюто", "hangup": "Напускане", "help": "Помощ", + "hideWhiteboard": "Скрий бялата дъска", "invite": "Поканете участници", + "joinBreakoutRoom": "Присъедини се в работна стая", + "laugh": "Смях", + "leaveBreakoutRoom": "Напусни работната стая", + "leaveConference": "Напусни срещата", + "like": "Харесвам", + "linkToSalesforce": "Свърже със Salesforce", + "lobbyButtonDisable": "Изключи режим лоби", + "lobbyButtonEnable": "Включи режим лоби", "login": "Влез", "logout": "Изход", + "love": "Сърце", "lowerYourHand": "Махни искането на думата", "moreActions": "Още опции", "moreOptions": "Повече опции", "mute": "Спиране/пускане на микрофона", "muteEveryone": "Заглуши всички", + "muteEveryonesVideo": "Изключи камерата на всички", + "muteGUMPending": "Свързване на микрофона ви", "noAudioSignalDesc": "Ако не сте спрели звука на устройството от системните настройки, сменете с друго устройство.", "noAudioSignalDescSuggestion": "Ако не сте спрели звука на устройството от системните настройки, използвайте някое от предложените устройства.", "noAudioSignalDialInDesc": "Може да влезнете чрез обаждане на:", "noAudioSignalDialInLinkDesc": "Номера за обаждане", "noAudioSignalTitle": "Няма сигнал, идващ от микрофона!", + "noiseSuppression": "Допълнително заглушаване на шум (БЕТА)", "noisyAudioInputDesc": "Изглежда доста шум идва от микрофона Ви, заглушете го или сменете устройството.", "noisyAudioInputTitle": "Изглежда е шумно около Вас!", "openChat": "Отвори съобщенията", + "openReactionsMenu": "Отвори менюто за реакции", + "participants": "Участници", "pip": "Пусни Картина-в-Картина", "privateMessage": "Изпрати лично съобщение", "profile": "Редактиране на профила", "raiseHand": "Вдигане/сваляне на ръка", "raiseYourHand": "Поискай думата", + "reactionBoo": "Изпрати реакция бу", + "reactionClap": "Изпрати реакция ръкопляскане", + "reactionHeart": "Изпрати реакция сърце", + "reactionLaugh": "Изпрати реакция смях", + "reactionLike": "Изпрати реакция харесвам", + "reactionLove": "Изпрати реакция със сърце", + "reactionSilence": "Изпрати реакция тишина", + "reactionSurprised": "Изпрати реакция изненада", + "reactions": "Реакции", + "security": "Опции за сигурност", + "selectBackground": "Избери фон", "shareRoom": "Добавете някого", + "shareaudio": "Сподели аудио", "sharedvideo": "Споделяне на видео", "shortcuts": "Виж бързите клавиши", + "showWhiteboard": "Покажи бялата дъска", + "silence": "Тишина", "speakerStats": "Статистика за говорителите", "startScreenSharing": "Започни споделяне на екрана", "startSubtitles": "Пускане на субтитри", - "startvideoblur": "Замъгли фона ми", + "stopAudioSharing": "Спри споделянето на аудио", "stopScreenSharing": "Спиране споделяне на екрана", "stopSharedVideo": "Спиране на видео", "stopSubtitles": "Спиране на субтитри", - "stopvideoblur": "Спиране замъгляването на фона", + "surprised": "Изненадан", "talkWhileMutedPopup": "Опитвате се да говорите? В момента микрофонът Ви е заглушен.", "tileViewToggle": "Превключване на изглед галерия", "toggleCamera": "Пускане/спиране на камера", - "videomute": "Пускане/спиране на камерата" + "unmute": "Включи микрофона", + "videoSettings": "Видео настройки", + "videomute": "Пускане/спиране на камерата", + "videomuteGUMPending": "Свързване на камерата ви", + "videounmute": "Стартирай камерата" }, "transcribing": { "ccButtonTooltip": "Пускане/спиране на субтитри", - "error": "Грешка при опит за транскрибиране. Моля, опитайте отново.", "expandedLabel": "Транскрибирането е пуснато", - "failedToStart": "Транскрибирането не успя при пускане", - "labelToolTip": "Тази среща се транскрибира", - "off": "Транскрибирането спря", - "pending": "Стартира се транскрибиране на срещата...", + "failed": "Транскрибирането се провали", + "labelTooltip": "Тази среща се транскрибира.", + "labelTooltipExtra": "Освен това, стенограма ще бъде налична по-късно.", + "openClosedCaptions": "Отвори субтитрите", + "original": "Оригинал", + "sourceLanguageDesc": "В момента езикът на срещата е настроен на {{sourceLanguage}}.
Можете да го промените от ", + "sourceLanguageHere": "тук", "start": "Започва показване на субтитри", "stop": "Спира показване на субтитри", - "tr": "СУБ" + "subtitles": "Субтитри", + "subtitlesOff": "Изключени", + "tr": "СУБ", + "translateTo": "Преведи на" }, + "unpinParticipant": "{{participantName}} - Откачи", "userMedia": { - "androidGrantPermissions": "Изберете Разрешаване, когато браузърът Ви помоли за разрешение.", - "chromeGrantPermissions": "Изберете Разрешаване, когато браузърът Ви помоли за разрешение.", - "edgeGrantPermissions": "Изберете Да, когато браузърът Ви помоли за разрешение.", - "electronGrantPermissions": "Моля, разрешете използването на камерата и микрофона", - "firefoxGrantPermissions": "Изберете Споделяне на избраното устройство, когато браузърът Ви помоли за разрешение.", - "iexplorerGrantPermissions": "Изберете Добре, когато браузърът Ви помоли за разрешение.", - "nwjsGrantPermissions": "Моля, разрешете използването на камерата и микрофона", - "operaGrantPermissions": "Изберете Разрешаване, когато браузърът Ви помоли за разрешение.", - "react-nativeGrantPermissions": "Изберете Разрешаване, когато браузърът Ви помоли за разрешение.", - "safariGrantPermissions": "Изберете Добре, когато браузърът Ви помоли за разрешение." + "grantPermissions": "Моля, разрешете използването на камерата и микрофона." }, "videoSIPGW": { "busy": "Работим по освобождаване на ресурси. Моля, опитайте след няколко минути.", @@ -792,40 +1526,110 @@ "pending": "{{displayName}} бе поканен" }, "videoStatus": { + "adjustFor": "Настрой за:", "audioOnly": "АУДИО", "audioOnlyExpanded": "Вие сте в режим на нисък трафик. В този режим ще получавате само аудио или споделени екрани.", + "bestPerformance": "Най-добра производителност", "callQuality": "Качество на видеото", "hd": "HD", "hdTooltip": "Гледате високо качество на видеото", "highDefinition": "Високо качество", + "highestQuality": "Най-високо качество", "labelTooiltipNoVideo": "Няма видео", "labelTooltipAudioOnly": "Пуснат режим на нисък трафик", "ld": "LD", "ldTooltip": "Виждате ниско качество на видеото", "lowDefinition": "Ниско качество", - "onlyAudioAvailable": "Само аудио е налично", - "onlyAudioSupported": "Този браузър поддържа само аудио.", + "performanceSettings": "Настройки за производителност", + "recording": "Тази среща се записва.", "sd": "SD", "sdTooltip": "Гледате стандартно качество на видеото", - "standardDefinition": "Стандартно качество" + "standardDefinition": "Стандартно качество", + "streaming": "Излъчване в ход" }, "videothumbnail": { + "connectionInfo": "Информация за връзката", + "demote": "Премести в режим зрител", "domute": "Изключи микрофона", + "domuteDesktop": "Спри споделянето на екран", + "domuteDesktopOfOthers": "Спри споделянето на екран за всички останали", "domuteOthers": "Заглушете всички останали", + "domuteVideo": "Изключи камерата", + "domuteVideoOfOthers": "Изключи камерата на всички останали", "flip": "Огледално", + "grantModerator": "Дай права на модератор", + "hideSelfView": "Скрий собствения изглед", "kick": "Изгони", + "mirrorVideo": "Огледално моето видео", "moderator": "Модератор", "mute": "Участникът е с изключен микрофон", "muted": "Изключен микрофон", + "pinToStage": "Закачи към сцената", "remoteControl": "Отдалечено управление", + "screenSharing": "Участникът споделя екрана си", "show": "Покажи на главния екран", + "showSelfView": "Покажи собствения изглед", + "unpinFromStage": "Откачи", + "verify": "Потвърди участника", + "videoMuted": "Камерата е изключена", "videomute": "Участникът е спрял камерата си" }, + "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Текущ фон: {{background}}", + "selectBackground": "Избери фон" + }, + "addBackground": "Добави фон", + "apply": "Приложи", + "backgroundEffectError": "Неуспешно прилагане на ефект за фон.", + "blur": "Замъгляване", + "deleteImage": "Изтрий изображение", + "desktopShare": "Споделяне на работен плот", + "desktopShareError": "Не можа да се създаде споделяне на работен плот", + "image1": "Плаж", + "image2": "Бяла неутрална стена", + "image3": "Бяла празна стая", + "image4": "Черна подова лампа", + "image5": "Планина", + "image6": "Гора ", + "image7": "Изгрев", + "none": "Няма", + "pleaseWait": "Моля, изчакайте…", + "removeBackground": "Премахни фона", + "slightBlur": "Половин замъгляване", + "title": "Виртуални фонове", + "uploadedImage": "Качено изображение {{index}}", + "webAssemblyWarning": "WebAssembly не се поддържа", + "webAssemblyWarningDescription": "WebAssembly е изключен или не се поддържа от този браузър" + }, + "visitors": { + "chatIndicator": "(зрител)", + "joinMeeting": { + "description": "В момента сте зрител в тази конференция.", + "raiseHand": "Вдигнете ръката си", + "title": "Присъединяване към среща", + "wishToSpeak": "Ако желаете да говорите, моля вдигнете ръката си по-долу и изчакайте одобрението на модератора." + }, + "labelTooltip": "Брой зрители: {{count}}", + "notification": { + "demoteDescription": "Изпратен тук от {{actor}}, вдигнете ръка за участие", + "noMainParticipantsDescription": "Участник трябва да започне срещата. Моля, опитайте отново след малко.", + "noMainParticipantsTitle": "Тази среща все още не е започнала.", + "noVisitorLobby": "Не можете да се присъедините докато има включено лоби за срещата.", + "notAllowedPromotion": "Участник трябва първо да разреши заявката ви.", + "requestToJoin": "Вдигната ръка", + "requestToJoinDescription": "Заявката ви беше изпратена до модераторите. Изчакайте!", + "title": "Вие сте зрител в срещата" + }, + "waitingMessage": "Ще се присъедините към срещата веднага щом тя започне!" + }, + "volumeSlider": "Плъзгач за силата на звука", "welcomepage": { "accessibilityLabel": { "join": "Натиснете, за да влезете", "roomname": "Въведете име на стаята" }, + "addMeetingName": "Добави име на среща", "appDescription": "Хайде на видео разговор с целия екип! Всъщност, поканете всички свои познати! {{app}} е напълно защитено решение за видеоконференции със 100% отворен код, което може да ползвате по цял ден, всеки ден, безплатно - без да ви е нужна регистрация.", "audioVideoSwitch": { "audio": "Глас", @@ -838,18 +1642,44 @@ "getHelp": "Търсене на помощ", "go": "НАПРЕД", "goSmall": "НАПРЕД", + "headerSubtitle": "Сигурни и висококачествени срещи", + "headerTitle": "Jitsi Meet", "info": "Информация", + "jitsiOnMobile": "Jitsi на мобилно – свалете приложенията ни и започнете среща отвсякъде", "join": "Създай / Влез", + "logo": { + "calendar": "Лого на календар", + "desktopPreviewThumbnail": "Миниатюра за преглед на работен плот", + "googleLogo": "Google лого", + "logoDeepLinking": "Jitsi meet лого", + "microsoftLogo": "Microsoft лого", + "policyLogo": "Лого на политика" + }, + "meetingsAccessibilityLabel": "Срещи", + "mobileDownLoadLinkAndroid": "Свали мобилното приложение за Android", + "mobileDownLoadLinkFDroid": "Свали мобилното приложение за F-Droid", + "mobileDownLoadLinkIos": "Свали мобилното приложение за iOS", + "moderatedMessage": "Или резервирайте URL за среща предварително, където вие сте единственият модератор.", "privacy": "Поверителност", "recentList": "Скорошни срещи", "recentListDelete": "Изтрий", "recentListEmpty": "Списъкът със скорошни срещи е празен. След като участвате в някоя среща, ще я намерите тук.", + "recentMeetings": "Скорошните ви срещи", "reducedUIText": "Добре дошли в {{app}}!", "roomNameAllowedChars": "Името на срещата не трябва да съдържа никой от символите: ?, &, :, ', \", %, #.", "roomname": "Въведете име на стаята", "roomnameHint": "Въведете името или връзката на стаята, в която искате да влезете. Също така може да си измислите име. Само го споделете с някого, за да може и той да въведе същото име и да се срещнете.", "sendFeedback": "Изпращане на отзиви", + "settings": "Настройки", + "startMeeting": "Започни среща", "terms": "Условия", - "title": "Сигурна, с много възможности, и напълно безплатна платформа за видео конференции" + "title": "Сигурна, с много възможности, и напълно безплатна платформа за видео конференции", + "upcomingMeetings": "Предстоящите ви срещи" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Бяла дъска" + }, + "screenTitle": "Бяла дъска" } } diff --git a/lang/main-ca.json b/lang/main-ca.json index 9006a75e8b34..8f6a7087528f 100644 --- a/lang/main-ca.json +++ b/lang/main-ca.json @@ -19,7 +19,7 @@ "noResults": "No s'ha trobat cap resultat coincident", "outlookEmail": "Correu d'Outlook", "phoneNumbers": "números de telèfon", - "searching": "S'està cercant...", + "searching": "S'està cercant…", "shareInvite": "Comparteix la invitació a la reunió", "shareLink": "Compartiu l'enllaç de la reunió per a convidar altres persones", "shareStream": "Comparteix l'enllaç de la transmissió en directe", @@ -122,7 +122,7 @@ "installExtensionText": "Instal·la l'extensió per a la integració amb Google Calendar i Office 365" }, "connectingOverlay": { - "joiningRoom": "S'està connectat a la reunió..." + "joiningRoom": "S'està connectat a la reunió…" }, "connection": { "ATTACHED": "Adjunt", @@ -134,9 +134,9 @@ "DISCONNECTED": "Desconnectat", "DISCONNECTING": "S'està desconnectant", "ERROR": "Error", - "FETCH_SESSION_ID": "S'està obtenint un identificador de sessió...", + "FETCH_SESSION_ID": "S'està obtenint un identificador de sessió…", "GET_SESSION_ID_ERROR": "S'ha produït un error en obtenir l'identificador de la sessió: {{code}}", - "GOT_SESSION_ID": "Obtenció d'identificador de sessió.... Fet", + "GOT_SESSION_ID": "Obtenció d'identificador de sessió…. Fet", "LOW_BANDWIDTH": "S'ha apagat el vídeo de {{displayName}} per a estalviar amplada de banda" }, "connectionindicator": { @@ -189,7 +189,7 @@ "ifHaveApp": "Si ja teniu l'aplicació:", "joinInApp": "Uniu-vos a aquesta reunió amb l'aplicació", "launchWebButton": "Inicia al web", - "title": "S'està iniciant la reunió en {{app}}....", + "title": "S'està iniciant la reunió en {{app}}….", "tryAgainButton": "Torna-ho a intentar en l'escriptori", "unsupportedBrowser": "Sembla que useu un navegador que no suportem." }, @@ -222,7 +222,7 @@ "Share": "Comparteix", "Submit": "Tramet", "WaitForHostMsg": "La conferència encara no ha començat. Si en sou l'amfitrió, autentiqueu-vos. Altrament, espereu que arribi l'amfitrió.", - "WaitingForHostTitle": "S'està esperant l'amfitrió...", + "WaitingForHostTitle": "S'està esperant l'amfitrió…", "Yes": "Sí", "accessibilityLabel": { "liveStreaming": "Transmissió en directe" @@ -244,9 +244,9 @@ "cameraUnknownError": "Per algun motiu desconegut, no es pot usar la càmera.", "cameraUnsupportedResolutionError": "La vostra càmera no permet la resolució de vídeo requerida.", "close": "Tanca", - "conferenceDisconnectMsg": "Potser voleu comprovar la connexió a la xarxa. Es tornarà a connectar en {{seconds}} segons...", + "conferenceDisconnectMsg": "Potser voleu comprovar la connexió a la xarxa. Es tornarà a connectar en {{seconds}} segons…", "conferenceDisconnectTitle": "Esteu desconnectat.", - "conferenceReloadMsg": "Intentem de corregir-ho. Tornem a connectar en {{seconds}} segons...", + "conferenceReloadMsg": "Intentem de corregir-ho. Tornem a connectar en {{seconds}} segons…", "conferenceReloadTitle": "Malauradament, alguna cosa no ha anat bé.", "confirm": "Confirmo", "confirmNo": "No", @@ -535,7 +535,7 @@ "errorLiveStreamNotEnabled": "La transmissió en directe no està activada a ̣{{email}}. Activeu-la o inicieu sessió en un compte que tingui la transmissió en directe activada.", "expandedOff": "S'ha aturat la transmissió en directe", "expandedOn": "Ara mateix, la reunió s'està transmetent a Youtube.", - "expandedPending": "S'ha iniciat la transmissió en directe...", + "expandedPending": "S'ha iniciat la transmissió en directe…", "failedToStart": "No s'ha pogut iniciar la transmissió en directe", "getStreamKeyManually": "No hem pogut obtenir cap transmissió en directe. Intenteu d'aconseguir la clau de transmissió en directe del YouTube.", "googlePrivacyPolicy": "Polítiques de privadesa de Google", @@ -547,7 +547,7 @@ "offBy": "{{name}} ha aturat la transmissió en directe", "on": "Ha començat la transmissió en directe", "onBy": "{{name}} ha iniciat la transmissió en directe", - "pending": "S'està iniciant la transmissió en directe...", + "pending": "S'està iniciant la transmissió en directe…", "serviceName": "Servei de transmissió en directe", "sessionAlreadyActive": "Aquesta sessió ja s'està enregistrant o s'està emetent en directe.", "signIn": "Inicia sessió amb Google", @@ -578,10 +578,10 @@ "joinRejectedMessage": "La vostra sol·licitud ha estat rebutjada per un moderador.", "joinRejectedTitle": "S'ha rebutjat la petició d'unir-s'hi.", "joinTitle": "Entra a la reunió", - "joinWithPasswordMessage": "S'està intentant unir-s'hi amb contrasenya, espereu...", + "joinWithPasswordMessage": "S'està intentant unir-s'hi amb contrasenya, espereu…", "joiningMessage": "Us unireu a la reunió de seguida que algú accepti la sol·licitud", - "joiningTitle": "S'ha demanat per a entrar a la reunió...", - "joiningWithPasswordTitle": "Afegeix-m'hi amb contrasenya...", + "joiningTitle": "S'ha demanat per a entrar a la reunió…", + "joiningWithPasswordTitle": "Afegeix-m'hi amb contrasenya…", "knockButton": "Demana d'unir-se", "knockTitle": "Algú vol unir-se a la reunió", "knockingParticipantList": "Llista de participants que piquen per a entrar", @@ -665,7 +665,7 @@ "linkToSalesforceDescription": "Podeu enllaçar el resum de la reunió a un objecte Salesforce.", "linkToSalesforceError": "No s'ha pogut enllaçar la reunió a Salesforce", "linkToSalesforceKey": "Enllaça aquesta reunió", - "linkToSalesforceProgress": "S'està enllaçant la reunió a Salesforce...", + "linkToSalesforceProgress": "S'està enllaçant la reunió a Salesforce…", "linkToSalesforceSuccess": "La reunió s'ha enllaçat a Salesforce", "localRecordingStarted": "{{name}} ha iniciat un enregistrament local.", "localRecordingStopped": "{{name}} ha aturat has stopped a local recording.", @@ -796,7 +796,7 @@ "callMe": "Truca'm", "callMeAtNumber": "Truca'm a aquest número:", "calling": "S'està trucant", - "configuringDevices": "S'estan configurant els aparells...", + "configuringDevices": "S'estan configurant els aparells…", "connectedWithAudioQ": "Heu connectat amb àudio?", "connection": { "good": "La vostra connexió a internet sembla bona!", @@ -842,7 +842,6 @@ "or": "o", "premeeting": "Prereunió", "screenSharingError": "Error en compartir la pantalla:", - "showScreen": "Activa la pantalla de prereunió", "startWithPhone": "Comença amb àudio de telèfon", "videoOnlyError": "Error del vídeo:", "videoTrackError": "No s'ha pogut crear la pista de vídeo.", @@ -850,17 +849,17 @@ }, "presenceStatus": { "busy": "Ocupat", - "calling": "S'està trucant...", + "calling": "S'està trucant…", "connected": "Connectat", - "connecting": "Està connectant...", - "connecting2": "Està connectant*...", + "connecting": "Està connectant…", + "connecting2": "Està connectant*…", "disconnected": "Desconnectat", "expired": "Ha expirat", "ignored": "Ignorat", - "initializingCall": "S'està inicialitzant la trucada...", + "initializingCall": "S'està inicialitzant la trucada…", "invited": "Convidat", "rejected": "Rebutjat", - "ringing": "Està sonat..." + "ringing": "Està sonat…" }, "privacyView": { "title": "Privadesa" @@ -897,7 +896,7 @@ "errorFetchingLink": "S'ha produït un error en obtenir l'enllaç de l'enregistrament.", "expandedOff": "S'ha aturat l'enregistrament", "expandedOn": "S'està enregistrant la reunió.", - "expandedPending": "S'ha iniciat l'enregistrament...", + "expandedPending": "S'ha iniciat l'enregistrament…", "failedToStart": "No s'ha pogut iniciar l'enregistrament", "fileSharingdescription": "Compartiu l'enllaç de l'enregistrament de la reunió amb els participants", "highlight": "Destaca", @@ -916,7 +915,7 @@ "localRecordingStartWarningTitle": "Atura l'enregistrament per a desar-lo", "localRecordingVideoStop": "Aturar el vídeo també aturarà l'enregistrament local. Segur que voleu continuar?", "localRecordingVideoWarning": "Per a enregistrar el vostre vídeo, cal que ho feu en començar l'enregistrament", - "localRecordingWarning": "Assegureu-vos de triar la pestanya actual per a poder usar el vídeo i àudios correctes. L'enregistrament actualment està limitat a 1 GB. Això són, aproximadament, 100 minuts.", + "localRecordingWarning": "Assegureu-vos de triar la pestanya actual per a poder usar el vídeo i àudios correctes.", "loggedIn": "Sessió iniciada com a {{userName}}", "noStreams": "No s'ha detectat flux d'àudio ni vídeo.", "off": "S'ha aturat l'enregistrament", @@ -924,7 +923,7 @@ "on": "L'enregistrament ha començat", "onBy": "{{name}} ha iniciat l'enregistrament", "onlyRecordSelf": "Enregistra només el meu àudio i vídeo", - "pending": "S'està preparant per a enregistrar la reunió...", + "pending": "S'està preparant per a enregistrar la reunió…", "rec": "ENREG", "saveLocalRecording": "Desa el fitxer de l'enregistrament en local (beta)", "serviceDescription": "El servei d'enregistrament desarà el vostre enregistrament", @@ -1227,7 +1226,7 @@ "failedToStart": "No s'ha pogut iniciar la transcripció", "labelToolTip": "La reunió s'està transcrivint", "off": "La transcripció s'ha aturat", - "pending": "S'està preparant per a enregistrar la reunió...", + "pending": "S'està preparant per a enregistrar la reunió…", "sourceLanguageDesc": "La llengua actual de la reunió és {{sourceLanguage}}.
Podeu canviar-la", "sourceLanguageHere": "aquí", "start": "Activa els subtítols", @@ -1237,16 +1236,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Seleccioneu Permet si el navegador us sol·licita permisos.", - "chromeGrantPermissions": "Seleccioneu Permet si el navegador us sol·licita permisos.", - "edgeGrantPermissions": "Seleccioneu si el navegador us sol·licita permisos.", - "electronGrantPermissions": "S'està intentant accedir a la vostra càmera i micròfon", - "firefoxGrantPermissions": "Seleccioneu Comparteix l'aparell seleccionat si el navegador us sol·licita permisos.", - "iexplorerGrantPermissions": "Seleccioneu D'acord si el navegador us sol·licita permisos.", - "nwjsGrantPermissions": "Concediu permisos per a usar la càmera i el micròfon", - "operaGrantPermissions": "Seleccioneu Permet si el navegador us sol·licita permisos.", - "react-nativeGrantPermissions": "Seleccioneu Permet si el navegador us sol·licita permisos.", - "safariGrantPermissions": "Seleccioneu D'acord si el navegador us sol·licita permisos." + "grantPermissions": "Concediu permisos per a usar la càmera i el micròfon." }, "videoSIPGW": { "busy": "Treballem per a alliberar recursos. Torneu-ho a intentar en uns minuts.", @@ -1316,7 +1306,7 @@ "image6": "Bosc", "image7": "Sortida de sol", "none": "Cap", - "pleaseWait": "Espereu...", + "pleaseWait": "Espereu…", "removeBackground": "Elimina el fons", "slightBlur": "Desenfocament lleu", "title": "Fons virtuals", diff --git a/lang/main-cs.json b/lang/main-cs.json index 77d6e7570f06..dab577725f65 100644 --- a/lang/main-cs.json +++ b/lang/main-cs.json @@ -1,5 +1,8 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "Odkaz na setkání: {{url}}" + }, "add": "Pozvat", "addContacts": "Pozvat vaše kontakty", "contacts": "kontakty", @@ -19,7 +22,7 @@ "noResults": "Žádné odpovídající výsledky vyhledávání", "outlookEmail": "Email Outlook", "phoneNumbers": "telefonní čísla", - "searching": "Hledám...", + "searching": "Hledám…", "shareInvite": "Sdílet pozvánku na setkání", "shareLink": "Pozvěte ostatní tak, že jim pošlete odkaz na setkání", "shareStream": "Sdílet odkaz na živý přenos", @@ -39,6 +42,18 @@ "audioOnly": { "audioOnly": "Nízká přenosová rychlost" }, + "bandwidthSettings": { + "assumedBandwidthBps": "např. 10000000 pro 10 Mbps", + "assumedBandwidthBpsWarning": "Vyšší hodnoty mohou způsobit problémy se sítí.", + "customValue": "vlastní hodnota", + "customValueEffect": "pro nastavení skutečné hodnoty bps", + "leaveEmpty": "ponechat prázdné", + "leaveEmptyEffect": "aby bylo možné provést odhady", + "possibleValues": "Možné hodnoty", + "setAssumedBandwidthBps": "Předpokládaná šířka pásma (bps)", + "title": "Nastavení šířky pásma", + "zeroEffect": "pro zakázání videa" + }, "breakoutRooms": { "actions": { "add": "Přidat podmístnost", @@ -48,15 +63,22 @@ "leaveBreakoutRoom": "Opustit podmístnost", "more": "Další", "remove": "Odstranit", + "rename": "Přejmenovat", + "renameBreakoutRoom": "Přejmenovat podmístnost", "sendToBreakoutRoom": "Odeslat účastníka do:" }, + "breakoutList": "Seznam podmnístností", + "buttonLabel": "Podmístnosti", "defaultName": "Podmístnost #{{index}}", + "hideParticipantList": "Skrýt seznam účastníků", "mainRoom": "Hlavní místnost", "notifications": { "joined": "Připojit se k podmístnosti \"{{name}}\"", "joinedMainRoom": "Připojit se k hlavní místnosti", "joinedTitle": "Podmístnosti" - } + }, + "showParticipantList": "Zobrazit seznam účastníků", + "title": "Podmístnosti" }, "calendarSync": { "addMeetingURL": "Přidejte odkaz na setkání", @@ -90,7 +112,7 @@ "enter": "Vstoupit", "error": "Chyba: vaše zpráva se neodeslala. Důvod: {{error}}", "fieldPlaceHolder": "Sem napište zprávu", - "lobbyChatMessageTo": "", + "lobbyChatMessageTo": "Chatová zpráva v lobby pro {{recipient}}", "message": "Zpráva", "messageAccessibleTitle": "{{user}} píše:", "messageAccessibleTitleMe": "já píši:", @@ -106,6 +128,7 @@ "privateNotice": "Soukromá zpráva pro {{recipient}}", "sendButton": "Odeslat", "smileysPanel": "Panel emoji", + "systemDisplayName": "Systém", "tabs": { "chat": "Chat", "polls": "Hlasování" @@ -147,6 +170,7 @@ "bridgeCount": "Počet serverů: ", "codecs": "Kodeky (A/V): ", "connectedTo": "Připojeno k:", + "e2eeVerified": "E2EE ověřeno:", "framerate": "Rychlost snímkování:", "less": "Zobrazit méně", "localaddress": "Místní adresa:", @@ -155,6 +179,7 @@ "localport_plural": "Místní porty:", "maxEnabledResolution": "posílat maximální", "more": "Zobrazit více", + "no": "ne", "packetloss": "Ztracené pakety:", "participant_id": "Účastníkovo ID:", "quality": { @@ -173,7 +198,8 @@ "status": "Připojení:", "transport": "Přenos:", "transport_plural": "Přenosy:", - "video_ssrc": "SSRC videa:" + "video_ssrc": "SSRC videa:", + "yes": "ano" }, "dateUtils": { "earlier": "Dříve", @@ -183,15 +209,25 @@ "deepLinking": { "appNotInstalled": "Abyste se mohl/a připojit k setkání, potřebujete mít na telefonu aplikaci {{app}}.", "description": "Nic se nestalo? Zkusili jsme spustit setkání v desktopové aplikaci {{app}}. Zkuste to znovu nebo spusťte webovou aplikaci {{app}}.", + "descriptionNew": "Nic se nestalo? Pokusili jsme se spustit vaši schůzku v aplikaci {{app}} pro počítače.

Můžete to zkusit znovu nebo to spustit na webu.", "descriptionWithoutWeb": "Nic se nestalo? Zkusili jsme spustit setkání v desktopové aplikaci {{app}}.", "downloadApp": "Stáhněte si aplikaci", + "downloadMobileApp": "Stáhnout z App Store", "ifDoNotHaveApp": "Pokud ještě aplikaci nemáte:", "ifHaveApp": "Pokud už aplikaci máte:", "joinInApp": "Připojte se k setkání pomocí aplikace", + "joinInAppNew": "Připojte se v aplikaci", + "joinInBrowser": "Připojte se v prohlížeči", + "launchMeetingLabel": "Jak se chcete k tomuto setkání připojit?", "launchWebButton": "Spustit na webu", + "noDesktopApp": "Nemáte aplikaci?", + "noMobileApp": "Nemáte aplikaci?", + "or": "NEBO", + "termsAndConditions": "Pokračováním vyjadřujete souhlas s našimi smluvními podmínkami.", "title": "Setkání se spouští v {{app}}…", + "titleNew": "Zahajování schůzky…", "tryAgainButton": "Zkusit znovu na desktopu", - "unsupportedBrowser": "" + "unsupportedBrowser": "Zdá se, že používáte prohlížeč, který nepodporujeme." }, "defaultLink": "např. {{url}}", "defaultNickname": "např. Jana Růžová", @@ -202,6 +238,12 @@ "microphonePermission": "Aplikace nemá oprávnění přistupovat k mikrofonu" }, "deviceSelection": { + "hid": { + "callControl": "Ovládání hovorů", + "connectedDevices": "Připojená zařízení:", + "deleteDevice": "Smazat zařízení", + "pairDevice": "Spárovat zařízení" + }, "noPermission": "Oprávnění není uděleno", "previewUnavailable": "Náhled není dostupný", "selectADevice": "Zvolte zařízení", @@ -222,25 +264,33 @@ "Share": "Sdílet", "Submit": "Potvrdit", "WaitForHostMsg": "Konference ještě nezačala. Pokud jste hostitel, přihlaste se. Jinak prosím počkejte, až hostitel dorazí.", + "WaitForHostNoAuthMsg": "Konference ještě nezačala, protože ještě nedorazili žádní moderátoři. Čekejte prosím.", + "WaitingForHostButton": "Počkejte na moderátora", "WaitingForHostTitle": "Čeká se na hostitele…", "Yes": "Ano", "accessibilityLabel": { - "liveStreaming": "Živý přenos" + "Cancel": "Zrušit (opustit dialog)", + "Ok": "OK (uložit a opustit dialog)", + "close": "Zavřít dialog", + "liveStreaming": "Živý přenos", + "sharingTabs": "Možnosti sdílení" }, "add": "Přidat", "addMeetingNote": "Přidat poznámku o tomto setkání", "addOptionalNote": "Přidat poznámku (nepovinné):", "allow": "Povolit", + "allowToggleCameraDialog": "Povolujete {{initiatorName}} přepínat režim otočení kamery?", + "allowToggleCameraTitle": "Povolit přepínání kamery?", "alreadySharedVideoMsg": "Video už sdílí jiný účastník. Tato konference umožňuje sdílet jen jedno video současně.", "alreadySharedVideoTitle": "Je povoleno jen jedno sdílené video", "applicationWindow": "Okno aplikace", - "authenticationRequired": "", + "authenticationRequired": "Vyžaduje se ověření", "cameraConstraintFailedError": "Vaše kamera nesplňuje některé požadované parametry.", "cameraNotFoundError": "Kamera nebyla nalezena.", "cameraNotSendingData": "Nelze přistupovat ke kameře. Zkontrolujte prosím, zda ji už nepoužívá jiná aplikace, vyberte jiné zařízení v nabídce nastavení nebo zkuste aplikaci znovu načíst.", "cameraNotSendingDataTitle": "Nelze přistupovat ke kameře", "cameraPermissionDeniedError": "Neudělili jste oprávnění k použití kamery. Můžete se sice připojit ke konferenci, ale ostatní vás neuvidí. Opravíte to stiskem tlačítka kamery v adresním řádku.", - "cameraTimeoutError": "", + "cameraTimeoutError": "Nelze spustit zdroj videa. Vypršel časový limit!", "cameraUnknownError": "Z neznámého důvodu nelze používat kameru.", "cameraUnsupportedResolutionError": "Vaše kamera nepodporuje požadované rozlišení obrazu.", "close": "Zavřít", @@ -257,21 +307,25 @@ "contactSupport": "Kontaktovat podporu", "copied": "Zkopírováno", "copy": "Kopírovat", + "demoteParticipantDialog": "Opravdu chcete tohoto účastníka přesunout na návštěvníka?", + "demoteParticipantTitle": "Přesunout na návštěvníka", "dismiss": "Skrýt", "displayNameRequired": "Ahoj! Jak se jmenuješ?", "done": "Hotovo", "e2eeDescription": "Šifrování end-to-end Je zatím EXPERIMENTÁLNÍ. Berte prosím v úvahu, že když zapnete šifrování end-to-end, vypnou se serverové služby jako: nahrávání, živý přenos a připojení po telefonu. Také mějte na paměti, že setkání bude fungovat jen lidem, kteří se připojí z prohlížečů s podporou vložitelných proudů.", - "e2eeDisabledDueToMaxModeDescription": "", + "e2eeDisabledDueToMaxModeDescription": "Nelze povolit šifrování End-to-End kvůli velkému počtu účastníků konference.", "e2eeLabel": "Povolit šifrování end-to-end", "e2eeWarning": "VAROVÁNÍ: Zdá se, že některým účastníkům setkání chybí podpora pro šifrování end-to-end. Pokud jej povolíte, nebudou vás vidět ani slyšet.", - "e2eeWillDisableDueToMaxModeDescription": "", - "embedMeeting": "", + "e2eeWillDisableDueToMaxModeDescription": "VAROVÁNÍ: Pokud se ke konferenci připojí více účastníků, bude šifrování End-to-End automaticky deaktivováno.", + "embedMeeting": "Vložit setkání", "enterDisplayName": "Vložte prosím své jméno", "error": "Chyba", + "errorRoomCreationRestriction": "Pokusili jste se připojit příliš rychle, vraťte se prosím za chvíli.", "gracefulShutdown": "Naše služba je nyní mimo provoz kvůli údržbě. Zkuste to prosím znovu později.", "grantModeratorDialog": "Určitě chcete tohoto účastníka učinit moderátorem?", "grantModeratorTitle": "Pověřit moderátora", - "hideShareAudioHelper": "", + "hide": "Skrýt", + "hideShareAudioHelper": "Tento dialog již nezobrazovat", "incorrectPassword": "Uživatelské jméno nebo heslo není správně", "incorrectRoomLockPassword": "Chybné heslo", "internalError": "Jejda! Něco se pokazilo. Objevila se následující chyba: {{error}}", @@ -280,16 +334,18 @@ "kickParticipantButton": "Vyhodit", "kickParticipantDialog": "Opravdu chcete vyhodit tohoto účastníka?", "kickParticipantTitle": "Vyhodit tohoto účastníka?", + "kickSystemTitle": "Au! Byl jsi vyloučen ze schůzky", "kickTitle": "Au! {{participantDisplayName}} vás vyhodil z videohovoru", - "linkMeeting": "", - "linkMeetingTitle": "", + "linkMeeting": "Link setkání", + "linkMeetingTitle": "Propojit schůzku se Salesforce", "liveStreaming": "Živý přenos", - "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "", - "localUserControls": "", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Není možné, pokud je aktivní nahrávání", + "localUserControls": "Místní uživatelské ovládací prvky", "lockMessage": "Konferenci se nepodařilo uzamknout.", "lockRoom": "Nastavit $t(lockRoomPassword) setkání", "lockTitle": "Zamknutí selhalo", - "login": "", + "login": "Přihlášení", + "loginQuestion": "Opravdu se chcete přihlásit a opustit konferenci?", "logoutQuestion": "Jste si jistí, že se chcete odhlásit a ukončit konferenci?", "logoutTitle": "Odhlásit", "maxUsersLimitReached": "Byl dosažen limit počtu účastníků. Konference je plná. Kontaktujte prosím vlastníka videohovoru nebo to zkuste znovu později!", @@ -299,46 +355,44 @@ "micNotSendingData": "Jít do nastavení počítače, zapnout mikrofon a nastavit jeho citlivost", "micNotSendingDataTitle": "Váš mikrofon je vypnutý v nastavení systému", "micPermissionDeniedError": "Neudělili jste oprávnění pro použití mikrofonu. Můžete se sice připojit ke konferenci, ale ostatní vás neuslyší. Opravíte to stiskem tlačítka kamery v adresním řádku.", - "micTimeoutError": "", + "micTimeoutError": "Nelze spustit zdroj zvuku. Vypršel časový limit!", "micUnknownError": "Z neznámého důvodu nelze použít mikrofon.", - "moderationAudioLabel": "", - "moderationVideoLabel": "", + "moderationAudioLabel": "Umožněte účastníkům zapnout zvuk", + "moderationVideoLabel": "Umožněte účastníkům spustit video", "muteEveryoneDialog": "Určitě chcete všechny ztišit? Po ztišení jim nebudete moct zvuk znovu zapnout, ale oni sami si můžou zvuk zapnout kdykoliv.", - "muteEveryoneDialogModerationOn": "", + "muteEveryoneDialogModerationOn": "Účastníci mohou kdykoli poslat žádost o slovo.", "muteEveryoneElseDialog": "Po ztišení jim nebudete moct zvuk znovu zapnout, ale oni sami si můžou zvuk zapnout kdykoliv.", "muteEveryoneElseTitle": "Umlčet všechny kromě {{whom}}?", - "muteEveryoneElsesVideoDialog": "", - "muteEveryoneElsesVideoTitle": "", + "muteEveryoneElsesVideoDialog": "Jakmile je kamera deaktivována, nebudete ji moci znovu zapnout, ale mohou ji kdykoli znovu zapnout.", + "muteEveryoneElsesVideoTitle": "Zastavit video všem kromě {{whom}}?", "muteEveryoneSelf": "sebe", "muteEveryoneStartMuted": "Nyní jsou všichni umlčeni", "muteEveryoneTitle": "Umlčet všechny?", - "muteEveryonesVideoDialog": "", - "muteEveryonesVideoDialogModerationOn": "", - "muteEveryonesVideoDialogOk": "", - "muteEveryonesVideoTitle": "", + "muteEveryonesVideoDialog": "Účastníci mohou své video kdykoli zapnout.", + "muteEveryonesVideoDialogModerationOn": "Účastníci mohou kdykoli poslat žádost o zapnutí svého videa.", + "muteEveryonesVideoDialogOk": "Zakázat", + "muteEveryonesVideoTitle": "Zastavit video všem?", "muteParticipantBody": "Po ztišení jim nebudete moct zvuk znovu zapnout, ale oni sami si můžou zvuk zapnout kdykoliv.", "muteParticipantButton": "Ztišit", - "muteParticipantsVideoBody": "", - "muteParticipantsVideoBodyModerationOn": "", - "muteParticipantsVideoButton": "", - "muteParticipantsVideoDialog": "", - "muteParticipantsVideoDialogModerationOn": "", - "muteParticipantsVideoTitle": "", - "noDropboxToken": "", - "password": "", + "muteParticipantsVideoBody": "Kameru nebudete moci znovu zapnout, ale mohou ji kdykoli znovu zapnout.", + "muteParticipantsVideoBodyModerationOn": "Kameru nebudete moci znovu zapnout a oni také ne.", + "muteParticipantsVideoButton": "Zastavit video", + "muteParticipantsVideoDialog": "Opravdu chcete vypnout kameru tohoto účastníka? Kameru nebudete moci znovu zapnout, ale mohou ji kdykoli znovu zapnout.", + "muteParticipantsVideoDialogModerationOn": "Opravdu chcete vypnout kameru tohoto účastníka? Kameru nebudete moci znovu zapnout a on také ne.", + "muteParticipantsVideoTitle": "Zakázat kameru tohoto účastníka?", + "noDropboxToken": "Nenalezen platný token Dropboxu", + "password": "Heslo", "passwordLabel": "Některý z účastníků toto setkání uzamkl. Pro připojení prosím zadejte $t(lockRoomPassword).", "passwordNotSupported": "Setkání nepodporuje nastavit $t(lockRoomPassword).", "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) není podporováno", "passwordRequired": "Požadováno $t(lockRoomPassword)", - "permissionCameraRequiredError": "", - "permissionErrorTitle": "", - "permissionMicRequiredError": "", - "popupError": "Váš prohlížeč blokuje vyskakovací okna. V nastavení zabezpečení prosím povolte vyskakování oken a zkuste to znovu.", - "popupErrorTitle": "Vyskakovací okno je zablokované", + "permissionCameraRequiredError": "Pro účast na konferencích s videem je vyžadováno povolení kamery. Udělte to prosím v Nastavení", + "permissionErrorTitle": "Vyžaduje se povolení", + "permissionMicRequiredError": "Pro účast na konferencích se zvukem je vyžadováno povolení mikrofonu. Udělte to prosím v Nastavení", "readMore": "více", - "recentlyUsedObjects": "", + "recentlyUsedObjects": "Vaše nedávno použité předměty", "recording": "Nahrávání", - "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Není možné, pokud je aktivní živý přenos", "rejoinNow": "Znovu se připojit", "remoteControlAllowedMessage": "{{user}} přijal(a) vaši žádost o dálkové ovládání!", "remoteControlDeniedMessage": "{{user}} odmítl(a) vaši žádost o dálkové ovládání!", @@ -347,51 +401,59 @@ "remoteControlShareScreenWarning": "Nezapomeňte, že stiskem \"Povolit\" budete sdílet svou obrazovku!", "remoteControlStopMessage": "Relace dálkového ovládání skončila!", "remoteControlTitle": "Dálkové ovládání počítače", - "remoteUserControls": "", + "remoteUserControls": "Vzdálené ovládání uživatele {{username}}", "removePassword": "Odstranit $t(lockRoomPassword)", "removeSharedVideoMsg": "Opravdu chcete odstranit sdílené video?", "removeSharedVideoTitle": "Odstranit sdílené video", + "renameBreakoutRoomLabel": "Nazev místnosti", + "renameBreakoutRoomTitle": "Přejmenovat podmístnost", "reservationError": "Systémová chyba rezervace", "reservationErrorMsg": "Chyba: {{code}}, zpráva: {{msg}}", "retry": "Opakovat", "screenSharingAudio": "Sdílet zvuk", - "screenSharingFailed": "Jejda! Něco se pokazilo. Nedovedli jsme spustit sdílení obrazovky!", + "screenSharingFailed": "Jejda! Něco se pokazilo. Nedovedlo se spustit sdílení obrazovky!", "screenSharingFailedTitle": "Sdílení obrazovky selhalo!", "screenSharingPermissionDeniedError": "Jejda! Něco se pokazilo s vaším oprávněním sdílet obrazovku. Obnovte prosím stránku a zkuste to znovu.", - "searchInSalesforce": "", - "searchResults": "", - "searchResultsDetailsError": "", - "searchResultsError": "", - "searchResultsNotFound": "", - "searchResultsTryAgain": "", + "searchInSalesforce": "Hledat v Salesforce", + "searchResults": "Výsledky vyhledávání ({{count}})", + "searchResultsDetailsError": "Při načítání dat vlastníka se něco pokazilo.", + "searchResultsError": "Při načítání dat se něco pokazilo.", + "searchResultsNotFound": "Nebyly nalezeny žádné výsledky vyhledávání.", + "searchResultsTryAgain": "Zkuste použít alternativní klíčová slova.", "sendPrivateMessage": "Nedávno vám přišla soukromá zpráva. Chcete na ni odpovědět soukromě, nebo chcete poslat zprávu do skupiny?", "sendPrivateMessageCancel": "Poslat do skupiny", "sendPrivateMessageOk": "Poslat soukromě", "sendPrivateMessageTitle": "Poslat soukromě?", "serviceUnavailable": "Služba není dostupná", "sessTerminated": "Volání ukončeno", - "sessionRestarted": "", - "shareAudio": "", - "shareAudioTitle": "", - "shareAudioWarningD1": "", - "shareAudioWarningD2": "", - "shareAudioWarningH1": "", - "shareAudioWarningTitle": "", - "shareMediaWarningGenericH2": "", - "shareScreenWarningD1": "", - "shareScreenWarningD2": "", - "shareScreenWarningH1": "", - "shareScreenWarningTitle": "", + "sessTerminatedReason": "Setkání byla ukončena", + "sessionRestarted": "Hovor byl restartován kvůli problému s připojením.", + "shareAudio": "Pokračovat", + "shareAudioAltText": "chcete-li sdílet požadovaný obsah, přejděte na \"Karta prohlížeče\", vyberte obsah, zaškrtněte políčko \"sdílet zvuk\" a poté klikněte na tlačítko \"sdílet\"", + "shareAudioTitle": "Jak sdílet zvuk", + "shareAudioWarningD1": "před sdílením zvuku musíte zastavit sdílení obrazovky.", + "shareAudioWarningD2": "musíte restartovat sdílení obrazovky a zaškrtnout možnost \"sdílet zvuk\".", + "shareAudioWarningH1": "Pokud chcete sdílet pouze zvuk:", + "shareAudioWarningTitle": "Před sdílením zvuku musíte zastavit sdílení obrazovky", + "shareMediaWarningGenericH2": "Pokud chcete sdílet obrazovku a zvuk", + "shareScreenWarningD1": "před sdílením obrazovky musíte ukončit sdílení zvuku.", + "shareScreenWarningD2": "musíte ukončit sdílení zvuku, spustit sdílení obrazovky a zaškrtnout možnost \"sdílet zvuk\".", + "shareScreenWarningH1": "Pokud chcete sdílet pouze svou obrazovku:", + "shareScreenWarningTitle": "Před sdílením obrazovky musíte ukončit sdílení zvuku", + "shareVideoConfirmPlay": "Chystáte se otevřít externí web. Chcete pokračovat?", + "shareVideoConfirmPlayTitle": "{{name}} s vámi sdílí video.", "shareVideoLinkError": "Zadejte prosím správný odkaz videa.", + "shareVideoLinkStopped": "Video od uživatele {{name}} bylo zastaveno.", "shareVideoTitle": "Sdílet obraz", "shareYourScreen": "Sdílet obrazovku", "shareYourScreenDisabled": "Sdílení obrazovky vypnuto.", - "sharedVideoDialogError": "", - "sharedVideoLinkPlaceholder": "", - "start": "", + "sharedVideoDialogError": "Chyba: Neplatná nebo zakázaná adresa URL", + "sharedVideoLinkPlaceholder": "Odkaz na YouTube nebo přímý odkaz na video", + "show": "Zobrazit", + "start": "Spustit ", "startLiveStreaming": "Spustit živý přenos", "startRecording": "Spustit záznam", - "startRemoteControlErrorMessage": "", + "startRemoteControlErrorMessage": "Při pokusu o spuštění relace vzdáleného ovládání došlo k chybě!", "stopLiveStreaming": "Zastavit živý přenos", "stopRecording": "Zastavit nahrávání", "stopRecordingWarning": "Určitě chcete zastavit nahrávání?", @@ -400,16 +462,42 @@ "thankYou": "Děkujeme, že používáte {{appName}}!", "token": "token", "tokenAuthFailed": "Bohužel nemáte povoleno se k tomuto volání připojit.", + "tokenAuthFailedReason": { + "audInvalid": "", + "contextNotFound": "", + "expInvalid": "", + "featureInvalid": "", + "featureValueInvalid": "", + "featuresNotFound": "", + "headerNotFound": "", + "issInvalid": "", + "kidMismatch": "", + "kidNotFound": "", + "nbfFuture": "", + "nbfInvalid": "", + "payloadNotFound": "", + "tokenExpired": "" + }, "tokenAuthFailedTitle": "Ověření selhalo", - "transcribing": "", + "tokenAuthFailedWithReasons": "Litujeme, k tomuto hovoru se nemůžete připojit. Možné důvody: {{reason}}", + "tokenAuthUnsupported": "Adresa URL tokenu není podporována.", + "transcribing": "Přepisování", "unlockRoom": "Odstranit $t(lockRoomPassword) setkání", - "user": "", - "userIdentifier": "", + "user": "Uživatel", + "userIdentifier": "Identifikátor uživatele", "userPassword": "uživatelské heslo", - "videoLink": "", - "viewUpgradeOptions": "", - "viewUpgradeOptionsContent": "", - "viewUpgradeOptionsTitle": "", + "verifyParticipantConfirm": "Shodují se", + "verifyParticipantDismiss": "Neshodují se", + "verifyParticipantQuestion": "EXPERIMENTÁLNÍ: Zeptejte se účastníka {{participantName}}, zda vidí stejný obsah ve stejném pořadí.", + "verifyParticipantTitle": "Ověření uživatele", + "videoLink": "Odkaz na video", + "viewUpgradeOptions": "Zobrazit možnosti upgradu", + "viewUpgradeOptionsContent": "Chcete-li získat neomezený přístup k prémiovým funkcím, jako je nahrávání, přepisy, streamování RTMP a další, budete muset svůj tarif upgradovat.", + "viewUpgradeOptionsTitle": "Objevili jste prémiovou funkci!", + "whiteboardLimitContent": "Litujeme, byl dosažen limit souběžných uživatelů tabule.", + "whiteboardLimitReference": "Pro více informací navštivte", + "whiteboardLimitReferenceUrl": "naše webové stránky", + "whiteboardLimitTitle": "Použití tabule je omezeno", "yourEntireScreen": "Celá vaše obrazovka" }, "documentSharing": { @@ -422,22 +510,27 @@ "title": "Vložit toto setkání" }, "feedback": { + "accessibilityLabel": { + "yourChoice": "Vaše volba: {{rating}}" + }, "average": "Průměrná", "bad": "Špatná", "detailsLabel": "Řekněte nám o tom víc.", "good": "Dobrá", "rateExperience": "Ohodnoťte svoji zkušenost s videohovorem", - "star": "", + "star": "Hvězdička", "veryBad": "Velmi špatná", "veryGood": "Velmi dobrá" }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Miniatury videí" + } + }, "giphy": { "noResults": "Nic nenalezeno :(", "search": "Prohledat GIPHY" }, - "helpView": { - "title": "Centrum pomoci" - }, "incomingCall": { "answer": "Odpovědět", "audioCallTitle": "Příchozí hovor", @@ -456,17 +549,17 @@ "dialInConferenceID": "PIN:", "dialInNotSupported": "Omlouváme se, ale vytáčení není nyní podporováno.", "dialInNumber": "Telefonní číslo", - "dialInSummaryError": "", + "dialInSummaryError": "Chyba při načítání informací o telefonickém připojení. Zkuste to znovu později.", "dialInTollFree": "Zdarma", "genericError": "Ups, něco se pokazilo.", "inviteLiveStream": "K zobrazení živého vysílání tohoto meetingu, klikněte na tento odkaz: {{url}}", "invitePhone": "Pro připojení telefonicky použijte: {{number}},,{{conferenceID}}#\n", - "invitePhoneAlternatives": "", - "inviteSipEndpoint": "", - "inviteTextiOSInviteUrl": "", - "inviteTextiOSJoinSilent": "", - "inviteTextiOSPersonal": "", - "inviteTextiOSPhone": "", + "invitePhoneAlternatives": "Hledáte jiné číslo pro připojení po telefonu?\nZobrazit čísla pro připojení po telefonu: {{url}}\n\n\nPokud se také připojujete po telefonu přes pokojový telefon, připojte se bez připojení ke zvuku: {{silentUrl}}", + "inviteSipEndpoint": "Chcete-li se připojit pomocí adresy SIP, zadejte toto: {{sipUri}}", + "inviteTextiOSInviteUrl": "Chcete-li se připojit, klikněte na následující odkaz: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "Pokud se připojujete přes pokojový telefon, použijte tento odkaz pro připojení bez připojení ke zvuku: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}} vás zve na schůzku.", + "inviteTextiOSPhone": "Chcete-li se připojit telefonicky, použijte toto číslo: {{number}},,{{conferenceID}#. Pokud hledáte jiné číslo, toto je úplný seznam: {{didUrl}}.", "inviteURLFirstPartGeneral": "Dostali jste pozvánku připojit se k setkání.", "inviteURLFirstPartPersonal": "{{name}} vás zve do setkání.", "inviteURLSecondPart": "\nPřidejte se k setkání:\n{{url}}\n", @@ -476,14 +569,19 @@ "noNumbers": "Žádná čísla pro připojení po telefonu.", "noPassword": "Bez hesla", "noRoom": "Nebyla vybrána místnost pro připojení po telefonu.", + "noWhiteboard": "Tabuli se nepodařilo načíst.", "numbers": "Čísla pro připojení telefonicky", "password": "$t(lockRoomPasswordUppercase):", - "sip": "", + "reachedLimit": "Dosáhli jste limitu svého plánu.", + "sip": "SIP adresa", + "sipAudioOnly": "Adresa pouze pro zvuk SIP", "title": "Sdílet", - "tooltip": "Sdílet odkaz k tomuto meetingu" + "tooltip": "Sdílet odkaz k tomuto meetingu", + "upgradeOptions": "Zkontrolujte prosím možnosti upgradu na", + "whiteboardError": "Při načítání tabule došlo k chybě. Zkuste to znovu později." }, "inlineDialogFailure": { - "msg": "", + "msg": "Trochu jsme klopýtli.", "retry": "Zkusit znovu", "support": "Podpora", "supportMsg": "Pokud se toto bude opakovat, kontaktujte" @@ -501,7 +599,7 @@ "focusLocal": "Vybrat váš obraz", "focusRemote": "Vybrat obraz jiného volajícího", "fullScreen": "Zobrazení / Opuštění režimu celé obrazovky", - "giphyMenu": "", + "giphyMenu": "Přepnout nabídku GIPHY", "keyboardShortcuts": "Klávesové zkratky", "localRecording": "Spravovat kvalitu hovoru", "mute": "Ztlumení nebo zesílení vašeho mikrofonu", @@ -510,7 +608,7 @@ "showSpeakerStats": "Zobrazení statistiky řečníka", "toggleChat": "Otevřít nebo zavřít chat", "toggleFilmstrip": "Zobrazit / Skrýt video náhledy účastníků", - "toggleParticipantsPane": "", + "toggleParticipantsPane": "Zobrazit nebo skrýt panel účastníků", "toggleScreensharing": "Přepnutí mezi kamerou a sdílením obrazovky", "toggleShortcuts": "Zobrazení / Skrytí klávesových zkratek", "videoMute": "Spuštění / Vypnutí vaší kamery" @@ -544,8 +642,9 @@ "on": "Živý přenos", "onBy": "{{name}} spustil/a živý přenos", "pending": "Živý přenos se spouští…", + "policyError": "Pokusili jste se spustit přímý přenos příliš rychle. Zkuste to znovu později!", "serviceName": "Služba pro živý přenos", - "sessionAlreadyActive": "", + "sessionAlreadyActive": "Tato relace se již nahrává nebo se vysílá živě.", "signIn": "Přihlásit se účtem Google", "signInCTA": "Přihlaste se nebo vložte svůj klíč ze služby YouTube.", "signOut": "Odhlásit se", @@ -557,22 +656,21 @@ "youtubeTerms": "Podmínky používání YouTube" }, "lobby": { - "allow": "Povolit", "backToKnockModeButton": "Žádné heslo, místo toho požádat o přijetí", - "chat": "", - "dialogTitle": "Mód předsálí", - "disableDialogContent": "Je zapnutý mód předsálí. Zajišťuje, aby do setkání nemohli vstoupit nežádoucí účastníci. Chcete jej vypnout?", + "chat": "Chat", + "dialogTitle": "Mód lobby", + "disableDialogContent": "Je zapnutý mód lobby. Zajišťuje, aby do setkání nemohli vstoupit nežádoucí účastníci. Chcete jej vypnout?", "disableDialogSubmit": "Vypnout", "emailField": "Zadejte svoje emailovou adresu", "enableDialogPasswordField": "Nastavte heslo (volitelně)", "enableDialogSubmit": "Zapnout", - "enableDialogText": "Mód předsálí vám umožňuje zabezpečit setkání tím, že se lidé mohou připojit až po formálním schválení moderátorem.", + "enableDialogText": "Mód lobby vám umožňuje zabezpečit setkání tím, že se lidé mohou připojit až po formálním schválení moderátorem.", "enterPasswordButton": "Zadat heslo setkání", "enterPasswordTitle": "Zadejte heslo pro připojení se k setkání", - "errorMissingPassword": "", + "errorMissingPassword": "Prosíme zadejte heslo setkání", "invalidPassword": "Chybné heslo", "joinRejectedMessage": "Moderátor zamítl vaši žádost o připojení.", - "joinRejectedTitle": "", + "joinRejectedTitle": "Žádost o připojení zamítnuta.", "joinTitle": "Vstoupit do setkání", "joinWithPasswordMessage": "Pokus o připojení pomocí hesla, prosím čekejte…", "joiningMessage": "K setkání se připojíte, až někdo přijme vaši žádost", @@ -581,18 +679,18 @@ "knockButton": "Požádat o vstup", "knockTitle": "Někdo chce vstoupit do setkání", "knockingParticipantList": "Seznam zájemců", - "lobbyChatStartedNotification": "", - "lobbyChatStartedTitle": "", + "lobbyChatStartedNotification": "{{moderator}} zahájil chat v lobby s {{attendee}}", + "lobbyChatStartedTitle": "{{moderátor}} s vámi zahájil chat v lobby.", + "lobbyClosed": "Lobby bylo uzavřeno.", "nameField": "Zadejte své jméno", "notificationLobbyAccessDenied": "{{originParticipantName}} zamítl/a žádost o vstup od {{targetParticipantName}}", "notificationLobbyAccessGranted": "{{originParticipantName}} schválil/a žádost o vstup od {{targetParticipantName}}", - "notificationLobbyDisabled": "{{originParticipantName}} vypnul/a předsálí", - "notificationLobbyEnabled": "{{originParticipantName}} zapnul/a předsálí", - "notificationTitle": "Předsálí", - "passwordField": "Zadejte heslo setkání", + "notificationLobbyDisabled": "{{originParticipantName}} vypnul/a lobby", + "notificationLobbyEnabled": "{{originParticipantName}} zapnul/a lobby", + "notificationTitle": "Lobby", "passwordJoinButton": "Vstoupit", - "title": "Předsálí", - "toggleLabel": "Zapnout předsálí" + "title": "Lobby", + "toggleLabel": "Zapnout lobby" }, "localRecording": { "clientState": { @@ -609,18 +707,21 @@ "localRecording": "Místní nahrávání", "me": "Já", "messages": { - "engaged": "", - "finished": "", - "finishedModerator": "", - "notModerator": "" + "engaged": "Zapojeno místní nahrávání.", + "finished": "Relace nahrávání {{token}} dokončena. Zašlete prosím nahraný soubor moderátorovi.", + "finishedModerator": "Relace nahrávání {{token}} dokončena. Záznam místní trasy byl uložen. Požádejte ostatní účastníky, aby zaslali své nahrávky.", + "notModerator": "Nejste moderátor. Nelze spustit ani zastavit místní nahrávání." }, "moderator": "Moderátor", "no": "Ne", "participant": "Účastník", "participantStats": "Zobrazit statistiku účastníků", - "sessionToken": "", + "selectTabTitle": "🎥 Vyberte tuto kartu pro nahrávání", + "sessionToken": "Token relace", "start": "Spustit záznam", "stop": "Zastavit záznam", + "stopping": "Zastavení nahrávání", + "wait": "Počkejte prosím, než váš záznam uložíme", "yes": "Ano" }, "lockRoomPassword": "heslo", @@ -632,48 +733,60 @@ "me": "já", "notify": { "OldElectronAPPTitle": "Bezpečnostní zranitelnost!", - "allowAction": "", - "allowedUnmute": "", - "audioUnmuteBlockedDescription": "", - "audioUnmuteBlockedTitle": "", - "chatMessages": "", + "allowAction": "Povolit", + "allowedUnmute": "Můžete zapnout mikrofon, spustit kameru nebo sdílet obrazovku.", + "audioUnmuteBlockedDescription": "Operace zapnutí mikrofonu byla dočasně zablokována z důvodu omezení systému.", + "audioUnmuteBlockedTitle": "Odtlumení mikrofonu bylo zablokováno!", + "chatMessages": "Chatové zprávy", "connectedOneMember": "{{name}} se připojil/a", "connectedThreePlusMembers": "{{name}} a {{count}} dalších se připojili", "connectedTwoMembers": "{{first}} a {{second}} se připojili", + "connectionFailed": "Připojení se nezdařilo. Zkuste to znovu později!", + "dataChannelClosed": "Kvalita videa může být snížena", + "dataChannelClosedDescription": "Přemosťovací kanál je vypnutý, a proto může být kvalita videa omezena na nejnižší nastavení.", + "dataChannelClosedDescriptionWithAudio": "Přemosťovací kanál je vypnutý, a proto může dojít k přerušení zvuku a obrazu.", + "dataChannelClosedWithAudio": "Kvalita zvuku a videa může být snížena", + "disabledIframe": "Vkládání je určeno pouze pro demo účely, takže tento hovor bude za {{timeout}} minut odpojen.", + "disabledIframeSecondary": "Vložení domény {{domain}} je určeno pouze pro demo účely, takže tento hovor bude za {{timeout}} minut odpojen. Pro produkční vkládání použijte prosím Jitsi as a service!", "disconnected": "odpojeno", - "displayNotifications": "", + "displayNotifications": "Zobrazit upozornění pro", + "dontRemindMe": "Nepřipomínej mi to", "focus": "Vybrat konferenci", "focusFail": "{{component}} není k dispozici - další pokus za {{ms}} s", - "gifsMenu": "", - "groupTitle": "", - "hostAskedUnmute": "", + "gifsMenu": "GIPHY", + "groupTitle": "Oznámení", + "hostAskedUnmute": "Moderátor by chtěl, abyste promluvil", + "invalidTenant": "Neplatný tenant", + "invalidTenantHyphenDescription": "Tenant, kterého používáte, je neplatný (začíná nebo končí na '-').", + "invalidTenantLengthDescription": "Tenant, kterého používáte, je příliš dlouhý.", "invitedOneMember": "{{name}} je pozván/a", "invitedThreePlusMembers": "{{name}} a {{count}} dalších jsou pozváni", "invitedTwoMembers": "{{first}} a {{second}} jsou pozváni", + "joinMeeting": "Připojte se", "kickParticipant": "{{kicker}} vyhodil/a účastníka {{kicked}}", - "leftOneMember": "", - "leftThreePlusMembers": "", - "leftTwoMembers": "", - "linkToSalesforce": "", - "linkToSalesforceDescription": "", - "linkToSalesforceError": "", - "linkToSalesforceKey": "", - "linkToSalesforceProgress": "", - "linkToSalesforceSuccess": "", - "localRecordingStarted": "", - "localRecordingStopped": "", + "leftOneMember": "{{name}} opustil schůzku", + "leftThreePlusMembers": "{{name}} a mnoho dalších opustilo schůzku", + "leftTwoMembers": "{{first}} a {{second}} opustili schůzku", + "linkToSalesforce": "Odkaz do Salesforce", + "linkToSalesforceDescription": "Souhrn schůzky můžete propojit s objektem Salesforce.", + "linkToSalesforceError": "Propojení schůzky se Salesforce se nezdařilo", + "linkToSalesforceKey": "Propojit tuto schůzku", + "linkToSalesforceProgress": "Propojování schůzky se Salesforce…", + "linkToSalesforceSuccess": "Schůzka byla propojena se Salesforce", + "localRecordingStarted": "{{name}} zahájil místní nahrávání.", + "localRecordingStopped": "{{name}} zastavil místní nahrávání.", "me": "Já", - "moderationInEffectCSDescription": "", - "moderationInEffectCSTitle": "", - "moderationInEffectDescription": "", - "moderationInEffectTitle": "", - "moderationInEffectVideoDescription": "", - "moderationInEffectVideoTitle": "", - "moderationRequestFromModerator": "", - "moderationRequestFromParticipant": "", - "moderationStartedTitle": "", - "moderationStoppedTitle": "", - "moderationToggleDescription": "", + "moderationInEffectCSDescription": "Pokud chcete sdílet svou obrazovku, zvedněte prosím ruku.", + "moderationInEffectCSTitle": "Sdílení obrazovky je blokováno moderátorem", + "moderationInEffectDescription": "Pokud chcete mluvit, zvedněte prosím ruku.", + "moderationInEffectTitle": "Váš mikrofon je ztlumen moderátorem", + "moderationInEffectVideoDescription": "Chcete-li spustit fotoaparát, zvedněte prosím ruku.", + "moderationInEffectVideoTitle": "Vaše kamera je blokována moderátorem", + "moderationRequestFromModerator": "Hostitel by chtěl, abyste zapnuli zvuk", + "moderationRequestFromParticipant": "Chce mluvit", + "moderationStartedTitle": "Moderování začalo", + "moderationStoppedTitle": "Moderování skončilo", + "moderationToggleDescription": "od {{participantDisplayName}}", "moderator": "Moderátorská práva udělena!", "muted": "Konverzaci jste zahájili se ztlumeným zvukem.", "mutedRemotelyDescription": "Až budete chtít mluvit, můžete si mikrofon zapnout. Pak se zase ztište, aby se v setkání omezil hluk.", @@ -682,87 +795,128 @@ "newDeviceAction": "Použít", "newDeviceAudioTitle": "Detekováno nové zvukové zařízení", "newDeviceCameraTitle": "Detekována nová kamera", - "noiseSuppressionDesktopAudioDescription": "", - "noiseSuppressionFailedTitle": "", - "noiseSuppressionNoTrackDescription": "", - "noiseSuppressionStereoDescription": "", + "nextToSpeak": "Jste další v řadě, kdo promluví", + "noiseSuppressionDesktopAudioDescription": "Extra potlačení šumu nelze povolit při sdílení zvuku na ploše. Vypněte jej a zkuste to znovu.", + "noiseSuppressionFailedTitle": "Nepodařilo se spustit dodatečné potlačení hluku", + "noiseSuppressionStereoDescription": "Extra potlačení šumu není aktuálně podporováno u stereo zvuku.", "oldElectronClientDescription1": "Zdá se, že používáte zastaralou verzi klienta Jitsi Meet, který má známé bezpečnostní zranitelnosti. Aktualizujte prosím na ", "oldElectronClientDescription2": "nejnovější sestavení", "oldElectronClientDescription3": " ihned!", - "participantWantsToJoin": "", - "participantsWantToJoin": "", + "participantWantsToJoin": "Chce se připojit k setkání", + "participantsWantToJoin": "Chce se připojit k setkání", "passwordRemovedRemotely": "Jiný účastník odebral $t(lockRoomPassword)", "passwordSetRemotely": "Jiný účastník nastavil $t(lockRoomPassword)", - "raiseHandAction": "", + "raiseHandAction": "Zvednout ruku", "raisedHand": "{{name}} by chtěl/a mluvit", - "raisedHands": "", - "reactionSounds": "", - "reactionSoundsForAll": "", - "screenShareNoAudio": "", - "screenShareNoAudioTitle": "", - "selfViewTitle": "", + "raisedHands": "{{participantName}} a {{raisedHands}} dalších lidí", + "reactionSounds": "Zakázat zvuky", + "reactionSoundsForAll": "Zakázat zvuky pro všechny", + "screenShareNoAudio": "Na obrazovce výběru okna nebylo zaškrtnuto políčko Sdílet zvuk.", + "screenShareNoAudioTitle": "Systémový zvuk nelze sdílet!", + "screenSharingAudioOnlyDescription": "Upozorňujeme, že sdílením obrazovky ovlivňujete režim \"Nejlepší výkon\" a využijete větší šířku pásma.", + "screenSharingAudioOnlyTitle": "Režim \"Nejlepší výkon\".", + "selfViewTitle": "Vlastní zobrazení můžete kdykoli zrušit v nastavení", "somebody": "Někdo", "startSilentDescription": "Připojte se znovu, aby se zvuk zapnul", "startSilentTitle": "Připojil/a jste se bez zvukového výstupu!", "suboptimalBrowserWarning": "Obáváme se, že vás nečeká právě nejlepší zážitek. Snažíme se to zlepšit, ale prozatím prosím zkuste použít některý z plně podporovaných prohlížečů.", "suboptimalExperienceTitle": "Varování o prohlížeči", + "suggestRecordingAction": "Spustit", + "suggestRecordingDescription": "Chcete spustit nahrávání?", + "suggestRecordingTitle": "Nahrajte toto setkání", "unmute": "Zrušit ztišení", - "videoMutedRemotelyDescription": "", - "videoMutedRemotelyTitle": "", - "videoUnmuteBlockedDescription": "", - "videoUnmuteBlockedTitle": "", - "viewLobby": "", - "waitingParticipants": "" + "videoMutedRemotelyDescription": "Vždy jej můžete znovu zapnout.", + "videoMutedRemotelyTitle": "Vaše video bylo vypnuto uživatelem {{participantDisplayName}}", + "videoUnmuteBlockedDescription": "Zapnutí zvuku kamery a sdílení plochy byly dočasně zablokovány kvůli systémovým limitům.", + "videoUnmuteBlockedTitle": "Zapnutí zvuku kamery a sdílení plochy je zablokováno!", + "viewLobby": "Zobrazit lobby", + "viewParticipants": "Zobrazit účastníky", + "viewVisitors": "Zobrazit návštěvníky", + "waitingParticipants": "{{waitingParticipants}} osoby", + "waitingVisitors": "Návštěvníci čekající ve frontě: {{waitingVisitors}}", + "waitingVisitorsTitle": "Setkání zatím není živé!", + "whiteboardLimitDescription": "Uložte si svůj postup, protože brzy bude dosažen limit uživatelů a tabule se zavře.", + "whiteboardLimitTitle": "Použití tabule" }, "participantsPane": { "actions": { - "reject": "Odmítnout" + "admit": "Připustit", + "admitAll": "Připustit všechny", + "allow": "Povolit účastníkům:", + "allowVideo": "Povolit video", + "askUnmute": "Požádat o zapnutí zvuku", + "audioModeration": "Zapnout zvuk sami sobě", + "blockEveryoneMicCamera": "Zablokovat všem mikrofon a kameru", + "breakoutRooms": "Podmístnosti", + "goLive": "Spustit živé vysílání", + "invite": "Pozvat někoho", + "lowerAllHands": "Spustit všechny ruce", + "lowerHand": "Spusit ruce", + "moreModerationActions": "Více možností moderování", + "moreModerationControls": "Více možností moderování", + "moreParticipantOptions": "Více možností pro účastníky", + "mute": "Ztlumit", + "muteAll": "Ztlumit všechny", + "muteEveryoneElse": "Ztlumit všechny ostatní", + "reject": "Odmítnout", + "stopEveryonesVideo": "Zastavit všem video", + "stopVideo": "Zastavit video", + "unblockEveryoneMicCamera": "Odblokovat všem mikrofon a kameru", + "videoModeration": "Spustit jejich video" }, - "close": "", - "header": "", + "close": "Zavřít", "headings": { - "lobby": "", - "participantsList": "", - "waitingLobby": "" + "lobby": "Lobby ({{count}})", + "participantsList": "Účastníci setkání ({{count}})", + "visitorInQueue": " (čeká {{count}})", + "visitorRequests": " (požřadavky {{count}})", + "visitors": "Visitors {{count}}", + "waitingLobby": "Čekání v lobby ({{count}})" }, - "search": "Hledat účastníky" + "search": "Hledat účastníky", + "title": "Účastníci" }, "passwordDigitsOnly": "Až {{number}} číslic", "passwordSetRemotely": "nastaveno jiným účastníkem", - "pinnedParticipant": "", + "pinParticipant": "{{participantName}} - Připnout", + "pinnedParticipant": "Účastník je připnut", "polls": { "answer": { + "edit": "Upravit", + "send": "Odeslat", "skip": "Přeskočit", "submit": "Odeslat" }, - "by": "Od {{ name }}", + "by": "Od {{name}}", + "closeButton": "Zavřít anketu", "create": { - "addOption": "", - "answerPlaceholder": "", - "cancel": "", - "create": "", - "pollOption": "", - "pollQuestion": "", - "questionPlaceholder": "", - "removeOption": "", - "send": "" + "addOption": "Přidat možnost", + "answerPlaceholder": "Možnost {{index}}", + "cancel": "Zrušit", + "create": "Vytvořit anketu", + "pollOption": "Možnost ankety {{index}}", + "pollQuestion": "Anketní otázka", + "questionPlaceholder": "Položit otázku", + "removeOption": "Vyjmout možnost", + "save": "Uložit", + "send": "Odeslat" }, "errors": { "notUniqueOption": "Možnosti musí být jedinečné" }, "notification": { - "description": "", - "title": "" + "description": "Chcete-li hlasovat, otevřete kartu ankety", + "title": "K tomuto setkání byla přidána nová anketa" }, "results": { "changeVote": "Změnit hlasování", - "empty": "", + "empty": "Na setkání zatím nejsou žádné ankety. Spusťte anketu zde!", "hideDetailedResults": "Skrýt detaily", "showDetailedResults": "Zobrazit detaily", "vote": "Hlasovat" } }, - "poweredby": "poháněno", + "poweredby": "provozováno", "prejoin": { "audioAndVideoError": "Chyba zvuku a videa:", "audioDeviceProblem": "Nastal problém s vaším zvukovým zařízením", @@ -774,9 +928,11 @@ "configuringDevices": "Nastavují se zařízení…", "connectedWithAudioQ": "Jste připojen/a se zvukem?", "connection": { + "failed": "Test připojení se nezdařil!", "good": "Vaše internetové připojení vypadá dobře!", "nonOptimal": "Vaše internetové připojení není optimální", - "poor": "Máte slabé internetové připojení" + "poor": "Máte slabé internetové připojení", + "running": "Probíhá test připojení…" }, "connectionDetails": { "audioClipping": "Váš zvuk bude pravděpodobně osekaný.", @@ -785,6 +941,7 @@ "goodQuality": "Bezva! Budete mít skvělou kvalitu médií.", "noMediaConnectivity": "Pro tento test se nám nepovedlo navázat mediální připojení. Většinou za to může firewall nebo NAT.", "noVideo": "Vaše video bude pravděpodobně hrozné.", + "testFailed": "Při testu připojení došlo k neočekávaným problémům, ale to nemusí mít vliv na vaše spojení.", "undetectable": "Pokud v prohlížeči stále nemůžete volat, ujistěte se, že máte správně nastavené reproduktory, mikrofon a kameru, že jste v prohlížeči povolil/a přístup k mikrofonu a kameře a že máte aktuální verzi prohlížeče. Pokud stále narážíte na potíže, kontaktujte vývojáře této webové aplikace.", "veryPoorConnection": "Kvalita vašeho hovoru pravděpodobně bude opravdu hrozná.", "videoFreezing": "Video vám pravděpodobně bude zamrzávat, přepínat se do černé a bude kostkované.", @@ -802,63 +959,62 @@ "errorDialOutFailed": "Nepovedlo se vytočit. Hovor selhal", "errorDialOutStatus": "Nepovedlo se zjistit stav vytáčení", "errorMissingName": "Před vstupem do setkání prosím zadejte své jméno", - "errorNoPermissions": "", + "errorNoPermissions": "Musíte povolit přístup k mikrofonu a kameře", "errorStatusCode": "Vytáčení selhalo, chybový kód: {{status}}", "errorValidation": "Selhalo ověření čísla", "iWantToDialIn": "Chci se připojit po telefonu", "initiated": "Hovor zahájen", "joinAudioByPhone": "Vstoupit se zvukem přes telefon", "joinMeeting": "Vstoupit do setkání", - "joinMeetingInLowBandwidthMode": "", + "joinMeetingInLowBandwidthMode": "Připojte se v režimu nízké šířky pásma", "joinWithoutAudio": "Vstoupit bez zvuku", - "keyboardShortcuts": "", + "keyboardShortcuts": "Povolit klávesové zkratky", "linkCopied": "Odkaz se zkopíroval do schránky", "lookGood": "Váš mikrofon zní, jako že funguje správně", "or": "nebo", "premeeting": "Před setkáním", + "proceedAnyway": "Přesto pokračujte", + "recordingWarning": "Ostatní účastníci mohou tento hovor nahrávat", "screenSharingError": "Chyba sdílení obrazovky:", - "showScreen": "Zapnout obrazovku před setkáním", "startWithPhone": "Začít se zvukem přes telefon", + "unsafeRoomConsent": "Chápu rizika, chci se připojit k setkání", "videoOnlyError": "Chyba videa:", "videoTrackError": "Nepovedlo se vytvořit stopu videa.", "viewAllNumbers": "zobrazit všechna čísla" }, "presenceStatus": { "busy": "Obsazeno", - "calling": "Vytáčím...", + "calling": "Vytáčím…", "connected": "Spojování", - "connecting": "Spojování...", - "connecting2": "Spojování*...", + "connecting": "Spojování…", + "connecting2": "Spojování*…", "disconnected": "Odpojeno", "expired": "Spojení vypršelo", "ignored": "Spojení ignorováno", - "initializingCall": "Nastavuji hovor...", + "initializingCall": "Nastavuji hovor…", "invited": "Pozván", "rejected": "Odmítnuto", - "ringing": "Zvoní..." - }, - "privacyView": { - "header": "" + "ringing": "Zvoní…" }, "profile": { - "avatar": "", + "avatar": "avatar", "setDisplayNameLabel": "Nastavte si jméno", "setEmailInput": "Zadejte email", "setEmailLabel": "Nastavte si email vašeho Gravataru", "title": "Profil" }, "raisedHand": "Chtěl(a) bych mluvit", - "raisedHandsLabel": "", + "raisedHandsLabel": "Počet zvednutých rukou", "record": { "already": { - "linked": "" + "linked": "Schůzka je již propojena s tímto objektem Salesforce." }, "type": { - "account": "", - "contact": "", - "lead": "", - "opportunity": "", - "owner": "" + "account": "Účet", + "contact": "Kontakt", + "lead": "Zájemce", + "opportunity": "Příležitost", + "owner": "Vlastník" } }, "recording": { @@ -867,65 +1023,76 @@ "beta": "BETA", "busy": "Snažíme se uvolnit zdroje pro nahrávání. Zkuste to prosím znovu za pár minut.", "busyTitle": "Nahrávací zdroje jsou zaneprázdněné", - "copyLink": "", + "copyLink": "Zkopírovat odkaz", "error": "Nahrávání selhalo. Zkuste to prosím znovu.", - "errorFetchingLink": "", + "errorFetchingLink": "Chyba při načítání odkazu na záznam.", "expandedOff": "Nahrávání skončilo.", "expandedOn": "Setkání se právě nahrává.", "expandedPending": "Spouští se nahrávání…", "failedToStart": "Nahrávání se nespustilo", "fileSharingdescription": "Sdílejte nahrávku s účastníky setkání", - "highlight": "", - "highlightMoment": "", - "highlightMomentDisabled": "", - "highlightMomentSuccess": "", - "highlightMomentSucessDescription": "", - "inProgress": "", + "highlight": "Zvýraznit", + "highlightMoment": "Zvýraznit moment", + "highlightMomentDisabled": "Můžete zvýraznit okamžiky zahájení nahrávání", + "highlightMomentSuccess": "Zvýrazněný okamžik", + "highlightMomentSucessDescription": "Váš zvýrazněný okamžik bude přidán do shrnutí setkání.", + "inProgress": "Probíhá nahrávání nebo živé vysílání", "limitNotificationDescriptionNative": "Kvůli vysokému zájmu bude vaše nahrávka omezena na nejvýše {{limit}} min. Pro neomezené nahrávání zkuste <3>{{app}}.", "limitNotificationDescriptionWeb": "Kvůli vysokému zájmu bude vaše nahrávka omezena na nejvýše {{limit}} min. Pro neomezené nahrávání zkuste {{app}}.", - "linkGenerated": "", - "live": "ŽIVĚ", - "localRecordingNoNotificationWarning": "", - "localRecordingNoVideo": "", - "localRecordingStartWarning": "", - "localRecordingStartWarningTitle": "", - "localRecordingVideoStop": "", - "localRecordingVideoWarning": "", - "localRecordingWarning": "", + "linkGenerated": "Vygenerovali jsme odkaz na vaši nahrávku.", + "localRecordingNoNotificationWarning": "Nahrávka nebude oznámena ostatním účastníkům. Budete jim muset dát vědět, že schůzka je nahrána.", + "localRecordingNoVideo": "Video se nenahrává", + "localRecordingStartWarning": "Před opuštěním schůzky se ujistěte, že jste nahrávání zastavili, abyste jej mohli uložit.", + "localRecordingStartWarningTitle": "Zastavte záznam, abyste jej uložili", + "localRecordingVideoStop": "Zastavením videa se zastaví také místní nahrávání. Opravdu chcete pokračovat?", + "localRecordingVideoWarning": "Chcete-li nahrát video, musíte jej mít zapnutý při zahájení nahrávání", + "localRecordingWarning": "Ujistěte se, že jste vybrali aktuální kartu, abyste mohli použít správné video a zvuk.", "loggedIn": "Přihlášen/a jako {{userName}}", - "noStreams": "", + "noMicPermission": "Kanál mikrofonu nelze vytvořit. Udělte prosím povolení k použití mikrofonu.", + "noStreams": "Nebyl zjištěn žádný audio nebo video stream.", "off": "Nahrávání skončilo", "offBy": "{{name}} zastavil/a nahrávání", "on": "Nahrává se", "onBy": "{{name}} spustil/a nahrávání", - "onlyRecordSelf": "", + "onlyRecordSelf": "Nahrávat pouze moje audio a video streamy", "pending": "Připravuje se nahrávání setkání…", - "rec": "ZÁZ", - "saveLocalRecording": "", + "policyError": "Pokusili jste se spustit nahrávání příliš rychle. Zkuste to znovu později!", + "recordAudioAndVideo": "Záznam zvuku a videa", + "recordTranscription": "Přepis záznamu", + "saveLocalRecording": "Uložit záznamový soubor lokálně (Beta)", "serviceDescription": "Nahrávací služba uloží vaši nahrávku", - "serviceDescriptionCloud": "", - "serviceDescriptionCloudInfo": "", + "serviceDescriptionCloud": "Cloudové nahrávání", + "serviceDescriptionCloudInfo": "Nahrané schůzky jsou automaticky vymazány 24 hodin po jejich době záznamu.", "serviceName": "Nahrávací služba", - "sessionAlreadyActive": "", + "sessionAlreadyActive": "Tato relace se již nahrává nebo se vysílá živě.", + "showAdvancedOptions": "Pokročilé možnosti", "signIn": "Přihlásit se", "signOut": "Odhlásit se", + "surfaceError": "Vyberte prosím aktuální kartu.", "title": "Nahrávání", "unavailable": "Jejda! Služba {{serviceName}} není dostupná. Problém se snažíme vyřešit. Zkuste to prosím později.", "unavailableTitle": "Nahrávání nedostupné", - "uploadToCloud": "" + "uploadToCloud": "Nahrát do cloudu" }, - "screenshareDisplayName": "", + "screenshareDisplayName": "Obrazovka uživatele {{name}}", "sectionList": { "pullToRefresh": "Zatáhnutím obnovíte" }, "security": { "about": "Můžete pro setkání nastavit $t(lockRoomPassword). Účastníci budou muset $t(lockRoomPassword) zadat, než se budou moct do setkání připojit.", "aboutReadOnly": "Moderující účastníci můžou pro setkání nastavit $t(lockRoomPassword). Účastníci budou muset $t(lockRoomPassword) zadat, než se budou moct do setkání připojit.", - "header": "", - "insecureRoomNameWarning": "Název místnosti není bezpečný. Do konference se možná připojí nežádoucí účastníci. Zvažte zabezpečit setkání pomocí tlačítka zabezpečení." + "insecureRoomNameWarningNative": "Název místnosti není bezpečný. K vaší schůzce se mohou připojit nežádoucí účastníci. {{recommendAction}} Další informace o zabezpečení schůzky ", + "insecureRoomNameWarningWeb": "Název místnosti není bezpečný. K vaší schůzce se mohou připojit nežádoucí účastníci. {{recommendAction}} Další informace o zabezpečení schůzky naleznete zde.", + "title": "Možnosti zabezpečení", + "unsafeRoomActions": { + "meeting": "Zvažte zabezpečení schůzky pomocí bezpečnostního tlačítka.", + "prejoin": "Zvažte použití jedinečnějšího názvu schůzky.", + "welcome": "Zvažte použití jedinečnějšího názvu schůzky nebo vyberte jeden z návrhů." + } }, "settings": { - "buttonLabel": "", + "audio": "Zvuk", + "buttonLabel": "Nastavení", "calendar": { "about": "Integrace kalendáře {{appName}} slouží k bezpečnému přístupu k vašemu kalendáři, takže dovede zjistit nadcházející události.", "disconnect": "Odpojit", @@ -933,39 +1100,42 @@ "signedIn": "Právě se přistupuje ke kalendářním událostem pro {{email}}. Abyste zastavili přístup k událostem, klikněte na tlačítko Odpojit", "title": "Kalendář" }, - "desktopShareFramerate": "", - "desktopShareHighFpsWarning": "", - "desktopShareWarning": "", + "desktopShareFramerate": "Snímková frekvence sdílení plochy", + "desktopShareHighFpsWarning": "Vyšší snímková frekvence pro sdílení plochy může ovlivnit vaši šířku pásma. Aby se nové nastavení projevilo, musíte restartovat sdílení obrazovky.", + "desktopShareWarning": "Aby se nové nastavení projevilo, musíte restartovat sdílení obrazovky.", "devices": "Zařízení", "followMe": "Všichni sledují mě", - "framesPerSecond": "", - "incomingMessage": "", + "followMeRecorder": "Rekordér mě následuje", + "framesPerSecond": "snímků za sekundu", + "incomingMessage": "Příchozí zpráva", "language": "Jazyk", "loggedIn": "Přihlášen/a jako {{name}}", - "maxStageParticipants": "", + "maxStageParticipants": "Maximální počet účastníků, které lze připnout na hlavní pódium", "microphones": "Mikrofony", "moderator": "Moderátor", + "moderatorOptions": "Možnosti moderátora", "more": "Více", "name": "Jméno", "noDevice": "Žádné zařízení", - "participantJoined": "", - "participantKnocking": "", - "participantLeft": "", - "playSounds": "", - "reactions": "", - "sameAsSystem": "", - "screenTitle": "", + "notifications": "Oznámení", + "participantJoined": "Účastník se připojil", + "participantKnocking": "Účastník vstoupil do lobby", + "participantLeft": "Účastník odešel", + "playSounds": "Přehrávání zvuku na", + "reactions": "Reakce na setkání", + "sameAsSystem": "Stejné jako systém ({{label}})", "selectAudioOutput": "Zvukový výstup", "selectCamera": "Kamera", "selectMic": "Mikrofon", - "selfView": "", - "sounds": "", + "selfView": "Vlastní pohled", + "shortcuts": "Zkratky", "speakers": "Reproduktory", "startAudioMuted": "Při připojení všem ztlumit zvuk", - "startReactionsMuted": "", + "startReactionsMuted": "Ztlumit zvuky reakcí pro všechny", "startVideoMuted": "Při připojení všem vypnout kameru", - "talkWhileMuted": "", - "title": "Nastavení" + "talkWhileMuted": "Mluvte při ztlumení", + "title": "Nastavení", + "video": "Video" }, "settingsView": { "advanced": "Pokročilé", @@ -973,6 +1143,7 @@ "alertOk": "OK", "alertTitle": "Varování", "alertURLText": "Adresa URL k serveru je neplatná", + "apply": "Použít", "buildInfoSection": "Informace o sestavení", "conferenceSection": "Konference", "disableCallIntegration": "Vypnout integraci nativních hovorů", @@ -980,19 +1151,23 @@ "disableCrashReportingWarning": "Určitě chcete vypnout hlášení o pádu? Nastavení se uplatní, až restartujete aplikaci.", "disableP2P": "Vypnout mód Peer-To-Peer", "displayName": "Zobrazované jméno", - "displayNamePlaceholderText": "", + "displayNamePlaceholderText": "Např.: John Doe", "email": "Email", - "goTo": "", + "emailPlaceholderText": "email@example.com", + "gavatarMessage": "Pokud je váš e-mail spojen s účtem Gravatar, použijeme jej k zobrazení vašeho profilového obrázku.", + "goTo": "Přejít na", "header": "Nastavení", - "help": "", - "links": "", - "privacy": "", + "help": "Pomoc", + "links": "Odkazy", + "privacy": "Soukromí", "profileSection": "Profil", + "sdkVersion": "SDK verze", "serverURL": "URL serveru", "showAdvanced": "Zobrazit pokročilá nastavení", + "startCarModeInLowBandwidthMode": "Spusťte režim auta v režimu nízké šířky pásma", "startWithAudioMuted": "Začít se ztišeným zvukem", "startWithVideoMuted": "Začít s vypnutým videem", - "terms": "", + "terms": "Podmínky", "version": "Verze" }, "share": { @@ -1001,22 +1176,22 @@ }, "speaker": "Řečník", "speakerStats": { - "angry": "", - "disgusted": "", - "displayEmotions": "", - "fearful": "", - "happy": "", + "angry": "Rozzlobený", + "disgusted": "Znechucený", + "displayEmotions": "Zobrazit emoce", + "fearful": "Bojácný", + "happy": "Šťastný", "hours": "{{count}} h", "minutes": "{{count}} min", "name": "Jméno", - "neutral": "", - "sad": "", + "neutral": "Neutrální", + "sad": "Smutný", "search": "Prohledat", "searchHint": "Hledat účastníky", "seconds": "{{count}} s", "speakerStats": "Statistika řečníků", "speakerTime": "Mluvil/a již", - "surprised": "" + "surprised": "Překvapený" }, "startupoverlay": { "genericTitle": "Setkání vyžaduje přístup k vašemu mikrofonu a kameře.", @@ -1029,43 +1204,56 @@ "title": "Váš videohovor se přerušil, protože počítač přešel do režimu spánku." }, "termsView": { - "header": "" + "title": "Podmínky" }, - "toggleTopPanelLabel": "", + "toggleTopPanelLabel": "Přepnout horní panel", "toolbar": { "Settings": "Nastavení", "accessibilityLabel": { "Settings": "Přepnout nastavení", "audioOnly": "Přepnout režim pouze zvuku", "audioRoute": "Vybrat zvukové zařízení", - "boo": "", - "breakoutRoom": "Připojit se/opustit podmístnost", + "boo": "Bú", + "breakoutRooms": "Podmístnosti", "callQuality": "Spravovat kvalitu hovoru", "carmode": "Autorežim", "cc": "Přepnout titulky", "chat": "Přepnout okno zpráv", "clap": "Tleskat", + "closeChat": "Zavřít chat", + "closeMoreActions": "Zavřít nabídku dalších akcí", + "closeParticipantsPane": "Zavřít panel účastníků", "collapse": "Zabalit", "document": "Přepnout sdílený dokument", + "documentClose": "Zavřít sdílený dokument", + "documentOpen": "Otevřít sdílený dokument", "download": "Stáhnout naše aplikace", "embedMeeting": "Vložit setkání", "endConference": "Ukončit konferenci pro všechny", + "enterFullScreen": "Zobrazit přes celou obrazovku", + "enterTileView": "Dlaždicové zobrazení", + "exitFullScreen": "Ukončit zobrazení přes celou obrazovku", + "exitTileView": "Ukončit dlaždicové zobrazení", "expand": "Rozbalit", "feedback": "Poslat zpětnou vazbu", "fullScreen": "Přepnout na celou obrazovku", "giphy": "Zobrazit menu GIPHY", "grantModerator": "Pověřit moderátora", "hangup": "Opustit hovor", + "heading": "Panel nástrojů", "help": "Nápověda", + "hideWhiteboard": "Skrýt tabuli", "invite": "Pozvat lidi", "kick": "Vyhodit účastníka", "laugh": "Smích", "leaveConference": "Opustit konferenci", "like": "Palec nahoru", "linkToSalesforce": "Odkaz na Salesforce", - "lobbyButton": "Zapnout/vypnout mód předsálí", + "lobbyButton": "Zapnout/vypnout mód lobby", "localRecording": "Přepnout ovládání místního nahrávání", "lockRoom": "Přepnout heslo setkání", + "love": "Srdce", + "lowerHand": "Spustit ruku dolů", "moreActions": "Přepnout nabídku více činností", "moreActionsMenu": "Nabídka více činností", "moreOptions": "Ukázat více možností", @@ -1074,12 +1262,16 @@ "muteEveryoneElse": "Ztišit všechny ostatní", "muteEveryoneElsesVideoStream": "Zastavit video všech ostatních", "muteEveryonesVideoStream": "Ztišit video všech", + "muteGUMPending": "Připojování mikrofonu", "noiseSuppression": "Potlačení šumu", + "openChat": "Otevřít chat", "participants": "Účastníci", "pip": "Přepnout režim obrazu v obraze", "privateMessage": "Poslat soukromou zprávu", "profile": "Upravit váš profil", "raiseHand": "Přepnout zvednutí ruky", + "react": "Reakce na zprávy", + "reactions": "Reakce", "reactionsMenu": "Zobrazí / skryje menu reakcí", "recording": "Přepnout nahrávání", "remoteMute": "Ztišit účastníka", @@ -1093,14 +1285,20 @@ "sharedvideo": "Přepnout sdílení videa", "shortcuts": "Zobrazit zkratky", "show": "Zobrazit na stage", + "showWhiteboard": "Zobrazit tabuli", "silence": "Ticho", "speakerStats": "Statistika řečníků", + "stopScreenSharing": "Přestat sdílet vlastní obrazovku", + "stopSharedVideo": "Zastavit video", "surprised": "Překvapen", "tileView": "Přepnout dlaždicové zobrazení", "toggleCamera": "Přepnout kameru", "toggleFilmstrip": "Přepnout video náhledy", + "unmute": "Zapnout mikrofon", "videoblur": "Přepnout rozmazání videa", - "videomute": "Přepnout ztišení videa" + "videomute": "Přepnout ztišení videa", + "videomuteGUMPending": "Připojování kamery", + "videounmute": "Zapnpout kameru" }, "addPeople": "Přidat do hovoru účastníky", "audioOnlyOff": "Vypnout mód slabého připojení", @@ -1108,12 +1306,13 @@ "audioRoute": "Vybrat zvukové zařízení", "audioSettings": "Nastavení zvuku", "authenticate": "Ověřit", - "boo": "", + "boo": "Bú", "callQuality": "Spravovat kvalitu hovoru", "chat": "Otevřít / Zavřít zprávy", "clap": "Tleskat", "closeChat": "Zavřít zprávy", - "closeReactionsMenu": "Zavrít menu reakcí", + "closeParticipantsPane": "Zavřít panel účastníků", + "closeReactionsMenu": "Zavřít menu reakcí", "disableNoiseSuppression": "Vypnout potlačení šumu", "disableReactionSounds": "Vypnout zvuky reakcí", "documentClose": "Zavřít sdílený dokument", @@ -1121,6 +1320,7 @@ "download": "Stáhnout naše aplikace", "e2ee": "Šifrování end-to-end", "embedMeeting": "Vložit setkání", + "enableNoiseSuppression": "Povolit dodatečné potlačení hluku (BETA)", "endConference": "Ukončit konferenci pro všechny", "enterFullScreen": "Zvětšit na celou obrazovku", "enterTileView": "Zobrazit v dlaždicích", @@ -1130,23 +1330,26 @@ "giphy": "Zobrazit menu GIPHY", "hangup": "Odejít", "help": "Nápověda", + "hideWhiteboard": "Skrýt tabuli", "invite": "Pozvat lidi", "joinBreakoutRoom": "Připojit se k podmístnosti", "laugh": "Smích", - "leaveBreakoutRoom": "", - "leaveConference": "", + "leaveBreakoutRoom": "Opustit podmístnost", + "leaveConference": "Opustit setkání", "like": "Palec nahoru", - "linkToSalesforce": "", - "lobbyButtonDisable": "Vypnout mód předsálí", - "lobbyButtonEnable": "Zapnout mód předsálí", + "linkToSalesforce": "Odkaz na Salesforce", + "lobbyButtonDisable": "Vypnout mód lobby", + "lobbyButtonEnable": "Zapnout mód lobby", "login": "Přihlásit se", "logout": "Odhlásit se", + "love": "Srdce", "lowerYourHand": "Přestat se hlásit", "moreActions": "Více činností", "moreOptions": "Více možností", "mute": "Ztlumit / Zrušit ztlumení", "muteEveryone": "Ztišit všechny", "muteEveryonesVideo": "Ztišit video všech", + "muteGUMPending": "Připojování mikrofonu", "noAudioSignalDesc": "Pokud jste jej záměrně neztišili v nastavení systému nebo hardwaru, zvažte přepnout na jiné zařízení.", "noAudioSignalDescSuggestion": "Pokud jste jej záměrně neztišili v nastavení systému nebo hardwaru, zvažte přepnout na navrhované zařízení.", "noAudioSignalDialInDesc": "Můžete také zavolat po telefonu pomocí:", @@ -1156,65 +1359,62 @@ "noisyAudioInputDesc": "Zdá se, že váš mikrofon vydává hluk. Prosím zvažte ztlumit se nebo vyměnit zařízení.", "noisyAudioInputTitle": "Zdá se, že máte hlučný mikrofon!", "openChat": "Otevřít zprávy", - "openReactionsMenu": "", + "openReactionsMenu": "Otevřít nabídku reakcí", "participants": "Účastníci", "pip": "Přejít do módu obraz v obraze", "privateMessage": "Poslat soukromou zprávu", "profile": "Upravte si profil", "raiseHand": "Přihlásit se o slovo / Odhlásit", "raiseYourHand": "Přihlásit se o slovo", - "reactionBoo": "", - "reactionClap": "", - "reactionLaugh": "", - "reactionLike": "", - "reactionSilence": "", - "reactionSurprised": "", + "reactionBoo": "Odeslat reakci bú", + "reactionClap": "Odeslat reakci potlesk", + "reactionHeart": "Odeslat reakci srdce", + "reactionLaugh": "Odeslat reakci smích", + "reactionLike": "Odeslat reakci palec nahoru", + "reactionSilence": "Odeslat reakci ticho", + "reactionSurprised": "Odeslat reakci překvapení", + "reactions": "Reactions", "security": "Možnosti zabezpečení", - "selectBackground": "", + "selectBackground": "Vyberte pozadí", "shareRoom": "Pozvat někoho", - "shareaudio": "", + "shareaudio": "Sdílet zvuk", "sharedvideo": "Sdílet video", "shortcuts": "Klávesové zkratky", - "silence": "", + "showWhiteboard": "Zobrazit tabuli", + "silence": "Umlčet", "speakerStats": "Statistiky řečníků", "startScreenSharing": "Začít sdílet obrazovku", "startSubtitles": "Zapnout titulky", - "stopAudioSharing": "", + "stopAudioSharing": "Zastavit sdílení zvuku", "stopScreenSharing": "Zastavit sdílení obrazovky", "stopSharedVideo": "Zastavit video", "stopSubtitles": "Vypnout titulky", - "surprised": "", + "surprised": "Překvapení", "talkWhileMutedPopup": "Snažíte se mluvit? Máte ztišený mikrofon.", "tileViewToggle": "Přepnout dlaždicové zobrazení", "toggleCamera": "Přepnout kameru", - "videoSettings": "", - "videomute": "Zapnout / Vypnout kameru" + "unmute": "Zapnout mikrofon", + "videoSettings": "Nastavení videa", + "videomute": "Zapnout / Vypnout kameru", + "videomuteGUMPending": "Připojování kamery", + "videounmute": "Spustit kameru" }, "transcribing": { - "ccButtonTooltip": "", - "error": "", - "expandedLabel": "", - "failedToStart": "", - "labelToolTip": "", - "off": "", - "pending": "", - "start": "", - "stop": "", - "subtitles": "", - "subtitlesOff": "", - "tr": "" + "ccButtonTooltip": "Spustit / zastavit titulky", + "expandedLabel": "Přepis je momentálně zapnutý", + "failed": "Přepis se nezdařil", + "labelToolTip": "Schůzka se přepisuje", + "sourceLanguageDesc": "Momentálně je jazyk schůzky nastaven na {{sourceLanguage}}.
Můžete jej změnit z ", + "sourceLanguageHere": "zde", + "start": "Začít zobrazovat titulky", + "stop": "Přestat zobrazovat titulky", + "subtitles": "Titulky", + "subtitlesOff": "Vypnuto", + "tr": "TR" }, + "unpinParticipant": "{{participantName}} - Odepnout", "userMedia": { - "androidGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte Povolit a potvrďte.", - "chromeGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte Povolit a potvrďte.", - "edgeGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte Ano a potvrďte.", - "electronGrantPermissions": "Povolte prosím používání kamery a mikrofonu", - "firefoxGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte Spravovat vybraná zařízení a potvrďte.", - "iexplorerGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte OK a potvrďte.", - "nwjsGrantPermissions": "Povolte prosím používání kamery a mikrofonu", - "operaGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte Povolit a potvrďte.", - "react-nativeGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte Povolit a potvrďte.", - "safariGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte OK a potvrďte." + "grantPermissions": "Povolte prosím používání kamery a mikrofonu." }, "videoSIPGW": { "busy": "Pracujeme na uvolnění prostředků. Zkuste to prosím znovu za několik minut.", @@ -1242,12 +1442,15 @@ "ldTooltip": "Sledujete obraz v nízké kvalitě", "lowDefinition": "Nízká kvalita", "performanceSettings": "Nastavení výkonu", + "recording": "Probíhá nahrávání", "sd": "SD", "sdTooltip": "Sledujete obraz v běžné kvalitě", - "standardDefinition": "Běžná kvalita" + "standardDefinition": "Běžná kvalita", + "streaming": "Probíhá streamování" }, "videothumbnail": { "connectionInfo": "Informace o spojení", + "demote": "Přesunout na návštěvníka", "domute": "Ztišit", "domuteOthers": "Ztišit všechny ostatní", "domuteVideo": "Vypnout kameru", @@ -1256,22 +1459,28 @@ "grantModerator": "Pověřit moderátora", "hideSelfView": "Skrýt vlastní obraz", "kick": "Vyhodit", + "mirrorVideo": "Zrcadlit moje video", "moderator": "Moderátor", "mute": "Účastník je ztišen", "muted": "Ztišen/a", "pinToStage": "Zobrazit na stage", "remoteControl": "Zapnout / Vypnout vzdálené ovládání", - "screenSharing": "", + "screenSharing": "Účastník sdílí svou obrazovku", "show": "Zobrazit na stage", "showSelfView": "Zobrazit vlastní obraz", - "unpinFromStage": "", + "unpinFromStage": "Odepnout", + "verify": "Ověřit účastníka", "videoMuted": "Kamera vypnuta", "videomute": "Účastník si vypnul kameru" }, "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Aktuální pozadí: {{background}}", + "selectBackground": "Vyberte pozadí" + }, "addBackground": "Přidat pozadí", "apply": "Aplikovat", - "backgroundEffectError": "", + "backgroundEffectError": "Nepodařilo se použít efekt pozadí.", "blur": "Rozmazat", "deleteImage": "Smazat obrázek", "desktopShare": "Sdílení obrazovky", @@ -1284,7 +1493,7 @@ "image6": "Les", "image7": "Východ slunce", "none": "Žádné", - "pleaseWait": "Čekejte prosím...", + "pleaseWait": "Čekejte prosím…", "removeBackground": "Smazat pozadí", "slightBlur": "Lehké rozmazání", "title": "Virtuální pozadí", @@ -1292,13 +1501,32 @@ "webAssemblyWarning": "WebAssembly není podporované", "webAssemblyWarningDescription": "WebAssembly vypnuto nebo není podporované na tomto prohlížeči" }, - "volumeSlider": "", + "visitors": { + "chatIndicator": "(návštěvník)", + "joinMeeting": { + "description": "V současné době jste pozorovatelem této konference.", + "raiseHand": "Zvednout ruku", + "title": "Připojování ke schůzce", + "wishToSpeak": "Pokud chcete mluvit, zvedněte prosím níže ruku a počkejte na souhlas moderátora." + }, + "labelTooltip": "Počet návštěvníků: {{count}}", + "notification": { + "demoteDescription": "by poslán {{actor}}, zvedněte ruku pro účast", + "noMainParticipantsDescription": "Účastník musí zahájit schůzku. Zkuste to prosím znovu za chvíli.", + "noMainParticipantsTitle": "Toto setkání ještě nezačalo.", + "noVisitorLobby": "Nemůžete se připojit, pokud je pro schůzku zvolena lobby.", + "notAllowedPromotion": "Účastník musí váš požadavek nejprve povolit.", + "title": "Jste návštěvníkem schůzky" + }, + "waitingMessage": "Ke schůzce se připojíte, jakmile bude živě!" + }, + "volumeSlider": "Posuvník hlasitosti", "welcomepage": { "accessibilityLabel": { "join": "Dotykem se připojíte", "roomname": "Zadejte jméno místnosti" }, - "addMeetingName": "", + "addMeetingName": "Přidat název setkání", "appDescription": "Zavolejte si s celým týmem. A klidně pozvěte každého, koho znáte. {{app}} je plně šifrované řešení video konferencí se 100% otevřeným kódem, které můžete používat zdarma celý a každý den — aniž byste potřebovali účet.", "audioVideoSwitch": { "audio": "Zvuk", @@ -1319,26 +1547,36 @@ "logo": { "calendar": "Logo kalendáře", "desktopPreviewThumbnail": "Náhled zobrazení plochy", - "googleLogo": "", - "logoDeepLinking": "", - "microsoftLogo": "", - "policyLogo": "" + "googleLogo": "Google Logo", + "logoDeepLinking": "Jitsi meet logo", + "microsoftLogo": "Microsoft logo", + "policyLogo": "Policy logo" }, - "mobileDownLoadLinkAndroid": "", - "mobileDownLoadLinkFDroid": "", - "mobileDownLoadLinkIos": "", + "meetingsAccessibilityLabel": "Setkání", + "mobileDownLoadLinkAndroid": "Stáhněte si mobilní aplikaci pro Android", + "mobileDownLoadLinkFDroid": "Stáhněte si mobilní aplikaci pro F-Droid", + "mobileDownLoadLinkIos": "Stáhněte si mobilní aplikaci pro iOS", "moderatedMessage": "Nebo si předem rezervujte adresu setkání, kde budete jediný moderátor.", "privacy": "Soukromí", "recentList": "Nedávné", "recentListDelete": "Smazat", "recentListEmpty": "Váš seznam nedávných hovorů je prázdný. Spojte se s kolegy z Vašeho týmu, poté zde naleznete seznam nedávných hovorů.", + "recentMeetings": "Vaše nedávné setkání", "reducedUIText": "Vítejte v {{app}}!", "roomNameAllowedChars": "Název setkání nesmí obsahovat žádný z těchto znaků: ?, &, :, ', \", %, #.", "roomname": "Zadejte název místnosti", "roomnameHint": "Zadejte název nebo adresu místnosti, ke které se chcete připojit. Pokud jste místnost vytvořili, ujistěte se, že ostatní účastníci schůzky zadají stejný název jako vy.", "sendFeedback": "Poslat zpětnou vazbu", + "settings": "Nastavení", "startMeeting": "Zahájit setkání", "terms": "Podmínky používání", - "title": "Bezpečná, plnohodnotná a zdarma dostupná videokonference" + "title": "Bezpečná, plnohodnotná a zdarma dostupná videokonference", + "upcomingMeetings": "Vaše nadcházející setkání" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Tabule" + }, + "screenTitle": "Tabule" } } diff --git a/lang/main-da.json b/lang/main-da.json index f89979a8a777..e37af715dd9a 100644 --- a/lang/main-da.json +++ b/lang/main-da.json @@ -83,7 +83,7 @@ "GET_SESSION_ID_ERROR": "Hent session-id fejl: {{code}}", "GOT_SESSION_ID": "Henter session-ID… Udført", "LOW_BANDWIDTH": "Video for {{displayName}} er slået fra for at spare båndbredde", - "RECONNECTING": "Et netværksproblem opstod. Forbinder igen..." + "RECONNECTING": "Et netværksproblem opstod. Forbinder igen…" }, "connectionindicator": { "address": "Adresse:", @@ -458,7 +458,7 @@ "somebody": "Nogen", "startSilentDescription": "", "startSilentTitle": "", - "suboptimalExperienceDescription": "Hmmm... vi er bange for at din oplevelse med {{appName}} ikke vil være optimal. Vi arbejder på at forbedre dette, men indtil da forsøg venligst at bruge en af følgende fuldt understøttede internet browsere.", + "suboptimalExperienceDescription": "Hmmm… vi er bange for at din oplevelse med {{appName}} ikke vil være optimal. Vi arbejder på at forbedre dette, men indtil da forsøg venligst at bruge en af følgende fuldt understøttede internet browsere.", "suboptimalExperienceTitle": "Browser-advarsel", "unmute": "" }, @@ -475,7 +475,7 @@ "calling": "Ringer op…", "connected": "Forbundet", "connecting": "Forbinder…", - "connecting2": "Forbinder*...", + "connecting2": "Forbinder*…", "disconnected": "Forbindelse afbrudt", "expired": "Udløbet", "ignored": "Ignoreret", @@ -697,16 +697,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Vælg Tillad , når din browser beder om tilladelser", - "chromeGrantPermissions": "Vælg Tillad , når din browser beder om tilladelser", - "edgeGrantPermissions": "Vælg Ja , når din browser beder om tilladelser", - "electronGrantPermissions": "Giv tilladelse til at dit kamera og din mikrofon benyttes", - "firefoxGrantPermissions": "Vælg Del valgt enhed , når din browser beder om tilladelser", - "iexplorerGrantPermissions": "Vælg OK , når din browser beder om tilladelser", - "nwjsGrantPermissions": "Giv tilladelse til at dit kamera og din mikrofon benyttes", - "operaGrantPermissions": "Vælg Tillad , når din browser beder om tilladelser", - "react-nativeGrantPermissions": "Vælg Tillad , når din browser beder om tilladelser", - "safariGrantPermissions": "Vælg OK , når din browser beder om tilladelser" + "grantPermissions": "Giv tilladelse til at dit kamera og din mikrofon benyttes." }, "videoSIPGW": { "busy": "Vi arbejder på at frigøre ressourcer. Prøv igen om et par minutter", diff --git a/lang/main-de.json b/lang/main-de.json index 199f49d84409..af8e0340a23a 100644 --- a/lang/main-de.json +++ b/lang/main-de.json @@ -16,13 +16,13 @@ "failedToAdd": "Fehler beim Hinzufügen von Personen", "googleEmail": "Google-E-Mail", "inviteMoreHeader": "Sie sind alleine in der Sitzung", - "inviteMoreMailSubject": "An {{appName}} Meeting teilnehmen", + "inviteMoreMailSubject": "An {{appName}} Konferenz teilnehmen", "inviteMorePrompt": "Mehr Leute einladen", "linkCopied": "Link in die Zwischenablage kopiert", "noResults": "Keine passenden Ergebnisse", "outlookEmail": "Outlook-E-Mail", "phoneNumbers": "Telefonnummern", - "searching": "Suche...", + "searching": "Suche…", "shareInvite": "Einladung zur Versammlung teilen", "shareLink": "Teilen Sie den Konferenzlink, um andere einzuladen", "shareStream": "Den Livestreaminglink freigeben", @@ -70,14 +70,14 @@ "breakoutList": "Breakout-Liste", "buttonLabel": "Breakout-Räume", "defaultName": "Breakout-Raum #{{index}}", - "hideParticipantList": "Teilnehmerliste ausblenden", + "hideParticipantList": "Personenliste ausblenden", "mainRoom": "Hauptraum", "notifications": { "joined": "Breakout-Raum \"{{name}}\" betreten", "joinedMainRoom": "Hauptraum betreten", "joinedTitle": "Breakout-Räume" }, - "showParticipantList": "Teilnehmerliste anzeigen", + "showParticipantList": "Personenliste anzeigen", "title": "Breakout-Räume" }, "calendarSync": { @@ -89,10 +89,10 @@ "notSignedIn": "Ein Fehler ist während der Authentifizierung zur Anzeige von Kalenderterminen aufgetreten. Prüfen Sie Ihre Kalendereinstellungen oder versuchen Sie, sich erneut anzumelden." }, "join": "Teilnehmen", - "joinTooltip": "Am Meeting teilnehmen", + "joinTooltip": "An Konferenz teilnehmen", "nextMeeting": "Nächste Konferenz", "noEvents": "Es gibt keine bevorstehenden Termine.", - "ongoingMeeting": "Laufendes Meeting", + "ongoingMeeting": "Laufende Konferenz", "permissionButton": "Einstellungen öffnen", "permissionMessage": "Die App benötigt Zugriff auf den Kalender, um Termine und Konferenzen anzuzeigen.", "refresh": "Kalender aktualisieren", @@ -122,18 +122,24 @@ "nickname": { "popover": "Wähle einen Alias", "title": "Geben Sie einen Alias zum Chatten ein", - "titleWithPolls": "Geben Sie einen Alias zum Chatten ein" + "titleWithCC": "Geben Sie einen Alias zum Chatten und für Untertitel ein", + "titleWithPolls": "Geben Sie einen Alias zum Chatten und für Umfragen ein", + "titleWithPollsAndCC": "Geben Sie einen Alias zum Chatten, für Umfragen und Untertitel ein" }, "noMessagesMessage": "Es gibt noch keine Nachricht in dieser Konferenz. Starten Sie hier eine Unterhaltung!", "privateNotice": "Private Nachricht an {{recipient}}", "sendButton": "Senden", "smileysPanel": "Emoji-Auswahl", + "systemDisplayName": "System", "tabs": { "chat": "Chatten", + "closedCaptions": "Untertitel", "polls": "Umfragen" }, "title": "Chatten", + "titleWithCC": "Chatten und Untertitel", "titleWithPolls": "Chatten und Umfragen", + "titleWithPollsAndCC": "Chatten, Umfragen und Untertitel", "you": "Sie" }, "chromeExtensionBanner": { @@ -143,8 +149,12 @@ "dontShowAgain": "Hinweis nicht mehr anzeigen", "installExtensionText": "Installieren Sie die Erweiterung für die Integration von Google Calendar und Office 365" }, + "closedCaptionsTab": { + "emptyState": "Die Untertitel sind verfügbar, sobald sie von der Moderation gestartet wurden", + "startClosedCaptionsButton": "Untertitel starten" + }, "connectingOverlay": { - "joiningRoom": "Eine Verbindung zu Ihrem Meeting wird hergestellt…" + "joiningRoom": "Eine Verbindung zu Ihrer Konferenz wird hergestellt…" }, "connection": { "ATTACHED": "Angehängt", @@ -214,7 +224,7 @@ "downloadMobileApp": "Aus dem App Store herunterladen", "ifDoNotHaveApp": "Wenn Sie die App noch nicht haben:", "ifHaveApp": "Wenn Sie die App bereits haben:", - "joinInApp": "Mit der App am Meeting teilnehmen", + "joinInApp": "Mit der App an der Konferenz teilnehmen", "joinInAppNew": "Mit der App", "joinInBrowser": "Im Browser", "launchMeetingLabel": "Wie möchten Sie an der Konferenz teilnehmen?", @@ -224,7 +234,7 @@ "or": "oder", "termsAndConditions": "Indem Sie fortfahren, stimmen Sie unseren Nutzungsbedingungen zu.", "title": "Die Konferenz wird in {{app}} geöffnet …", - "titleNew": "Konferenz starten ...", + "titleNew": "Konferenz starten…", "tryAgainButton": "Erneut versuchen", "unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird." }, @@ -257,12 +267,15 @@ "dialog": { "Back": "Zurück", "Cancel": "Abbrechen", - "IamHost": "Ich leite das Meeting", + "IamHost": "Ich leite die Konferenz", "Ok": "OK", "Remove": "Entfernen", "Share": "Teilen", "Submit": "OK", + "Understand": "Verstanden, Stummschaltung beibehalten", + "UnderstandAndUnmute": "Verstanden, bitte Stummschaltung aufheben", "WaitForHostMsg": "Die Konferenz wurde noch nicht gestartet. Falls Sie die Konferenz leiten, authentifizieren Sie sich bitte. Warten Sie andernfalls, bis die Konferenz gestartet wird.", + "WaitForHostNoAuthMsg": "Die Konferenz wurde noch nicht gestartet. Bitte warten Sie, bis die Konferenz gestartet wird.", "WaitingForHostButton": "Auf Moderation warten", "WaitingForHostTitle": "Warten auf den Beginn der Konferenz …", "Yes": "Ja", @@ -297,6 +310,7 @@ "conferenceReloadMsg": "Wir versuchen das zu beheben. Verbinde in {{seconds}} Sekunden …", "conferenceReloadTitle": "Leider ist etwas schiefgegangen.", "confirm": "Bestätigen", + "confirmBack": "Zurück", "confirmNo": "Nein", "confirmYes": "Ja", "connectError": "Oh! Es hat etwas nicht geklappt und der Konferenz konnte nicht beigetreten werden.", @@ -305,6 +319,8 @@ "contactSupport": "Support kontaktieren", "copied": "Kopiert", "copy": "Kopieren", + "demoteParticipantDialog": "Sind Sie sicher, dass Sie diese Person zu den Gästen verschieben möchten?", + "demoteParticipantTitle": "Zu Gästen verschieben", "dismiss": "OK", "displayNameRequired": "Hallo! Wie ist Ihr Name?", "done": "Fertig", @@ -313,9 +329,10 @@ "e2eeLabel": "Ende-zu-Ende-Verschlüsselung aktivieren", "e2eeWarning": "WARNUNG: Nicht alle Personen dieser Konferenz scheinen Ende-zu-Ende-Verschlüsselung zu unterstützen. Wenn Sie diese aktivieren, können die entsprechenden Personen nichts mehr sehen oder hören.", "e2eeWillDisableDueToMaxModeDescription": "WARNUNG: Ende-zu-Ende-Verschlüsselung wird automatisch deaktiviert, wenn weitere Anwesende an der Konferenz teilnehmen.", - "embedMeeting": "Besprechung einbetten", + "embedMeeting": "Konferenz einbetten", "enterDisplayName": "Bitte geben Sie hier Ihren Namen ein", "error": "Fehler", + "errorRoomCreationRestriction": "Sie haben versucht, zu schnell beizutreten, bitte versuchen Sie es gleich noch einmal.", "gracefulShutdown": "Der Dienst steht momentan wegen Wartungsarbeiten nicht zur Verfügung. Bitte versuchen Sie es später noch einmal.", "grantModeratorDialog": "Möchten Sie wirklich Moderationsrechte an diese Person vergeben?", "grantModeratorTitle": "Moderationsrechte vergeben", @@ -329,7 +346,9 @@ "kickParticipantButton": "Entfernen", "kickParticipantDialog": "Wollen Sie diese Person wirklich entfernen?", "kickParticipantTitle": "Person entfernen?", - "kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus dem Meeting geworfen", + "kickSystemTitle": "Autsch! Sie wurden aus der Konferenz geworfen", + "kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus der Konferenz geworfen", + "learnMore": "Mehr erfahren", "linkMeeting": "Konferenz verlinken", "linkMeetingTitle": "Konferenz mit Salesforce verlinken", "liveStreaming": "Livestreaming", @@ -357,18 +376,18 @@ "muteEveryoneDialogModerationOn": "Die Anwesenden können eine Anfrage zum Sprechen jederzeit senden.", "muteEveryoneElseDialog": "Einmal stummgeschaltet, können Sie deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.", "muteEveryoneElseTitle": "Alle außer {{whom}} stummschalten?", - "muteEveryoneElsesVideoDialog": "Sobald die Kamera deaktiviert ist, können Sie sie nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.", + "muteEveryoneElsesVideoDialog": "Sobald die Kamera für alle anderen Personen deaktiviert ist, können Sie diese nicht wieder für alle einschalten, die anderen Personen können ihre Kamera aber jederzeit wieder einschalten.", "muteEveryoneElsesVideoTitle": "Die Kamera von allen außer {{whom}} ausschalten?", "muteEveryoneSelf": "sich selbst", "muteEveryoneStartMuted": "Alle beginnen von jetzt an stummgeschaltet", "muteEveryoneTitle": "Alle stummschalten?", - "muteEveryonesVideoDialog": "Sind Sie sicher, dass Sie die Kamera von allen Teilnehmern deaktivieren möchten? Sie können sie nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.", + "muteEveryonesVideoDialog": "Sind Sie sicher, dass Sie die Kamera von allen Personen deaktivieren möchten? Sie können dies nicht wieder rückgängig machen, jede Personen kann ihre Kamera aber jederzeit wieder einschalten.", "muteEveryonesVideoDialogModerationOn": "Die Anwesenden können jederzeit eine Anfrage senden, um ihre Kamera einzuschalten.", "muteEveryonesVideoDialogOk": "deaktivieren", "muteEveryonesVideoTitle": "Die Kamera von allen anderen ausschalten?", "muteParticipantBody": "Sie können die Stummschaltung anderer Personen nicht aufheben, aber eine Person kann ihre eigene Stummschaltung jederzeit beenden.", "muteParticipantButton": "Stummschalten", - "muteParticipantsVideoBody": "Sie können die Kamera nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.", + "muteParticipantsVideoBody": "Sie können die Kamera nicht wieder einschalten, die Person kann ihre Kamera aber jederzeit wieder einschalten.", "muteParticipantsVideoBodyModerationOn": "Sie können die Kamera nicht wieder aktivieren und die Person selbst auch nicht.", "muteParticipantsVideoButton": "Kamera ausschalten", "muteParticipantsVideoDialog": "Wollen Sie die Kamera dieser Person wirklich deaktivieren? Sie können die Kamera nicht wieder aktivieren, die Person kann dies aber jederzeit selbst tun.", @@ -376,7 +395,7 @@ "muteParticipantsVideoTitle": "Die Kamera von dieser Person ausschalten?", "noDropboxToken": "Kein gültiges Dropbox-Token", "password": "Passwort", - "passwordLabel": "Dieses Meeting wurde gesichert. Bitte geben Sie das $t(lockRoomPasswordUppercase) ein, um dem Meeting beizutreten.", + "passwordLabel": "Diese Konferenz wurde gesichert. Bitte geben Sie das $t(lockRoomPasswordUppercase) ein, um der Konferenz beizutreten.", "passwordNotSupported": "Das Festlegen eines Konferenzpassworts wird nicht unterstützt.", "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nicht unterstützt", "passwordRequired": "$t(lockRoomPasswordUppercase) erforderlich", @@ -387,6 +406,10 @@ "recentlyUsedObjects": "Ihre zuletzt verwendeten Objekte", "recording": "Aufnahme", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Während eines Livestreams nicht möglich", + "recordingInProgressDescription": "Diese Konferenz wird aufgezeichnet und von KI analysiert {{learnMore}}. Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.", + "recordingInProgressDescriptionFirstHalf": "Diese Konferenz wird aufgezeichnet und von KI analysiert", + "recordingInProgressDescriptionSecondHalf": ". Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.", + "recordingInProgressTitle": "Aufnahme läuft", "rejoinNow": "Jetzt erneut beitreten", "remoteControlAllowedMessage": "{{user}} hat die Anfrage zur Fernsteuerung angenommen!", "remoteControlDeniedMessage": "{{user}} hat die Anfrage zur Fernsteuerung verweigert!", @@ -434,7 +457,10 @@ "shareScreenWarningD2": "müssen Sie Ihre Audiofreigabe stoppen und dann die Bildschirmfreigabe mit der Option \"Audio freigeben\" starten.", "shareScreenWarningH1": "Wenn Sie Ihren Bildschirm freigeben wollen:", "shareScreenWarningTitle": "Sie müssen die Audiofreigabe beenden, bevor Sie den Bildschirm freigeben können", + "shareVideoConfirmPlay": "Sie öffnen dazu eine externe Seite. Möchten Sie fortfahren?", + "shareVideoConfirmPlayTitle": "{{name}} hat mit Ihnen ein Video geteilt.", "shareVideoLinkError": "Bitte einen gültigen Link angeben.", + "shareVideoLinkStopped": "Das Video von {{name}} wurde gestoppt.", "shareVideoTitle": "Video teilen", "shareYourScreen": "Bildschirmfreigabe ein-/ausschalten", "shareYourScreenDisabled": "Bildschirmfreigabe deaktiviert.", @@ -547,27 +573,29 @@ "invitePhone": "Wenn Sie stattdessen per Telefon beitreten möchten, wählen sie: {{number}},,{{conferenceID}}#\n", "invitePhoneAlternatives": "Suchen Sie nach einer anderen Einwahlnummer ?\nEinwahlnummern der Konferenz anzeigen: {{url}}\n\n\nWenn Sie sich auch über ein Raumtelefon einwählen, nehmen Sie teil, ohne sich mit dem Ton zu verbinden: {{silentUrl}}", "inviteSipEndpoint": "Um mit SIP teilzunehmen, folgende Adresse nutzen: {{sipUri}}", - "inviteTextiOSInviteUrl": "Am Meeting teilnehmen: {{inviteUrl}}.", + "inviteTextiOSInviteUrl": "An Konferenz teilnehmen: {{inviteUrl}}.", "inviteTextiOSJoinSilent": "Wenn Sie über ein Konferenztelefon teilnehmen, können Sie diesen Link nutzen um ohne Ton an der Konferenz teilzunehmen: {{silentUrl}}.", - "inviteTextiOSPersonal": "{{name}} lädt Sie zu einem Meeting ein.", + "inviteTextiOSPersonal": "{{name}} lädt Sie zu einer Konferenz ein.", "inviteTextiOSPhone": "Nutzen Sie folgende Nummer um via Telefon teilzunehmen: {{number}},,{{conferenceID}}#. Wenn Sie nach einer anderen Einwahlnummer suchen, finden Sie die vollständige Liste hier: {{didUrl}}.", - "inviteURLFirstPartGeneral": "Sie wurden zur Teilnahme an einem Meeting eingeladen.", - "inviteURLFirstPartPersonal": "{{name}} lädt Sie zu einem Meeting ein.\n", - "inviteURLSecondPart": "\nAm Meeting teilnehmen:\n{{url}}\n", + "inviteURLFirstPartGeneral": "Sie wurden zur Teilnahme an einer Konferenz eingeladen.", + "inviteURLFirstPartPersonal": "{{name}} lädt Sie zu einer Konferenz ein.\n", + "inviteURLSecondPart": "\nAn Konferenz teilnehmen:\n{{url}}\n", "label": "Einwahlinformationen", "liveStreamURL": "Livestream:", "moreNumbers": "Weitere Telefonnummern", "noNumbers": "Keine Telefonnummern verfügbar.", "noPassword": "Kein Passwort benötigt", "noRoom": "Keine Konferenz für die Einwahlinformationen angegeben.", + "noWhiteboard": "Whiteboard konnte nicht geladen werden.", "numbers": "Einwahlnummern", "password": "$t(lockRoomPasswordUppercase):", "reachedLimit": "Sie haben die Grenzen Ihres Tarifs erreicht.", "sip": "SIP-Adresse", "sipAudioOnly": "SIP-Adresse (nur Ton)", "title": "Teilen", - "tooltip": "Freigabe-Link und Einwahlinformationen für dieses Meeting", - "upgradeOptions": "Bitte prüfen Sie Ihre Upgrade-Optionen auf" + "tooltip": "Freigabe-Link und Einwahlinformationen für diese Konferenz", + "upgradeOptions": "Bitte prüfen Sie Ihre Upgrade-Optionen auf", + "whiteboardError": "Whiteboard konnte nicht geladen werden. Bitte versuchen Sie es später erneut." }, "inlineDialogFailure": { "msg": "Es ist ein Fehler aufgetreten.", @@ -617,7 +645,7 @@ "errorAPI": "Beim Abrufen der YouTube-Livestreams ist ein Fehler aufgetreten. Bitte versuchen Sie, sich erneut anzumelden.", "errorLiveStreamNotEnabled": "Livestreaming ist für {{email}} nicht aktiviert. Aktivieren Sie das Livestreaming oder melden Sie sich bei einem Konto mit aktiviertem Livestreaming an.", "expandedOff": "Livestream wurde angehalten", - "expandedOn": "Das Meeting wird momentan an YouTube gestreamt.", + "expandedOn": "Die Konferenz wird momentan an YouTube gestreamt.", "expandedPending": "Livestream wird gestartet …", "failedToStart": "Livestream konnte nicht gestartet werden", "getStreamKeyManually": "Wir waren nicht in der Lage, Livestreams abzurufen. Versuchen Sie, Ihren Livestream-Schlüssel von YouTube zu erhalten.", @@ -631,6 +659,7 @@ "on": "Livestream", "onBy": "{{name}} startete den Livestream", "pending": "Livestream wird gestartet …", + "policyError": "Sie haben den Livestream zu schnell gestartet. Bitte versuchen Sie es später noch einmal!", "serviceName": "Livestreaming-Dienst", "sessionAlreadyActive": "Diese Konferenz wird bereits als Livestream übertragen.", "signIn": "Mit Google anmelden", @@ -721,18 +750,24 @@ "me": "ich", "notify": { "OldElectronAPPTitle": "Sicherheitslücke!", - "allowAction": "Erlauben", + "allowAudio": "Mikrofon einschalten", + "allowBoth": "Beides", + "allowVideo": "Kamera einschalten", "allowedUnmute": "Sie können die Stummschaltung aufheben, Ihre Kamera einschalten oder Ihren Bildschirm teilen.", "audioUnmuteBlockedDescription": "Díe Stummschaltung kann aus Überlastungsschutzgründen temporär nicht aufgehoben werden.", "audioUnmuteBlockedTitle": "Stummschaltung kann nicht aufgehoben werden!", "chatMessages": "Chatnachrichten", - "connectedOneMember": "{{name}} nimmt am Meeting teil", - "connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen am Meeting teil", - "connectedTwoMembers": "{{first}} und {{second}} nehmen am Meeting teil", + "connectedOneMember": "{{name}} nimmt an der Konferenz teil", + "connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen an der Konferenz teil", + "connectedTwoMembers": "{{first}} und {{second}} nehmen an der Konferenz teil", + "connectionFailed": "Verbindung fehlgeschlagen. Bitte versuchen Sie es später noch einmal!", "dataChannelClosed": "Schlechte Videoqualität", "dataChannelClosedDescription": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher ist die Videoqulität auf die schlechteste Stufe limitiert.", + "dataChannelClosedDescriptionWithAudio": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher können Video- und Tonprobleme auftreten.", + "dataChannelClosedWithAudio": "Ton- und Videoqualität können beeinträchtigt sein", "disabledIframe": "Die Einbettung ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet.", - "disabledIframeSecondary": "Die Einbettung von {{domain}} ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet. Bitte nutzen Sie Jitsi as a Service für produktive Zwecke!", + "disabledIframeSecondaryNative": "Die Einbettung von {{domain}} ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet.", + "disabledIframeSecondaryWeb": "Die Einbettung von {{domain}} ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet. Bitte nutzen Sie Jitsi as a Service für produktive Zwecke!", "disconnected": "getrennt", "displayNotifications": "Benachrichtigungen anzeigen für", "dontRemindMe": "Nicht erinnern", @@ -741,6 +776,9 @@ "gifsMenu": "GIPHY", "groupTitle": "Benachrichtigungen", "hostAskedUnmute": "Die Moderation bittet Sie, das Mikrofon zu aktivieren", + "invalidTenant": "Ungültiger Mandant", + "invalidTenantHyphenDescription": "Der gewählte Mandantenname ist ungültig (beginnt oder endet mit '-').", + "invalidTenantLengthDescription": "Der gewählte Mandantenname ist zu lang.", "invitedOneMember": "{{name}} wurde eingeladen", "invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen", "invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen", @@ -753,7 +791,7 @@ "linkToSalesforceDescription": "Sie können die Zusammenfassung der Konferenz mit einem Objekt bei Salesforce verlinken.", "linkToSalesforceError": "Konferenz konnte nicht mit Salesforce verlinkt werden", "linkToSalesforceKey": "Konferenz verlinken", - "linkToSalesforceProgress": "Konferenz wird mit Salesforce verlinkt...", + "linkToSalesforceProgress": "Konferenz wird mit Salesforce verlinkt…", "linkToSalesforceSuccess": "Die Konferenz wurde mit Salesforce verlinkt", "localRecordingStarted": "{{name}} hat eine lokale Aufzeichnung gestartet.", "localRecordingStopped": "{{name}} hat eine lokale Aufzeichnung gestoppt.", @@ -771,12 +809,13 @@ "moderationToggleDescription": "von {{participantDisplayName}}", "moderator": "Moderationsrechte vergeben!", "muted": "Der Konferenz wurde stumm beigetreten.", - "mutedRemotelyDescription": "Sie können jederzeit die Stummschaltung aufheben, wenn Sie bereit sind zu sprechen. Wenn Sie fertig sind, können Sie sich wieder stummschalten, um Geräusche vom Meeting fernzuhalten.", + "mutedRemotelyDescription": "Sie können jederzeit die Stummschaltung aufheben, wenn Sie bereit sind zu sprechen. Wenn Sie fertig sind, können Sie sich wieder stummschalten, um Geräusche von der Konferenz fernzuhalten.", "mutedRemotelyTitle": "Sie wurden von {{participantDisplayName}} stummgeschaltet!", "mutedTitle": "Stummschaltung aktiv!", "newDeviceAction": "Verwenden", "newDeviceAudioTitle": "Neues Audiogerät erkannt", "newDeviceCameraTitle": "Neue Kamera erkannt", + "nextToSpeak": "Sie sind als Nächstes an der Reihe zu sprechen", "noiseSuppressionDesktopAudioDescription": "Die Rauschunterdrückung kann nicht genutzt werden, wenn der Computersound geteilt wird, bitte zuerst deaktivieren und dann nochmals versuchen.", "noiseSuppressionFailedTitle": "Rauschunterdrückung konnte nicht gestartet werden", "noiseSuppressionStereoDescription": "Rauschunterdrückung unterstützt aktuell keinen Stereoton.", @@ -798,17 +837,25 @@ "screenSharingAudioOnlyTitle": "Modus \"Beste Leistung\"", "selfViewTitle": "Sie können die eigene Ansicht immer in den Einstellungen reaktivieren", "somebody": "Jemand", - "startSilentDescription": "Treten Sie dem Meeting noch einmal bei, um Ihr Audio zu aktivieren", + "startSilentDescription": "Treten Sie der Konferenz noch einmal bei, um Ihr Audio zu aktivieren", "startSilentTitle": "Sie sind ohne Audioausgabe beigetreten!", "suboptimalBrowserWarning": "Tut uns leid, aber die Konferenz wird mit {{appName}} kein großartiges Erlebnis. Wir versuchen immer die Situation zu verbessern, bis dahin empfehlen wir aber die Verwendung einer der vollständig unterstützen Browser.", "suboptimalExperienceTitle": "Browserwarnung", + "suggestRecordingAction": "Starten", + "suggestRecordingDescription": "Möchten Sie eine Aufzeichnung starten?", + "suggestRecordingTitle": "Konferenz aufzeichnen", "unmute": "Stummschaltung aufheben", + "unmuteVideo": "Kamera einschalten", "videoMutedRemotelyDescription": "Sie können sie jederzeit wieder einschalten.", "videoMutedRemotelyTitle": "Ihre Kamera wurde von {{participantDisplayName}} ausgeschaltet!", "videoUnmuteBlockedDescription": "Die Kamera und Bildschirmfreigabe kann aus Überlastungsschutzgründen temporär nicht eingeschaltet werden.", "videoUnmuteBlockedTitle": "Kamera und Bildschirmfreigabe kann nicht aktiviert werden!", "viewLobby": "Lobby ansehen", + "viewParticipants": "Personen anzeigen", + "viewVisitors": "Gäste anzeigen", "waitingParticipants": "{{waitingParticipants}} Personen", + "waitingVisitors": "In der Lobby wartende Gäste: {{waitingVisitors}}", + "waitingVisitorsTitle": "Die Konferenz wurde noch nicht gestartet!", "whiteboardLimitDescription": "Bitte speichern Sie Ihre Inhalte, da das Nutzungslimit bald erreicht wird und dann Ihr Whiteboard geschlossen wird.", "whiteboardLimitTitle": "Whiteboard-Nutzung" }, @@ -822,7 +869,10 @@ "audioModeration": "Für sich selbst die Stummschaltung aufzuheben", "blockEveryoneMicCamera": "Kamera und Mikrofon von allen sperren", "breakoutRooms": "Breakout-Räume", + "goLive": "Live gehen", "invite": "Person einladen", + "lowerAllHands": "Alle Hände senken", + "lowerHand": "Hand senken", "moreModerationActions": "Weitere Moderationsoptionen", "moreModerationControls": "Weitere Moderationsoptionen", "moreParticipantOptions": "Mehr Optionen für Anwesende", @@ -839,11 +889,13 @@ "headings": { "lobby": "Lobby ({{count}})", "participantsList": "Anwesende ({{count}})", + "visitorInQueue": " (Wartende Gäste {{count}})", "visitorRequests": " (Anfragen {{count}})", "visitors": "Gäste ({{count}})", "waitingLobby": "In der Lobby ({{count}})" }, "search": "Suche Anwesende", + "searchDescription": "Tippen Sie um die Anwesendenliste zu filtern", "title": "Anwesende" }, "passwordDigitsOnly": "Bis zu {{number}} Ziffern", @@ -852,10 +904,13 @@ "pinnedParticipant": "Die Person ist angeheftet", "polls": { "answer": { + "edit": "Bearbeiten", + "send": "Senden", "skip": "Überspringen", "submit": "Speichern" }, "by": "Von {{ name }}", + "closeButton": "Umfrage schließen", "create": { "addOption": "Antwort hinzufügen", "answerPlaceholder": "Antwort {{index}}", @@ -865,7 +920,8 @@ "pollQuestion": "Frage", "questionPlaceholder": "Eine Frage stellen", "removeOption": "Antwort entfernen", - "send": "Erstellen" + "save": "Erstellen", + "send": "Senden" }, "errors": { "notUniqueOption": "Optionen müssen einzigartig sein" @@ -894,9 +950,11 @@ "configuringDevices": "Geräte werden eingerichtet …", "connectedWithAudioQ": "Sie sind mit Audio verbunden?", "connection": { + "failed": "Verbindungstest fehlgeschlagen!", "good": "Ihre Internetverbindung sieht gut aus!", "nonOptimal": "Ihre Internetverbindung ist nicht optimal.", - "poor": "Sie haben eine schlechte Internetverbindung." + "poor": "Sie haben eine schlechte Internetverbindung.", + "running": "Verbindung wird getestet…" }, "connectionDetails": { "audioClipping": "Ihr Ton wird wahrscheinlich abgehackt sein.", @@ -905,6 +963,7 @@ "goodQuality": "Großartig! Ihre Bild- und Tonqualität sollte super sein.", "noMediaConnectivity": "Es konnte für diesen Test keine Medienverbindung hergestellt werden. Das wird gewöhnlich durch eine Firewall oder ein NAT ausgelöst.", "noVideo": "Ihr Bild wird wahrscheinlich eine schlechte Qualität haben.", + "testFailed": "Der Verbindungstest ist fehlgeschlagen, dies beeinträchtigt evtl. Ihre Qualität.", "undetectable": "Wenn Sie mit Ihrem Browser weiterhin Probleme in Konferenzen haben, sollten Sie die Verbindung und Funktion Ihrer Lautsprecher, Ihres Mikrofons und Ihrer Kamera überprüfen. Stellen Sie außerdem sicher, dass Ihr Browser die erforderlichen Rechte hat, auf das Mikrofon und die Kamera zuzugreifen, und dass Sie die neuste Browserversion installiert haben. Sollten Sie immer noch Probleme haben, kontaktieren Sie bitte den Support der Webanwendung.", "veryPoorConnection": "Ihre Konferenzqualität wird wahrscheinlich sehr schlecht sein.", "videoFreezing": "Ihr Bild wird wahrscheinlich einfrieren, schwarz werden und eine geringe Auflösung haben.", @@ -937,8 +996,8 @@ "or": "oder", "premeeting": "Vorschau", "proceedAnyway": "Trotzdem fortsetzen", + "recordingWarning": "Diese Konferenz wird möglicherweise von anderen Personen aufgezeichnet", "screenSharingError": "Fehler bei Bildschirmfreigabe:", - "showScreen": "Konferenzvorschau aktivieren", "startWithPhone": "Mit Telefonaudio starten", "unsafeRoomConsent": "Ich verstehe das Risiko und möchte der Konferenz beitreten", "videoOnlyError": "Videofehler:", @@ -990,7 +1049,7 @@ "error": "Die Aufzeichnung ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "errorFetchingLink": "Der Link zur Aufzeichnung konnte nicht geladen werden.", "expandedOff": "Aufzeichnung wurde gestoppt", - "expandedOn": "Das Meeting wird momentan aufgezeichnet.", + "expandedOn": "Die Konferenz wird momentan aufgezeichnet.", "expandedPending": "Aufzeichnung wird gestartet…", "failedToStart": "Die Aufnahme konnte nicht gestartet werden", "fileSharingdescription": "Aufzeichnung mit den Personen der Konferenz teilen", @@ -998,19 +1057,18 @@ "highlightMoment": "Moment als Highlight festhalten", "highlightMomentDisabled": "Sie können Momente als Highlights festhalten, sobald die Aufnahme startet", "highlightMomentSuccess": "Highlight festgehalten", - "highlightMomentSucessDescription": "Ihr festgehaltener Moment wird zur Zusammenfassung des Meeting hinzugefügt.", + "highlightMomentSucessDescription": "Ihr festgehaltener Moment wird zur Zusammenfassung der Konferenz hinzugefügt.", "inProgress": "Aufzeichnung gestartet", "limitNotificationDescriptionNative": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <3>{{app}}.", "limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte {{app}}.", "linkGenerated": "Link zur Aufzeichnung wurde generiert.", - "live": "LIVE", "localRecordingNoNotificationWarning": "Die Aufzeichnung wird anderen Anwesenden nicht mitgeteilt. Sie müssen diese selbst darauf hinweisen, dass die Konferenz aufgezeichnet wird.", "localRecordingNoVideo": "Videos werden nicht aufgenommen", "localRecordingStartWarning": "Bitte beenden Sie die Aufzeichnung vor dem Verlassen der Konferenz, um die Aufzeichnung zu speichern.", "localRecordingStartWarningTitle": "Aufzeichnung zum Speichern beenden", "localRecordingVideoStop": "Wenn Sie ihre Kamera abschalten wird auch die Aufnahme beendet. Sind Sie sicher, dass Sie fortfahren möchten?", "localRecordingVideoWarning": "Um Ihr eigenes Kamerabild aufzuzeichnen, müssen Sie Ihre Kamera beim Start der Aufnahme einschalten", - "localRecordingWarning": "Bitte prüfen Sie, dass das aktuelle Tab auswählen, um Bild und Ton aufzuzeichnen. Die Länge der Aufzeichnung ist aktuell auf 1GB beschränkt, was ungefähr 100 Minuten entspricht.", + "localRecordingWarning": "Bitte prüfen Sie, dass das aktuelle Tab auswählen, um Bild und Ton aufzuzeichnen.", "loggedIn": "Als {{userName}} angemeldet", "noMicPermission": "Zugriff auf Mikrofon fehlgeschlagen. Bitte erlauben Sie den Zugriff auf das Mikrofon.", "noStreams": "Kein Ton oder Video erkannt.", @@ -1019,8 +1077,8 @@ "on": "Aufnahme", "onBy": "{{name}} startete die Aufnahme", "onlyRecordSelf": "Nur eigenes Kamerabild und Ton aufzeichnen", - "pending": "Aufzeichnung des Meetings wird vorbereitet…", - "rec": "AUFZ", + "pending": "Aufzeichnung der Konferenz wird vorbereitet…", + "policyError": "Sie haben die Aufzeichnung zu schnell gestartet. Bitte versuchen Sie es später noch einmal.", "recordAudioAndVideo": "Kamera und Ton aufzeichnen", "recordTranscription": "Transkription aufzeichnen", "saveLocalRecording": "Aufzeichnung lokal abspeichern", @@ -1043,10 +1101,10 @@ "pullToRefresh": "Ziehen, um zu aktualisieren" }, "security": { - "about": "Sie können Ihre Konferenz mit einem Passwort sichern. Teilnehmer müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.", + "about": "Sie können Ihre Konferenz mit einem Passwort sichern. Personen müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.", "aboutReadOnly": "Mit Moderationsrechten kann die Konferenz mit einem Passwort gesichert werden. Personen müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.", - "insecureRoomNameWarningNative": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten. {{recommendAction}} Lernen Sie mehr über die Absicherung Ihrer Konferenz ", - "insecureRoomNameWarningWeb": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten {{recommendAction}} Lernen Sie hier mehr über die Absicherung Ihrer Konferenz.", + "insecureRoomNameWarningNative": "Der Raumname ist unsicher. Unerwünschte Personen könnten Ihrer Konferenz beitreten. {{recommendAction}} Lernen Sie mehr über die Absicherung Ihrer Konferenz ", + "insecureRoomNameWarningWeb": "Der Raumname ist unsicher. Unerwünschte Personen könnten Ihrer Konferenz beitreten {{recommendAction}} Lernen Sie hier mehr über die Absicherung Ihrer Konferenz.", "title": "Sicherheitsoptionen", "unsafeRoomActions": { "meeting": "Erwägen Sie die Absicherung Ihrer Konferenz über den Sicherheits-Button.", @@ -1064,11 +1122,13 @@ "signedIn": "Momentan wird auf Kalendertermine von {{email}} zugegriffen. Klicken Sie auf die folgende Schaltfläche „Trennen“, um den Zugriff auf die Kalendertermine zu stoppen.", "title": "Kalender" }, + "chatWithPermissions": "Chat mit Freigaben", "desktopShareFramerate": "Framerate für Bildschirmfreigabe", "desktopShareHighFpsWarning": "Eine höhere Framerate könnte sich auf Ihre Datenrate auswirken. Sie müssen die Bildschirmfreigabe neustarten, damit die Einstellung übernommen wird.", "desktopShareWarning": "Sie müssen die Bildschirmfreigabe neustarten, damit die Einstellung übernommen wird.", "devices": "Geräte", "followMe": "Follow-me für alle Personen", + "followMeRecorder": "Aufnahme folgt mir", "framesPerSecond": "FPS", "incomingMessage": "Eingehende Nachricht", "language": "Sprache", @@ -1092,6 +1152,7 @@ "selectMic": "Mikrofon", "selfView": "Eigene Ansicht", "shortcuts": "Tastaturkürzel", + "showSubtitlesOnStage": "Untertitel in Hauptansicht anzeigen", "speakers": "Lautsprecher", "startAudioMuted": "Alle Personen treten stummgeschaltet bei", "startReactionsMuted": "Interaktionstöne für alle deaktivieren", @@ -1134,8 +1195,8 @@ "version": "Version" }, "share": { - "dialInfoText": "\n\n=====\n\nWollen Sie sich nur auf Ihrem Telefon einwählen?\n\n{{defaultDialInNumber}}Klicken Sie auf diesen Link, um die eingewählten Telefonnummern für dieses Meeting zu sehen\n{{dialInfoPageUrl}}", - "mainText": "Klicken Sie auf den folgenden Link, um dem Meeting beizutreten:\n{{roomUrl}}" + "dialInfoText": "\n\n=====\n\nWollen Sie sich nur auf Ihrem Telefon einwählen?\n\n{{defaultDialInNumber}}Klicken Sie auf diesen Link, um die eingewählten Telefonnummern für diese Konferenz zu sehen\n{{dialInfoPageUrl}}", + "mainText": "Klicken Sie auf den folgenden Link, um der Konferenz beizutreten:\n{{roomUrl}}" }, "speaker": "Sprecher/-in", "speakerStats": { @@ -1145,11 +1206,13 @@ "fearful": "Ängstlich", "happy": "Fröhlich", "hours": "{{count}} Std. ", + "labelTooltip": "Anzahl der Personen: {{count}}", "minutes": "{{count}} Min. ", "name": "Name", "neutral": "Neutral", "sad": "Traurig", "search": "Suche", + "searchDescription": "Tippen Sie um die Anwesendenliste zu filtern", "searchHint": "Suche Anwesende", "seconds": "{{count}} Sek.", "speakerStats": "Sprechstatistik", @@ -1177,7 +1240,7 @@ "audioOnly": "„Nur Audio“ ein-/ausschalten", "audioRoute": "Audiogerät auswählen", "boo": "Buhen", - "breakoutRoom": "Breakout-Räume betreten/verlassen", + "breakoutRooms": "Breakout-Räume", "callQuality": "Qualitätseinstellungen", "carmode": "Automodus", "cc": "Untertitel ein-/ausschalten", @@ -1186,6 +1249,7 @@ "closeChat": "Chat schließen", "closeMoreActions": "„Weitere Einstellungen“ schließen", "closeParticipantsPane": "Anwesendenliste schließen", + "closedCaptions": "Untertitel", "collapse": "Einklappen", "document": "Geteiltes Dokument schließen", "documentClose": "Geteiltes Dokument schließen", @@ -1215,6 +1279,7 @@ "lobbyButton": "Lobbymodus ein-/ausschalten", "localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten", "lockRoom": "Konferenzpasswort ein-/ausschalten", + "love": "Herz", "lowerHand": "Hand senken", "moreActions": "Menü „Weitere Einstellungen“ ein-/ausschalten", "moreActionsMenu": "Menü „Weitere Einstellungen“", @@ -1227,11 +1292,12 @@ "muteGUMPending": "Verbinde Ihr Mikrofon", "noiseSuppression": "Rauschunterdrückung", "openChat": "Chat öffnen", - "participants": "Anwesende", + "participants": "Anwesenheitsliste öffnen. {{participantsCount}} anwesend", "pip": "Bild-in-Bild-Modus ein-/ausschalten", "privateMessage": "Private Nachricht senden", "profile": "Profil bearbeiten", "raiseHand": "Hand heben", + "react": "Chat-Interaktionen", "reactions": "Interaktionen", "reactionsMenu": "Interaktionsmenü öffnen / schließen", "recording": "Aufzeichnung ein-/ausschalten", @@ -1274,6 +1340,7 @@ "closeChat": "Chat schließen", "closeParticipantsPane": "Anwesenheitsliste schließen", "closeReactionsMenu": "Interaktionsmenü schließen", + "closedCaptions": "Untertitel", "disableNoiseSuppression": "Rauschunterdrückung deaktivieren", "disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren", "documentClose": "Geteiltes Dokument schließen", @@ -1303,6 +1370,7 @@ "lobbyButtonEnable": "Lobbymodus aktivieren", "login": "Anmelden", "logout": "Abmelden", + "love": "Herz", "lowerYourHand": "Hand senken", "moreActions": "Weitere Einstellungen", "moreOptions": "Weitere Optionen", @@ -1328,6 +1396,7 @@ "raiseYourHand": "Melden", "reactionBoo": "Buhen senden", "reactionClap": "Klatschen senden", + "reactionHeart": "Herz senden", "reactionLaugh": "Lachen senden", "reactionLike": "Daumen hoch senden", "reactionSilence": "Stille senden", @@ -1353,40 +1422,31 @@ "tileViewToggle": "Kachelansicht ein-/ausschalten", "toggleCamera": "Kamera wechseln", "unmute": "Stummschaltung aufheben", - "videoSettings": "Kameraeinstellungen", + "videoSettings": "Kamera-Einstellungen", "videomute": "Kamera stoppen", "videomuteGUMPending": "Verbinde Ihre Kamera", "videounmute": "Kamera einschalten" }, "transcribing": { "ccButtonTooltip": "Untertitel ein-/ausschalten", - "error": "Die Aufzeichnung ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "expandedLabel": "Transkribieren ist derzeit eingeschaltet", - "failedToStart": "Transkribieren konnte nicht gestartet werden", - "labelToolTip": "Das Meeting wird transkribiert", - "off": "Transkribieren gestoppt", - "on": "Transkribieren gestartet", - "pending": "Transkribieren des Meetings wird vorbereitet…", + "failed": "Transkribieren fehlgeschlagen", + "labelTooltip": "Die Konferenz wird transkribiert", + "labelTooltipExtra": "Zusätzlich wird das Transkript später verfügbar sein.", + "openClosedCaptions": "Untertitel öffnen", + "original": "Original", "sourceLanguageDesc": "Aktuell ist die Sprache der Konferenz auf {{sourceLanguage}} eingestellt.
Sie könne dies hier ", "sourceLanguageHere": "ändern", "start": "Anzeige der Untertitel starten", "stop": "Anzeige der Untertitel stoppen", "subtitles": "Untertitel", "subtitlesOff": "Ausschalten", - "tr": "TR" + "tr": "TR", + "translateTo": "Übersetzen in" }, "unpinParticipant": "{{participantName}} - Nicht mehr anheften", "userMedia": { - "androidGrantPermissions": "Wählen Sie Zulassen, wenn der Browser um Berechtigungen bittet.", - "chromeGrantPermissions": "Wählen Sie Zulassen, wenn der Browser um Berechtigungen bittet.", - "edgeGrantPermissions": "Wählen Sie Ja, wenn der Browser um Berechtigungen bittet.", - "electronGrantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen", - "firefoxGrantPermissions": "Wählen Sie Erlauben, wenn der Browser um Berechtigungen bittet.", - "iexplorerGrantPermissions": "Wählen Sie OK, wenn der Browser um Berechtigungen bittet.", - "nwjsGrantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen", - "operaGrantPermissions": "Wählen Sie Zulassen, wenn der Browser um Berechtigungen bittet.", - "react-nativeGrantPermissions": "Wählen Sie Erlauben, wenn der Browser um Berechtigungen bittet.", - "safariGrantPermissions": "Wählen Sie OK, wenn der Browser um Berechtigungen bittet." + "grantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen." }, "videoSIPGW": { "busy": "Es stehen keine freien Ressourcen zur Verfügung. Bitte versuchen Sie es später noch einmal.", @@ -1422,6 +1482,7 @@ }, "videothumbnail": { "connectionInfo": "Verbindungsinformationen", + "demote": "Zu Gästen verschieben", "domute": "Stummschalten", "domuteOthers": "Alle anderen stummschalten", "domuteVideo": "Kamera ausschalten", @@ -1464,7 +1525,7 @@ "image6": "Wald", "image7": "Sonnenaufgang", "none": "keiner", - "pleaseWait": "Bitte warten...", + "pleaseWait": "Bitte warten…", "removeBackground": "Hintergrund entfernen", "slightBlur": "Hintergrund leicht unscharf", "title": "Hintergründe", @@ -1474,11 +1535,22 @@ }, "visitors": { "chatIndicator": "(Gast)", + "joinMeeting": { + "description": "Sie beobachten derzeit diese Konferenz.", + "raiseHand": "Hand heben", + "title": "Konferenz wird beigetreten", + "wishToSpeak": "Wenn Sie sprechen möchten, heben Sie bitte unten Ihre Hand und warten Sie auf die Zustimmung der Moderation" + }, "labelTooltip": "Anzahl Gäste: {{count}}", "notification": { - "description": "Bitte melden Sie sich um teilzunehmen", + "demoteDescription": "Hierhin verschoben von {{actor}}, bitte melden Sie sich um teilzunehmen", + "noMainParticipantsDescription": "Eine Person muss die Konferenz starten. Bitte versuchen Sie es gleich noch einmal.", + "noMainParticipantsTitle": "Diese Konferenz wurde noch nicht gestartet.", + "noVisitorLobby": "Sie können nicht teilnehmen, solange die Lobby für diese Konferenz aktiviert ist.", + "notAllowedPromotion": "Eine Person muss Ihre Anfrage erst erlauben.", "title": "Sie sind Gast in der Konferenz" - } + }, + "waitingMessage": "Sie werden der Konferenz beitreten, sobald sie gestartet ist!" }, "volumeSlider": "Lautstärkeregler", "welcomepage": { @@ -1494,15 +1566,15 @@ }, "calendar": "Kalender", "connectCalendarButton": "Kalender verbinden", - "connectCalendarText": "Verbinden Sie Ihren Kalender, um all Ihre Meetings in {{app}} anzuzeigen. Fügen Sie zudem {{provider}}-Meetings in Ihren Kalender ein und starten Sie sie mit nur einem Klick.", - "enterRoomTitle": "Neues Meeting starten", + "connectCalendarText": "Verbinden Sie Ihren Kalender, um all Ihre Konferenzen in {{app}} anzuzeigen. Fügen Sie zudem {{provider}}-Konferenzen in Ihren Kalender ein und starten Sie sie mit nur einem Klick.", + "enterRoomTitle": "Neue Konferenz starten", "getHelp": "Hilfe", "go": "Los", "goSmall": "Los", "headerSubtitle": "Sichere und hochqualitative Meetings", "headerTitle": "Internxt Meet", "info": "Einwahlinformationen", - "jitsiOnMobile": "Jitsi unterwegs – einfach unsere Apps herunterladen und Meetings von überall starten", + "jitsiOnMobile": "Jitsi unterwegs – einfach unsere Apps herunterladen und Konferenzen von überall starten", "join": "ERSTELLEN / BEITRETEN", "logo": { "calendar": "Kalender Logo", @@ -1528,7 +1600,7 @@ "roomnameHint": "Name oder URL der Konferenz, der Sie beitreten möchten. Sie können einen Namen erfinden, er muss nur den anderen Personen übermittelt werden, damit diese der gleichen Konferenz beitreten.", "sendFeedback": "Feedback senden", "settings": "Einstellungen", - "startMeeting": "Meeting starten", + "startMeeting": "Konferenz starten", "terms": "AGB", "title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen", "upcomingMeetings": "Ihre zukünftigen Konferenzen" @@ -1536,6 +1608,7 @@ "whiteboard": { "accessibilityLabel": { "heading": "Whiteboard" - } + }, + "screenTitle": "Whiteboard" } } diff --git a/lang/main-dsb.json b/lang/main-dsb.json index 83b126362e48..1aa61f8e81de 100644 --- a/lang/main-dsb.json +++ b/lang/main-dsb.json @@ -19,7 +19,7 @@ "noResults": "Žedne se góźece rezulaty pytanja njedajo", "outlookEmail": "Outlook-e-mail", "phoneNumbers": "telefonowe numery", - "searching": "Pytanje trajo...", + "searching": "Pytanje trajo…", "shareInvite": "pśepšosenje na zgromaźinu spśistupniś", "shareLink": "Spśistupniśo link za konferencu, aby drugich pśepšosyli.", "shareStream": "link za livestream spśistupniś", @@ -666,7 +666,7 @@ "linkToSalesforceDescription": "Wy móžośo wopowěsć wót konference pśez link z objektom pla Saleforce zwězaś.", "linkToSalesforceError": "Konferenz njejo mógła se ze Saleforce zwězaś.", "linkToSalesforceKey": "konferencu zalinkowaś", - "linkToSalesforceProgress": "Zwězanje konference ze Salesforce se twari...", + "linkToSalesforceProgress": "Zwězanje konference ze Salesforce se twari…", "linkToSalesforceSuccess": "Konferenca jo se ze Salesforce zwězała.", "localRecordingStarted": "{{name}} jo lokalne nagrawanje zachopił/-a.", "localRecordingStopped": "{{name}} jo lokalne nagrawanje dokóńcował/-a.", @@ -845,7 +845,6 @@ "or": "abo", "premeeting": "naglěd", "screenSharingError": "zmólenje pśi sobuźělenju monitora:", - "showScreen": "naglěd konferency aktiwěrowaś", "startWithPhone": "zachopiś z telefonowym audio", "videoOnlyError": "zmólenje wideo:", "videoTrackError": "Sćažka wideo njejo mógła se załožyś.", @@ -916,7 +915,7 @@ "localRecordingStartWarningTitle": "nagrawanje dokóńcowaś a zachowaś", "localRecordingVideoStop": "Gaž kameru wušaltujośo, ga teke lokalne nagrawanje se dokóńcujo. Sćo-li napšawdu wěste, až to cośo?", "localRecordingVideoWarning": "Aby bildu ze swójeje samskeje kamery nagrawali, musyśo swóju kameru na zachopjeńku nagrawanja zašaltowaś.", - "localRecordingWarning": "Pśespytujśo, lěc sćo aktuelnu kórtu wuzwólili, aby wideo a zuk nagrawali. Dłujkosć nagrawanja jo tuchylu na 1 GB wobgranicowana, což dosega za jadnab 100 minutow.", + "localRecordingWarning": "Pśespytujśo, lěc sćo aktuelnu kórtu wuzwólili, aby wideo a zuk nagrawali.", "loggedIn": "ako {{userName}} zalogowany/-a", "noMicPermission": "", "noStreams": "Žeden zuk a žeden wideo njejo namakany.", @@ -1238,16 +1237,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Wuzwólśo opciju pśiwdaś, gaž browser wó pšawa pšosy.", - "chromeGrantPermissions": "Wuzwólśo opciju pśiwdaś, gaž browser wó pšawa pšosy.", - "edgeGrantPermissions": "Wuzwólśo opciju jo, gaž browser wó pšawa pšosy.", - "electronGrantPermissions": "pšawa k wužywanju Wašeje kamery a mikrofona wuźěliś", - "firefoxGrantPermissions": "Wuzwólśo opciju dowóliś, gaž browser wó pšawa pšosy.", - "iexplorerGrantPermissions": "Wuzwólśo opciju OK, gaž browser wó pšawa pšosy.", - "nwjsGrantPermissions": "pšawa k wužywanju Wašeje kamery a mikrofona wuźěliś", - "operaGrantPermissions": "Wuzwólśo opciju pśiwdaś, gaž browser wó pšawa pšosy.", - "react-nativeGrantPermissions": "Wuzwólśo opciju dowóliś, gaž browser wó pšawa pšosy.", - "safariGrantPermissions": "Wuzwólśo opciju OK, gaž browser wó pšawa pšosy." + "grantPermissions": "pšawa k wužywanju Wašeje kamery a mikrofona wuźěliś." }, "videoSIPGW": { "busy": "Źěłamy na tom, aby resurse se k dispoziciji stajili. Wopytajśo za pór minutow hyšći raz.", @@ -1319,7 +1309,7 @@ "image6": "góla", "image7": "górjejhyśe słyńcka", "none": "žeden motiw", - "pleaseWait": "Cakajśo...", + "pleaseWait": "Cakajśo…", "removeBackground": "slězynu wótpóraś", "slightBlur": "slězyna pitśku njewótša", "title": "slězyny", diff --git a/lang/main-el.json b/lang/main-el.json index 0179c0401e0d..5bd717450d5b 100644 --- a/lang/main-el.json +++ b/lang/main-el.json @@ -19,7 +19,7 @@ "noResults": "Δε βρέθηκαν αποτελέσματα αναζήτησης", "outlookEmail": "Outlook Email", "phoneNumbers": "τηλεφωνικοί αριθμοί", - "searching": "Αναζήτηση...", + "searching": "Αναζήτηση…", "shareInvite": "Μοίρασε την πρόσκληση στη συνάντηση", "shareLink": "Μοίρασε αυτό το σύνδεσμο της συνάντησης για να προσκαλέσεις και άλλα άτομα", "shareStream": "Διαμοιρασμός του συνδέσμου ζωντανής μετάδοσης", @@ -122,7 +122,7 @@ "installExtensionText": "Εγκατάσταση της επέκτασης για ενσωμάτωση του Google Calendar και του Office 365" }, "connectingOverlay": { - "joiningRoom": "Σύνδεση στη σύσκεψη σας..." + "joiningRoom": "Σύνδεση στη σύσκεψη σας…" }, "connection": { "ATTACHED": "Συνημμένο", @@ -134,9 +134,9 @@ "DISCONNECTED": "Αποσυνδέθηκε", "DISCONNECTING": "Γίνεται αποσύνδεση", "ERROR": "Σφάλμα", - "FETCH_SESSION_ID": "Απόκτηση session-id...", + "FETCH_SESSION_ID": "Απόκτηση session-id…", "GET_SESSION_ID_ERROR": "Λήψη σφάλματος session-id: {{code}}", - "GOT_SESSION_ID": "Απόκτηση session-id... Έγινε", + "GOT_SESSION_ID": "Απόκτηση session-id… Έγινε", "LOW_BANDWIDTH": "Η εικόνα για {{displayName}} απενεργοποιήθηκε για εξοικονόμηση ταχύτητας" }, "connectionindicator": { @@ -157,7 +157,7 @@ "maxEnabledResolution": "αποστολή μέγιστης", "more": "Περισσότερα", "packetloss": "Απώλειες πακέτων:", - "participant_id": "Id συμμετέχων:", + "participant_id": "Id συμμετέχοντα:", "quality": { "good": "Καλή", "inactive": "Ανενεργό", @@ -182,7 +182,7 @@ "yesterday": "Χθες" }, "deepLinking": { - "appNotInstalled": "Χρειάζεστε την εφαρμογή {{app}} για το κινητό σας για συμμετοχή σε αυτή τη σύσκεψη στο τηλέφωνό σας.", + "appNotInstalled": "Χρειάζεστε την εφαρμογή {{app}} για το κινητό σας για συμμετοχή σε αυτή τη σύσκεψη μέσα από το τηλέφωνό σας.", "description": "Δεν έγινε τίποτα; Έγινε προσπάθεια να ξεκινήσει η σύσκεψη με την εφαρμογή desktop {{app}}. Προσπαθήστε ξανά ή μπείτε από το web το {{app}}.", "descriptionNew": "Δεν έγινε τίποτα; Έγινε προσπάθεια να ξεκινήσει η σύσκεψη με την εφαρμογή desktop {{app}}.

Προσπαθήστε ξανά ή μπείτε από το web.", "descriptionWithoutWeb": "Δεν έγινε τίποτα; Έγινε προσπάθεια να ξεκινήσει η σύσκεψη στην εφαρμογή desktop {{app}}.", @@ -197,8 +197,8 @@ "launchWebButton": "Εκκίνηση στο web", "noMobileApp": "Δεν έχετε την εφαρμογή;", "termsAndConditions": "Με το να συνεχίσετε συμφωνείτε με τους όρους και συνθήκες.", - "title": "Έναρξη της σύσκεψης σας στο {{app}}...", - "titleNew": "Δημιουργία της σύσκεψης σας...", + "title": "Έναρξη της σύσκεψης σας στο {{app}}…", + "titleNew": "Δημιουργία της σύσκεψης σας…", "tryAgainButton": "Προσπαθήστε ξανά στο desktop", "unsupportedBrowser": "Φαίνεται ότι χρησιμοποιείτε ένα browser που δεν υποστηρίζουμε." }, @@ -236,8 +236,8 @@ "Remove": "Αφαίρεση", "Share": "Μοιραστείτε", "Submit": "Υποβολή", - "WaitForHostMsg": "Η σύσκεψη δεν έχει αρχίσει ακόμη. Αν είστε διοργανωτής, τότε παρακαλούμε να ταυτοποιήσετε τον εαυτό σας. Διαφορετικά, παρακαλώ αναμένατε να συνδεθεί κάποιος διοργανωτής.", - "WaitingForHostTitle": "Αναμονή για διοργανωτή ...", + "WaitForHostMsg": "Η σύσκεψη δεν έχει αρχίσει ακόμη. Αν είστε διοργανωτής, τότε παρακαλούμε να ταυτοποιήσετε τον εαυτό σας. Διαφορετικά, παρακαλώ αναμείνετε να συνδεθεί κάποιος διοργανωτής.", + "WaitingForHostTitle": "Αναμονή για διοργανωτή…", "Yes": "Ναι", "accessibilityLabel": { "close": "Κλείσιμο", @@ -261,9 +261,9 @@ "cameraUnknownError": "Αδυναμία χρήσης της κάμερας για κάποιο άγνωστο λόγο.", "cameraUnsupportedResolutionError": "Η κάμερα σας δεν υποστηρίζει την απαιτούμενη ανάλυση εικόνας.", "close": "Κλείσιμο", - "conferenceDisconnectMsg": "Παρακαλώ ελέγξτε τη δικτυακή σύνδεση σας. Επανασύνδεση σε {{seconds}} δευτερόλεπτα...", + "conferenceDisconnectMsg": "Παρακαλώ ελέγξτε τη δικτυακή σύνδεση σας. Επανασύνδεση σε {{seconds}} δευτερόλεπτα…", "conferenceDisconnectTitle": "Έχετε αποσυνδεθεί.", - "conferenceReloadMsg": "Προσπαθούμε να το διορθώσουμε. Επανασύνδεση σε {{seconds}} δευτερόλεπτα...", + "conferenceReloadMsg": "Προσπαθούμε να το διορθώσουμε. Επανασύνδεση σε {{seconds}} δευτερόλεπτα…", "conferenceReloadTitle": "Δυστυχώς, κάτι πήγε στραβά.", "confirm": "Επιβεβαίωση", "confirmNo": "Όχι", @@ -296,8 +296,8 @@ "internalErrorTitle": "Εσωτερικό σφάλμα", "kickMessage": "Μπορείτε να επικοινωνήσετε με το {{participantDisplayName}} για περισσότερες λεπτομέρειες.", "kickParticipantButton": "Αποβολή", - "kickParticipantDialog": "Σίγουρα θέλετε να αποβάλλεται αυτόν το συμμετέχων;", - "kickParticipantTitle": "Αποβολή αυτού του συμμετέχων;", + "kickParticipantDialog": "Σίγουρα θέλετε να αποβάλλετε αυτόν το συμμετέχοντα;", + "kickParticipantTitle": "Αποβολή αυτού του συμμετέχοντα;", "kickTitle": "Ωχ! Ο/Η {{participantDisplayName}} σας απέβαλε από τη σύσκεψη", "linkMeeting": "Σύνδεση σύσκεψης", "linkMeetingTitle": "Σύνδεση σύσκεψης στο Salesforce", @@ -318,7 +318,7 @@ "micNotSendingDataTitle": "Το μικρόφωνο είναι σε σίγηση στις ρυθμίσεις του συστήματός σας", "micPermissionDeniedError": "Δεν έχετε δώσει την άδεια για χρήση του μικροφώνου. Μπορείτε ακόμα να συμμετάσχετε στη σύσκεψη, αλλά οι άλλοι δεν θα μπορούν να σας ακούσουν. Χρησιμοποιήστε το κουμπί της κάμερας στη γραμμή διεύθυνσης για να το διορθώσετε.", "micTimeoutError": "Αδυναμία εκκίνησης της πηγής ήχου. Λήξη του χρονικού ορίου!", - "micUnknownError": "Αδυναμία χρήσης του μικρόφωνου για ένα άγνωστο λόγο.", + "micUnknownError": "Αδυναμία χρήσης του μικροφώνου για ένα άγνωστο λόγο.", "moderationAudioLabel": "Επιτρέψτε στους συμμετέχοντες να καταργούν τη σίγηση τους", "moderationVideoLabel": "Επιτρέψτε στους συμμετέχοντες να ξεκινούν το βίντεο τους", "muteEveryoneDialog": "Οι συμμετέχοντες μπορούν να καταργούν την σίγηση τους.", @@ -339,12 +339,12 @@ "muteParticipantsVideoBody": "Δε θα μπορείτε εσείς να ενεργοποιήσετε ξανά τη κάμερα, αλλά αυτοί θα μπορούν οποιαδήποτε στιγμή.", "muteParticipantsVideoBodyModerationOn": "Δε θα μπορείτε εσείς να ενεργοποιήσετε ξανά τη κάμερα, αλλά ούτε και αυτοί.", "muteParticipantsVideoButton": "Διακοπή του βίντεο", - "muteParticipantsVideoDialog": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχων; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, μόνο αυτοί θα μπορούν να την ανοίξουν.", - "muteParticipantsVideoDialogModerationOn": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχων; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, ούτε αυτοί θα μπορούν.", - "muteParticipantsVideoTitle": "Απενεργοποίηση της κάμερας αυτού του συμμετέχων;", + "muteParticipantsVideoDialog": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχοντα; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, μόνο αυτοί θα μπορούν να την ανοίξουν.", + "muteParticipantsVideoDialogModerationOn": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχοντα; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, ούτε αυτοί θα μπορούν.", + "muteParticipantsVideoTitle": "Απενεργοποίηση της κάμερας αυτού του συμμετέχοντα;", "noDropboxToken": "Μη έγκυρο διακριτικό Dropbox", "password": "Κωδικός πρόσβασης", - "passwordLabel": "Η συνάντηση έχει κλειδωθεί από έναν συμμετέχων. Παρακαλώ εισάγετε το $t(lockRoomPassword) για να συμμετέχετε.", + "passwordLabel": "Η συνάντηση έχει κλειδωθεί από κάποιον συμμετέχοντα. Παρακαλώ εισάγετε το $t(lockRoomPassword) για να συμμετέχετε.", "passwordNotSupported": "Ο ορισμός ενός $t(lockRoomPassword) στη συνάντηση δεν υποστηρίζεται.", "passwordNotSupportedTitle": "Δεν υποστηρίζεται $t(lockRoomPasswordUppercase)", "passwordRequired": "Απαιτείται $t(lockRoomPasswordUppercase)", @@ -427,7 +427,7 @@ "userPassword": "Κωδικός πρόσβασης χρήστη", "verifyParticipantConfirm": "Ταιριάζουν", "verifyParticipantDismiss": "Δεν ταιριάζουν", - "verifyParticipantQuestion": "ΠΕΙΡΑΜΑΤΙΚΟ: Ρωτήστε το συμμετέχων {{participantName}} αν βλέπουν το ίδιο περιεχόμενο, με την ίδια σειρά.", + "verifyParticipantQuestion": "ΠΕΙΡΑΜΑΤΙΚΟ: Ρωτήστε τον συμμετέχοντα {{participantName}} αν βλέπουν το ίδιο περιεχόμενο, με την ίδια σειρά.", "verifyParticipantTitle": "Πιστοποίηση χρήστη", "videoLink": "Σύνδεσμο βίντεο", "viewUpgradeOptions": "Εμφάνιση επιλογών αναβάθμισης", @@ -514,7 +514,7 @@ "inviteDialog": { "alertText": "Αποτυχία πρόσκλησης μερικών συμμετεχόντων.", "header": "Πρόσκληση", - "searchCallOnlyPlaceholder": "Εισάγετε το τηλεφωνικό αριθμό", + "searchCallOnlyPlaceholder": "Εισάγετε τον τηλεφωνικό αριθμό", "searchPeopleOnlyPlaceholder": "Αναζήτηση συμμετεχόντων", "searchPlaceholder": "Συμμετέχων ή αριθμός τηλεφώνου", "send": "Αποστολή" @@ -523,7 +523,7 @@ "keyboardShortcuts": { "focusLocal": "Εστίαση στο βίντεο σας", "focusRemote": "Εστίαση στο βίντεο ενός άλλου", - "fullScreen": "Εναλλαγή πλήρης οθόνης", + "fullScreen": "Εναλλαγή πλήρους οθόνης", "giphyMenu": "Εναλλαγή μενού GIPHY", "keyboardShortcuts": "Συντομεύσεις πληκτρολογίου", "localRecording": "Εμφάνιση ή απόκρυψη χειριστηρίων καταγραφής", @@ -554,7 +554,7 @@ "errorLiveStreamNotEnabled": "Η ζωντανή ροή δεν είναι ενεργοποιημένη για το {{email}}. Ενεργοποιήστε τη ζωντανή ροή ή συνδεθείτε σε ένα λογαριασμό με ενεργοποιημένη τη ζωντανή ροή.", "expandedOff": "Η ζωντανή ροή σταμάτησε", "expandedOn": "Η σύσκεψη μεταδίδεται τώρα στο YouTube.", - "expandedPending": "Η ζωντανή ροή πρόκειται να ξεκινήσει...", + "expandedPending": "Η ζωντανή ροή πρόκειται να ξεκινήσει…", "failedToStart": "Η ζωντανή ροή απέτυχε να ξεκινήσει", "getStreamKeyManually": "Αδυναμία λήψης κάποιας ζωντανής ροής. Προσπαθήστε να πάρετε το κλειδί ζωντανής ροής από το YouTube.", "googlePrivacyPolicy": "Πολιτική Απορρήτου της Google", @@ -566,7 +566,7 @@ "offBy": "{{name}} σταμάτησε τη ζωντανή ροή", "on": "Η Ζωντανή Ροή ξεκίνησε", "onBy": "{{name}} ξεκίνησε τη ζωντανή ροή", - "pending": "Η Ζωντανή Ροή Ξεκινάει...", + "pending": "Η Ζωντανή Ροή Ξεκινάει…", "serviceName": "Υπηρεσία Ζωντανής Ροής", "sessionAlreadyActive": "Η συνεδρία ήδη γράφεται ή είναι σε ζωντανή ροή.", "signIn": "Συνδεθείτε μέσω του Google", @@ -596,10 +596,10 @@ "joinRejectedMessage": "Το αίτημα εισόδου σας απορρίφθηκε από έναν συντονιστή.", "joinRejectedTitle": "Το αίτημα σύνδεσης απορρίφθηκε.", "joinTitle": "Συμμετοχή στη Σύσκεψη", - "joinWithPasswordMessage": "Γίνεται είσοδος με κωδικό, παρακαλώ περιμένετε...", + "joinWithPasswordMessage": "Γίνεται είσοδος με κωδικό, παρακαλώ περιμένετε…", "joiningMessage": "Θα προστεθείτε στη σύσκεψη μόλις κάποιος αποδεχτεί το αίτημά σας", - "joiningTitle": "Αίτηση εισόδου στη σύσκεψη...", - "joiningWithPasswordTitle": "Είσοδος με κωδικό πρόσβασης...", + "joiningTitle": "Αίτηση εισόδου στη σύσκεψη…", + "joiningWithPasswordTitle": "Είσοδος με κωδικό πρόσβασης…", "knockButton": "Αίτηση Συμμετοχής", "knockTitle": "Κάποιος θέλει να συμμετέχει στη σύσκεψη", "knockingParticipantList": "Ειδοποίηση λίστας συμμετεχόντων", @@ -714,8 +714,8 @@ "oldElectronClientDescription3": " τώρα!", "participantWantsToJoin": "Θέλει να συμμετέχει στη σύσκεψη", "participantsWantToJoin": "Θέλουν να συμμετέχουν στη σύσκεψη", - "passwordRemovedRemotely": "Το $t(lockRoomPasswordUppercase) αφαιρέθηκε από έναν άλλον συμμετέχων", - "passwordSetRemotely": "Το $t(lockRoomPasswordUppercase) ορίστηκε από άλλον συμμετέχων", + "passwordRemovedRemotely": "Το $t(lockRoomPasswordUppercase) αφαιρέθηκε από έναν άλλον συμμετέχοντα", + "passwordSetRemotely": "Το $t(lockRoomPasswordUppercase) ορίστηκε από άλλον συμμετέχοντα", "raiseHandAction": "Σήκωσε χέρι", "raisedHand": "Θέλει να μιλήσει.", "raisedHands": "ο/η {{participantName}} και {{raisedHands}} άλλοι", @@ -772,7 +772,7 @@ "title": "Συμμετέχοντες" }, "passwordDigitsOnly": "Έως {{number}} ψηφία", - "passwordSetRemotely": "Ορίστηκε από ένα άλλον συμμετέχων", + "passwordSetRemotely": "Ορίστηκε από ένα άλλον συμμετέχοντα", "pinParticipant": "{{participantName}} - Διατήρηση", "pinnedParticipant": "Ο συμμετέχων έχει διατηρηθεί", "polls": { @@ -816,7 +816,7 @@ "callMe": "Καλέστε με", "callMeAtNumber": "Καλέστε με σε αυτό το νούμερο:", "calling": "Γίνεται κλήση", - "configuringDevices": "Ρύθμιση συσκευών...", + "configuringDevices": "Ρύθμιση συσκευών…", "connectedWithAudioQ": "Είστε συνδεδεμένοι με ήχο;", "connection": { "good": "Η σύνδεση σας στο Διαδίκτυο φαίνεται καλή!", @@ -862,7 +862,6 @@ "or": "ή", "premeeting": "Προ σύσκεψη", "screenSharingError": "Σφάλμα διαμοιρασμού οθόνης:", - "showScreen": "Ενεργοποίηση οθόνης προ σύσκεψης", "startWithPhone": "Ξεκινήστε με ήχο τηλεφώνου", "videoOnlyError": "Σφάλμα βίντεο:", "videoTrackError": "Δεν ήταν δυνατή η δημιουργία κομματιού βίντεο.", @@ -870,17 +869,17 @@ }, "presenceStatus": { "busy": "Κατειλημμένο", - "calling": "Καλεί...", + "calling": "Καλεί…", "connected": "Συνδέθηκε", - "connecting": "Γίνεται σύνδεση...", - "connecting2": "Γίνεται σύνδεση*...", + "connecting": "Γίνεται σύνδεση…", + "connecting2": "Γίνεται σύνδεση*…", "disconnected": "Αποσυνδέθηκε", "expired": "Έληξε", "ignored": "Αγνοήθηκε", - "initializingCall": "Αρχικοποίηση Κλήσης...", + "initializingCall": "Αρχικοποίηση Κλήσης…", "invited": "Προσκλήθηκε", "rejected": "Απορρίφθηκε", - "ringing": "Καλεί..." + "ringing": "Καλεί…" }, "profile": { "avatar": "avatar", @@ -911,7 +910,7 @@ "errorFetchingLink": "Σφάλμα στη λήψη του συνδέσμου καταγραφής.", "expandedOff": "Η καταγραφή έχει διακοπεί", "expandedOn": "Αυτή τη στιγμή η σύσκεψη καταγράφεται.", - "expandedPending": "Η καταγραφή ξεκινά...", + "expandedPending": "Η καταγραφή ξεκινά…", "failedToStart": "Η καταγραφή απέτυχε να ξεκινήσει", "fileSharingdescription": "Μοιραστείτε την καταγραφή με τους συμμετέχοντες της σύσκεψης", "highlight": "Επισήμανση", @@ -930,7 +929,7 @@ "localRecordingStartWarningTitle": "Σταματήστε τη καταγραφή για να την αποθηκεύσετε", "localRecordingVideoStop": "Σταματώντας το βίντεο σας θα σταματήσει και η τοπική καταγραφή. Θέλετε να συνεχίσετε;", "localRecordingVideoWarning": "Για να καταγράψετε το βίντεο σας πρέπει να είναι ήδη ενεργό όταν ξεκινήσει η καταγραφή", - "localRecordingWarning": "Βεβαιωθείτε ότι επιλέξατε τη τρέχουσα σελίδα ώστε να χρησιμοποιηθούν το σωστό βίντεο και ήχος. Αυτή τη στιγμή η καταγραφή είναι μέχρι 1GB, περίπου 100 λεπτά.", + "localRecordingWarning": "Βεβαιωθείτε ότι επιλέξατε τη τρέχουσα σελίδα ώστε να χρησιμοποιηθούν το σωστό βίντεο και ήχος.", "loggedIn": "Συνδέθηκε ως {{userName}}", "noMicPermission": "Δεν ήταν δυνατή η δημιουργία του κομματιού του μικροφώνου. Παρακαλώ δώστε την άδεια για χρήση του.", "noStreams": "Δεν εντοπίστηκε ροή ήχου ή βίντεο.", @@ -939,7 +938,7 @@ "on": "Η καταγραφή ξεκίνησε", "onBy": "Ο/Η {{name}} ξεκίνησε την καταγραφή", "onlyRecordSelf": "Καταγραφή μόνο των δικών μου ροών ήχου και βίντεο", - "pending": "Προετοιμασία για την καταγραφή της σύσκεψης...", + "pending": "Προετοιμασία για την καταγραφή της σύσκεψης…", "rec": "ΕΓΓΡΑΦΗ", "saveLocalRecording": "Αποθήκευση καταγραφής τοπικά (Beta)", "serviceDescription": "Η καταγραφή σας θα αποθηκευτεί από την υπηρεσία καταγραφής", @@ -984,7 +983,7 @@ "incomingMessage": "Εισερχόμενο μήνυμα", "language": "Γλώσσα", "loggedIn": "Συνδέθηκε ως {{name}}", - "maxStageParticipants": "Μέγιστος αριθμός συμμετεχόντων που μπορούν να διατηρηθούν στην κύρια σκηνή (ΠΕΙΡΑΜΑΤΙΚΟ)", + "maxStageParticipants": "Μέγιστος αριθμός συμμετεχόντων που μπορούν να διατηρηθούν στην κύρια σκηνή", "microphones": "Μικρόφωνα", "moderator": "Συντονιστής", "moderatorOptions": "Επιλογές συντονιστή", @@ -1101,7 +1100,7 @@ "download": "Κατεβάστε τις εφαρμογές μας", "embedMeeting": "Ενσωμάτωση σύσκεψης", "endConference": "Λήξη της σύσκεψης για όλους", - "enterFullScreen": "Εμφάνιση πλήρης οθόνης", + "enterFullScreen": "Εμφάνιση πλήρους οθόνης", "enterTileView": "Είσοδος σε προβολή εικονιδίων", "exitFullScreen": "Έξοδος από πλήρη οθόνη", "exitTileView": "Έξοδος από προβολή εικονιδίων", @@ -1115,7 +1114,7 @@ "help": "Βοήθεια", "hideWhiteboard": "Απόκρυψη μαυροπίνακα", "invite": "Προσκαλέστε άτομα", - "kick": "Αποβολή συμμετέχων", + "kick": "Αποβολή συμμετέχοντα", "laugh": "Γέλιο", "leaveConference": "Αποχώρηση από την σύσκεψη", "like": "Εγκρίνω", @@ -1141,8 +1140,8 @@ "raiseHand": "Σηκώστε το χέρι σας", "reactionsMenu": "Μενού αντιδράσεων", "recording": "Εναλλαγή καταγραφής", - "remoteMute": "Σίγηση συμμετέχων", - "remoteVideoMute": "Απενεργοποίηση της κάμερας του συμμετέχων", + "remoteMute": "Σίγηση συμμετέχοντα", + "remoteVideoMute": "Απενεργοποίηση της κάμερας του συμμετέχοντα", "security": "Επιλογές ασφαλείας", "selectBackground": "Επιλογή Φόντου", "selfView": "Εναλλαγή αυτοπροβολής", @@ -1188,7 +1187,7 @@ "embedMeeting": "Ενσωμάτωση σύσκεψης", "enableNoiseSuppression": "Ενεργοποίηση εξάλειψης θορύβου", "endConference": "Λήξη της σύσκεψης για όλους", - "enterFullScreen": "Εμφάνιση πλήρης οθόνης", + "enterFullScreen": "Εμφάνιση πλήρους οθόνης", "enterTileView": "Προβολή εικονιδίων", "exitFullScreen": "Έξοδος από πλήρη οθόνη", "exitTileView": "Έξοδος από προβολή εικονιδίων", @@ -1267,7 +1266,7 @@ "failedToStart": "Η μεταγραφή απέτυχε να ξεκινήσει", "labelToolTip": "Η συνάντηση μεταγράφεται", "off": "Η μεταγραφή σταμάτησε", - "pending": "Προετοιμασία για μεταγραφή της συνάντησης...", + "pending": "Προετοιμασία για μεταγραφή της συνάντησης…", "sourceLanguageDesc": "Η γλώσσα της σύσκεψης αυτή τη στιγμή έχει οριστεί σε {{sourceLanguage}}.
Μπορείτε να την αλλάξετε από ", "sourceLanguageHere": "εδώ", "start": "Εμφάνιση υποτίτλων", @@ -1278,16 +1277,7 @@ }, "unpinParticipant": "{{participantName}} - Μη Διατήρηση", "userMedia": { - "androidGrantPermissions": "Επιλέξτε Αποδοχή όταν ο browser ζητήσει για άδεια χρήσης.", - "chromeGrantPermissions": "Επιλέξτε Αποδοχή όταν ο browser ζητήσει για άδεια χρήσης.", - "edgeGrantPermissions": "Επιλέξτε Ναι όταν ο browser ζητήσει για άδεια χρήσης.", - "electronGrantPermissions": "Δοκιμή πρόσβασης της κάμερας και του μικροφώνου", - "firefoxGrantPermissions": "Επιλέξτε Μοιραστείτε την Επιλεγμένη Συσκευή όταν ο browser ζητήσει για άδεια.", - "iexplorerGrantPermissions": "Επιλέξτε OK όταν ο browser σας ζητήσει άδεια χρήσης.", - "nwjsGrantPermissions": "Παρακαλούμε παραχωρήστε την άδεια για χρήση της κάμερα και του μικροφώνου", - "operaGrantPermissions": "Επιλέξτε Αποδοχή όταν ο browser σας ζητήσει για άδεια χρήσης.", - "react-nativeGrantPermissions": "Επιλέξτε Αποδοχή όταν ο browser σας ζητήσει για άδεια χρήσης.", - "safariGrantPermissions": "Επιλέξτε OK όταν ο browser σας ζητήσει άδεια χρήσης." + "grantPermissions": "Παρακαλούμε παραχωρήστε την άδεια για χρήση της κάμερα και του μικροφώνου." }, "videoSIPGW": { "busy": "Γίνεται προσπάθεια για την απελευθέρωση πόρων. Παρακαλώ δοκιμάστε ξανά σε λίγα λεπτά.", @@ -1337,11 +1327,11 @@ "muted": "Σίγηση", "pinToStage": "Διατήρηση στη σκηνή", "remoteControl": "Εκκίνηση / Διακοπή ελέγχου από μακριά", - "screenSharing": "Ο συμμετέχων μοιράζει την οθόνη τους", + "screenSharing": "Ο συμμετέχων διαμοιράζεται την οθόνη του", "show": "Εμφάνιση στη σκηνή", "showSelfView": "Εμφάνιση αυτοπροβολής", "unpinFromStage": "Μη διατήρηση", - "verify": "Επιβεβαίωση συμμετέχων", + "verify": "Επιβεβαίωση συμμετέχοντα", "videoMuted": "Η κάμερα απενεργοποιήθηκε", "videomute": "Ο συμμετέχων σταμάτησε τη κάμερα" }, @@ -1361,7 +1351,7 @@ "image6": "Δάσος ", "image7": "Ανατολή", "none": "Κανένα", - "pleaseWait": "Παρακαλώ αναμένατε...", + "pleaseWait": "Παρακαλώ αναμένατε…", "removeBackground": "Αφαίρεση φόντου", "slightBlur": "Μισό Θόλωμα", "title": "Εικονικά φόντα", diff --git a/lang/main-eo.json b/lang/main-eo.json index 46d82bb6c235..cd7b2093ad51 100644 --- a/lang/main-eo.json +++ b/lang/main-eo.json @@ -222,7 +222,7 @@ "noMobileApp": "Ĉu vi ne jam havas la aplikaĵon?", "termsAndConditions": "Daŭrigante, vi konsentas kun niaj kondiĉoj.", "title": "Enirante vian kunvenon per {{app}}…", - "titleNew": "Enirante vian kunvenon...", + "titleNew": "Enirante vian kunvenon…", "tryAgainButton": "Provu denove per la komputila aplikaĵo", "unsupportedBrowser": "Ŝajnas ke vi uzas nesubtenitan retumilon" }, @@ -925,7 +925,7 @@ "iWantToDialIn": "Mi volas alvoki", "initiated": "Voko komencita", "joinAudioByPhone": "Aliĝu kun telefona mikrofono", - "joinMeeting": "Aliĝu al la kunvenon", + "joinMeeting": "Aliĝu al la kunveno", "joinMeetingInLowBandwidthMode": "Aliĝu en malaltkapacita modo", "joinWithoutAudio": "Aliĝu sen mikrofono", "keyboardShortcuts": "Ŝaltu fulmoklavojn", @@ -935,7 +935,6 @@ "premeeting": "Antaŭkunveno", "proceedAnyway": "Daŭrigi", "screenSharingError": "Eraro kun la ekrandividado:", - "showScreen": "Ebligu antaŭkunvenon ekranon", "startWithPhone": "Komencu kun la telefona sono", "unsafeRoomConsent": "Akceptu la riskojn, kaj daŭrigi", "videoOnlyError": "Eraro kun la videaĵo:", @@ -1007,7 +1006,7 @@ "localRecordingStartWarningTitle": "Ĉesigu la registradon por konservi ĝin.", "localRecordingVideoStop": "Ĉesigi vian videaĵon ankaŭ ĉesos la lokan registradon. Ĉu vi certas, ke vi volas daŭrigi?", "localRecordingVideoWarning": "Por registri vian videon, ŝaltu la kameraon antaŭ vi komencas la registradon.", - "localRecordingWarning": "Certigu, ke vi elektas la nunan langeton por uzi la ĝustajn filmetojn kaj sonojn. La registrado estas nuntempe limigita al 1GB, kio estas proksimume 100 minutoj.", + "localRecordingWarning": "Certigu, ke vi elektas la nunan langeton por uzi la ĝustajn filmetojn kaj sonojn.", "loggedIn": "Ensalutinta kiel {{userName}}", "noMicPermission": "Mikrofono ne povis esti uzata. Bonvole donu permeson uzi la mikrofonon.", "noStreams": "Neniu aŭdio aŭ videofluo detektita.", @@ -1070,7 +1069,7 @@ "incomingMessage": "Envena mesaĝo", "language": "Lingvo", "loggedIn": "Ensalutinta kiels {{name}}", - "maxStageParticipants": "Maksimuma nombro da partoprenantoj, kiuj povas esti alpinglitaj al la ĉefa scenejo (EXPERIMENTA)", + "maxStageParticipants": "Maksimuma nombro da partoprenantoj, kiuj povas esti alpinglitaj al la ĉefa scenejo", "microphones": "Mikrofonoj", "moderator": "Kunvenestro", "moderatorOptions": "Kunvenestaj agordoj", @@ -1373,16 +1372,7 @@ }, "unpinParticipant": "{{participantName}} - Malpingli", "userMedia": { - "androidGrantPermissions": "Elektu Permesi kiam via foliumilo petos permesojn.", - "chromeGrantPermissions": "Elektu Permesi kiam via foliumilo petos permesojn.", - "edgeGrantPermissions": "Elektu Jes kiam via foliumilo petos permesojn.", - "electronGrantPermissions": "Bonvolu doni la permeson uzi viajn kameraon kaj mikrofonon", - "firefoxGrantPermissions": "Elektu Havigi elektitan aparaton kiam via foliumilo petos permesojn.", - "iexplorerGrantPermissions": "Elektu Bone kiam via foliumilo petos permesojn.", - "nwjsGrantPermissions": "Bonvolu doni la permeson uzi viajn kameraon kaj mikrofonon", - "operaGrantPermissions": "Elektu Permesi kiam via foliumilo petos permesojn.", - "react-nativeGrantPermissions": "Elektu Permesi kiam via foliumilo petos permesojn.", - "safariGrantPermissions": "Elektu Bone kiam via foliumilo petos permesojn." + "grantPermissions": "Bonvolu doni la permeson uzi viajn kameraon kaj mikrofonon." }, "videoSIPGW": { "busy": "Ni klopodas liberigi rimedojn. Bonvolu reprovi post kelkaj minutoj.", diff --git a/lang/main-esUS.json b/lang/main-es-US.json similarity index 97% rename from lang/main-esUS.json rename to lang/main-es-US.json index d9a5fec987a9..fc53519b1e94 100644 --- a/lang/main-esUS.json +++ b/lang/main-es-US.json @@ -27,7 +27,7 @@ "searchNumbers": "Agregar números telefónicos", "searchPeople": "Buscar personas", "searchPeopleAndNumbers": "Buscar personas o añadir sus números de teléfono", - "searching": "Buscando...", + "searching": "Buscando…", "shareInvite": "Compartir la invitación a la reunión", "shareLink": "Compartir el link de la reunion", "shareStream": "Compartir el link de la transmición en vivo", @@ -112,7 +112,7 @@ "GET_SESSION_ID_ERROR": "Obtener session-id error: {{code}}", "GOT_SESSION_ID": "Obteniendo session-ID… Listo", "LOW_BANDWIDTH": "El video para {{displayName}} ha sido desactivado para ahorrar ancho de banda", - "RECONNECTING": "Ocurrió un problema en la red. Reconectando..." + "RECONNECTING": "Ocurrió un problema en la red. Reconectando…" }, "connectionindicator": { "address": "Dirección:", @@ -195,7 +195,7 @@ "Submit": "Enviar", "WaitForHostMsg": "La conferencia aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.", "WaitingForHost": "Esperando al anfitrión…", - "WaitingForHostTitle": "Esperando al anfitrión...", + "WaitingForHostTitle": "Esperando al anfitrión…", "Yes": "Sí", "accessibilityLabel": { "liveStreaming": "Transmisión en vivo" @@ -536,10 +536,10 @@ "invalidPassword": "Contraseña inválida", "joinRejectedMessage": "Tu solicitud para entrar ha sido rechazada por un moderador.", "joinTitle": "Entrar a la reunión", - "joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera...", + "joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera…", "joiningMessage": "Podrás entrar tan pronto te acepten tu solicitud.", - "joiningTitle": "Pidiendo entrar a la reunión...", - "joiningWithPasswordTitle": "Uniéndose con la contraseña...", + "joiningTitle": "Pidiendo entrar a la reunión…", + "joiningWithPasswordTitle": "Uniéndose con la contraseña…", "knockButton": "Pedir entrar", "knockTitle": "Alguien quiere entrar a la reunión", "knockingParticipantList": "Participantes que quieren entrar", @@ -715,7 +715,7 @@ "callMe": "Llámame", "callMeAtNumber": "Llamame a este número:", "calling": "Llamando", - "configuringDevices": "Configurando dispositivos...", + "configuringDevices": "Configurando dispositivos…", "connectedWithAudioQ": "¿Estás está conectado con audio?", "connection": { "good": "¡Su conexión a internet es buena!", @@ -759,7 +759,6 @@ "or": "o", "premeeting": "Pre-reunión", "screenSharingError": "Error al compartir pantalla:", - "showScreen": "Habilitar pantalla pre-reunión", "startWithPhone": "Iniciar con audio de llamada telefónica", "videoOnlyError": "Error con el video:", "videoTrackError": "No se pudo crear la pista de video.", @@ -1075,16 +1074,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "chromeGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "edgeGrantPermissions": "Selecciona cuando el navegador solicite permisos.", - "electronGrantPermissions": "Otorga permisos para usar la cámara y el micrófono", - "firefoxGrantPermissions": "Selecciona Compartir dispositivo seleccionado cuando el navegador solicite permisos.", - "iexplorerGrantPermissions": "Selecciona Aceptar cuando el navegador solicite permisos.", - "nwjsGrantPermissions": "Otorga permisos para usar la cámara y el micrófono", - "operaGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "react-nativeGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "safariGrantPermissions": "Selecciona Aceptar cuando el navegador solicite permisos." + "grantPermissions": "Otorga permisos para usar la cámara y el micrófono." }, "videoSIPGW": { "busy": "Estamos trabajando para liberar recursos. Vuelve a intentarlo en unos minutos.", @@ -1147,7 +1137,7 @@ "image6": "Bosque", "image7": "Amanecer", "none": "Ninguno", - "pleaseWait": "Por favor, espera...", + "pleaseWait": "Por favor, espera…", "removeBackground": "Eliminar el fondo", "slightBlur": "Desenfoque Ligero", "title": "Fondos virtuales", diff --git a/lang/main-es.json b/lang/main-es.json index 876a86eaaec0..1d120dbebaa2 100644 --- a/lang/main-es.json +++ b/lang/main-es.json @@ -19,7 +19,7 @@ "noResults": "No se encontraron coincidencias", "outlookEmail": "Correo de Outlook", "phoneNumbers": "números de teléfono", - "searching": "Buscando...", + "searching": "Buscando…", "shareInvite": "Compartir la invitación a la reunión", "shareLink": "Compartir el enlace de la reunion", "shareStream": "Compartir el enlace de la transmisión en vivo", @@ -88,6 +88,10 @@ "refresh": "Actualizar calendario", "today": "Hoy" }, + "loader": { + "reconnecting": "Reconectando...", + "reloading": "Recargando página..." + }, "carmode": { "actions": { "selectSoundDevice": "Elija un dispositivo de sonido" @@ -108,12 +112,15 @@ "messageAccessibleTitleMe": "yo digo:", "messageTo": "Mensaje privado para {{recipient}}", "messagebox": "Escriba un mensaje", + "messagesDissapearWarning": "Todos los mensajes desaparecerán cuando termine la reunión", "newMessages": "Mensajes nuevos", + "privacyTooltip": "Por tu privacidad, este chat será eliminado cuando termine la reunión", "nickname": { "popover": "Selecciona un apodo", "title": "Introduce un apodo para usar el chat", "titleWithPolls": "Introduce un apodo para usar el chat" }, + "noMessages": "No hay mensajes en el chat.\nSé el primero en enviar uno.", "noMessagesMessage": "No hay mensajes en la reunión. ¡Inicie una conversación!", "privateNotice": "Mensaje privado para {{recipient}}", "sendButton": "Enviar", @@ -149,7 +156,20 @@ "FETCH_SESSION_ID": "Obteniendo session-ID…", "GET_SESSION_ID_ERROR": "Obtener session-id error: {{code}}", "GOT_SESSION_ID": "Obteniendo session-ID… Listo", - "LOW_BANDWIDTH": "El vídeo para {{displayName}} ha sido desactivado para ahorrar ancho de banda" + "LOW_BANDWIDTH": "El vídeo para {{displayName}} ha sido desactivado para ahorrar ancho de banda", + "connecting": "Conectando a la reunión...", + "connected": "Conectado exitosamente", + "reconnecting": "Conexión perdida, reintentando...", + "reconnecting.description": "Intentando restablecer la conexión automáticamente", + "interrupted": "Conexión de medios interrumpida", + "interrupted.description": "La conexión de audio y video se ha interrumpido, reintentando...", + "restored": "Conexión restaurada", + "disconnected": "Desconectado del servidor", + "disconnected.description": "Se perdió la conexión con el servidor, intentando reconectar...", + "failed": "Error de conexión", + "failed.description": "No se pudo establecer la conexión. Verifique su conexión a internet.", + "suspended": "Dispositivo suspendido", + "suspended.description": "Se detectó que el dispositivo fue suspendido" }, "connectionindicator": { "address": "Dirección:", @@ -251,7 +271,7 @@ "Share": "Compartir", "Submit": "Enviar", "WaitForHostMsg": "La conferencia aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.", - "WaitingForHostTitle": "Esperando al anfitrión...", + "WaitingForHostTitle": "Esperando al anfitrión…", "Yes": "Sí", "accessibilityLabel": { "close": "Cerrar diálogo", @@ -279,6 +299,7 @@ "conferenceDisconnectTitle": "Ha sido desconectado.", "conferenceReloadMsg": "Estamos tratando de arreglar esto. Reconectando en {{seconds}} segundos…", "conferenceReloadTitle": "Desafortunadamente, algo salió mal.", + "leaveMeetingConfirmation": "¿Estás seguro de que quieres salir de la reunión?", "confirm": "Confirmar", "confirmNo": "No", "confirmYes": "Sí", @@ -299,6 +320,7 @@ "embedMeeting": "Incrustar reunión", "enterDisplayName": "Por favor ingresa tu nombre aquí", "error": "Error", + "errorJoiningMeeting": "Error al unirse a la reunión", "gracefulShutdown": "Nuestro servicio se encuentra en mantenimiento. Por favor, intente más tarde.", "grantModeratorDialog": "¿Estás seguro de que quieres convertir a este participante en moderador?", "grantModeratorTitle": "Convertir en moderador", @@ -614,10 +636,10 @@ "joinRejectedMessage": "Tu solicitud para entrar ha sido rechazada por un moderador.", "joinRejectedTitle": "Solicitud para entrar rechazada.", "joinTitle": "Entrar a la reunión", - "joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera...", + "joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera…", "joiningMessage": "Podrás entrar tan pronto te acepten tu solicitud.", - "joiningTitle": "Pidiendo entrar a la reunión...", - "joiningWithPasswordTitle": "Uniéndose con la contraseña...", + "joiningTitle": "Pidiendo entrar a la reunión…", + "joiningWithPasswordTitle": "Uniéndose con la contraseña…", "knockButton": "Pedir entrar", "knockTitle": "Alguien quiere entrar a la reunión", "knockingParticipantList": "Participantes que quieren entrar", @@ -704,6 +726,8 @@ "passwordPlaceholder": "Contraseña", "twoFactorCodePlaceholder": "Código de autenticación de dos factores", "loginButton": "Iniciar sesión", + "signinWithInternxt": "Iniciar sesión con Internxt", + "signupWithBrowser": "Crear cuenta de Internxt", "forgotPassword": "Olvidé mi contraseña", "noAccount": "¿No tienes una cuenta?", "createAccount": "Crear cuenta", @@ -715,7 +739,10 @@ "twoFactorCodeInvalid": "Introduce un código válido de 6 dígitos", "invalidCredentials": "Credenciales inválidas. Por favor, inténtalo de nuevo.", "cannotCreateMeetings": "El usuario no puede crear reuniones", - "genericError": "No se pudo iniciar sesión. Por favor, inténtelo de nuevo o contacte a soporte si el problema persiste" + "genericError": "No se pudo iniciar sesión. Por favor, inténtelo de nuevo o contacte a soporte si el problema persiste", + "popupBlocked": "La ventana emergente fue bloqueada. Por favor, permite las ventanas emergentes para Internxt Meet.", + "authCancelled": "Autenticación cancelada por el usuario.", + "authTimeout": "El tiempo de autenticación ha expirado. Por favor, inténtalo de nuevo." }, "signup": { "title": "Regístrate", @@ -770,6 +797,11 @@ }, "videoParticipants": { "you": "Tú" + }, + "screenShare": { + "youAreSharing": "Estás compartiendo pantalla", + "viewing": "Estás viendo la pantalla de {{name}}", + "stopSharing": "Dejar de compartir" } }, "permissionsModal": { @@ -830,8 +862,19 @@ "connectedOneMember": "{{name}} se unió a la reunión", "connectedThreePlusMembers": "{{name}} y {{count}} más se unieron a la reunión", "connectedTwoMembers": "{{first}} y {{second}} se unieron a la reunión", - "dataChannelClosed": "", - "dataChannelClosedDescription": "", + "connectionFailed": "Error de conexión. Por favor, inténtalo de nuevo más tarde.", + "connectionLost": "Conexión perdida", + "connectedTitle": "Conectado", + "connectedMessage": "Conexión restaurada exitosamente", + "reconnecting": "Intentando reconectar...", + "reconnectingAttempt": "Intento de reconexión {{attempt}} de {{max}}", + "reconnectionFailed": "No se pudo reconectar", + "reconnectionFailedReloading": "Recargando página para restaurar la conexión...", + "deviceSuspended": "Dispositivo suspendido, reconectando...", + "poorConnection": "Conexión pobre detectada", + "poorConnectionDescription": "Tu conexión puede ser inestable. La calidad de video y audio puede verse afectada.", + "dataChannelClosed": "La calidad de vídeo puede verse afectada", + "dataChannelClosedDescription": "El canal del puente está caído y por lo tanto la calidad de vídeo puede limitarse a su configuración más baja.", "disabledIframe": "", "disconnected": "desconectado", "displayNotifications": "Mostrar notificaciones para", @@ -854,7 +897,7 @@ "linkToSalesforceDescription": "Puedes vincular el resumen de la reunión a un objeto Salesforce", "linkToSalesforceError": "Error al vincular la reunión a Salesforce", "linkToSalesforceKey": "", - "linkToSalesforceProgress": "Vinculando reunión a Salesorce...", + "linkToSalesforceProgress": "Vinculando reunión a Salesorce…", "linkToSalesforceSuccess": "La reunión fue vinculada a Salesforce", "localRecordingStarted": "{{name}} ha iniciado una grabación local.", "localRecordingStopped": "{{name}} ha detenido una grabación local.", @@ -993,7 +1036,7 @@ "callMe": "Llámame", "callMeAtNumber": "Llamame a este número:", "calling": "Llamando", - "configuringDevices": "Configurando dispositivos...", + "configuringDevices": "Configurando dispositivos…", "connectedWithAudioQ": "¿Estás está conectado con audio?", "connection": { "good": "¡Su conexión a internet es buena!", @@ -1040,7 +1083,6 @@ "premeeting": "Pre-reunión", "proceedAnyway": "Continuar de todos modos", "screenSharingError": "Error al compartir pantalla:", - "showScreen": "Habilitar pantalla pre-reunión", "startWithPhone": "Iniciar con audio de llamada telefónica", "unsafeRoomConsent": "Comprendo los riesgos, quiero unirme a la reunión", "videoOnlyError": "Error con el vídeo:", @@ -1112,7 +1154,7 @@ "localRecordingStartWarningTitle": "Detenga la grabación para guardarla", "localRecordingVideoStop": "Detener su video también detendrá la grabación local. ¿Está seguro de querer continuar?", "localRecordingVideoWarning": "Para grabar su video debe tenerlo encendido al iniciar la grabación", - "localRecordingWarning": "Asegúrese de seleccionar la pestaña actual para usar el video y audio correctos. La grabación está actualmente limitada a 1GB, que son aproximadamente 100 minutos.", + "localRecordingWarning": "Asegúrese de seleccionar la pestaña actual para usar el video y audio correctos.", "loggedIn": "Sesión iniciada como {{userName}}", "noMicPermission": "No se pudo crear la pista de micrófono. Por favor otorgue permiso para usar el micrófono.", "noStreams": "", @@ -1477,16 +1519,7 @@ }, "unpinParticipant": "", "userMedia": { - "androidGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "chromeGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "edgeGrantPermissions": "Selecciona cuando el navegador solicite permisos.", - "electronGrantPermissions": "Otorga permisos para usar la cámara y el micrófono", - "firefoxGrantPermissions": "Selecciona Compartir dispositivo seleccionado cuando el navegador solicite permisos.", - "iexplorerGrantPermissions": "Selecciona Aceptar cuando el navegador solicite permisos.", - "nwjsGrantPermissions": "Otorga permisos para usar la cámara y el micrófono", - "operaGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "react-nativeGrantPermissions": "Selecciona Permitir cuando el navegador solicite permisos.", - "safariGrantPermissions": "Selecciona Aceptar cuando el navegador solicite permisos." + "grantPermissions": "Otorga permisos para usar la cámara y el micrófono." }, "videoSIPGW": { "busy": "Estamos trabajando para liberar recursos. Vuelve a intentarlo en unos minutos.", @@ -1560,7 +1593,7 @@ "image6": "Bosque", "image7": "Amanecer", "none": "Ninguno", - "pleaseWait": "Por favor, espera...", + "pleaseWait": "Por favor, espera…", "removeBackground": "Eliminar el fondo", "slightBlur": "Desenfoque Ligero", "title": "Fondos virtuales", diff --git a/lang/main-et.json b/lang/main-et.json index f4576175339b..557be4c3431a 100644 --- a/lang/main-et.json +++ b/lang/main-et.json @@ -478,7 +478,7 @@ "calling": "Helistamine…", "connected": "Ühendatud", "connecting": "Ühendamine…", - "connecting2": "Ühendamine*...", + "connecting2": "Ühendamine*…", "disconnected": "Lahti ühendatud", "expired": "Aegunud", "ignored": "Eiratud", @@ -700,16 +700,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Vali Luba, kui veebilehitseja küsib nõusolekut.", - "chromeGrantPermissions": "Vali Luba, kui veebilehitseja küsib nõusolekut.", - "edgeGrantPermissions": "Vali Jah, kui veebilehitseja küsib nõusolekut.", - "electronGrantPermissions": "Luba kasutada kaamerat ja mikrofoni", - "firefoxGrantPermissions": "Vali Jaga valitud vahendit, kui veebilehitseja küsib nõusolekut.", - "iexplorerGrantPermissions": "Vali OK, kui veebilehitseja küsib nõusolekut.", - "nwjsGrantPermissions": "Luba kasutada kaamerat ja mikrofoni", - "operaGrantPermissions": "Vali Luba, kui veebilehitseja küsib nõusolekut.", - "react-nativeGrantPermissions": "Vali Luba, kui veebilehitseja küsib nõusolekut.", - "safariGrantPermissions": "Vali OK, kui veebilehitseja küsib nõusolekut." + "grantPermissions": "Luba kasutada kaamerat ja mikrofoni." }, "videoSIPGW": { "busy": "Vabastatakse ressurssi… Proovi mõne minuti pärast uuesti.", diff --git a/lang/main-eu.json b/lang/main-eu.json index 1952669610e8..05e3d78ba414 100644 --- a/lang/main-eu.json +++ b/lang/main-eu.json @@ -20,7 +20,7 @@ "noResults": "Ez dago bat datorren bilaketa-emaitzarik", "outlookEmail": "Outlook Email", "phoneNumbers": "telefono zenbakiak", - "searching": "Bilatzen...", + "searching": "Bilatzen…", "shareInvite": "Partekatu bilerarako gonbidapena", "shareLink": "Partekatu bileraren esteka beste partaide batzuk gonbidatzeko", "shareStream": "Partekatu zuzenekoaren esteka", @@ -182,7 +182,7 @@ "Share": "Partekatu", "Submit": "Bidali", "WaitForHostMsg": "Konferentzia oraindik ez da hasi. Ostalaria bazara, autentifikatu. Bestela, itxaron ostalaria iritsi arte.", - "WaitingForHostTitle": "Antolatzailearen zain...", + "WaitingForHostTitle": "Antolatzailearen zain…", "Yes": "Bai", "accessibilityLabel": { "liveStreaming": "Zuzeneko Erreprodukzioa" @@ -477,10 +477,10 @@ "invalidPassword": "Pasahitza ez da zuzena", "joinRejectedMessage": "Sartzeko eskaera ukatu egin du moderatzaile batek", "joinTitle": "Sartu bileran", - "joinWithPasswordMessage": "Pasahitz gabe sartzen saiatzen, itxaron mesedez...", + "joinWithPasswordMessage": "Pasahitz gabe sartzen saiatzen, itxaron mesedez…", "joiningMessage": "Norbaitek zure eskaera sartu bezain laster sartuko zara bileran", - "joiningTitle": "Sartzeko eskatzen...", - "joiningWithPasswordTitle": "Pasahitzarekin sartzen...", + "joiningTitle": "Sartzeko eskatzen…", + "joiningWithPasswordTitle": "Pasahitzarekin sartzen…", "knockButton": "Eskatu sartzea", "knockTitle": "Norbaitek bileran sartu nahi du", "knockingParticipantList": "Zain dauden parte-hartzaileak", @@ -602,7 +602,7 @@ "callMe": "Deitu nazazu", "callMeAtNumber": "Deitu nazazu zenbaki honetara:", "calling": "Deitzen", - "configuringDevices": "Gailuak konfiguratzen...", + "configuringDevices": "Gailuak konfiguratzen…", "connectedWithAudioQ": "Audioarekin konektatuta zaude?", "connection": { "good": "Zure internet konexioa ondo dabil!", @@ -646,7 +646,6 @@ "or": "edo", "premeeting": "Aurre-bilera", "screenSharingError": "Errorea pantaila partekatzean:", - "showScreen": "Aktibatu bileraren aurreko pantaila", "startWithPhone": "Telefono diearen audioarekin hasi", "videoOnlyError": "Errorea bideoan:", "videoTrackError": "Ezin izan da bideo pista sortu.", @@ -913,22 +912,13 @@ "failedToStart": "Ezin da transkripzioa hasi", "labelToolTip": "Bilera transkribatzen ari da", "off": "Transkripzioa gelditu da", - "pending": "Bileraren transkripzioa prestatzen ...", + "pending": "Bileraren transkripzioa prestatzen…", "start": "Erakutsi azpitituluak", "stop": "Utzi azpitituluak erakusten", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Hautatu Baimendu zure nabigatzaileak baimenak eskatzen dituenean.", - "chromeGrantPermissions": "Hautatu Baimendu zure nabigatzaileak baimenak eskatzen dituenean.", - "edgeGrantPermissions": "Hautatu Bai zure nabigatzaileak baimenak eskatzen dituenean.", - "electronGrantPermissions": "Mesedez eman zure kamera eta mikrofonoa erabiltzeko baimenak", - "firefoxGrantPermissions": "Hautatu Partekatutako hautatutako gailua zure nabigatzaileak baimenak eskatzen dituenean.", - "iexplorerGrantPermissions": "Hautatu Ados zure nabigatzaileak baimenak eskatzen dituenean.", - "nwjsGrantPermissions": "Mesedez, eman zure kamera eta mikrofonoa erabiltzeko baimenak", - "operaGrantPermissions": "Hautatu Baimendu zure nabigatzaileak baimenak eskatzen dituenean.", - "react-nativeGrantPermissions": "Hautatu Baimendu zure nabigatzaileak baimenak eskatzen dituenean.", - "safariGrantPermissions": "Hautatu Ados zure nabigatzaileak baimenak eskatzen dituenean." + "grantPermissions": "Mesedez, eman zure kamera eta mikrofonoa erabiltzeko baimenak." }, "videoSIPGW": { "busy": "Baliabideak askatzeko lanetan gabiltza. Mesedez, saiatu berriro minutu batzuk barru.", @@ -988,7 +978,7 @@ "image6": "Basoa", "image7": "Egunsentia", "none": "Bat ere ez", - "pleaseWait": "Itxaron mesedez...", + "pleaseWait": "Itxaron mesedez…", "removeBackground": "Kendu atzeko planoa", "slightBlur": "Lausotze arina", "title": "Atzeko plano birtualak", diff --git a/lang/main-fa.json b/lang/main-fa.json index 4c44d3b34a87..4d142c0f7993 100644 --- a/lang/main-fa.json +++ b/lang/main-fa.json @@ -22,7 +22,7 @@ "noResults": "هیچ نتیجه‌ای مطابق با جستجو یافت نشد", "outlookEmail": "رایانامهٔ اوت‌لوک", "phoneNumbers": "شماره تلفن‌ها", - "searching": "درحال جستجو...", + "searching": "درحال جستجو…", "shareInvite": "هم‌رسانی دعوت‌نامهٔ جلسه", "shareLink": "هم‌رسانی پیوند جلسه برای دعوت دیگران", "shareStream": "هم‌رسانی پیوند پخش زنده", @@ -137,7 +137,7 @@ "installExtensionText": "برای اتصال به تقویم گوگل و برنامه آفیس 365 افزونه را نصب کنید" }, "connectingOverlay": { - "joiningRoom": "درحال اتصال شما به جلسه..." + "joiningRoom": "درحال اتصال شما به جلسه…" }, "connection": { "ATTACHED": "پیوست‌شده", @@ -149,9 +149,9 @@ "DISCONNECTED": "قطع شد", "DISCONNECTING": "درحال قطع اتصال", "ERROR": "خطا", - "FETCH_SESSION_ID": "دریافت شناسهٔ جلسه...", + "FETCH_SESSION_ID": "دریافت شناسهٔ جلسه…", "GET_SESSION_ID_ERROR": "خطا در دریافت شناسهٔ جلسه: {{code}}", - "GOT_SESSION_ID": "دریافت شناسهٔ جلسه... انجام شد", + "GOT_SESSION_ID": "دریافت شناسهٔ جلسه… انجام شد", "LOW_BANDWIDTH": "برای صرفه‌جویی در پهنای باند، ویدیو برای {{displayName}} غیرفعال شد" }, "connectionindicator": { @@ -214,8 +214,8 @@ "launchWebButton": "استفاده از نسخه‌ٔ وب", "noMobileApp": "برنامه را نصب نکرده‌اید؟", "termsAndConditions": "با ادامه‌دادن، با شرایط و ضوابط ما موافقت می‌کنید.", - "title": "درحال اجرای جلسهٔ شما در {{app}}...", - "titleNew": "درحال اجرای جلسهٔ شما...", + "title": "درحال اجرای جلسهٔ شما در {{app}}…", + "titleNew": "درحال اجرای جلسهٔ شما…", "tryAgainButton": "با نسخه‌ٔ میزکار دوباره تلاش کنید", "unsupportedBrowser": "به نظر می‌رسد در حال استفاده از یک مرورگر پشتیبانی‌نشده هستید." }, @@ -254,7 +254,7 @@ "Share": "هم‌رسانی", "Submit": "ارسال", "WaitForHostMsg": "کنفرانس هنوز شروع نشده است، اگر میزبان هستید وارد شوید، در غیراین صورت تا رسیدن میزبان و شروع جلسه منتظر بمانید.", - "WaitingForHostTitle": "در انتظار میزبان ...", + "WaitingForHostTitle": "در انتظار میزبان…", "Yes": "بله", "accessibilityLabel": { "Cancel": "لغو (ترک‌کردن پنجرهٔ گفتگو)", @@ -280,9 +280,9 @@ "cameraUnknownError": "به دلایلی نامشخص نمی‌توان از دوربین استفاده کرد.", "cameraUnsupportedResolutionError": "دوربین شما از وضوح تصویر مورد نیاز پشتیبانی نمی‌کند.", "close": "بستن", - "conferenceDisconnectMsg": "شاید بخواهید اتصال شبکه خود را بررسی کنید. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر...", + "conferenceDisconnectMsg": "شاید بخواهید اتصال شبکه خود را بررسی کنید. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر…", "conferenceDisconnectTitle": "اتصال شما قطع شده‌است.", - "conferenceReloadMsg": "ما در حال تلاش برای حل این مشکل هستیم. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر...", + "conferenceReloadMsg": "ما در حال تلاش برای حل این مشکل هستیم. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر…", "conferenceReloadTitle": "متأسفانه مشکلی پیش آمد.", "confirm": "تأیید", "confirmNo": "خیر", @@ -580,7 +580,7 @@ "errorLiveStreamNotEnabled": "پخش زنده برای {{email}} فعال نیست. لطفاً پخش زنده را فعال کنید یا وارد یک حساب کاربری با پخش زندهٔ فعال شوید.", "expandedOff": "پخش زنده متوقف شده است", "expandedOn": "این جلسه درحال حاضر در یوتیوب درحال پخش است.", - "expandedPending": "پخش زنده در حال شروع است...", + "expandedPending": "پخش زنده در حال شروع است…", "failedToStart": "شروع پخش زنده ناموفق بود", "getStreamKeyManually": "ما نتوانستیم هیچ پخش زنده‌ای را دریافت کنیم. کلید پخش زنده خود را به‌صورت دستی از یوتیوب دریافت کنید.", "googlePrivacyPolicy": "سیاست محرمانگی گوگل", @@ -592,7 +592,7 @@ "offBy": "{{name}} پخش زنده را متوقف کرد", "on": "پخش زنده شروع شد", "onBy": "{{name}} پخش زنده را شروع کرد", - "pending": "درحال شروع پخش زنده...", + "pending": "درحال شروع پخش زنده…", "serviceName": "خدمت پخش زنده", "sessionAlreadyActive": "این جلسه از قبل درحال ضبط یا پخش زنده است.", "signIn": "ورود با حساب گوگل", @@ -622,10 +622,10 @@ "joinRejectedMessage": "درخواست پیوستن شما توسط مدیر جلسه رد شد.", "joinRejectedTitle": "درخواست شما رد شد.", "joinTitle": "پیوستن به جلسه", - "joinWithPasswordMessage": "تلاش برای پیوستن به جلسه با گذرواژه؛ شکیبا باشید...", + "joinWithPasswordMessage": "تلاش برای پیوستن به جلسه با گذرواژه؛ شکیبا باشید…", "joiningMessage": "به محض پذیرش درخواست شما، به جلسه خواهید پیوست", - "joiningTitle": "درخواست برای پیوستن به جلسه...", - "joiningWithPasswordTitle": "درحال پیوستن با گذرواژه...", + "joiningTitle": "درخواست برای پیوستن به جلسه…", + "joiningWithPasswordTitle": "درحال پیوستن با گذرواژه…", "knockButton": "درخواست برای پیوستن", "knockTitle": "یک نفر می‌خواهد به جلسه بپیوندد", "knockingParticipantList": "فهرست شرکت‌کنندگان درانتظار", @@ -712,7 +712,7 @@ "linkToSalesforceDescription": "شما می‌توانید خلاصهٔ جلسه را به یک شیء Salesforce پیوند دهید.", "linkToSalesforceError": "خطا در پیوند جلسه به Salesforce", "linkToSalesforceKey": "پیونددادن این جلسه", - "linkToSalesforceProgress": "درحال پیونددادن این جلسه به Salesforce...", + "linkToSalesforceProgress": "درحال پیونددادن این جلسه به Salesforce…", "linkToSalesforceSuccess": "این جلسه به Salesforce پیوند داده شد", "localRecordingStarted": "{{name}} یک ضبط محلی را شروع کرده است.", "localRecordingStopped": "{{name}} یک ضبط محلی را متوقف کرده است.", @@ -847,7 +847,7 @@ "callMe": "با من تماس بگیرید", "callMeAtNumber": "با این شماره با من تماس بگیرید:", "calling": "درحال تماس", - "configuringDevices": "پیکربندی دستگاه‌ها...", + "configuringDevices": "پیکربندی دستگاه‌ها…", "connectedWithAudioQ": "از طریق صدا متصل هستید؟", "connection": { "good": "اتصال اینترنت شما خوب به‌نظر می‌رسد!", @@ -894,7 +894,6 @@ "premeeting": "پیش‌جلسه", "proceedAnyway": "در هر صورت انجام شود", "screenSharingError": "خطا در هم‌رسانی صفحه:", - "showScreen": "فعال‌سازی صفحهٔ پیش‌جلسه", "startWithPhone": "شروع با صدای گوشی", "unsafeRoomConsent": "من خطر احتمالی را درک می‌کنم؛ می‌خواهم به جلسه بپیوندم", "videoOnlyError": "خطای ویدیو:", @@ -903,17 +902,17 @@ }, "presenceStatus": { "busy": "مشغول", - "calling": "درحال تماس‌گرفتن...", + "calling": "درحال تماس‌گرفتن…", "connected": "متصل‌شده", - "connecting": "درحال اتصال...", - "connecting2": "درحال اتصال*...", + "connecting": "درحال اتصال…", + "connecting2": "درحال اتصال*…", "disconnected": "قطع‌شده", "expired": "منقضی‌شده", "ignored": "نادیده‌گرفته", - "initializingCall": "درحال آغاز تماس...", + "initializingCall": "درحال آغاز تماس…", "invited": "دعوت‌شده", "rejected": "ردشده", - "ringing": "درحال زنگ‌زدن..." + "ringing": "درحال زنگ‌زدن…" }, "profile": { "avatar": "چِهرَک", @@ -947,7 +946,7 @@ "errorFetchingLink": "خطا در واکِشی پیوند ضبط.", "expandedOff": "ضبط متوقف شده است", "expandedOn": "این جلسه هم‌اکنون درحال ضبط‌شدن است.", - "expandedPending": "ضبط درحال شروع است...", + "expandedPending": "ضبط درحال شروع است…", "failedToStart": "شروع ضبط ناموفق بود", "fileSharingdescription": "هم‌رسانی پیوند ضبط با شرکت‌کنندگان جلسه", "highlight": "علامت‌گذاری", @@ -975,7 +974,7 @@ "on": "ضبط جلسه شروع شد", "onBy": "{{name}} ضبط جلسه را شروع کرد", "onlyRecordSelf": "فقط جریان‌های صدا و تصویر من را ضبط کن", - "pending": "درحال آماده‌شدن برای ضبط جلسه...", + "pending": "درحال آماده‌شدن برای ضبط جلسه…", "rec": "ضبط", "saveLocalRecording": "ذخیرهٔ پروندهٔ ضبط به صورت محلی (آزمایشی)", "serviceDescription": "ضبط شما توسط خدمتِ ضبط ذخیره خواهد شد", @@ -1026,7 +1025,7 @@ "incomingMessage": "پیام ورودی", "language": "زبان", "loggedIn": "واردشده به عنوان {{name}}", - "maxStageParticipants": "بیشینه تعداد شرکت‌کنندگانی که می‌توانند به صحنه اصلی سنجاق شوند (آزمایشی)", + "maxStageParticipants": "بیشینه تعداد شرکت‌کنندگانی که می‌توانند به صحنه اصلی سنجاق شوند", "microphones": "میکروفون‌ها", "moderator": "مدیر", "moderatorOptions": "گزینه‌های مدیر", @@ -1315,7 +1314,7 @@ "failedToStart": "شروع ترانویسی ناموفق بود", "labelToolTip": "جلسه درحال ترانویسی است", "off": "توقف ترانویسی", - "pending": "درحال آماده‌شدن برای ترانویسی جلسه...", + "pending": "درحال آماده‌شدن برای ترانویسی جلسه…", "sourceLanguageDesc": "هم‌اکنون زمان جلسه روی {{sourceLanguage}} تنظیم شده است.
می‌توانید آن را از این‌جا تغییر دهید ", "sourceLanguageHere": "این‌جا", "start": "شروع نمایش زیرنویس‌ها", @@ -1326,16 +1325,7 @@ }, "unpinParticipant": "{{participantName}} - برداشتن سنجاق", "userMedia": { - "androidGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، اجازه‌دادن را انتخاب کنید.", - "chromeGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، اجازه‌دادن را انتخاب کنید.", - "edgeGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، بله را انتخاب کنید.", - "electronGrantPermissions": "درحال تلاش برای دسترسی به دوربین و میکروفون شما", - "firefoxGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، هم‌رسانی دستگاه انتخاب‌شده را انتخاب کنید.", - "iexplorerGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، تأیید را انتخاب کنید.", - "nwjsGrantPermissions": "لطفاً اجازهٔ استفاده از دوربین و میکروفون خود را بدهید", - "operaGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، اجازه‌دادن را انتخاب کنید.", - "react-nativeGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، اجازه‌دادن را انتخاب کنید.", - "safariGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی می‌خواهد، تأیید را انتخاب کنید." + "grantPermissions": "لطفاً اجازهٔ استفاده از دوربین و میکروفون خود را بدهید." }, "videoSIPGW": { "busy": "ما درحال آزادسازی منابع هستیم؛ لطفاً دقایقی دیگر دوباره تلاش کنید.", @@ -1413,7 +1403,7 @@ "image6": "جنگل ", "image7": "طلوع خورشید", "none": "هیچ‌یک", - "pleaseWait": "لطفاً شکیبا باشید...", + "pleaseWait": "لطفاً شکیبا باشید…", "removeBackground": "حذف پس‌زمینه", "slightBlur": "نیمه‌تار", "title": "پس‌زمینه‌های مجازی", diff --git a/lang/main-fi.json b/lang/main-fi.json index 8e0686757ff9..43411baf4c4f 100644 --- a/lang/main-fi.json +++ b/lang/main-fi.json @@ -69,7 +69,7 @@ "DISCONNECTED": "Ei yhteyttä", "DISCONNECTING": "Yhteyttä katkaistaan", "ERROR": "Virhe", - "RECONNECTING": "Tapahtui verkkovirhe. Yhdistetään uudelleen..." + "RECONNECTING": "Tapahtui verkkovirhe. Yhdistetään uudelleen…" }, "connectionindicator": { "address": "Osoite:", @@ -449,7 +449,7 @@ "calling": "Soitetaan…", "connected": "Yhdistetty", "connecting": "Yhdistetään…", - "connecting2": "Yhdistetään*...", + "connecting2": "Yhdistetään*…", "disconnected": "Ei yhteyttä", "expired": "Vanhentunut", "ignored": "Sivuutettu", @@ -649,16 +649,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Valitse Salli, kun selain pyytää käyttöoikeuksia.", - "chromeGrantPermissions": "Valitse Salli, kun selain pyytää käyttöoikeuksia.", - "edgeGrantPermissions": "Valitse Kyllä, kun selain pyytää käyttöoikeuksia.", - "electronGrantPermissions": "Myönnä käyttöoikeudet laitteesi kameran ja mikrofonin käyttöön.", - "firefoxGrantPermissions": "Valitse Jaa havaittu laite, kun selain pyytää käyttöoikeuksia.", - "iexplorerGrantPermissions": "Valitse OK, kun selain pyytää käyttöoikeuksia.", - "nwjsGrantPermissions": "Myönnä käyttöoikeudet laitteesi kameran ja mikrofonin käyttöön.", - "operaGrantPermissions": "Valitse Salli, kun selain pyytää käyttöoikeuksia.", - "react-nativeGrantPermissions": "Valitse Salli, kun selain pyytää käyttöoikeuksia.", - "safariGrantPermissions": "Valitse OK, kun selain pyytää käyttöoikeuksia." + "grantPermissions": "Myönnä käyttöoikeudet laitteesi kameran ja mikrofonin käyttöön." }, "videoSIPGW": { "busy": "Yritämme vapauttaa resursseja. Yritä uudelleen muutaman minuutin kuluttua.", diff --git a/lang/main-fr-CA.json b/lang/main-fr-CA.json new file mode 100644 index 000000000000..1137e187db70 --- /dev/null +++ b/lang/main-fr-CA.json @@ -0,0 +1,1685 @@ +{ + "addPeople": { + "accessibilityLabel": { + "meetingLink": "Lien de la réunion: {{url}}" + }, + "add": "Inviter", + "addContacts": "Inviter vos contacts", + "contacts": "contacts", + "copyInvite": "Copier l'invitation à la réunion", + "copyLink": "Copier le lien de la réunion", + "copyStream": "Copier le lien de diffusion en direct", + "countryNotSupported": "Nous ne prenons pas encore cette destination en charge.", + "countryReminder": "Vous appelez en dehors des É.-U.? Veuillez vous assurer de commencer par le code de pays!", + "defaultEmail": "Votre email par défaut", + "disabled": "Vous ne pouvez pas inviter d'autres personnes.", + "failedToAdd": "L'ajout de membres a échoué", + "googleEmail": "Gmail", + "inviteMoreHeader": "Vous êtes seul(e) dans la réunion", + "inviteMoreMailSubject": "Rejoindre une réunion {{appName}}", + "inviteMorePrompt": "Inviter d'autres personnes", + "linkCopied": "Lien copié dans le presse-papiers", + "noResults": "Aucun résultat de recherche correspondant", + "outlookEmail": "Outlook", + "phoneNumbers": "Numéros de téléphone", + "searching": "Recherche…", + "shareInvite": "Partager l'invitation à la réunion", + "shareLink": "Partager le lien de la réunion pour inviter d'autres personnes", + "shareStream": "Partager le lien de diffusion en direct", + "sipAddresses": "Adresses SIP", + "telephone": "Téléphone : {{number}}", + "title": "Inviter des personnes à cette réunion", + "yahooEmail": "Yahoo" + }, + "audioDevices": { + "bluetooth": "Bluetooth", + "car": "Système audio du véhicule", + "headphones": "Écouteurs", + "none": "Aucun périphérique audio n'est disponible", + "phone": "Téléphone", + "speaker": "Haut-parleur" + }, + "audioOnly": { + "audioOnly": "Bande passante faible" + }, + "bandwidthSettings": { + "assumedBandwidthBps": "p. ex. 10000000 pour 10 Mbps ", + "assumedBandwidthBpsWarning": "Des valeurs élevées peuvent provoquer des problèmes réseaux.", + "customValue": "valeur personnalisée", + "customValueEffect": "Positionner la valeur actuelle en bps", + "leaveEmpty": "Laisser vide", + "leaveEmptyEffect": "Autoriser l'utilisation de l'estimation", + "possibleValues": "Valeurs possibles", + "setAssumedBandwidthBps": "Bande passante estimée", + "title": "Réglage de bande passante", + "zeroEffect": "Désactiver la vidéo" + }, + "breakoutRooms": { + "actions": { + "add": "Ajouter une salle pour petit groupe", + "autoAssign": "Assigner automatiquement aux salles", + "close": "Fermer", + "join": "Rejoindre", + "leaveBreakoutRoom": "Quitter la salle", + "more": "Plus", + "remove": "Supprimer", + "rename": "Renommer", + "renameBreakoutRoom": "Renommer la salle", + "sendToBreakoutRoom": "Envoyer le participant dans:" + }, + "breakoutList": "Liste des salles", + "buttonLabel": "Salles pour petits groupes", + "defaultName": "Salle #{{index}}", + "hideParticipantList": "Masquer la liste des participants", + "mainRoom": "Salle principale", + "notifications": { + "joined": "Entrée en salle \"{{name}}\"", + "joinedMainRoom": "Retour à la salle principale", + "joinedTitle": "Salles annexes" + }, + "showParticipantList": "Afficher la liste des participants", + "title": "Salles pour petits groupes" + }, + "calendarSync": { + "addMeetingURL": "Ajouter un lien de réunion", + "confirmAddLink": "Voulez-vous ajouter un lien Jitsi Meet à cet événement?", + "error": { + "appConfiguration": "L'intégration de l'agenda n'est pas correctement configurée.", + "generic": "Une erreur s'est produite. Veuillez vérifier vos paramètres d'agenda ou essayer de rafraîchir l'agenda.", + "notSignedIn": "Une erreur s'est produite lors de l'authentification des événements d'agenda. Veuillez vérifier vos paramètres d'agenda ou essayer de vous reconnecter." + }, + "join": "Rejoindre", + "joinTooltip": "Rejoindre la réunion", + "nextMeeting": "prochaine réunion", + "noEvents": "Il n'y a aucun événement planifié à venir.", + "ongoingMeeting": "réunion en cours", + "permissionButton": "Ouvrir les paramètres", + "permissionMessage": "L'autorisation de l'Agenda est nécessaire pour consulter vos réunions dans l'application.", + "refresh": "Rafraîchir l'agenda", + "today": "Aujourd'hui" + }, + "carmode": { + "actions": { + "selectSoundDevice": "Sélectionnez le dispositif audio" + }, + "labels": { + "buttonLabel": "Mode voiture", + "title": "Mode voiture", + "videoStopped": "Votre vidéo est arrêtée" + } + }, + "chat": { + "disabled": "L'envoi de messages de chat est désactivé.", + "enter": "Entrez dans le salon", + "error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}", + "everyone": "Tout le monde", + "fieldPlaceHolder": "Tapez votre message ici", + "guestsChatIndicator": "(invité)", + "lobbyChatMessageTo": "Message de salle d'attente à {{recipient}}", + "message": "Message", + "messageAccessibleTitle": "{{user}} dit: ", + "messageAccessibleTitleMe": "Je dis: ", + "messageTo": "Message privé à {{recipient}}", + "messagebox": "Saisissez un message", + "newMessages": "Nouveaux messages", + "nickname": { + "popover": "Choisissez un nom d'affichage", + "title": "Entrer un nom d'affichage pour utiliser le clavardage", + "titleWithCC": "Entrez un pseudonyme pour utiliser le chat et les sous-titres", + "titleWithPolls": "Entrer un nom d'affichage pour utiliser le clavardage", + "titleWithPollsAndCC": "Entrez un pseudonyme pour utiliser le chat, les sondages et les sous-titres", + "titleWithPollsAndCCAndFileSharing": "Entrez un pseudonyme pour utiliser le chat, les sondages, les sous-titres et les fichiers" + }, + "noMessagesMessage": "Il n'y a pas encore de messages dans cette réunion. Démarrez une conversation ici!", + "privateNotice": "Message privé à {{recipient}}", + "sendButton": "Envoyer", + "smileysPanel": "Panneaux des Émojis", + "systemDisplayName": "Système", + "tabs": { + "chat": "Chat", + "closedCaptions": "ST", + "fileSharing": "Fichiers", + "polls": "Sondages" + }, + "title": "Clavardage", + "titleWithCC": "ST", + "titleWithFeatures": "Chat et", + "titleWithFileSharing": "Fichiers", + "titleWithPolls": "Clavardage", + "you": "vous" + }, + "chromeExtensionBanner": { + "buttonText": "Installer l'extension Chrome", + "buttonTextEdge": "Installer l'extension Edge", + "close": "Fermer", + "dontShowAgain": "Ne plus m'afficher ceci", + "installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365" + }, + "closedCaptionsTab": { + "emptyState": "Le contenu des sous-titres sera disponible quand un modérateur les aura démarrés", + "startClosedCaptionsButton": "Démarrer les sous-titres" + }, + "connectingOverlay": { + "joiningRoom": "Connexion à la réunion en cours…" + }, + "connection": { + "ATTACHED": "Joint", + "AUTHENTICATING": "Authentification", + "AUTHFAIL": "Échec de l'authentification", + "CONNECTED": "Connecté", + "CONNECTING": "Connexion en cours", + "CONNFAIL": "Échec de la connexion", + "DISCONNECTED": "Déconnecté", + "DISCONNECTING": "Déconnexion en cours", + "ERROR": "Erreur", + "FETCH_SESSION_ID": "Obtention d'un identifiant de session…", + "GET_SESSION_ID_ERROR": "Obtenir une erreur d'identifiant de session: {{code}}", + "GOT_SESSION_ID": "Obtention d'un identifiant de session… Terminée", + "LOW_BANDWIDTH": "La vidéo de {{displayName}} a été coupée pour économiser de la bande passante" + }, + "connectionindicator": { + "address": "Adresse :", + "audio_ssrc": "Audio SSRC :", + "bandwidth": "Bande passante estimée :", + "bitrate": "Débit binaire :", + "bridgeCount": "Nombre de serveur : ", + "codecs": "Codecs (A/V) :", + "connectedTo": "Connecté à :", + "e2eeVerified": "Chiffrement de bout en bout vérifié", + "framerate": "Fréquence d'images :", + "less": "Afficher moins", + "localaddress": "Adresse locale :", + "localaddress_plural": "Adresses locales :", + "localport": "Port local :", + "localport_plural": "Ports locaux :", + "maxEnabledResolution": "débit max", + "more": "Afficher plus", + "no": "non", + "packetloss": "Perte de paquet :", + "participant_id": "ID du participant:", + "quality": { + "good": "Bonne", + "inactive": "Inactive", + "lost": "Perdue", + "nonoptimal": "Non-optimale", + "poor": "Faible" + }, + "remoteaddress": "Adresse distante :", + "remoteaddress_plural": "Adresses distantes :", + "remoteport": "Port distant :", + "remoteport_plural": "Ports distants :", + "resolution": "Résolution :", + "savelogs": "Enregistrer les logs", + "status": "Connexion :", + "transport": "Tranport :", + "transport_plural": "Transports :", + "video_ssrc": "Video SSRC :", + "yes": "oui" + }, + "dateUtils": { + "earlier": "Plus tôt", + "today": "Aujourd'hui", + "yesterday": "Hier" + }, + "deepLinking": { + "appNotInstalled": "L'application mobile {{app}} est nécessaire pour rejoindre cette réunion sur votre téléphone.", + "description": "Il ne s'est rien passé? Nous avons essayés de démarrer votre réunion dans l'application de bureau {{app}}. Veuillez réessayer ou démarrer la réunion dans l'application Web {{app}}.", + "descriptionNew": "Rien ne s'est passé ? Nous avons essayé de lancer votre réunion dans l'application de bureau {{app}}.

Vous pouvez essayer à nouveau ou la lancer dans l'application web.", + "descriptionWithoutWeb": "Rien ne s'est passé? Nous avons essayé de démarrer votre réunion dans l'application bureau {{app}}.", + "downloadApp": "Télécharger l'application", + "downloadMobileApp": "Télécharger l'application depuis le Store", + "ifDoNotHaveApp": "Si vous n'avez pas encore l'application:", + "ifHaveApp": "Si vous avez déjà installé l'application:", + "joinInApp": "Rejoindre la réunion en utilisant l'application", + "joinInAppNew": "Rejoindre depuis l'application", + "joinInBrowser": "Rejoindre depuis le navigateur", + "launchMeetingLabel": "Comment voulez-vous rejoindre la réunion ?", + "launchWebButton": "Démarrer dans l'application Web", + "noDesktopApp": "Vous n'avez pas l'application ?", + "noMobileApp": "Vous n'avez pas l'application ?", + "or": "OU", + "termsAndConditions": "En continuant, vous acceptez nos conditions générales d’utilisation.", + "title": "Démarrage de votre réunion dans {{app}} en cours…", + "titleNew": "Démarrage de votre réunion…", + "tryAgainButton": "Veuillez réessayer sur votre ordinateur", + "unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté." + }, + "defaultLink": "p. ex. {{url}}", + "defaultNickname": "p. ex. Jane Pink", + "deviceError": { + "cameraError": "Échec de l'accès à votre caméra", + "cameraPermission": "Erreur lors de l'obtention de l'autorisation de la caméra", + "microphoneError": "Échec de l'accès à votre micro", + "microphonePermission": "Erreur lors de l'obtention de l'autorisation du micro" + }, + "deviceSelection": { + "hid": { + "callControl": "Contrôle des appels", + "connectedDevices": "Appareils connectés", + "deleteDevice": "Supprimer un appareil", + "pairDevice": "Connecter un appareil" + }, + "noPermission": "L'autorisation n'a pas été accordée", + "previewUnavailable": "Prévisualisation non disponible", + "selectADevice": "Sélectionner un dispositif", + "testAudio": "Jouer un son de test" + }, + "dialIn": { + "screenTitle": "Bilan des appels" + }, + "dialOut": { + "statusMessage": "est maintenant {{status}}" + }, + "dialog": { + "Back": "Retour", + "Cancel": "Annuler", + "IamHost": "Je suis l'hôte", + "Ok": "OK", + "Remove": "Supprimer", + "Share": "Partager", + "Submit": "Envoyer", + "Understand": "Je comprends, gardez-moi en sourdine pour l'instant", + "UnderstandAndUnmute": "Je comprends, veuillez me réactiver s'il vous plaît", + "WaitForHostNoAuthMsg": "La réunion n'a pas encore commencé car aucun modérateur n'est encore arrivé. Veuillez patienter.", + "WaitingForHostButton": "Attendre l'hôte", + "WaitingForHostTitle": "En attente de l'hôte…", + "Yes": "Oui", + "accessibilityLabel": { + "Cancel": "Annuler (quiter la fenêtre)", + "Ok": "Ok (Sauvegarder et quiter la fenêtre)", + "close": "Fermer la fenêtre", + "liveStreaming": "Diffusion en direct", + "sharingTabs": "Options de partage" + }, + "add": "Ajouter", + "addMeetingNote": "Ajouter une note à cette réunion", + "addOptionalNote": "Ajouter une note (optionnel):", + "allow": "Autoriser", + "allowToggleCameraDialog": "Autorisez-vous {{initiatorName}} à changer votre mode de caméra?", + "allowToggleCameraTitle": "Autoriser-vous le changement de mode de caméra?", + "alreadySharedVideoMsg": "Un autre membre partage déjà une vidéo. Cette réunion permet le partage d'une seule vidéo à la fois.", + "alreadySharedVideoTitle": "Seulement une vidéo à la fois peut être partagée", + "applicationWindow": "Fenêtre d'application", + "authenticationRequired": "Authentification requise", + "cameraCaptureDialog": { + "description": "Prendre et envoyer une photo en utilisant votre caméra mobile", + "ok": "Ouvrir la caméra", + "reject": "Pas maintenant", + "title": "Prendre une photo" + }, + "cameraConstraintFailedError": "Votre caméra ne répond pas à certaines exigences.", + "cameraNotFoundError": "Impossible de trouver la caméra.", + "cameraNotSendingData": "Il est impossible d'accéder à la caméra. Veuillez vérifier si une autre application utilise actuellement ce dispositif, sélectionner un autre dispositif à partir du menu des paramètres ou essayer de recharger l'application.", + "cameraNotSendingDataTitle": "Impossible d'accéder à la caméra", + "cameraPermissionDeniedError": "Vous n'avez pas reçu l'autorisation d'utiliser votre caméra. Vous pouvez toujours rejoindre la réunion, mais les autres membres ne pourront pas vous voir. Utilisez le bouton de caméra dans la barre d'adresse pour corriger cela.", + "cameraTimeoutError": "Impossible de démarrer la source vidéo. Délai dépassé!", + "cameraUnknownError": "Impossible d'utiliser la caméra pour une raison inconnue.", + "cameraUnsupportedResolutionError": "Votre caméra ne prend pas en charge la résolution vidéo nécessaire.", + "close": "Fermer", + "conferenceDisconnectMsg": "Vous devriez vérifier votre connexion au réseau. Reconnexion dans {{seconds}} sec…", + "conferenceDisconnectTitle": "Vous avez été déconnecté.", + "conferenceReloadMsg": "Nous tentons de résoudre le problème. Reconnexion dans {{seconds}} sec…", + "conferenceReloadTitle": "Malheureusement, une erreur s'est produite.", + "confirm": "Confirmer", + "confirmBack": "Retour", + "confirmNo": "Non", + "confirmYes": "Oui", + "connectError": "Oups! Une erreur s'est produite. La connexion à la réunion a échouée.", + "connectErrorWithMsg": "Oups! Une erreur s'est produite. La connexion à la réunion a échoué : {{msg}}", + "connecting": "Connexion en cours", + "contactSupport": "Communiquez avec le service de soutien", + "copied": "Copié", + "copy": "Copier", + "demoteParticipantDialog": "Êtes-vous sûr de vouloir déplacer ce participant en visiteur ?", + "demoteParticipantTitle": "Déplacer en visiteur", + "dismiss": "Rejeter", + "displayNameRequired": "Un nom d'affichage est requis", + "done": "Terminé", + "e2eeDescription": "Le chiffrement de bout en bout est actuellement expérimental. Veuillez garder en tête que l'activation du chiffrement de bout en bout désactivera les services fournis côté serveur tels que : l'enregistrement, la diffusion en direct et la participation par téléphone. Gardez également en tête que la réunion ne fonctionnera que pour les personnes qui se connectent à partir de navigateurs prenant en charge les flux insérables.", + "e2eeDisabledDueToMaxModeDescription": "Impossible d'activer le chiffrement de bout en bout en raison du trop grand nombre de participants à la réunion.", + "e2eeLabel": "Activer le chiffrement de Bout-en-Bout", + "e2eeWarning": "ATTENTION : Tous les participants de cette réunion ne semblent pas prendre en charge le chiffrement de bout en bout. Si vous activez le chiffrement, ils ne pourront ni vous voir, ni vous entendre.", + "e2eeWillDisableDueToMaxModeDescription": "ATTENTION: le chiffrement de bout en bout sera automatiquement arrêté si plus de participants joignent la réunion.", + "embedMeeting": "Intégrer la réunion", + "enterDisplayName": "Veuillez saisir votre nom d'affichage", + "error": "Erreur", + "errorRoomCreationRestriction": "Vous avez essayé de rejoindre trop rapidement, veuillez revenir dans un moment.", + "gracefulShutdown": "Notre service est actuellement hors service pour l'entretien. Veuillez réessayer plus tard.", + "grantModeratorDialog": "Êtes-vous sûr de vouloir rendre ce participant modérateur ?", + "grantModeratorTitle": "Nommer modérateur", + "hide": "Masquer", + "hideShareAudioHelper": "Ne plus afficher ce dialogue", + "incorrectPassword": "Nom d'utilisateur ou mot de passe incorrect", + "incorrectRoomLockPassword": "Mot de passe incorrect", + "internalError": "Oups! Une erreur s'est produite. L'erreur suivante est survenue : {{error}}", + "internalErrorTitle": "Erreur interne.", + "kickMessage": "Aïe! Vous avez été expulsé de la réunion!", + "kickParticipantButton": "Expulser", + "kickParticipantDialog": "Êtes-vous certain de vouloir expulser ce participant?", + "kickParticipantTitle": "Expulser ce membre?", + "kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion", + "kickTitle": "Expulsé de la réunion", + "learnMore": "en savoir plus", + "linkMeeting": "Relier la réunion", + "linkMeetingTitle": "Relier la réunion à Salesforce", + "liveStreaming": "Diffusion en direct", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Impossible durant l'enregistrement", + "localUserControls": "Contrôles de l'utilisateur local", + "lockMessage": "Échec du verrouillage de la réunion.", + "lockRoom": "Ajouter un mot de passe à la réunion", + "lockTitle": "Échec du verrouillage", + "login": "Connexion", + "loginQuestion": "Voulez-vous vraiment vous connecter et quitter la réunion?", + "logoutQuestion": "Êtes-vous certain de vouloir vous déconnecter et arrêter la réunion?", + "logoutTitle": "Déconnexion", + "maxUsersLimitReached": "La limite du nombre maximum de membres a été atteinte. La réunion est pleine. Veuillez communiquer avec l'hôte de la réunion ou réessayer plus tard.", + "maxUsersLimitReachedTitle": "Limite du nombre de membres maximum atteinte", + "micConstraintFailedError": "Votre micro ne répond pas à certaines exigences", + "micNotFoundError": "Impossible de trouver le micro.", + "micNotSendingData": "Impossible d'accéder à votre micro. Veuillez sélectionner un autre dispositif à partir du menu des paramètres ou essayer de recharger l'application.", + "micNotSendingDataTitle": "Impossible d'accéder à votre micro", + "micPermissionDeniedError": "Vous n'avez pas accordé l'autorisation d'utilisation de votre micro. Vous pouvez toujours rejoindre la réunion, mais les autres membres ne pourront pas vous entendre. Utilisez le bouton de caméra dans la barre d'adresse pour remédier à cela.", + "micTimeoutError": "Impossible de démarrer la source audio. Délai dépassé!", + "micUnknownError": "Impossible d'utiliser le micro pour une raison inconnue.", + "moderationAudioLabel": "Autoriser les participants à réactiver leur micro", + "moderationDesktopLabel": "Autoriser les non-modérateurs à partager leur écran", + "moderationVideoLabel": "Autoriser les participants à démarrer leur vidéo", + "muteEveryoneDialog": "Êtes-vous sûr de vouloir couper les micros de tout le monde? Vous ne pourrez plus réactiver leur micro, mais ils pourront l'activer par eux-mêmes à tout moment.", + "muteEveryoneDialogModerationOn": "Les participants peuvent demander à parler n'importe quand", + "muteEveryoneElseDialog": "Une fois leur micro coupé, vous ne pourrez plus le réactiver, mais ils pourront l'activer par eux-mêmes à tout moment.", + "muteEveryoneElseTitle": "Couper le micro de tout le monde sauf de {{whom}}?", + "muteEveryoneElsesDesktopDialog": "Une fois le partage arrêté, vous ne pourrez pas le redémarrer, mais ils peuvent le faire à tout moment.", + "muteEveryoneElsesDesktopTitle": "Arrêter le partage d'écran de tout le monde sauf {{whom}} ?", + "muteEveryoneElsesVideoDialog": "Une fois la caméra coupée, vous ne pourrez plus la rallumer, mais ils peuvent la rallumer à tout moment.", + "muteEveryoneElsesVideoTitle": "Couper la vidéo de tout le monde sauf {{whom}}?", + "muteEveryoneSelf": "vous", + "muteEveryoneStartMuted": "Tout le monde démarre avec le micro coupé", + "muteEveryoneTitle": "Couper le micro de tout le monde ?", + "muteEveryonesDesktopDialog": "Les participants peuvent partager leur écran à tout moment.", + "muteEveryonesDesktopDialogModerationOn": "Les participants peuvent envoyer une demande pour partager leur écran à tout moment.", + "muteEveryonesDesktopTitle": "Arrêter le partage d'écran de tout le monde ?", + "muteEveryonesVideoDialog": "Êtes-vous sûr de vouloir couper la caméra de tout le monde? Vous ne pourrez pas la réactiver, mais ils peuvent la remettre à tout moment.", + "muteEveryonesVideoDialogModerationOn": "Les participants peuvent demander à activer leur caméra n'importe quand.", + "muteEveryonesVideoDialogOk": "Désactiver", + "muteEveryonesVideoTitle": "Couper la caméra de tout le monde?", + "muteParticipantBody": "Vous ne pourrez pas réactiver leur micro, mais ils peuvent le réactiver eux-mêmes à tout moment.", + "muteParticipantButton": "Discrétion", + "muteParticipantsDesktopBody": "Vous ne pourrez pas démarrer leur partage d'écran, mais ils peuvent le faire à tout moment.", + "muteParticipantsDesktopBodyModerationOn": "Vous ne pourrez pas démarrer leur partage d'écran et eux non plus.", + "muteParticipantsDesktopButton": "Arrêter le partage d'écran", + "muteParticipantsDesktopDialog": "Êtes-vous sûr de vouloir désactiver le partage d'écran de ce participant ? Vous ne pourrez pas le redémarrer, mais ils peuvent le faire à tout moment.", + "muteParticipantsDesktopDialogModerationOn": "Êtes-vous sûr de vouloir désactiver le partage d'écran de ce participant ? Vous ne pourrez pas réactiver l'écran et eux non plus.", + "muteParticipantsDesktopTitle": "Désactiver le partage d'écran de ce participant ?", + "muteParticipantsVideoBody": "Vous ne pourrez pas rallumer la caméra, mais ils peuvent la rallumer à tout moment.", + "muteParticipantsVideoBodyModerationOn": "Ni vous ni le participant ne pourront rallumer la caméra.", + "muteParticipantsVideoButton": "Couper la caméra", + "muteParticipantsVideoDialog": "Êtes-vous sûr(e) de vouloir couper la caméra de ce participant? Seul le participant pourra ensuite réactiver son micro à tout moment.", + "muteParticipantsVideoDialogModerationOn": "Êtes-vous sûr(e) de vouloir couper la caméra de ce participant? Ni vous ni le participant ne pourront la réactiver ensuite ?", + "muteParticipantsVideoTitle": "Couper la caméra de ce participant?", + "noDropboxToken": "Pas de jeton Dropbox valide", + "password": "Mot de passe", + "passwordLabel": "Mot de passe", + "passwordNotSupported": "La mise en place d'un mot de passe de réunion n'est pas prise en charge.", + "passwordNotSupportedTitle": "Mot de passe non pris en charge", + "passwordRequired": "Mot de passe requis", + "permissionCameraRequiredError": "L'autorisation caméra est nécessaire pour participer aux réunions avec vidéo. Merci de l'accorder dans les paramètres", + "permissionErrorTitle": "Permission nécessaire", + "permissionMicRequiredError": "L'autorisation microphone est nécessaire pour participer aux réunions avec son. Merci de l'accorder dans les paramètres", + "readMore": "plus", + "recentlyUsedObjects": "Vos objets récemment utilisés", + "recording": "Enregistrement", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct", + "recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA{{learnMore}}. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.", + "recordingInProgressDescriptionFirstHalf": "Cette réunion est en cours d'enregistrement et d'analyse par IA", + "recordingInProgressDescriptionSecondHalf": ". Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.", + "recordingInProgressTitle": "Enregistrement en cours", + "rejoinNow": "Rejoindre maintenant", + "remoteControlAllowedMessage": "{{user}} a accepté votre demande de contrôle à distance!", + "remoteControlDeniedMessage": "{{user}} a refusé votre demande de contrôle à distance!", + "remoteControlErrorMessage": "Une erreur s'est produite lors de la demande d'autorisation de contrôle à distance de {{user}}!", + "remoteControlRequestMessage": "Voulez-vous permettre à {{user}} de contrôler votre bureau à distance?", + "remoteControlShareScreenWarning": "Notez que si vous appuyez sur « Permettre », vous partagerez votre écran!", + "remoteControlStopMessage": "La séance de contrôle à distance est terminée!", + "remoteControlTitle": "Contrôle du bureau à distance", + "remoteUserControls": "Contrôles de l'utilisateur distant {{username}}", + "removePassword": "Supprimer un mot de passe", + "removeSharedVideoMsg": "Êtes-vous certain de vouloir supprimer votre vidéo partagée?", + "removeSharedVideoTitle": "Supprimer la vidéo partagée", + "renameBreakoutRoomLabel": "Nom de la salle annexe", + "renameBreakoutRoomTitle": "Renommer la salle annexe", + "reservationError": "Erreur du système de réservation", + "reservationErrorMsg": "Code d'erreur : {{code}}, message : {{msg}}", + "retry": "Réessayer", + "screenSharingAudio": "Partager l'audio", + "screenSharingFailed": "Oups! Quelque chose s'est mal passé, nous n'avons pas pu démarrer le partage d'écran!", + "screenSharingFailedTitle": "Echec du partage d'écran!", + "screenSharingPermissionDeniedError": "Oups! Une erreur s'est produite avec les autorisations de l'extension de partage d'écran. Veuillez recharger et réessayer.", + "searchInSalesforce": "Rechercher dans Salesforce", + "searchResults": "Résultats de recherche ({{count}})", + "searchResultsDetailsError": "Un problème est survenu en récupérant les données de recherche.", + "searchResultsError": "Un problème est survenu en récupérant des données.", + "searchResultsNotFound": "Aucun résultat trouvé.", + "searchResultsTryAgain": "Essayer d'utiliser d'autres mots clé.", + "sendPrivateMessage": "Vous avez récemment reçu un message privé. Aviez-vous l'intention d'y répondre en privé, ou vouliez-vous envoyer votre message au groupe?", + "sendPrivateMessageCancel": "Envoyer au groupe", + "sendPrivateMessageOk": "Envoyer en privé", + "sendPrivateMessageTitle": "Envoyer en privé?", + "serviceUnavailable": "Service non disponible", + "sessTerminated": "Appel terminé", + "sessTerminatedReason": "L'appel a été terminé", + "sessionRestarted": "L'appel est relancé par la passerelle", + "shareAudio": "Continuer", + "shareAudioAltText": "Pour partager le contenu voulu, naviguer vers \"Onglet du Navigateur\", sélectionner le contenu, activer le bouton \"partager l'audio\" et enfin cliquer sur le bouton \"partager\"", + "shareAudioTitle": "Comment partager le son", + "shareAudioWarningD1": "vous devez cesser le partage d'écran avant de partager votre son.", + "shareAudioWarningD2": "vous devez partager votre écran à nouveau et cocher l'option \"Partager l'audio\".", + "shareAudioWarningH1": "Si vous voulez partager uniquement de l'audio:", + "shareAudioWarningTitle": "Vous devez cesser de partager l'écran avant de partager l'audio", + "shareMediaWarningGenericH2": "Si vous voulez partager votre écran et l'audio", + "shareScreenWarningD1": "vous devez arrêter le partage d'audio avant de partager votre écran.", + "shareScreenWarningD2": "vous devez arrêter le partage d'audio, démarrer le partage d'écran et cocher l'option \"Partager l'audio\".", + "shareScreenWarningH1": "Si vous voulez partager uniquement votre écran:", + "shareScreenWarningTitle": "Vous devez cesser de partager votre audio avant de partager votre écran", + "shareVideoConfirmPlay": "Vous êtes sur le point d'ouvrir un site web externe. Voulez-vous continuer ?", + "shareVideoConfirmPlayTitle": "{{name}} a partagé une vidéo avec vous.", + "shareVideoLinkError": "Veuillez fournir un lien correct.", + "shareVideoLinkStopped": "La vidéo de {{name}} a été arrêtée.", + "shareVideoTitle": "Partager une vidéo", + "shareYourScreen": "Partager votre écran", + "shareYourScreenDisabled": "Le partage d'écran est désactivé.", + "sharedVideoDialogError": "Erreur: URL invalide", + "sharedVideoLinkPlaceholder": "lien YouTube ou lien vidéo direct", + "show": "Afficher", + "start": "Démarrer ", + "startLiveStreaming": "Démarrer la diffusion en direct", + "startRecording": "Commencer l'enregistrement", + "startRemoteControlErrorMessage": "Une erreur s'est produite lors de la tentative de démarrage de la séance de contrôle à distance!", + "stopLiveStreaming": "Arrêter la diffusion en direct", + "stopRecording": "Arrêter l'enregistrement", + "stopRecordingWarning": "Êtes-vous certain de vouloir arrêter l'enregistrement?", + "stopStreamingWarning": "Êtes-vous certain de vouloir arrêter la diffusion en direct?", + "streamKey": "Clé de diffusion en direct", + "thankYou": "Merci d'utiliser {{appName}}!", + "token": "jeton", + "tokenAuthFailed": "Désolé, vous n'avez pas la permission de rejoindre cet appel.", + "tokenAuthFailedReason": { + "audInvalid": "Valeur `aud` invalide. Cela doit être `jitsi`.", + "contextNotFound": "L'objet `context` est absent du payload.", + "expInvalid": "Valeur `exp` invalide.", + "featureInvalid": "Fonctionnalité invalide: {{feature}}, probablement pas encore implémentée.", + "featureValueInvalid": "Valeur invalide pour la fonctionnalité: {{feature}}.", + "featuresNotFound": "L'objet `feature` est absent du payload.", + "headerNotFound": "Header non trouvé.", + "issInvalid": "Valeur `iss` invalide. Cela doit être `chat`.", + "kidMismatch": "Key ID (kid) ne correspond pas au sub.", + "kidNotFound": "Key ID (kid) manquant.", + "nbfFuture": "La valeur `nbf` est dans le futur.", + "nbfInvalid": "Valeur `nbf` invalide.", + "payloadNotFound": "Payload non trouvé", + "tokenExpired": "Jeton expiré" + }, + "tokenAuthFailedTitle": "Échec de l'authentification", + "tokenAuthFailedWithReasons": "Désolé, vous n'êtes pas autorisé à rejoindre l'appel. La raison possible : {{reason}}.", + "tokenAuthUnsupported": "Token URL n'est pas supporté.", + "transcribing": "Transcription en cours", + "unlockRoom": "Supprimer le mot de passe de la réunion", + "user": "Utilisateur", + "userIdentifier": "Identifiant utilisateur", + "userPassword": "Mot de passe d'utilisateur", + "verifyParticipantConfirm": "Ils correspondent", + "verifyParticipantDismiss": "Ils ne correspondent pas", + "verifyParticipantQuestion": "EXPÉRIMENTAL: Demander au participant {{participantName}} s'il voit le même contenu dans le même ordre.", + "verifyParticipantTitle": "Vérification utilisateur", + "videoLink": "Lien de la vidéo", + "viewUpgradeOptions": "Voir les options de mise à jour", + "viewUpgradeOptionsContent": "Pour obtenir un accès illimité à des capacités premium comme l'enregistrement, les transcriptions, diffusion RTMP et plus, vous devez mettre à jour votre plan.", + "viewUpgradeOptionsTitle": "Vous avez découvert une capacité premium !", + "whiteboardLimitContent": "Désolé, la limite d'utilisateur du tableau blanc a été atteinte.", + "whiteboardLimitReference": "Pour plus d'informations merci de visiter", + "whiteboardLimitReferenceUrl": "notre site web", + "whiteboardLimitTitle": "Utilisation du tableau blanc limitée", + "yourEntireScreen": "Votre écran entier" + }, + "documentSharing": { + "title": "Document partagé" + }, + "e2ee": { + "labelToolTip": "Le son et la vidéo de cette réunion sont chiffrés de bout en bout" + }, + "embedMeeting": { + "title": "Intégrer cette réunion" + }, + "feedback": { + "accessibilityLabel": { + "yourChoice": "Votre choix: {{rating}}" + }, + "average": "Moyenne", + "bad": "Mauvaise", + "detailsLabel": "Dites-nous en plus.", + "good": "Bonne", + "rateExperience": "Évaluez votre expérience de cette réunion", + "star": "Étoile", + "veryBad": "Très mauvaise", + "veryGood": "Très bonne" + }, + "fileSharing": { + "downloadFailedDescription": "Veuillez réessayer.", + "downloadFailedTitle": "Échec du téléchargement", + "downloadFile": "Télécharger", + "downloadStarted": "Téléchargement de fichier démarré", + "dragAndDrop": "Glisser-déposer des fichiers ici ou n'importe où à l'écran", + "fileAlreadyUploaded": "Ce fichier a déjà été téléversé dans cette réunion.", + "fileTooLargeDescription": "Veuillez vous assurer que le fichier ne dépasse pas {{ maxFileSize }}.", + "fileTooLargeTitle": "Le fichier choisi est trop volumineux", + "fileUploadProgress": "Progression du téléchargement de fichier", + "fileUploadedSuccessfully": "Fichier téléversé avec succès", + "removeFile": "Supprimer", + "removeFileSuccess": "Fichier supprimé avec succès", + "uploadFailedDescription": "Veuillez réessayer.", + "uploadFailedTitle": "Échec du téléchargement", + "uploadFile": "Partager un fichier" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Vignettes vidéos" + } + }, + "giphy": { + "noResults": "Aucun résultat de recherche :(", + "search": "Rechercher dans GIPHY" + }, + "incomingCall": { + "answer": "Réponse", + "audioCallTitle": "Appel entrant", + "decline": "Rejeter", + "productLabel": "via Jitsi Meet", + "videoCallTitle": "Appel vidéo entrant" + }, + "info": { + "accessibilityLabel": "Afficher l'information", + "addPassword": "Ajouter un mot de passe", + "cancelPassword": "Annuler le mot de passe", + "conferenceURL": "Lien:", + "copyNumber": "Copier le numéro", + "country": "Pays", + "dialANumber": "Pour rejoindre votre réunion, composez un de ces numéros et entrez le NIP.", + "dialInConferenceID": "NIP :", + "dialInNotSupported": "Désolé, les appels internes ne sont pas pris en charge pour le moment.", + "dialInNumber": "Appel interne :", + "dialInSummaryError": "Erreur lors de la récupération des informations d'appel interne. Veuillez réessayer plus tard.", + "dialInTollFree": "Sans frais", + "genericError": "Oups, une erreur s'est produite.", + "inviteLiveStream": "Pour voir la diffusion en directe de cette réunion, cliquez sur ce lien : {{url}}", + "invitePhone": "Pour rejoindre depuis un téléphone, composez : {{number}},,{{conferenceID}}#\n", + "invitePhoneAlternatives": "Vous cherchez un numéro d'appel différent ?\nConsultez la liste de numéros d'appel de la réunion : {{url}}\n\n\nSi vous appelez également via un téléphone de salle, vous pouvez vous connecter sans audio : {{silentUrl}}", + "inviteSipEndpoint": "Pour rejoindre en utilisant l'adresse SIP, entrez ceci : {{sipUri}}", + "inviteTextiOSInviteUrl": "Clickez le lien suivant pour rejoindre: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "Si vous téléphonez avec un téléphone de réunion, utilisez ce lien pour rejoindre sans vous connecter en audio: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}} vous invite à une réunion.", + "inviteTextiOSPhone": "Pour rejoindre par téléphone, utilisez ce numéro: {{number}},,{{conferenceID}}#. Si vous voulez utiliser un autre numéro, voici la liste complête: {{didUrl}}.", + "inviteURLFirstPartGeneral": "Vous avez été invité à rejoindre une réunion.", + "inviteURLFirstPartPersonal": "{{name}} vous invite à une réunion.\n", + "inviteURLSecondPart": "\nRejoindre la réunion:\n{{url}}\n", + "label": "Informations de réunion", + "liveStreamURL": "Diffusion en direct :", + "moreNumbers": "Plus de numéros", + "noNumbers": "Aucun numéro d'appel trouvé", + "noPassword": "Aucun", + "noRoom": "Vous n'avez pas précisé de salle pour l'appel interne.", + "noWhiteboard": "Impossible de charger le tableau blanc.", + "numbers": "Numéros d'appel", + "password": "Mot de passe:", + "reachedLimit": "Vous avez atteint la limite de votre abonnement.", + "sip": "adresse SIP", + "sipAudioOnly": "Adresse SIP en audio uniquement", + "title": "Partager", + "tooltip": "Lien de partage et informations d'appel interne pour cette réunion", + "upgradeOptions": "Veuillez vérifier les options de mise à niveau", + "whiteboardError": "Erreur de chargement du tableau blanc. Veuillez réessayer plus tard." + }, + "inlineDialogFailure": { + "msg": "Nous avons rencontré un obstacle.", + "retry": "Réessayer", + "support": "Soutien", + "supportMsg": "Si cela se produit à nouveau, veuillez contacter" + }, + "inviteDialog": { + "alertText": "L'invitation de certains participants a échoué.", + "header": "Inviter", + "searchCallOnlyPlaceholder": "Entrer le numéro de téléphone", + "searchPeopleOnlyPlaceholder": "Rechercher des participants", + "searchPlaceholder": "Participant ou numéro de téléphone", + "send": "Envoyer" + }, + "jitsiHome": "{{logo}} Logo, liens vers la page d'accueil", + "keyboardShortcuts": { + "focusLocal": "Épingler votre vidéo", + "focusRemote": "Épingler la vidéo d'une autre personne", + "fullScreen": "Afficher ou quitter le mode plein écran", + "giphyMenu": "Activer ou désactiver le menu GIPHY", + "keyboardShortcuts": "Raccourcis clavier", + "localRecording": "Afficher ou masquer les commandes d'enregistrement local", + "mute": "Activer ou désactiver votre micro", + "pushToTalk": "Maintenir la touche pour parler", + "raiseHand": "Lever ou abaisser votre main", + "showSpeakerStats": "Afficher les statistiques d'intervenant", + "toggleChat": "Ouvrir ou fermer le clavardage", + "toggleFilmstrip": "Afficher ou masquer les icônes vidéos", + "toggleParticipantsPane": "Afficher ou masquer le volet des participants", + "toggleScreensharing": "Basculer entre la caméra et le partage d'écran", + "toggleShortcuts": "Afficher ou masquer les raccourcis clavier", + "videoMute": "Démarrer ou arrêter votre caméra" + }, + "largeVideo": { + "screenIsShared": "Vous êtes en train de partager votre écran", + "showMeWhatImSharing": "M'afficher ce que je partage" + }, + "liveStreaming": { + "busy": "Libération de ressources de diffusion en cours. Veuillez réessayer dans quelques minutes.", + "busyTitle": "Tous les diffuseurs sont actuellement occupés", + "changeSignIn": "Changer de compte.", + "choose": "Sélectionner une diffusion en direct", + "chooseCTA": "Sélectionner une option de diffusion en direct. Vous êtes actuellement connecté en tant que {{email}}.", + "enterStreamKey": "Saisissez votre clé de diffusion en direct YouTube ici.", + "error": "Échec de la diffusion en direct. Veuillez réessayer.", + "errorAPI": "Une erreur s'est produite lors de l'accès à vos diffusions YouTube.Veuillez réessayer de vous connecter.", + "errorLiveStreamNotEnabled": "La diffusion en direct n'est pas activée pour {{email}}. Veuillez activer la diffusion en direct ou vous connecter à un compte pour lequel la diffusion en direct est activée.", + "expandedOff": "La diffusion en direct a été arrêtée", + "expandedOn": "La réunion est actuellement diffusée sur YouTube.", + "expandedPending": "Le démarrage de la diffusion en direct est en cours…", + "failedToStart": "Le démarrage de la diffusion en direct a échoué", + "getStreamKeyManually": "La récupération de diffusions en direct a échoué. Essayez d'obtenir une clé de diffusion en direct sur YouTube.", + "googlePrivacyPolicy": "Politique de confidentialité de Google", + "inProgress": "Enregisrtement ou diffusion en cours", + "invalidStreamKey": "La clé de diffusion en direct peut être erronée.", + "limitNotificationDescriptionNative": "Votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez {{app}}.", + "limitNotificationDescriptionWeb": "En raison d'une forte demande, votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez {{app}} .", + "off": "La diffusion en direct s'est arrêtée", + "offBy": "{{name}} a arrêté la diffusion en continu", + "on": "Diffusion en direct", + "onBy": "{{name}} démarré la diffusion en continu", + "pending": "Démarrage de la diffusion en direct…", + "policyError": "Vous avez essayé de démarrer une diffusion en direct trop rapidement. Veuillez réessayer plus tard !", + "serviceName": "Service de diffusion en direct", + "sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.", + "signIn": "Se connecter avec Google", + "signInCTA": "Connectez-vous ou entrez votre clé de diffusion en direct de YouTube", + "signOut": "Se déconnecter", + "signedInAs": "Vous êtes actuellement connecté en tant que :", + "start": "Démarrer une diffusion en direct", + "streamIdHelp": "Qu'est-ce que c'est?", + "title": "Diffusion en direct", + "unavailableTitle": "Diffusion en direct non disponible", + "youtubeTerms": "Conditions d'utilisation de YouTube" + }, + "lobby": { + "backToKnockModeButton": "Aucun mot de passe, demander à rejoindre plutôt", + "chat": "Chat", + "dialogTitle": "Mode salle d'attente", + "disableDialogContent": "Le mode salle d'attente est actuellement activé. Cette fonctionnalité garantit que les participants indésirables ne peuvent pas rejoindre votre réunion. Souhaitez-vous la désactiver?", + "disableDialogSubmit": "Désactiver", + "emailField": "Saisissez votre adresse email", + "enableDialogPasswordField": "Définir le mot de passe (optionnel)", + "enableDialogSubmit": "Activer", + "enableDialogText": "Le mode salle d'attente vous permet de protéger votre réunion en autorisant les personnes à entrer qu'après l'approbation formelle d'un modérateur.", + "enterPasswordButton": "Saisissez un mot de passe de réunion", + "enterPasswordTitle": "Saisissez le mot de passe pour rejoindre la réunion", + "errorMissingPassword": "Veuillez saisir le mot de passe de la réunion", + "invalidPassword": "Mot de passe invalide", + "joinRejectedMessage": "Votre requête pour rejoindre une réunion a été refusée par un modérateur.", + "joinRejectedTitle": "Demande d'accès rejetée.", + "joinTitle": "Rejoindre une réunion", + "joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait…", + "joiningMessage": "Vous allez rejoindre une réunion dès que quelqu'un aura accepté votre demande", + "joiningTitle": "Demander à rejoindre une réunion…", + "joiningWithPasswordTitle": "Rejoindre avec mot de passe…", + "knockButton": "Demander à rejoindre", + "knockTitle": "Quelqu'un souhaite rejoindre la réunion", + "knockingParticipantList": "Liste des participants en attente", + "lobbyChatStartedNotification": "Un modérateur dialogue en salle d'attente avec {{attendee}}", + "lobbyChatStartedTitle": "Un modérateur dialogue en salle d'attente avec vous.", + "lobbyClosed": "La salle d'attente a été fermée.", + "nameField": "Saisissez votre nom", + "notificationLobbyAccessDenied": "{{targetParticipantName}} a été refusé par {{originParticipantName}}", + "notificationLobbyAccessGranted": "{{targetParticipantName}} a été accepté par {{originParticipantName}}", + "notificationLobbyDisabled": "Le mode salle d'attente a été désactivé par {{originParticipantName}}", + "notificationLobbyEnabled": "Le mode salle d'attente a été activé par {{originParticipantName}}", + "notificationTitle": "Salle d'attente", + "passwordJoinButton": "Rejoindre", + "title": "Salle d'attente", + "toggleLabel": "Activer la salle d'attente", + "waitForModerator": "La réunion n'a pas encore commencé car aucun modérateur n'est encore arrivé. Si vous souhaitez devenir modérateur, veuillez vous connecter. Sinon, veuillez attendre." + }, + "localRecording": { + "clientState": { + "off": "Désactivé", + "on": "Prêt", + "unknown": "Inconnu" + }, + "dialogTitle": "Commandes d'enregistrement local", + "duration": "Durée", + "durationNA": "N. D.", + "encoding": "Encodage", + "label": "LOR", + "labelToolTip": "L'enregistrement local est en cours", + "localRecording": "Enregistrement local", + "me": "Moi", + "messages": { + "engaged": "Enregistrement local activé.", + "finished": "Enregistrement de la séance {{token}} terminé. Veuillez envoyer le fichier d'enregistrement au modérateur.", + "finishedModerator": "Enregistrement de la séance {{token}} terminé. L'enregistrement de la piste locale a été enregistrée. Veuillez demander aux autres participants de soumettre leurs enregistrements.", + "notModerator": "Vous n'êtes pas le modérateur. Vous ne pouvez pas démarrer ou arrêter l'enregistrement local." + }, + "moderator": "Modérateur", + "no": "Non", + "participant": "Participant", + "participantStats": "Statistiques de participant", + "selectTabTitle": "🎥 Veuillez sélectionner cet onglet pour enregistrer", + "sessionToken": "Jeton de séance", + "start": "Commencer l'enregistrement", + "stop": "Arrêter l'enregistrement", + "stopping": "Arrêt de l'enregistrement", + "wait": "Patienter pendant la sauvegarde de votre enregistrement.", + "yes": "Oui" + }, + "lockRoomPassword": "mot de passe", + "lockRoomPasswordUppercase": "Mot de passe", + "lonelyMeetingExperience": { + "button": "Inviter d'autres personnes", + "youAreAlone": "Vous êtes le seul participant de la réunion" + }, + "me": "moi", + "notify": { + "OldElectronAPPTitle": "Faille de sécurité !", + "allowAll": "Tout autoriser", + "allowAudio": "Autoriser l'audio", + "allowDesktop": "Autoriser le partage d'écran", + "allowVideo": "Autoriser la vidéo", + "allowedUnmute": "Vous pouvez réactiver votre écran, votre caméra ou partager votre écran.", + "audioUnmuteBlockedDescription": "Le rétablissement du son a été bloqué temporairement en raison de limites système.", + "audioUnmuteBlockedTitle": "Rétablissement du son bloqué!", + "chatMessages": "Messages de chat", + "connectedOneMember": "{{name}} a rerejoint la réunion", + "connectedThreePlusMembers": "{{name}} et {{count}} autres ont rerejoint la réunion", + "connectedTwoMembers": "{{first}} et {{second}} ont rerejoint la réunion", + "connectionFailed": "Connexion échouée. Veuillez réessayer plus tard !", + "dataChannelClosed": "Qualité vidéo dégradée", + "dataChannelClosedDescription": "Le canal de communication avec le Bridge a été interrompu, la qualité vidéo se trouve limitée à sa valeur la plus faible.", + "dataChannelClosedDescriptionWithAudio": "Le canal de pont est fermé, ce qui peut entraîner des perturbations de l'audio et de la vidéo.", + "dataChannelClosedWithAudio": "La qualité de l'audio et de la vidéo peut être altérée", + "desktopMutedRemotelyTitle": "Votre partage d'écran a été arrêté par {{participantDisplayName}}", + "disabledIframe": "L'intégration Iframe est uniquement destinée à des démos, cet appel se terminera dans {{timeout}} minutes.", + "disabledIframeSecondaryNative": "L'intégration de {{domain}} est uniquement destinée aux fins de démonstration, cet appel se terminera dans {{timeout}} minutes.", + "disabledIframeSecondaryWeb": "L'intégration de {{domain}} est uniquement destinée aux fins de démonstration, cet appel se terminera dans {{timeout}} minutes. Veuillez utiliser Jitsi as a Service pour l'intégration en production !", + "disconnected": "déconnecté", + "displayNotifications": "Afficher les notifications pour", + "dontRemindMe": "Ne pas me le rappeler", + "focus": "Sujet de la réunion", + "focusFail": "{{component}} non disponible; réessayez dans {{ms}} sec", + "gifsMenu": "GIPHY", + "groupTitle": "Notifications", + "hostAskedUnmute": "Le modérateur souhaite vous donner la parole", + "invalidTenant": "Tenant invalide", + "invalidTenantHyphenDescription": "Le tenant que vous utilisez est invalide (commence ou se termine par '-').", + "invalidTenantLengthDescription": "Le tenant que vous utilisez est trop long.", + "invitedOneMember": "{{displayName}} a été invité", + "invitedThreePlusMembers": "{{name}} et {{count}} autres ont été invités", + "invitedTwoMembers": "{{first}} et {{second}} ont été invités", + "joinMeeting": "Rejoindre", + "kickParticipant": "{{kicked}} a été expulsé par {{kicker}}", + "leftOneMember": "{{name}} a quitté la réunion", + "leftThreePlusMembers": "{{name}} et beaucoup d'autres ont quitté la réunion", + "leftTwoMembers": "{{first}} et {{second}} ont quitté la réunion", + "linkToSalesforce": "Lien à Salesforce", + "linkToSalesforceDescription": "Vous pouvez lier le résumé de la réunion à un objet Salesforce.", + "linkToSalesforceError": "Impossible de relier la réunion à Salesforce", + "linkToSalesforceKey": "Relier cette réunion", + "linkToSalesforceProgress": "Liaison de la réunion à Salesforce…", + "linkToSalesforceSuccess": "La réunion a été reliée à Salesforce", + "localRecordingStarted": "{{name}} a commencé un enregistrement local.", + "localRecordingStopped": "{{name}} a arrêté un enregistrement local.", + "me": "Moi", + "moderationInEffectCSDescription": "Merci de lever la main si vous voulez partager votre écran.", + "moderationInEffectCSTitle": "Le partage d'écran est interdit par le modérateur", + "moderationInEffectDescription": "Merci de levez la main pour demander la parole.", + "moderationInEffectTitle": "Votre micro est coupé par le modérateur", + "moderationInEffectVideoDescription": "Merci de lever la main si vous souhaitez démarrer votre caméra.", + "moderationInEffectVideoTitle": "Votre caméra est coupée par le modérateur", + "moderationRequestFromModerator": "Le modérateur souhaite que vous activiez votre micro", + "moderationRequestFromParticipant": "Souhaite parler", + "moderationStartedTitle": "Modération démarrée", + "moderationStoppedTitle": "Modération arrêtée", + "moderationToggleDescription": "par {{participantDisplayName}}", + "moderator": "Droits de modérateur accordés!", + "muted": "Vous avez joint la conversation en sourdine.", + "mutedRemotelyDescription": "Vous pouvez toujours activer votre micro pour prendre la parole. Désactivez votre micro quand vous terminez pour éviter les bruits parasites.", + "mutedRemotelyTitle": "Votre micro a été coupé par {{participantDisplayName}}!", + "mutedTitle": "Vous êtes en sourdine!", + "newDeviceAction": "Utiliser", + "newDeviceAudioTitle": "Nouveau dispositif audio détecté", + "newDeviceCameraTitle": "Nouvelle caméra détectée", + "nextToSpeak": "Vous êtes le prochain à prendre la parole", + "noiseSuppressionDesktopAudioDescription": "La suppression de bruit ne peut pas être activée en même temps que la partage audio du système, veuillez le désactiver et réessayer.", + "noiseSuppressionFailedTitle": "Échec du démarrage de la suppression de bruit", + "noiseSuppressionStereoDescription": "La suppression de bruit d'une source stéréo n'est pas encore supportée.", + "oldElectronClientDescription1": "Vous semblez utiliser une ancienne version du client Jitsi Meet qui présente des failles de sécurité connues. Veuillez vous assurer de mettre à jour vers notre ", + "oldElectronClientDescription2": "dernière build", + "oldElectronClientDescription3": " rapidement !", + "openChat": "Ouvrir le chat", + "participantWantsToJoin": "souhaite rejoindre la réunion", + "participantsWantToJoin": "souhaitent rejoindre la réunion", + "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) supprimé par un autre participant", + "passwordSetRemotely": "$t(lockRoomPasswordUppercase) défini par un autre participant", + "raiseHandAction": "Lever la main", + "raisedHand": "{{name}} voudrait parler.", + "raisedHands": "{{participantName}} et {{raisedHands}} autres personnes", + "reactionSounds": "Bloquer les réactions sonores", + "reactionSoundsForAll": "Bloquer les réactions sonores pour tous", + "screenShareNoAudio": " La case Partager l'audio n'a pas été cochée dans l'écran de sélection de la fenêtre.", + "screenShareNoAudioTitle": "La case Partager l'audio n'a pas été cochée", + "screenSharingAudioOnlyDescription": "Veuillez noter qu'en partageant votre écran, vous impactez le mode “Meilleure Performance” et vous utilisez plus de bande passante.", + "screenSharingAudioOnlyTitle": "Mode \"Meilleure Performance\"", + "selfViewTitle": "Vous pouvez toujours rétablir l'affichage de votre propre vidéo dans les paramètres", + "somebody": "Quelqu'un", + "startSilentDescription": "Rejoignez la réunion de nouveau pour activer l'audio", + "startSilentTitle": "Vous avez rejoint sans sortie audio!", + "suboptimalBrowserWarning": "Nous craignons que votre expérience de réunion en ligne ne soit bonne ici. Nous cherchons des moyens d'améliorer cela, mais d'ici-là, essayez d'utiliser l'un des navigateurs supportés.", + "suboptimalExperienceTitle": "Avertissement de navigateur", + "suggestRecordingAction": "Démarrer", + "suggestRecordingDescription": "Souhaitez-vous démarrer un enregistrement ?", + "suggestRecordingTitle": "Enregistrer cette réunion", + "unmute": "Rétablir le son", + "unmuteScreen": "Démarrer le partage d'écran", + "unmuteVideo": "Réactiver la vidéo", + "videoMutedRemotelyDescription": "Vous pouvez toujours la réactiver.", + "videoMutedRemotelyTitle": "Votre caméra a été coupée par {{participantDisplayName}}!", + "videoUnmuteBlockedDescription": "Le rétablissement de la vidéo a été bloqué temporairement en raison de limites système.", + "videoUnmuteBlockedTitle": "Rétablissement de la caméra bloqué !", + "viewLobby": "Voir la salle d'attente", + "viewParticipants": "Voir les participants", + "viewVisitors": "Voir les visiteurs", + "waitingParticipants": "{{waitingParticipants}} personnes", + "waitingVisitors": "Visiteurs en attente dans la file : {{waitingVisitors}}", + "waitingVisitorsTitle": "La réunion n'est pas encore en direct !", + "whiteboardLimitDescription": "Veuillez sauvegarder votre progression, car la limite d'utilisation du tableau blanc sera bientôt atteinte et celui-ci sera fermé.", + "whiteboardLimitTitle": "Utiilisation du tableau blanc" + }, + "participantsPane": { + "actions": { + "admit": "Accepter", + "admitAll": "Tout accepter", + "allow": "Autoriser les participants à:", + "allowDesktop": "Autoriser le partage d'écran", + "allowVideo": "permettre la vidéo", + "askDesktop": "Demander de partager l'écran", + "askUnmute": "Demander de réactiver le micro", + "audioModeration": "Rouvrir leur micro", + "blockEveryoneMicCamera": "Bloquer tous les micros et caméras", + "breakoutRooms": "Salles annexes", + "desktopModeration": "Démarrer le partage d'écran", + "goLive": "Passer en direct", + "invite": "Inviter quelqu'un", + "lowerAllHands": "Abaisser toutes les mains", + "lowerHand": "Abaisser la main", + "moreModerationActions": "Options de modération supplémentaires", + "moreModerationControls": "Options de modération supplémentaires", + "moreParticipantOptions": "Options supplémentaires pour les participants", + "mute": "Couper le micro", + "muteAll": "Couper le micro de tout le monde", + "muteEveryoneElse": "Couper le micro de tous les autres", + "reject": "Refuser", + "stopDesktop": "Arrêter le partage d'écran", + "stopEveryonesDesktop": "Arrêter le partage d'écran de tout le monde", + "stopEveryonesVideo": "Couper toutes les caméras", + "stopVideo": "Couper la vidéo", + "unblockEveryoneMicCamera": "Débloquer tous les micros et caméras", + "videoModeration": "Démarrer leur vidéo" + }, + "close": "Fermer", + "headings": { + "lobby": "Salle d'attente ({{count}})", + "participantsList": "Participants de la réunion ({{count}})", + "viewerRequests": "Demandes des spectateurs {{count}}", + "visitorInQueue": " (en attente {{count}})", + "visitorRequests": "(Demande {{count}} )", + "visitors": "Visiteurs {{count}}", + "visitorsList": "Spectateurs ({{count}})", + "waitingLobby": "Dans la salle d'attente ({{count}})" + }, + "search": "Rechercher des participants", + "searchDescription": "Commencez à taper pour filtrer les participants", + "title": "Participants" + }, + "passwordDigitsOnly": "Jusqu'à {{number}} chiffres", + "passwordSetRemotely": "réglé par un autre membre", + "pinParticipant": "Épingler - {{participantName}}", + "pinnedParticipant": "Participant toujours affiché", + "polls": { + "answer": { + "edit": "Modifier", + "send": "Envoyer", + "skip": "Passer", + "submit": "Envoyer" + }, + "by": "Par {{ name }}", + "closeButton": "Fermer le sondage", + "create": { + "addOption": "Ajouter une option", + "answerPlaceholder": "Option {{index}}", + "cancel": "Annuler", + "create": "Créer un sondage", + "pollOption": "Option {{index}}", + "pollQuestion": "Question du sondage", + "questionPlaceholder": "Poser une question", + "removeOption": "Supprimer l'option", + "save": "Enregistrer", + "send": "Envoyer" + }, + "errors": { + "notUniqueOption": "Les options doivent être uniques" + }, + "notification": { + "description": "Ouvrez l'onglet des sondages pour voter", + "title": "Un nouveau sondage a été ajouté à la réunion" + }, + "results": { + "changeVote": "Changer le vote", + "empty": "Il n'y a pas encore de sondages dans cette réunion. Démarrez un sondage ici !", + "hideDetailedResults": "Masquer les détails", + "showDetailedResults": "Afficher les détails", + "vote": "Voter" + } + }, + "poweredby": "optimisé par", + "prejoin": { + "audioAndVideoError": "Erreur audio et video:", + "audioDeviceProblem": "Il y a un problème avec votre périphérique audio", + "audioOnlyError": "Erreur audio :", + "audioTrackError": "N'a pas pu créer la piste audio.", + "callMe": "Appelez-moi", + "callMeAtNumber": "Appelez-moi à ce numéro :", + "calling": "Appel", + "configuringDevices": "Configuration des appareils…", + "connectedWithAudioQ": "Êtes-vous connecté avec le microphone ?", + "connection": { + "failed": "Le test de connexion a échoué !", + "good": "Votre connexion Internet est bonne !", + "nonOptimal": "Votre connexion n'est pas optimale", + "poor": "Vous avez une mauvaise connexion", + "running": "Exécution du test de connexion…" + }, + "connectionDetails": { + "audioClipping": "Attendez vous à ce que votre son soit coupé.", + "audioHighQuality": "Votre son sera de bonne qualité.", + "audioLowNoVideo": "Attendez vous à une faible qualité audio et aucune vidéo", + "goodQuality": "Impressionnant ! La qualité de vos médias sera excellente", + "noMediaConnectivity": "Nous n'avons pas pu trouver un moyen d'établir une connectivité multimédia pour ce test. Cela est généralement causé par un pare-feu ou un NAT.", + "noVideo": "Attendez vous à ce que votre qualité vidéo soit très mauvaise.", + "testFailed": "Le test de connexion a rencontré des problèmes inattendus, mais cela pourrait ne pas affecter votre expérience.", + "undetectable": "Si vous ne parvenez toujours pas à passer des appels dans le navigateur, nous vous recommandons de vous assurer que vos haut-parleurs, microphone et caméra sont correctement configurés, que vous avez accordé à votre navigateur les droits d'utiliser votre microphone et votre caméra et que la version de votre navigateur est à jour. Si vous rencontrez toujours des difficultés pour appeler, vous devez contacter le développeur de l'application Web.", + "veryPoorConnection": "Attendez vous à ce que la qualité de votre appel soit très mauvaise", + "videoFreezing": "Attendez vous à ce que votre vidéo saute, soit noire, et pixelisée.", + "videoHighQuality": "Votre vidéo sera de bonne qualité", + "videoLowQuality": "Votre vidéo sera de basse qualité en terme d'images par seconde et de résolution.", + "videoTearing": "Attendez vous à ce que votre vidéo soit pixélisée ou contienne des artefacts visuels." + }, + "copyAndShare": "Copier & partager le lien", + "dialInMeeting": "Participez à la réunion", + "dialInPin": "Participez à la réunion et saisir le code PIN :", + "dialing": "Numérotation", + "doNotShow": "Ne plus afficher ceci", + "errorDialOut": "Impossible de composer le numéro", + "errorDialOutDisconnected": "Impossible de composer le numéro. Déconnecté", + "errorDialOutFailed": "Impossible de composer le numéro. L'appel a échoué", + "errorDialOutStatus": "Erreur lors de l'obtention de l'état d'appel sortant", + "errorMissingName": "Veuillez entrer votre nom pour entrer en réunion", + "errorNoPermissions": "Vous devez permettre l'accès microphone et caméra", + "errorStatusCode": "Erreur de numérotation, code d'état: {{status}}", + "errorValidation": "La validation du numéro a échoué", + "iWantToDialIn": "Je veux me connecter", + "initiated": "Appel lancé", + "joinAudioByPhone": "Rejoindre avec l'audio du téléphone", + "joinMeeting": "Rejoindre la réunion", + "joinMeetingInLowBandwidthMode": "Rejoindre en mode bande passante réduite", + "joinWithoutAudio": "Rejoignez sans microphone", + "keyboardShortcuts": "Activer les raccourcis clavier", + "linkCopied": "Lien copié dans le presse-papiers", + "lookGood": "Il semble que votre microphone fonctionne correctement", + "or": "ou", + "premeeting": "Pré-séance", + "proceedAnyway": "Continuer quand même", + "recordingWarning": "D'autres participants peuvent enregistrer cet appel", + "screenSharingError": "Erreur de partage d'écran:", + "startWithPhone": "Commencez avec l'audio du téléphone", + "unsafeRoomConsent": "Je comprends les risques et je veux quand même rejoindre cette réunion", + "videoOnlyError": "Erreur vidéo:", + "videoTrackError": "Impossible de créer une piste vidéo.", + "viewAllNumbers": "voir tous les numéros" + }, + "presenceStatus": { + "busy": "Occupé", + "calling": "Appel en cours…", + "connected": "Connecté", + "connecting": "Connexion en cours…", + "connecting2": "Connexion en cours*…", + "disconnected": "Déconnecté", + "expired": "Expiré", + "ignored": "Ignoré", + "initializingCall": "Initialisation de l'appel…", + "invited": "Invité", + "rejected": "Refusé", + "ringing": "Sonnerie" + }, + "profile": { + "avatar": "avatar", + "setDisplayNameLabel": "Définir votre nom d'affichage", + "setEmailInput": "Entrer votre adresse courriel", + "setEmailLabel": "Définir votre courriel Gravatar", + "title": "Profil" + }, + "raisedHand": "Aimerait prendre la parole", + "raisedHandsLabel": "Nombre de mains levées", + "record": { + "already": { + "linked": "L'enregistrement est déjà relié à cette session." + }, + "type": { + "account": "Compte", + "contact": "Contact", + "lead": "Piste", + "opportunity": "Opportunité", + "owner": "Propriétaire" + } + }, + "recording": { + "authDropboxText": "Téléverser à Dropbox", + "availableSpace": "Espace disponible : {{spaceLeft}} Mo (approximativement {{duration}} minutes d'enregistrement)", + "beta": "BETA", + "busy": "Libération de ressources pour l'enregistrement. Veuillez réessayer dans quelques minutes.", + "busyTitle": "Tous les enregistreurs sont actuellement occupés", + "copyLink": "Copier lien", + "error": "L'enregistrement a échoué. Veuillez réessayer.", + "errorFetchingLink": "Erreur de récupération du lien d'enregistrement.", + "expandedOff": "L'enregistrement a été arrêté.", + "expandedOn": "La réunion est actuellement enregistrée.", + "expandedPending": "Démarrage de l'enregistrement en cours…", + "failedToStart": "Échec du démarrage de l'enregistrement", + "fileSharingdescription": "Partager l'enregistrement avec les participants de la réunion", + "highlight": "Souligner", + "highlightMoment": "Souligner un moment", + "highlightMomentDisabled": "Vous ne pouvez souligner des moments que pendant une réunion", + "highlightMomentSuccess": "Moment souligné", + "highlightMomentSucessDescription": "Votre moment souligné sera ajouté au résumé de la réunion.", + "inProgress": "Enregistrement ou diffusion en cours", + "limitNotificationDescriptionNative": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <3> {{app}} .", + "limitNotificationDescriptionWeb": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez {{app}} .", + "linkGenerated": "Nous avons généré un lien à votre enregistrement.", + "localRecordingNoNotificationWarning": "Le démarrage de l’enregistrement ne sera pas annoncé aux autres participants. Vous devrez les informer par vous-même que la réunion sera enregistrée.", + "localRecordingNoVideo": "La vidéo n'est pas en cours d’enregistrement", + "localRecordingStartWarning": "Assurez-vous d’arrêter l’enregistrement vidéo avant de quitter la réunion afin de pouvoir le sauvegarder.", + "localRecordingStartWarningTitle": "Arrêter l’enregistrement pour le sauvegarder", + "localRecordingVideoStop": "Arrêter votre vidéo va aussi arrêter votre enregistrement local. Êtes-vous sûrs de vouloir continuer ?", + "localRecordingVideoWarning": "Pour enregistrer votre vidéo, vous devez avoir celle-ci active au moment de commencer l’enregistrement.", + "localRecordingWarning": "Assurez-vous de sélectionner l’onglet courant pour utiliser le bon son et la bonne vidéo.", + "loggedIn": "Connecté en tant que {{userName}}", + "noMicPermission": "La piste microphone ne peut pas être créée. Veuillez autoriser l’utilisation du microphone.", + "noStreams": "Aucun flux audio ou vidéo détectés.", + "off": "L'enregistrement est arrêté", + "offBy": "{{name}} a arrêté l'enregistrement", + "on": "Enregistrement", + "onBy": "{{name}} a démarré l'enregistrement", + "onlyRecordSelf": "Enregistrer seulement mon audio et ma vidéo.", + "pending": "Enregistrement de la réunion en préparation…", + "policyError": "Vous avez essayé de démarrer un enregistrement trop rapidement. Veuillez réessayer plus tard !", + "recordAudioAndVideo": "Enregistrer l'audio et la vidéo", + "recordTranscription": "Enregistrer la transcription", + "saveLocalRecording": "Sauvegarder l’enregistrement local (Beta)", + "serviceDescription": "Votre enregistrement sera sauvegardé par le service d'enregistrement", + "serviceDescriptionCloud": "Enregistrement Cloud", + "serviceDescriptionCloudInfo": "Les réunions enregistrées sont automatiquement supprimées 24h après leur heure d'enregistrement.", + "serviceName": "Service d'enregistrement", + "sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.", + "showAdvancedOptions": "Afficher les options avancées", + "signIn": "Se connecter", + "signOut": "Se déconnecter", + "surfaceError": "Veuillez sélectionner l’onglet courant.", + "title": "Enregistrement", + "unavailable": "Oups! Le {{serviceName}} n'est pas disponible pour le moment. Nous nous efforçons de régler le problème. Veuillez réessayer plus tard.", + "unavailableTitle": "Enregistrement non disponible", + "uploadToCloud": "Envoyer vers le cloud" + }, + "screenshareDisplayName": "Écran {{name}}", + "sectionList": { + "pullToRefresh": "Tirer pour rafraîchir" + }, + "security": { + "about": "Vous pouvez ajouter un mot de passe à votre réunion. Les participants devront fournir le mot de passe avant de pouvoir rejoindre la réunion.", + "aboutReadOnly": "Les modérateurs peuvent ajouter un mot de passe à la réunion. Les participants devront fournir le mot de passe avant de pouvoir rejoindre la réunion.", + "insecureRoomNameWarningNative": "Le nom de la réunion n’est pas sûr. Des participants non voulus pourraient rejoindre cette réunion. {{recommendAction}} En apprendre plus sur la sécurisation des réunions.", + "insecureRoomNameWarningWeb": "Le nom de la réunion n’est pas sûr. Des participants non voulus pourraient rejoindre cette réunion. {{recommendAction}} En apprendre plus sur la sécurisation des réunions here.", + "title": "Options de sécurité", + "unsafeRoomActions": { + "meeting": "Envisagez de sécuriser votre réunion en utilisant le bouton options de sécurité.", + "prejoin": "Envisagez d'utiliser un nom plus unique", + "welcome": "Envisagez d'utiliser un nom plus unique ou choisissez en un parmi ceux suggérés" + } + }, + "settings": { + "audio": "Audio", + "buttonLabel": "Paramètres", + "calendar": { + "about": "L'intégration de l'agenda de {{appName}} est utilisée pour accéder en toute sécurité à votre agenda pour qu'il puisse lire les événements à venir.", + "disconnect": "Déconnexion", + "microsoftSignIn": "Se connecter avec Microsoft", + "signedIn": "Accès aux événements de votre agenda en cours pour {{email}}. Cliquez sur le bouton de déconnexion ci-dessous pour terminer l'accès aux événements d'agenda.", + "title": "Calendrier" + }, + "chatWithPermissions": "Le chat nécessite une autorisation", + "desktopShareFramerate": "Images par seconde pour le Partage d'écran", + "desktopShareHighFpsWarning": "Augmenter le nombre d'images par seconde pour le partage d'écran peut impacter votre bande passante. Vous devez repartager l'écran pour que ces paramètres soient utilisés.", + "desktopShareWarning": "Vous devez repartager l'écran pour que ces paramètres soient utilisés.", + "devices": "Dispositifs", + "followMe": "Tous les participants me suivent", + "followMeRecorder": "L'enregistreur me suit", + "framesPerSecond": "images par seconde", + "incomingMessage": "un message arrive", + "language": "Langue", + "loggedIn": "Connecté en tant que {{name}}", + "maxStageParticipants": "Nombre maximum de participants pouvant être épinglé sur l’affichage principal", + "microphones": "Microphones", + "moderator": "Modérateur", + "moderatorOptions": "Options de modérateur", + "more": "Plus", + "name": "Nom", + "noDevice": "Aucun", + "notifications": "Notifications", + "participantJoined": "un participant arrive", + "participantKnocking": "un participant en salle d’attente", + "participantLeft": "un participant quitte", + "playSounds": "Jouer un son quand", + "reactions": "Il y a une réaction à la réunion", + "sameAsSystem": "Identique au système ({{label}})", + "selectAudioOutput": "Sortie audio", + "selectCamera": "Caméra", + "selectMic": "Micro", + "selfView": "Affichage de votre propre vidéo", + "shortcuts": "Raccourcis", + "showSubtitlesOnStage": "Afficher les sous-titres sur scène", + "speakers": "Haut-parleurs", + "startAudioMuted": "Tous les participants débutent en sourdine", + "startReactionsMuted": "Tout le monde commence avec les réactions sonores bloquées", + "startVideoMuted": "Tous les participants débutent masqués", + "talkWhileMuted": "vous parlez en étant muet", + "title": "Paramètres", + "video": "Vidéo" + }, + "settingsView": { + "advanced": "Avancé", + "alertCancel": "Annuler", + "alertOk": "OK", + "alertTitle": "Alerte", + "alertURLText": "L'URL de serveur saisi n'est pas valide", + "apply": "Appliquer", + "buildInfoSection": "Information de version", + "conferenceSection": "Réunion", + "disableCallIntegration": "Désactiver l'intégration d'appels native", + "disableCrashReporting": "Désactiver les rapports de plantage", + "disableCrashReportingWarning": "Etes-vous certain de vouloir désactiver les rapports de plantage ? Le paramètre sera effectif après le redémarrage de l'application.", + "disableP2P": "Désactiver le mode pair à pair", + "displayName": "Nom d'affichage", + "displayNamePlaceholderText": "Ex : Jean Dupond", + "email": "Courriel", + "emailPlaceholderText": "email@example..com", + "gavatarMessage": "Si votre email est associé à un compte Gravatar, nous allons l’utiliser pour afficher votre image de profil.", + "goTo": "Aller à", + "header": "Paramètres", + "help": "Aide", + "links": "Liens", + "privacy": "Confidentialité", + "profileSection": "Profil", + "sdkVersion": "Version du SDK", + "serverURL": "URL du serveur", + "showAdvanced": "Afficher les paramètres avancés", + "startCarModeInLowBandwidthMode": "Commencer le mode voiture en mode bande passante réduite", + "startWithAudioMuted": "Démarrer avec l'audio en sourdine", + "startWithVideoMuted": "Démarrer avec la vidéo en sourdine", + "terms": "Conditions d’utilisations", + "version": "Version" + }, + "share": { + "dialInfoText": "\n\n=====\n\nVoulez-vous appeler depuis votre téléphone ?\n\n{{defaultDialInNumber}}Voici la liste des numéros d'appels pour cette réunion :\n{{dialInfoPageUrl}}", + "mainText": "Cliquez sur ce lien pour rejoindre la réunion :\n{{roomUrl}}" + }, + "speaker": "Intervenant", + "speakerStats": { + "angry": "En colère", + "disgusted": "Dégoûté", + "displayEmotions": "Afficher réactions", + "fearful": "Effrayé", + "happy": "Content", + "hours": "{{count}} h", + "labelTooltip": "Nombre de participants : {{count}}", + "minutes": "{{count}} min", + "name": "Nom", + "neutral": "Neutre", + "sad": "Triste", + "search": "Recherche", + "searchDescription": "Commencez à taper pour filtrer les participants", + "searchHint": "Recherche des participants", + "seconds": "{{count}} s", + "speakerStats": "Statistiques d'intervenant", + "speakerTime": "Temps d'intervention", + "surprised": "Surpris" + }, + "startupoverlay": { + "genericTitle": "La réunion a besoin d'utiliser votre microphone et votre caméra.", + "policyText": " ", + "title": "{{app}} doit utiliser votre micro et votre caméra." + }, + "suspendedoverlay": { + "rejoinKeyTitle": "Rejoindre à nouveau", + "text": "Appuyez sur le bouton Rejoindre pour vous reconnecter.", + "title": "Votre appel vidéo a été interrompu parce que cet ordinateur est tombé en veille." + }, + "termsView": { + "title": "Conditions d'utilisation" + }, + "toggleTopPanelLabel": "Basculer le panneau supérieur", + "toolbar": { + "Settings": "Paramètres", + "accessibilityLabel": { + "Settings": "Basculement des paramètres", + "audioOnly": "Basculement du mode audio uniquement", + "audioRoute": "Sélectionner le dispositif audio", + "boo": "Bou", + "breakoutRooms": "Rejoindre / quitter une salle annexe", + "callQuality": "Gestion de la qualité d'appel", + "carmode": "Mode voiture", + "cc": "Basculement des sous-titres", + "chat": "Basculement de la fenêtre de clavardage", + "clap": "Applaudir", + "closeChat": "Fermer la discussion instantanée", + "closeMoreActions": "Fermer le menu plus d'actions", + "closeParticipantsPane": "Fermer le panneau des participants", + "closedCaptions": "Sous-titres", + "collapse": "Plier", + "document": "Basculement du document partagé", + "documentClose": "Fermer le document partagé", + "documentOpen": "Ouvrir le document partagé", + "download": "", + "embedMeeting": "Intégrer la réunion", + "endConference": "Terminer la réunion pour tout le monde", + "enterFullScreen": "Passer en mode plein écran", + "enterTileView": "Passer en vue mosaïque", + "exitFullScreen": "Quitter le mode plein écran", + "exitTileView": "Quitter la vue mosaïque", + "expand": "Développer", + "feedback": "Laisser un commentaire", + "fullScreen": "Basculement de l'affichage plein écran", + "giphy": "Activer/désactiver le menu GIPHY", + "grantModerator": "donner des droits de modérateur", + "hangup": "Quitter l'appel", + "heading": "Barre d'outils", + "help": "", + "hideWhiteboard": "Masquer le tableau blanc", + "invite": "Inviter des personnes", + "kick": "Expulser le participant", + "laugh": "Rire", + "leaveConference": "Quitter la réunion", + "like": "Approuver", + "linkToSalesforce": "Lien à Salesforce", + "lobbyButton": "Activer / Désactiver le mode salle d'attente", + "localRecording": "Basculement des commandes d'enregistrement local", + "lockRoom": "Basculement du mot de passe de la réunion", + "love": "Cœur", + "lowerHand": "Baisser la main", + "moreActions": "Basculement du menu d'actions supplémentaires", + "moreActionsMenu": "Menu d'actions supplémentaires", + "moreOptions": "Voir plus d'options", + "mute": "Basculement de la sourdine", + "muteEveryone": "Couper le micro de tout le monde", + "muteEveryoneElse": "Couper le micro de tous les autres", + "muteEveryoneElsesVideoStream": "Couper la caméra de tous les autres", + "muteEveryonesVideoStream": "Couper la caméra de tout le monde", + "muteGUMPending": "Connection de votre microphone", + "noiseSuppression": "Suppression du bruit", + "openChat": "Ouvrir le chat", + "participants": "Participants", + "pip": "Basculement du mode image dans l'image", + "privateMessage": "", + "profile": "Modifier votre profil", + "raiseHand": "Basculement de la main levée", + "react": "Réactions aux messages", + "reactions": "Réactions", + "reactionsMenu": "Ouvrir / fermer le menu réactions", + "recording": "Basculement de l'enregistrement", + "remoteMute": "Mettre le participant en sourdine", + "remoteVideoMute": "Couper la caméra du participant", + "security": "Options de sécurité", + "selectBackground": "Selectionner un arrière-plan", + "selfView": "Afficher votre vidéo", + "shareRoom": "Inviter quelqu'un", + "shareYourScreen": "Basculement du partage d'écran", + "shareaudio": "Partager l'audio", + "sharedvideo": "Basculement du partage de vidéo", + "shortcuts": "Basculement des raccourcis", + "show": "Afficher en premier plan", + "showWhiteboard": "Afficher le tableux blanc", + "silence": "Silence", + "speakerStats": "Basculement des statistiques d'intervenant", + "stopScreenSharing": "Arrêter le partage d'écran", + "stopSharedVideo": "Arrêter la vidéo partagée", + "surprised": "Surpris", + "tileView": "Basculement de l'affichage mosaïque", + "toggleCamera": "Basculement de la caméra", + "toggleFilmstrip": "Afficher ou masquer les vignettes vidéo", + "unmute": "Rétablir le son", + "videoblur": "Alterner le brouillage vidéo", + "videomute": "Basculement de la sourdine vidéo", + "videomuteGUMPending": "Connexion de votre caméra", + "videounmute": "Démarrer la vidéo" + }, + "addPeople": "Ajouter des personnes à votre appel", + "advancedAudioSettings": { + "aec": { + "label": "Suppression d'écho acoustique" + }, + "agc": { + "label": "Contrôle automatique du gain" + }, + "ns": { + "label": "Suppression de bruit" + }, + "stereo": { + "label": "Stéréo" + } + }, + "audioOnlyOff": "Désactiver le mode bande passante faible", + "audioOnlyOn": "Activer le mode bande passante faible", + "audioRoute": "Sélectionner le dispositif audio", + "audioSettings": "Paramètres audio", + "authenticate": "Authentification", + "boo": "Huer", + "callQuality": "Gestion de la qualité d'appel", + "chat": "Ouvrir / Fermer le clavardage", + "clap": "Applaudir", + "closeChat": "Fermer le clavardage", + "closeParticipantsPane": "Fermer le panneau des participants", + "closeReactionsMenu": "Fermer le menu réactions", + "closedCaptions": "Sous-titres", + "disableNoiseSuppression": "Arrêter la suppression du bruit", + "disableReactionSounds": "Vous pouvez interdire les réactions sonores à cette réunion", + "documentClose": "Fermer le document partagé", + "documentOpen": "Ouvrir le document partagé", + "download": "Télécharger nos applications", + "e2ee": "Chiffrement de Bout-en-Bout", + "embedMeeting": "Intégrer la réunion", + "enableNoiseSuppression": "Activer la suppression du bruit", + "endConference": "Terminer la réunion pour tout le monde", + "enterFullScreen": "Afficher le mode plein écran", + "enterTileView": "Passer à l'affichage mosaïque", + "exitFullScreen": "Quitter le mode plein écran", + "exitTileView": "Quitter l'affichage mosaïque", + "feedback": "Laisser un commentaire", + "giphy": "Activer/désactiver le menu GIPHY", + "hangup": "Quitter", + "help": "Aide", + "hideWhiteboard": "Masquer le tableau blanc", + "invite": "Inviter des personnes", + "joinBreakoutRoom": "Rejoindre salle annexe", + "laugh": "Rire", + "leaveBreakoutRoom": "Quitter salle annexe", + "leaveConference": "Quitter la réunion", + "like": "Approuver", + "linkToSalesforce": "Lien à Salesforce", + "lobbyButtonDisable": "Désactiver le mode salle d'attente / contrôle des participant(e)s", + "lobbyButtonEnable": "Activer le mode salle d'attente / contrôle des participant(e)s", + "login": "Connexion", + "logout": "Déconnexion", + "love": "Cœur", + "lowerYourHand": "Abaisser votre main", + "moreActions": "Plus d'actions", + "moreOptions": "Plus d'options", + "mute": "Activer / Réactiver le son", + "muteEveryone": "Couper le micro à tout le monde", + "muteEveryonesVideo": "Couper la caméra de tout le monde", + "muteGUMPending": "Connection de votre microphone", + "noAudioSignalDesc": "Si vous n'avez pas délibérément coupé le son des paramètres du système ou du matériel, envisagez de changer le périphérique.", + "noAudioSignalDescSuggestion": "Si vous n'avez pas délibérément coupé le son des paramètres du système ou du matériel, pensez à utiliser le périphérique suivant :", + "noAudioSignalDialInDesc": "Vous pouvez également appeler en utilisant :", + "noAudioSignalDialInLinkDesc": "Numéros d'appel", + "noAudioSignalTitle": "Il n'y a pas d'entrée provenant de votre micro !", + "noiseSuppression": "Suppression du bruit", + "noisyAudioInputDesc": "Il semble que votre microphone soit bruyant, veuillez le couper ou changer de périphérique.", + "noisyAudioInputTitle": "Votre microphone semble être bruyant !", + "openChat": "Ouvrir le clavardage", + "openReactionsMenu": "Ouvrir le menu Réactions", + "participants": "Participants", + "pip": "Passer en mode image dans l'image", + "privateMessage": "Envoyer un message privé", + "profile": "Modifier votre profil", + "raiseHand": "Lever / Abaisser votre main", + "raiseYourHand": "Lever votre main", + "reactionBoo": "Envoyer réaction huer", + "reactionClap": "Envoyer réaction applaudir", + "reactionHeart": "Envoyer une réaction en forme de cœur", + "reactionLaugh": "Envoyer réaction rire", + "reactionLike": "Envoyer réaction approuver", + "reactionLove": "Envoyer une réaction d'amour", + "reactionSilence": "Envoyer réaction silence", + "reactionSurprised": "Envoyer réaction surprise", + "reactions": "Reactions", + "security": "Options de sécurité", + "selectBackground": "Sélectionner un arrière-plan", + "shareRoom": "Inviter quelqu'un", + "shareaudio": "Partager l'audio", + "sharedvideo": "Partager une vidéo", + "shortcuts": "Voir les raccourcis", + "showWhiteboard": "Afficher le tableau blanc", + "silence": "Silence", + "speakerStats": "Statistiques d'intervenant", + "startScreenSharing": "Démarrer le partage d'écran", + "startSubtitles": "Activer les sous-titres", + "stopAudioSharing": "Arrêter le partage son", + "stopScreenSharing": "Arrêter le partage d'écran", + "stopSharedVideo": "Arrêter la vidéo", + "stopSubtitles": "Désactiver les sous-titres", + "surprised": "Surpris", + "talkWhileMutedPopup": "Vous essayez de parler? Vous êtes en sourdine.", + "tileViewToggle": "Basculement de l'affichage mosaïque", + "toggleCamera": "Basculement de la caméra", + "unmute": "Rétablir le son", + "videoSettings": "Paramètres vidéo", + "videomute": "Démarrer / Arrêter la caméra", + "videomuteGUMPending": "Connexion de votre caméra", + "videounmute": "Démarrer la caméra" + }, + "transcribing": { + "ccButtonTooltip": "Activer / Désactiver les sous-titres", + "expandedLabel": "La transcription est actuellement activée", + "failed": "La transcription a échoué", + "labelTooltip": "La transcription de la réunion est en cours", + "labelTooltipExtra": "De plus, une transcription sera disponible plus tard.", + "openClosedCaptions": "Ouvrir les sous-titres", + "original": "Original", + "sourceLanguageDesc": "Actuellement, la langue de la réunion est sélectionnée à {{sourceLanguage}}.
Vous pouvez la changer à partir de ", + "sourceLanguageHere": "ici", + "start": "Activer l'affichage des sous-titres", + "stop": "Désactiver l'affichage des sous-titres", + "subtitles": "sous-titres", + "subtitlesOff": "off", + "tr": "PI", + "translateTo": "Traduire vers" + }, + "unpinParticipant": "Désépingler - {{participantName}}", + "userMedia": { + "grantPermissions": "Veuillez accorder l'autorisation d'utiliser votre caméra et votre micro." + }, + "videoSIPGW": { + "busy": "Libération des ressources en cours. Veuillez réessayer dans quelques minutes.", + "busyTitle": "Le service de Salle est actuellement occupé.", + "errorAlreadyInvited": "{{displayName}} a déjà été invité", + "errorInvite": "La réunion n'est pas encore configurée. Veuillez réessayer plus tard.", + "errorInviteFailed": "Nous nous efforçons de régler ce problème. Veuillez réessayer plus tard.", + "errorInviteFailedTitle": "L'invitation de {{displayName}} a échoué", + "errorInviteTitle": "Erreur lors de l'invitation de la salle", + "pending": "{{displayName}} a été invité" + }, + "videoStatus": { + "adjustFor": "Ajuster pour:", + "audioOnly": "AUD", + "audioOnlyExpanded": "Vous êtes en mode bande passante faible. Dans ce mode, vous ne recevrez que le partage audio et le partage d’écran.", + "bestPerformance": "la meilleure performance", + "callQuality": "Qualité d'appel", + "hd": "HD", + "hdTooltip": "Visionnement de vidéo en haute définition", + "highDefinition": "Haute définition", + "highestQuality": "Meilleure qualité", + "labelTooiltipNoVideo": "Aucune vidéo", + "labelTooltipAudioOnly": "Mode bande passante faible activé", + "ld": "LD", + "ldTooltip": "Visionnement de vidéo en basse définition", + "lowDefinition": "Basse définition", + "performanceSettings": "Paramètres de performance", + "recording": "Enregistrement en cours", + "sd": "SD", + "sdTooltip": "Visionnement de vidéo en définition standard", + "standardDefinition": "Définition standard", + "streaming": "Diffusion en direct en cours" + }, + "videothumbnail": { + "connectionInfo": "Informations de la connexion", + "demote": "Déplacer en visiteur", + "domute": "Discrétion", + "domuteDesktop": "Arrêter le partage d'écran", + "domuteDesktopOfOthers": "Arrêter le partage d'écran de tous les autres", + "domuteOthers": "Couper le micro de tous les autres", + "domuteVideo": "Couper la caméra", + "domuteVideoOfOthers": "Couper la caméra des autres", + "flip": "Miroir", + "grantModerator": "Donner des droits de modérateur", + "hideSelfView": "Masquer l'affichage de votre propre vidéo", + "kick": "Exclure", + "mirrorVideo": "Inverser ma vidéo", + "moderator": "Modérateur", + "mute": "Le membre est en sourdine", + "muted": "Discrétion", + "pinToStage": "Garder affiché", + "remoteControl": "Contrôle à distance", + "screenSharing": "Cette personne partage son écran", + "show": "Afficher en premier plan", + "showSelfView": "Afficher votre propre vidéo", + "unpinFromStage": "Ne plus garder affiché", + "verify": "Vérifier le participant", + "videoMuted": "Caméra coupée", + "videomute": "Le membre a arrêté la caméra" + }, + "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Arrière-plan actuel: {{background}}", + "selectBackground": "Sélectionner un arrière-plan" + }, + "addBackground": "Ajouter un arrière-plan", + "apply": "Appliquer", + "backgroundEffectError": "Erreur dans l'application de l'effet d'arrière-plan.", + "blur": "Flou", + "deleteImage": "Supprimer l'image", + "desktopShare": "Partage de bureau", + "desktopShareError": "Impossible de créer le partage de bureau", + "image1": "Plage", + "image2": "Mur blanc neutre", + "image3": "Pièce vide blanche", + "image4": "Lampadaire noir", + "image5": "Montagne", + "image6": "Forêt ", + "image7": "Lever de soleil", + "none": "Rien", + "pleaseWait": "Veuillez patienter…", + "removeBackground": "Supprimer l'arrière-plan", + "slightBlur": "Léger flou", + "title": "Arrière-plan virtuel", + "uploadedImage": "Image téléversée {{index}}", + "webAssemblyWarning": "WebAssembly non supporté", + "webAssemblyWarningDescription": "WebAssembly invalidé ou non supporté par ce navigateur" + }, + "visitors": { + "chatIndicator": "(visiteur)", + "joinMeeting": { + "description": "Vous êtes actuellement un observateur dans cette réunion.", + "raiseHand": "Levez la main", + "title": "Rejoindre la réunion", + "wishToSpeak": "Si vous souhaitez prendre la parole, veuillez lever la main ci-dessous et attendre l'approbation du modérateur." + }, + "labelTooltip": "Nombre de Visiteurs", + "notification": { + "demoteDescription": "Envoyé ici par {{actor}}, levez la main pour participer", + "noMainParticipantsDescription": "Un participant doit démarrer la réunion. Veuillez réessayer dans un moment.", + "noMainParticipantsTitle": "Cette réunion n'a pas encore commencé.", + "noVisitorLobby": "Vous ne pouvez pas rejoindre tant qu'une salle d'attente est activée pour la réunion.", + "notAllowedPromotion": "Un participant doit d'abord autoriser votre demande.", + "requestToJoin": "Main levée", + "requestToJoinDescription": "Votre demande a été envoyée aux modérateurs. Patientez !", + "title": "Vous êtes visiteur dans cette réunion" + }, + "waitingMessage": "Vous rejoindrez la réunion dès qu'elle sera en direct !" + }, + "volumeSlider": "Curseur de volume", + "welcomepage": { + "accessibilityLabel": { + "join": "Toucher pour rejoindre", + "roomname": "Entrer le nom de la salle" + }, + "addMeetingName": "Ajouter un nom de réunion", + "appDescription": "Profitez de la conversation vidéo avec toute votre équipe. Allez-y, invitez tous ceux que vous connaissez. {{app}} est une solution 100 % libre de réunion vidéo entièrement chiffrée que vous pouvez utiliser en tout temps et gratuitement, sans avoir besoin de compte.", + "audioVideoSwitch": { + "audio": "Voix", + "video": "Vidéo" + }, + "calendar": "Calendrier", + "connectCalendarButton": "Connecter votre agenda", + "connectCalendarText": "Connectez-vous à votre calendrier pour afficher toutes les réunions {{app}}. Ajoutez également les réunions de {{provider}} à votre calendrier et démarrez-les d'un simple clic.", + "enterRoomTitle": "Démarrer une nouvelle réunion", + "getHelp": "Obtenir de l'aide", + "go": "Aller", + "goSmall": "Aller", + "headerSubtitle": "Réunions sécurisées et de haute qualité", + "headerTitle": "Jitsi Meet", + "info": "Ret. arr.", + "jitsiOnMobile": "Jitsi sur mobile – télécharger notre application et démarrez des réunions de n'import où", + "join": "CRÉER / REJOINDRE", + "logo": { + "calendar": "Logo Calendar", + "desktopPreviewThumbnail": "Miniature d'aperçu du bureau", + "googleLogo": "Logo Google", + "logoDeepLinking": "Logo Jitsi meet", + "microsoftLogo": "Logo Microsoft", + "policyLogo": "Logo de la politique" + }, + "meetingsAccessibilityLabel": "Réunions", + "mobileDownLoadLinkAndroid": "Télécharger l'application mobile sur Android", + "mobileDownLoadLinkFDroid": "Télécharger l'application mobile sur F-Droid", + "mobileDownLoadLinkIos": "Télécharger l'application mobile sur iOS", + "moderatedMessage": "Ou réserver une URL de réunion à l'avance et où vous êtes le seul modérateur.", + "privacy": "Confidentialité", + "recentList": "Récent", + "recentListDelete": "Supprimer", + "recentListEmpty": "Votre liste récente est actuellement vide. Clavardez avec votre équipe et vous y trouverez toutes vos réunions récentes.", + "recentMeetings": "Vos réunions récentes", + "reducedUIText": "Bienvenue sur {{app}}!", + "roomNameAllowedChars": "Le nom de la réunion ne doit contenir aucun de ces caractères : ?, &, :, ', \", %, #.", + "roomname": "Entrer le nom de la salle", + "roomnameHint": "Entrez le nom ou l'URL de la salle que vous voulez rejoindre. Vous pouvez inventer un nom, mais assurez-vous de le partager avec les participants de la réunion pour qu'ils utilisent le même nom.", + "sendFeedback": "Envoyer un commentaire", + "settings": "Paramètres", + "startMeeting": "Démarrer la réunion", + "terms": "Termes", + "title": "Réunion vidéo sécurisée, riche en fonctionnalités et entièrement gratuite", + "upcomingMeetings": "Vos réunions à venir" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Tableau blanc" + }, + "screenTitle": "Tableau blanc" + } +} diff --git a/lang/main-fr.json b/lang/main-fr.json index d89da6e581ee..cf7b23891ab6 100644 --- a/lang/main-fr.json +++ b/lang/main-fr.json @@ -22,7 +22,7 @@ "noResults": "Aucun résultat de recherche correspondant", "outlookEmail": "Outlook", "phoneNumbers": "Numéros de téléphone", - "searching": "Recherche...", + "searching": "Recherche…", "shareInvite": "Partager l'invitation à la réunion", "shareLink": "Partager le lien de la réunion pour inviter d'autres personnes", "shareStream": "Partager le lien de diffusion en direct", @@ -74,7 +74,7 @@ "mainRoom": "Salle principale", "notifications": { "joined": "Entrée en salle annexe \"{{name}}\"", - "joinedMainRoom": "Retour à la salle principalem", + "joinedMainRoom": "Retour à la salle principale", "joinedTitle": "Salles annexes" }, "showParticipantList": "Afficher la liste des participants", @@ -82,7 +82,7 @@ }, "calendarSync": { "addMeetingURL": "Ajouter un lien de conférence", - "confirmAddLink": "Voulez-vous ajouter un lien Jitsi à cet événement ?", + "confirmAddLink": "Voulez-vous ajouter un lien Jitsi à cet événement?", "error": { "appConfiguration": "L'intégration du calendrier n'est pas correctement configurée.", "generic": "Une erreur s'est produite. Veuillez vérifier les paramètres de votre calendrier ou tenter de l'actualiser.", @@ -109,42 +109,58 @@ } }, "chat": { + "disabled": "L'envoi de messages de chat est désactivé.", "enter": "Entrez dans le salon", "error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}", + "everyone": "Tout le monde", "fieldPlaceHolder": "Tapez votre message ici", + "guestsChatIndicator": "(invité)", "lobbyChatMessageTo": "Message de salle d'attente à {{recipient}}", "message": "Message", "messageAccessibleTitle": "{{user}} dit: ", "messageAccessibleTitleMe": "Je dis: ", "messageTo": "Message privé à {{recipient}}", - "messagebox": "Saisissez un message", + "messagebox": "Envoyer un message", "newMessages": "Nouveaux messages", "nickname": { "popover": "Choisissez un pseudonyme", "title": "Entrez un pseudonyme pour utiliser le chat", - "titleWithPolls": "Entrez un pseudonyme pour utiliser le chat et les sondages" + "titleWithCC": "Entrez un pseudonyme pour utiliser le chat et les sous-titres", + "titleWithPolls": "Entrez un pseudonyme pour utiliser le chat et les sondages", + "titleWithPollsAndCC": "Entrez un pseudonyme pour utiliser le chat, les sondages et les sous-titres", + "titleWithPollsAndCCAndFileSharing": "Entrez un pseudonyme pour utiliser le chat, les sondages, les sous-titres et les fichiers" }, "noMessagesMessage": "Il n'y a pas encore de messages dans cette réunion. Démarrez une conversation ici !", "privateNotice": "Message privé à {{recipient}}", "sendButton": "Envoyer", "smileysPanel": "Panneaux des Émojis", + "systemDisplayName": "Système", "tabs": { "chat": "Chat", + "closedCaptions": "ST", + "fileSharing": "Fichiers", "polls": "Sondages" }, "title": "Chat", + "titleWithCC": "ST", + "titleWithFeatures": "Chat et", + "titleWithFileSharing": "Fichiers", "titleWithPolls": "Chat et Sondages", "you": "vous" }, "chromeExtensionBanner": { "buttonText": "Installer l'extension Chrome", - "buttonTextEdge": "Installer l’extension Edge", + "buttonTextEdge": "Installer l'extension Edge", "close": "Fermer", "dontShowAgain": "Ne plus m'afficher ceci", "installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365" }, + "closedCaptionsTab": { + "emptyState": "Le contenu des sous-titres sera disponible une fois qu'un modérateur l'aura démarré", + "startClosedCaptionsButton": "Démarrer les sous-titres" + }, "connectingOverlay": { - "joiningRoom": "Connexion à la réunion ..." + "joiningRoom": "Connexion à la réunion…" }, "connection": { "ATTACHED": "Attachée", @@ -156,9 +172,9 @@ "DISCONNECTED": "Déconnecté", "DISCONNECTING": "Déconnexion en cours", "ERROR": "Erreur", - "FETCH_SESSION_ID": "Obtention d'un identifiant de session ...", + "FETCH_SESSION_ID": "Obtention d'un identifiant de session…", "GET_SESSION_ID_ERROR": "Obtenir une erreur d'identifiant de session : {{code}}", - "GOT_SESSION_ID": "Obtention d'un identifiant de session ... Terminée", + "GOT_SESSION_ID": "Obtention d'un identifiant de session… Terminée", "LOW_BANDWIDTH": "La vidéo de {{displayName}} a été coupée pour économiser de la bande passante" }, "connectionindicator": { @@ -219,10 +235,12 @@ "joinInBrowser": "Rejoindre depuis le navigateur", "launchMeetingLabel": "Comment voulez-vous rejoindre la réunion ?", "launchWebButton": "Lancer dans le navigateur", + "noDesktopApp": "Vous n'avez pas l'application ?", "noMobileApp": "Vous n’avez pas l’application ?", + "or": "OU", "termsAndConditions": "En continuant, vous acceptez nos conditions générales d’utilisation.", - "title": "Lancement de votre réunion dans {{app}} en cours ...", - "titleNew": "Lancement de votre réunion ...", + "title": "Lancement de votre réunion dans {{app}} en cours…", + "titleNew": "Lancement de votre réunion…", "tryAgainButton": "Réessayez sur le bureau", "unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté." }, @@ -260,9 +278,11 @@ "Remove": "Supprimer", "Share": "Partager", "Submit": "Soumettre", - "WaitForHostMsg": "La conférence n'a pas encore commencé. Si vous en êtes l'hôte, veuillez vous authentifier. Sinon, veuillez attendre son arrivée.", + "Understand": "Je comprends, gardez-moi en sourdine pour l'instant", + "UnderstandAndUnmute": "Je comprends, veuillez me réactiver s'il vous plaît", + "WaitForHostNoAuthMsg": "La conférence n'a pas encore commencé car aucun modérateur n'est encore arrivé. Veuillez patienter.", "WaitingForHostButton": "Attendre l'hôte", - "WaitingForHostTitle": "En attente de l'hôte ...", + "WaitingForHostTitle": "En attente de l'hôte…", "Yes": "Oui", "accessibilityLabel": { "Cancel": "Annuler (quiter la popup)", @@ -281,6 +301,12 @@ "alreadySharedVideoTitle": "Une seule vidéo partagée est autorisée à la fois", "applicationWindow": "Fenêtre d'application", "authenticationRequired": "Authentification requise", + "cameraCaptureDialog": { + "description": "Prendre et envoyer une photo en utilisant votre caméra mobile", + "ok": "Ouvrir la caméra", + "reject": "Pas maintenant", + "title": "Prendre une photo" + }, "cameraConstraintFailedError": "Votre caméra ne satisfait pas certaines des contraintes nécessaires.", "cameraNotFoundError": "La caméra n'a pas été trouvée.", "cameraNotSendingData": "Impossible d'accéder à votre caméra. Veuillez sélectionner un autre périphérique dans les paramètres ou rafraîchir la page.", @@ -290,11 +316,12 @@ "cameraUnknownError": "Vous ne pouvez pas utiliser la caméra pour une raison inconnue.", "cameraUnsupportedResolutionError": "Votre appareil ne prend pas en charge la résolution vidéo requise.", "close": "Fermer", - "conferenceDisconnectMsg": "Veuillez vérifier votre connexion réseau. Reconnexion dans {{seconds}} sec ...", + "conferenceDisconnectMsg": "Veuillez vérifier votre connexion réseau. Reconnexion dans {{seconds}} sec…", "conferenceDisconnectTitle": "Vous avez été déconnecté.", - "conferenceReloadMsg": "On essaie d'arranger ça. Reconnexion dans {{seconds}} secondes ...", + "conferenceReloadMsg": "On essaie d'arranger ça. Reconnexion dans {{seconds}} secondes…", "conferenceReloadTitle": "Malheureusement, un problème est survenu", "confirm": "Confirmer", + "confirmBack": "Retour", "confirmNo": "Non", "confirmYes": "Oui", "connectError": "Oups ! Un problème est survenu et la connexion à la conférence est impossible.", @@ -303,6 +330,8 @@ "contactSupport": "Contacter le support", "copied": "Copié", "copy": "Copier", + "demoteParticipantDialog": "Êtes-vous sûr de vouloir déplacer ce participant en visiteur ?", + "demoteParticipantTitle": "Déplacer en visiteur", "dismiss": "Rejeter", "displayNameRequired": "Bonjour ! Quel est votre nom ?", "done": "Terminé", @@ -314,6 +343,7 @@ "embedMeeting": "Intégrer la réunion", "enterDisplayName": "Merci de saisir votre nom ici", "error": "Erreur", + "errorRoomCreationRestriction": "Vous avez essayé de rejoindre trop rapidement, veuillez revenir dans un moment.", "gracefulShutdown": "Notre service est actuellement en maintenance. Veuillez réessayer plus tard.", "grantModeratorDialog": "Êtes-vous sûr de vouloir rendre ce participant modérateur ?", "grantModeratorTitle": "Nommer modérateur", @@ -327,7 +357,9 @@ "kickParticipantButton": "Expulser", "kickParticipantDialog": "Êtes-vous sûr(e) de vouloir expulser ce participant ?", "kickParticipantTitle": "Expulser ce participant ?", + "kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion", "kickTitle": "Oups ! vous avez été expulsé(e) par {{participantDisplayName}}", + "learnMore": "en savoir plus", "linkMeeting": "Relier la conférence", "linkMeetingTitle": "Relier la conférence à Salesforce", "liveStreaming": "Direct", @@ -350,22 +382,34 @@ "micTimeoutError": "Impossible de démarrer la source audio. Délai dépassé!", "micUnknownError": "Vous ne pouvez pas utiliser le microphone pour une raison inconnue.", "moderationAudioLabel": "Autoriser les participants à réactiver leur micro", + "moderationDesktopLabel": "Autoriser les non-modérateurs à partager leur écran", "moderationVideoLabel": "Autoriser les participants à démarrer leur vidéo", "muteEveryoneDialog": "Êtes-vous sûr de vouloir couper les micros de tout le monde ? Vous ne pourrez plus réactiver leur micro, mais ils pourront l'activer par eux-mêmes à tout moment.", "muteEveryoneDialogModerationOn": "Les participants peuvent demander à parler n'importe quand", "muteEveryoneElseDialog": "Une fois leur micro coupé, vous ne pourrez plus le réactiver, mais ils pourront l'activer par eux-mêmes à tout moment.", "muteEveryoneElseTitle": "Couper le micro de tout le monde sauf de {{whom}} ?", + "muteEveryoneElsesDesktopDialog": "Une fois le partage arrêté, vous ne pourrez pas le redémarrer, mais ils peuvent le faire à tout moment.", + "muteEveryoneElsesDesktopTitle": "Arrêter le partage d'écran de tout le monde sauf {{whom}} ?", "muteEveryoneElsesVideoDialog": "Une fois la caméra coupée, vous ne pourrez plus la rallumer, mais ils peuvent la rallumer à tout moment.", "muteEveryoneElsesVideoTitle": "Couper la vidéo de tout le monde sauf {{whom}}?", "muteEveryoneSelf": "vous", "muteEveryoneStartMuted": "Tout le monde démarre avec le micro coupé", "muteEveryoneTitle": "Couper le micro de tout le monde ?", + "muteEveryonesDesktopDialog": "Les participants peuvent partager leur écran à tout moment.", + "muteEveryonesDesktopDialogModerationOn": "Les participants peuvent envoyer une demande pour partager leur écran à tout moment.", + "muteEveryonesDesktopTitle": "Arrêter le partage d'écran de tout le monde ?", "muteEveryonesVideoDialog": "Êtes-vous sûr de vouloir couper la caméra de tout le monde? Vous ne pourrez pas la réactiver, mais ils peuvent la remettre à tout moment.", "muteEveryonesVideoDialogModerationOn": "Les participants peuvent demander à activer leur caméra n'importe quand.", "muteEveryonesVideoDialogOk": "Désactiver", "muteEveryonesVideoTitle": "Couper la caméra de tout le monde?", "muteParticipantBody": "Vous ne pourrez plus réactiver son micro, mais il pourra l'activer par lui-même à tout moment.", "muteParticipantButton": "Couper le micro", + "muteParticipantsDesktopBody": "Vous ne pourrez pas démarrer leur partage d'écran, mais ils peuvent le faire à tout moment.", + "muteParticipantsDesktopBodyModerationOn": "Vous ne pourrez pas démarrer leur partage d'écran et eux non plus.", + "muteParticipantsDesktopButton": "Arrêter le partage d'écran", + "muteParticipantsDesktopDialog": "Êtes-vous sûr de vouloir désactiver le partage d'écran de ce participant ? Vous ne pourrez pas le redémarrer, mais ils peuvent le faire à tout moment.", + "muteParticipantsDesktopDialogModerationOn": "Êtes-vous sûr de vouloir désactiver le partage d'écran de ce participant ? Vous ne pourrez pas réactiver l'écran et eux non plus.", + "muteParticipantsDesktopTitle": "Désactiver le partage d'écran de ce participant ?", "muteParticipantsVideoBody": "Vous ne pourrez pas rallumer la caméra, mais ils peuvent la rallumer à tout moment.", "muteParticipantsVideoBodyModerationOn": "Ni vous ni le participant ne pourront rallumer la caméra.", "muteParticipantsVideoButton": "Couper la caméra", @@ -385,6 +429,10 @@ "recentlyUsedObjects": "Vos objets récemment utilisés", "recording": "Enregistrement", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct", + "recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA{{learnMore}}. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.", + "recordingInProgressDescriptionFirstHalf": "Cette réunion est en cours d'enregistrement et d'analyse par IA", + "recordingInProgressDescriptionSecondHalf": ". Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.", + "recordingInProgressTitle": "Enregistrement en cours", "rejoinNow": "Rejoindre maintenant", "remoteControlAllowedMessage": "{{user}} a accepté votre demande de prise en main à distance !", "remoteControlDeniedMessage": "{{user}} a refusé votre demande de prise en main à distance !", @@ -424,7 +472,7 @@ "shareAudioAltText": "Pour partager le contenu voulu, naviguer vers \"Onglet du Navigateur\", sélectionner le contenu, activer le bouton \"partager l’audio\" et enfin cliquer sur le bouton \"partager\"", "shareAudioTitle": "Comment partager le son", "shareAudioWarningD1": "vous devez cesser le partage d'écran avant de partager votre son.", - "shareAudioWarningD2": "viys devez partager votre écran à nouveau et cocher l'ootion \"Partager l'audio\".", + "shareAudioWarningD2": "vous devez partager votre écran à nouveau et cocher l'option \"Partager l'audio\".", "shareAudioWarningH1": "Si vous voulez partager uniquement de l'audio:", "shareAudioWarningTitle": "Vous devez cesser de partager l'écran avant de partager l'audio", "shareMediaWarningGenericH2": "Si vous voulez partager votre écran et l'audio", @@ -432,7 +480,10 @@ "shareScreenWarningD2": "vous devez arrêter le partage d'audio, démarrer le partage d'écran et cocher l'option \"Partager l'audio\".", "shareScreenWarningH1": "Si vous voulez partager uniquement votre écran:", "shareScreenWarningTitle": "Vous devez cesser de partager votre audio avant de partager votre écran", + "shareVideoConfirmPlay": "Vous êtes sur le point d'ouvrir un site web externe. Voulez-vous continuer ?", + "shareVideoConfirmPlayTitle": "{{name}} a partagé une vidéo avec vous.", "shareVideoLinkError": "Veuillez renseigner un lien de diffusion vidéo fonctionnel.", + "shareVideoLinkStopped": "La vidéo de {{name}} a été arrêtée.", "shareVideoTitle": "Partager une vidéo", "shareYourScreen": "Partager votre écran", "shareYourScreenDisabled": "Le partage d'écran est désactivé.", @@ -511,6 +562,23 @@ "veryBad": "Très mauvais", "veryGood": "Très bon" }, + "fileSharing": { + "downloadFailedDescription": "Veuillez réessayer.", + "downloadFailedTitle": "Échec du téléchargement", + "downloadFile": "Télécharger", + "downloadStarted": "Téléchargement de fichier démarré", + "dragAndDrop": "Glissez et déposez des fichiers ici ou n'importe où sur l'écran", + "fileAlreadyUploaded": "Le fichier a déjà été téléchargé vers cette réunion.", + "fileTooLargeDescription": "Veuillez vous assurer que le fichier ne dépasse pas {{ maxFileSize }}.", + "fileTooLargeTitle": "Le fichier sélectionné est trop volumineux", + "fileUploadProgress": "Progression du téléchargement de fichier", + "fileUploadedSuccessfully": "Fichier téléchargé avec succès", + "removeFile": "Supprimer", + "removeFileSuccess": "Fichier supprimé avec succès", + "uploadFailedDescription": "Veuillez réessayer.", + "uploadFailedTitle": "Échec du téléchargement", + "uploadFile": "Partager un fichier" + }, "filmstrip": { "accessibilityLabel": { "heading": "Vignettes vidéos" @@ -558,6 +626,7 @@ "noNumbers": "Numéros non trouvés", "noPassword": "Aucun", "noRoom": "Aucune réunion n'a été spécifiée pour l'appel entrant.", + "noWhiteboard": "Impossible de charger le tableau blanc.", "numbers": "Numéros d'appel", "password": "$t(lockRoomPasswordUppercase) :", "reachedLimit": "Vous avez atteint la limite de votre abonnement.", @@ -565,7 +634,8 @@ "sipAudioOnly": "Adresse SIP en audio uniquement", "title": "Partager", "tooltip": "Partager le lien et les informations de connexion pour cette conférence", - "upgradeOptions": "Veuillez vérifier les options de mise à niveau" + "upgradeOptions": "Veuillez vérifier les options de mise à niveau", + "whiteboardError": "Erreur de chargement du tableau blanc. Veuillez réessayer plus tard." }, "inlineDialogFailure": { "msg": "Il y a eu un petit problème.", @@ -616,7 +686,7 @@ "errorLiveStreamNotEnabled": "La diffusion en direct n'est pas activée pour {{email}}. Merci de l'activer ou de vous connecter avec un compte où elle est déjà activée.", "expandedOff": "La diffusion en direct a été arrêtée", "expandedOn": "La conférence est en cours de diffusion sur YouTube.", - "expandedPending": "La diffusion en direct a commencé ...", + "expandedPending": "La diffusion en direct a commencé…", "failedToStart": "La diffusion n'a pas réussi à démarrer", "getStreamKeyManually": "Nous n'avons pas réussi à récupérer un flux de direct. Essayez d'obtenir votre clé de diffusion en direct sur YouTube.", "googlePrivacyPolicy": "Politique de confidentialité de Google", @@ -628,7 +698,8 @@ "offBy": "{{name}} a arrêté la diffusion en direct", "on": "En direct", "onBy": "{{name}} a démarré la diffusion en direct", - "pending": "Lancement du direct ...", + "pending": "Lancement du direct…", + "policyError": "Vous avez essayé de démarrer une diffusion en direct trop rapidement. Veuillez réessayer plus tard !", "serviceName": "Service de diffusion en direct", "sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.", "signIn": "Se connecter avec Google", @@ -658,10 +729,10 @@ "joinRejectedMessage": "Votre requête pour rejoindre une réunion a été refusée par un modérateur.", "joinRejectedTitle": "Demande d'accès rejetée.", "joinTitle": "Rejoindre une réunion", - "joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait ...", + "joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait…", "joiningMessage": "Vous allez rejoindre une réunion dès que quelqu'un aura accepté votre demande", - "joiningTitle": "Demander à rejoindre une réunion ...", - "joiningWithPasswordTitle": "Rejoindre avec mot de passe ...", + "joiningTitle": "Demander à rejoindre une réunion…", + "joiningWithPasswordTitle": "Rejoindre avec mot de passe…", "knockButton": "Demander à rejoindre", "knockTitle": "Quelqu'un souhaite rejoindre la réunion", "knockingParticipantList": "Liste des participants en attente", @@ -676,7 +747,8 @@ "notificationTitle": "Salle d'attente", "passwordJoinButton": "Rejoindre", "title": "Salle d'attente", - "toggleLabel": "Activer la salle d'attente" + "toggleLabel": "Activer la salle d'attente", + "waitForModerator": "La conférence n'a pas encore commencé car aucun modérateur n'est encore arrivé. Si vous souhaitez devenir modérateur, veuillez vous connecter. Sinon, veuillez attendre." }, "localRecording": { "clientState": { @@ -719,7 +791,10 @@ "me": "moi", "notify": { "OldElectronAPPTitle": "Faille de sécurité !", - "allowAction": "Permettre", + "allowAll": "Tout autoriser", + "allowAudio": "Autoriser l'audio", + "allowDesktop": "Autoriser le partage d'écran", + "allowVideo": "Autoriser la vidéo", "allowedUnmute": "Vous pouvez réactiver votre écran, votre caméra ou partager votre écran.", "audioUnmuteBlockedDescription": "Le rétablissement du son a été bloqué temporairement en raison de limites système.", "audioUnmuteBlockedTitle": "Rétablissement du son bloqué !", @@ -727,10 +802,15 @@ "connectedOneMember": "{{name}} a rejoint la réunion", "connectedThreePlusMembers": "{{name}} et {{count}} autres personnes ont rejoint la réunion", "connectedTwoMembers": "{{first}} et {{second}} ont rejoint la réunion", + "connectionFailed": "Connexion échouée. Veuillez réessayer plus tard !", "dataChannelClosed": "Qualité vidéo dégradée", "dataChannelClosedDescription": "Le canal de communication avec le Bridge a été interrompu, la qualité vidéo se trouve limitée à sa valeur la plus faible.", + "dataChannelClosedDescriptionWithAudio": "Le canal de pont est fermé, ce qui peut entraîner des perturbations de l'audio et de la vidéo.", + "dataChannelClosedWithAudio": "La qualité de l'audio et de la vidéo peut être altérée", + "desktopMutedRemotelyTitle": "Votre partage d'écran a été arrêté par {{participantDisplayName}}", "disabledIframe": "L'intégration Iframe est uniquement destinée à des démos, cet appel se terminera dans {{timeout}} minutes.", - "disabledIframeSecondary": "L'intégration Iframe de {{domaine}} est uniquement destinée à des démos, cet appel se terminera dans {{timeout}} minutes.", + "disabledIframeSecondaryNative": "L'intégration de {{domain}} est uniquement destinée aux fins de démonstration, cet appel se terminera dans {{timeout}} minutes.", + "disabledIframeSecondaryWeb": "L'intégration de {{domain}} est uniquement destinée aux fins de démonstration, cet appel se terminera dans {{timeout}} minutes. Veuillez utiliser Jitsi as a Service pour l'intégration en production !", "disconnected": "déconnecté", "displayNotifications": "Afficher les notifications pour", "dontRemindMe": "Ne pas me le rappeler", @@ -739,6 +819,9 @@ "gifsMenu": "GIPHY", "groupTitle": "Notifications", "hostAskedUnmute": "Le modérateur souhaite vous donner la parole", + "invalidTenant": "Tenant invalide", + "invalidTenantHyphenDescription": "Le tenant que vous utilisez est invalide (commence ou se termine par '-').", + "invalidTenantLengthDescription": "Le tenant que vous utilisez est trop long.", "invitedOneMember": "{{name}} a été invité(e)", "invitedThreePlusMembers": "{{name}} et {{count}} autres ont été invités", "invitedTwoMembers": "{{first}} et {{second}} ont été invités", @@ -751,7 +834,7 @@ "linkToSalesforceDescription": "Vous pouvez lier le résumé de la conférence à un objet Salesforce.", "linkToSalesforceError": "Impossible de relier la conférence à Salesforce", "linkToSalesforceKey": "Relier cette conférence", - "linkToSalesforceProgress": "Liaison de la conférence à Salesforce...", + "linkToSalesforceProgress": "Liaison de la conférence à Salesforce…", "linkToSalesforceSuccess": "La conférence a été reliée à Salesforce", "localRecordingStarted": "{{name}} a commencé un enregistrement local.", "localRecordingStopped": "{{name}} a arrêté un enregistrement local.", @@ -775,12 +858,14 @@ "newDeviceAction": "Utiliser", "newDeviceAudioTitle": "Nouveau périphérique audio détecté", "newDeviceCameraTitle": "Nouvelle caméra détectée", + "nextToSpeak": "Vous êtes le prochain à prendre la parole", "noiseSuppressionDesktopAudioDescription": "La suppression de bruit ne peut pas être activée en même temps que la partage audio du système, veuillez le désactiver et réessayer.", "noiseSuppressionFailedTitle": "Échec du démarrage de la suppression de bruit", "noiseSuppressionStereoDescription": "La suppression de bruit d’une source stéréo n’est pas encore supportée.", "oldElectronClientDescription1": "Vous semblez utiliser une ancienne version du client Jitsi Meet qui présente des failles de sécurité connues. Veuillez vous assurer de mettre à jour vers notre ", "oldElectronClientDescription2": "dernière build", "oldElectronClientDescription3": " rapidement !", + "openChat": "Ouvrir le chat", "participantWantsToJoin": "souhaite rejoindre la réunion", "participantsWantToJoin": "souhaitent rejoindre la réunion", "passwordRemovedRemotely": "Le $t(lockRoomPassword) a été supprimé par un autre participant", @@ -800,13 +885,22 @@ "startSilentTitle": "Vous avez rejoint sans sortie audio !", "suboptimalBrowserWarning": "Nous craignons que votre expérience de réunion en ligne ne soit pas idéale ici. Nous cherchons des moyens d'améliorer cela, mais d'ici-là, essayez d'utiliser l'un des navigateurs supportés.", "suboptimalExperienceTitle": "Avertissement du navigateur", + "suggestRecordingAction": "Démarrer", + "suggestRecordingDescription": "Souhaitez-vous démarrer un enregistrement ?", + "suggestRecordingTitle": "Enregistrer cette réunion", "unmute": "Rétablir le son", + "unmuteScreen": "Démarrer le partage d'écran", + "unmuteVideo": "Réactiver la vidéo", "videoMutedRemotelyDescription": "Vous pouvez toujours la réactiver.", "videoMutedRemotelyTitle": "Votre caméra a été coupée par {{participantDisplayName}}!", "videoUnmuteBlockedDescription": "Le rétablissement de la vidéo a été bloqué temporairement en raison de limites système.", "videoUnmuteBlockedTitle": "Rétablissement de la caméra bloqué !", "viewLobby": "Voir la salle d'attente", + "viewParticipants": "Voir les participants", + "viewVisitors": "Voir les visiteurs", "waitingParticipants": "{{waitingParticipants}} personnes", + "waitingVisitors": "Visiteurs en attente dans la file : {{waitingVisitors}}", + "waitingVisitorsTitle": "La réunion n'est pas encore en direct !", "whiteboardLimitDescription": "Veuillez sauvegarder votre progression, car la limite d’utilisation du tableau blanc sera bientôt atteinte et celui-ci sera fermé.", "whiteboardLimitTitle": "Utiilisation du tableau blanc" }, @@ -815,12 +909,18 @@ "admit": "Accepter", "admitAll": "Tout accepter", "allow": "Autoriser les participants à:", + "allowDesktop": "Autoriser le partage d'écran", "allowVideo": "permettre la vidéo", + "askDesktop": "Demander de partager l'écran", "askUnmute": "Demander de réactiver le micro", "audioModeration": "Rouvrir leur micro", "blockEveryoneMicCamera": "Bloquer tous les micros et caméras", "breakoutRooms": "Salles annexes", + "desktopModeration": "Démarrer le partage d'écran", + "goLive": "Passer en direct", "invite": "Inviter quelqu'un", + "lowerAllHands": "Abaisser toutes les mains", + "lowerHand": "Abaisser la main", "moreModerationActions": "Options de modération supplémentaires", "moreModerationControls": "Options de modération supplémentaires", "moreParticipantOptions": "Options supplémentaires pour les participants", @@ -828,6 +928,8 @@ "muteAll": "Couper le micro de tout le monde", "muteEveryoneElse": "Couper le micro de tous les autres", "reject": "Refuser", + "stopDesktop": "Arrêter le partage d'écran", + "stopEveryonesDesktop": "Arrêter le partage d'écran de tout le monde", "stopEveryonesVideo": "Couper toutes les caméras", "stopVideo": "Couper la vidéo", "unblockEveryoneMicCamera": "Débloquer tous les micros et caméras", @@ -837,11 +939,15 @@ "headings": { "lobby": "Salle d'attente ({{count}})", "participantsList": "Participants de la réunion ({{count}})", + "viewerRequests": "Demandes des spectateurs {{count}}", + "visitorInQueue": " (en attente {{count}})", "visitorRequests": "(Demande {{count}} )", "visitors": "Visiteurs {{count}}", + "visitorsList": "Spectateurs ({{count}})", "waitingLobby": "Dans la salle d'attente ({{count}})" }, "search": "Rechercher des participants", + "searchDescription": "Commencez à taper pour filtrer les participants", "title": "Participants" }, "passwordDigitsOnly": "Jusqu'à {{number}} chiffres", @@ -850,10 +956,13 @@ "pinnedParticipant": "Participant toujours affiché", "polls": { "answer": { + "edit": "Modifier", + "send": "Envoyer", "skip": "Passer", "submit": "Envoyer" }, "by": "Par {{ name }}", + "closeButton": "Fermer le sondage", "create": { "addOption": "Ajouter une option", "answerPlaceholder": "Option {{index}}", @@ -863,6 +972,7 @@ "pollQuestion": "Question du sondage", "questionPlaceholder": "Poser une question", "removeOption": "Supprimer l'option", + "save": "Enregistrer", "send": "Envoyer" }, "errors": { @@ -889,12 +999,14 @@ "callMe": "Appelez-moi", "callMeAtNumber": "Appelez-moi à ce numéro :", "calling": "Appel", - "configuringDevices": "Configuration des appareils ...", + "configuringDevices": "Configuration des appareils…", "connectedWithAudioQ": "Êtes-vous connecté avec le microphone ?", "connection": { + "failed": "Le test de connexion a échoué !", "good": "Votre connexion Internet est bonne !", "nonOptimal": "Votre connexion n'est pas optimale", - "poor": "Vous avez une mauvaise connexion" + "poor": "Vous avez une mauvaise connexion", + "running": "Exécution du test de connexion…" }, "connectionDetails": { "audioClipping": "Attendez vous à ce que votre son soit coupé.", @@ -903,6 +1015,7 @@ "goodQuality": "Impressionnant ! La qualité de vos médias sera excellente", "noMediaConnectivity": "Nous n'avons pas pu trouver un moyen d'établir une connectivité multimédia pour ce test. Cela est généralement causé par un pare-feu ou un NAT.", "noVideo": "Attendez vous à ce que votre qualité vidéo soit très mauvaise.", + "testFailed": "Le test de connexion a rencontré des problèmes inattendus, mais cela pourrait ne pas affecter votre expérience.", "undetectable": "Si vous ne parvenez toujours pas à passer des appels dans le navigateur, nous vous recommandons de vous assurer que vos haut-parleurs, microphone et caméra sont correctement configurés, que vous avez accordé à votre navigateur les droits d'utiliser votre microphone et votre caméra et que la version de votre navigateur est à jour. Si vous rencontrez toujours des difficultés pour appeler, vous devez contacter le développeur de l'application Web.", "veryPoorConnection": "Attendez vous à ce que la qualité de votre appel soit très mauvaise", "videoFreezing": "Attendez vous à ce que votre vidéo saute, soit noire, et pixelisée.", @@ -935,8 +1048,8 @@ "or": "ou", "premeeting": "Pré-séance", "proceedAnyway": "Continuer quand même", + "recordingWarning": "D'autres participants peuvent enregistrer cet appel", "screenSharingError": "Erreur de partage d'écran:", - "showScreen": "Activer l'écran de pré-séance", "startWithPhone": "Commencez avec l'audio du téléphone", "unsafeRoomConsent": "Je comprends les risques et je veux quand même rejoindre cette réunion", "videoOnlyError": "Erreur vidéo:", @@ -945,17 +1058,17 @@ }, "presenceStatus": { "busy": "Occupé", - "calling": "Appel ...", + "calling": "Appel…", "connected": "Connecté", - "connecting": "Connexion en cours ...", - "connecting2": "Connexion en cours* ...", + "connecting": "Connexion en cours…", + "connecting2": "Connexion en cours*…", "disconnected": "Déconnecté", "expired": "Expiré", "ignored": "Ignoré", - "initializingCall": "Lancement de l'appel ...", + "initializingCall": "Lancement de l'appel…", "invited": "Invité(e)", "rejected": "Rejeté", - "ringing": "Appel en cours ..." + "ringing": "Appel en cours…" }, "profile": { "avatar": "avatar", @@ -989,7 +1102,7 @@ "errorFetchingLink": "Erreur de récupération du lien d'enregistrement.", "expandedOff": "L'enregistrement a été arrêté", "expandedOn": "Cette conférence est actuellement en cours d'enregistrement.", - "expandedPending": "Démarrage de l'enregistrement ...", + "expandedPending": "Démarrage de l'enregistrement…", "failedToStart": "L'enregistrement n'a pas réussi à démarrer", "fileSharingdescription": "Partager l'enregistrement avec les participants de la réunion", "highlight": "Souligner", @@ -1007,7 +1120,7 @@ "localRecordingStartWarningTitle": "Arrêter l’enregistrement pour le sauvegarder", "localRecordingVideoStop": "Arrêter votre vidéo va aussi arrêter votre enregistrement local. Êtes-vous sûrs de vouloir continuer ?", "localRecordingVideoWarning": "Pour enregistrer votre vidéo, vous devez avoir celle-ci active au moment de commencer l’enregistrement.", - "localRecordingWarning": "Assurez-vous de sélectionner l’onglet courant pour utiliser le bon son et la bonne vidéo. L’enregistrement est pour le moment limité à 1 Go, soit approximativement 100 minutes.", + "localRecordingWarning": "Assurez-vous de sélectionner l’onglet courant pour utiliser le bon son et la bonne vidéo.", "loggedIn": "Connecté en tant que {{userName}}", "noMicPermission": "La piste microphone ne peut pas être créée. Veuillez autoriser l’utilisation du microphone.", "noStreams": "Aucun flux audio ou vidéo détectés.", @@ -1016,7 +1129,8 @@ "on": "Enregistrement", "onBy": "{{name}} a démarré l'enregistrement", "onlyRecordSelf": "Enregistrer seulement mon audio et ma vidéo.", - "pending": "Préparation de l'enregistrement de la réunion ...", + "pending": "Préparation de l'enregistrement de la réunion…", + "policyError": "Vous avez essayé de démarrer un enregistrement trop rapidement. Veuillez réessayer plus tard !", "recordAudioAndVideo": "Enregistrer l'audio et la vidéo", "recordTranscription": "Enregistrer la transcription", "saveLocalRecording": "Sauvegarder l’enregistrement local (Beta)", @@ -1060,16 +1174,18 @@ "signedIn": "Accès aux événements du calendrier {{email}}. Cliquez sur le bouton se déconnecter ci-dessous pour arrêter l'accès aux événements du calendrier.", "title": "Calendrier" }, + "chatWithPermissions": "Le chat nécessite une autorisation", "desktopShareFramerate": "Images par seconde pour le Partage d'écran", "desktopShareHighFpsWarning": "Augmenter le nombre d'images par seconde pour le partage d'écran peut impacter votre bande passante. Vous devez repartager l'écran pour que ces paramètres soient utilisés.", "desktopShareWarning": "Vous devez repartager l'écran pour que ces paramètres soient utilisés.", "devices": "Périphériques", "followMe": "Tout le monde me suit", + "followMeRecorder": "L'enregistreur me suit", "framesPerSecond": "images par seconde", "incomingMessage": "un message arrive", "language": "Langue", "loggedIn": "Connecté en tant que {{name}}", - "maxStageParticipants": "Nombre maximum de participants pouvant être épinglé sur l’affichage principal (EXPÉRIMENTAL)", + "maxStageParticipants": "Nombre maximum de participants pouvant être épinglé sur l’affichage principal", "microphones": "Microphones", "moderator": "Modérateur", "moderatorOptions": "Options de modérateur", @@ -1088,6 +1204,7 @@ "selectMic": "Microphone", "selfView": "Affichage de votre propre vidéo", "shortcuts": "Raccourcis", + "showSubtitlesOnStage": "Afficher les sous-titres sur l'écran", "speakers": "Haut-parleurs", "startAudioMuted": "Tout le monde commence en muet", "startReactionsMuted": "Tout le monde commence avec les réactions sonores bloquées", @@ -1141,11 +1258,13 @@ "fearful": "Effrayé", "happy": "Content", "hours": "{{count}}h", + "labelTooltip": "Nombre de participants : {{count}}", "minutes": "{{count}}m", "name": "Nom", "neutral": "Indifférent", "sad": "Triste", "search": "Recherche", + "searchDescription": "Commencez à taper pour filtrer les participants", "searchHint": "Recherche des participants", "seconds": "{{count}}s", "speakerStats": "Statistiques de l'interlocuteur", @@ -1169,7 +1288,7 @@ "toolbar": { "Settings": "Paramètres", "accessibilityLabel": { - "Settings": "Afficher / Masquer le menu des paramètres", + "Settings": "Ouvrir le menu des paramètres", "audioOnly": "Activer / Désactiver le mode voix uniquement", "audioRoute": "Sélectionner la source audio", "boo": "Hou", @@ -1182,6 +1301,7 @@ "closeChat": "Fermer la discussion instantanée", "closeMoreActions": "Fermer le menu plus d'actions", "closeParticipantsPane": "Fermer le panneau des participants", + "closedCaptions": "Sous-titres", "collapse": "Plier", "document": "Activer / Désactiver le document partagé", "documentClose": "Fermer le document partagé", @@ -1211,11 +1331,12 @@ "lobbyButton": "Activer / Désactiver le mode salle d'attente", "localRecording": "Activer / Désactiver les contrôles d'enregistrement local", "lockRoom": "Activer / Désactiver le mot de passe de la réunion", + "love": "Cœur", "lowerHand": "Baisser la main", "moreActions": "Activer / Désactiver le menu d'actions supplémentaires", "moreActionsMenu": "Menu d'actions supplémentaires", "moreOptions": "Voir plus d'options", - "mute": "Activer / Désactiver l'audio", + "mute": "Couper votre micro", "muteEveryone": "Couper le micro de tout le monde", "muteEveryoneElse": "Couper le micro de tous les autres", "muteEveryoneElsesVideoStream": "Couper la caméra de tous les autres", @@ -1228,6 +1349,7 @@ "privateMessage": "Envoyer un message privé", "profile": "Éditer votre profil", "raiseHand": "Lever la main", + "react": "Réactions aux messages", "reactions": "Réactions", "reactionsMenu": "Ouvrir / fermer le menu réactions", "recording": "Activer / Désactiver l'enregistrement", @@ -1251,13 +1373,27 @@ "tileView": "Activer / Désactiver la vue mosaïque", "toggleCamera": "Changer de caméra", "toggleFilmstrip": "Afficher ou masquer les vignettes vidéo", - "unmute": "Rétablir le son", + "unmute": "Activer votre micro", "videoblur": "Activer / désactiver le floutage", - "videomute": "Activer / Couper la vidéo", + "videomute": "Couper votre vidéo", "videomuteGUMPending": "Connexion de votre caméra", - "videounmute": "Démarrer la vidéo" + "videounmute": "Activer votre vidéo" }, "addPeople": "Ajouter des personnes à votre appel", + "advancedAudioSettings": { + "aec": { + "label": "Suppression d'écho acoustique" + }, + "agc": { + "label": "Contrôle automatique du gain" + }, + "ns": { + "label": "Suppression de bruit" + }, + "stereo": { + "label": "Stéréo" + } + }, "audioOnlyOff": "Désactiver le mode bande passante réduite", "audioOnlyOn": "Activer le mode bande passante réduite", "audioRoute": "Sélectionner la source audio", @@ -1270,6 +1406,7 @@ "closeChat": "Fermer le chat", "closeParticipantsPane": "Fermer le panneau des participants", "closeReactionsMenu": "Fermer le menu réactions", + "closedCaptions": "Sous-titres", "disableNoiseSuppression": "Arrêter la suppression du bruit", "disableReactionSounds": "Vous pouvez interdire les réactions sonores à cette réunion", "documentClose": "Fermer le document partagé", @@ -1299,6 +1436,7 @@ "lobbyButtonEnable": "Activer le mode salle d'attente / contrôle des participant(e)s", "login": "Connexion", "logout": "Déconnexion", + "love": "Cœur", "lowerYourHand": "Baisser la main", "moreActions": "Plus d'actions", "moreOptions": "Plus d'options", @@ -1324,8 +1462,10 @@ "raiseYourHand": "Lever la main", "reactionBoo": "Envoyer réaction huer", "reactionClap": "Envoyer réaction applaudir", + "reactionHeart": "Envoyer une réaction en forme de cœur", "reactionLaugh": "Envoyer réaction rire", "reactionLike": "Envoyer réaction approuver", + "reactionLove": "Envoyer une réaction d'amour", "reactionSilence": "Envoyer réaction silence", "reactionSurprised": "Envoyer réaction surprise", "reactions": "Reactions", @@ -1356,33 +1496,24 @@ }, "transcribing": { "ccButtonTooltip": "Activer / Désactiver les sous-titres", - "error": "Échec de la transcription. Veuillez réessayer.", "expandedLabel": "La transcription est actuellement activée", - "failedToStart": "Échec de démarrage de la transcription", - "labelToolTip": "La transcription de la réunion est en cours", - "off": "La transcription est désactivée", - "on": "La transcription est activée", - "pending": "Préparation de la transcription de la réunion ...", + "failed": "La transcription a échoué", + "labelTooltip": "La transcription de la réunion est en cours", + "labelTooltipExtra": "Une transcription sera disponible plus tard.", + "openClosedCaptions": "Ouvrir les sous-titres", + "original": "Original", "sourceLanguageDesc": "Actuellement, la langue de la réunion est sélectionnée à {{sourceLanguage}}.
Vous pouvez la changer à partir de ", "sourceLanguageHere": "ici", "start": "Activer les sous-titres", "stop": "Désactiver les sous-titres", "subtitles": "sous-titres", "subtitlesOff": "off", - "tr": "TR" + "tr": "TR", + "translateTo": "Traduire vers" }, "unpinParticipant": "Désépingler - {{participantName}}", "userMedia": { - "androidGrantPermissions": "Sélectionnez Autoriser lorsque votre navigateur demande votre autorisation.", - "chromeGrantPermissions": "Sélectionnez Autoriser lorsque votre navigateur demande votre autorisation.", - "edgeGrantPermissions": "Sélectionnez Oui quand le navigateur demande votre autorisation.", - "electronGrantPermissions": "Veuillez autoriser le partage de votre camera et microphone.", - "firefoxGrantPermissions": "Sélectionnez Partager le périphérique sélectionné lorsque votre navigateur demande votre autorisation.", - "iexplorerGrantPermissions": "Sélectionnez OK quand le navigateur demande votre autorisation.", - "nwjsGrantPermissions": "Veuillez autoriser le partage de votre camera et microphone.", - "operaGrantPermissions": "Sélectionnez Autoriser lorsque votre navigateur demande votre autorisation.", - "react-nativeGrantPermissions": "Sélectionnez Autoriser lorsque votre navigateur demande votre autorisation.", - "safariGrantPermissions": "Sélectionnez OK quand le navigateur demande votre autorisation." + "grantPermissions": "Veuillez autoriser le partage de votre camera et microphone." }, "videoSIPGW": { "busy": "Nous tentons de libérer les ressources requises. Veuillez réessayez dans quelques minutes.", @@ -1418,7 +1549,10 @@ }, "videothumbnail": { "connectionInfo": "Informations de la connexion", + "demote": "Déplacer en visiteur", "domute": "Couper le micro", + "domuteDesktop": "Arrêter le partage d'écran", + "domuteDesktopOfOthers": "Arrêter le partage d'écran de tous les autres", "domuteOthers": "Couper le micro de tous les autres", "domuteVideo": "Couper la caméra", "domuteVideoOfOthers": "Couper la caméra des autres", @@ -1460,7 +1594,7 @@ "image6": "Forêt ", "image7": "Lever de soleil", "none": "Rien", - "pleaseWait": "Veuillez patienter...", + "pleaseWait": "Veuillez patienter…", "removeBackground": "Supprimer l'arrière-plan", "slightBlur": "Léger flou", "title": "Arrière-plan virtuel", @@ -1470,11 +1604,24 @@ }, "visitors": { "chatIndicator": "(visiteur)", - "labelTooltip": "Nombre de Visiteurs", + "joinMeeting": { + "description": "Vous êtes actuellement un observateur dans cette conférence.", + "raiseHand": "Levez la main", + "title": "Rejoindre la réunion", + "wishToSpeak": "Si vous souhaitez prendre la parole, veuillez lever la main ci-dessous et attendre l'approbation du modérateur." + }, + "labelTooltip": "Nombre de Visiteurs: {{count}}", "notification": { - "description": "Pour participer lever la main.", + "demoteDescription": "Envoyé ici par {{actor}}, levez la main pour participer", + "noMainParticipantsDescription": "Un participant doit démarrer la réunion. Veuillez réessayer dans un moment.", + "noMainParticipantsTitle": "Cette réunion n'a pas encore commencé.", + "noVisitorLobby": "Vous ne pouvez pas rejoindre tant qu'une salle d'attente est activée pour la réunion.", + "notAllowedPromotion": "Un participant doit d'abord autoriser votre demande.", + "requestToJoin": "Main levée", + "requestToJoinDescription": "Votre demande a été envoyée aux modérateurs.", "title": "Vous êtes visiteur dans cette réunion" - } + }, + "waitingMessage": "Vous rejoindrez la réunion dès qu'elle sera en direct !" }, "volumeSlider": "Curseur de volume", "welcomepage": { @@ -1532,6 +1679,7 @@ "whiteboard": { "accessibilityLabel": { "heading": "Tableau blanc" - } + }, + "screenTitle": "Tableau blanc" } } diff --git a/lang/main-frCA.json b/lang/main-frCA.json deleted file mode 100644 index fca36c9b393e..000000000000 --- a/lang/main-frCA.json +++ /dev/null @@ -1,757 +0,0 @@ -{ - "addPeople": { - "add": "Inviter", - "countryNotSupported": "Nous ne prenons pas encore cette destination en charge.", - "countryReminder": "Vous appelez en dehors des É.-U.? Veuillez vous assurer de commencer par le code de pays!", - "disabled": "Vous ne pouvez pas inviter d'autres personnes.", - "failedToAdd": "L'ajout de membres a échoué", - "footerText": "Les appels sont désactivés.", - "loading": "Rechercher des personnes et des numéros de téléphone", - "loadingNumber": "Validation du numéro de téléphone", - "loadingPeople": "Rechercher des personnes à inviter", - "noResults": "Aucun résultat de recherche correspondant", - "noValidNumbers": "Veuillez entrer un numéro de téléphone", - "searchNumbers": "Ajouter des numéros de téléphone", - "searchPeople": "Rechercher des personnes", - "searchPeopleAndNumbers": "Rechercher des personnes ou ajouter des numéros de téléphone", - "telephone": "Téléphone : {{number}}", - "title": "Inviter des personnes à cette réunion" - }, - "audioDevices": { - "bluetooth": "Bluetooth", - "headphones": "Écouteurs", - "none": "Aucun périphérique audio n'est disponible", - "phone": "Téléphone", - "speaker": "Intervenant" - }, - "audioOnly": { - "audioOnly": "Bande passante faible" - }, - "calendarSync": { - "addMeetingURL": "Ajouter un lien de réunion", - "confirmAddLink": "Voulez-vous ajouter un lien Jitsi Meet à cet événement ?", - "error": { - "appConfiguration": "L'intégration de l'agenda n'est pas correctement configurée.", - "generic": "Une erreur s'est produite. Veuillez vérifier vos paramètres d'agenda ou essayer de rafraîchir l'agenda.", - "notSignedIn": "Une erreur s'est produite lors de l'authentification des événements d'agenda. Veuillez vérifier vos paramètres d'agenda ou essayer de vous reconnecter." - }, - "join": "Rejoindre", - "joinTooltip": "Rejoindre la réunion", - "nextMeeting": "prochaine réunion", - "noEvents": "Il n'y a aucun événement planifié à venir.", - "ongoingMeeting": "réunion en cours", - "permissionButton": "Ouvrir les paramètres", - "permissionMessage": "L'autorisation de l'Agenda est nécessaire pour consulter vos réunions dans l'application.", - "refresh": "Rafraîchir l'agenda", - "today": "Aujourd'hui" - }, - "chat": { - "error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}", - "fieldPlaceHolder": "Tapez votre message ici", - "messageTo": "", - "messagebox": "Tapez un message", - "nickname": { - "popover": "Choisissez un nom d'affichage", - "title": "Entrer un nom d'affichage pour utiliser le clavardage", - "titleWithPolls": "Entrer un nom d'affichage pour utiliser le clavardage" - }, - "noMessagesMessage": "Il n'y a pas encore de messages dans cette réunion. Démarrez une conversation ici !", - "privateNotice": "Message privé à {{recipient}}", - "sendButton": "Envoyer", - "title": "Clavardage", - "titleWithPolls": "Clavardage", - "you": "vous" - }, - "connectingOverlay": { - "joiningRoom": "Connexion à la réunion en cours…" - }, - "connection": { - "ATTACHED": "Joint", - "AUTHENTICATING": "Authentification", - "AUTHFAIL": "Échec de l'authentification", - "CONNECTED": "Connecté", - "CONNECTING": "Connexion en cours", - "CONNFAIL": "Échec de la connexion", - "DISCONNECTED": "Déconnecté", - "DISCONNECTING": "Déconnexion en cours", - "ERROR": "Erreur", - "RECONNECTING": "Un problème de réseau est survenu. Reconnexion en cours..." - }, - "connectionindicator": { - "address": "Adresse:", - "bandwidth": "Bande passante estimée :", - "bitrate": "Débit binaire :", - "bridgeCount": "Nombre de serveur : ", - "connectedTo": "Connecté à :", - "framerate": "Fréquence d'images :", - "less": "Afficher moins", - "localaddress": "Adresse locale :", - "localaddress_plural": "Adresses locales :", - "localport": "Port local :", - "localport_plural": "Ports locaux :", - "more": "Afficher plus", - "packetloss": "Perte de paquet :", - "quality": { - "good": "Bonne", - "inactive": "Inactive", - "lost": "Perdue", - "nonoptimal": "Non-optimale", - "poor": "Faible" - }, - "remoteaddress": "Adresse distante :", - "remoteaddress_plural": "Adresses distantes :", - "remoteport": "Port distant :", - "remoteport_plural": "Ports distants :", - "resolution": "Résolution :", - "status": "Connexion :", - "transport": "Tranport :", - "transport_plural": "Transports :" - }, - "dateUtils": { - "earlier": "Plus tôt", - "today": "Aujourd'hui", - "yesterday": "Hier" - }, - "deepLinking": { - "appNotInstalled": "L'application mobile {{app}} est nécessaire pour rejoindre cette réunion sur votre téléphone.", - "description": "Il ne s'est rien passé? Nous avons essayés de démarrer votre réunion dans l'application de bureau {{app}}. Veuillez réessayer ou démarrer la réunion dans l'application Web {{app}}.", - "descriptionWithoutWeb": "Rien ne s'est passé? Nous avons essayé de démarrer votre réunion dans l'application bureau {{app}}.", - "downloadApp": "Télécharger l'application", - "launchWebButton": "Démarrer dans l'application Web", - "openApp": "Continuer vers l'application", - "title": "Démarrage de votre réunion dans {{app}} en cours…", - "tryAgainButton": "Veuillez réessayer sur votre ordinateur" - }, - "defaultLink": "p. ex. {{url}}", - "defaultNickname": "p. ex. Jane Pink", - "deviceError": { - "cameraError": "Échec de l'accès à votre caméra", - "cameraPermission": "Erreur lors de l'obtention de l'autorisation de la caméra", - "microphoneError": "Échec de l'accès à votre micro", - "microphonePermission": "Erreur lors de l'obtention de l'autorisation du micro" - }, - "deviceSelection": { - "noPermission": "L'autorisation n'a pas été accordée", - "previewUnavailable": "Prévisualisation non disponible", - "selectADevice": "Sélectionner un dispositif", - "testAudio": "Jouer un son de test" - }, - "dialOut": { - "statusMessage": "est maintenant {{status}}" - }, - "dialog": { - "Back": "Retour", - "Cancel": "Annuler", - "IamHost": "Je suis l'hôte", - "Ok": "OK", - "Remove": "Supprimer", - "Share": "Oui", - "Submit": "Envoyer", - "WaitForHostMsg": "La conférence n'a pas encore démarré. Si vous êtes l'hôte, veuillez vous authentifier. Sinon, veuillez attendre que l'hôte arrive.", - "WaitingForHost": "En attente de l'hôte…", - "Yes": "Oui", - "accessibilityLabel": { - "liveStreaming": "Diffusion en direct" - }, - "allow": "Autoriser", - "alreadySharedVideoMsg": "Un autre membre partage déjà une vidéo. Cette conférence permet le partage d'une seule vidéo à la fois.", - "alreadySharedVideoTitle": "Seulement une vidéo à la fois peut être partagée", - "applicationWindow": "Fenêtre d'application", - "cameraConstraintFailedError": "Votre caméra ne répond pas à certaines exigences.", - "cameraNotFoundError": "Impossible de trouver la caméra.", - "cameraNotSendingData": "Il est impossible d'accéder à la caméra. Veuillez vérifier si une autre application utilise actuellement ce dispositif, sélectionner un autre dispositif à partir du menu des paramètres ou essayer de recharger l'application.", - "cameraNotSendingDataTitle": "Impossible d'accéder à la caméra", - "cameraPermissionDeniedError": "Vous n'avez pas reçu l'autorisation d'utiliser votre caméra. Vous pouvez toujours rejoindre la conférence, mais les autres membres ne pourront pas vous voir. Utilisez le bouton de caméra dans la barre d'adresse pour corriger cela.", - "cameraUnknownError": "Impossible d'utiliser la caméra pour une raison inconnue.", - "cameraUnsupportedResolutionError": "Votre caméra ne prend pas en charge la résolution vidéo nécessaire.", - "close": "Fermer", - "conferenceDisconnectMsg": "Vous devriez vérifier votre connexion au réseau. Reconnexion dans {{seconds}} sec…", - "conferenceDisconnectTitle": "Vous avez été déconnecté.", - "conferenceReloadMsg": "Nous tentons de résoudre le problème. Reconnexion dans {{seconds}} sec…", - "conferenceReloadTitle": "Malheureusement, une erreur s'est produite.", - "confirm": "Confirmer", - "confirmNo": "Non", - "confirmYes": "Oui", - "connectError": "Oups! Une erreur s'est produite. La connexion à la conférence a échouée.", - "connectErrorWithMsg": "Oups! Une erreur s'est produite. La connexion à la conférence a échoué : {{msg}}", - "connecting": "Connexion en cours", - "contactSupport": "Communiquez avec le service de soutien", - "copy": "Copier", - "dismiss": "Rejeter", - "displayNameRequired": "Un nom d'affichage est requis", - "done": "Terminé", - "enterDisplayName": "Veuillez saisir votre nom d'affichage", - "error": "Erreur", - "externalInstallationMsg": "Vous devez installer notre extension de partage de bureau.", - "externalInstallationTitle": "Extension requise", - "goToStore": "Rendez-vous sur notre boutique en ligne", - "gracefulShutdown": "Notre service est actuellement hors service pour l'entretien. Veuillez réessayer plus tard.", - "incorrectPassword": "Nom d'utilisateur ou mot de passe incorrect", - "incorrectRoomLockPassword": "Mot de passe incorrect", - "inlineInstallExtension": "Installer maintenant", - "inlineInstallationMsg": "Vous devez installer notre extension de partage de bureau.", - "internalError": "Oups! Une erreur s'est produite. L'erreur suivante est survenue : {{error}}", - "internalErrorTitle": "Erreur interne.", - "kickMessage": "Aïe! Vous avez été expulsé de la réunion!", - "kickParticipantButton": "Expulser", - "kickParticipantDialog": "Êtes-vous certain de vouloir expulser ce participant?", - "kickParticipantTitle": "Expulser ce membre?", - "kickTitle": "Expulsé de la réunion", - "liveStreaming": "Diffusion en direct", - "liveStreamingDisabledForGuestTooltip": "Les invités ne peuvent pas démarrer la diffusion en direct.", - "liveStreamingDisabledTooltip": "Démarrage de la diffusion en direct désactivé.", - "lockMessage": "Échec du verrouillage de la conférence.", - "lockRoom": "Ajouter un mot de passe à la réunion", - "lockTitle": "Échec du verrouillage", - "logoutQuestion": "Êtes-vous certain de vouloir vous déconnecter et arrêter la conférence?", - "logoutTitle": "Déconnexion", - "maxUsersLimitReached": "La limite du nombre maximum de membres a été atteinte. La conférence est pleine. Veuillez communiquer avec l'hôte de la réunion ou réessayer plus tard.", - "maxUsersLimitReachedTitle": "Limite du nombre de membres maximum atteinte", - "micConstraintFailedError": "Votre micro ne répond pas à certaines exigences", - "micNotFoundError": "Impossible de trouver le micro.", - "micNotSendingData": "Impossible d'accéder à votre micro. Veuillez sélectionner un autre dispositif à partir du menu des paramètres ou essayer de recharger l'application.", - "micNotSendingDataTitle": "Impossible d'accéder à votre micro", - "micPermissionDeniedError": "Vous n'avez pas accordé l'autorisation d'utilisation de votre micro. Vous pouvez toujours rejoindre la conférence, mais les autres membres ne pourront pas vous entendre. Utilisez le bouton de caméra dans la barre d'adresse pour remédier à cela.", - "micUnknownError": "Impossible d'utiliser le micro pour une raison inconnue.", - "muteParticipantBody": "Vous ne pourrez pas réactiver leur micro, mais ils peuvent le réactiver eux-mêmes à tout moment.", - "muteParticipantButton": "Discrétion", - "muteParticipantDialog": "Êtes-vous certain de vouloir désactiver le micro de ce participant? Vous ne pourrez pas le réactiver, mais il peut le réactiver lui-même à tout moment.", - "muteParticipantTitle": "Désactiver le micro de ce membre?", - "passwordLabel": "Mot de passe", - "passwordNotSupported": "La mise en place d'un mot de passe de réunion n'est pas prise en charge.", - "passwordNotSupportedTitle": "Mot de passe non pris en charge", - "passwordRequired": "Mot de passe requis", - "popupError": "Votre navigateur bloque les fenêtres surgissantes provenant de ce site. Veuillez activer les fenêtres surgissantes dans les paramètres de sécurité de votre navigateur et réessayer.", - "popupErrorTitle": "Fenêtre surgissante bloquée", - "recording": "Enregistrement", - "recordingDisabledForGuestTooltip": "Les invités ne peuvent pas démarrer l'enregistrement.", - "recordingDisabledTooltip": "Démarrage de l'enregistrement désactivé.", - "rejoinNow": "Rejoindre maintenant", - "remoteControlAllowedMessage": "{{user}} a accepté votre demande de contrôle à distance!", - "remoteControlDeniedMessage": "{{user}} a refusé votre demande de contrôle à distance!", - "remoteControlErrorMessage": "Une erreur s'est produite lors de la demande d'autorisation de contrôle à distance de {{user}}!", - "remoteControlRequestMessage": "Voulez-vous permettre à {{user}} de contrôler votre bureau à distance?", - "remoteControlShareScreenWarning": "Notez que si vous appuyez sur « Permettre », vous partagerez votre écran!", - "remoteControlStopMessage": "La séance de contrôle à distance est terminée!", - "remoteControlTitle": "Contrôle du bureau à distance", - "removePassword": "Supprimer un mot de passe", - "removeSharedVideoMsg": "Êtes-vous certain de vouloir supprimer votre vidéo partagée?", - "removeSharedVideoTitle": "Supprimer la vidéo partagée", - "reservationError": "Erreur du système de réservation", - "reservationErrorMsg": "Code d'erreur : {{code}}, message : {{msg}}", - "retry": "Réessayer", - "screenSharingFailedToInstall": "Oups! L'installation de votre extension de partage d'écran a échouée.", - "screenSharingFailedToInstallTitle": "L'installation de l'extension de partage d'écran a échouée", - "screenSharingFirefoxPermissionDeniedError": "Une erreur s'est produite lors de la tentative de partage d'écran. Veuillez vous assurer d'avoir donné votre autorisation. ", - "screenSharingFirefoxPermissionDeniedTitle": "Oups! Il est impossible de démarrer le partage d'écran!", - "screenSharingPermissionDeniedError": "Oups! Une erreur s'est produite avec les autorisations de l'extension de partage d'écran. Veuillez recharger et réessayer.", - "sendPrivateMessage": "Vous avez récemment reçu un message privé. Aviez-vous l'intention d'y répondre en privé, ou vouliez-vous envoyer votre message au groupe ?", - "sendPrivateMessageCancel": "Envoyer au groupe", - "sendPrivateMessageOk": "Envoyer en privé", - "sendPrivateMessageTitle": "Envoyer en privé ?", - "serviceUnavailable": "Service non disponible", - "sessTerminated": "Appel terminé", - "shareVideoLinkError": "Veuillez fournir un lien correct.", - "shareVideoTitle": "Partager une vidéo", - "shareYourScreen": "Partager votre écran", - "shareYourScreenDisabled": "Le partage d'écran est désactivé.", - "shareYourScreenDisabledForGuest": "Les invités ne peuvent pas partager leur écran.", - "startLiveStreaming": "Démarrer la diffusion en direct", - "startRecording": "Commencer l'enregistrement", - "startRemoteControlErrorMessage": "Une erreur s'est produite lors de la tentative de démarrage de la séance de contrôle à distance!", - "stopLiveStreaming": "Arrêter la diffusion en direct", - "stopRecording": "Arrêter l'enregistrement", - "stopRecordingWarning": "Êtes-vous certain de vouloir arrêter l'enregistrement?", - "stopStreamingWarning": "Êtes-vous certain de vouloir arrêter la diffusion en direct?", - "streamKey": "Clé de diffusion en direct", - "thankYou": "Merci d'utiliser {{appName}}!", - "token": "jeton", - "tokenAuthFailed": "Désolé, vous n'avez pas la permission de rejoindre cet appel.", - "tokenAuthFailedTitle": "Échec de l'authentification", - "transcribing": "Transcription en cours", - "unlockRoom": "Supprimer le mot de passe de la réunion", - "userPassword": "mot de passe d'utilisateur", - "yourEntireScreen": "Votre écran entier" - }, - "documentSharing": { - "title": "Document partagé" - }, - "feedback": { - "average": "Moyenne", - "bad": "Mauvaise", - "detailsLabel": "Dites-nous en plus.", - "good": "Bonne", - "rateExperience": "Évaluez votre expérience de cette conférence", - "veryBad": "Très mauvaise", - "veryGood": "Très bonne" - }, - "incomingCall": { - "answer": "Réponse", - "audioCallTitle": "Appel entrant", - "decline": "Rejeter", - "productLabel": "de Jitsi Meet", - "videoCallTitle": "Appel vidéo entrant" - }, - "info": { - "accessibilityLabel": "Afficher l'information", - "addPassword": "Ajouter un mot de passe", - "cancelPassword": "Annuler le mot de passe", - "conferenceURL": "Liens", - "country": "Pays", - "dialANumber": "Pour rejoindre votre réunion, composez un de ces numéros et entrez le NIP.", - "dialInConferenceID": "NIP :", - "dialInNotSupported": "Désolé, les appels internes ne sont pas pris en charge pour le moment.", - "dialInNumber": "Appel interne :", - "dialInSummaryError": "Erreur lors de la récupération des informations d'appel interne. Veuillez réessayer plus tard.", - "dialInTollFree": "Sans frais", - "genericError": "Oups, une erreur s'est produite.", - "inviteLiveStream": "Pour voir la diffusion en directe de cette réunion, cliquez sur ce lien : {{url}}", - "invitePhone": "Pour rejoindre depuis un téléphone, composez : {{number}},,{{conferenceID}}#\n", - "invitePhoneAlternatives": "Vous cherchez un numéro d'appel différent ?\nConsultez la liste de numéros d'appel de la réunion : {{url}}\n\n\nSi vous appelez également via un téléphone de salle, vous pouvez vous connecter sans audio : {{silentUrl}}", - "inviteURLFirstPartGeneral": "Vous avez été invité à rejoindre une réunion.", - "inviteURLFirstPartPersonal": "{{name}} vous invite à une réunion.\n", - "inviteURLSecondPart": "\nRejoindre la réunion:\n{{url}}\n", - "label": "Informations de réunion", - "liveStreamURL": "Diffusion en direct :", - "moreNumbers": "Plus de numéros", - "noNumbers": "Aucun numéro d'appel interne.", - "noPassword": "Aucun", - "noRoom": "Vous n'avez pas précisé de salle pour l'appel interne.", - "numbers": "Numéros d'appel interne", - "password": "Mot de passe :", - "title": "Oui", - "tooltip": "Lien de partage et informations d'appel interne pour cette réunion" - }, - "inlineDialogFailure": { - "msg": "Nous avons rencontré un obstacle.", - "retry": "% abandonnés", - "support": "Soutien", - "supportMsg": "Si cela se produit à nouveau, veuillez communiquer avec" - }, - "inviteDialog": { - "alertText": "L'invitation de certains participants a échoué.", - "header": "Inviter", - "searchCallOnlyPlaceholder": "Entrer le numéro de téléphone", - "searchPeopleOnlyPlaceholder": "Rechercher des participants", - "searchPlaceholder": "Participant ou numéro de téléphone", - "send": "Envoyer" - }, - "keyboardShortcuts": { - "focusLocal": "Focaliser sur votre vidéo", - "focusRemote": "Focaliser sur la vidéo d'une autre personne", - "fullScreen": "Afficher ou quitter le mode plein écran", - "keyboardShortcuts": "Raccourcis clavier", - "localRecording": "Afficher ou masquer les commandes d'enregistrement local", - "mute": "Activer ou désactiver votre micro", - "pushToTalk": "Messagerie vocale instantanée", - "raiseHand": "Lever ou abaisser votre main", - "showSpeakerStats": "Afficher les statistiques d'intervenant", - "toggleChat": "Ouvrir ou fermer le clavardage", - "toggleFilmstrip": "Afficher ou masquer les icônes vidéos", - "toggleScreensharing": "Basculer entre la caméra et le partage d'écran", - "toggleShortcuts": "Afficher ou masquer les raccourcis clavier", - "videoMute": "Démarrer ou arrêter votre caméra", - "videoQuality": "Gérer la qualité d'appel" - }, - "liveStreaming": { - "busy": "Libération de ressources de diffusion en cours. Veuillez réessayer dans quelques minutes.", - "busyTitle": "Tous les diffuseurs sont actuellement occupés", - "changeSignIn": "Changer de compte.", - "choose": "Sélectionner une diffusion en direct", - "chooseCTA": "Sélectionner une option de diffusion en direct. Vous êtes actuellement connecté en tant que {{email}}.", - "enterStreamKey": "Saisissez votre clé de diffusion en direct YouTube ici.", - "error": "Échec de la diffusion en direct. Veuillez réessayer.", - "errorAPI": "Une erreur s'est produite lors de l'accès à vos diffusions YouTube.Veuillez réessayer de vous connecter.", - "errorLiveStreamNotEnabled": "La diffusion en direct n'est pas activée pour {{email}}. Veuillez activer la diffusion en direct ou vous connecter à un compte pour lequel la diffusion en direct est activée.", - "expandedOff": "La diffusion en direct a été arrêtée", - "expandedOn": "La réunion est actuellement diffusée sur YouTube.", - "expandedPending": "Le démarrage de la diffusion en direct est en cours…", - "failedToStart": "Le démarrage de la diffusion en direct a échoué", - "getStreamKeyManually": "La récupération de diffusions en direct a échoué. Essayez d'obtenir une clé de diffusion en direct sur YouTube.", - "invalidStreamKey": "La clé de diffusion en direct peut être erronée.", - "off": "La diffusion en direct s'est arrêtée", - "offBy": "{{name}} a arrêté la diffusion en continu", - "on": "Diffusion en direct", - "onBy": "{{name}} démarré la diffusion en continu", - "pending": "Démarrage de la diffusion en direct…", - "serviceName": "Service de diffusion en direct", - "signIn": "Se connecter avec Google", - "signInCTA": "Connectez-vous ou entrez votre clé de diffusion en direct de YouTube", - "signOut": "Se déconnecter", - "signedInAs": "Vous êtes actuellement connecté en tant que :", - "start": "Démarrer une diffusion en direct", - "streamIdHelp": "Qu'est-ce que c'est?", - "title": "Diffusion en direct", - "unavailableTitle": "Diffusion en direct non disponible" - }, - "localRecording": { - "clientState": { - "off": "Désactivé", - "on": "Prêt", - "unknown": "Inconnu" - }, - "dialogTitle": "Commandes d'enregistrement local", - "duration": "Durée", - "durationNA": "S. O.", - "encoding": "Encodage", - "label": "LOR", - "labelToolTip": "L'enregistrement local est en cours", - "localRecording": "Enregistrement local", - "me": "Moi", - "messages": { - "engaged": "Enregistrement local activé.", - "finished": "Enregistrement de la séance {{token}} terminé. Veuillez envoyer le fichier d'enregistrement au modérateur.", - "finishedModerator": "Enregistrement de la séance {{token}} terminé. L'enregistrement de la piste locale a été enregistrée. Veuillez demander aux autres participants de soumettre leurs enregistrements.", - "notModerator": "Vous n'êtes pas le modérateur. Vous ne pouvez pas démarrer ou arrêter l'enregistrement local." - }, - "moderator": "Modérateur", - "no": "Non", - "participant": "Participant", - "participantStats": "Statistiques de participants", - "sessionToken": "Jeton de séance", - "start": "Commencer l'enregistrement", - "stop": "Arrêter l'enregistrement", - "yes": "Oui" - }, - "lockRoomPassword": "mot de passe", - "lockRoomPasswordUppercase": "Mot de passe", - "me": "moi", - "notify": { - "connectedOneMember": "{{name}} a rejoint la réunion", - "connectedThreePlusMembers": "{{name}} et {{count}} autres ont rejoint la réunion", - "connectedTwoMembers": "{{first}} et {{second}} ont rejoint la réunion", - "disconnected": "déconnecté", - "focus": "Sujet de la conférence", - "focusFail": "{{component}} non disponible; réessayez dans {{ms}} sec", - "grantedTo": "Droits de modérateur accordés à {{to}}!", - "invitedOneMember": "{{displayName}} a été invité", - "invitedThreePlusMembers": "{{name}} et {{count}} autres ont été invités", - "invitedTwoMembers": "{{first}} et {{second}} ont été invités", - "kickParticipant": "{{kicked}} a été expulsé par {{kicker}}", - "me": "Moi", - "moderator": "Droits de modérateur accordés!", - "muted": "Vous avez joint la conversation en sourdine.", - "mutedRemotelyDescription": "Vous pouvez toujours activer votre micro pour prendre la parole. Désactivez votre micro quand vous terminez pour éviter les bruits parasites.", - "mutedRemotelyTitle": "Votre micro a été coupé par {{participantDisplayName}}!", - "mutedTitle": "Vous êtes en sourdine!", - "newDeviceAction": "Utiliser", - "newDeviceAudioTitle": "Nouveau dispositif audio détecté", - "newDeviceCameraTitle": "Nouvelle caméra détectée", - "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) supprimé par un autre participant", - "passwordSetRemotely": "$t(lockRoomPasswordUppercase) défini par un autre participant", - "raisedHand": "{{name}} voudrait parler.", - "somebody": "Quelqu'un", - "startSilentDescription": "Rejoignez la réunion de nouveau pour activer l'audio", - "startSilentTitle": "Vous avez rejoint sans sortie audio!", - "suboptimalBrowserWarning": "Nous craignons que votre expérience de réunion en ligne ne soit bonne ici. Nous cherchons des moyens d’améliorer cela, mais d’ici-là, essayez d’utiliser l’un des navigateurs supportés.", - "suboptimalExperienceTitle": "Avertissement de navigateur", - "unmute": "Rétablir le son" - }, - "passwordDigitsOnly": "Jusqu'à {{number}} chiffres", - "passwordSetRemotely": "réglé par un autre membre", - "polls": { - "errors": { - "notUniqueOption": "Les options doivent être uniques" - } - }, - "poweredby": "optimisé par", - "presenceStatus": { - "busy": "Occupé", - "calling": "Appel en cours…", - "connected": "Connecté", - "connecting": "Connexion en cours…", - "connecting2": "Connexion en cours*...", - "disconnected": "Déconnecté", - "expired": "Expiré", - "ignored": "Ignoré", - "initializingCall": "Initialisation de l'appel…", - "invited": "Invité", - "rejected": "Refusé", - "ringing": "Sonnerie" - }, - "profile": { - "setDisplayNameLabel": "Définir votre nom d'affichage", - "setEmailInput": "Entrer votre adresse courriel", - "setEmailLabel": "Définir votre courriel Gravatar", - "title": "Profil" - }, - "raisedHand": "Aimerait prendre la parole", - "recording": { - "authDropboxText": "Téléverser à Dropbox", - "availableSpace": "Espace disponible : {{spaceLeft}} Mo (approximativement {{duration}} minutes d'enregistrement)", - "beta": "BETA", - "busy": "Libération de ressources pour l'enregistrement. Veuillez réessayer dans quelques minutes.", - "busyTitle": "Tous les enregistreurs sont actuellement occupés", - "error": "L'enregistrement a échoué. Veuillez réessayer.", - "expandedOff": "L'enregistrement a été arrêté.", - "expandedOn": "La réunion est actuellement enregistrée.", - "expandedPending": "Démarrage de l'enregistrement en cours…", - "failedToStart": "Échec du démarrage de l'enregistrement", - "fileSharingdescription": "Partager l'enregistrement avec les participants de la réunion", - "live": "EN DIRECT", - "loggedIn": "Connecté en tant que {{userName}}", - "off": "L'enregistrement est arrêté", - "offBy": "{{name}} a arrêté l'enregistrement", - "on": "Enregistrement", - "onBy": "{{name}} a démarré l'enregistrement", - "pending": "Enregistrement de la réunion en préparation…", - "rec": "REC", - "serviceDescription": "Votre enregistrement sera sauvegardé par le service d'enregistrement", - "serviceName": "Service d'enregistrement", - "signIn": "Se connecter", - "signOut": "Se déconnecter", - "title": "Enregistrement", - "unavailable": "Oups! Le {{serviceName}} n'est pas disponible pour le moment. Nous nous efforçons de régler le problème. Veuillez réessayer plus tard.", - "unavailableTitle": "Enregistrement non disponible" - }, - "sectionList": { - "pullToRefresh": "Tirer pour rafraîchir" - }, - "settings": { - "calendar": { - "about": "L'intégration de l'agenda de {{appName}} est utilisée pour accéder en toute sécurité à votre agenda pour qu'il puisse lire les événements à venir.", - "disconnect": "Déconnexion", - "microsoftSignIn": "Se connecter avec Microsoft", - "signedIn": "Accès aux événements de votre agenda en cours pour {{email}}. Cliquez sur le bouton de déconnexion ci-dessous pour terminer l'accès aux événements d'agenda.", - "title": "Calendrier" - }, - "devices": "Dispositifs", - "followMe": "Tous les participants me suivent", - "language": "Langue", - "loggedIn": "Connecté en tant que {{name}}", - "moderator": "Modérateur", - "more": "Plus", - "name": "Nom", - "noDevice": "Aucun", - "selectAudioOutput": "Sortie audio", - "selectCamera": "Caméra", - "selectMic": "Micro", - "startAudioMuted": "Tous les participants débutent en sourdine", - "startVideoMuted": "Tous les participants débutent masqués", - "title": "Paramètres" - }, - "settingsView": { - "advanced": "Avancé", - "alertOk": "OK", - "alertTitle": "Alerte", - "alertURLText": "L'URL de serveur saisi n'est pas valide", - "buildInfoSection": "Information de version", - "conferenceSection": "Conférence", - "disableCallIntegration": "Désactiver l'intégration d'appels native", - "disableP2P": "Désactiver le mode pair à pair", - "displayName": "Nom d'affichage", - "email": "Courriel", - "header": "Paramètres", - "profileSection": "Profil", - "serverURL": "URL du serveur", - "showAdvanced": "Afficher les paramètres avancés", - "startWithAudioMuted": "Démarrer avec l'audio en sourdine", - "startWithVideoMuted": "Démarrer avec la vidéo en sourdine", - "version": "Version" - }, - "share": { - "dialInfoText": "\n\n=====\n\nVoulez-vous appeler depuis votre téléphone ?\n\n{{defaultDialInNumber}}Voici la liste des numéros d'appels pour cette réunion :\n{{dialInfoPageUrl}}", - "mainText": "Cliquez sur ce lien pour rejoindre la réunion :\n{{roomUrl}}" - }, - "speaker": "Intervenant", - "speakerStats": { - "hours": "{{count}} h", - "minutes": "{{count}} min", - "name": "Nom", - "search": "Recherche", - "searchHint": "Recherche des participants", - "seconds": "{{count}} s", - "speakerStats": "Statistiques d'intervenant", - "speakerTime": "Temps d'intervention" - }, - "startupoverlay": { - "policyText": " ", - "title": "{{app}} doit utiliser votre micro et votre caméra." - }, - "suspendedoverlay": { - "rejoinKeyTitle": "Rejoindre à nouveau", - "text": "Appuyez sur le bouton Rejoindre pour vous reconnecter.", - "title": "Votre appel vidéo a été interrompu parce que cet ordinateur est tombé en veille." - }, - "toolbar": { - "Settings": "Paramètres", - "accessibilityLabel": { - "Settings": "Basculement des paramètres", - "audioOnly": "Basculement du mode audio uniquement", - "audioRoute": "Sélectionner le dispositif audio", - "callQuality": "Gestion de la qualité d'appel", - "cc": "Basculement des sous-titres", - "chat": "Basculement de la fenêtre de clavardage", - "document": "Basculement du document partagé", - "download": "", - "feedback": "Laisser un commentaire", - "fullScreen": "Basculement de l'affichage plein écran", - "hangup": "Quitter l'appel", - "help": "", - "invite": "Inviter des personnes", - "kick": "Expulser le participant", - "localRecording": "Basculement des commandes d'enregistrement local", - "lockRoom": "Basculement du mot de passe de la réunion", - "moreActions": "Basculement du menu d'actions supplémentaires", - "moreActionsMenu": "Menu d'actions supplémentaires", - "mute": "Basculement de la sourdine", - "pip": "Basculement du mode image dans l'image", - "privateMessage": "", - "profile": "Modifier votre profil", - "raiseHand": "Basculement de la main levée", - "recording": "Basculement de l'enregistrement", - "remoteMute": "Mettre le participant en sourdine", - "shareRoom": "Inviter quelqu'un", - "shareYourScreen": "Basculement du partage d'écran", - "sharedvideo": "Basculement du partage de vidéo", - "shortcuts": "Basculement des raccourcis", - "show": "", - "speakerStats": "Basculement des statistiques d'intervenant", - "tileView": "Basculement de l'affichage mosaïque", - "toggleCamera": "Basculement de la caméra", - "videoblur": "Alterner le brouillage vidéo", - "videomute": "Basculement de la sourdine vidéo" - }, - "addPeople": "Ajouter des personnes à votre appel", - "audioOnlyOff": "Désactiver le mode bande passante faible", - "audioOnlyOn": "Activer le mode bande passante faible", - "audioRoute": "Sélectionner le dispositif audio", - "authenticate": "Authentification", - "callQuality": "Gestion de la qualité d'appel", - "chat": "Ouvrir / Fermer le clavardage", - "closeChat": "Fermer le clavardage", - "documentClose": "Fermer le document partagé", - "documentOpen": "Ouvrir le document partagé", - "download": "Télécharger nos applications", - "enterFullScreen": "Afficher le mode plein écran", - "enterTileView": "Passer à l'affichage mosaïque", - "exitFullScreen": "Quitter le mode plein écran", - "exitTileView": "Quitter l'affichage mosaïque", - "feedback": "Laisser un commentaire", - "hangup": "Quitter", - "help": "Aide", - "invite": "Inviter des personnes", - "login": "Connexion", - "logout": "Déconnexion", - "lowerYourHand": "Abaisser votre main", - "moreActions": "Plus d'actions", - "mute": "Activer / Réactiver le son", - "noAudioSignalDesc": "Si vous n'avez pas délibérément coupé le son des paramètres du système ou du matériel, envisagez de changer le périphérique.", - "noAudioSignalDescSuggestion": "Si vous n'avez pas délibérément coupé le son des paramètres du système ou du matériel, pensez à utiliser le périphérique suivant :", - "noAudioSignalTitle": "Il n'y a pas d'entrée provenant de votre micro !", - "openChat": "Ouvrir le clavardage", - "pip": "Passer en mode image dans l'image", - "privateMessage": "Envoyer un message privé", - "profile": "Modifier votre profil", - "raiseHand": "Lever / Abaisser votre main", - "raiseYourHand": "Lever votre main", - "shareRoom": "Inviter quelqu'un", - "sharedvideo": "Partager une vidéo", - "shortcuts": "Voir les raccourcis", - "speakerStats": "Statistiques d'intervenant", - "startScreenSharing": "Démarrer le partage d'écran", - "startSubtitles": "Activer les sous-titres", - "startvideoblur": "Brouiller mon arrière plan", - "stopScreenSharing": "Arrêter le partage d'écran", - "stopSharedVideo": "Arrêter la vidéo", - "stopSubtitles": "Désactiver les sous-titres", - "stopvideoblur": "Désactiver le brouillage d'arrière-plan", - "talkWhileMutedPopup": "Vous essayez de parler? Vous êtes en sourdine.", - "tileViewToggle": "Basculement de l'affichage mosaïque", - "toggleCamera": "Basculement de la caméra", - "videomute": "Démarrer / Arrêter la caméra" - }, - "transcribing": { - "ccButtonTooltip": "Activer / Désactiver les sous-titres", - "error": "Échec de la transcription. Veuillez réessayer.", - "expandedLabel": "La transcription est actuellement activée", - "failedToStart": "Échec du démarrage de la transcription", - "labelToolTip": "La réunion est transcrite", - "off": "La transcription est arrêtée", - "pending": "Préparation de la transcription de la réunion en cours…", - "start": "Activer l'affichage des sous-titres", - "stop": "Désactiver l'affichage des sous-titres", - "tr": "PI" - }, - "userMedia": { - "androidGrantPermissions": "Sélectionner Autoriser lorsque votre navigateur vous demande l'autorisation.", - "chromeGrantPermissions": "Sélectionner Autoriser lorsque votre navigateur vous demande l'autorisation.", - "edgeGrantPermissions": "Sélectionner Oui lorsque votre navigateur demande l'autorisation.", - "electronGrantPermissions": "Veuillez accorder l'autorisation d'utiliser votre caméra et votre micro", - "firefoxGrantPermissions": "Sélectionner Partager le dispositif sélectionné lorsque votre navigateur demande l'autorisation.", - "iexplorerGrantPermissions": "Sélectionner OK lorsque votre navigateur demande l'autorisation.", - "nwjsGrantPermissions": "Veuillez accorder l'autorisation d'utiliser votre caméra et votre micro", - "operaGrantPermissions": "Sélectionner Autoriser lorsque votre navigateur vous demande l'autorisation.", - "react-nativeGrantPermissions": "Sélectionner Autoriser lorsque votre navigateur vous demande l'autorisation.", - "safariGrantPermissions": "Sélectionner OK lorsque votre navigateur demande l'autorisation." - }, - "videoSIPGW": { - "busy": "Libération des ressources en cours. Veuillez réessayer dans quelques minutes.", - "busyTitle": "Le service de Salle est actuellement occupé.", - "errorAlreadyInvited": "{{displayName}} a déjà été invité", - "errorInvite": "La conférence n'est pas encore configurée. Veuillez réessayer plus tard.", - "errorInviteFailed": "Nous nous efforçons de régler ce problème. Veuillez réessayer plus tard.", - "errorInviteFailedTitle": "L'invitation de {{displayName}} a échoué", - "errorInviteTitle": "Erreur lors de l'invitation de la salle", - "pending": "{{displayName}} a été invité" - }, - "videoStatus": { - "audioOnly": "AUD", - "audioOnlyExpanded": "Vous êtes en mode bande passante faible. Dans ce mode, vous ne recevrez que le partage audio et le partage d’écran.", - "callQuality": "Qualité d'appel", - "hd": "HD", - "hdTooltip": "Visionnement de vidéo en haute définition", - "highDefinition": "Haute définition", - "labelTooiltipNoVideo": "Aucune vidéo", - "labelTooltipAudioOnly": "Mode bande passante faible activé", - "ld": "LD", - "ldTooltip": "Visionnement de vidéo en basse définition", - "lowDefinition": "Basse définition", - "onlyAudioAvailable": "Seulement l'audio est disponible", - "onlyAudioSupported": "Ce navigateur prend seulement l'audio en charge.", - "sd": "SD", - "sdTooltip": "Visionnement de vidéo en définition standard", - "standardDefinition": "Définition standard" - }, - "videothumbnail": { - "domute": "Discrétion", - "flip": "Actionner", - "kick": "Expulser", - "moderator": "Modérateur", - "mute": "Le membre est en sourdine", - "muted": "Discrétion", - "remoteControl": "Contrôle à distance", - "show": "Afficher en premier plan", - "videomute": "Le membre a arrêté la caméra" - }, - "welcomepage": { - "accessibilityLabel": { - "join": "Toucher pour rejoindre", - "roomname": "Entrer le nom de la salle" - }, - "appDescription": "Profitez de la conversation vidéo avec toute votre équipe. Allez-y, invitez tous ceux que vous connaissez. {{app}} est une solution 100 % libre de conférence vidéo entièrement chiffrée que vous pouvez utiliser en tout temps et gratuitement, sans avoir besoin de compte.", - "audioVideoSwitch": { - "audio": "Téléphone", - "video": "Vidéo" - }, - "calendar": "Calendrier", - "connectCalendarButton": "Connecter votre agenda", - "connectCalendarText": "Connectez-vous à votre calendrier pour afficher toutes les réunions {{app}}. Ajoutez également les réunions de {{provider}} à votre calendrier et démarrez-les d'un simple clic.", - "enterRoomTitle": "Démarrer une nouvelle réunion", - "go": "Aller", - "goSmall": "Aller", - "info": "Ret. arr.", - "join": "CRÉER / REJOINDRE", - "privacy": "Confidentialité", - "recentList": "Récent", - "recentListDelete": "Supprimer", - "recentListEmpty": "Votre liste récente est actuellement vide. Clavardez avec votre équipe et vous y trouverez toutes vos réunions récentes.", - "reducedUIText": "Bienvenue sur {{app}}!", - "roomNameAllowedChars": "Le nom de la réunion ne doit contenir aucun de ces caractères : ?, &, :, ', \", %, #.", - "roomname": "Entrer le nom de la salle", - "roomnameHint": "Entrez le nom ou l'URL de la salle que vous voulez rejoindre. Vous pouvez inventer un nom, mais assurez-vous de le partager avec les participants de la réunion pour qu'ils utilisent le même nom.", - "sendFeedback": "Envoyer un commentaire", - "terms": "Termes", - "title": "Conférence vidéo sécurisée, pleinement fonctionnelle et entièrement gratuite" - } -} diff --git a/lang/main-gl.json b/lang/main-gl.json index e3515768fa09..0571a84e69ae 100644 --- a/lang/main-gl.json +++ b/lang/main-gl.json @@ -80,7 +80,7 @@ "DISCONNECTED": "Desconectado", "DISCONNECTING": "Desconectando", "ERROR": "Erro", - "RECONNECTING": "Produciuse un problema na rede. Reconectando..." + "RECONNECTING": "Produciuse un problema na rede. Reconectando…" }, "connectionindicator": { "address": "Enderezo:", @@ -465,7 +465,7 @@ "calling": "Chamando…", "connected": "Conectado", "connecting": "Conectando…", - "connecting2": "Conectando*...", + "connecting2": "Conectando*…", "disconnected": "Desconectado", "expired": "Expirou", "ignored": "Ignorado", @@ -681,16 +681,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Seleccionar Permitir cando o seu navegador pida permisos.", - "chromeGrantPermissions": "Seleccionar Permitir cando o seu navegador pida permisos.", - "edgeGrantPermissions": "Seleccionar Si cando o seu navegador pida permisos.", - "electronGrantPermissions": "Conceda permisos para utilizar a súa cámara e micrófono", - "firefoxGrantPermissions": "Seleccionar Compartir o dispositivo seleccionado cando o navegador pida permisos.", - "iexplorerGrantPermissions": "Seleccionar Aceptar cando o seu navegador lle pida permisos. ", - "nwjsGrantPermissions": "Conceda permisos para utilizar a súa cámara e micrófono", - "operaGrantPermissions": "Seleccionar Permitir cando o seu navegador pida permisos.", - "react-nativeGrantPermissions": "Seleccionar Permitir cando o seu navegador pida permisos.", - "safariGrantPermissions": "Seleccionar Aceptar cando o seu navegador lle pida permisos. " + "grantPermissions": "Conceda permisos para utilizar a súa cámara e micrófono." }, "videoSIPGW": { "busy": "Estamos liberando recursos. Ténteo de novo nuns minutos.", diff --git a/lang/main-he.json b/lang/main-he.json index 80bce9093827..9289eab65c7e 100644 --- a/lang/main-he.json +++ b/lang/main-he.json @@ -9,7 +9,7 @@ "loading": "מחפש אנשים ומספרי טלפון", "loadingNumber": "מאמת מספר טלפון", "loadingPeople": "מחפש אנשים להזמין", - "noResults": "לא נמצאו תואצות מתאימות", + "noResults": "לא נמצאו תוצאות מתאימות", "noValidNumbers": "אנא הזן מסםר טלפון", "searchNumbers": "הוסף מספר טלפון", "searchPeople": "חפש אנשים", @@ -47,7 +47,7 @@ }, "chat": { "error": "שגיאה: ההודעה שלך \"{{originalText}}\" לא נשלחה. סיבה: {{error}}", - "fieldPlaceHolder": "הקלד הודעתך כאו", + "fieldPlaceHolder": "הקלד הודעתך כאן", "messageTo": "הודעה פרטית אל {{recipient}}", "messagebox": "הקלד הודעה", "nickname": { @@ -68,7 +68,7 @@ "installExtensionText": "התקן את התוסף לשילוב Google Calendar ו-Office 365" }, "connectingOverlay": { - "joiningRoom": "מחבר אותך למפגש שלך..." + "joiningRoom": "מחבר אותך למפגש שלך…" }, "connection": { "ATTACHED": "צרופה", @@ -80,9 +80,9 @@ "DISCONNECTED": "לא מחובר", "DISCONNECTING": "מתנתק", "ERROR": "שגיאה", - "FETCH_SESSION_ID": "השגת מזהה הפעלה...", + "FETCH_SESSION_ID": "השגת מזהה הפעלה…", "GET_SESSION_ID_ERROR": "התקבלה שגיאה מזהה הפעלה: {{code}}", - "GOT_SESSION_ID": "השגת מזהה הפעלה... בוצע", + "GOT_SESSION_ID": "השגת מזהה הפעלה… בוצע", "LOW_BANDWIDTH": "הווידאו עבור {{displayName}} כבה כדי לשמור על רוחב הפס" }, "connectionindicator": { @@ -127,7 +127,7 @@ "downloadApp": "הורד את היישום", "launchWebButton": "הפעל ברשת", "openApp": "מתחבר ליישום", - "title": "מפעיל את הפגישה שלך ב{{app}}...", + "title": "מפעיל את הפגישה שלך ב{{app}}…", "tryAgainButton": "נסה שוב במחשב" }, "defaultLink": "למשל {{url}}", @@ -156,7 +156,7 @@ "Share": "שתף", "Submit": "שלח", "WaitForHostMsg": "הועידה טרם החלה. אם אתה המארח אז בצע אימות. אחרת, אנא המתן שהמארח יגיע.", - "WaitingForHost": "ממתין למארח ...", + "WaitingForHost": "ממתין למארח…", "Yes": "כן", "accessibilityLabel": { "liveStreaming": "שידור חי" @@ -173,9 +173,9 @@ "cameraUnknownError": "לא ניתן להשתמש במצלמה מסיבה לא ידועה.", "cameraUnsupportedResolutionError": "המצלמה שלך אינה תומכת ברזולוציית וידאו הנדרשת.", "close": "סגור", - "conferenceDisconnectMsg": "יתכן שתרצה לבדוק את חיבור הרשת שלך, מתחבר מחדש בעוד {{seconds}} שניות...", + "conferenceDisconnectMsg": "יתכן שתרצה לבדוק את חיבור הרשת שלך, מתחבר מחדש בעוד {{seconds}} שניות…", "conferenceDisconnectTitle": "נותקת.", - "conferenceReloadMsg": "אנו מנסים לתקן זאת, מתחבר מחדש בעוד {{seconds}} שניות...", + "conferenceReloadMsg": "אנו מנסים לתקן זאת, מתחבר מחדש בעוד {{seconds}} שניות…", "conferenceReloadTitle": "לצערנו משהו השתבש.", "confirm": "אשר", "confirmNo": "לא", @@ -383,7 +383,7 @@ "errorLiveStreamNotEnabled": "הזרמה בשידור חי אינו מופעל ב-{{email}}. אנא אפשר הזרמה בשידור חי או היכנס לחשבון עם שידור חי מופעל", "expandedOff": "השידור החי פסק", "expandedOn": "המפגש הזה מוזרם כעת ליוטיוב.", - "expandedPending": "השידור החי עומד להתחיל...", + "expandedPending": "השידור החי עומד להתחיל…", "failedToStart": "ההפעלה של השידור החי כשלה", "getStreamKeyManually": "לא הצלחנו להשיג הזרמה של שידור חי, נסה להשיג את מפתח שידור החי מיוטיוב.", "googlePrivacyPolicy": "מדיניות הפרטיות של גוגל", @@ -392,7 +392,7 @@ "offBy": "{{name}} הפסיק את השידור החי", "on": "שידור חי", "onBy": "{{name}} הפעיל את השידור החי", - "pending": "מתחיל שידור חי...", + "pending": "מתחיל שידור חי…", "serviceName": "שירותי שידור חי", "signIn": "התחבר באמצעות גוגל", "signInCTA": "התחבר או הזן מפתח שידור חי מיוטיוב.", @@ -442,7 +442,7 @@ "me": "אני", "notify": { "OldElectronAPPTitle": "פגיעות אבטחה!", - "connectedOneMember": "{{name}} הצטרף למפדש", + "connectedOneMember": "{{name}} הצטרף למפגש", "connectedThreePlusMembers": "{{name}} ו-{{count}} אחרים הצטרפו למפגש", "connectedTwoMembers": "{{first}} ו-{{second}} הצטרפו למפגש", "disconnected": "מנותק", @@ -471,7 +471,7 @@ "somebody": "מישהו", "startSilentDescription": "הצטרף שוב לפגישה כדי לאפשר שמע", "startSilentTitle": "הצטרפת ללא פלט שמע!", - "suboptimalExperienceDescription": "אופ... אנו חוששים שהחוויה שלך עם {{appName}} לא תהיה נהדרת כאן. אנו מחפשים דרכים לשפר זאת, אך עד אז, נסה להשתמש באחד מהדפדפנים הנתמכים לחלוטין.", + "suboptimalExperienceDescription": "אופ… אנו חוששים שהחוויה שלך עם {{appName}} לא תהיה נהדרת כאן. אנו מחפשים דרכים לשפר זאת, אך עד אז, נסה להשתמש באחד מהדפדפנים הנתמכים לחלוטין.", "suboptimalExperienceTitle": "אזהרת דפדפן", "unmute": "בטל השתקה" }, @@ -485,17 +485,17 @@ "poweredby": "מופעל על ידי", "presenceStatus": { "busy": "עסוק", - "calling": "מחייג...", + "calling": "מחייג…", "connected": "מחובר", - "connecting": "מתחבר...", - "connecting2": "מתחבר*...", + "connecting": "מתחבר…", + "connecting2": "מתחבר*…", "disconnected": "מנותק", "expired": "פג תוקף", "ignored": "התעלמו", - "initializingCall": "מאתחל שיחה...", + "initializingCall": "מאתחל שיחה…", "invited": "הוזמנו", "rejected": "דחו", - "ringing": "מצלצל..." + "ringing": "מצלצל…" }, "profile": { "setDisplayNameLabel": "הגדר שם תצוגה", @@ -513,7 +513,7 @@ "error": "ההקלטה כשלה. אנא נסה שוב.", "expandedOff": "ההקלטה הופסקה", "expandedOn": "הפגישה מתועדת כעת.", - "expandedPending": "ההקלטה עומדת להתחיל...", + "expandedPending": "ההקלטה עומדת להתחיל…", "failedToStart": "התחלת הקלטה כשלה", "fileSharingdescription": "שתף את ההקלטה עם משתתפי הפגישה", "live": "חי", @@ -522,7 +522,7 @@ "offBy": "{{name}} עצר את ההקלטה", "on": "מקליט", "onBy": "{{name}} הפעיל את ההקלטה", - "pending": "מתכונן להקליט את הפגישה...", + "pending": "מתכונן להקליט את הפגישה…", "rec": "מקליט", "serviceDescription": "ההקלטה שלך תישמר על ידי שירותי ההקלטה", "serviceName": "שירותי הקלטה", @@ -707,22 +707,13 @@ "failedToStart": "הפעלת תמלול כשלה", "labelToolTip": "הפגישה מתומללת", "off": "התמלול פסק", - "pending": "מתכונן לתמלול הפגישה...", + "pending": "מתכונן לתמלול הפגישה…", "start": "התחל הצגת כתוביות", "stop": "עצור הצגת כתוביות", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "בחר אשר כאשר הדפדפן שלך מבקש הרשאות.", - "chromeGrantPermissions": "בחר אשר כאשר הדפדפן שלך מבקש הרשאות.", - "edgeGrantPermissions": "בחר כן כאשר הדפדפן שלך מבקש הרשאות.", - "electronGrantPermissions": "אנא הענק הרשאות להשתמש במצלמה ובמיקרופון שלך", - "firefoxGrantPermissions": "בחר שתף התקן נבחר כאשר הדפדפן שלך מבקש הרשאות.", - "iexplorerGrantPermissions": "בחר אישור כאשר הדפדפן שלך מבקש הרשאות.", - "nwjsGrantPermissions": "אנא הענק הרשאות להשתמש במצלמה ובמיקרופון שלך", - "operaGrantPermissions": "בחר אשר כאשר הדפדפן שלך מבקש הרשאות.", - "react-nativeGrantPermissions": "בחר אשר כאשר הדפדפן שלך מבקש הרשאות.", - "safariGrantPermissions": "בחר אישור כאשר הדפדפן שלך מבקש הרשאות." + "grantPermissions": "אנא הענק הרשאות להשתמש במצלמה ובמיקרופון שלך." }, "videoSIPGW": { "busy": "אנו עובדים על שחרור משאבים. אנא נסה שוב בעוד מספר דקות.", diff --git a/lang/main-hi.json b/lang/main-hi.json index e4d89f82ee01..23138a032618 100644 --- a/lang/main-hi.json +++ b/lang/main-hi.json @@ -85,7 +85,7 @@ "installExtensionText": ",गूगल कैलेंडर और ऑफिस 365 एकीकरण के लिए एक्सटेंशन इंस्टॉल करें" }, "connectingOverlay": { - "joiningRoom": "आपको आपकी मीटिंग से कनेक्ट किया जा रहा है ..." + "joiningRoom": "आपको आपकी मीटिंग से कनेक्ट किया जा रहा है…" }, "connection": { "ATTACHED": "संलग्न", @@ -97,9 +97,9 @@ "DISCONNECTED": "संपर्क विफ़ल ", "DISCONNECTING": "संपर्क हटाया जा रहा ", "ERROR": "त्रुटि", - "FETCH_SESSION_ID": "सत्र-आईडी प्राप्त की जा रही हैं ...", + "FETCH_SESSION_ID": "सत्र-आईडी प्राप्त की जा रही हैं …", "GET_SESSION_ID_ERROR": "सत्र-आईडी त्रुटि प्राप्त करें: {{code}}", - "GOT_SESSION_ID": "सत्र-आईडी प्राप्त की जा रही हैं... पूर्ण", + "GOT_SESSION_ID": "सत्र-आईडी प्राप्त की जा रही हैं… पूर्ण", "LOW_BANDWIDTH": "बैंडविड्थ को बचाने के लिए {{displayName}} का वीडियो बंद कर दिया गया है" }, "connectionindicator": { @@ -152,7 +152,7 @@ "ifHaveApp": "यदि आपके पास पहले से ही ऐप है:", "joinInApp": "ऐप का उपयोग करके इस मीटिंग में शामिल हों", "launchWebButton": "वेब में लॉन्च करे", - "title": "{{app}} में आपकी मीटिंग शुरू की जा रही हैं ...", + "title": "{{app}} में आपकी मीटिंग शुरू की जा रही हैं…", "tryAgainButton": "डेस्कटॉप में फिर से प्रयास करें" }, "defaultLink": "उदाहरण {{url}}", @@ -181,7 +181,7 @@ "Share": "Share", "Submit": "सबमिट करें", "WaitForHostMsg": "सम्मेलन अभी तक शुरू नहीं हुआ है। यदि आप मेजबान हैं तो कृपया प्रमाणित करें। अन्यथा, कृपया मेजबान के आने की प्रतीक्षा करें।", - "WaitingForHostTitle": "होस्ट की प्रतीक्षा कर रहा है ...", + "WaitingForHostTitle": "होस्ट की प्रतीक्षा कर रहा है…", "Yes": "हाँ", "accessibilityLabel": { "liveStreaming": "सीधा प्रसारण" @@ -192,7 +192,7 @@ "alreadySharedVideoTitle": "एक समय में केवल एक साझा वीडियो की अनुमति है", "applicationWindow": "एप्लिकेशन विंडो", "authenticationRequired": "प्रमाणीकरण आवश्यक है", - "cameraConstraintFailedError": "Your camera does not satisfy some of the required constraints.", + "cameraConstraintFailedError": "आपका कैमरा आवश्यक बाधाओं में से कुछ को पूरा नहीं करता है।", "cameraNotFoundError": "कैमरा नहीं मिला।", "cameraNotSendingData": "हम आपके कैमरे का उपयोग करने में असमर्थ हैं। कृपया जांचें कि क्या कोई अन्य एप्लिकेशन इस डिवाइस का उपयोग तो नहीं कर रहा है, सेटिंग मेनू से किसी अन्य डिवाइस का चयन करें या एप्लिकेशन को फिर से लोड करने का प्रयास करें।", "cameraNotSendingDataTitle": "कैमरा उपयोग करने में असमर्थ", @@ -201,9 +201,9 @@ "cameraUnknownError": "अज्ञात कारण की वजह से कैमरे का उपयोग नहीं किया जा सकता है।", "cameraUnsupportedResolutionError": "आपका कैमरा आवश्यक वीडियो रिज़ॉल्यूशन का समर्थन नहीं करता है।", "close": "बंद करें", - "conferenceDisconnectMsg": "आप अपने नेटवर्क कनेक्शन की जांच कर सकते है। . {{seconds}} सेकंड में पुनः कनेक्ट किया जायेंगा ...", + "conferenceDisconnectMsg": "आप अपने नेटवर्क कनेक्शन की जांच कर सकते है। . {{seconds}} सेकंड में पुनः कनेक्ट किया जायेंगा…", "conferenceDisconnectTitle": "आपको डिस्कनेक्ट कर दिया गया है।", - "conferenceReloadMsg": "हम इसे ठीक करने का प्रयास कर रहे हैं। {{seconds}} सेकंड में पुनः कनेक्ट कर रहे हैं ...", + "conferenceReloadMsg": "हम इसे ठीक करने का प्रयास कर रहे हैं। {{seconds}} सेकंड में पुनः कनेक्ट कर रहे हैं…", "conferenceReloadTitle": "दुर्भाग्य से, कुछ गलत हो गया।", "confirm": "पुष्टि करें", "confirmNo": "नहीं", @@ -222,7 +222,7 @@ "e2eeWarning": "चेतावनी: इस मीटिंग में सभी प्रतिभागियों के पास एंड-टू-एंड एन्क्रिप्शन के लिए समक्षता नहीं है। यदि आप इसे सक्षम करते हैं तो वे आपको देखने और सुनने में सक्षम नहीं होंगे।", "enterDisplayName": "कृपया यहाँ अपना नाम लिखें", "error": "त्रुटि", - "gracefulShutdown": "Our service is currently down for maintenance. Please try again later.", + "gracefulShutdown": "हमारी सेवा वर्तमान में रखरखाव के लिए बंद है। कृपया बाद में पुनः प्रयास करें।", "grantModeratorDialog": "क्या आप वाकई इस प्रतिभागी को एक मध्यस्थ बनाना चाहते हैं?", "grantModeratorTitle": "मध्यस्थ स्वीकृती दे ", "incorrectPassword": "गलत उपयोगकर्ता नाम या पासवर्ड", @@ -230,7 +230,7 @@ "internalError": "उफ़! कुछ गड़बड़ हो गई। निम्नलिखित त्रुटि हुई: {{error}}", "internalErrorTitle": "आंतरिक त्रुटि", "kickMessage": "आप अधिक जानकारी के लिए {{participantDisplayName}} से संपर्क कर सकते हैं।", - "kickParticipantButton": "Kick", + "kickParticipantButton": "निकालें", "kickParticipantDialog": "क्या आप वाकई इस प्रतिभागी को निकलना चाहते हैं?", "kickParticipantTitle": "इस प्रतिभागी को निकाले?", "kickTitle": "अरे! {{participantDisplayName}} ने आपको मीटिंग से बाहर कर दिया", @@ -245,7 +245,7 @@ "logoutTitle": "लॉग आउट ", "maxUsersLimitReached": "अधिकतम प्रतिभागियों की सीमा पूरी हो चुकी है. कृपया बैठक के मालिक से संपर्क करें या बाद में पुनः प्रयास करें!!", "maxUsersLimitReachedTitle": "अधिकतम प्रतिभागियों सीमा पार हो गई", - "micConstraintFailedError": "Your microphone does not satisfy some of the required constraints.", + "micConstraintFailedError": "आपका माइक्रोफ़ोन आवश्यक प्रतिबंधों को पूरा नहीं करता।", "micNotFoundError": "माइक्रोफोन नहीं मिला।", "micNotSendingData": "अपने माइक को अनम्यूट करने और इसके स्तर को समायोजित करने के लिए अपने कंप्यूटर की सेटिंग पर जाएं", "micNotSendingDataTitle": "आपका माइक आपकी सिस्टम सेटिंग्स द्वारा मौन है", @@ -285,18 +285,18 @@ "remoteControlDeniedMessage": "{{user}} ने आपका रिमोट कंट्रोल अनुरोध अस्वीकार कर दिया!", "remoteControlErrorMessage": "{{user}}से रिमोट कंट्रोल की अनुमति का अनुरोध करते समय एक त्रुटि हुई!", "remoteControlRequestMessage": "क्या आप {{user}} को दूर से अपने डेस्कटॉप को नियंत्रित करने की अनुमति देंगे?", - "remoteControlShareScreenWarning": "Note that if you press \"Allow\" you will share your screen!", + "remoteControlShareScreenWarning": "ध्यान दें कि यदि आप \"अनुमति दें\" दबाते हैं, तो आप अपनी स्क्रीन साझा करेंगे!", "remoteControlStopMessage": "रिमोट कंट्रोल सत्र समाप्त हो गया!", "remoteControlTitle": "रिमोट डेस्कटॉप कंट्रोल", "removePassword": "निकालें $t(lockRoomPassword)", "removeSharedVideoMsg": "क्या आप वाकई अपने साझा किए गए वीडियो को निकालना चाहते हैं?", "removeSharedVideoTitle": "साझा किया गया वीडियो निकालें", - "reservationError": "Reservation system error", + "reservationError": "आरक्षण प्रणाली में त्रुटि", "reservationErrorMsg": "Error code: {{code}}, message: {{msg}}", "retry": "पुनः प्रयास करें", - "screenSharingAudio": "Share audio", + "screenSharingAudio": "ऑडियो साझा करें", "screenSharingFailed": "उफ़! कुछ गड़बड़ हो गई, हम स्क्रीन शेयरिंग शुरू करने में सक्षम नहीं थे!", - "screenSharingFailedTitle": "Screen sharing failed!", + "screenSharingFailedTitle": "स्क्रीन साझा करना विफल हुआ!", "screenSharingPermissionDeniedError": "उफ़! आपकी स्क्रीन शेयरिंग अनुमतियों में कुछ गड़बड़ हो गई है। कृपया पुनः लोड करें और पुनः प्रयास करें।", "sendPrivateMessage": "आपने हाल ही में एक निजी संदेश प्राप्त किया है। क्या आप उसका निजी रूप से जवाब देने का इरादा रखते हैं? या आप अपना संदेश समूह को भेजना चाहते हैं?", "sendPrivateMessageCancel": "समूह को भेजें", @@ -304,7 +304,7 @@ "sendPrivateMessageTitle": "निजी तौर पर भेजें?", "serviceUnavailable": "सेवा अनुपलब्ध", "sessTerminated": "कॉल समाप्त", - "sessionRestarted": "Call restarted because of a connection issue", + "sessionRestarted": "कनेक्शन समस्या के कारण कॉल पुनः प्रारंभ की गई", "shareVideoLinkError": "कृपया एक सही यूट्यूब लिंक प्रदान करें।.", "shareVideoTitle": "एक वीडियो साझा करें", "shareYourScreen": "अपनी स्क्रीन साझा करें", @@ -313,10 +313,10 @@ "startRecording": "रिकॉर्डिंग प्रारंभ करें", "startRemoteControlErrorMessage": "रिमोट कंट्रोल सत्र शुरू करने की कोशिश करते समय एक त्रुटि हुई!", "stopLiveStreaming": "लाइव स्ट्रीम बंद करें", - "stopRecording": "Stop recording", + "stopRecording": "रिकॉर्डिंग बंद करें", "stopRecordingWarning": "क्या आप वाकई रिकॉर्डिंग को रोकना चाहते हैं?", "stopStreamingWarning": "क्या आप वाकई लाइव स्ट्रीमिंग को रोकना चाहते हैं?", - "streamKey": "Live stream key", + "streamKey": "लाइव स्ट्रीम कुंजी", "thankYou": " {{appName}} का उपयोग करने के लिए धन्यवाद!", "token": "टोकन", "tokenAuthFailed": "क्षमा करें, आपको इस कॉल में शामिल होने की अनुमति नहीं है।", @@ -336,7 +336,7 @@ "labelToolTip": "इस कॉल पर ऑडियो और वीडियो संचार एंड-टू-एंड एन्क्रिप्टेड है" }, "embedMeeting": { - "title": "Embed this meeting" + "title": "इस बैठक को एम्बेड करें" }, "feedback": { "average": "औसत", @@ -381,7 +381,7 @@ "moreNumbers": "अधिक संख्या", "noNumbers": "कोई डायल-इन नंबर नहीं।", "noPassword": "कोई नहीं", - "noRoom": "No room was specified to dial-in into.", + "noRoom": "डायल-इन करने के लिए कोई कक्ष निर्दिष्ट नहीं किया गया।", "numbers": "डायल-इन नंबर", "password": "$t(lockRoomPasswordUppercase):", "title": "साझा करें", @@ -404,11 +404,11 @@ "keyboardShortcuts": { "focusLocal": "अपने वीडियो पर केंद्रित करें", "focusRemote": "किसी अन्य व्यक्ति के वीडियो पर केंद्रित करें", - "fullScreen": "View or exit full screen", + "fullScreen": "पूर्ण स्क्रीन देखें या बाहर निकलें", "keyboardShortcuts": "कीबोर्ड शॉर्टकट्स", "localRecording": "स्थानीय रिकॉर्डिंग नियंत्रण दिखाएं या छिपाएँ", "mute": "अपने माइक्रोफ़ोन को म्यूट या अनम्यूट करें", - "pushToTalk": "Push to talk", + "pushToTalk": "बोलने के लिए दबाएं", "raiseHand": "अपना हाथ उठाएँ या नीचे करें", "showSpeakerStats": "स्पीकर आंकड़े दिखाएं", "toggleChat": "चैट खोलें या बंद करें", @@ -418,39 +418,39 @@ "videoMute": "अपना कैमरा प्रारंभ या बंद करें" }, "liveStreaming": { - "busy": "We're working on freeing streaming resources. Please try again in a few minutes.", - "busyTitle": "All streamers are currently busy", - "changeSignIn": "Switch accounts.", - "choose": "Choose a live stream", - "chooseCTA": "Choose a streaming option. You're currently logged in as {{email}}.", - "enterStreamKey": "Enter your YouTube live stream key here.", - "error": "Live Streaming failed. Please try again.", - "errorAPI": "An error occurred while accessing your YouTube broadcasts. Please try logging in again.", - "errorLiveStreamNotEnabled": "Live Streaming is not enabled on {{email}}. Please enable live streaming or log into an account with live streaming enabled.", - "expandedOff": "The live streaming has stopped", - "expandedOn": "The meeting is currently being streamed to YouTube.", - "expandedPending": "The live streaming is being started...", - "failedToStart": "Live Streaming failed to start", - "getStreamKeyManually": "We weren’t able to fetch any live streams. Try getting your live stream key from YouTube.", - "googlePrivacyPolicy": "Google Privacy Policy", - "invalidStreamKey": "Live stream key may be incorrect.", - "limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.", - "limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.", - "off": "Live Streaming stopped", - "offBy": "{{name}} stopped the live streaming", - "on": "Live Streaming started", - "onBy": "{{name}} started the live streaming", - "pending": "Starting Live Stream...", - "serviceName": "Live Streaming service", - "signIn": "Sign in with Google", - "signInCTA": "Sign in or enter your live stream key from YouTube.", - "signOut": "Sign out", - "signedInAs": "You are currently signed in as:", - "start": "Start a live stream", - "streamIdHelp": "What's this?", - "title": "सीधा प्रसारण", - "unavailableTitle": "Live Streaming unavailable", - "youtubeTerms": "YouTube terms of services" + "busy": "हम स्ट्रीमिंग संसाधनों को मुक्त करने पर काम कर रहे हैं। कृपया कुछ मिनटों में पुनः प्रयास करें।", + "busyTitle": "सभी स्ट्रीमर वर्तमान में व्यस्त हैं", + "changeSignIn": "खाता बदलें।", + "choose": "एक लाइव स्ट्रीम चुनें", + "chooseCTA": "स्ट्रीमिंग विकल्प चुनें। आप वर्तमान में {{email}} के रूप में लॉग इन हैं।", + "enterStreamKey": "अपनी YouTube लाइव स्ट्रीम कुंजी यहाँ दर्ज करें।", + "error": "लाइव स्ट्रीमिंग विफल रही। कृपया पुनः प्रयास करें।", + "errorAPI": "आपके YouTube प्रसारण तक पहुँचने में त्रुटि हुई। कृपया पुनः लॉगिन करें।", + "errorLiveStreamNotEnabled": "{{email}} पर लाइव स्ट्रीमिंग सक्षम नहीं है। कृपया लाइव स्ट्रीमिंग सक्षम करें या ऐसे खाते में लॉग इन करें जिसमें लाइव स्ट्रीमिंग सक्षम हो।", + "expandedOff": "लाइव स्ट्रीमिंग बंद हो गई है", + "expandedOn": "बैठक वर्तमान में YouTube पर स्ट्रीम की जा रही है।", + "expandedPending": "लाइव स्ट्रीमिंग शुरू की जा रही है…", + "failedToStart": "लाइव स्ट्रीमिंग शुरू करने में विफल रहा", + "getStreamKeyManually": "हम कोई लाइव स्ट्रीम प्राप्त नहीं कर सके। कृपया YouTube से अपनी लाइव स्ट्रीम कुंजी प्राप्त करने का प्रयास करें।", + "googlePrivacyPolicy": "Google गोपनीयता नीति", + "invalidStreamKey": "लाइव स्ट्रीम कुंजी गलत हो सकती है।", + "limitNotificationDescriptionNative": "आपकी स्ट्रीमिंग {{limit}} मिनट तक सीमित होगी। असीमित स्ट्रीमिंग के लिए {{app}} आज़माएँ।", + "limitNotificationDescriptionWeb": "अधिक मांग के कारण आपकी स्ट्रीमिंग {{limit}} मिनट तक सीमित होगी। असीमित स्ट्रीमिंग के लिए {{app}} आज़माएँ।", + "off": "लाइव स्ट्रीमिंग बंद हो गई", + "offBy": "{{name}} ने लाइव स्ट्रीमिंग बंद कर दी", + "on": "लाइव स्ट्रीमिंग शुरू हो गई", + "onBy": "{{name}} ने लाइव स्ट्रीमिंग शुरू की", + "pending": "लाइव स्ट्रीम शुरू हो रही है…", + "serviceName": "लाइव स्ट्रीमिंग सेवा", + "signIn": "Google से साइन इन करें", + "signInCTA": "साइन इन करें या YouTube से अपनी लाइव स्ट्रीम कुंजी दर्ज करें।", + "signOut": "साइन आउट करें", + "signedInAs": "आप वर्तमान में इस रूप में साइन इन हैं:", + "start": "एक लाइव स्ट्रीम शुरू करें", + "streamIdHelp": "यह क्या है?", + "title": "लाइव स्ट्रीमिंग", + "unavailableTitle": "लाइव स्ट्रीमिंग उपलब्ध नहीं है", + "youtubeTerms": "YouTube सेवा की शर्तें" }, "lobby": { "allow": "अनुमति दें", @@ -467,10 +467,10 @@ "invalidPassword": "अमान्य पासवर्ड", "joinRejectedMessage": "आपका अनुरोध एक मॉडरेटर द्वारा अस्वीकार कर दिया गया.", "joinTitle": "मीटिंग में शामिल हों", - "joinWithPasswordMessage": "पासवर्ड के साथ जुड़ने की कोशिश कर रहा है, कृपया प्रतीक्षा करें...", + "joinWithPasswordMessage": "पासवर्ड के साथ जुड़ने की कोशिश कर रहा है, कृपया प्रतीक्षा करें…", "joiningMessage": "जैसे ही कोई आपके अनुरोध को स्वीकार करता है आप बैठक में शामिल हो जाएंगे", - "joiningTitle": "मीटिंग में शामिल होने के लिए कह रहा है...", - "joiningWithPasswordTitle": "पासवर्ड के साथ जुड़े...", + "joiningTitle": "मीटिंग में शामिल होने के लिए कह रहा है…", + "joiningWithPasswordTitle": "पासवर्ड के साथ जुड़े…", "knockButton": "जुड़ने के लिए कहें ", "knockTitle": "कोई व्यक्ति बैठक में शामिल होना चाहता है", "knockingParticipantList": "प्रतिभागी सूची दस्तक", @@ -481,38 +481,38 @@ "notificationLobbyEnabled": "लॉबी को {{originParticipantName}}द्वारा सक्षम किया गया", "notificationTitle": "लॉबी", "passwordField": "मीटिंग पासवर्ड दर्ज करें", - "passwordJoinButton": "Join", + "passwordJoinButton": "शामिल हों", "title": "लॉबी", "toggleLabel": "लॉबी सक्षम करें" }, "localRecording": { "clientState": { - "off": "Off", - "on": "On", - "unknown": "Unknown" + "off": "बंद", + "on": "चालू", + "unknown": "अज्ञात" }, - "dialogTitle": "Local Recording Controls", - "duration": "Duration", - "durationNA": "N/A", - "encoding": "Encoding", - "label": "LOR", - "labelToolTip": "Local recording is engaged", - "localRecording": "Local Recording", - "me": "Me", + "dialogTitle": "स्थानीय रिकॉर्डिंग नियंत्रण", + "duration": "अवधि", + "durationNA": "उपलब्ध नहीं", + "encoding": "एन्कोडिंग", + "label": "स्थानीय रिकॉर्डिंग", + "labelToolTip": "स्थानीय रिकॉर्डिंग सक्रिय है", + "localRecording": "स्थानीय रिकॉर्डिंग", + "me": "मैं", "messages": { - "engaged": "Local recording engaged.", - "finished": "Recording session {{token}} finished. Please send the recorded file to the moderator.", - "finishedModerator": "Recording session {{token}} finished. The recording of the local track has been saved. Please ask the other participants to submit their recordings.", - "notModerator": "You are not the moderator. You cannot start or stop local recording." + "engaged": "स्थानीय रिकॉर्डिंग सक्रिय हो गई।", + "finished": "रिकॉर्डिंग सत्र {{token}} समाप्त हो गया। कृपया रिकॉर्ड की गई फ़ाइल मॉडरेटर को भेजें।", + "finishedModerator": "रिकॉर्डिंग सत्र {{token}} समाप्त हो गया। स्थानीय ट्रैक की रिकॉर्डिंग सहेज ली गई है। कृपया अन्य प्रतिभागियों से उनकी रिकॉर्डिंग जमा करने के लिए कहें।", + "notModerator": "आप मॉडरेटर नहीं हैं। आप स्थानीय रिकॉर्डिंग प्रारंभ या बंद नहीं कर सकते।" }, - "moderator": "Moderator", - "no": "No", - "participant": "Participant", - "participantStats": "Participant Stats", - "sessionToken": "Session Token", - "start": "Start Recording", - "stop": "Stop Recording", - "yes": "Yes" + "moderator": "मॉडरेटर", + "no": "नहीं", + "participant": "प्रतिभागी", + "participantStats": "प्रतिभागी आँकड़े", + "sessionToken": "सत्र टोकन", + "start": "रिकॉर्डिंग प्रारंभ करें", + "stop": "रिकॉर्डिंग बंद करें", + "yes": "हाँ" }, "lockRoomPassword": "पासवर्ड", "lockRoomPasswordUppercase": "पासवर्ड", @@ -536,8 +536,8 @@ "kickParticipant": "{{kicked}} को {{kicker}} द्वारा किक किया गया", "me": "मैं", "moderator": "मॉडरेटर के अधिकार दिए गए!", - "muted": "You have started the conversation muted.", - "mutedRemotelyDescription": "You can always unmute when you're ready to speak. Mute back when you're done to keep noise away from the meeting.", + "muted": "आपने वार्तालाप को म्यूट करके शुरू किया है।", + "mutedRemotelyDescription": "जब आप बोलने के लिए तैयार हों, तो आप हमेशा अनम्यूट कर सकते हैं। बैठक में शोर कम रखने के लिए बोलने के बाद म्यूट कर दें।", "mutedRemotelyTitle": "आपको {{participantDisplayName}} द्वारा म्यूट कर दिया गया है!", "mutedTitle": "आप मौन हैं!", "newDeviceAction": "उपयोग करें", @@ -563,7 +563,7 @@ "reject": "अस्वीकार" } }, - "passwordDigitsOnly": "Up to {{number}} digits", + "passwordDigitsOnly": "अधिकतम {{number}} अंक", "passwordSetRemotely": "दूसरे प्रतिभागी द्वारा निर्धारित", "polls": { "errors": { @@ -579,26 +579,26 @@ "callMe": "मुझे कॉल करें", "callMeAtNumber": "मुझे इस नंबर पर कॉल करें:", "calling": "कॉलिंग", - "configuringDevices": "डिवाइस कॉन्फ़िगर कर रहा है ...", - "connectedWithAudioQ": "You’re connected with audio?", + "configuringDevices": "डिवाइस कॉन्फ़िगर कर रहा है…", + "connectedWithAudioQ": "क्या आप ऑडियो से जुड़े हैं?", "connection": { - "good": "Your internet connection looks good!", - "nonOptimal": "Your internet connection is not optimal", - "poor": "आपके पास एक खराब इंटरनेट कनेक्शन है" + "good": "आपका इंटरनेट कनेक्शन अच्छा है!", + "nonOptimal": "आपका इंटरनेट कनेक्शन आदर्श नहीं है", + "poor": "आपका इंटरनेट कनेक्शन खराब है" }, "connectionDetails": { - "audioClipping": "We expect your audio to be clipped.", - "audioHighQuality": "We expect your audio to have excellent quality.", - "audioLowNoVideo": "We expect your audio quality to be low and no video.", - "goodQuality": "Awesome! Your media quality is going to be great.", - "noMediaConnectivity": "We could not find a way to establish media connectivity for this test. This is typically caused by a firewall or NAT.", - "noVideo": "We expect that your video will be terrible.", - "undetectable": "If you still can not make calls in browser, we recommend that you make sure your speakers, microphone and camera are properly set up, that you have granted your browser rights to use your microphone and camera, and that your browser version is up-to-date. If you still have trouble calling, you should contact the web application developer.", - "veryPoorConnection": "We expect your call quality to be really terrible.", - "videoFreezing": "We expect your video to freeze, turn black, and be pixelated.", - "videoHighQuality": "We expect your video to have good quality.", - "videoLowQuality": "We expect your video to have low quality in terms of frame rate and resolution.", - "videoTearing": "We expect your video to be pixelated or have visual artefacts." + "audioClipping": "हमें उम्मीद है कि आपका ऑडियो कट सकता है।", + "audioHighQuality": "हमें उम्मीद है कि आपका ऑडियो बेहतरीन गुणवत्ता का होगा।", + "audioLowNoVideo": "हमें उम्मीद है कि आपकी ऑडियो गुणवत्ता कम होगी और वीडियो उपलब्ध नहीं होगा।", + "goodQuality": "बहुत बढ़िया! आपकी मीडिया गुणवत्ता शानदार होगी।", + "noMediaConnectivity": "हम इस परीक्षण के लिए मीडिया कनेक्टिविटी स्थापित करने में असमर्थ हैं। यह आमतौर पर फ़ायरवॉल या NAT के कारण होता है।", + "noVideo": "हमें उम्मीद है कि आपका वीडियो बहुत खराब होगा।", + "undetectable": "यदि आप अभी भी ब्राउज़र में कॉल नहीं कर पा रहे हैं, तो हम अनुशंसा करते हैं कि आप सुनिश्चित करें कि आपके स्पीकर, माइक्रोफ़ोन और कैमरा सही तरीके से सेट किए गए हैं, कि आपने अपने ब्राउज़र को माइक्रोफ़ोन और कैमरा उपयोग की अनुमति दी है, और आपका ब्राउज़र संस्करण अपडेट है। यदि समस्या बनी रहती है, तो आपको वेब एप्लिकेशन डेवलपर से संपर्क करना चाहिए।", + "veryPoorConnection": "हमें उम्मीद है कि आपकी कॉल गुणवत्ता बहुत खराब होगी।", + "videoFreezing": "हमें उम्मीद है कि आपका वीडियो फ्रीज़ होगा, काला हो जाएगा और धुंधला दिखेगा।", + "videoHighQuality": "हमें उम्मीद है कि आपका वीडियो अच्छी गुणवत्ता का होगा।", + "videoLowQuality": "हमें उम्मीद है कि आपका वीडियो फ्रेम दर और रिज़ॉल्यूशन के मामले में निम्न गुणवत्ता का होगा।", + "videoTearing": "हमें उम्मीद है कि आपका वीडियो धुंधला होगा या इसमें दृश्य गड़बड़ियां हो सकती हैं।" }, "copyAndShare": "मीटिंग लिंक कॉपी और साझा करे ", "dialInMeeting": "मीटिंग में डायल करें", @@ -622,7 +622,6 @@ "or": "या", "premeeting": "प्री मीटिंग", "screenSharingError": "स्क्रीन शेयरिंग त्रुटि:", - "showScreen": "प्री मीटिंग स्क्रीन सक्षम करें", "startWithPhone": "फोन ऑडियो से शुरू करें", "videoOnlyError": "वीडियो त्रुटि:", "videoTrackError": "वीडियो ट्रैक नहीं बना सका", @@ -630,17 +629,17 @@ }, "presenceStatus": { "busy": "व्यस्त", - "calling": "कॉलिंग...", + "calling": "कॉलिंग…", "connected": "कनेक्टेड", - "connecting": "कनेक्टिंग...", - "connecting2": "कनेक्टिंग*...", + "connecting": "कनेक्टिंग…", + "connecting2": "कनेक्टिंग*…", "disconnected": "डिस्कनेक्ट किया गया", "expired": "एक्सपायर्ड", "ignored": "Ignored", - "initializingCall": "Initializing Call...", + "initializingCall": "कॉल प्रारंभ की जा रही है…", "invited": "आमंत्रित", "rejected": "अस्वीकृत", - "ringing": "Ringing..." + "ringing": "Ringing…" }, "profile": { "setDisplayNameLabel": "अपना नाम सेट करें", @@ -650,38 +649,38 @@ }, "raisedHand": "बोलना चाहेंगे", "recording": { - "authDropboxText": "Upload to Dropbox", - "availableSpace": "Available space: {{spaceLeft}} MB (approximately {{duration}} minutes of recording)", - "beta": "BETA", - "busy": "We're working on freeing recording resources. Please try again in a few minutes.", + "authDropboxText": "ड्रॉपबॉक्स पर अपलोड करें", + "availableSpace": "उपलब्ध स्थान: {{spaceLeft}} MB (लगभग {{duration}} मिनट की रिकॉर्डिंग)", + "beta": "बीटा", + "busy": "हम रिकॉर्डिंग संसाधनों को मुक्त करने पर काम कर रहे हैं। कृपया कुछ मिनटों में पुनः प्रयास करें।", "busyTitle": "सभी रिकॉर्डर अभी व्यस्त हैं", - "error": "रिकॉर्डिंग विफल हुई। कृपया पुन: प्रयास करें।", + "error": "रिकॉर्डिंग विफल हुई। कृपया पुनः प्रयास करें।", "expandedOff": "रिकॉर्डिंग बंद हो गई है", - "expandedOn": "The meeting is currently being recorded.", - "expandedPending": "रिकॉर्डिंग शुरू की जा रही है...", + "expandedOn": "बैठक की रिकॉर्डिंग की जा रही है।", + "expandedPending": "रिकॉर्डिंग शुरू की जा रही है…", "failedToStart": "रिकॉर्डिंग शुरू करने में विफलता हुई।", - "fileSharingdescription": "Share recording with meeting participants", - "limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}.", - "limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try {{app}}.", - "live": "LIVE", - "loggedIn": "Logged in as {{userName}}", - "off": "Recording stopped", - "offBy": "{{name}} stopped the recording", - "on": "Recording started", - "onBy": "{{name}} started the recording", - "pending": "Preparing to record the meeting...", - "rec": "REC", - "serviceDescription": "Your recording will be saved by the recording service", - "serviceDescriptionCloud": "Cloud recording", - "serviceName": "Recording service", - "signIn": "Sign in", - "signOut": "Sign out", + "fileSharingdescription": "रिकॉर्डिंग को बैठक प्रतिभागियों के साथ साझा करें", + "limitNotificationDescriptionNative": "उच्च मांग के कारण आपकी रिकॉर्डिंग {{limit}} मिनट तक सीमित रहेगी। असीमित रिकॉर्डिंग के लिए <3>{{app}} आज़माएँ।", + "limitNotificationDescriptionWeb": "उच्च मांग के कारण आपकी रिकॉर्डिंग {{limit}} मिनट तक सीमित रहेगी। असीमित रिकॉर्डिंग के लिए {{app}} आज़माएँ।", + "live": "लाइव", + "loggedIn": "{{userName}} के रूप में लॉग इन किया गया", + "off": "रिकॉर्डिंग बंद हो गई", + "offBy": "{{name}} ने रिकॉर्डिंग बंद की", + "on": "रिकॉर्डिंग शुरू हो गई", + "onBy": "{{name}} ने रिकॉर्डिंग शुरू की", + "pending": "बैठक की रिकॉर्डिंग की तैयारी हो रही है…", + "rec": "रिकॉर्डिंग", + "serviceDescription": "आपकी रिकॉर्डिंग को रिकॉर्डिंग सेवा द्वारा सहेजा जाएगा", + "serviceDescriptionCloud": "क्लाउड रिकॉर्डिंग", + "serviceName": "रिकॉर्डिंग सेवा", + "signIn": "साइन इन करें", + "signOut": "साइन आउट करें", "title": "रिकॉर्डिंग", - "unavailable": "ओह! {{serviceName}} वर्तमान में अनुपलब्ध है। हम समस्या को हल करने पर काम कर रहे हैं। कृपया बाद में पुनः प्रयास करें।", + "unavailable": "ओह! {{serviceName}} वर्तमान में अनुपलब्ध है। हम इस समस्या को हल करने पर काम कर रहे हैं। कृपया बाद में पुनः प्रयास करें।", "unavailableTitle": "रिकॉर्डिंग उपलब्ध नहीं है" }, "sectionList": { - "pullToRefresh": "Pull to refresh" + "pullToRefresh": "रीफ़्रेश करने के लिए नीचे खींचें" }, "security": { "about": "आप अपनी मीटिंग में $t(lockRoomPassword) जोड़ सकते हैं। सहभागियों को मीटिंग में शामिल होने से पहले $t(lockRoomPassword) प्रदान करना होगा।", @@ -691,16 +690,16 @@ }, "settings": { "calendar": { - "about": "The {{appName}} calendar integration is used to securely access your calendar so it can read upcoming events.", - "disconnect": "Disconnect", - "microsoftSignIn": "Sign in with Microsoft", - "signedIn": "Currently accessing calendar events for {{email}}. Click the Disconnect button below to stop accessing calendar events.", - "title": "Calendar" + "about": "{{appName}} कैलेंडर एकीकरण आपके कैलेंडर तक सुरक्षित रूप से पहुंचने के लिए उपयोग किया जाता है ताकि यह आगामी कार्यक्रम पढ़ सके।", + "disconnect": "डिस्कनेक्ट करें", + "microsoftSignIn": "Microsoft से साइन इन करें", + "signedIn": "वर्तमान में {{email}} के कैलेंडर कार्यक्रमों तक पहुंच रही है। कैलेंडर कार्यक्रमों की पहुंच बंद करने के लिए नीचे दिए गए डिस्कनेक्ट बटन पर क्लिक करें।", + "title": "कैलेंडर" }, "devices": "डिवाइस", - "followMe": "Everyone follows me", + "followMe": "हर कोई मेरा अनुसरण करेगा", "language": "भाषा", - "loggedIn": "Logged in as {{name}}", + "loggedIn": "{{name}} के रूप में लॉग इन किया", "microphones": "माइक्रोफोन", "moderator": "Moderator", "more": "More", @@ -710,8 +709,8 @@ "selectCamera": "कैमरा", "selectMic": "माइक्रोफोन", "speakers": "Speakers", - "startAudioMuted": "Everyone starts muted", - "startVideoMuted": "Everyone starts hidden", + "startAudioMuted": "सभी लोग म्यूट से शुरू करेंगे", + "startVideoMuted": "सभी लोग छिपे हुए शुरू करेंगे", "title": "सेटिंग" }, "settingsView": { @@ -720,9 +719,9 @@ "alertOk": "ओके", "alertTitle": "चेतावनी", "alertURLText": "दर्ज किया गया सर्वर URL अमान्य है", - "buildInfoSection": "Build Information", + "buildInfoSection": "बिल्ड जानकारी", "conferenceSection": "सम्मेलन", - "disableCallIntegration": "Disable native call integration", + "disableCallIntegration": "मूल कॉल एकीकरण अक्षम करें", "disableCrashReporting": "क्रैश रिपोर्टिंग अक्षम करें", "disableCrashReportingWarning": "क्या आप वाकई क्रैश रिपोर्टिंग को अक्षम करना चाहते हैं? एप्लिकेशन को पुनरारंभ करने के बाद सेटिंग लागू की जाएगी", "disableP2P": "पीयर-टू-पीयर मोड को अक्षम करें", @@ -731,16 +730,16 @@ "header": "सेटिंग", "profileSection": "प्रोफाइल", "serverURL": "सर्वर URL", - "showAdvanced": "Show advanced settings", - "startWithAudioMuted": "Start with audio muted", - "startWithVideoMuted": "Start with video muted", + "showAdvanced": "उन्नत सेटिंग्स दिखाएं", + "startWithAudioMuted": "ऑडियो म्यूट के साथ शुरू करें", + "startWithVideoMuted": "वीडियो म्यूट के साथ शुरू करें", "version": "संस्करण" }, "share": { "dialInfoText": "\n\n=====\n\nJust want to dial in on your phone?\n\n{{defaultDialInNumber}}Click this link to see the dial in phone numbers for this meeting\n{{dialInfoPageUrl}}", "mainText": "मीटिंग में शामिल होने के लिए निम्न लिंक पर क्लिक करें:\n{{roomUrl}}" }, - "speaker": "Speaker", + "speaker": "स्पीकर", "speakerStats": { "hours": "{{count}}h", "minutes": "{{count}}m", @@ -748,8 +747,8 @@ "search": "खोजें", "searchHint": "प्रतिभागियों को खोजें", "seconds": "{{count}}s", - "speakerStats": "Speaker Stats", - "speakerTime": "Speaker Time" + "speakerStats": "स्पीकर आंकड़े", + "speakerTime": "स्पीकर समय" }, "startupoverlay": { "genericTitle": "मीटिंग को आपके माइक्रोफ़ोन और कैमरे का उपयोग करने की आवश्यकता है।", @@ -825,10 +824,10 @@ "download": "हमारे एप्लिकेशन डाउनलोड करें", "e2ee": "एंड-टू-एंड एन्क्रिप्शन", "embedMeeting": "Embed meeting", - "enterFullScreen": "View full screen", - "enterTileView": "Enter tile view", - "exitFullScreen": "Exit full screen", - "exitTileView": "Exit tile view", + "enterFullScreen": "पूर्ण स्क्रीन में देखें", + "enterTileView": "टाइल दृश्य में प्रवेश करें", + "exitFullScreen": "पूर्ण स्क्रीन से बाहर निकलें", + "exitTileView": "टाइल दृश्य से बाहर निकलें", "feedback": "प्रतिक्रिया छोड़ें", "hangup": "छोड़ें", "help": "Help", @@ -837,7 +836,7 @@ "lobbyButtonEnable": "लॉबी मोड सक्षम करें", "login": "लॉग इन", "logout": "लॉगआउट", - "lowerYourHand": "Lower your hand", + "lowerYourHand": "अपना हाथ नीचे करें", "moreActions": "More actions", "moreOptions": "अधिक विकल्प", "mute": "म्यूट / अनम्यूट", @@ -866,7 +865,7 @@ "startSubtitles": "Start subtitles", "stopScreenSharing": "स्क्रीन शेयरिंग बंद करो", "stopSharedVideo": "YouTube वीडियो बंद करें", - "stopSubtitles": "Stop subtitles", + "stopSubtitles": "उपशीर्षक बंद करें", "talkWhileMutedPopup": "बोलने की कोशिश कर रहा है? आप मौन हैं", "tileViewToggle": "टॉगल टाइल दृश्य", "toggleCamera": "कैमरा टॉगल करें", @@ -874,28 +873,19 @@ "videomute": "स्टार्ट / स्टॉप कैमरा" }, "transcribing": { - "ccButtonTooltip": "Start / Stop subtitles", + "ccButtonTooltip": "सबटाइटल शुरू / बंद करें", "error": "ट्रांसक्रिप्शनिंग विफल रही। कृपया पुन: प्रयास करें", "expandedLabel": "वर्तमान में ट्रांसक्रिप्शनिंग चालू है", "failedToStart": "ट्रांसक्रिप्शनिंग प्रारंभ करने में विफल", - "labelToolTip": "The meeting is being transcribed", + "labelToolTip": "बैठक का लिप्यंतरण किया जा रहा है", "off": "ट्रांसक्रिप्शनिंग बंद कर दिया", - "pending": "Preparing to transcribe the meeting...", + "pending": "बैठक के ट्रांसक्रिप्शन की तैयारी हो रही है…", "start": "उपशीर्षक दिखाना शुरू करें", "stop": "उपशीर्षक दिखाना बंद करें", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो अनुमति दें चुनें।", - "chromeGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो अनुमति दें चुनें।", - "edgeGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो हां चुनें।", - "electronGrantPermissions": "आपका कैमरा और माइक्रोफोन तक पहुंच करने की कोशिश की जा रही है", - "firefoxGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो चयनित उपकरण साझा करें चुनें।", - "iexplorerGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो ठीक है चुनें।", - "nwjsGrantPermissions": "कृपया अपने कैमरा और माइक्रोफोन का उपयोग करने के लिए अनुमतियाँ प्रदान करें", - "operaGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो अनुमति दें चुनें।", - "react-nativeGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो अनुमति दें चुनें।", - "safariGrantPermissions": "जब आपका ब्राउज़र स्वीकृति मांगता है, तो ठीक है चुनें।" + "grantPermissions": "कृपया अपने कैमरा और माइक्रोफोन का उपयोग करने के लिए अनुमतियाँ प्रदान करें." }, "videoSIPGW": { "busy": "हम संसाधनों को मुक्त करने पर काम कर रहे हैं। कृपया कुछ मिनटों बाद पुन: प्रयास करें।", @@ -908,20 +898,20 @@ "pending": "{{displayName}} को आमंत्रित किया गया है" }, "videoStatus": { - "audioOnly": "AUD", - "audioOnlyExpanded": "You are in low bandwidth mode. In this mode you will receive only audio and screen sharing.", - "callQuality": "Video Quality", - "hd": "HD", - "hdTooltip": "Viewing high definition video", - "highDefinition": "High definition", - "labelTooiltipNoVideo": "No video", - "labelTooltipAudioOnly": "Low bandwidth mode enabled", - "ld": "LD", - "ldTooltip": "Viewing low definition video", - "lowDefinition": "Low definition", - "sd": "SD", - "sdTooltip": "Viewing standard definition video", - "standardDefinition": "Standard definition" + "audioOnly": "केवल ऑडियो", + "audioOnlyExpanded": "आप कम बैंडविड्थ मोड में हैं। इस मोड में आपको केवल ऑडियो और स्क्रीन शेयरिंग प्राप्त होगी।", + "callQuality": "वीडियो गुणवत्ता", + "hd": "एचडी", + "hdTooltip": "हाई डेफिनिशन वीडियो देख रहे हैं", + "highDefinition": "हाई डेफिनिशन", + "labelTooiltipNoVideo": "कोई वीडियो नहीं", + "labelTooltipAudioOnly": "कम बैंडविड्थ मोड सक्षम", + "ld": "एलडी", + "ldTooltip": "लो डेफिनिशन वीडियो देख रहे हैं", + "lowDefinition": "लो डेफिनिशन", + "sd": "एसडी", + "sdTooltip": "स्टैंडर्ड डेफिनिशन वीडियो देख रहे हैं", + "standardDefinition": "स्टैंडर्ड डेफिनिशन" }, "videothumbnail": { "connectionInfo": "कनेक्शन जानकारी", @@ -943,7 +933,7 @@ "virtualBackground": { "enableBlur": "ब्लर सक्षम करें", "none": "कोई नहीं", - "pleaseWait": "कृपया प्रतीक्षा करें ...", + "pleaseWait": "कृपया प्रतीक्षा करें…", "removeBackground": "पृष्ठभूमि निकालें", "title": "पृष्ठभूमि", "uploadImage": "छवि अपलोड करें" diff --git a/lang/main-hr.json b/lang/main-hr.json index b29196f00f46..7eb4989f4c08 100644 --- a/lang/main-hr.json +++ b/lang/main-hr.json @@ -840,7 +840,6 @@ "or": "ili", "premeeting": "Predsastanak", "screenSharingError": "Greška dijeljenja ekrana:", - "showScreen": "Uključi ekran predsastanka", "startWithPhone": "Počni s telefonom", "videoOnlyError": "Greška videa:", "videoTrackError": "Nije bilo moguće stvoriti videosnimku.", @@ -914,7 +913,7 @@ "localRecordingStartWarningTitle": "Prekini snimanje kako bi se spremilo", "localRecordingVideoStop": "Prekidanje tvog videa će također prekinuti lokalno snimanje. Stvarno želiš nastaviti?", "localRecordingVideoWarning": "Za snimanje tvog videa, on mora biti uključen kada započneš snimanje", - "localRecordingWarning": "Odaberi trenutačnu karticu za korištenje ispravnog videa i zvuka. Snimanje je trenutačno ograničeno na 1 GB, što je oko 100 minuta.", + "localRecordingWarning": "Odaberi trenutačnu karticu za korištenje ispravnog videa i zvuka.", "loggedIn": "Prijava kao {{userName}}", "noStreams": "Nema otkrivenih audio niti videoprijenosa.", "off": "Snimanje prekinuto", @@ -1234,16 +1233,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Odaberi Dozvoli kad tvoj preglednik zatraži dozvole.", - "chromeGrantPermissions": "Odaberi Dozvoli kad tvoj preglednik zatraži dozvole.", - "edgeGrantPermissions": "Odaberi Da kad tvoj preglednik zatraži dozvole.", - "electronGrantPermissions": "Pokušaj pristupa tvojoj kameri i mikrofonu", - "firefoxGrantPermissions": "Odaberi Dijeli odabrane uređaje kad tvoj preglednik zatraži dozvole.", - "iexplorerGrantPermissions": "Odaberi U redu kad tvoj preglednik zatraži dozvole.", - "nwjsGrantPermissions": "Dozvoli pristup tvojoj kameri i mikrofonu", - "operaGrantPermissions": "Odaberi Dozvoli kad tvoj preglednik zatraži dozvole.", - "react-nativeGrantPermissions": "Odaberi Dozvoli kad tvoj preglednik zatraži dozvole.", - "safariGrantPermissions": "Odaberi U redu kad tvoj preglednik zatraži dozvole." + "grantPermissions": "Dozvoli pristup tvojoj kameri i mikrofonu." }, "videoSIPGW": { "busy": "Radimo na oslobađanju resursa. Pokušaj ponovo za par minuta.", diff --git a/lang/main-hsb.json b/lang/main-hsb.json index 64a1a63e5a64..104d299bff51 100644 --- a/lang/main-hsb.json +++ b/lang/main-hsb.json @@ -20,7 +20,7 @@ "noResults": "žane přitrjechjace wuslědki", "outlookEmail": "Outlook-e-mejl", "phoneNumbers": "telefoniske čisła", - "searching": "pyta...", + "searching": "pyta…", "shareInvite": "přeprošenje na zhromadźiznu dźělić", "shareLink": "za přeprošenje druhich dźělće link za konferencu ", "shareStream": "link za live-streaming dźělić", @@ -652,7 +652,7 @@ "linkToSalesforceDescription": "Móžeće zjeće konferency z objektom w Salesforce zwjazać.", "linkToSalesforceError": "Konferenca njemóžeše so ze Salesforce zwjazać.", "linkToSalesforceKey": "konferencu zalinkować", - "linkToSalesforceProgress": "konferenca so ze Salesforce zwjaza...", + "linkToSalesforceProgress": "konferenca so ze Salesforce zwjaza…", "linkToSalesforceSuccess": "Konferenca bu ze Salesforce zwjazana.", "localRecordingStarted": "{{name}} je z lokalnym nahrawanjom započinał.", "localRecordingStopped": "{{name}} je lokalne nahrawanje skónčił.", @@ -824,7 +824,6 @@ "or": "abo", "premeeting": "předstwa", "screenSharingError": "zmylk při dopušćenju wužiwanja monitora:", - "showScreen": "konferencnu předstwu aktiwěrować", "startWithPhone": "z telefoniskim awdijom startować", "videoOnlyError": "widejowy zmylk:", "videoTrackError": "widejowy trak njebě móžny", @@ -892,7 +891,7 @@ "limitNotificationDescriptionWeb": "Wulkeje potrjeby dla je Waše nahrawanje na {{limit}} mjeń. wobmjezowane. Za njewobmjezowane nahrawanje wužiwajće prošu {{app}}.", "linkGenerated": "link na nahrawanje bu kreěrowany", "live": "LIVE", - "localRecordingWarning": "Kedźbujće na to, aktualny tab za prawe widejo a awdijo wužiwać. Nahrawanje je wokomiknje hač do 1GB - někak 100 mjeńšinow - móžne.", + "localRecordingWarning": "Kedźbujće na to, aktualny tab za prawe widejo a awdijo wužiwać.", "loggedIn": "přizjewjeny/a jako {{userName}} ", "off": "nahrawanje stopowane", "offBy": "{{name}} stopuje nahrawanje", @@ -1188,16 +1187,7 @@ "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Wuzwolće dowolić, hdyž so browser za prawom praša.", - "chromeGrantPermissions": "Wuzwolćedowolić, hdyž so browser za prawom praša.", - "edgeGrantPermissions": "Wuzwolće haj, hdyž so browser za prawom praša.", - "electronGrantPermissions": " wužiwanje kamery a mikrofona dowolić", - "firefoxGrantPermissions": " Wuzwolćedowolić, hdyž so browser za prawom praša.", - "iexplorerGrantPermissions": "Wuzwolće OK, hdyž so browser za prawom praša.", - "nwjsGrantPermissions": "prošu wužiwanje kamery a mikrofona dowolić ", - "operaGrantPermissions": " Wuzwolćedowolić, hdyž so browser za prawom praša.", - "react-nativeGrantPermissions": " Wuzwolćedowolić, hdyž so browser za prawom praša.", - "safariGrantPermissions": " WuzwolćeOK, hdyž so browser za prawom praša." + "grantPermissions": "prošu wužiwanje kamery a mikrofona dowolić." }, "videoSIPGW": { "busy": "Njesteja žane resursy k dispoziciji. Prošu spytajće pozdźišo znowa.", @@ -1267,7 +1257,7 @@ "image6": "lěs", "image7": "schadźenje słónca", "none": "žadyn", - "pleaseWait": "wokomik...", + "pleaseWait": "wokomik…", "removeBackground": "pozadk wotstronić", "slightBlur": "pozadk snadnje njejasny", "title": "pozadk", diff --git a/lang/main-hu.json b/lang/main-hu.json index c818342ae708..93539b8e880d 100644 --- a/lang/main-hu.json +++ b/lang/main-hu.json @@ -111,7 +111,7 @@ "GET_SESSION_ID_ERROR": "Hiba a munkamenet-azonosítása beszerzése közben: {{code}}", "GOT_SESSION_ID": "Munkamenet-azonosító beszerzése… Kész", "LOW_BANDWIDTH": "{{displayName}} videója le lett kapcsolva a sávszélesség csökkentése érdekében", - "RECONNECTING": "Hálózati hiba történt. Újracsatlakozás..." + "RECONNECTING": "Hálózati hiba történt. Újracsatlakozás…" }, "connectionindicator": { "address": "Cím:", @@ -184,6 +184,7 @@ "Share": "Megosztás", "Submit": "Elküldés", "WaitForHostMsg": "A konferencia még nem kezdődött meg. Ha Ön a házigazda, akkor hitelesítse magát. Ellenkező esetben, kérjük várjon a házigazda érkezésére.", + "WaitForHostNoAuthMsg": "A konferencia még nem kezdődött el, mert nincs elérhető moderátor. Kérlek várj.", "WaitingForHost": "Várakozás a házigazdára…", "Yes": "Igen", "accessibilityLabel": { @@ -479,10 +480,10 @@ "joinRejectedMessage": "Csatlakozási kérelmét egy moderátor elutasította.", "joinRejectedTitle": "Csatlakozási kérelem elutasítva.", "joinTitle": "Csatlakozás az értekezlethez", - "joinWithPasswordMessage": "Csatlakozás jelszóval, kérjük várjon...", + "joinWithPasswordMessage": "Csatlakozás jelszóval, kérjük várjon…", "joiningMessage": "Amint valaki elfogadja kérését, csatlakoztatjuk az értekezlethez", - "joiningTitle": "Értekezlethez csatlakozás kérése...", - "joiningWithPasswordTitle": "Csatlakozás jelszóval...", + "joiningTitle": "Értekezlethez csatlakozás kérése…", + "joiningWithPasswordTitle": "Csatlakozás jelszóval…", "knockButton": "Csatlakozási kérelem küldése", "knockTitle": "Valaki szeretne csatlakozni az értekezlethez", "nameField": "Adja meg a nevét", @@ -647,7 +648,7 @@ "callMe": "Hívj fel", "callMeAtNumber": "Hívj fel ezen a számon:", "calling": "Hívás", - "configuringDevices": "Eszköz beállítás...", + "configuringDevices": "Eszköz beállítás…", "connectedWithAudioQ": "Csak hanggal szeretne csatlakozni?", "connection": { "good": "Az internet kapcsolat jónak tűnik!", @@ -682,7 +683,6 @@ "or": "vagy", "premeeting": "Csatlakozás előtt", "screenSharingError": "Képernyő megosztás hiba:", - "showScreen": "Csatlakozás előtti kamerakép", "startWithPhone": "Kezdés telefonhanggal", "videoOnlyError": "Videó hiba:", "videoTrackError": "Nem sikerült a videó megjelenítés.", @@ -693,7 +693,7 @@ "calling": "Hívás…", "connected": "Kapcsolódva", "connecting": "Kapcsolódás…", - "connecting2": "Kapcsolódás*...", + "connecting2": "Kapcsolódás*…", "disconnected": "Szétkapcsolva", "expired": "Lejárt", "ignored": "Figyelmen kívül hagyva", @@ -725,7 +725,7 @@ "localRecordingNoNotificationWarning": "A felvételt nem közöljük más résztvevőkkel. Értesítenie kell velük, hogy a találkozót rögzítették.", "localRecordingStartWarning": "A megbeszélésből való kilépés előtt feltétlenül állítsa le a felvételt, hogy elmentse azt.", "localRecordingStartWarningTitle": "Állítsa le a felvételt a mentéshez", - "localRecordingWarning": "Győződjön meg arról, hogy az aktuális lapot választotta a megfelelő videó és hang használatához. A felvétel jelenleg 1 GB-ra van korlátozva, ami körülbelül 100 perc.", + "localRecordingWarning": "Győződjön meg arról, hogy az aktuális lapot választotta a megfelelő videó és hang használatához.", "loggedIn": "Belépve mint {{userName}}", "off": "Felvétel leállítva", "offBy": "{{name}} leállította a felvételt", @@ -989,16 +989,7 @@ "tr": "Átirat" }, "userMedia": { - "androidGrantPermissions": "Válaszd az Engedélyezés opciót, ha a böngésző engedélyt kér.", - "chromeGrantPermissions": "Válaszd az Engedélyezés opciót, ha a böngésző engedélyt kér.", - "edgeGrantPermissions": "Válaszd az Igen opciót, ha a böngésző hozzáférést kér.", - "electronGrantPermissions": "A kamera és a mikrofon használatát engedélyezni kell", - "firefoxGrantPermissions": "Válaszd Kiválasztott eszköz megosztása opciót, ha a böngésző hozzáférést kér.", - "iexplorerGrantPermissions": "Válaszd az OK opciót, ha a böngésző engedélyezést kér.", - "nwjsGrantPermissions": "A kamera és a mikrofon használatát engedélyezni kell", - "operaGrantPermissions": "Válaszd az Engedélyezés opciót, ha a böngésző engedélyt kér.", - "react-nativeGrantPermissions": "Válaszd az Engedélyezés opciót, ha a böngésző engedélyt kér.", - "safariGrantPermissions": "Válaszd az OK opciót, ha a böngésző engedélyezést kér." + "grantPermissions": "A kamera és a mikrofon használatát engedélyezni kell." }, "videoSIPGW": { "busy": "Dolgozunk az erőforrások felszabadításán. Kísérelje meg újra néhány perc múlva.", @@ -1063,7 +1054,7 @@ "image6": "Erdő", "image7": "Napfelkelte", "none": "Nincs", - "pleaseWait": "Kérjük várjon...", + "pleaseWait": "Kérjük várjon…", "removeBackground": "Háttér eltávolítása", "slightBlur": "Enyhén elmosódott", "title": "Virtuális háttérképek", diff --git a/lang/main-hy.json b/lang/main-hy.json index 81ee96590b0a..f55482c49b57 100644 --- a/lang/main-hy.json +++ b/lang/main-hy.json @@ -68,7 +68,7 @@ "DISCONNECTED": "Անջատված է", "DISCONNECTING": "Անջատում…", "ERROR": "Սխալ", - "RECONNECTING": "Ցանցի խնդիր է տեղի ունեցել: Վերամիացում..." + "RECONNECTING": "Ցանցի խնդիր է տեղի ունեցել: Վերամիացում…" }, "connectionindicator": { "address": "Հասցե։", @@ -438,7 +438,7 @@ "calling": "", "connected": "Միացված է", "connecting": "Միանում է…", - "connecting2": "Միանում է...", + "connecting2": "Միանում է…", "disconnected": "Անջատված է", "expired": "", "ignored": "", @@ -636,16 +636,7 @@ "tr": "" }, "userMedia": { - "androidGrantPermissions": "Ընտրեք Allow, երբ բրաուզերը թույլտվություն հարցնի", - "chromeGrantPermissions": "Ընտրեք Allow, երբ բրաուզերը թույլտվություն հարցնի", - "edgeGrantPermissions": "Ընտրեք Yes, երբ ձեր բրաուզերը թույլտվություն հարցնի.", - "electronGrantPermissions": "Խնդրում ենք տրամադրել տեսախցիկը և խոսափողը օգտագործելու թույլտվություններ", - "firefoxGrantPermissions": "Երբ բրաուզերը թույլտվություն հարցնի, ընտրեք Share Selected Device", - "iexplorerGrantPermissions": "Ընտրեք OK, երբ բրաուզերը թույլտվություն հարցնի", - "nwjsGrantPermissions": "Խնդրում ենք տրամադրել տեսախցիկը և խոսափողը օգտագործելու թույլտվություններ", - "operaGrantPermissions": "Ընտրեք Allow, երբ բրաուզերը թույլտվություն հարցնի", - "react-nativeGrantPermissions": "Ընտրեք Allow, երբ բրաուզերը թույլտվություն հարցնի", - "safariGrantPermissions": "Ընտրեք OK, երբ բրաուզերը թույլտվություն հարցնի" + "grantPermissions": "Խնդրում ենք տրամադրել տեսախցիկը և խոսափողը օգտագործելու թույլտվություններ." }, "videoSIPGW": { "busy": "", diff --git a/lang/main-id.json b/lang/main-id.json new file mode 100644 index 000000000000..9a49c36f383e --- /dev/null +++ b/lang/main-id.json @@ -0,0 +1,1549 @@ +{ + "addPeople": { + "accessibilityLabel": { + "meetingLink": "Tautan rapat: {{url}}" + }, + "add": "Undang", + "addContacts": "Undang kontak Anda", + "contacts": "kontak", + "copyInvite": "Salin undangan rapat", + "copyLink": "Salin tautan rapat", + "copyStream": "Salin tautan streaming langsung", + "countryNotSupported": "Kami belum mendukung destinasi ini.", + "countryReminder": "Menelepon ke luar AS? Pastikan Anda memulai dengan kode negara!", + "defaultEmail": "Email Default Anda", + "disabled": "Anda tidak dapat mengundang orang lain.", + "failedToAdd": "Gagal menambahkan peserta", + "googleEmail": "Email Google", + "inviteMoreHeader": "Anda adalah satu-satunya yang ada di dalam rapat", + "inviteMoreMailSubject": "Bergabunglah dengan rapat {{appName}}", + "inviteMorePrompt": "Undang lebih banyak orang", + "linkCopied": "Tautan disalin ke papan klip", + "noResults": "Tidak ada hasil pencarian yang cocok", + "outlookEmail": "Email Outlook", + "phoneNumbers": "nomor telepon", + "searching": "Mencari…", + "shareInvite": "Bagikan undangan rapat", + "shareLink": "Bagikan tautan rapat untuk mengundang orang lain", + "shareStream": "Bagikan tautan streaming langsung", + "sipAddresses": "alamat sip", + "telephone": "Telepon: {{number}}", + "title": "Undang orang ke rapat ini", + "yahooEmail": "Email Yahoo" + }, + "audioDevices": { + "bluetooth": "Bluetooth", + "car": "Audio Mobil", + "headphones": "Headphone", + "none": "Tidak ada perangkat audio yang tersedia", + "phone": "Ponsel", + "speaker": "Speaker" + }, + "audioOnly": { + "audioOnly": "Bandwidth rendah" + }, + "bandwidthSettings": { + "assumedBandwidthBps": "misalnya 10000000 untuk 10 Mbps", + "assumedBandwidthBpsWarning": "Nilai yang lebih tinggi dapat menyebabkan masalah jaringan.", + "customValue": "nilai kustom", + "customValueEffect": "untuk mengatur nilai bps yang sebenarnya", + "leaveEmpty": "biarkan kosong", + "leaveEmptyEffect": "untuk memungkinkan estimasi dilakukan", + "possibleValues": "Nilai yang mungkin", + "setAssumedBandwidthBps": "Bandwidth yang diasumsikan (bps)", + "title": "Pengaturan bandwidth", + "zeroEffect": "untuk menonaktifkan video" + }, + "breakoutRooms": { + "actions": { + "add": "Tambahkan ruang breakout", + "autoAssign": "Tetapkan secara otomatis ke ruang breakout", + "close": "Tutup", + "join": "Gabung", + "leaveBreakoutRoom": "Tinggalkan ruang breakout", + "more": "Lainnya", + "remove": "Hapus", + "rename": "Ganti nama", + "renameBreakoutRoom": "Ganti nama ruang breakout", + "sendToBreakoutRoom": "Kirim peserta ke:" + }, + "breakoutList": "Daftar breakout", + "buttonLabel": "Ruang breakout", + "defaultName": "Ruang breakout #{{index}}", + "hideParticipantList": "Sembunyikan daftar peserta", + "mainRoom": "Ruang utama", + "notifications": { + "joined": "Bergabung dengan ruang breakout \"{{name}}\"", + "joinedMainRoom": "Bergabung dengan ruang utama", + "joinedTitle": "Ruang Breakout" + }, + "showParticipantList": "Tampilkan daftar peserta", + "title": "Ruang Breakout" + }, + "calendarSync": { + "addMeetingURL": "Tambahkan tautan rapat", + "confirmAddLink": "Apakah Anda ingin menambahkan tautan Jitsi ke acara ini?", + "error": { + "appConfiguration": "Integrasi kalender tidak dikonfigurasi dengan benar.", + "generic": "Terjadi kesalahan. Harap periksa pengaturan kalender Anda atau coba perbarui kalender.", + "notSignedIn": "Terjadi kesalahan saat mengautentikasi untuk melihat acara kalender. Harap periksa pengaturan kalender Anda dan coba masuk kembali." + }, + "join": "Gabung", + "joinTooltip": "Gabung ke rapat", + "nextMeeting": "Rapat berikutnya", + "noEvents": "Tidak ada acara mendatang yang dijadwalkan.", + "ongoingMeeting": "Rapat sedang berlangsung", + "permissionButton": "Buka pengaturan", + "permissionMessage": "Izin Kalender diperlukan untuk melihat rapat Anda dalam aplikasi.", + "refresh": "Perbarui kalender", + "today": "Hari ini" + }, + "carmode": { + "actions": { + "selectSoundDevice": "Pilih perangkat suara" + }, + "labels": { + "buttonLabel": "Mode mobil", + "title": "Mode mobil", + "videoStopped": "Video Anda dihentikan" + } + }, + "chat": { + "enter": "Masuk ke ruang", + "error": "Error: pesan Anda tidak terkirim. Alasan: {{error}}", + "fieldPlaceHolder": "Aa", + "lobbyChatMessageTo": "Pesan obrolan lobby ke {{recipient}}", + "message": "Pesan", + "messageAccessibleTitle": "{{user}} berkata:", + "messageAccessibleTitleMe": "saya berkata:", + "messageTo": "Pesan pribadi ke {{recipient}}", + "messagebox": "Ketik pesan", + "newMessages": "Pesan baru", + "nickname": { + "popover": "Pilih nama panggilan", + "title": "Masukkan nama panggilan untuk menggunakan obrolan", + "titleWithPolls": "Masukkan nama panggilan untuk menggunakan obrolan dan jajak pendapat" + }, + "noMessagesMessage": "Belum ada pesan dalam pertemuan ini. Mulai percakapan di sini!", + "privateNotice": "Pesan pribadi ke {{recipient}}", + "sendButton": "Kirim", + "smileysPanel": "Panel Emoji", + "systemDisplayName": "Sistem", + "tabs": { + "chat": "Obrolan", + "polls": "Jajak Pendapat" + }, + "title": "Obrolan", + "titleWithPolls": "Obrolan dan Jajak Pendapat", + "you": "Anda" + }, + "chromeExtensionBanner": { + "buttonText": "Pasang Ekstensi Chrome", + "buttonTextEdge": "Pasang Ekstensi Edge", + "close": "Tutup", + "dontShowAgain": "Jangan tampilkan ini lagi", + "installExtensionText": "Pasang ekstensi untuk integrasi Google Calendar dan Office 365" + }, + "connectingOverlay": { + "joiningRoom": "Menghubungkan Anda ke pertemuan Anda…" + }, + "connection": { + "ATTACHED": "Terlampir", + "AUTHENTICATING": "Mengautentikasi", + "AUTHFAIL": "Autentikasi gagal", + "CONNECTED": "Terhubung", + "CONNECTING": "Menghubungkan", + "CONNFAIL": "Gagal terhubung", + "DISCONNECTED": "Terputus", + "DISCONNECTING": "Memutuskan", + "ERROR": "Error", + "FETCH_SESSION_ID": "Mendapatkan session-id…", + "GET_SESSION_ID_ERROR": "Error mendapatkan session-id: {{code}}", + "GOT_SESSION_ID": "Mendapatkan session-id… Selesai", + "LOW_BANDWIDTH": "Video untuk {{displayName}} telah dimatikan untuk menghemat bandwidth" + }, + "connectionindicator": { + "address": "Alamat:", + "audio_ssrc": "Audio SSRC:", + "bandwidth": "Perkiraan bandwidth:", + "bitrate": "Bitrate:", + "bridgeCount": "Jumlah server: ", + "codecs": "Codec (A/V): ", + "connectedTo": "Terhubung ke:", + "e2eeVerified": "E2EE diverifikasi:", + "framerate": "Frame rate:", + "less": "Tampilkan lebih sedikit", + "localaddress": "Alamat lokal:", + "localaddress_plural": "Alamat lokal:", + "localport": "Port lokal:", + "localport_plural": "Port lokal:", + "maxEnabledResolution": "kirim maks", + "more": "Tampilkan lebih banyak", + "no": "tidak", + "packetloss": "Packet loss:", + "participant_id": "ID Partisipan:", + "quality": { + "good": "Bagus", + "inactive": "Tidak aktif", + "lost": "Hilang", + "nonoptimal": "Nonoptimal", + "poor": "Buruk" + }, + "remoteaddress": "Alamat remote:", + "remoteaddress_plural": "Alamat remote:", + "remoteport": "Port remote:", + "remoteport_plural": "Port remote:", + "resolution": "Resolusi:", + "savelogs": "Simpan log", + "status": "Koneksi:", + "transport": "Transport:", + "transport_plural": "Transport:", + "video_ssrc": "Video SSRC:", + "yes": "ya" + }, + "dateUtils": { + "earlier": "Lebih awal", + "today": "Hari ini", + "yesterday": "Kemarin" + }, + "deepLinking": { + "appNotInstalled": "Anda memerlukan aplikasi seluler {{app}} untuk bergabung dengan pertemuan ini di ponsel Anda.", + "description": "Tidak terjadi apa-apa? Kami mencoba meluncurkan pertemuan Anda di aplikasi desktop {{app}}. Coba lagi atau buka di aplikasi web {{app}}.", + "descriptionNew": "Tidak terjadi apa-apa? Kami mencoba meluncurkan pertemuan Anda di aplikasi desktop {{app}}.

Anda dapat mencoba lagi atau buka di web.", + "descriptionWithoutWeb": "Tidak terjadi apa-apa? Kami mencoba meluncurkan pertemuan Anda di aplikasi desktop {{app}}.", + "downloadApp": "Unduh aplikasi", + "downloadMobileApp": "Unduh dari App Store", + "ifDoNotHaveApp": "Jika Anda belum memiliki aplikasi:", + "ifHaveApp": "Jika Anda sudah memiliki aplikasi:", + "joinInApp": "Bergabung dengan pertemuan ini menggunakan aplikasi", + "joinInAppNew": "Bergabung dalam aplikasi", + "joinInBrowser": "Bergabung di peramban", + "launchMeetingLabel": "Bagaimana Anda ingin bergabung dengan pertemuan ini?", + "launchWebButton": "Buka di web", + "noDesktopApp": "Anda tidak memiliki aplikasinya?", + "noMobileApp": "Anda tidak memiliki aplikasinya?", + "or": "ATAU", + "termsAndConditions": "Dengan melanjutkan Anda menyetujui syarat & ketentuan kami.", + "title": "Meluncurkan pertemuan Anda di {{app}}…", + "titleNew": "Meluncurkan pertemuan Anda…", + "tryAgainButton": "Coba lagi di desktop", + "unsupportedBrowser": "Sepertinya Anda menggunakan peramban yang tidak kami dukung." + }, + "defaultLink": "contoh. {{url}}", + "defaultNickname": "contoh. Jane Pink", + "deviceError": { + "cameraError": "Gagal mengakses kamera Anda", + "cameraPermission": "Error memperoleh izin kamera", + "microphoneError": "Gagal mengakses mikrofon Anda", + "microphonePermission": "Error memperoleh izin mikrofon" + }, + "deviceSelection": { + "hid": { + "callControl": "Kontrol panggilan", + "connectedDevices": "Perangkat terhubung:", + "deleteDevice": "Hapus perangkat", + "pairDevice": "Pasangkan perangkat" + }, + "noPermission": "Izin tidak diberikan", + "previewUnavailable": "Pratinjau tidak tersedia", + "selectADevice": "Pilih perangkat", + "testAudio": "Uji" + }, + "dialIn": { + "screenTitle": "Ringkasan panggilan masuk" + }, + "dialOut": { + "statusMessage": "sekarang {{status}}" + }, + "dialog": { + "Back": "Kembali", + "Cancel": "Batal", + "IamHost": "Masuk", + "Ok": "OK", + "Remove": "Hapus", + "Share": "Bagikan", + "Submit": "Kirim", + "WaitForHostMsg": "Konferensi belum dimulai karena belum ada moderator yang datang. Jika Anda ingin menjadi moderator, silakan masuk. Jika tidak, harap tunggu.", + "WaitForHostNoAuthMsg": "Konferensi belum dimulai karena belum ada moderator yang datang. Harap tunggu.", + "WaitingForHostButton": "Tunggu moderator", + "WaitingForHostTitle": "Menunggu moderator…", + "Yes": "Ya", + "accessibilityLabel": { + "Cancel": "Batal (tinggalkan dialog)", + "Ok": "OK (simpan dan tinggalkan dialog)", + "close": "Tutup dialog", + "liveStreaming": "Streaming Langsung", + "sharingTabs": "Opsi Berbagi" + }, + "add": "Tambah", + "addMeetingNote": "Tambahkan catatan tentang pertemuan ini", + "addOptionalNote": "Tambahkan catatan (opsional):", + "allow": "Izinkan", + "allowToggleCameraDialog": "Apakah Anda mengizinkan {{initiatorName}} untuk mengubah mode kamera Anda?", + "allowToggleCameraTitle": "Izinkan ubah kamera?", + "alreadySharedVideoMsg": "Partisipan lain sudah membagikan video. Konferensi ini hanya memungkinkan satu video yang dibagikan pada satu waktu.", + "alreadySharedVideoTitle": "Hanya satu video yang diizinkan pada satu waktu", + "applicationWindow": "Jendela aplikasi", + "authenticationRequired": "Autentikasi diperlukan", + "cameraConstraintFailedError": "Kamera Anda tidak memenuhi beberapa batasan yang diperlukan.", + "cameraNotFoundError": "Kamera tidak ditemukan.", + "cameraNotSendingData": "Kami tidak dapat mengakses kamera Anda. Periksa apakah aplikasi lain menggunakan perangkat ini, pilih perangkat lain dari menu pengaturan, atau coba muat ulang aplikasi.", + "cameraNotSendingDataTitle": "Tidak dapat mengakses kamera", + "cameraPermissionDeniedError": "Anda belum memberikan izin untuk menggunakan kamera Anda. Anda masih dapat bergabung dengan konferensi tetapi orang lain tidak akan melihat Anda. Gunakan tombol kamera di bilah alamat untuk memperbaikinya.", + "cameraTimeoutError": "Tidak dapat memulai sumber video. Timeout terjadi!", + "cameraUnknownError": "Tidak dapat menggunakan kamera karena alasan yang tidak diketahui.", + "cameraUnsupportedResolutionError": "Kamera Anda tidak mendukung resolusi video yang diperlukan.", + "close": "Tutup", + "conferenceDisconnectMsg": "Anda mungkin ingin memeriksa koneksi jaringan Anda. Menghubungkan kembali dalam {{seconds}} detik…", + "conferenceDisconnectTitle": "Anda telah terputus.", + "conferenceReloadMsg": "Kami mencoba memperbaiki ini. Menghubungkan kembali dalam {{seconds}} detik…", + "conferenceReloadTitle": "Sayangnya, terjadi kesalahan.", + "confirm": "Konfirmasi", + "confirmNo": "Tidak", + "confirmYes": "Ya", + "connectError": "Ups! Ada yang salah dan kami tidak bisa terhubung ke konferensi.", + "connectErrorWithMsg": "Ups! Ada yang salah dan kami tidak bisa terhubung ke konferensi: {{msg}}", + "connecting": "Menghubungkan", + "contactSupport": "Hubungi dukungan", + "copied": "Tersalin", + "copy": "Salin", + "demoteParticipantDialog": "Apakah Anda yakin ingin memindahkan partisipan ini ke pengunjung?", + "demoteParticipantTitle": "Pindahkan ke pengunjung", + "dismiss": "Abaikan", + "displayNameRequired": "Hai! Siapa namamu?", + "done": "Selesai", + "e2eeDescription": "Enkripsi End-to-End saat ini adalah EKSPERIMENTAL. Harap diingat bahwa mengaktifkan enkripsi end-to-end akan menonaktifkan layanan yang disediakan oleh server seperti: partisipasi telepon. Juga, perlu diingat bahwa pertemuan hanya akan berfungsi bagi orang yang bergabung dari browser dengan dukungan untuk aliran masuk.", + "e2eeDisabledDueToMaxModeDescription": "Tidak dapat mengaktifkan Enkripsi End-to-End karena jumlah partisipan yang besar dalam konferensi.", + "e2eeLabel": "Aktifkan Enkripsi End-to-End", + "e2eeWarning": "PERINGATAN: Tidak semua partisipan dalam pertemuan ini tampaknya memiliki dukungan untuk Enkripsi End-to-End. Jika Anda mengaktifkannya, mereka tidak akan dapat melihat atau mendengar Anda.", + "e2eeWillDisableDueToMaxModeDescription": "PERINGATAN: Enkripsi End-to-End akan dinonaktifkan secara otomatis jika lebih banyak partisipan bergabung dalam konferensi.", + "embedMeeting": "Sematkan pertemuan", + "enterDisplayName": "Masukkan namamu", + "error": "Error", + "errorRoomCreationRestriction": "Anda mencoba bergabung terlalu cepat, harap kembali beberapa saat lagi.", + "gracefulShutdown": "Layanan kami saat ini tidak berfungsi karena pemeliharaan. Silakan coba lagi nanti.", + "grantModeratorDialog": "Apakah Anda yakin ingin memberikan hak moderator kepada {{participantName}}?", + "grantModeratorTitle": "Berikan hak moderator", + "hide": "Sembunyikan", + "hideShareAudioHelper": "Jangan tampilkan dialog ini lagi", + "incorrectPassword": "Nama pengguna atau kata sandi salah", + "incorrectRoomLockPassword": "Kata sandi salah", + "internalError": "Ups! Ada yang salah. Kesalahan berikut terjadi: {{error}}", + "internalErrorTitle": "Kesalahan internal", + "kickMessage": "Anda dapat menghubungi {{participantDisplayName}} untuk detail lebih lanjut.", + "kickParticipantButton": "Keluarkan", + "kickParticipantDialog": "Apakah Anda yakin ingin mengeluarkan partisipan ini?", + "kickParticipantTitle": "Keluarkan partisipan ini?", + "kickTitle": "Ouch! {{participantDisplayName}} mengeluarkan Anda dari pertemuan", + "linkMeeting": "Tautkan pertemuan", + "linkMeetingTitle": "Tautkan pertemuan ke Salesforce", + "liveStreaming": "Streaming Langsung", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Tidak mungkin saat perekaman aktif", + "localUserControls": "Kontrol pengguna lokal", + "lockMessage": "Gagal mengunci konferensi.", + "lockRoom": "Tambahkan kata sandi pertemuan $t(lockRoomPassword)", + "lockTitle": "Kunci gagal", + "login": "Masuk", + "loginQuestion": "Apakah Anda yakin ingin masuk dan meninggalkan konferensi?", + "logoutQuestion": "Apakah Anda yakin ingin keluar dan meninggalkan konferensi?", + "logoutTitle": "Keluar", + "maxUsersLimitReached": "Batas jumlah peserta maksimum telah tercapai. Konferensi penuh. Harap hubungi pemilik pertemuan atau coba lagi nanti!", + "maxUsersLimitReachedTitle": "Batas peserta maksimum tercapai", + "micConstraintFailedError": "Mikrofon Anda tidak memenuhi beberapa batasan yang diperlukan.", + "micNotFoundError": "Mikrofon tidak ditemukan.", + "micNotSendingData": "Buka pengaturan komputer Anda untuk membuka suara mikrofon Anda dan menyesuaikan levelnya", + "micNotSendingDataTitle": "Mikrofon Anda dibisukan oleh pengaturan sistem Anda", + "micPermissionDeniedError": "Anda belum memberikan izin untuk menggunakan mikrofon Anda. Anda masih dapat bergabung dengan konferensi tetapi orang lain tidak akan mendengar Anda. Gunakan tombol kamera di bilah alamat untuk memperbaikinya.", + "micTimeoutError": "Tidak dapat memulai sumber audio. Timeout terjadi!", + "micUnknownError": "Tidak dapat menggunakan mikrofon karena alasan yang tidak diketahui.", + "moderationAudioLabel": "Izinkan peserta membuka suara mereka sendiri", + "moderationVideoLabel": "Izinkan peserta untuk memulai video mereka", + "muteEveryoneDialog": "Partisipan dapat membuka suara mereka sendiri kapan saja.", + "muteEveryoneDialogModerationOn": "Partisipan dapat mengirim permintaan untuk berbicara kapan saja.", + "muteEveryoneElseDialog": "Setelah dibisukan, Anda tidak akan bisa membukanya kembali, tetapi mereka dapat membuka suara mereka kapan saja.", + "muteEveryoneElseTitle": "Bisukan semua kecuali {{whom}}?", + "muteEveryoneElsesVideoDialog": "Setelah kamera dinonaktifkan, Anda tidak akan bisa mengaktifkannya kembali, tetapi mereka dapat mengaktifkannya kembali kapan saja.", + "muteEveryoneElsesVideoTitle": "Hentikan video semua kecuali {{whom}}?", + "muteEveryoneSelf": "dirimu sendiri", + "muteEveryoneStartMuted": "Semua orang mulai dibisukan dari sekarang", + "muteEveryoneTitle": "Bisukan semua?", + "muteEveryonesVideoDialog": "Partisipan dapat menyalakan video mereka kapan saja.", + "muteEveryonesVideoDialogModerationOn": "Partisipan dapat mengirim permintaan untuk menyalakan video mereka kapan saja.", + "muteEveryonesVideoDialogOk": "Nonaktifkan", + "muteEveryonesVideoTitle": "Hentikan video semua orang?", + "muteParticipantBody": "Anda tidak akan bisa membukanya kembali, tetapi mereka dapat membuka suara mereka kapan saja.", + "muteParticipantButton": "Bisukan", + "muteParticipantsVideoBody": "Anda tidak akan bisa menyalakan kamera kembali, tetapi mereka dapat menyalakannya kembali kapan saja.", + "muteParticipantsVideoBodyModerationOn": "Anda tidak akan bisa menyalakan kamera kembali dan mereka juga tidak akan bisa.", + "muteParticipantsVideoButton": "Hentikan video", + "muteParticipantsVideoDialog": "Apakah Anda yakin ingin menonaktifkan kamera partisipan ini? Anda tidak akan bisa menyalakan kamera kembali, tetapi mereka dapat menyalakannya kembali kapan saja.", + "muteParticipantsVideoDialogModerationOn": "Apakah Anda yakin ingin menonaktifkan kamera partisipan ini? Anda tidak akan bisa menyalakan kamera kembali dan mereka juga tidak akan bisa.", + "muteParticipantsVideoTitle": "Nonaktifkan kamera partisipan ini?", + "noDropboxToken": "Tidak ada token Dropbox valid", + "password": "Kata sandi", + "passwordLabel": "Konferensi telah dikunci oleh seorang partisipan. Harap masukkan $t(lockRoomPassword) untuk bergabung.", + "passwordNotSupported": "Pengaturan $t(lockRoomPassword) pertemuan tidak didukung.", + "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) tidak didukung", + "passwordRequired": "$t(lockRoomPasswordUppercase) diperlukan", + "permissionCameraRequiredError": "Izin kamera diperlukan untuk berpartisipasi dalam konferensi dengan video. Harap berikan izin tersebut di Pengaturan", + "permissionErrorTitle": "Izin diperlukan", + "permissionMicRequiredError": "Izin mikrofon diperlukan untuk berpartisipasi dalam konferensi dengan audio. Harap berikan izin tersebut di Pengaturan", + "readMore": "lebih lanjut", + "recentlyUsedObjects": "Objek yang Anda gunakan baru-baru ini", + "recording": "Merekam", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Tidak mungkin saat streaming langsung aktif", + "rejoinNow": "Gabung kembali sekarang", + "remoteControlAllowedMessage": "{{user}} menerima permintaan kontrol jarak jauh Anda!", + "remoteControlDeniedMessage": "{{user}} menolak permintaan kontrol jarak jauh Anda!", + "remoteControlErrorMessage": "Terjadi kesalahan saat mencoba meminta izin kontrol jarak jauh dari {{user}}!", + "remoteControlRequestMessage": "Apakah Anda akan mengizinkan {{user}} untuk mengontrol desktop Anda dari jarak jauh?", + "remoteControlShareScreenWarning": "Perhatikan bahwa jika Anda menekan \"Izinkan\" Anda akan membagikan layar Anda!", + "remoteControlStopMessage": "Sesi kontrol jarak jauh berakhir!", + "remoteControlTitle": "Kontrol desktop jarak jauh", + "remoteUserControls": "Kontrol pengguna jarak jauh dari {{username}}", + "removePassword": "Hapus $t(lockRoomPassword)", + "removeSharedVideoMsg": "Apakah Anda yakin ingin menghapus video yang Anda bagikan?", + "removeSharedVideoTitle": "Hapus video yang dibagikan", + "renameBreakoutRoomLabel": "Nama ruang", + "renameBreakoutRoomTitle": "Ubah nama ruang breakout", + "reservationError": "Kesalahan sistem reservasi", + "reservationErrorMsg": "Kode kesalahan: {{code}}, pesan: {{msg}}", + "retry": "Coba lagi", + "screenSharingAudio": "Bagikan audio", + "screenSharingFailed": "Ups! Ada yang salah, kami tidak dapat memulai berbagi layar!", + "screenSharingFailedTitle": "Berbagi layar gagal!", + "screenSharingPermissionDeniedError": "Ups! Ada yang salah dengan izin berbagi layar Anda. Harap muat ulang dan coba lagi.", + "searchInSalesforce": "Cari di Salesforce", + "searchResults": "Hasil pencarian ({{count}})", + "searchResultsDetailsError": "Ada masalah saat mengambil data pemilik.", + "searchResultsError": "Ada masalah saat mengambil data.", + "searchResultsNotFound": "Tidak ada hasil pencarian ditemukan.", + "searchResultsTryAgain": "Coba gunakan kata kunci alternatif.", + "sendPrivateMessage": "Anda baru saja menerima pesan pribadi. Apakah Anda bermaksud untuk membalas secara pribadi, atau Anda ingin mengirim pesan Anda ke grup?", + "sendPrivateMessageCancel": "Kirim ke grup", + "sendPrivateMessageOk": "Kirim secara pribadi", + "sendPrivateMessageTitle": "Kirim secara pribadi?", + "serviceUnavailable": "Layanan tidak tersedia", + "sessTerminated": "Panggilan berakhir", + "sessTerminatedReason": "Pertemuan telah berakhir", + "sessionRestarted": "Panggilan diulang karena masalah koneksi.", + "shareAudio": "Lanjutkan", + "shareAudioAltText": "untuk membagikan konten yang diinginkan, navigasikan ke \"Tab Browser\", pilih konten, aktifkan tanda centang \"bagikan audio\" dan klik tombol \"bagikan\"", + "shareAudioTitle": "Bagaimana cara berbagi audio", + "shareAudioWarningD1": "Anda perlu menghentikan berbagi layar sebelum berbagi audio Anda.", + "shareAudioWarningD2": "Anda perlu me-restart berbagi layar Anda dan memeriksa opsi \"bagikan audio\".", + "shareAudioWarningH1": "Jika Anda hanya ingin berbagi audio:", + "shareAudioWarningTitle": "Anda perlu menghentikan berbagi layar sebelum berbagi audio", + "shareMediaWarningGenericH2": "Jika Anda ingin berbagi layar dan audio Anda", + "shareScreenWarningD1": "Anda perlu menghentikan berbagi audio sebelum berbagi layar Anda.", + "shareScreenWarningD2": "Anda perlu menghentikan berbagi audio, memulai berbagi layar, dan memeriksa opsi \"bagikan audio\".", + "shareScreenWarningH1": "Jika Anda hanya ingin berbagi layar Anda:", + "shareScreenWarningTitle": "Anda perlu menghentikan berbagi audio sebelum berbagi layar Anda", + "shareVideoLinkError": "Harap berikan tautan video yang benar.", + "shareVideoTitle": "Bagikan video", + "shareYourScreen": "Bagikan layar Anda", + "shareYourScreenDisabled": "Berbagi layar dinonaktifkan.", + "sharedVideoDialogError": "Kesalahan: URL tidak valid", + "sharedVideoLinkPlaceholder": "Tautan YouTube atau tautan video langsung", + "show": "Tampilkan", + "start": "Mulai", + "startLiveStreaming": "Mulai streaming langsung", + "startRecording": "Mulai perekaman", + "startRemoteControlErrorMessage": "Terjadi kesalahan saat mencoba memulai sesi kontrol jarak jauh!", + "stopLiveStreaming": "Hentikan streaming langsung", + "stopRecording": "Hentikan perekaman", + "stopRecordingWarning": "Apakah Anda yakin ingin menghentikan perekaman?", + "stopStreamingWarning": "Apakah Anda yakin ingin menghentikan streaming langsung?", + "streamKey": "Kunci streaming langsung", + "thankYou": "Terima kasih telah menggunakan {{appName}}!", + "token": "token", + "tokenAuthFailed": "Maaf, Anda tidak diizinkan untuk bergabung dengan panggilan ini.", + "tokenAuthFailedReason": { + "audInvalid": "Nilai `aud` tidak valid. Harus `jitsi`.", + "contextNotFound": "Objek `context` hilang dari muatan.", + "expInvalid": "Nilai `exp` tidak valid.", + "featureInvalid": "Fitur tidak valid: {{feature}}, kemungkinan besar belum diimplementasikan.", + "featureValueInvalid": "Nilai tidak valid untuk fitur: {{feature}}.", + "featuresNotFound": "Objek `features` hilang dari muatan.", + "headerNotFound": "Tidak ada header.", + "issInvalid": "Nilai `iss` tidak valid. Harus `chat`.", + "kidMismatch": "ID Kunci (kid) tidak cocok dengan sub.", + "kidNotFound": "ID Kunci (kid) tidak ditemukan.", + "nbfFuture": "Nilai `nbf` berada di masa depan.", + "nbfInvalid": "Nilai `nbf` tidak valid.", + "payloadNotFound": "Muatan hilang.", + "tokenExpired": "Token kedaluwarsa." + }, + "tokenAuthFailedTitle": "Autentikasi gagal", + "tokenAuthFailedWithReasons": "Maaf, Anda tidak diizinkan untuk bergabung dengan panggilan ini. Kemungkinan alasan: {{reason}}", + "tokenAuthUnsupported": "URL Token tidak didukung.", + "transcribing": "Transkripsi", + "unlockRoom": "Hapus $t(lockRoomPassword)", + "user": "Pengguna", + "userIdentifier": "Identifier pengguna", + "userPassword": "Kata sandi pengguna", + "verifyParticipantConfirm": "Mereka cocok", + "verifyParticipantDismiss": "Mereka tidak cocok", + "verifyParticipantQuestion": "EKSPERIMENTAL: Tanyakan pada peserta {{participantName}} apakah mereka melihat konten yang sama, dalam urutan yang sama.", + "verifyParticipantTitle": "Verifikasi pengguna", + "videoLink": "Tautan video", + "viewUpgradeOptions": "Lihat opsi peningkatan", + "viewUpgradeOptionsContent": "Untuk mendapatkan akses tanpa batas ke fitur premium seperti perekaman, transkripsi, Streaming RTMP & lebih, Anda perlu meningkatkan paket Anda.", + "viewUpgradeOptionsTitle": "Anda menemukan fitur premium!", + "whiteboardLimitContent": "Maaf, batas pengguna whiteboard bersama telah tercapai.", + "whiteboardLimitReference": "Untuk informasi lebih lanjut, silakan kunjungi", + "whiteboardLimitReferenceUrl": "situs web kami", + "whiteboardLimitTitle": "Penggunaan papan tulis terbatas", + "yourEntireScreen": "Seluruh layar Anda" + }, + "documentSharing": { + "title": "Dokumen yang Dibagikan" + }, + "e2ee": { + "labelToolTip": "Komunikasi Audio dan Video dalam panggilan ini dienkripsi end-to-end" + }, + "embedMeeting": { + "title": "Sematkan pertemuan ini" + }, + "feedback": { + "accessibilityLabel": { + "yourChoice": "Pilihan Anda: {{rating}}" + }, + "average": "Rata-rata", + "bad": "Buruk", + "detailsLabel": "Beritahu kami lebih lanjut tentang itu.", + "good": "Baik", + "rateExperience": "Beri penilaian pengalaman pertemuan Anda", + "star": "Bintang", + "veryBad": "Sangat Buruk", + "veryGood": "Sangat Baik" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Thumbnail Video" + } + }, + "giphy": { + "noResults": "Tidak ada hasil yang ditemukan :(", + "search": "Cari di GIPHY" + }, + "incomingCall": { + "answer": "Jawab", + "audioCallTitle": "Panggilan Masuk", + "decline": "Tolak", + "productLabel": "dari Jitsi Meet", + "videoCallTitle": "Panggilan Video Masuk" + }, + "info": { + "accessibilityLabel": "Tampilkan info", + "addPassword": "Tambahkan $t(lockRoomPassword)", + "cancelPassword": "Batalkan $t(lockRoomPassword)", + "conferenceURL": "Tautan:", + "copyNumber": "Salin nomor", + "country": "Negara", + "dialANumber": "Untuk bergabung dengan pertemuan Anda, tekan salah satu nomor ini dan masukkan pin.", + "dialInConferenceID": "PIN:", + "dialInNotSupported": "Maaf, pemanggilan saat ini tidak didukung.", + "dialInNumber": "Dial-in:", + "dialInSummaryError": "Kesalahan dalam mengambil info dial-in sekarang. Silakan coba lagi nanti.", + "dialInTollFree": "Bebas Pulsa", + "genericError": "Whups, ada yang salah.", + "inviteLiveStream": "Untuk melihat streaming langsung pertemuan ini, klik tautan ini: {{url}}", + "invitePhone": "Untuk bergabung melalui telepon, ketuk ini: {{number}},,{{conferenceID}}#\n", + "invitePhoneAlternatives": "Mencari nomor panggilan lain?\nLihat nomor panggilan pertemuan: {{url}}\n\n\nJika juga melakukan panggilan melalui telepon ruangan, bergabung tanpa menghubungkan ke audio: {{silentUrl}}", + "inviteSipEndpoint": "Untuk bergabung menggunakan alamat SIP, masukkan ini: {{sipUri}}", + "inviteTextiOSInviteUrl": "Klik tautan berikut untuk bergabung: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "Jika Anda melakukan panggilan melalui telepon ruangan, gunakan tautan ini untuk bergabung tanpa menghubungkan ke audio: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}} mengundang Anda ke pertemuan.", + "inviteTextiOSPhone": "Untuk bergabung melalui telepon, gunakan nomor ini: {{number}},,{{conferenceID}}#. Jika Anda mencari nomor lain, ini daftar lengkapnya: {{didUrl}}.", + "inviteURLFirstPartGeneral": "Anda diundang untuk bergabung dalam pertemuan.", + "inviteURLFirstPartPersonal": "{{name}} mengundang Anda ke pertemuan.\n", + "inviteURLSecondPart": "\nBergabunglah dalam pertemuan:\n{{url}}\n", + "label": "Info Dial-in", + "liveStreamURL": "Streaming langsung:", + "moreNumbers": "Lebih banyak nomor", + "noNumbers": "Tidak ada nomor dial-in.", + "noPassword": "Tidak ada", + "noRoom": "Tidak ada ruangan yang ditentukan untuk dial-in.", + "noWhiteboard": "Tidak dapat memuat papan tulis.", + "numbers": "Nomor-nomor Dial-in", + "password": "$t(lockRoomPasswordUppercase): ", + "reachedLimit": "Anda telah mencapai batas paket Anda.", + "sip": "Alamat SIP", + "sipAudioOnly": "Alamat audio SIP saja", + "title": "Bagikan", + "tooltip": "Bagikan tautan dan info dial-in untuk pertemuan ini", + "upgradeOptions": "Silakan periksa opsi peningkatan di", + "whiteboardError": "Kesalahan dalam memuat papan tulis. Silakan coba lagi nanti." + }, + "inlineDialogFailure": { + "msg": "Kami sedikit tersandung.", + "retry": "Coba lagi", + "support": "Dukungan", + "supportMsg": "Jika ini terus terjadi, hubungi" + }, + "inviteDialog": { + "alertText": "Gagal mengundang beberapa peserta.", + "header": "Undang", + "searchCallOnlyPlaceholder": "Masukkan nomor telepon", + "searchPeopleOnlyPlaceholder": "Cari peserta", + "searchPlaceholder": "Peserta atau nomor telepon", + "send": "Kirim" + }, + "jitsiHome": "{{logo}} Logo, tautan ke Beranda", + "keyboardShortcuts": { + "focusLocal": "Fokus pada video Anda", + "focusRemote": "Fokus pada video orang lain", + "fullScreen": "Lihat atau keluar dari layar penuh", + "giphyMenu": "Beralih menu GIPHY", + "keyboardShortcuts": "Pintasan keyboard", + "localRecording": "Tampilkan atau sembunyikan kontrol perekaman lokal", + "mute": "Bisukan atau aktifkan mikrofon Anda", + "pushToTalk": "Tekan untuk berbicara", + "raiseHand": "Angkat atau turunkan tangan Anda", + "showSpeakerStats": "Tampilkan statistik partisipan", + "toggleChat": "Buka atau tutup obrolan", + "toggleFilmstrip": "Tampilkan atau sembunyikan thumbnail video", + "toggleParticipantsPane": "Tampilkan atau sembunyikan panel partisipan", + "toggleScreensharing": "Beralih antara berbagi kamera dan layar", + "toggleShortcuts": "Tampilkan atau sembunyikan pintasan keyboard", + "videoMute": "Mulai atau hentikan kamera Anda" + }, + "largeVideo": { + "screenIsShared": "Anda sedang membagikan layar Anda", + "showMeWhatImSharing": "Tunjukkan apa yang saya bagikan" + }, + "liveStreaming": { + "busy": "Kami sedang berupaya untuk membebaskan sumber daya streaming. Silakan coba lagi dalam beberapa menit.", + "busyTitle": "Semua streamer saat ini sibuk", + "changeSignIn": "Ganti akun.", + "choose": "Pilih siaran langsung", + "chooseCTA": "Pilih opsi streaming. Anda saat ini masuk sebagai {{email}}.", + "enterStreamKey": "Masukkan kunci siaran langsung YouTube Anda di sini.", + "error": "Gagal Siaran Langsung. Silakan coba lagi.", + "errorAPI": "Terjadi kesalahan saat mengakses siaran YouTube Anda. Silakan coba masuk lagi.", + "errorLiveStreamNotEnabled": "Siaran Langsung tidak diaktifkan pada {{email}}. Harap aktifkan siaran langsung atau masuk ke akun dengan siaran langsung diaktifkan.", + "expandedOff": "Siaran Langsung telah berhenti", + "expandedOn": "Pertemuan saat ini sedang siaran langsung", + "expandedPending": "Siaran Langsung sedang dimulai…", + "failedToStart": "Gagal memulai Siaran Langsung", + "getStreamKeyManually": "Kami tidak dapat mengambil siaran langsung apa pun. Coba dapatkan kunci siaran langsung Anda dari YouTube.", + "googlePrivacyPolicy": "Kebijakan Privasi Google", + "inProgress": "Perekaman atau siaran langsung sedang berlangsung", + "invalidStreamKey": "Kunci siaran langsung mungkin salah.", + "limitNotificationDescriptionNative": "Pemutaran streaming Anda akan dibatasi menjadi {{limit}} menit. Untuk streaming tanpa batas, coba {{app}}.", + "limitNotificationDescriptionWeb": "Karena permintaan yang tinggi, streaming Anda akan dibatasi menjadi {{limit}} menit. Untuk streaming tanpa batas, coba {{app}}.", + "off": "Siaran Langsung berhenti", + "offBy": "{{name}} menghentikan siaran langsung", + "on": "Siaran Langsung dimulai", + "onBy": "{{name}} memulai siaran langsung", + "pending": "Memulai Live Stream…", + "serviceName": "Layanan Siaran Langsung", + "sessionAlreadyActive": "Sesi ini sudah direkam atau siaran langsung.", + "signIn": "Masuk dengan Google", + "signInCTA": "Masuk atau masukkan kunci siaran langsung Anda dari YouTube.", + "signOut": "Keluar", + "signedInAs": "Anda saat ini masuk sebagai:", + "start": "Mulai siaran langsung", + "streamIdHelp": "Apa ini?", + "title": "Live Stream", + "unavailableTitle": "Siaran Langsung tidak tersedia", + "youtubeTerms": "Ketentuan Layanan YouTube" + }, + "lobby": { + "backToKnockModeButton": "Meminta untuk bergabung", + "chat": "Obrolan", + "dialogTitle": "Mode Lobi", + "disableDialogContent": "Mode Lobi saat ini diaktifkan. Fitur ini memastikan bahwa peserta yang tidak diinginkan tidak dapat bergabung dengan pertemuan Anda. Apakah Anda ingin menonaktifkannya?", + "disableDialogSubmit": "Nonaktifkan", + "emailField": "Masukkan alamat email Anda", + "enableDialogPasswordField": "Atur kata sandi (opsional)", + "enableDialogSubmit": "Aktifkan", + "enableDialogText": "Mode Lobi memungkinkan Anda melindungi pertemuan Anda dengan hanya memungkinkan orang masuk setelah persetujuan formal oleh moderator.", + "enterPasswordButton": "Masukkan kata sandi pertemuan", + "enterPasswordTitle": "Masukkan kata sandi untuk bergabung dengan pertemuan", + "errorMissingPassword": "Harap masukkan kata sandi pertemuan", + "invalidPassword": "Kata sandi tidak valid", + "joinRejectedMessage": "Permintaan bergabung Anda ditolak oleh moderator.", + "joinRejectedTitle": "Permintaan bergabung ditolak.", + "joinTitle": "Bergabung dengan Pertemuan", + "joinWithPasswordMessage": "Mencoba bergabung dengan kata sandi, harap tunggu…", + "joiningMessage": "Anda akan bergabung dengan pertemuan segera setelah seseorang menerima permintaan Anda", + "joiningTitle": "Meminta untuk bergabung dengan pertemuan…", + "joiningWithPasswordTitle": "Bergabung dengan kata sandi…", + "knockButton": "Meminta untuk Bergabung", + "knockTitle": "Seseorang ingin bergabung dengan pertemuan", + "knockingParticipantList": "Daftar peserta yang meminta bergabung", + "lobbyChatStartedNotification": "{{moderator}} memulai obrolan lobi dengan {{attendee}}", + "lobbyChatStartedTitle": "{{moderator}} telah memulai obrolan lobi dengan Anda.", + "lobbyClosed": "Ruang lobi telah ditutup.", + "nameField": "Masukkan nama Anda", + "notificationLobbyAccessDenied": "{{targetParticipantName}} telah ditolak untuk bergabung oleh {{originParticipantName}}", + "notificationLobbyAccessGranted": "{{targetParticipantName}} telah diizinkan untuk bergabung oleh {{originParticipantName}}", + "notificationLobbyDisabled": "Lobi telah dinonaktifkan oleh {{originParticipantName}}", + "notificationLobbyEnabled": "Lobi telah diaktifkan oleh {{originParticipantName}}", + "notificationTitle": "Lobi", + "passwordJoinButton": "Gabung", + "title": "Lobi", + "toggleLabel": "Aktifkan lobi" + }, + "localRecording": { + "clientState": { + "off": "Mati", + "on": "Hidup", + "unknown": "Tidak diketahui" + }, + "dialogTitle": "Kontrol Perekaman Lokal", + "duration": "Durasi", + "durationNA": "N/A", + "encoding": "Pengodean", + "label": "Perekaman Lokal", + "labelToolTip": "Perekaman lokal sedang diaktifkan", + "localRecording": "Perekaman Lokal", + "me": "Saya", + "messages": { + "engaged": "Perekaman lokal diaktifkan.", + "finished": "Sesi perekaman {{token}} selesai. Silakan kirim file yang direkam ke moderator.", + "finishedModerator": "Sesi perekaman {{token}} selesai. Perekaman trek lokal telah disimpan. Mohon minta peserta lain untuk mengirimkan perekaman mereka.", + "notModerator": "Anda bukan moderator. Anda tidak dapat memulai atau menghentikan perekaman lokal." + }, + "moderator": "Moderator", + "no": "Tidak", + "participant": "Peserta", + "participantStats": "Statistik Peserta", + "selectTabTitle": "🎥 Silakan pilih tab ini untuk perekaman", + "sessionToken": "Token Sesi", + "start": "Mulai Perekaman", + "stop": "Hentikan Perekaman", + "stopping": "Menghentikan Perekaman", + "wait": "Harap tunggu sementara kami menyimpan rekaman Anda", + "yes": "Ya" + }, + "lockRoomPassword": "kata sandi", + "lockRoomPasswordUppercase": "Kata Sandi", + "lonelyMeetingExperience": { + "button": "Undang orang lain", + "youAreAlone": "Anda satu-satunya di pertemuan ini" + }, + "me": "saya", + "notify": { + "OldElectronAPPTitle": "Kerentanan keamanan!", + "allowAction": "Izinkan", + "allowedUnmute": "Anda dapat mengaktifkan mikrofon Anda, memulai kamera Anda, atau berbagi layar Anda.", + "audioUnmuteBlockedDescription": "Operasi membuka mikrofon sementara diblokir karena batasan sistem.", + "audioUnmuteBlockedTitle": "Pembukaan mikrofon diblokir!", + "chatMessages": "Pesan obrolan", + "connectedOneMember": "{{name}} bergabung dengan pertemuan", + "connectedThreePlusMembers": "{{name}} dan banyak lainnya bergabung dengan pertemuan", + "connectedTwoMembers": "{{first}} dan {{second}} bergabung dengan pertemuan", + "dataChannelClosed": "Kualitas video mungkin terganggu", + "dataChannelClosedDescription": "Saluran jembatan tidak aktif dan karenanya kualitas video mungkin terbatas pada pengaturan terendahnya.", + "dataChannelClosedDescriptionWithAudio": "Saluran jembatan tidak aktif dan karenanya gangguan audio dan video mungkin terjadi.", + "dataChannelClosedWithAudio": "Kualitas audio dan video mungkin terganggu", + "disabledIframe": "Embedding hanya ditujukan untuk tujuan demonstrasi, jadi panggilan ini akan terputus dalam {{timeout}} menit.", + "disabledIframeSecondary": "Embedding {{domain}} hanya ditujukan untuk tujuan demonstrasi, jadi panggilan ini akan terputus dalam {{timeout}} menit. Harap gunakan Jitsi as a Service untuk embedding produksi!", + "disconnected": "terputus", + "displayNotifications": "Tampilkan notifikasi untuk", + "dontRemindMe": "Jangan ingatkan saya", + "focus": "Fokus konferensi", + "focusFail": "{{component}} tidak tersedia - coba lagi dalam {{ms}} detik", + "gifsMenu": "GIPHY", + "groupTitle": "Pemberitahuan", + "hostAskedUnmute": "Moderator ingin Anda berbicara", + "invitedOneMember": "{{name}} telah diundang", + "invitedThreePlusMembers": "{{name}} dan {{count}} lainnya telah diundang", + "invitedTwoMembers": "{{first}} dan {{second}} telah diundang", + "joinMeeting": "Gabung", + "kickParticipant": "{{kicked}} telah dikeluarkan oleh {{kicker}}", + "leftOneMember": "{{name}} meninggalkan pertemuan", + "leftThreePlusMembers": "{{name}} dan banyak lainnya meninggalkan pertemuan", + "leftTwoMembers": "{{first}} dan {{second}} meninggalkan pertemuan", + "linkToSalesforce": "Tautan ke Salesforce", + "linkToSalesforceDescription": "Anda dapat mengaitkan ringkasan pertemuan ke objek Salesforce.", + "linkToSalesforceError": "Gagal mengaitkan pertemuan ke Salesforce", + "linkToSalesforceKey": "Tautkan pertemuan ini", + "linkToSalesforceProgress": "Mengaitkan pertemuan ke Salesforce…", + "linkToSalesforceSuccess": "Pertemuan telah dihubungkan ke Salesforce", + "localRecordingStarted": "{{name}} telah memulai perekaman lokal.", + "localRecordingStopped": "{{name}} telah menghentikan perekaman lokal.", + "me": "Saya", + "moderationInEffectCSDescription": "Silakan angkat tangan jika Anda ingin membagikan layar Anda.", + "moderationInEffectCSTitle": "Berbagi layar diblokir oleh moderator", + "moderationInEffectDescription": "Silakan angkat tangan jika Anda ingin berbicara.", + "moderationInEffectTitle": "Mikrofon Anda dibisukan oleh moderator", + "moderationInEffectVideoDescription": "Silakan angkat tangan jika Anda ingin memulai kamera Anda.", + "moderationInEffectVideoTitle": "Kamera Anda diblokir oleh moderator", + "moderationRequestFromModerator": "Host ingin Anda membuka suara", + "moderationRequestFromParticipant": "Ingin berbicara", + "moderationStartedTitle": "Moderasi dimulai", + "moderationStoppedTitle": "Moderasi dihentikan", + "moderationToggleDescription": "oleh {{participantDisplayName}}", + "moderator": "Anda sekarang menjadi moderator", + "muted": "Anda telah memulai percakapan dalam keadaan dibisukan.", + "mutedRemotelyDescription": "Anda selalu dapat membuka suara saat Anda siap berbicara. Bisukan kembali saat selesai untuk menjaga kebisingan dari pertemuan.", + "mutedRemotelyTitle": "Anda telah dibisukan oleh {{participantDisplayName}}", + "mutedTitle": "Anda dibisukan!", + "newDeviceAction": "Gunakan", + "newDeviceAudioTitle": "Perangkat audio baru terdeteksi", + "newDeviceCameraTitle": "Kamera baru terdeteksi", + "noiseSuppressionDesktopAudioDescription": "Pengurangan kebisingan tidak dapat diaktifkan saat berbagi audio desktop, harap nonaktifkan dan coba lagi.", + "noiseSuppressionFailedTitle": "Gagal memulai pengurangan kebisingan", + "noiseSuppressionStereoDescription": "Pengurangan kebisingan audio stereo saat ini tidak didukung.", + "oldElectronClientDescription1": "Anda sepertinya menggunakan versi lama dari klien Jitsi Meet yang memiliki kerentanan keamanan yang diketahui. Pastikan Anda memperbarui ke ", + "oldElectronClientDescription2": "build terbaru", + "oldElectronClientDescription3": " sekarang!", + "participantWantsToJoin": "Ingin bergabung dengan pertemuan", + "participantsWantToJoin": "Ingin bergabung dengan pertemuan", + "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) dihapus oleh peserta lain", + "passwordSetRemotely": "$t(lockRoomPasswordUppercase) diatur oleh peserta lain", + "raiseHandAction": "Angkat tangan", + "raisedHand": "Ingin berbicara.", + "raisedHands": "{{participantName}} dan {{raisedHands}} orang lain", + "reactionSounds": "Nonaktifkan suara", + "reactionSoundsForAll": "Nonaktifkan suara untuk semua", + "screenShareNoAudio": "Kotak berbagi audio tidak dicentang di layar pemilihan.", + "screenShareNoAudioTitle": "Tidak dapat berbagi audio sistem!", + "screenSharingAudioOnlyDescription": "Harap dicatat bahwa dengan membagikan layar Anda, Anda memengaruhi mode \"Kinerja terbaik\" dan Anda akan menggunakan lebih banyak bandwidth.", + "screenSharingAudioOnlyTitle": "Mode \"Kinerja terbaik\"", + "selfViewTitle": "Anda selalu dapat menampilkan kembali tampilan diri dari pengaturan", + "somebody": "Seseorang", + "startSilentDescription": "Gabung kembali dengan pertemuan untuk mengaktifkan audio", + "startSilentTitle": "Anda bergabung tanpa output audio!", + "suboptimalBrowserWarning": "Kami khawatir pengalaman pertemuan Anda tidak akan begitu bagus di sini. Kami mencari cara untuk memperbaiki ini, tetapi sampai saat itu silakan coba menggunakan salah satu browser yang didukung sepenuhnya.", + "suboptimalExperienceTitle": "Peringatan Browser", + "suggestRecordingAction": "Mulai", + "suggestRecordingDescription": "Apakah Anda ingin memulai perekaman?", + "suggestRecordingTitle": "Rekam pertemuan ini", + "unmute": "Hidupkan suara", + "videoMutedRemotelyDescription": "Anda selalu dapat menghidupkannya kembali.", + "videoMutedRemotelyTitle": "Video Anda telah dimatikan oleh {{participantDisplayName}}", + "videoUnmuteBlockedDescription": "Operasi membuka kamera dan berbagi desktop sementara diblokir karena batasan sistem.", + "videoUnmuteBlockedTitle": "Pembukaan kamera dan berbagi desktop diblokir!", + "viewLobby": "Tampilkan lobi", + "viewVisitors": "Tampilkan pengunjung", + "waitingParticipants": "{{waitingParticipants}} orang", + "whiteboardLimitDescription": "Simpan progress Anda, karena batas pengguna akan segera tercapai dan papan tulis akan ditutup.", + "whiteboardLimitTitle": "Penggunaan papan tulis" + }, + "participantsPane": { + "actions": { + "admit": "Menerima", + "admitAll": "Terima semua", + "allow": "Izinkan peserta untuk:", + "allowVideo": "Izinkan video", + "askUnmute": "Minta untuk unmute", + "audioModeration": "Unmute sendiri", + "blockEveryoneMicCamera": "Blokir mic dan kamera semua orang", + "breakoutRooms": "Ruangan breakout", + "invite": "Undang Seseorang", + "moreModerationActions": "Opsi moderasi lebih lanjut", + "moreModerationControls": "Kontrol moderasi lebih lanjut", + "moreParticipantOptions": "Opsi peserta lebih lanjut", + "mute": "Bisukan", + "muteAll": "Bisukan semua", + "muteEveryoneElse": "Bisukan semua orang lain", + "reject": "Tolak", + "stopEveryonesVideo": "Hentikan video semua orang", + "stopVideo": "Hentikan video", + "unblockEveryoneMicCamera": "Buka blokir mic dan kamera semua orang", + "videoModeration": "Mulai video mereka" + }, + "close": "Tutup", + "headings": { + "lobby": "Lobi ({{count}})", + "participantsList": "Peserta pertemuan ({{count}})", + "visitorRequests": " (permintaan {{count}})", + "visitors": "Pengunjung {{count}}", + "waitingLobby": "Menunggu di lobi ({{count}})" + }, + "search": "Cari peserta", + "title": "Peserta" + }, + "passwordDigitsOnly": "Hingga {{number}} digit", + "passwordSetRemotely": "Diatur oleh peserta lain", + "pinParticipant": "{{participantName}} - Pin", + "pinnedParticipant": "Peserta yang di-pin", + "polls": { + "answer": { + "edit": "Edit", + "send": "Kirim", + "skip": "Lewati", + "submit": "Kirim" + }, + "by": "Oleh {{ name }}", + "create": { + "addOption": "Tambahkan opsi", + "answerPlaceholder": "Opsi {{index}}", + "cancel": "Batal", + "create": "Buat jajak pendapat", + "pollOption": "Opsi jajak pendapat {{index}}", + "pollQuestion": "Pertanyaan jajak pendapat", + "questionPlaceholder": "Ajukan pertanyaan", + "removeOption": "Hapus opsi", + "save": "Simpan", + "send": "Kirim" + }, + "errors": { + "notUniqueOption": "Opsi harus unik" + }, + "notification": { + "description": "Buka tab jajak pendapat untuk memberikan suara", + "title": "Polling baru ditambahkan ke pertemuan ini" + }, + "results": { + "changeVote": "Ubah suara", + "empty": "Tidak ada jajak pendapat dalam pertemuan ini. Mulai jajak pendapat di sini!", + "hideDetailedResults": "Sembunyikan detail", + "showDetailedResults": "Tampilkan detail", + "vote": "Suara" + } + }, + "poweredby": "dipersembahkan oleh", + "prejoin": { + "audioAndVideoError": "Kesalahan audio dan video:", + "audioDeviceProblem": "Ada masalah dengan perangkat audio Anda", + "audioOnlyError": "Kesalahan audio:", + "audioTrackError": "Tidak bisa membuat trek audio.", + "callMe": "Hubungi saya", + "callMeAtNumber": "Hubungi saya di nomor ini:", + "calling": "Menelepon", + "configuringDevices": "Mengkonfigurasi perangkat…", + "connectedWithAudioQ": "Anda terhubung dengan audio?", + "connection": { + "good": "Koneksi internet Anda terlihat baik!", + "nonOptimal": "Koneksi internet Anda tidak optimal", + "poor": "Anda memiliki koneksi internet yang buruk" + }, + "connectionDetails": { + "audioClipping": "Kami mengharapkan audio Anda dipotong.", + "audioHighQuality": "Kami mengharapkan audio Anda memiliki kualitas yang sangat baik.", + "audioLowNoVideo": "Kami mengharapkan kualitas audio Anda rendah dan tidak ada video.", + "goodQuality": "Hebat! Kualitas media Anda akan sangat baik.", + "noMediaConnectivity": "Kami tidak dapat menemukan cara untuk menetapkan konektivitas media untuk tes ini. Ini biasanya disebabkan oleh firewall atau NAT.", + "noVideo": "Kami mengharapkan bahwa video Anda akan buruk.", + "undetectable": "Jika Anda masih tidak dapat melakukan panggilan di browser, kami sarankan Anda memastikan speaker, mikrofon, dan kamera Anda sudah diatur dengan benar, bahwa Anda telah memberikan izin browser Anda untuk menggunakan mikrofon dan kamera, dan bahwa versi browser Anda terbaru. Jika Anda masih mengalami masalah saat menelepon, Anda harus menghubungi pengembang aplikasi web.", + "veryPoorConnection": "Kami mengharapkan kualitas panggilan Anda benar-benar buruk.", + "videoFreezing": "Kami mengharapkan bahwa video Anda akan membeku, menjadi hitam, dan berpixel.", + "videoHighQuality": "Kami mengharapkan video Anda memiliki kualitas yang baik.", + "videoLowQuality": "Kami mengharapkan bahwa video Anda akan memiliki kualitas rendah dalam hal frame rate dan resolusi.", + "videoTearing": "Kami mengharapkan bahwa video Anda akan berpixel atau memiliki artefak visual." + }, + "copyAndShare": "Salin & bagikan tautan pertemuan", + "dialInMeeting": "Dial ke pertemuan", + "dialInPin": "Dial ke pertemuan dan masukkan kode PIN:", + "dialing": "Menghubungi", + "doNotShow": "Jangan tampilkan layar ini lagi", + "errorDialOut": "Tidak bisa melakukan panggilan keluar", + "errorDialOutDisconnected": "Tidak bisa melakukan panggilan keluar. Terputus", + "errorDialOutFailed": "Tidak bisa melakukan panggilan keluar. Panggilan gagal", + "errorDialOutStatus": "Error mendapatkan status panggilan keluar", + "errorMissingName": "Silakan masukkan nama Anda untuk bergabung dengan pertemuan", + "errorNoPermissions": "Anda perlu mengaktifkan akses mikrofon dan kamera", + "errorStatusCode": "Error saat menelepon keluar, kode status: {{status}}", + "errorValidation": "Validasi nomor gagal", + "iWantToDialIn": "Saya ingin menelepon", + "initiated": "Panggilan diinisialisasi", + "joinAudioByPhone": "Bergabung dengan audio telepon", + "joinMeeting": "Gabung pertemuan", + "joinMeetingInLowBandwidthMode": "Bergabung dalam mode bandwidth rendah", + "joinWithoutAudio": "Bergabung tanpa audio", + "keyboardShortcuts": "Aktifkan Pintasan Keyboard", + "linkCopied": "Tautan disalin ke papan klip", + "lookGood": "Semuanya berfungsi dengan baik", + "or": "atau", + "premeeting": "Pra-pertemuan", + "proceedAnyway": "Lanjutkan saja", + "recordingWarning": "Peserta lain mungkin sedang merekam panggilan ini", + "screenSharingError": "Kesalahan berbagi layar:", + "startWithPhone": "Mulai dengan audio ponsel", + "unsafeRoomConsent": "Saya memahami risikonya, saya ingin bergabung dengan pertemuan", + "videoOnlyError": "Kesalahan video:", + "videoTrackError": "Tidak bisa membuat trek video.", + "viewAllNumbers": "lihat semua nomor" + }, + "presenceStatus": { + "busy": "Sibuk", + "calling": "Menelepon…", + "connected": "Terhubung", + "connecting": "Menghubungkan…", + "connecting2": "Menghubungkan*…", + "disconnected": "Terputus", + "expired": "Kedaluwarsa", + "ignored": "Diabaikan", + "initializingCall": "Memulai Panggilan…", + "invited": "Diundang", + "rejected": "Ditolak", + "ringing": "Berdering…" + }, + "profile": { + "avatar": "avatar", + "setDisplayNameLabel": "Nama", + "setEmailInput": "Masukkan email", + "setEmailLabel": "Email Gravatar", + "title": "Profil" + }, + "raisedHand": "Ingin berbicara", + "raisedHandsLabel": "Jumlah tangan yang diangkat", + "record": { + "already": { + "linked": "Pertemuan sudah terhubung ke objek Salesforce ini." + }, + "type": { + "account": "Akun", + "contact": "Kontak", + "lead": "Lead", + "opportunity": "Peluang", + "owner": "Pemilik" + } + }, + "recording": { + "authDropboxText": "Unggah ke Dropbox", + "availableSpace": "Ruang yang tersedia: {{spaceLeft}} MB (sekitar {{duration}} menit rekaman)", + "beta": "BETA", + "busy": "Kami sedang berupaya membebaskan sumber daya rekaman. Harap coba lagi dalam beberapa menit.", + "busyTitle": "Semua rekorder sedang sibuk saat ini", + "copyLink": "Salin Tautan", + "error": "Rekaman gagal. Harap coba lagi.", + "errorFetchingLink": "Gagal mengambil tautan rekaman.", + "expandedOff": "Rekaman telah berhenti", + "expandedOn": "Pertemuan saat ini sedang direkam", + "expandedPending": "Rekaman sedang dimulai…", + "failedToStart": "Gagal memulai rekaman", + "fileSharingdescription": "Bagikan tautan rekaman dengan peserta pertemuan", + "highlight": "Sorot", + "highlightMoment": "Sorot momen", + "highlightMomentDisabled": "Anda dapat menyorot momen ketika rekaman dimulai", + "highlightMomentSuccess": "Momen disorot", + "highlightMomentSucessDescription": "Momen yang Anda sorot akan ditambahkan ke ringkasan pertemuan.", + "inProgress": "Rekaman atau siaran langsung sedang berlangsung", + "limitNotificationDescriptionNative": "Karena permintaan tinggi, rekaman Anda akan dibatasi menjadi {{limit}} menit. Untuk rekaman tanpa batas, coba <3>{{app}}.", + "limitNotificationDescriptionWeb": "Karena permintaan tinggi, rekaman Anda akan dibatasi menjadi {{limit}} menit. Untuk rekaman tanpa batas, coba {{app}}.", + "linkGenerated": "Kami telah menghasilkan tautan untuk rekaman Anda.", + "localRecordingNoNotificationWarning": "Rekaman tidak akan diumumkan kepada peserta lain. Anda perlu memberi tahu mereka bahwa pertemuan direkam.", + "localRecordingNoVideo": "Video tidak direkam", + "localRecordingStartWarning": "Pastikan Anda menghentikan rekaman sebelum keluar dari pertemuan untuk menyimpannya.", + "localRecordingStartWarningTitle": "Hentikan rekaman untuk menyimpannya", + "localRecordingVideoStop": "Menghentikan video Anda juga akan menghentikan rekaman lokal. Apakah Anda yakin ingin melanjutkan?", + "localRecordingVideoWarning": "Untuk merekam video Anda, Anda harus mengaktifkannya saat memulai rekaman", + "localRecordingWarning": "Pastikan Anda memilih tab saat ini untuk menggunakan video dan audio yang tepat.", + "loggedIn": "Masuk sebagai {{userName}}", + "noMicPermission": "Trek mikrofon tidak dapat dibuat. Harap izinkan penggunaan mikrofon.", + "noStreams": "Tidak ada aliran audio atau video yang terdeteksi.", + "off": "Rekaman berhenti", + "offBy": "{{name}} menghentikan rekaman", + "on": "Rekaman dimulai", + "onBy": "{{name}} memulai rekaman", + "onlyRecordSelf": "Rekam hanya aliran audio dan video saya", + "pending": "Persiapan untuk merekam pertemuan…", + "recordAudioAndVideo": "Rekam audio dan video", + "recordTranscription": "Rekam transkripsi", + "saveLocalRecording": "Simpan file rekaman secara lokal (Beta)", + "serviceDescription": "Rekaman Anda akan disimpan oleh layanan rekaman", + "serviceDescriptionCloud": "Rekaman cloud", + "serviceDescriptionCloudInfo": "Pertemuan yang direkam secara otomatis dihapus 24 jam setelah waktu rekaman mereka.", + "serviceName": "Layanan rekaman", + "sessionAlreadyActive": "Sesi ini sudah direkam atau disiarkan langsung.", + "showAdvancedOptions": "Opsi Lanjutan", + "signIn": "Masuk", + "signOut": "Keluar", + "surfaceError": "Harap pilih tab saat ini.", + "title": "Rekaman", + "unavailable": "Ups! {{serviceName}} saat ini tidak tersedia. Kami sedang berupaya menyelesaikan masalah ini. Harap coba lagi nanti.", + "unavailableTitle": "Rekaman tidak tersedia", + "uploadToCloud": "Unggah ke cloud" + }, + "screenshareDisplayName": "Layar {{name}}", + "sectionList": { + "pullToRefresh": "Tarik untuk menyegarkan" + }, + "security": { + "about": "Anda dapat menambahkan {{lockRoomPassword}} ke pertemuan Anda. Peserta perlu memberikan {{lockRoomPassword}} sebelum mereka diizinkan bergabung dengan pertemuan.", + "aboutReadOnly": "Peserta moderator dapat menambahkan {{lockRoomPassword}} ke pertemuan. Peserta perlu memberikan {{lockRoomPassword}} sebelum mereka diizinkan bergabung dengan pertemuan.", + "insecureRoomNameWarningNative": "Nama ruangan tidak aman. Peserta yang tidak diinginkan dapat bergabung dengan pertemuan Anda. {{recommendAction}} Pelajari lebih lanjut tentang mengamankan pertemuan Anda", + "insecureRoomNameWarningWeb": "Nama ruangan tidak aman. Peserta yang tidak diinginkan dapat bergabung dengan pertemuan Anda. {{recommendAction}} Pelajari lebih lanjut tentang mengamankan pertemuan Anda di sini.", + "title": "Opsi Keamanan", + "unsafeRoomActions": { + "meeting": "Pertimbangkan untuk mengamankan pertemuan Anda menggunakan tombol keamanan.", + "prejoin": "Pertimbangkan untuk menggunakan nama pertemuan yang lebih unik.", + "welcome": "Pertimbangkan untuk menggunakan nama pertemuan yang lebih unik, atau pilih salah satu dari saran tersebut." + } + }, + "settings": { + "audio": "Audio", + "buttonLabel": "Pengaturan", + "calendar": { + "about": "Integrasi kalender {{appName}} digunakan untuk mengakses kalender Anda secara aman sehingga dapat membaca acara mendatang.", + "disconnect": "Putuskan", + "microsoftSignIn": "Masuk dengan Microsoft", + "signedIn": "Saat ini mengakses acara kalender untuk {{email}}. Klik tombol Putuskan di bawah ini untuk menghentikan akses acara kalender.", + "title": "Kalender" + }, + "desktopShareFramerate": "Frame rate pembagian layar desktop", + "desktopShareHighFpsWarning": "Frame rate yang lebih tinggi untuk pembagian layar desktop mungkin memengaruhi bandwidth Anda. Anda perlu memulai ulang pembagian layar untuk pengaturan baru berlaku.", + "desktopShareWarning": "Anda perlu memulai ulang pembagian layar untuk pengaturan baru berlaku.", + "devices": "Perangkat", + "followMe": "Semua mengikuti saya", + "framesPerSecond": "frame per detik", + "incomingMessage": "Pesan masuk", + "language": "Bahasa", + "loggedIn": "Masuk sebagai {{name}}", + "maxStageParticipants": "Jumlah maksimum peserta yang dapat ditampilkan di panggung utama", + "microphones": "Mikrofon", + "moderator": "Moderator", + "moderatorOptions": "Opsi moderator", + "more": "Umum", + "name": "Nama", + "noDevice": "Tidak ada", + "notifications": "Notifikasi", + "participantJoined": "Peserta Bergabung", + "participantKnocking": "Peserta masuk ke lobi", + "participantLeft": "Peserta Meninggalkan", + "playSounds": "Mainkan suara pada", + "reactions": "Reaksi pertemuan", + "sameAsSystem": "Sama dengan sistem ({{label}})", + "selectAudioOutput": "Output audio", + "selectCamera": "Kamera", + "selectMic": "Mikrofon", + "selfView": "Tampilan diri", + "shortcuts": "Pintasan", + "speakers": "Pemutar suara", + "startAudioMuted": "Semua dimulai dalam keadaan dibisukan", + "startReactionsMuted": "Bisukan suara reaksi untuk semua orang", + "startVideoMuted": "Semua dimulai tersembunyi", + "talkWhileMuted": "Bicara saat dibisukan", + "title": "Pengaturan", + "video": "Video" + }, + "settingsView": { + "advanced": "Lanjutan", + "alertCancel": "Batal", + "alertOk": "OK", + "alertTitle": "Peringatan", + "alertURLText": "URL server yang dimasukkan tidak valid", + "apply": "Terapkan", + "buildInfoSection": "Informasi Build", + "conferenceSection": "Konferensi", + "disableCallIntegration": "Nonaktifkan integrasi panggilan asli", + "disableCrashReporting": "Nonaktifkan pelaporan kegagalan", + "disableCrashReportingWarning": "Apakah Anda yakin ingin menonaktifkan pelaporan kegagalan? Pengaturan ini akan diterapkan setelah Anda me-restart aplikasi.", + "disableP2P": "Nonaktifkan mode Peer-To-Peer", + "displayName": "Nama Tampilan", + "displayNamePlaceholderText": "Contoh: John Doe", + "email": "Email", + "emailPlaceholderText": "email@example.com", + "gavatarMessage": "Jika email Anda terkait dengan akun Gravatar, kami akan menggunakannya untuk menampilkan gambar profil Anda.", + "goTo": "Buka", + "header": "Pengaturan", + "help": "Bantuan", + "links": "Tautan", + "privacy": "Privasi", + "profileSection": "Profil", + "sdkVersion": "Versi SDK", + "serverURL": "URL Server", + "showAdvanced": "Tampilkan pengaturan lanjutan", + "startCarModeInLowBandwidthMode": "Mulai mode mobil dalam mode bandwidth rendah", + "startWithAudioMuted": "Mulai dengan audio dibisukan", + "startWithVideoMuted": "Mulai dengan video dibisukan", + "terms": "Syarat", + "version": "Versi Aplikasi" + }, + "share": { + "dialInfoText": "\n\n=====\n\nHanya ingin menelepon menggunakan telepon Anda?\n\n{{defaultDialInNumber}}Klik tautan ini untuk melihat nomor telepon untuk panggilan di pertemuan ini\n{{dialInfoPageUrl}}", + "mainText": "Klik tautan berikut untuk bergabung dengan pertemuan:\n{{roomUrl}}" + }, + "speaker": "Pembicara", + "speakerStats": { + "angry": "Marah", + "disgusted": "Jijik", + "displayEmotions": "Tampilkan emosi", + "fearful": "Takut", + "happy": "Senang", + "hours": "{{count}}jam", + "minutes": "{{count}}menit", + "name": "Nama", + "neutral": "Netral", + "sad": "Sedih", + "search": "Cari", + "searchHint": "Cari peserta", + "seconds": "{{count}}detik", + "speakerStats": "Statistik Peserta", + "speakerTime": "Waktu Pembicara", + "surprised": "Terkejut" + }, + "startupoverlay": { + "genericTitle": "Pertemuan perlu menggunakan mikrofon dan kamera Anda.", + "policyText": " ", + "title": "{{app}} perlu menggunakan mikrofon dan kamera Anda." + }, + "suspendedoverlay": { + "rejoinKeyTitle": "Gabung Kembali", + "text": "Tekan tombol Gabung Kembali untuk menyambungkan kembali.", + "title": "Panggilan video Anda terputus karena komputer ini masuk ke mode tidur." + }, + "termsView": { + "title": "Syarat" + }, + "toggleTopPanelLabel": "Alihkan panel atas", + "toolbar": { + "Settings": "Pengaturan", + "accessibilityLabel": { + "Settings": "Buka pengaturan", + "audioOnly": "Alihkan ke audio saja", + "audioRoute": "Pilih perangkat suara", + "boo": "Ba", + "breakoutRooms": "Ruang breakout", + "callQuality": "Kelola kualitas video", + "carmode": "Mode Mobil", + "cc": "Alihkan subtitle", + "chat": "Buka / Tutup obrolan", + "clap": "Tepuk tangan", + "closeChat": "Tutup obrolan", + "closeMoreActions": "Tutup menu tindakan lebih lanjut", + "closeParticipantsPane": "Tutup panel peserta", + "collapse": "Lipat", + "document": "Alihkan dokumen bersama", + "documentClose": "Tutup dokumen bersama", + "documentOpen": "Buka dokumen bersama", + "download": "Unduh aplikasi kami", + "embedMeeting": "Sematkan pertemuan", + "endConference": "Akhiri pertemuan untuk semua", + "enterFullScreen": "Lihat layar penuh", + "enterTileView": "Masuk ke tampilan ubin", + "exitFullScreen": "Keluar dari layar penuh", + "exitTileView": "Keluar dari tampilan ubin", + "expand": "Perluas", + "feedback": "Tinggalkan umpan balik", + "fullScreen": "Alihkan layar penuh", + "giphy": "Alihkan menu GIPHY", + "grantModerator": "Berikan Hak Moderator", + "hangup": "Tinggalkan pertemuan", + "heading": "Toolbar", + "help": "Bantuan", + "hideWhiteboard": "Sembunyikan papan tulis", + "invite": "Undang orang", + "kick": "Keluarkan peserta", + "laugh": "Tertawa", + "leaveConference": "Tinggalkan pertemuan", + "like": "Tanda Suka", + "linkToSalesforce": "Tautkan ke Salesforce", + "lobbyButton": "Aktifkan/nonaktifkan mode lobi", + "localRecording": "Alihkan kontrol rekaman lokal", + "lockRoom": "Alihkan kata sandi pertemuan", + "lowerHand": "Turunkan tangan Anda", + "moreActions": "Tindakan lebih lanjut", + "moreActionsMenu": "Menu tindakan lebih lanjut", + "moreOptions": "Tampilkan lebih banyak opsi", + "mute": "Bisukan mikrofon", + "muteEveryone": "Bisukan semua orang", + "muteEveryoneElse": "Bisukan semua orang lain", + "muteEveryoneElsesVideoStream": "Hentikan video semua orang lain", + "muteEveryonesVideoStream": "Hentikan video semua orang", + "muteGUMPending": "Menghubungkan mikrofon Anda", + "noiseSuppression": "Pencegahan noise", + "openChat": "Buka obrolan", + "participants": "Buka panel peserta", + "pip": "Alihkan ke mode Picture-in-Picture", + "privateMessage": "Kirim pesan pribadi", + "profile": "Edit profil Anda", + "raiseHand": "Angkat tangan Anda", + "reactions": "Reaksi", + "reactionsMenu": "Menu reaksi", + "recording": "Alihkan rekaman", + "remoteMute": "Bisukan peserta", + "remoteVideoMute": "Nonaktifkan kamera peserta", + "security": "Opsi keamanan", + "selectBackground": "Pilih Latar Belakang", + "selfView": "Alihkan tampilan diri", + "shareRoom": "Undang seseorang", + "shareYourScreen": "Mulai membagikan layar Anda", + "shareaudio": "Bagikan audio", + "sharedvideo": "Bagikan video", + "shortcuts": "Alihkan pintasan", + "show": "Tampilkan di panggung", + "showWhiteboard": "Tampilkan papan tulis", + "silence": "Diam", + "speakerStats": "Statistik Peserta", + "stopScreenSharing": "Hentikan membagikan layar Anda", + "stopSharedVideo": "Hentikan video", + "surprised": "Terkejut", + "tileView": "Alihkan tampilan ubin", + "toggleCamera": "Alihkan kamera", + "toggleFilmstrip": "Alihkan filmstrip", + "unmute": "Hidupkan mikrofon", + "videoblur": "Alihkan blur video", + "videomute": "Hentikan kamera", + "videomuteGUMPending": "Menghubungkan kamera Anda", + "videounmute": "Hidupkan kamera" + }, + "addPeople": "Tambahkan orang ke panggilan Anda", + "audioOnlyOff": "Nonaktifkan mode bandwidth rendah", + "audioOnlyOn": "Aktifkan mode bandwidth rendah", + "audioRoute": "Pilih perangkat suara", + "audioSettings": "Pengaturan Audio", + "authenticate": "Autentikasi", + "boo": "Ba", + "callQuality": "Kelola kualitas video", + "chat": "Buka / Tutup obrolan", + "clap": "Tepuk tangan", + "closeChat": "Tutup obrolan", + "closeParticipantsPane": "Tutup panel peserta", + "disableNoiseSuppression": "Nonaktifkan pencegahan noise", + "disableReactionSounds": "Anda dapat menonaktifkan suara reaksi untuk pertemuan ini", + "documentClose": "Tutup dokumen bersama", + "documentOpen": "Buka dokumen bersama", + "download": "Unduh aplikasi kami", + "e2ee": "Enkripsi End-to-End", + "embedMeeting": "Sematkan pertemuan", + "enableNoiseSuppression": "Aktifkan pencegahan noise", + "endConference": "Akhiri pertemuan untuk semua", + "enterFullScreen": "Lihat layar penuh", + "enterTileView": "Masuk ke tampilan ubin", + "exitFullScreen": "Keluar dari layar penuh", + "exitTileView": "Keluar dari tampilan ubin", + "feedback": "Tinggalkan umpan balik", + "giphy": "Alihkan menu GIPHY", + "hangup": "Tinggalkan pertemuan", + "help": "Bantuan", + "hideWhiteboard": "Sembunyikan papan tulis", + "invite": "Undang orang", + "joinBreakoutRoom": "Gabung dengan ruang pemisahan", + "laugh": "Tertawa", + "leaveBreakoutRoom": "Tinggalkan ruang pemisahan", + "leaveConference": "Tinggalkan pertemuan", + "like": "Tanda Suka", + "linkToSalesforce": "Tautkan ke Salesforce", + "lobbyButtonDisable": "Nonaktifkan mode lobi", + "lobbyButtonEnable": "Aktifkan mode lobi", + "login": "Masuk", + "logout": "Keluar", + "lowerYourHand": "Turunkan tangan Anda", + "moreActions": "Tindakan lebih lanjut", + "moreOptions": "Tampilkan lebih banyak opsi", + "mute": "Bisukan mikrofon", + "muteEveryone": "Bisukan semua orang", + "muteEveryonesVideo": "Nonaktifkan kamera semua orang", + "muteGUMPending": "Menghubungkan mikrofon Anda", + "noAudioSignalDesc": "Jika Anda tidak sengaja mematikannya dari pengaturan sistem atau perangkat keras, pertimbangkan untuk beralih perangkat.", + "noAudioSignalDescSuggestion": "Jika Anda tidak sengaja mematikannya dari pengaturan sistem atau perangkat keras, pertimbangkan untuk beralih ke perangkat yang disarankan.", + "noAudioSignalDialInDesc": "Anda juga dapat menelepon menggunakan:", + "noAudioSignalDialInLinkDesc": "Nomor telepon panggilan", + "noAudioSignalTitle": "Tidak ada masukan yang datang dari mikrofon Anda!", + "noiseSuppression": "Pencegahan noise", + "noisyAudioInputDesc": "Sepertinya mikrofon Anda membuat suara bising, pertimbangkan untuk mematikan atau mengganti perangkat.", + "noisyAudioInputTitle": "Mikrofon Anda tampaknya berisik!", + "openChat": "Buka obrolan", + "openReactionsMenu": "Buka menu reaksi", + "participants": "Peserta", + "pip": "Masuk ke mode Picture-in-Picture", + "privateMessage": "Kirim pesan pribadi", + "profile": "Edit profil Anda", + "raiseHand": "Angkat tangan Anda", + "raiseYourHand": "Angkat tangan Anda", + "reactionBoo": "Kirim reaksi ba", + "reactionClap": "Kirim reaksi tepuk tangan", + "reactionLaugh": "Kirim reaksi tertawa", + "reactionLike": "Kirim reaksi jempol ke atas", + "reactionSilence": "Kirim reaksi diam", + "reactionSurprised": "Kirim reaksi terkejut", + "reactions": "Reaksi", + "security": "Opsi keamanan", + "selectBackground": "Pilih latar belakang", + "shareRoom": "Undang seseorang", + "shareaudio": "Bagikan audio", + "sharedvideo": "Bagikan video", + "shortcuts": "Lihat pintasan", + "show": "Tampilkan di panggung", + "showWhiteboard": "Tampilkan papan tulis", + "silence": "Diam", + "speakerStats": "Statistik Peserta", + "startScreenSharing": "Mulai membagikan layar", + "startSubtitles": "Subtitle • {{language}}", + "stopAudioSharing": "Hentikan berbagi audio", + "stopScreenSharing": "Hentikan membagikan layar", + "stopSharedVideo": "Hentikan video", + "stopSubtitles": "Hentikan subtitle", + "surprised": "Terkejut", + "talkWhileMutedPopup": "Mencoba berbicara? Anda dibisukan.", + "tileViewToggle": "Alihkan tampilan ubin", + "toggleCamera": "Alihkan kamera", + "unmute": "Hidupkan mikrofon", + "videoSettings": "Pengaturan Video", + "videomute": "Hentikan kamera", + "videomuteGUMPending": "Menghubungkan kamera Anda", + "videounmute": "Hidupkan kamera" + }, + "transcribing": { + "ccButtonTooltip": "Mulai / Berhenti menampilkan subtitle", + "expandedLabel": "Transkripsi sedang aktif", + "failedToStart": "Transkripsi gagal dimulai", + "labelToolTip": "Pertemuan sedang ditranskripsi", + "sourceLanguageDesc": "Saat ini bahasa pertemuan diatur ke {{sourceLanguage}}.
Anda dapat mengubahnya dari ", + "sourceLanguageHere": "di sini", + "start": "Mulai menampilkan subtitle", + "stop": "Berhenti menampilkan subtitle", + "subtitles": "Subtitle", + "subtitlesOff": "Matikan", + "tr": "TR" + }, + "unpinParticipant": "{{participantName}} - Lepas pin", + "userMedia": { + "grantPermissions": "Harap berikan izin untuk menggunakan kamera dan mikrofon Anda." + }, + "videoSIPGW": { + "busy": "Kami sedang berupaya membebaskan sumber daya. Silakan coba lagi dalam beberapa menit.", + "busyTitle": "Layanan Ruang sedang sibuk", + "errorAlreadyInvited": "{{displayName}} sudah diundang", + "errorInvite": "Konferensi belum dibentuk. Silakan coba lagi nanti.", + "errorInviteFailed": "Kami sedang berupaya menyelesaikan masalah ini. Silakan coba lagi nanti.", + "errorInviteFailedTitle": "Undangan {{displayName}} gagal", + "errorInviteTitle": "Kesalahan mengundang ruang", + "pending": "{{displayName}} telah diundang" + }, + "videoStatus": { + "adjustFor": "Sesuaikan untuk:", + "audioOnly": "AUD", + "audioOnlyExpanded": "Anda berada dalam mode bandwidth rendah. Dalam mode ini, Anda hanya akan menerima audio dan berbagi layar.", + "bestPerformance": "Kinerja terbaik", + "callQuality": "Kualitas Video (0 untuk kinerja terbaik, 3 untuk kualitas tertinggi)", + "hd": "HD", + "hdTooltip": "Menonton video definisi tinggi", + "highDefinition": "Definisi tinggi", + "highestQuality": "Kualitas tertinggi", + "labelTooiltipNoVideo": "Tidak ada video", + "labelTooltipAudioOnly": "Mode bandwidth rendah diaktifkan", + "ld": "LD", + "ldTooltip": "Menonton video definisi rendah", + "lowDefinition": "Definisi rendah", + "performanceSettings": "Pengaturan kinerja", + "recording": "Perekaman sedang berlangsung", + "sd": "SD", + "sdTooltip": "Menonton video definisi standar", + "standardDefinition": "Definisi standar", + "streaming": "Streaming sedang berlangsung" + }, + "videothumbnail": { + "connectionInfo": "Info Koneksi", + "demote": "Pindah ke pengunjung", + "domute": "Bisukan", + "domuteOthers": "Bisukan semua orang lain", + "domuteVideo": "Nonaktifkan kamera", + "domuteVideoOfOthers": "Nonaktifkan kamera semua orang lain", + "flip": "Putar", + "grantModerator": "Berikan Hak Moderator", + "hideSelfView": "Sembunyikan tampilan diri", + "kick": "Keluarkan", + "mirrorVideo": "Cerminkan video saya", + "moderator": "Moderator", + "mute": "Peserta dibisukan", + "muted": "Dibisukan", + "pinToStage": "Pasang ke panggung", + "remoteControl": "Mulai / Berhenti kontrol jarak jauh", + "screenSharing": "Peserta sedang berbagi layar mereka", + "show": "Tampilkan di panggung", + "showSelfView": "Tampilkan tampilan diri", + "unpinFromStage": "Lepas penjepitan", + "verify": "Verifikasi peserta", + "videoMuted": "Kamera dinonaktifkan", + "videomute": "Peserta telah menghentikan kamera" + }, + "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Latar belakang saat ini: {{background}}", + "selectBackground": "Pilih latar belakang" + }, + "addBackground": "Tambahkan latar belakang", + "apply": "Terapkan", + "backgroundEffectError": "Gagal menerapkan efek latar belakang.", + "blur": "Buram", + "deleteImage": "Hapus gambar", + "desktopShare": "Berbagi desktop", + "desktopShareError": "Tidak dapat membuat berbagi desktop", + "image1": "Pantai", + "image2": "Dinding netral putih", + "image3": "Kamar kosong putih", + "image4": "Lampu lantai hitam", + "image5": "Gunung", + "image6": "Hutan", + "image7": "Matahari terbit", + "none": "Tidak ada", + "pleaseWait": "Silakan tunggu…", + "removeBackground": "Hapus latar belakang", + "slightBlur": "Setengah buram", + "title": "Latar belakang virtual", + "uploadedImage": "Gambar yang diunggah {{index}}", + "webAssemblyWarning": "WebAssembly tidak didukung", + "webAssemblyWarningDescription": "WebAssembly dinonaktifkan atau tidak didukung oleh browser ini" + }, + "visitors": { + "chatIndicator": "(pengunjung)", + "labelTooltip": "Jumlah pengunjung: {{count}}", + "notification": { + "demoteDescription": "Dikirim ke sini oleh {{actor}}, angkat tangan Anda untuk berpartisipasi", + "description": "Untuk berpartisipasi angkat tangan Anda", + "noMainParticipantsDescription": "Seorang peserta perlu memulai pertemuan. Silakan coba lagi nanti.", + "noMainParticipantsTitle": "Pertemuan ini belum dimulai.", + "noVisitorLobby": "Anda tidak dapat bergabung saat ada lobi yang diaktifkan untuk pertemuan.", + "notAllowedPromotion": "Seorang peserta perlu mengizinkan permintaan Anda terlebih dahulu.", + "title": "Anda adalah pengunjung dalam pertemuan" + } + }, + "volumeSlider": "Penggeser volume", + "welcomepage": { + "accessibilityLabel": { + "join": "Ketuk untuk bergabung", + "roomname": "Masukkan nama ruang" + }, + "addMeetingName": "Tambahkan nama pertemuan", + "appDescription": "Lanjutkan, video chat dengan seluruh tim. Bahkan, undang semua orang yang Anda kenal. {{app}} adalah solusi konferensi video yang sepenuhnya terenkripsi, 100% open source yang dapat Anda gunakan sepanjang hari, setiap hari, secara gratis — tanpa perlu akun.", + "audioVideoSwitch": { + "audio": "Suara", + "video": "Video" + }, + "calendar": "Kalender", + "connectCalendarButton": "Hubungkan kalender Anda", + "connectCalendarText": "Hubungkan kalender Anda untuk melihat semua pertemuan Anda di {{app}}. Plus, tambahkan pertemuan {{provider}} ke kalender Anda dan mulai mereka dengan satu klik.", + "enterRoomTitle": "Mulai pertemuan baru", + "getHelp": "Dapatkan bantuan", + "go": "LANJUT", + "goSmall": "LANJUT", + "headerSubtitle": "Pertemuan yang aman dan berkualitas tinggi", + "headerTitle": "Jitsi Meet", + "info": "Info panggilan", + "jitsiOnMobile": "Jitsi di ponsel - unduh aplikasi kami dan mulai pertemuan dari mana saja", + "join": "BUAT / BERGABUNG", + "logo": { + "calendar": "Logo kalender", + "desktopPreviewThumbnail": "Thumbnail pratinjau desktop", + "googleLogo": "Logo Google", + "logoDeepLinking": "Logo Jitsi meet", + "microsoftLogo": "Logo Microsoft", + "policyLogo": "Logo Kebijakan" + }, + "meetingsAccessibilityLabel": "Pertemuan", + "mobileDownLoadLinkAndroid": "Unduh aplikasi mobile untuk Android", + "mobileDownLoadLinkFDroid": "Unduh aplikasi mobile untuk F-Droid", + "mobileDownLoadLinkIos": "Unduh aplikasi mobile untuk iOS", + "moderatedMessage": "Atau pesan URL pertemuan sebelumnya di mana Anda adalah satu-satunya moderator.", + "privacy": "Privasi", + "recentList": "Terbaru", + "recentListDelete": "Hapus entri", + "recentListEmpty": "Daftar terbaru Anda saat ini kosong. Berbicaralah dengan tim Anda dan Anda akan menemukan semua pertemuan terbaru Anda di sini.", + "recentMeetings": "Pertemuan terbaru Anda", + "reducedUIText": "Selamat datang di {{app}}!", + "roomNameAllowedChars": "Nama pertemuan tidak boleh mengandung salah satu dari karakter-karakter ini: ?, &, :, ', \", %, #.", + "roomname": "Masukkan nama ruang", + "roomnameHint": "Masukkan nama atau URL ruang yang ingin Anda ikuti. Anda dapat membuat nama, beri tahu orang-orang yang akan Anda temui sehingga mereka memasukkan nama yang sama.", + "sendFeedback": "Kirim umpan balik", + "settings": "Pengaturan", + "startMeeting": "Mulai pertemuan", + "terms": "Ketentuan", + "title": "Konferensi video yang aman, lengkap, dan benar-benar gratis", + "upcomingMeetings": "Pertemuan yang akan datang Anda" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Papan tulis" + }, + "screenTitle": "Papan tulis" + } +} diff --git a/lang/main-is.json b/lang/main-is.json index 621c839980d4..f93108007aee 100644 --- a/lang/main-is.json +++ b/lang/main-is.json @@ -22,7 +22,7 @@ "noResults": "Engar leitarniðurstöður samsvara", "outlookEmail": "Outlook-tölvupóstur", "phoneNumbers": "símanúmer", - "searching": "Leita...", + "searching": "Leita…", "shareInvite": "Deila fundarboði", "shareLink": "Deila fundartengli til að bjóða öðrum", "shareStream": "Deila tengli á beint streymi", @@ -144,7 +144,7 @@ "installExtensionText": "Settu inn viðbót fyrir Google Calendar og samþættingu við Office 365" }, "connectingOverlay": { - "joiningRoom": "Tengist við fundinn þinn ..." + "joiningRoom": "Tengist við fundinn þinn…" }, "connection": { "ATTACHED": "Tengt", @@ -156,9 +156,9 @@ "DISCONNECTED": "Aftengt", "DISCONNECTING": "Aftengist", "ERROR": "Villa", - "FETCH_SESSION_ID": "Næ í auðkenni setu (session-ID)...", + "FETCH_SESSION_ID": "Næ í auðkenni setu (session-ID)…", "GET_SESSION_ID_ERROR": "Villa við að ná í auðkenni setu: {{code}}", - "GOT_SESSION_ID": "Næ í auðkenni setu... Lokið", + "GOT_SESSION_ID": "Næ í auðkenni setu… Lokið", "LOW_BANDWIDTH": "Slökkt var á myndmerki frá {{displayName}} til að spara bandbreidd" }, "connectionindicator": { @@ -221,8 +221,8 @@ "launchWebButton": "Ræsa í vafra", "noMobileApp": "Ert þú ekki með forritið?", "termsAndConditions": "Með því að halda áfram samþykkir þú skilmála okkar og kvaðir.", - "title": "Ræsi fundinn þinn í {{app}}...", - "titleNew": "Ræsi fundinn þinn...", + "title": "Ræsi fundinn þinn í {{app}}…", + "titleNew": "Ræsi fundinn þinn…", "tryAgainButton": "Prófa aftur í vafra", "unsupportedBrowser": "Þú virðist vera að nota vafra sem við styðjum ekki." }, @@ -262,7 +262,7 @@ "Submit": "Senda inn", "WaitForHostMsg": "Fjarfundurinn er ekki byrjaður vegna þess að engir umsjónarmenn eru mættir. Ef þú vilt gerast umsjónarmaður skaltu skrá þig inn. Annars ættirðu að bíða.", "WaitingForHostButton": "Bíddu eftir umsjónarmanni", - "WaitingForHostTitle": "Bíð eftir umsjónarmanni ...", + "WaitingForHostTitle": "Bíð eftir umsjónarmanni…", "Yes": "Já", "accessibilityLabel": { "Cancel": "Hætta við (loka glugga)", @@ -290,9 +290,9 @@ "cameraUnknownError": "Get ekki notað myndavélina af óþekktum ástæðum.", "cameraUnsupportedResolutionError": "Myndavélin þín styður ekki umbeðna upplausn myndmerkis.", "close": "Loka", - "conferenceDisconnectMsg": "Þú ættir kannski að athuga nettenginguna þína. Tengist aftur eftir {{seconds}} sek...", + "conferenceDisconnectMsg": "Þú ættir kannski að athuga nettenginguna þína. Tengist aftur eftir {{seconds}} sek…", "conferenceDisconnectTitle": "Þú hefur verið aftengd(ur).", - "conferenceReloadMsg": "Við erum að reyna að laga þetta. Tengist aftur eftir {{seconds}} sek...", + "conferenceReloadMsg": "Við erum að reyna að laga þetta. Tengist aftur eftir {{seconds}} sek…", "conferenceReloadTitle": "Því miður, eitthvað hefur farið úrskeiðis.", "confirm": "Staðfesta", "confirmNo": "Nei", @@ -616,7 +616,7 @@ "errorLiveStreamNotEnabled": "Beint streymi er ekki virkt fyrir {{email}}. Virkjaðu beint streymi eða skráðu þig inn á notandaaðgang þar sem beint streymi er virkjað.", "expandedOff": "Beina streymið hefur verið stöðvað", "expandedOn": "Verið er að taka streyma fundinum á YouTube.", - "expandedPending": "Verið er að ræsa beina streymið...", + "expandedPending": "Verið er að ræsa beina streymið…", "failedToStart": "Tókst ekki að ræsa beint streymi", "getStreamKeyManually": "Við gátum ekki nálgast nein bein streymi. Reyndu að ná þér í lykil fyrir beint streymi frá YouTube.", "googlePrivacyPolicy": "Meðferð persónuupplýsinga hjá Google", @@ -628,7 +628,7 @@ "offBy": "{{name}} stöðvaði beina streymið", "on": "Beint streymi er hafið", "onBy": "{{name}} byrjaði beint streymi", - "pending": "Ræsi beint streymi...", + "pending": "Ræsi beint streymi…", "serviceName": "Þjónusta fyrir beint streymi", "sessionAlreadyActive": "Það er þegar verið að taka upp eða streyma beint þessari setu.", "signIn": "Skrá inn með Google", @@ -658,10 +658,10 @@ "joinRejectedMessage": "Beiðni þinni um þátttöku var hafnað af umsjónaraðila.", "joinRejectedTitle": "Beiðni um þátttöku var hafnað.", "joinTitle": "Taka þátt í fundi", - "joinWithPasswordMessage": "Reyni að taka þátt með lykilorði, hinkraðu aðeins...", + "joinWithPasswordMessage": "Reyni að taka þátt með lykilorði, hinkraðu aðeins…", "joiningMessage": "Þú færð að taka þátt í fundinum um leið og einhver samþykkir beiðnina þína", - "joiningTitle": "Biður um að taka þátt í fundi...", - "joiningWithPasswordTitle": "Tekur þátt með lykilorði...", + "joiningTitle": "Biður um að taka þátt í fundi…", + "joiningWithPasswordTitle": "Tekur þátt með lykilorði…", "knockButton": "Biðja um að taka þátt", "knockTitle": "Einhver vill taka þátt í fundinum", "knockingParticipantList": "Listi yfir þátttakendur sem bíða", @@ -751,7 +751,7 @@ "linkToSalesforceDescription": "Þú getur tengt yfirlit fundarins við Salesforce-hlut.", "linkToSalesforceError": "Ekki tókst að tengja fundinn á Salesforce", "linkToSalesforceKey": "Tengja þennan fund", - "linkToSalesforceProgress": "Tengi fundinn á Salesforce...", + "linkToSalesforceProgress": "Tengi fundinn á Salesforce…", "linkToSalesforceSuccess": "Fundurinn var tengdur við Salesforce", "localRecordingStarted": "{{name}} hefur byrjað upptöku á tölvunni sinni.", "localRecordingStopped": "{{name}} hefur stöðvað upptöku á tölvunni sinni.", @@ -889,7 +889,7 @@ "callMe": "Hringdu í mig", "callMeAtNumber": "Hringdu í mig í þessu númeri:", "calling": "Hringi", - "configuringDevices": "Stilli tæki...", + "configuringDevices": "Stilli tæki…", "connectedWithAudioQ": "Ert þú tengd/ur með hljóði?", "connection": { "good": "Internettengingin þín lítur vel út!", @@ -936,7 +936,6 @@ "premeeting": "Á undan fundi", "proceedAnyway": "Halda samt áfram", "screenSharingError": "Villa í skjádeilingu:", - "showScreen": "Virkja skjá á undan fundi", "startWithPhone": "Byrja með símahljóði", "unsafeRoomConsent": "Ég skil áhættuna, ég vil taka þátt í fundinum", "videoOnlyError": "Villa í myndmerki:", @@ -945,17 +944,17 @@ }, "presenceStatus": { "busy": "Upptekin/n", - "calling": "Hringi...", + "calling": "Hringi…", "connected": "Tengt", - "connecting": "Tengist...", - "connecting2": "Tengist*...", + "connecting": "Tengist…", + "connecting2": "Tengist*…", "disconnected": "Aftengt", "expired": "Útrunnið", "ignored": "Hunsað", - "initializingCall": "Ræsi símtal...", + "initializingCall": "Ræsi símtal…", "invited": "Boðið", "rejected": "Hafnað", - "ringing": "Hringing..." + "ringing": "Hringing…" }, "profile": { "avatar": "auðkennismynd", @@ -989,7 +988,7 @@ "errorFetchingLink": "Villa við að sækja tengil á upptöku.", "expandedOff": "Upptaka hefur verið stöðvuð", "expandedOn": "Verið er að taka upp fundinn.", - "expandedPending": "Verið er að ræsa upptöku...", + "expandedPending": "Verið er að ræsa upptöku…", "failedToStart": "Tókst ekki að ræsa upptöku", "fileSharingdescription": "Deila tengli á upptöku með þátttakendum á fundinum", "highlight": "Áherslulita", @@ -1007,7 +1006,7 @@ "localRecordingStartWarningTitle": "Stöðvaðu upptöku til að vista hana", "localRecordingVideoStop": "Ef þú stöðvar myndmerkið þitt stöðvast einnig upptakan á tölvunni. Ertu viss um að þú viljir halda áfram?", "localRecordingVideoWarning": "Til að taka upp myndmerkið þitt þarf það að vera í gangi þegar upptakan er sett af stað", - "localRecordingWarning": "Gakktu úr skugga um að þú veljir fyrirliggjandi flipa til að nota rétt mynd- og hljóðmerki. Upptakan er takmörkuð við 1GB, sem gera í kringum 100 mínútur.", + "localRecordingWarning": "Gakktu úr skugga um að þú veljir fyrirliggjandi flipa til að nota rétt mynd- og hljóðmerki.", "loggedIn": "Skráð inn sem {{userName}}", "noMicPermission": "Ekki var hægt að útbúa hljóðnemarás. Veittu heimildir til að nota hljóðnemann.", "noStreams": "Ekkert hljóð eða myndstreymi fannst", @@ -1016,7 +1015,7 @@ "on": "Upptaka hafin", "onBy": "{{name}} byrjaði upptökuna", "onlyRecordSelf": "Taka einungis upp mín eigin hljóð og myndstreymi", - "pending": "Undirbý að taka upp fundinn...", + "pending": "Undirbý að taka upp fundinn…", "recordAudioAndVideo": "Taka upp hljóð og myndmerki", "recordTranscription": "Taka upp textaumritun", "saveLocalRecording": "Vista upptökuskrá á eigin tölvu (Beta-prófunarútgáfa)", @@ -1069,7 +1068,7 @@ "incomingMessage": "Móttekin skilaboð", "language": "Tungumál", "loggedIn": "Skráð inn sem {{name}}", - "maxStageParticipants": "Hámarksfjöldi þátttakenda sem hægt er að festa á aðalgluggann (Á TILRAUNASTIGI)", + "maxStageParticipants": "Hámarksfjöldi þátttakenda sem hægt er að festa á aðalgluggann", "microphones": "Hljóðnemar", "moderator": "Stjórnandi", "moderatorOptions": "Valkostir umsjónarmanns", @@ -1362,7 +1361,7 @@ "labelToolTip": "Verið er að taka umrita (transcribe) fundinn", "off": "Umritun stöðvuð", "on": "Umritun hafin", - "pending": "Undirbý að taka umrita fundinn...", + "pending": "Undirbý að taka umrita fundinn…", "sourceLanguageDesc": "Núna er tungumál fundarins stillt á {{sourceLanguage}}.
Þú getur breytt því ", "sourceLanguageHere": "hér", "start": "Hefja birtingu skjátexta", @@ -1373,16 +1372,7 @@ }, "unpinParticipant": "{{participantName}} - Losa", "userMedia": { - "androidGrantPermissions": "Veldu Leyfa þegar vafrinn þinn biður um heimildir.", - "chromeGrantPermissions": "Veldu Leyfa þegar vafrinn þinn biður um heimildir.", - "edgeGrantPermissions": "Veldu þegar vafrinn þinn biður um heimildir.", - "electronGrantPermissions": "Reynir að nota myndavélina þína og hljóðnema", - "firefoxGrantPermissions": "Veldu Deila völdu tæki þegar vafrinn þinn biður um heimildir.", - "iexplorerGrantPermissions": "Veldu Í lagi þegar vafrinn þinn biður um heimildir.", - "nwjsGrantPermissions": "Gefðu heimild til að nota myndavél og hljóðnema", - "operaGrantPermissions": "Veldu Leyfa þegar vafrinn þinn biður um heimildir.", - "react-nativeGrantPermissions": "Veldu Leyfa þegar vafrinn þinn biður um heimildir.", - "safariGrantPermissions": "Veldu Í lagi þegar vafrinn þinn biður um heimildir." + "grantPermissions": "Gefðu heimild til að nota myndavél og hljóðnema." }, "videoSIPGW": { "busy": "Við erum að reyna að losa um einhver tilföng. Reyndu aftur eftir nokkrar mínútur.", @@ -1460,7 +1450,7 @@ "image6": "Skógur ", "image7": "Sólarupprás", "none": "Ekkert", - "pleaseWait": "Hinkraðu aðeins...", + "pleaseWait": "Hinkraðu aðeins…", "removeBackground": "Fjarlægja bakgrunn", "slightBlur": "Hálfmóskað", "title": "Sýndarbakgrunnar", diff --git a/lang/main-it.json b/lang/main-it.json index 28446ee7e19a..b9cffc9f41f5 100644 --- a/lang/main-it.json +++ b/lang/main-it.json @@ -1,14 +1,17 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "Link della riunione: {{url}}" + }, "add": "Invita", "addContacts": "Invita tuoi contatti", "contacts": "contatti", "copyInvite": "Copia invito alla riunione", "copyLink": "Copia collegamento alla riunione", "copyStream": "Copia collegamento della diretta", - "countryNotSupported": "Non supportiamo ancora questa destinazione.", + "countryNotSupported": "Questa destinazione non è ancora supportata.", "countryReminder": "Stai chiamando fuori dagli Stati Uniti? Assicurati d'inserire il prefisso internazionale!", - "defaultEmail": "Tua email di default", + "defaultEmail": "Tua email predefinita", "disabled": "Non puoi invitare partecipanti.", "failedToAdd": "L'aggiunta di nuovi partecipanti è fallita", "googleEmail": "Email Google", @@ -19,7 +22,7 @@ "noResults": "Nessun risultato corrispondente", "outlookEmail": "Email Outlook", "phoneNumbers": "numeri di telefono", - "searching": "Sto cercando...", + "searching": "Sto cercando…", "shareInvite": "Condividi invito alla riunione", "shareLink": "Condividi il collegamento alla riunione per invitare altri", "shareStream": "Condividi il collegamento alla diretta", @@ -30,99 +33,134 @@ }, "audioDevices": { "bluetooth": "Bluetooth", - "car": "Vivavoce Auto", + "car": "Stereo dell'auto", "headphones": "Cuffie", - "none": "Nessun dispositivo audio esistente", + "none": "Nessun dispositivo audio disponibile", "phone": "Telefono", - "speaker": "Vivavoce" + "speaker": "Altoparlante" }, "audioOnly": { - "audioOnly": "Utilizzo di minore banda" + "audioOnly": "Larghezza di banda limitata" + }, + "bandwidthSettings": { + "assumedBandwidthBps": "es. 10000000 per 10 Mbps", + "assumedBandwidthBpsWarning": "Valori alti possono causare problemi di rete", + "customValue": "valore personalizzato", + "customValueEffect": "per impostare il valore effettivo di bps", + "leaveEmpty": "lascia vuoto", + "leaveEmptyEffect": "per consentire l'utilizzo di stime", + "possibleValues": "Valori possibili", + "setAssumedBandwidthBps": "Larghezza di banda assunta (bps)", + "title": "Impostazioni larghezza di banda", + "zeroEffect": "per disabilitare i video" }, "breakoutRooms": { "actions": { - "add": "Crea sottogruppo", - "autoAssign": "Assegna automaticamente a sottogruppi", + "add": "Crea stanza", + "autoAssign": "Assegna automaticamente a stanze", "close": "Chiudi", "join": "Entra", - "leaveBreakoutRoom": "Esci", + "leaveBreakoutRoom": "Esci dalla stanza", "more": "Mostra di più", "remove": "Elimina", + "rename": "Rinomina", + "renameBreakoutRoom": "Rinomina stanza", "sendToBreakoutRoom": "Invia partecipante a:" }, - "defaultName": "Sottogruppo {{index}}", + "breakoutList": "Lista stanze", + "buttonLabel": "Stanze", + "defaultName": "Stanza {{index}}", + "hideParticipantList": "Nascondi lista partecipanti", "mainRoom": "Riunione principale", "notifications": { - "joined": "Entrato nel sottogruppo \"{{name}}\"", - "joinedMainRoom": "Entrato nella riunione principale", - "joinedTitle": "Sottogruppo" - } + "joined": "Ingresso nella stanza \"{{name}}\" in corso", + "joinedMainRoom": "Ingresso nella riunione principale in corso", + "joinedTitle": "Stanze" + }, + "showParticipantList": "Mostra lista partecipanti", + "title": "Stanze" }, "calendarSync": { "addMeetingURL": "Aggiungi un collegamento alla riunione", "confirmAddLink": "Vuoi aggiungere un collegamento Jitsi a questo evento?", "error": { - "appConfiguration": "L'integrazione del calendario non è configurata in modo appropriato.", - "generic": "È stato riscontrato un errore. Controllare le impostazioni del calendario o ricaricare la pagina.", - "notSignedIn": "È stato riscontrato un errore durante l'autenticazione per la visualizzazione degli eventi del calendario. Controllare le impostazioni del calendario e provare a ripetere l'accesso." + "appConfiguration": "L'integrazione del calendario non è configurata correttamente.", + "generic": "Si è verificato un errore. Controlla le impostazioni del calendario o ricarica la pagina.", + "notSignedIn": "Si è verificato un errore durante l'autenticazione per visualizzare gli eventi del calendario. Controlla le impostazioni del calendario e prova a ripetere l'accesso." }, "join": "Partecipa", "joinTooltip": "Partecipa alla riunione", - "nextMeeting": "prossima riunione", + "nextMeeting": "Prossima riunione", "noEvents": "Non ci sono eventi programmati a breve.", - "ongoingMeeting": "riunione in corso", + "ongoingMeeting": "Riunione in corso", "permissionButton": "Apri impostazioni", - "permissionMessage": "Per visualizzare la lista delle riunioni nell'app è richiesto il permesso Calendario", + "permissionMessage": "Per visualizzare la lista delle riunioni nell'applicazione è richiesto l'accesso al calendario.", "refresh": "Aggiorna calendario", "today": "Oggi" }, "carmode": { "actions": { - "selectSoundDevice": "Scegli uscita audio" + "selectSoundDevice": "Scegli dispositivo audio" }, "labels": { - "buttonLabel": "Modalità Auto", - "title": "Modalità Auto", + "buttonLabel": "Modalità auto", + "title": "Modalità auto", "videoStopped": "Il tuo video è disabilitato" } }, "chat": { + "disabled": "L'invio di messaggi in chat è disabilitato.", "enter": "Entra nella conversazione", "error": "Errore: il tuo messaggio non è stato inviato. Motivo: {{error}}", + "everyone": "Tutti", "fieldPlaceHolder": "Scrivi qui il tuo messaggio", + "guestsChatIndicator": "(ospite)", "lobbyChatMessageTo": "Messaggio a {{recipient}} in sala d'attesa", "message": "Messaggio", "messageAccessibleTitle": "{{user}} dice:", - "messageAccessibleTitleMe": "io dico:", + "messageAccessibleTitleMe": "tu dici:", "messageTo": "Messaggio privato a {{recipient}}", - "messagebox": "Digitare un messaggio", + "messagebox": "Digita un messaggio", "newMessages": "Nuovi messaggi", "nickname": { "popover": "Scegli un nickname", - "title": "Inserire un nickname per utilizzare la conversazione", - "titleWithPolls": "Inserire un nickname per utilizzare la conversazione" + "title": "Inserisci un nickname per usare la chat", + "titleWithCC": "Inserisci un nickname per usare la chat e i sottotitoli", + "titleWithPolls": "Inserisci un nickname per usare la chat e i sondaggi", + "titleWithPollsAndCC": "Inserisci un nickname per usare la chat, i sondaggi e i sottotitoli", + "titleWithPollsAndCCAndFileSharing": "Inserisci un nickname per usare la chat, i sondaggi, i sottotitoli e i file" }, - "noMessagesMessage": "Non ci sono ancora messaggi nella riunione. Comincia una conversazione, qui!", + "noMessagesMessage": "Non ci sono ancora messaggi nella riunione. Inizia una conversazione, qui!", "privateNotice": "Messaggio privato a {{recipient}}", "sendButton": "Invia", "smileysPanel": "Pannello emoji", + "systemDisplayName": "Sistema", "tabs": { - "chat": "Conversazione", + "chat": "Chat", + "closedCaptions": "Sottotitoli", + "fileSharing": "File", "polls": "Sondaggi" }, - "title": "Conversazione", - "titleWithPolls": "Conversazione", + "title": "Chat", + "titleWithCC": "Sottotitoli", + "titleWithFeatures": "Chat e", + "titleWithFileSharing": "File", + "titleWithPolls": "Sondaggi", "you": "tu" }, "chromeExtensionBanner": { - "buttonText": "Installa l'estensione Chrome", - "buttonTextEdge": "Installa l'estensione Edge", + "buttonText": "Installa l'estensione per Chrome", + "buttonTextEdge": "Installa l'estensione per Edge", "close": "Chiudi", "dontShowAgain": "Non mostrare più questo messaggio", "installExtensionText": "Installa un'estensione per integrare Google Calendar e Office 365" }, + "closedCaptionsTab": { + "emptyState": "Il contenuto dei sottotitoli sarà disponibile una volta che l'organizzatore lo attiverà", + "startClosedCaptionsButton": "Attiva sottotitoli" + }, "connectingOverlay": { - "joiningRoom": "Collegamento alla riunione in corso..." + "joiningRoom": "Collegamento alla riunione in corso…" }, "connection": { "ATTACHED": "Collegato", @@ -134,27 +172,29 @@ "DISCONNECTED": "Disconnesso", "DISCONNECTING": "Disconnessione in corso", "ERROR": "Errore", - "FETCH_SESSION_ID": "Sto ottenendo ID di sessione...", - "GET_SESSION_ID_ERROR": "Errore nell'ottenere ID di sessione: {{code}}", - "GOT_SESSION_ID": "Sto ottenendo ID di sessione... completato", + "FETCH_SESSION_ID": "Acquisizione ID sessione in corso…", + "GET_SESSION_ID_ERROR": "Errore nell'acquisizione ID sessione: {{code}}", + "GOT_SESSION_ID": "Acquisizione ID sessione in corso… Completata", "LOW_BANDWIDTH": "Il video per {{displayName}} è stato interrotto per risparmiare banda" }, "connectionindicator": { "address": "Indirizzo:", "audio_ssrc": "Audio SSRC:", "bandwidth": "Banda stimata:", - "bitrate": "Velocità:", + "bitrate": "Bitrate:", "bridgeCount": "Conteggio server:", "codecs": "Codec (A/V): ", "connectedTo": "Connesso a:", + "e2eeVerified": "E2EE verificata:", "framerate": "Fotogrammi al secondo:", "less": "Mostra meno", "localaddress": "Indirizzo locale:", "localaddress_plural": "Indirizzi locali:", "localport": "Porta locale:", "localport_plural": "Porte locali:", - "maxEnabledResolution": "manda max", + "maxEnabledResolution": "invia max.", "more": "Mostra di più", + "no": "no", "packetloss": "Perdita pacchetti:", "participant_id": "Id partecipante:", "quality": { @@ -173,7 +213,8 @@ "status": "Connessione:", "transport": "Trasporto:", "transport_plural": "Trasporti:", - "video_ssrc": "Video SSRC:" + "video_ssrc": "Video SSRC:", + "yes": "sì" }, "dateUtils": { "earlier": "Precedenti", @@ -181,27 +222,43 @@ "yesterday": "Ieri" }, "deepLinking": { - "appNotInstalled": "Per partecipare a questa riunione sul tuo telefono ti serve l'app mobile {{app}}.", - "description": "Non è successo nulla? Abbiamo provato ad avviare la riunione sull'app desktop {{app}}. Prova di nuovo o avviala nell'app web {{app}}.", - "descriptionWithoutWeb": "Non è successo niente? Abbiamo provato ad avviare la riunione nell'app desktop {{app}}", + "appNotInstalled": "Per partecipare a questa riunione dal telefono serve l'app mobile {{app}}.", + "description": "Non è successo nulla? È stato tentato l'avvio della riunione dall'app desktop {{app}}. Prova di nuovo o avviala dalla web app {{app}}.", + "descriptionNew": "Non è successo nulla? È stato tentato l'avvio della riunione dall'app desktop {{app}}.

Prova di nuovo o avviala dalla web app.", + "descriptionWithoutWeb": "Non è successo nulla? È stato tentato l'avvio della riunione dall'app desktop {{app}}.", "downloadApp": "Scarica l'app", + "downloadMobileApp": "Scarica dall'App Store", "ifDoNotHaveApp": "Se non hai ancora l'app:", "ifHaveApp": "Se hai già l'app:", "joinInApp": "Entra in riunione usando l'app", + "joinInAppNew": "Entra dall'app", + "joinInBrowser": "Entra dal browser", + "launchMeetingLabel": "Come desideri entrare nella riunione?", "launchWebButton": "Avvia sul web", - "title": "Sto avviando la riunione su {{app}}...", + "noDesktopApp": "Non hai l'app?", + "noMobileApp": "Non hai l'app?", + "or": "O", + "termsAndConditions": "Continuando acconsenti ai nostri termini & condizioni.", + "title": "Avvio della riunione da {{app}} in corso…", + "titleNew": "Avvio della riunione in corso…", "tryAgainButton": "Prova di nuovo sul desktop", - "unsupportedBrowser": "Sembra tu stia usando un browser che non supportiamo." + "unsupportedBrowser": "Sembra che tu stia usando un browser che non supportato." }, "defaultLink": "es. {{url}}", "defaultNickname": "es. Anna Rossi", "deviceError": { "cameraError": "Impossibile accedere alla videocamera", - "cameraPermission": "Errore nell'ottenere i permessi per la videocamera", + "cameraPermission": "Errore nell'acquisizione dei permessi della videocamera", "microphoneError": "Impossibile accedere al microfono", - "microphonePermission": "Errore nell'ottenere i permessi per il microfono" + "microphonePermission": "Errore nell'acquisizione dei permessi del microfono" }, "deviceSelection": { + "hid": { + "callControl": "Controllo chiamata", + "connectedDevices": "Dispositivi connessi:", + "deleteDevice": "Elimina dispositivo", + "pairDevice": "Accoppia dispositivo" + }, "noPermission": "Permesso negato", "previewUnavailable": "Anteprima non disponibile", "selectADevice": "Scegli un dispositivo", @@ -216,61 +273,81 @@ "dialog": { "Back": "Indietro", "Cancel": "Annulla", - "IamHost": "Sono l'organizzatore", + "IamHost": "Accedi", "Ok": "OK", "Remove": "Rimuovi", "Share": "Condividi", "Submit": "Invia", - "WaitForHostMsg": "La riunione non è ancora cominciata. Se sei l'organizzatore, per favore autenticati. Altrimenti, aspetta l'arrivo dell'organizzatore.", - "WaitingForHostTitle": "In attesa dell'organizzatore...", + "Understand": "Accetto, mantieni microfono e videocamera disattivati per ora", + "UnderstandAndUnmute": "Accetto, riattiva microfono e videocamera", + "WaitForHostMsg": "La riunione non è ancora iniziata. Se sei l'organizzatore, per favore autenticati. Altrimenti, attendi l'arrivo dell'organizzatore.", + "WaitForHostNoAuthMsg": "La riunione non è ancora iniziata perché nessun organizzatore si è ancora collegato. Si prega di attendere.", + "WaitingForHostButton": "Attendi l'organizzatore", + "WaitingForHostTitle": "In attesa dell'organizzatore…", "Yes": "Sì", "accessibilityLabel": { - "liveStreaming": "Diretta streaming" + "Cancel": "Annulla (chiudi dialogo)", + "Ok": "OK (salva e chiudi dialogo)", + "close": "Chiudi dialogo", + "liveStreaming": "Diretta", + "sharingTabs": "Opzioni di condivisione" }, "add": "Aggiungi", - "addMeetingNote": "Aggiungi una a questa riunione", + "addMeetingNote": "Aggiungi una nota su questa riunione", "addOptionalNote": "Aggiungi una nota (facoltativo):", "allow": "Consenti", + "allowToggleCameraDialog": "Consenti a {{initiatorName}} di attivare la modalità frontale della videocamera?", + "allowToggleCameraTitle": "Consenti l'attivazione della videocamera?", "alreadySharedVideoMsg": "Un altro utente sta condividendo un video. Questa riunione permette di condividere un solo video alla volta.", - "alreadySharedVideoTitle": "È permesso un solo video alla volta", + "alreadySharedVideoTitle": "È permessa una sola condivisione video alla volta", "applicationWindow": "Finestra dell'applicazione", - "authenticationRequired": "Richiesta autorizzazione", + "authenticationRequired": "Richiesta autenticazione", + "cameraCaptureDialog": { + "description": "Scatta ed invia una foto usando la fotocamera del telefono", + "ok": "Apri la fotocamera", + "reject": "Non adesso", + "title": "Scatta una foto" + }, "cameraConstraintFailedError": "La tua videocamera non soddisfa alcuni dei requisiti.", "cameraNotFoundError": "Videocamera non trovata.", - "cameraNotSendingData": "Non possiamo accedere alla tua videocamera. Controlla che non sia già usata da un'altra applicazione, seleziona un altro dispositivo dalle impostazioni o prova a ricaricare l'applicazione.", + "cameraNotSendingData": "Impossibile accedere alla videocamera. Controlla che non sia in uso in un'altra applicazione, seleziona un altro dispositivo dalle impostazioni o prova a ricaricare l'applicazione.", "cameraNotSendingDataTitle": "Impossibile accedere alla videocamera", - "cameraPermissionDeniedError": "Non hai concesso il permesso di usare la videocamera. Potrai partecipare comunque alla riunione ma gli altri non potranno vederti. Usa il pulsante a forma di videocamera nella barra degli indirizzi per risolvere il problema.", + "cameraPermissionDeniedError": "Non hai concesso l'autorizzazione per l'uso della videocamera. Potrai partecipare comunque alla riunione ma gli altri non potranno vederti. Usa il pulsante a forma di videocamera nella barra degli indirizzi per risolvere il problema.", "cameraTimeoutError": "Impossibile avviare la sorgente video. Tempo di attesa scaduto.", "cameraUnknownError": "Impossibile usare la videocamera per un motivo sconosciuto.", "cameraUnsupportedResolutionError": "La tua videocamera non supporta la risoluzione richiesta.", "close": "Chiudi", - "conferenceDisconnectMsg": "Controlla la tua connessione. Riconnessione in {{seconds}} secondi...", + "conferenceDisconnectMsg": "Controlla la tua connessione. Tentativo di riconnessione tra {{seconds}} secondi…", "conferenceDisconnectTitle": "Sei stato disconnesso.", - "conferenceReloadMsg": "Stiamo cercando di risolvere il problema. Riconnessione in {{seconds}} secondi...", + "conferenceReloadMsg": "Risoluzione del problema in corso. Tentativo di riconnessione tra {{seconds}} secondi…", "conferenceReloadTitle": "Purtroppo qualcosa è andato storto.", "confirm": "Conferma", + "confirmBack": "Indietro", "confirmNo": "No", "confirmYes": "Sì", - "connectError": "Oh! Qualcosa è andato storto e non ti puoi collegare alla riunione.", - "connectErrorWithMsg": "Oops! Qualcosa è andato storto e non ti puoi collegare alla riunione: {{msg}}", + "connectError": "Ops! Qualcosa è andato storto e non è stato possibile collegarsi alla riunione.", + "connectErrorWithMsg": "Ops! Qualcosa è andato storto e non è stato possibile collegarsi alla riunione.: {{msg}}", "connecting": "Connessione in corso", "contactSupport": "Contatta il supporto", "copied": "Copiato", "copy": "Copia", + "demoteParticipantDialog": "Vuoi far diventare questo partecipante uno spettatore?", + "demoteParticipantTitle": "Fai diventare spettatore", "dismiss": "Scarta", - "displayNameRequired": "Ciao, qual è il tuo nome", + "displayNameRequired": "Ciao, qual è il tuo nome?", "done": "Fatto", - "e2eeDescription": "La crittografia punto-a-punto al momento è SPERIMENTALE. Tieni presente che attivandola disabiliterai i servizi svolti dal server, come: la registrazione, la dirette streaming e la partecipazione usando telefoni. Tieni anche presente che la riunione funzionerà solo per chi si collega usando browser che supportano flussi inseribili (insertable streams).", - "e2eeDisabledDueToMaxModeDescription": "Impossibile crittografare la sessione, per il numero eccessivo di partecipanti.", - "e2eeLabel": "Attiva la crittografia punto-a-punto", - "e2eeWarning": "ATTENZIONE: non tutti i partecipanti a questa riunione sembrano supportare le funzionalità di crittografia punto-a-punto. Se la attivi, non potranno sentirti o vederti.", - "e2eeWillDisableDueToMaxModeDescription": "WARNING: ATTENZIONE: la crittografia punto-punto verrà disattivata automaticamente, se si aggiungono nuovi partecipanti alla riunione.", + "e2eeDescription": "La crittografia End-to-End al momento è SPERIMENTALE. Tieni presente che attivandola disabiliterai i servizi svolti lato server, come: la partecipazione via telefono. Tieni anche presente che la riunione funzionerà solo a chi si collega usando browser che supportano flussi inseribili.", + "e2eeDisabledDueToMaxModeDescription": "Impossibile usare la crittografia End-to-End per il numero di partecipanti troppo grande.", + "e2eeLabel": "Attiva la crittografia End-to-End", + "e2eeWarning": "ATTENZIONE: non tutti i partecipanti a questa riunione sembrano supportare le funzionalità di crittografia End-to-End. Se la attivi, non potranno vederti o sentirti.", + "e2eeWillDisableDueToMaxModeDescription": "ATTENZIONE: la crittografia End-to-End verrà disattivata automaticamente, se si aggiungono nuovi partecipanti alla riunione.", "embedMeeting": "Incorpora la riunione", "enterDisplayName": "Inserisci qui il tuo nome", "error": "Errore", - "gracefulShutdown": "Il nostro servizio è al momento spento per manutenzione. Si prega di riprovare più tardi.", - "grantModeratorDialog": "Sei sicuro di voler rendere moderatore questo partecipante?", - "grantModeratorTitle": "Autorizza moderatore", + "errorRoomCreationRestriction": "Hai provato ad accedere alla riunione troppo presto, torna tra un po'.", + "gracefulShutdown": "Il nostro servizio è al momento inattivo per manutenzione. Si prega di riprovare più tardi.", + "grantModeratorDialog": "Vuoi rendere relatore questo partecipante?", + "grantModeratorTitle": "Fai diventare relatore", "hide": "Nascondi", "hideShareAudioHelper": "Non mostrare più questa finestra", "incorrectPassword": "Nome utente o password errati", @@ -279,151 +356,204 @@ "internalErrorTitle": "Errore interno", "kickMessage": "Puoi contattare {{participantDisplayName}} per maggiori dettagli.", "kickParticipantButton": "Espelli", - "kickParticipantDialog": "Sei sicuro di voler espellere questo partecipante?", - "kickParticipantTitle": "Espelli questo partecipante?", - "kickTitle": "Espulso dalla riunione", + "kickParticipantDialog": "Vuoi espellere questo partecipante?", + "kickParticipantTitle": "Espellere questo partecipante?", + "kickSystemTitle": "Oh! Sei stato espulso dalla riunione", + "kickTitle": "Oh! {{participantDisplayName}} ti ha espulso dalla riunione.", + "learnMore": "ulteriori informazioni", "linkMeeting": "Collega la riunione", "linkMeetingTitle": "Collega la riunione a Salesforce", - "liveStreaming": "Diretta streaming", + "liveStreaming": "Diretta", "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Impossibile durante la registrazione.", "localUserControls": "Controlli dell'utente locale", "lockMessage": "Impossibile bloccare la riunione.", - "lockRoom": "Aggiungi una $t(lockRoomPasswordUppercase) alla riunione", + "lockRoom": "Aggiungi una $t(lockRoomPassword) alla riunione", "lockTitle": "Blocco fallito", - "login": "Login", - "logoutQuestion": "Vuoi disconnetterti e interrompere la riunione?", + "login": "Accesso", + "loginQuestion": "Vuoi fare l'accesso e abbandonare la riunione?", + "logoutQuestion": "Vuoi disconnetterti e abbandonare la riunione?", "logoutTitle": "Disconnessione", "maxUsersLimitReached": "È stato raggiunto il numero massimo di partecipanti. La riunione è al completo. Contatta l'organizzatore o riprova più tardi!", "maxUsersLimitReachedTitle": "Raggiunto limite massimo partecipanti", "micConstraintFailedError": "Il tuo microfono non soddisfa alcuni dei requisiti.", "micNotFoundError": "Microfono non trovato.", - "micNotSendingData": "Apri le impostazioni del computer per togliere il «muto» al microfono e imposta il volume.", + "micNotSendingData": "Apri le impostazioni del computer per attivare il microfono e impostare il volume.", "micNotSendingDataTitle": "Il microfono è muto per impostazione di sistema", - "micPermissionDeniedError": "Non hai concesso il permesso di usare il microfono. Puoi comunque partecipare alla riunione ma gli altri non potranno sentirti. Usa il bottone a forma di telecamera nella barra degli indirizzi per cambiare impostazioni.", - "micTimeoutError": "Impossibile avviare la fonte audio. Tempo di attesa scaduto.", + "micPermissionDeniedError": "Non hai concesso l'autorizzazione per l'uso del microfono. Puoi comunque partecipare alla riunione ma gli altri non potranno sentirti. Usa il pulsante a forma di telecamera nella barra degli indirizzi per risolvere il problema.", + "micTimeoutError": "Impossibile avviare la sorgente audio. Tempo di attesa scaduto.", "micUnknownError": "Impossibile usare il microfono per un motivo sconosciuto.", - "moderationAudioLabel": "Permetti ai partecipenti di riaccendere il microfono", - "moderationVideoLabel": "Permetti ai partecipanti di riattivare la videocamera", - "muteEveryoneDialog": "I partecipanti possono riaccenderli in quasiasi momento.", - "muteEveryoneDialogModerationOn": "I partecipanti possono fare richiesta di parlare in ogni momento.", - "muteEveryoneElseDialog": "Una volta spenti i microfoni non potrai riattivarli, ma ogni partecipante potrà farlo in qualsiasi momento.", - "muteEveryoneElseTitle": "Spengo il microfono a tutti, tranne che a {{whom}}?", - "muteEveryoneElsesVideoDialog": "Una volta spente le videocamere non potrai riaccenderle, ma ogni partecipante potrà farlo in qualsiasi momento.", - "muteEveryoneElsesVideoTitle": "Spengo la videocamera a tutti, tranne che a {{whom}}?", + "moderationAudioLabel": "Consenti ai partecipanti di attivare il microfono", + "moderationDesktopLabel": "Consenti ai partecipanti di condividere lo schermo", + "moderationVideoLabel": "Consenti ai partecipanti di attivare la videocamera", + "muteEveryoneDialog": "I partecipanti possono attivare il microfono in qualsiasi momento.", + "muteEveryoneDialogModerationOn": "I partecipanti possono chiedere di parlare in qualsiasi momento.", + "muteEveryoneElseDialog": "Una volta spenti i microfoni non potrai riattivarli, ma ogni partecipante potrà farlo da sé in qualsiasi momento.", + "muteEveryoneElseTitle": "Spegnere il microfono a tutti, tranne che a {{whom}}?", + "muteEveryoneElsesDesktopDialog": "Una volta interrotta la condivisione dello schermo non potrai riattivarla, ma ogni partecipante potrà farlo da sé in qualsiasi momento.", + "muteEveryoneElsesDesktopTitle": "Interrompere la condivisione dello schermo a tutti, tranne che a {{whom}}?", + "muteEveryoneElsesVideoDialog": "Una volta spente le videocamere non potrai riaccenderle, ma ogni partecipante potrà farlo da sé in qualsiasi momento.", + "muteEveryoneElsesVideoTitle": "Spegnere la videocamera a tutti, tranne che a {{whom}}?", "muteEveryoneSelf": "tu", - "muteEveryoneStartMuted": "Tutti cominciano a microfono spento, d'adesso in avanti", - "muteEveryoneTitle": "Spengo il microfono a tutti?", - "muteEveryonesVideoDialog": "Sei sicuro di voler spegnere le videocamere di tutti? Non potrai riaccenderle, ma ogni partecipante potrà farlo in qualsiasi momento.", - "muteEveryonesVideoDialogModerationOn": "I partecipanti possono fare richiesta di trasmettere video in ogni momento.", + "muteEveryoneStartMuted": "Tutti iniziano a microfono spento da adesso in avanti", + "muteEveryoneTitle": "Spegnere il microfono a tutti?", + "muteEveryonesDesktopDialog": "I partecipanti potranno condividere lo schermo in qualsiasi momento.", + "muteEveryonesDesktopDialogModerationOn": "I partecipanti possono inviare una richiesta per condividere lo schermo in ogni momento.", + "muteEveryonesDesktopTitle": "Interrompere la condivisione dello schermo a tutti?", + "muteEveryonesVideoDialog": "Ogni partecipante potrà riavviare il video da sé in qualsiasi momento.", + "muteEveryonesVideoDialogModerationOn": "I partecipanti possono chiedere di attivare il video in qualsiasi momento.", "muteEveryonesVideoDialogOk": "Spegni", - "muteEveryonesVideoTitle": "Spengo la videocamera a tutti?", - "muteParticipantBody": "Non sarai in grado di riattivare il loro microfono, ma loro potranno riattivarlo in qualsiasi momento.", + "muteEveryonesVideoTitle": "Spegnere la videocamera a tutti?", + "muteParticipantBody": "Non potrai riattivare il loro microfono, ma loro potranno farlo in qualsiasi momento.", "muteParticipantButton": "Silenzia", - "muteParticipantsVideoBody": "Una volta spenta la videocamera non potrai riaccenderla, ma lui potrà riattivarla in qualsiasi momento.", - "muteParticipantsVideoBodyModerationOn": "Non potrai riaccendere le videocamere, né loro potranno.", - "muteParticipantsVideoButton": "Spegni video", - "muteParticipantsVideoDialog": "Sei sicuro di voler spegnere la videocamera di questo partecipante? Lui potrà riattivarla in ogni momento.", - "muteParticipantsVideoDialogModerationOn": "Are you sure you want to turn off this participant's camera? You won't be able to turn the camera back on and neither will they.", - "muteParticipantsVideoTitle": "Vuoi spegnere la videocamera di questo partecipante?", + "muteParticipantsDesktopBody": "Non potrai riavviare la loro condivisione dello schermo, ma loro potranno farlo in qualsiasi momento.", + "muteParticipantsDesktopBodyModerationOn": "Non potrai riavviare la loro condivisione dello schermo e nemmeno loro potranno.", + "muteParticipantsDesktopButton": "Interrompi la condivisione dello schermo", + "muteParticipantsDesktopDialog": "Vuoi interrompere la condivisione dello schermo di questo partecipante? Non potrai riattivarla, ma lui potrà farlo in qualsiasi momento.", + "muteParticipantsDesktopDialogModerationOn": "Vuoi interrompere la condivisione dello schermo di questo partecipante? Non potrai riattivarla e nemmeno loro potranno.", + "muteParticipantsDesktopTitle": "Disattivare la condivisione dello schermo di questo partecipante?", + "muteParticipantsVideoBody": "Non potrai riattivare le videocamere, ma loro potranno farlo in qualsiasi momento.", + "muteParticipantsVideoBodyModerationOn": "Non potrai riattivare le videocamere e nemmeno loro potranno.", + "muteParticipantsVideoButton": "Spegni videocamere", + "muteParticipantsVideoDialog": "Vuoi spegnere la videocamera di questo partecipante? Non potrai riattivarla, ma lui potrà farlo in qualsiasi momento.", + "muteParticipantsVideoDialogModerationOn": "Vuoi spegnere la videocamera di questo partecipante? Non potrai riattivarla e nemmeno lui potrà farlo.", + "muteParticipantsVideoTitle": "Spegnere la videocamera di questo partecipante?", "noDropboxToken": "Token Dropbox non valido", "password": "Password", - "passwordLabel": "La riunione è stata bloccata da un partecipante. Immetti la $t(lockRoomPassword) per collegarti, per favore.", + "passwordLabel": "La riunione è stata bloccata da un partecipante. Inserisci la $t(lockRoomPassword) per collegarti.", "passwordNotSupported": "Impostare una $t(lockRoomPassword) non è supportato.", - "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) non supportato", + "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) non supportata", "passwordRequired": "$t(lockRoomPasswordUppercase) richiesta", - "permissionCameraRequiredError": "L'autorizzazione all'uso della videcamera deve essere concessa, se si desidera mandare online la propria immagine. Per favore, concedi l'autorizzazione nelle impostazioni", + "permissionCameraRequiredError": "L'autorizzazione all'uso della videocamera è necessaria per partecipare con il video. Concedi l'autorizzazione nelle impostazioni.", "permissionErrorTitle": "Autorizzazione richiesta", - "permissionMicRequiredError": "L'autorizzazione all'uso del microfono deve essere concessa, se si desidera parlare durante la conferenza. Per favore, concedi l'autorizzazione nelle impostazioni", - "popupError": "Il tuo browser sta bloccando i pop-up da questo sito. Per favore abilita i pop-up dalle impostazioni di sicurezza del browser e riprova.", - "popupErrorTitle": "Pop-up bloccato", - "readMore": "continua", - "recentlyUsedObjects": "Gli oggetti che hai usato di recente", + "permissionMicRequiredError": "L'autorizzazione all'uso del microfono è necessaria per parlare durante la conferenza. Concedi l'autorizzazione nelle impostazioni", + "readMore": "mostra di più", + "recentlyUsedObjects": "Oggetti usati di recente", "recording": "Registrazione", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossibile durante una diretta.", + "recordingInProgressDescription": "Questa riunione sta venendo registrata e analizzata dall'IA. I tuoi audio e video sono stati disattivati. Riattivandoli, acconsenti ad essere registrato.", + "recordingInProgressDescriptionFirstHalf": "Questa riunione sta venendo registrata e analizzata dall'IA", + "recordingInProgressDescriptionSecondHalf": ". I tuoi audio e video sono stati disattivati. Riattivandoli, acconsenti ad essere registrato.", + "recordingInProgressTitle": "Registrazione in corso", "rejoinNow": "Ricollegati ora", "remoteControlAllowedMessage": "{{user}} ha accettato la tua richiesta di controllo remoto!", "remoteControlDeniedMessage": "{{user}} ha respinto la tua richiesta di controllo remoto!", "remoteControlErrorMessage": "Si è verificato un errore mentre si cercava di richiedere il controllo remoto a {{user}}!", - "remoteControlRequestMessage": "Vuoi consentire ad {{user}} di controllare da remoto il tuo desktop?", - "remoteControlShareScreenWarning": "Tieni conto che premendo «Permetti» condividerai il tuo schermo.", + "remoteControlRequestMessage": "Vuoi consentire a {{user}} di controllare da remoto il tuo desktop?", + "remoteControlShareScreenWarning": "Nota che premendo «Consenti» condividerai il tuo schermo!", "remoteControlStopMessage": "Sessione di controllo remoto terminata!", "remoteControlTitle": "Connessione desktop remoto", "remoteUserControls": "Controlli dell'utente remoto {{username}}", - "removePassword": "Togli la $t(lockRoomPassword)", - "removeSharedVideoMsg": "Sei sicuro di voler rimuovere il tuo video condiviso?", + "removePassword": "Rimuovi la $t(lockRoomPassword)", + "removeSharedVideoMsg": "Vuoi rimuovere il tuo video condiviso?", "removeSharedVideoTitle": "Rimuovi video condiviso", - "reservationError": "Errore di sistema in prenotazione", + "renameBreakoutRoomLabel": "Nome della stanza", + "renameBreakoutRoomTitle": "Rinomina stanza", + "reservationError": "Errore del sistema di prenotazione", "reservationErrorMsg": "Codice di errore: {{code}}, messaggio: {{msg}}", "retry": "Riprova", "screenSharingAudio": "Condividi audio", - "screenSharingFailed": "Ops! Non è stato possibile avviare la condivisione dello schermo!", + "screenSharingFailed": "Ops! Qualcosa è andato storto, non è stato possibile avviare la condivisione dello schermo!", "screenSharingFailedTitle": "Condivisione dello schermo fallita!", - "screenSharingPermissionDeniedError": "Qualcosa non funziona nei permessi di condivisione dello schermo. Ricarica e riprova.", + "screenSharingPermissionDeniedError": "Ops! Qualcosa è andato storto con l'autorizzazione di condivisione dello schermo. Ricarica e riprova.", "searchInSalesforce": "Cerca in Salesforce", "searchResults": "Risultati ricerca({{count}})", - "searchResultsDetailsError": "Qualcosa non ha funzionato nella ricezione dei dati del proprietario.", - "searchResultsError": "Qualcosa non ha funzionato nella ricezione dei dati.", + "searchResultsDetailsError": "Qualcosa è andato storto nella ricezione dei dati del proprietario.", + "searchResultsError": "Qualcosa è andato storto nella ricezione dei dati.", "searchResultsNotFound": "Nessun risultato.", - "searchResultsTryAgain": "Prova altre parole di ricerca.", - "sendPrivateMessage": "Hai ricevuto un messaggio privato poco fa. Vorresti rispondergli privatamente o vuoi mandare la risposta al gruppo?", + "searchResultsTryAgain": "Prova a ricercare altre parole.", + "sendPrivateMessage": "Hai ricevuto un messaggio privato poco fa. Vorresti rispondergli privatamente o vuoi inviare la risposta al gruppo?", "sendPrivateMessageCancel": "Invia al gruppo", "sendPrivateMessageOk": "Invia privatamente", - "sendPrivateMessageTitle": "Invio privatamente?", + "sendPrivateMessageTitle": "Inviare privatamente?", "serviceUnavailable": "Servizio non disponibile", "sessTerminated": "Chiamata terminata", - "sessionRestarted": "Chiamata riavviata automaticamente", - "shareAudio": "Continue", + "sessTerminatedReason": "La chiamata è stata terminata", + "sessionRestarted": "Chiamata riavviata per un problema di rete", + "shareAudio": "Continua", + "shareAudioAltText": "per condividere il contenuto desiderato, vai verso \"Finestra del browser\", seleziona il contenuto, spunta \"condividi audio\" e clicca il pulsante \"condividi\"", "shareAudioTitle": "Come condividere l'audio", "shareAudioWarningD1": "devi fermare la condivisione dello schermo, per condividere l'audio.", "shareAudioWarningD2": "devi riavviare la condivisione schermo e spuntare l'opzione \"condividi audio\".", "shareAudioWarningH1": "Se vuoi condividere solo l'audio:", - "shareAudioWarningTitle": "Ferma la condivisione dello schermo, per condividere l'audio", + "shareAudioWarningTitle": "Ferma la condivisione dello schermo prima di condividere l'audio", "shareMediaWarningGenericH2": "Se vuoi condividere il tuo schermo e l'audio", - "shareScreenWarningD1": "devi fermare la condivisione audio, per condividere lo schermo.", - "shareScreenWarningD2": "devi fermare la condivisione audio, avvia la condivisione dello schermo e spunta \"condividi audio\" option.", + "shareScreenWarningD1": "devi fermare la condivisione audio prima di condividere lo schermo.", + "shareScreenWarningD2": "devi fermare la condivisione audio, avviare la condivisione dello schermo e spuntare l'opzione \"condividi audio\".", "shareScreenWarningH1": "Se vuoi condividere solo lo schermo:", - "shareScreenWarningTitle": "Ferma la condivisione audio, per condividere lo schermo", - "shareVideoLinkError": "Fornire un link corretto.", + "shareScreenWarningTitle": "Ferma la condivisione audio prima di condividere lo schermo", + "shareVideoConfirmPlay": "Stai per aprire un sito esterno. Vuoi continuare?", + "shareVideoConfirmPlayTitle": "{{name}} ha condiviso un video con te.", + "shareVideoLinkError": "Ops, il video non può essere riprodotto.", + "shareVideoLinkStopped": "Il video da {{name}} è stato interrotto.", "shareVideoTitle": "Condividi un video", "shareYourScreen": "Condividi schermo", "shareYourScreenDisabled": "Condivisione schermo disabilitata.", - "sharedVideoDialogError": "Errore: URL non valido", - "sharedVideoLinkPlaceholder": "Link YouTube o link diretto, al video", + "sharedVideoDialogError": "Errore: URL non valido o proibito", + "sharedVideoLinkPlaceholder": "Link YouTube o link diretto al video", "show": "Mostra", "start": "Avvia ", - "startLiveStreaming": "Avvia diretta streaming", - "startRecording": "Inizia a registrare", + "startLiveStreaming": "Avvia diretta", + "startRecording": "Avvia registrazione", "startRemoteControlErrorMessage": "Si è verificato un errore nel tentativo di avviare la sessione di controllo remoto!", - "stopLiveStreaming": "Ferma la diretta streaming", + "stopLiveStreaming": "Ferma la diretta", "stopRecording": "Ferma registrazione", - "stopRecordingWarning": "Sei sicuro di voler interrompere la registrazione?", - "stopStreamingWarning": "Sei sicuro di voler interrompere la diretta?", - "streamKey": "Chiave per trasmissione in diretta", + "stopRecordingWarning": "Vuoi interrompere la registrazione?", + "stopStreamingWarning": "Vuoi interrompere la diretta?", + "streamKey": "Chiave della diretta", "thankYou": "Grazie per aver usato {{appName}}!", "token": "token", - "tokenAuthFailed": "Ci dispiace ma non sei autorizzato a partecipare a questa chiamata.", + "tokenAuthFailed": "Non sei autorizzato a partecipare a questa chiamata.", + "tokenAuthFailedReason": { + "audInvalid": "Valore `aud` non valido. Dovrebbe essere `jitsi`.", + "contextNotFound": "Oggetto `context` non trovato nel payload.", + "expInvalid": "Valore `exp` non valido.", + "featureInvalid": "Funzionalità non valida: {{feature}}, probabilmente non è stata ancora implementata.", + "featureValueInvalid": "Valore funzionalità non valido: {{feature}}.", + "featuresNotFound": "Oggetto `features` non trovato nel payload.", + "headerNotFound": "Header non trovato.", + "issInvalid": "Valore `iss` non valido. Dovrebbe essere `chat`.", + "kidMismatch": "Chiave ID (kid) non corrisponde al sub.", + "kidNotFound": "Chiave ID (kid) assente.", + "nbfFuture": "Il valore `nbf` è nel futuro.", + "nbfInvalid": "Valore `nbf` non valido.", + "payloadNotFound": "Payload non trovato.", + "tokenExpired": "Il token è scaduto." + }, "tokenAuthFailedTitle": "Autenticazione fallita", + "tokenAuthFailedWithReasons": "Non sei autorizzato a partecipare a questa chiamata. Possibile motivo: {{reason}}", + "tokenAuthUnsupported": "Il token URL non è supportato.", "transcribing": "Trascrizione in corso", - "unlockRoom": "Togli la $t(lockRoomPassword) alla riunione", + "unlockRoom": "Rimuovi la $t(lockRoomPassword) alla riunione", "user": "Utente", "userIdentifier": "Identificatore utente", "userPassword": "Password utente", + "verifyParticipantConfirm": "Corrispondono", + "verifyParticipantDismiss": "Non corrispondono", + "verifyParticipantQuestion": "SPERIMENTALE: Chiedi ai partecipanti {{participantName}} se vedono lo stesso contenuto, nello stesso ordine.", + "verifyParticipantTitle": "Verifica utente", "videoLink": "Collegamento video", "viewUpgradeOptions": "Vedi le opzioni premium", - "viewUpgradeOptionsContent": "Per aver accesso illimitato alle funzionalità premium come la registrazione, trascrizione, lo Streaming RTMP & altri, devi passare ad un abbonamento diverso.", + "viewUpgradeOptionsContent": "Per aver accesso illimitato alle funzionalità premium come registrazione, trascrizione, Streaming RTMP e altri, è necessario cambiare piano di abbonamento.", "viewUpgradeOptionsTitle": "Hai scoperto una funzione premium!", + "whiteboardLimitContent": "Il limite di utenti contemporanei della lavagna è stato raggiunto.", + "whiteboardLimitReference": "Per maggiori informazioni visita", + "whiteboardLimitReferenceUrl": "il nostro sito", + "whiteboardLimitTitle": "L'uso della lavagna è stato limitato", "yourEntireScreen": "Schermo intero" }, "documentSharing": { "title": "Documento condiviso" }, "e2ee": { - "labelToolTip": "Le comunicazioni audio e video di questa chiamata, sono crittografate dall'origine alla destinazione" + "labelToolTip": "Le comunicazioni audio e video di questa chiamata usano la crittografia End-to-End" }, "embedMeeting": { "title": "Incorpora questa riunione" }, "feedback": { + "accessibilityLabel": { + "yourChoice": "La tua scelta: {{rating}}" + }, "average": "Media", "bad": "Scadente", "detailsLabel": "Dicci qualcosa di più in proposito.", @@ -433,61 +563,83 @@ "veryBad": "Pessima", "veryGood": "Ottima" }, + "fileSharing": { + "downloadFailedDescription": "Si prega di riprovare.", + "downloadFailedTitle": "Download non riuscito", + "downloadFile": "Download", + "downloadStarted": "Download del file iniziato", + "dragAndDrop": "Trascina e rilascia i file qui o da qualsiasi altra parte nella schermata", + "fileAlreadyUploaded": "Questo file è già stato caricato nella riunione.", + "fileTooLargeDescription": "Assicurati che il file non superi {{ maxFileSize }}.", + "fileTooLargeTitle": "Il file selezionato è troppo grande", + "fileUploadProgress": "Caricamento del file in corso", + "fileUploadedSuccessfully": "Il file è stato caricato con successo", + "removeFile": "Rimuovi", + "removeFileSuccess": "File rimosso con successo", + "uploadFailedDescription": "Si prega di riprovare.", + "uploadFailedTitle": "Caricamento non riuscito", + "uploadFile": "Condividi file" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Miniatura video" + } + }, "giphy": { - "noResults": "Trovato niente :(", + "noResults": "Nessun risultato :(", "search": "Cerca in GIPHY" }, - "helpView": { - "title": "Aiuto" - }, "incomingCall": { "answer": "Rispondi", "audioCallTitle": "Chiamata in arrivo", - "decline": "Chiudi", + "decline": "Respingi", "productLabel": "da Jitsi Meet", "videoCallTitle": "Videochiamata in arrivo" }, "info": { "accessibilityLabel": "Mostra informazioni", "addPassword": "Aggiungi $t(lockRoomPassword)", - "cancelPassword": "Togli $t(lockRoomPassword)", + "cancelPassword": "Rimuovi $t(lockRoomPassword)", "conferenceURL": "Collegamento:", "copyNumber": "Copia numero", "country": "Paese", - "dialANumber": "Per collegarti telefonicamente al meeting, chiama uno di questi numeri e metti il pin.", + "dialANumber": "Per collegarti telefonicamente alla riunione, chiama uno di questi numeri e digita il pin.", "dialInConferenceID": "PIN:", - "dialInNotSupported": "Spiacenti, la partecipazione solo telefonica non è supportata attualmente", + "dialInNotSupported": "Siamo spiacenti, la partecipazione telefonica non è supportata al momento", "dialInNumber": "Componi:", - "dialInSummaryError": "Errore nella ricerca dei numeri telefonici. Riprova più tardi.", + "dialInSummaryError": "Errore nella ricerca dei numeri telefonici. Si prega di riprovare più tardi.", "dialInTollFree": "Numero verde", "genericError": "Ops, qualcosa è andato storto.", - "inviteLiveStream": "Per vedere la diretta di questa riunione, fai click su questo link: {{url}}", - "invitePhone": "Per seguire solo telefonicamente, fai click: {{number}},,{{conferenceID}}#", - "invitePhoneAlternatives": "Cerchi un numero diverso da chiamare?\nEcco dei numeri telefonici per collegarsi alle riunioni: {{url}}\n\n\nSe entri in riunione anche col computer, entra senza attivare l'audio: {{silentUrl}}", - "inviteSipEndpoint": "Per entrare con un indirizzo SIP, immettere questo: {{sipUri}}", - "inviteTextiOSInviteUrl": "Clicca il link seguente, per entrare in riunione: {{inviteUrl}}.", + "inviteLiveStream": "Per vedere la diretta di questa riunione, clicca su questo link: {{url}}", + "invitePhone": "Per seguire telefonicamente, premi: {{number}},,{{conferenceID}}#", + "invitePhoneAlternatives": "Cerchi un numero diverso da chiamare?\nEcco dei numeri telefonici per collegarsi alla riunione: {{url}}\n\n\nSe chiami da un telefono fisso, entra senza attivare l'audio: {{silentUrl}}", + "inviteSipEndpoint": "Per entrare con l'indirizzo SIP, inserisci questo: {{sipUri}}", + "inviteTextiOSInviteUrl": "Clicca il seguente link per entrare nella riunione: {{inviteUrl}}.", "inviteTextiOSJoinSilent": "Se stai chiamando da un telefono fisso, usa questo link per entrare in riunione senz'audio: {{silentUrl}}.", "inviteTextiOSPersonal": "{{name}} ti sta invitando ad una riunione.", "inviteTextiOSPhone": "Per entrare in riunione con un telefono, usa questo numero: {{number}},,{{conferenceID}}#. Se cerchi altri numeri, questa è la lista completa: {{didUrl}}.", - "inviteURLFirstPartGeneral": "Invito a connettersi ad una riunione.", + "inviteURLFirstPartGeneral": "Sei stato invitato ad una riunione.", "inviteURLFirstPartPersonal": "{{name}} ti sta invitando ad una riunione.\n", "inviteURLSecondPart": "\nPartecipa alla riunione:\n{{url}}\n", - "label": "Informazioni riunione", - "liveStreamURL": "Trasmissione in diretta:", + "label": "Informazioni chiamata", + "liveStreamURL": "Diretta:", "moreNumbers": "Più numeri", "noNumbers": "Nessun numero da chiamare.", "noPassword": "Nessuna", - "noRoom": "Non è stata specificata nessuna riunione da chiamare.", + "noRoom": "Non è stata specificata nessuna stanza da chiamare.", + "noWhiteboard": "Impossibile caricare la lavagna", "numbers": "Numeri da chiamare", "password": "$t(lockRoomPasswordUppercase):", - "reachedLimit": "Hai raggiunto il limite dell'offerta.", + "reachedLimit": "Hai raggiunto il limite del tuo piano.", "sip": "Indirizzo SIP", + "sipAudioOnly": "Indirizzo SIP solo audio", "title": "Condividi", "tooltip": "Invia il collegamento e i numeri telefonici di questa riunione", - "upgradeOptions": "Controlla le possibilità d'estensione dell'offerta" + "upgradeOptions": "Controlla le possibilità di aggiornamento del piano di abbonamento", + "whiteboardError": "Errore di caricamento della lavagna. Si prega di riprovare più tardi." }, "inlineDialogFailure": { - "msg": "Un piccolo inconveniente.", + "msg": "C'è stato un piccolo inconveniente.", "retry": "Prova ancora", "support": "Supporto", "supportMsg": "Se succede ancora contatta" @@ -495,28 +647,28 @@ "inviteDialog": { "alertText": "Errore nell'invitare alcuni partecipanti.", "header": "Invita", - "searchCallOnlyPlaceholder": "Inserisci numero di telefono", + "searchCallOnlyPlaceholder": "Inserisci il numero di telefono", "searchPeopleOnlyPlaceholder": "Cerca partecipanti", "searchPlaceholder": "Partecipante o numero di telefono", "send": "Invia" }, "jitsiHome": "{{logo}} Logo, collega alla Homepage", "keyboardShortcuts": { - "focusLocal": "Sposta il focus sul tuo video", - "focusRemote": "Sposta il focus sul video di un altro partecipante", + "focusLocal": "Metti in evidenza il tuo video", + "focusRemote": "Metti in evidenza il video di un altro partecipante", "fullScreen": "Attiva o disattiva schermo intero", - "giphyMenu": "Mostra menù GIPHY", + "giphyMenu": "Mostra menu GIPHY", "keyboardShortcuts": "Scorciatoie da tastiera", "localRecording": "Mostra o nascondi i controlli per la registrazione", "mute": "Attiva o disattiva il microfono", "pushToTalk": "Premi per parlare", "raiseHand": "Alza o abbassa la mano", - "showSpeakerStats": "Mostra statistiche", - "toggleChat": "Apri o chiudi la conversazione", - "toggleFilmstrip": "Mostra o nascondi miniature video", - "toggleParticipantsPane": "Mostra o nascondi i partecipanti", - "toggleScreensharing": "Cambia modalità tra videocamera e condivisione schermo", - "toggleShortcuts": "Mostra o nascondi le scorciatoie", + "showSpeakerStats": "Mostra le statistiche dei partecipanti", + "toggleChat": "Apri o chiudi la chat", + "toggleFilmstrip": "Mostra o nascondi le miniature video", + "toggleParticipantsPane": "Mostra o nascondi il pannello dei partecipanti", + "toggleScreensharing": "Scambia videocamera e condivisione dello schermo", + "toggleShortcuts": "Mostra o nascondi le scorciatoie da tastiera", "videoMute": "Accendi o spegni la videocamera" }, "largeVideo": { @@ -524,76 +676,76 @@ "showMeWhatImSharing": "Mostrami cosa sto condividendo" }, "liveStreaming": { - "busy": "Stiamo cercando di liberare risorse per la diretta. Riprova tra qualche minuto.", + "busy": "Stiamo cercando di liberare risorse per la diretta. Si prega di riprovare tra qualche minuto.", "busyTitle": "Tutti gli streamer sono impegnati al momento", "changeSignIn": "Cambia account", - "choose": "Scegli una trasmissione in diretta", - "chooseCTA": "Scegli un'opzione di trasmissione. Attualmente sei collegato come {{email}}.", - "enterStreamKey": "Inserisci qui la tua chiave YouTube per le trasmissioni in diretta.", + "choose": "Scegli una diretta", + "chooseCTA": "Scegli un'opzione di trasmissione. Attualmente hai effettuato l'accesso come {{email}}.", + "enterStreamKey": "Inserisci qui la tua chiave della diretta su YouTube.", "error": "Diretta fallita. Prova di nuovo.", - "errorAPI": "Si è verificato un errore durante l'accesso alle tue trasmissioni YouTube. Prova a effettuare nuovamente il login.", - "errorLiveStreamNotEnabled": "La diretta non è attivata su {{email}}. Per favore abilita la diretta o effettua l'accesso con un account abilitato alle dirette.", + "errorAPI": "Si è verificato un errore durante l'accesso alle tue trasmissioni su YouTube. Prova a effettuare nuovamente l'accesso.", + "errorLiveStreamNotEnabled": "La diretta non è attiva su {{email}}. Per favore attiva la diretta o effettua l'accesso con account che ha una diretta attiva.", "expandedOff": "La diretta è stata interrotta", "expandedOn": "La riunione è attualmente in diretta su YouTube.", - "expandedPending": "La diretta è in fase di avvio...", - "failedToStart": "Avvio trasmissione in diretta fallito", - "getStreamKeyManually": "Non siamo stati in grado di trovare nessuna trasmissione dal vivo. Prova ad ottenere una chiave stream da YouTube", - "googlePrivacyPolicy": "Norme sulla riservatezza di Google", - "inProgress": "Diretta o registrazione in corso", - "invalidStreamKey": "La chiave per le dirette potrebbe non essere corretta.", - "limitNotificationDescriptionNative": "La tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate, prova {{app}}.", - "limitNotificationDescriptionWeb": "Data l'alta domanda la tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate, prova {{app}}.", + "expandedPending": "La diretta è in fase di avvio…", + "failedToStart": "Avvio diretta fallito", + "getStreamKeyManually": "Non è stata trovata nessuna diretta. Prova ad ottenere la chiave della tua diretta da YouTube.", + "googlePrivacyPolicy": "Politiche sulla privacy di Google", + "inProgress": "Registrazione o diretta in corso", + "invalidStreamKey": "La chiave della diretta potrebbe non essere corretta.", + "limitNotificationDescriptionNative": "La tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate prova {{app}}.", + "limitNotificationDescriptionWeb": "Data la grossa domanda la tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate, prova {{app}}.", "off": "La diretta si è interrotta", "offBy": "{{name}} ha fermato la diretta", - "on": "Trasmissione in diretta", + "on": "Diretta avviata", "onBy": "{{name}} ha iniziato la diretta", - "pending": "Avvio diretta...", + "pending": "Avvio diretta…", + "policyError": "Hai provato ad avviare una diretta streaming troppo velocemente. Si prega di riprovare più tardi!", "serviceName": "Servizio dirette", - "sessionAlreadyActive": "Questa sessione è in già in fase di registrazione o trasmessione in diretta.", - "signIn": "Collegati con Google", - "signInCTA": "Collegati o inserisci la tua chiave YouTube per la trasmissione in diretta.", - "signOut": "Scollegati", - "signedInAs": "Sei attualmente collegato come:", - "start": "Inizia una diretta", + "sessionAlreadyActive": "Questa sessione è in già in fase di registrazione o trasmissione in diretta.", + "signIn": "Accedi con Google", + "signInCTA": "Accedi o inserisci la tua chiave della diretta su YouTube.", + "signOut": "Disconnetti", + "signedInAs": "Hai effettuato l'accesso come:", + "start": "Avvia una diretta", "streamIdHelp": "Cos'è questo?", "title": "Diretta", "unavailableTitle": "La diretta non è disponibile", - "youtubeTerms": "Condizioni di utilizzo di YouTube" + "youtubeTerms": "Termini di servizio di YouTube" }, "lobby": { - "allow": "Autorizza", - "backToKnockModeButton": "Nessuna password, richiedi l'accesso", - "chat": "Conversazione", + "backToKnockModeButton": "Richiedi l'accesso", + "chat": "Chat", "dialogTitle": "Sala d'attesa", "disableDialogContent": "Sala d'attesa attiva. Questa funzione ti permette di non dare accesso alla riunione a partecipanti indesiderati. Vuoi disattivarla?", "disableDialogSubmit": "Disattiva", "emailField": "Inserisci il tuo indirizzo email", "enableDialogPasswordField": "Imposta password (opzionale)", "enableDialogSubmit": "Attiva", - "enableDialogText": "La sala d'attesa ti permette di proteggere la riunione concedendo l'ingresso solo alle persone autorizzate da un moderatore.", + "enableDialogText": "La sala d'attesa ti permette di proteggere la riunione concedendo l'accesso solo alle persone autorizzate da un organizzatore.", "enterPasswordButton": "Inserisci password riunione", "enterPasswordTitle": "Inserisci la password per entrare nella riunione", - "errorMissingPassword": "Per favore, mettere la password della riunione", + "errorMissingPassword": "Inserisci la password della riunione", "invalidPassword": "Password errata", - "joinRejectedMessage": "La tua richiesta d'accesso è stata respinta da un moderatore.", - "joinRejectedTitle": "Richiesta d'ingresso respinta.", + "joinRejectedMessage": "La tua richiesta d'accesso è stata respinta da un organizzatore.", + "joinRejectedTitle": "Richiesta d'accesso respinta.", "joinTitle": "Entra nella riunione", - "joinWithPasswordMessage": "Ho inviato la password per entrare, attendi...", - "joiningMessage": "Entrerai nella riunione non appena qualcuno approva la tua richiesta", - "joiningTitle": "Richiesta inviata...", - "joiningWithPasswordTitle": "Accesso con password...", - "knockButton": "Chiedi d'entrare", + "joinWithPasswordMessage": "Tentativo di accesso con password in corso, si prega di attendere…", + "joiningMessage": "Entrerai nella riunione appena qualcuno approverà la tua richiesta", + "joiningTitle": "Richiesta di accesso inviata…", + "joiningWithPasswordTitle": "Accesso con password…", + "knockButton": "Chiedi di entrare", "knockTitle": "Qualcuno vuole entrare nella riunione", "knockingParticipantList": "Lista dei partecipanti in attesa", "lobbyChatStartedNotification": "{{moderator}} sta parlando con {{attendee}} in sala d'attesa", "lobbyChatStartedTitle": "{{moderator}} sta parlando con te in sala d'attesa.", + "lobbyClosed": "La sala d'attesa è stata chiusa.", "nameField": "Scrivi il tuo nome", "notificationLobbyAccessDenied": "{{targetParticipantName}} è stato respinto da {{originParticipantName}}", "notificationLobbyAccessGranted": "{{targetParticipantName}} è stato autorizzato ad entrare da {{originParticipantName}}", - "notificationLobbyDisabled": "{{originParticipantName}} ha aggiunto la sala d'attesa alla riunione", - "notificationLobbyEnabled": "{{originParticipantName}} ha tolto la sala d'attesa alla riunione", + "notificationLobbyDisabled": "{{originParticipantName}} ha disabilitato la sala d'attesa", + "notificationLobbyEnabled": "{{originParticipantName}} ha attivato la sala d'attesa", "notificationTitle": "Sala d'attesa", - "passwordField": "Inserisci la password della riunione", "passwordJoinButton": "Entra", "title": "Sala d'attesa", "toggleLabel": "Attiva sala d'attesa" @@ -604,28 +756,30 @@ "on": "Acceso", "unknown": "Sconosciuto" }, - "dialogTitle": "Controlli di registrazione locale", + "dialogTitle": "Controlli della registrazione", "duration": "Durata", "durationNA": "N/D", "encoding": "Codifica", "label": "LOR", - "labelToolTip": "Registrazione locale avviata", - "localRecording": "Registrazione locale", - "me": "io", + "labelToolTip": "Registrazione avviata", + "localRecording": "Registrazione", + "me": "Io", "messages": { - "engaged": "Registrazione locale avviata.", - "finished": "La registrazione della sessione {{token}} è terminata. Invia il file della registrazione al moderatore.", - "finishedModerator": "La registrazione della sessione {{token}} è terminata. Il registrazione della traccia è stata salvata. Richiedere ai partecipanti di inviare le loro registrazioni.", - "notModerator": "Non sei un moderatore. Non puoi avviare o interrompere la registrazione" + "engaged": "Registrazione avviata.", + "finished": "La registrazione della sessione {{token}} è terminata. Invia il file della registrazione all'organizzatore.", + "finishedModerator": "La registrazione della sessione {{token}} è terminata. La registrazione della traccia è stata salvata. Chiedi ai partecipanti di inviare le loro registrazioni.", + "notModerator": "Non sei un relatore. Non puoi avviare o interrompere la registrazione." }, - "moderator": "Moderatore", + "moderator": "Relatore", "no": "No", "participant": "Partecipante", - "participantStats": "Statistiche partecipanti", - "selectTabTitle": "🎥 Seleziona questa linguetta per registrare", + "participantStats": "Statistiche partecipante", + "selectTabTitle": "🎥 Seleziona questa scheda per registrare", "sessionToken": "Token della sessione", - "start": "Avvia Registrazione", + "start": "Avvia registrazione", "stop": "Ferma registrazione", + "stopping": "Arresto della registrazione in corso", + "wait": "Attendi durante il salvataggio della tua registrazione", "yes": "Sì" }, "lockRoomPassword": "password", @@ -637,137 +791,188 @@ "me": "io", "notify": { "OldElectronAPPTitle": "Falla di sicurezza!", - "allowAction": "Autorizza", - "allowedUnmute": "Puoi accendere il microfono, avviare la videocamera, o condividere il tuo schermo.", - "audioUnmuteBlockedDescription": "Lo sblocco dei microfoni è stato temporaneamente bloccato per limiti del sistema.", - "audioUnmuteBlockedTitle": "Riattivazione dei microfoni bloccata!", - "chatMessages": "Messaggi delle conversazioni", - "connectedOneMember": "{{name}} è entrato in riunione", - "connectedThreePlusMembers": "{{name}} e altri {{count}} sono entrati in riunione", - "connectedTwoMembers": "{{first}} e {{second}} sono entrati in riunione", + "allowAll": "Consenti tutto", + "allowAudio": "Consenti l'audio", + "allowDesktop": "Consenti la condivisione dello schermo", + "allowVideo": "Consenti il video", + "allowedUnmute": "Puoi accendere il microfono, avviare la videocamera o condividere il tuo schermo.", + "audioUnmuteBlockedDescription": "L'accensione dei microfoni è stata temporaneamente bloccata per i limiti del sistema.", + "audioUnmuteBlockedTitle": "Accensione dei microfoni bloccata!", + "chatMessages": "Messaggi delle chat", + "connectedOneMember": "{{name}} è entrato nella riunione", + "connectedThreePlusMembers": "{{name}} e altri {{count}} sono entrati nella riunione", + "connectedTwoMembers": "{{first}} e {{second}} sono entrati nella riunione", + "connectionFailed": "Connessione non riuscita. Si prega di riprovare più tardi!", + "dataChannelClosed": "La qualità video potrebbe essere scarsa", + "dataChannelClosedDescription": "Il canale bridge è inattivo, quindi la qualità video potrebbe essere limitata all'impostazione più bassa.", + "dataChannelClosedDescriptionWithAudio": "Il canale bridge è inattivo, quindi potrebbero esserci interruzioni di audio e video", + "dataChannelClosedWithAudio": "La qualità audio e video potrebbe essere scarsa", + "desktopMutedRemotelyTitle": "La tua condivisione dello schermo è stata interrotta da {{participantDisplayName}}", + "disabledIframe": "L'incorporamento serve solo come dimostrazione, quindi questa chiamata si disconnetterà tra {{timeout}} minuti.", + "disabledIframeSecondaryNative": "L'incorporamento {{domain}} serve solo come dimostrazione, quindi questa chiamata si disconnetterà tra {{timeout}} minuti.", + "disabledIframeSecondaryWeb": "L'incorporamento {{domain}} serve solo come dimostrazione, quindi questa chiamata si disconnetterà tra {{timeout}} minuti. Si prega di usare Jitsi as a Service per la produzione di riunioni incorporate!", "disconnected": "disconnesso", "displayNotifications": "Mostra le notifiche per", - "focus": "Focus su riunione", - "focusFail": "{{component}} non disponibile - riprovo tra {{ms}} sec", + "dontRemindMe": "Non chiederlo più", + "focus": "Evidenza riunione", + "focusFail": "{{component}} non disponibile - nuovo tentativo tra {{ms}} sec", "gifsMenu": "GIPHY", "groupTitle": "Notifiche", - "hostAskedUnmute": "Il moderatore ti chiede di accendere il microfono", + "hostAskedUnmute": "Il relatore ti chiede di intervenire.", + "invalidTenant": "Nome non valido", + "invalidTenantHyphenDescription": "Il nome che hai scelto non è valido (inizia o finisce con '-').", + "invalidTenantLengthDescription": "Il nome che hai scelto è troppo lungo.", "invitedOneMember": "{{displayName}} è stato invitato", - "invitedThreePlusMembers": "Hai invitato {{name}} e altri {{count}}", - "invitedTwoMembers": "Hai invitato {{first}} e {{second}}", + "invitedThreePlusMembers": "{{name}} e altri {{count}} sono stati invitati", + "invitedTwoMembers": "{{first}} e {{second}} sono stati invitati", + "joinMeeting": "Entra", "kickParticipant": "{{kicked}} è stato espulso da {{kicker}}", "leftOneMember": "{{name}} ha lasciato la riunione", "leftThreePlusMembers": "{{name}} e molti altri hanno lasciato la riunione", "leftTwoMembers": "{{first}} e {{second}} hanno lasciato la riunione", "linkToSalesforce": "Collega a Salesforce", "linkToSalesforceDescription": "Puoi collegare il sommario della riunione ad un oggetto Salesforce.", - "linkToSalesforceError": "Failed to link meeting to Salesforce", - "linkToSalesforceKey": "Link this meeting", - "linkToSalesforceProgress": "Linking meeting to Salesforce...", - "linkToSalesforceSuccess": "The meeting was linked to Salesforce", - "localRecordingStarted": "{{name}} ha cominciato a registrare.", + "linkToSalesforceError": "Collegamento della riunione a Salesforce fallito.", + "linkToSalesforceKey": "Collega questa riunione", + "linkToSalesforceProgress": "Collegamento della riunione a Salesforce in corso…", + "linkToSalesforceSuccess": "Questa riunione è stata collegata a Salesforce", + "localRecordingStarted": "{{name}} ha iniziato a registrare.", "localRecordingStopped": "{{name}} ha smesso di registrare.", "me": "Io", - "moderationInEffectCSDescription": "Alza la mano, se vuoi condividere lo schermo, per favore.", - "moderationInEffectCSTitle": "La condivisione schermo è stata bloccata dal moderatore", - "moderationInEffectDescription": "Alza la mano, se vuoi prender la parola, per favore.", - "moderationInEffectTitle": "Il tuo microfono è stato spento dal moderatore", - "moderationInEffectVideoDescription": "Alza la mano, se vuoi avviare la tua videocamera, per favore.", - "moderationInEffectVideoTitle": "La tua videocamera è stata spenta dal moderatore", - "moderationRequestFromModerator": "Il moderatore vorrebbe che tu accendessi il microfono", + "moderationInEffectCSDescription": "Alza la mano, se vuoi condividere lo schermo.", + "moderationInEffectCSTitle": "La condivisione schermo è stata bloccata dal relatore", + "moderationInEffectDescription": "Alza la mano, se vuoi prendere la parola.", + "moderationInEffectTitle": "Il tuo microfono è stato spento dal relatore", + "moderationInEffectVideoDescription": "Alza la mano, se vuoi avviare la tua videocamera.", + "moderationInEffectVideoTitle": "La tua videocamera è stata spenta dal relatore", + "moderationRequestFromModerator": "Il relatore vorrebbe che tu accendessi il microfono", "moderationRequestFromParticipant": "Vuole parlare", "moderationStartedTitle": "Moderazione in corso", "moderationStoppedTitle": "Moderazione interrotta", "moderationToggleDescription": "da {{participantDisplayName}}", - "moderator": "Impostati i permessi di moderatore!", - "muted": "Hai iniziato la conversazione con audio disattivato.", - "mutedRemotelyDescription": "Puoi sempre attivare il microfono, quando vuoi parlare. Spegni il microfono quando hai finito, per non introdurre rumori di fondo nella riunione.", + "moderator": "Ora sei un relatore!", + "muted": "Hai iniziato la conversazione con il microfono disattivato.", + "mutedRemotelyDescription": "Puoi sempre attivare il microfono quando vuoi parlare. Spegni il microfono quando hai finito, per evitare rumori di fondo nella riunione.", "mutedRemotelyTitle": "{{participantDisplayName}} ti ha spento il microfono", - "mutedTitle": "Hai audio disattivato!", - "newDeviceAction": "OK, usala", - "newDeviceAudioTitle": "Trovata nuova origine audio", - "newDeviceCameraTitle": "Trovata nuova videocamera", - "noiseSuppressionDesktopAudioDescription": "La riduzione del rumore non è attivabile insieme alla condivisione dell'audio, disabilitala e riprova.", - "noiseSuppressionFailedTitle": "Riduzione del rumore non avviata", - "noiseSuppressionNoTrackDescription": "Prima, attiva il microfono, per favore.", - "noiseSuppressionStereoDescription": "La riduzione stereo del rumore non è supportata al momento.", - "oldElectronClientDescription1": "Sembri stare usando una versione obsoleta del client Jitsi Meet che ha dei problemi di sicurezza noti. Assicurati di aggiornarla presso il nostro ", - "oldElectronClientDescription2": "ultima build", + "mutedTitle": "Hai il microfono disattivato!", + "newDeviceAction": "Usala", + "newDeviceAudioTitle": "Rilevata una nuova sorgente audio", + "newDeviceCameraTitle": "Rilevata una nuova videocamera", + "nextToSpeak": "Sei il prossimo a dover parlare", + "noiseSuppressionDesktopAudioDescription": "La cancellazione del rumore non può essere attivata durante la condivisione dell'audio del desktop, disabilitala e riprova.", + "noiseSuppressionFailedTitle": "Avvio della cancellazione del rumore non riuscito", + "noiseSuppressionStereoDescription": "La cancellazione del rumore con l'audio stereo non è attualmente supportata.", + "oldElectronClientDescription1": "Sembra che tu stia usando una versione obsoleta del client Jitsi Meet, che ha vulnerabilità note. Assicurati di aggiornarlo alla nostra ", + "oldElectronClientDescription2": "ultima versione", "oldElectronClientDescription3": " ora!", + "openChat": "Apri chat", "participantWantsToJoin": "Vuole unirsi alla riunione", "participantsWantToJoin": "Vogliono unirsi alla riunione", - "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) è stata tolta da un altro partecipante", - "passwordSetRemotely": "$t(lockRoomPasswordUppercase) è stata messa da un altro partecipante", + "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) è stata rimossa da un altro partecipante", + "passwordSetRemotely": "$t(lockRoomPasswordUppercase) è stata impostata da un altro partecipante", "raiseHandAction": "Alza la mano", "raisedHand": "Vorrebbe intervenire.", - "raisedHands": "{{participantName}} e {{raisedHands}} altre persone", + "raisedHands": "{{participantName}} e altre {{raisedHands}} persone", "reactionSounds": "Disattiva suoni", "reactionSoundsForAll": "Disattiva suoni a tutti", - "screenShareNoAudio": "L'opzione di condivisione audio non era selezionata nella schermata di selezione della finestra da condividere.", - "screenShareNoAudioTitle": "Condividi audio non è stato selezionato", - "selfViewTitle": "Puoi sempre ripristinare la tua immagine nelle impostazioni", + "screenShareNoAudio": "L'opzione di condivisione audio non era selezionata nella schermata di selezione della finestra.", + "screenShareNoAudioTitle": "Impossibile condividere l'audio!", + "screenSharingAudioOnlyDescription": "Condividendo lo schermo si influisce sulla modalità “Migliori prestazioni” e si utilizza una maggiore larghezza di banda.", + "screenSharingAudioOnlyTitle": "Modalità \"Migliori prestazioni\"", + "selfViewTitle": "Puoi sempre ripristinare il tuo riquadro dalle impostazioni", "somebody": "Qualcuno", - "startSilentDescription": "Entra di nuovo nella riunione, per attivare l'audio", - "startSilentTitle": "Sei entrato nella riunione senza aver scelto un dispositivo audio per sentire!", - "suboptimalBrowserWarning": "Temiamo che la tua esperienza non sarà granché su questo browser. Stiamo cercando di migliorare la situazione ma, per il momento, prova ad utilizzare uno di questi browser supportati.", + "startSilentDescription": "Entra di nuovo nella riunione per attivare l'audio", + "startSilentTitle": "Sei entrato nella riunione senza un dispositivo di uscita audio!", + "suboptimalBrowserWarning": "Temiamo che la tua esperienza non sarà granché su questo browser. Stiamo cercando di migliorare, ma, per il momento, prova ad utilizzare uno di questi browser pienamente supportati.", "suboptimalExperienceTitle": "Avviso sul browser", - "unmute": "Accendi microfono", + "suggestRecordingAction": "Avvia", + "suggestRecordingDescription": "Vuoi avviare la registrazione?", + "suggestRecordingTitle": "Registra questa riunione", + "unmute": "Accendi il microfono", + "unmuteScreen": "Iniziata la condivisione dello schermo", + "unmuteVideo": "Accendi la videocamera", "videoMutedRemotelyDescription": "Puoi riaccenderla in qualsiasi momento.", "videoMutedRemotelyTitle": "{{participantDisplayName}} ti ha spento la videocamera", - "videoUnmuteBlockedDescription": "Riattivazione video e condivisione schermo sono state momentaneamente bloccate per limiti di sistema.", - "videoUnmuteBlockedTitle": "Riattivazione video e condivisione schermo bloccate!", + "videoUnmuteBlockedDescription": "L'accensione della videocamera e la condivisione dello schermo sono state momentaneamente bloccate per i limiti del sistema.", + "videoUnmuteBlockedTitle": "Accensione videocamera e condivisione schermo bloccate!", "viewLobby": "Vedi sala d'attesa", - "waitingParticipants": "{{waitingParticipants}} persone" + "viewParticipants": "Vedi partecipanti", + "viewVisitors": "Vedi spettatori", + "waitingParticipants": "{{waitingParticipants}} persone", + "waitingVisitors": "Spettatori in coda: {{waitingVisitors}}", + "waitingVisitorsTitle": "Questa riunione non è ancora iniziata!", + "whiteboardLimitDescription": "Salva i tuoi progressi, il limite dell'utente sta per essere superato e la lavagna si chiuderà.", + "whiteboardLimitTitle": "Utilizzo lavagna" }, "participantsPane": { "actions": { "admit": "Ammetti", "admitAll": "Ammetti tutti", "allow": "Permetti ai partecipanti di:", - "allowVideo": "Autorizza video", - "askUnmute": "Chiedi di accendere microfono", - "audioModeration": "Riattivare audio", - "blockEveryoneMicCamera": "Blocca audio e video a tutti", + "allowDesktop": "Consenti la condivisione dello schermo", + "allowVideo": "Permetti videocamere", + "askDesktop": "Chiedi di condividere lo schermo", + "askUnmute": "Chiedi di accendere il microfono", + "audioModeration": "Riattivare il microfono", + "blockEveryoneMicCamera": "Blocca microfono e videocamera a tutti", + "breakoutRooms": "Stanze", + "desktopModeration": "Avvia la condivisione dello schermo", + "goLive": "Vai alla diretta", "invite": "Invita partecipanti", + "lowerAllHands": "Abbassa tutte le mani", + "lowerHand": "Abbassa la mano", "moreModerationActions": "Altre opzioni di moderazione", "moreModerationControls": "Altri controlli di moderazione", - "moreParticipantOptions": "Altre opzioni partecipanti", + "moreParticipantOptions": "Altre opzioni partecipante", "mute": "Silenzia", "muteAll": "Silenzia tutti", "muteEveryoneElse": "Silenzia tutti gli altri", "reject": "Respingi", + "stopDesktop": "Interrompi la condivisione dello schermo", + "stopEveryonesDesktop": "Interrompi la condivisione dello schermo agli altri", "stopEveryonesVideo": "Ferma il video di tutti", "stopVideo": "Ferma il video", - "unblockEveryoneMicCamera": "Sblocca audio e video a tutti", - "videoModeration": "Riavviare videocamera" + "unblockEveryoneMicCamera": "Sblocca microfono e videocamera a tutti", + "videoModeration": "Riavviare la videocamera" }, "close": "Chiudi", "headings": { "lobby": "Sala d'attesa ({{count}})", "participantsList": "Partecipanti alla riunione ({{count}})", - "waitingLobby": "In attesa ({{count}})" + "viewerRequests": "Richieste spettatori ({{count}})", + "visitorInQueue": " ({{count}} in attesa)", + "visitorRequests": " ({{count}} richiesta/e)", + "visitors": "Spettatori {{count}}", + "visitorsList": "Spettatori ({{count}})", + "waitingLobby": "({{count}}) in attesa" }, "search": "Cerca partecipanti", + "searchDescription": "Filtra partecipanti", "title": "Partecipanti" }, "passwordDigitsOnly": "Fino a {{number}} cifre", - "passwordSetRemotely": "definita da altro utente", + "passwordSetRemotely": "Impostata da altro utente", + "pinParticipant": "Metti {{participantName}} in evidenza", "pinnedParticipant": "Il partecipante è in evidenza", "polls": { "answer": { + "edit": "Modifica", + "send": "Invia", "skip": "Salta", "submit": "Invia" }, "by": "Da {{ name }}", + "closeButton": "Chiudi sondaggio", "create": { - "addOption": "Aggiungi risposta", - "answerPlaceholder": "Risposta {{index}}", + "addOption": "Aggiungi opzione", + "answerPlaceholder": "Opzione {{index}}", "cancel": "Annulla", "create": "Crea un sondaggio", - "pollOption": "Risposta {{index}} al sondaggio", - "pollQuestion": "Domanda Sondaggio a risposta multipla", - "questionPlaceholder": "Scrivi una domanda", - "removeOption": "Elimina risposta", + "pollOption": "Opzione {{index}} del sondaggio", + "pollQuestion": "Domanda del sondaggio", + "questionPlaceholder": "Fai una domanda", + "removeOption": "Elimina opzione", + "save": "Salva", "send": "Invia" }, "errors": { @@ -779,10 +984,10 @@ }, "results": { "changeVote": "Cambia voto", - "empty": "Non ci sono ancora sondaggi in questa riunione. Crea un sondaggi, da qui!", + "empty": "Non ci sono ancora sondaggi in questa riunione.", "hideDetailedResults": "Nascondi dettagli", "showDetailedResults": "Mostra dettagli", - "vote": "Vota" + "vote": "Voti" } }, "poweredby": "offerto da", @@ -794,80 +999,82 @@ "callMe": "Chiamami", "callMeAtNumber": "Chiamami a questo numero:", "calling": "Chiamata in corso", - "configuringDevices": "Configurazione dispositivi...", + "configuringDevices": "Configurazione dispositivi in corso…", "connectedWithAudioQ": "Sei connesso con l'audio?", "connection": { - "good": "La tua connessione Internet sembra buona!", - "nonOptimal": "La tua connessione Internet non è ottimale", - "poor": "La tua connessione Internet è scarsa" + "failed": "Test di connessione fallito!", + "good": "La tua connessione internet è buona!", + "nonOptimal": "La tua connessione internet non è ottimale", + "poor": "La tua connessione internet è scarsa", + "running": "Test di connessione in corso..." }, "connectionDetails": { - "audioClipping": "Ci aspettiamo che il tuo audio sarà a sighiozzo.", - "audioHighQuality": "Ci aspettiamo che il tuo audio sarà di eccellente qualità.", - "audioLowNoVideo": "Ci aspettiamo una bassa qualità audio e che il video sia assente.", - "goodQuality": "Ottimo! La tue funzioni multimediali andranno alla grande.", - "noMediaConnectivity": "Non siamo riusciti a stabilire una connessione multimediale per fare questo test. Questo è tipicamente causato da un firewall o dal NAT.", - "noVideo": "Ci aspettiamo una pessima qualità video.", - "undetectable": "Se non riesci ancora a fare chiamate nel browser, ti consigliamo di verificare che il microfono e la videocamera siano configurate correttamente, che tu abbia dato al browser i permessi di usare microfono e videocamera e che il tuo browser sia aggiornato all'ultima versione. Se hai ancora problemi, dovresti contattare lo sviluppatore dell'applicazione web.", - "veryPoorConnection": "Ci aspettiamo una qualità della chiamata davvero terribile.", - "videoFreezing": "Ci aspettiamo che il video si blocchi, sparisca, o sia molto pixelato.", - "videoHighQuality": "Ci aspettiamo che il video sia di buona qualità.", - "videoLowQuality": "Ci aspettiamo che il video abbia pochi fotogrammi al secondo e sia a bassa risoluzione.", - "videoTearing": "Ci aspettiamo che il video sia pixelato e abbia deformazioni visive." + "audioClipping": "È probabile che il tuo audio vada a singhiozzo.", + "audioHighQuality": "Il tuo audio dovrebbe essere eccellente.", + "audioLowNoVideo": "È probabile che la tua qualità audio sia bassa e che il video sia assente.", + "goodQuality": "Ottimo! La tua qualità multimediale sarà alta.", + "noMediaConnectivity": "Impossibile stabilire una connessione multimediale per fare questo test. Questo è solitamente causato da un firewall o dal NAT.", + "noVideo": "È probabile che la tua qualità video sia pessima.", + "testFailed": "Il test di connessione ha avuto problemi inaspettati, però questo potrebbe non avere impatti sulla tua esperienza.", + "undetectable": "Se non riesci ancora a fare chiamate nel browser, verifica che il microfono e la videocamera siano configurate correttamente, che tu abbia autorizzato il browser l'utilizzo del microfono e della videocamera e che il tuo browser sia aggiornato all'ultima versione. Se avessi ancora problemi, dovresti contattare lo sviluppatore dell'applicazione web.", + "veryPoorConnection": "È probabile che la tua qualità della chiamata sia terribile.", + "videoFreezing": "È probabile che il tuo video si blocchi, sparisca, o sia molto pixellato.", + "videoHighQuality": "Il tuo video dovrebbe essere di buona qualità.", + "videoLowQuality": "È probabile che il tuo video abbia pochi fotogrammi al secondo e sia a bassa risoluzione.", + "videoTearing": "È probabile che il tuo video sia pixellato o abbia artefatti." }, "copyAndShare": "Copia e condividi il collegamento della riunione", - "dialInMeeting": "Chiama e collegati alla riunione", - "dialInPin": "Chiama e inserisci il PIN per entrare nella riunione:", - "dialing": "Chiamata", + "dialInMeeting": "Chiama per collegarti alla riunione", + "dialInPin": "Chiama per collegarti alla riunione e inserisci il PIN:", + "dialing": "Chiamata in corso", "doNotShow": "Non mostrare più questa finestra", "errorDialOut": "Impossibile fare la chiamata", - "errorDialOutDisconnected": "Impossibile fare la chiamata. Scollegato", + "errorDialOutDisconnected": "Impossibile fare la chiamata. Disconnesso", "errorDialOutFailed": "Impossibile fare la chiamata. Chiamata fallita", - "errorDialOutStatus": "Errore nel ricevere lo stato della rete", - "errorMissingName": "Inserire il proprio nome, per accedere alla riunione", + "errorDialOutStatus": "Errore nel ricevere lo stato della chiamata", + "errorMissingName": "Inserisci il tuo nome per accedere alla riunione", "errorNoPermissions": "Devi autorizzare l'accesso al microfono e alla videocamera", "errorStatusCode": "Errore nella chiamata, codice: {{status}}", "errorValidation": "Numero inesistente", - "iWantToDialIn": "Voglio chiamare il numero", + "iWantToDialIn": "Voglio collegarmi con il telefono", "initiated": "Chiamata avviata", - "joinAudioByPhone": "Collegati usando un telefono, per parlare", + "joinAudioByPhone": "Collegati usando l'audio del telefono", "joinMeeting": "Collegati alla riunione", - "joinMeetingInLowBandwidthMode": "Entra in modalità banda limitata", - "joinWithoutAudio": "Collegati senza poter parlare mai", + "joinMeetingInLowBandwidthMode": "Collegati in modalità larghezza di banda limitata ridotta", + "joinWithoutAudio": "Collegati senza audio", "keyboardShortcuts": "Attiva le scorciatoie da tastiera", "linkCopied": "Collegamento copiato negli appunti", - "lookGood": "Sembra che il tuo microfono funzioni correttamente", + "lookGood": "I tuoi dispositivi funzionano correttamente", "or": "o", "premeeting": "Pre-riunione", + "proceedAnyway": "Procedi comunque", + "recordingWarning": "Gli altri partecipanti potrebbero registrare la riunione", "screenSharingError": "Errore di condivisione dello schermo:", - "showScreen": "Attiva schermata pre-riunione", - "startWithPhone": "Avvia usando il telefono, per parlare", + "startWithPhone": "Avvia usando l'audio del telefono", + "unsafeRoomConsent": "Accetto i rischi, voglio entrare nella riunione.", "videoOnlyError": "Errore video:", "videoTrackError": "Impossibile creare la traccia video.", "viewAllNumbers": "vedi tutti i numeri" }, "presenceStatus": { "busy": "Occupato", - "calling": "Chiamata...", + "calling": "Chiamata in corso…", "connected": "Connesso", - "connecting": "Connessione...", - "connecting2": "Connessione*...", - "disconnected": "Scollegato", + "connecting": "Connessione in corso…", + "connecting2": "Connessione in corso*…", + "disconnected": "Disconnesso", "expired": "Scaduto", "ignored": "Ignorato", - "initializingCall": "Inizializzazione chiamata...", + "initializingCall": "Inizializzazione chiamata in corso…", "invited": "Invitato", "rejected": "Rifiutato", - "ringing": "Sta suonando..." - }, - "privacyView": { - "title": "Privacy" + "ringing": "Sta suonando…" }, "profile": { "avatar": "avatar", - "setDisplayNameLabel": "Crea il tuo nome", + "setDisplayNameLabel": "Nome", "setEmailInput": "Inserisci email", - "setEmailLabel": "Imposta l'email gravatar", + "setEmailLabel": "Email Gravatar", "title": "Profilo" }, "raisedHand": "Vorrebbe parlare", @@ -878,169 +1085,191 @@ }, "type": { "account": "Account", - "contact": "Contact", - "lead": "Lead", - "opportunity": "Opportunity", - "owner": "Owner" + "contact": "Contatto", + "lead": "Conduttore", + "opportunity": "Opportunità", + "owner": "Proprietario" } }, "recording": { "authDropboxText": "Carica su Dropbox", "availableSpace": "Spazio disponibile: {{spaceLeft}} MB (rimangono approssimativamente {{duration}} minuti di registrazione)", "beta": "BETA", - "busy": "Stiamo cercando di liberare risorse per la registrazione. Riprova tra qualche minuto.", + "busy": "Stiamo cercando di liberare risorse per la registrazione. Si prega di riprovare tra qualche minuto.", "busyTitle": "Tutti i registratori sono occupati", "copyLink": "Copia collegamento", - "error": "Registrazione fallita. Prova di nuovo.", + "error": "Registrazione fallita. Si prega di riprovare.", "errorFetchingLink": "Errore nel collegamento alla tua registrazione.", "expandedOff": "Registrazione interrotta", "expandedOn": "La registrazione della riunione è attiva.", - "expandedPending": "La registrazione è in fase di avvio...", - "failedToStart": "Non è stato possibile avviare la registrazione", + "expandedPending": "Avvio registrazione in corso…", + "failedToStart": "Impossibile avviare la registrazione", "fileSharingdescription": "Condividi la registrazione con i partecipanti alla riunione", "highlight": "Evidenzia", "highlightMoment": "Evidenzia momento", - "highlightMomentDisabled": "Puoi evidenziare dei momenti quando parte la registrazione", + "highlightMomentDisabled": "Puoi evidenziare i momenti in cui inizia la registrazione", "highlightMomentSuccess": "Momento evidenziato", "highlightMomentSucessDescription": "Il tuo momento evidenziato sarà aggiunto al riepilogo della riunione.", "inProgress": "Registrazione o diretta in corso", "limitNotificationDescriptionNative": "La tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova <3>{{app}}.", - "limitNotificationDescriptionWeb": "Data l'alta domanda la tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova {{app}}.", - "linkGenerated": "Abbiamo generato un collegamento alla tua registrazione.", - "live": "DIRETTA", - "localRecordingNoNotificationWarning": "La registrazione non verrà annunciata ai partecipanti. Dovrai dir loro che la registrazione è in corso.", - "localRecordingNoVideo": "La registrazione del video non è in corso", - "localRecordingStartWarning": "Ferma la registrazione prima di uscire dalla riunione, altrimenti la registrazione non verrà salvata.", - "localRecordingStartWarningTitle": "Ferma la registrazione per salvarla", - "localRecordingVideoStop": "Fermare il video fermerà anche la registrazione. Sei sicuro di voler terminare?", + "limitNotificationDescriptionWeb": "Per la grossa domanda la tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova {{app}}.", + "linkGenerated": "È stato generato un collegamento alla tua registrazione.", + "localRecordingNoNotificationWarning": "La registrazione non verrà annunciata ai partecipanti. Dovrai dir loro che la riunione viene registrata.", + "localRecordingNoVideo": "Il video non sta venendo registrato", + "localRecordingStartWarning": "Assicurati di interrompere la registrazione prima di uscire dalla riunione, altrimenti la registrazione non verrà salvata.", + "localRecordingStartWarningTitle": "Interrompi la registrazione per salvarla", + "localRecordingVideoStop": "Interrompere il video fermerà anche la registrazione. Vuoi continuare?", "localRecordingVideoWarning": "Per registrare il video, deve essere già avviato prima dell'inizio della registrazione", - "localRecordingWarning": "Assicurati di aver selezionato la scheda corrente, per registrare gli audio e video corretti. La registrazione è limitata ad 1GB, cioè circa 100 minuti.", + "localRecordingWarning": "Assicurati di aver selezionato la scheda corrente, per registrare gli audio e video corretti.", "loggedIn": "Accesso effettuato come {{userName}}", - "noStreams": "Audio e video non trovati.", + "noMicPermission": "La traccia del microfono non può essere creata. Si prega di concedere l'autorizzazione all'uso del microfono.", + "noStreams": "Audio e video non rilevati.", "off": "Registrazione interrotta", "offBy": "{{name}} ha interrotto la registrazione", - "on": "Registrazione", - "onBy": "Registrazione iniziata da {{name}}", - "onlyRecordSelf": "Registra solo il mio audio e video", - "pending": "In preparazione alla registrazione della riunione", - "rec": "REC", - "saveLocalRecording": "Salva localmente il file della registrazione", - "serviceDescription": "La tua registrazione verrà salvata dal servizio di registrazione che hai scelto", + "on": "Registrazione avviata", + "onBy": "Registrazione avviata da {{name}}", + "onlyRecordSelf": "Registra solo i miei audio e video", + "pending": "Preparazione alla registrazione della riunione in corso...", + "policyError": "Hai provato a iniziare la registrazione troppo velocemente. Si prega di riprovare più tardi!", + "recordAudioAndVideo": "Registra audio e video", + "recordTranscription": "Registra trascrizione", + "saveLocalRecording": "Salva localmente il file della registrazione (Beta)", + "serviceDescription": "La tua registrazione verrà salvata dal servizio di registrazione", "serviceDescriptionCloud": "Registrazione in rete", "serviceDescriptionCloudInfo": "Le riunioni registrate vengono automaticamente cancellate 24 ore dopo la registrazione.", "serviceName": "Servizio di registrazione", - "sessionAlreadyActive": "Questa sessione è già in corso di registrazione o trasmissione in diretta.", - "signIn": "Entra", - "signOut": "Esci", - "surfaceError": "Selezionare la scheda corrente, per favore.", + "sessionAlreadyActive": "È già in corso una registrazione o una diretta per questa riunione.", + "showAdvancedOptions": "Opzioni avanzate", + "signIn": "Accedi", + "signOut": "Disconnetti", + "surfaceError": "Si prega di selezionare la scheda corrente.", "title": "Registrazione", - "unavailable": "Ops! Il {{serviceName}} non è al momento disponibile. Stiamo lavorando per risolvere il problema. Riprova più tardi.", + "unavailable": "Ops! Il {{serviceName}} non è al momento disponibile. Stiamo lavorando per risolvere il problema. Si prega di riprovare più tardi.", "unavailableTitle": "Registrazione non disponibile", - "uploadToCloud": "Carica in cloud" + "uploadToCloud": "Carica nel cloud" }, "screenshareDisplayName": "Schermo di {{name}}", "sectionList": { "pullToRefresh": "Trascina per aggiornare" }, "security": { - "about": "Puoi aggiungere una $t(lockRoomPassword) alla riunione. I partecipanti dovranno fornire la $t(lockRoomPassword) per essere autorizzati a partecipare alla riunione.", - "aboutReadOnly": "I moderatori della riunione possono aggiungere $t(lockRoomPassword). I partecipanti dovranno fornire la $t(lockRoomPassword) per essere autorizzati a partecipare alla riunione.", - "insecureRoomNameWarning": "Il nome della riunione non è sicuro. Dei partecipanti indesiderati potrebbero unirsi alla riunione. Puoi proteggere l'accesso alla riunione nelle Impostazioni di sicurezza.", - "title": "Impostazioni di sicurezza" + "about": "Puoi aggiungere una $t(lockRoomPassword) alla riunione. I partecipanti dovranno inserire la $t(lockRoomPassword) per accedere alla riunione.", + "aboutReadOnly": "Gli organizzatori possono aggiungere una $t(lockRoomPassword) alla riunione. I partecipanti dovranno inserire la $t(lockRoomPassword) per accedere alla riunione.", + "insecureRoomNameWarningNative": "Il nome della riunione è troppo semplice. Partecipanti non desiderati potrebbero entrare nella riunione. {{recommendAction}} Per saperne di più sulla sicurezza della tua riunione ", + "insecureRoomNameWarningWeb": "Il nome della riunione è troppo semplice. Partecipanti non desiderati potrebbero entrare nella riunione. {{recommendAction}} Per saperne di più sulla sicurezza della tua riunione clicca qui.", + "title": "Impostazioni di sicurezza", + "unsafeRoomActions": { + "meeting": "Considera di rendere più sicura la riunione usando il pulsante sicurezza.", + "prejoin": "Considera di rendere più sicura la riunione usando un nome più complesso.", + "welcome": "Considera di rendere più sicura la riunione usando un nome più complesso o scegline uno dai suggeriti." + } }, "settings": { + "audio": "Audio", "buttonLabel": "Impostazioni", "calendar": { - "about": "L’integrazione del calendario con {{appName}} è usata per accedere in sicurezza al proprio calendario e poter leggere i prossimi appuntamenti ", + "about": "L’integrazione del calendario con {{appName}} è usata per accedere in sicurezza al proprio calendario e poter leggere i prossimi eventi.", "disconnect": "Disconnetti", - "microsoftSignIn": "Connettiti con un account Microsoft", - "signedIn": "Sto accedendo agli eventi del calendario per {{email}}. Fai click su «Disconnetti» per interrompere l’accesso agli eventi del calendario.", + "microsoftSignIn": "Accedi con un account Microsoft", + "signedIn": "Accesso agli eventi del calendario per {{email}} in corso. Clicca sul pulsante Disconnetti per interrompere l’accesso agli eventi sul calendario.", "title": "Calendario" }, + "chatWithPermissions": "La chat richiede il permesso", "desktopShareFramerate": "Frequenza di aggiornamento condivisone schermo", - "desktopShareHighFpsWarning": "Una frequenza di aggiornamento più alta può mettere alla prova la tua connessione ad internet, durante la condivisione schermo. Devi riavviare la condivisione schermo, per attivare le modifiche.", - "desktopShareWarning": "Devi riavviare la condivisione schermo, per attivare le modifiche.", + "desktopShareHighFpsWarning": "Una frequenza di aggiornamento della condivisione dello schermo più alta può influire sulla tua connessione. Devi riavviare la condivisione schermo, per applicare le modifiche.", + "desktopShareWarning": "Devi riavviare la condivisione schermo, per applicare le modifiche.", "devices": "Dispositivi", - "followMe": "Tutti cominciano seguendo te", - "framesPerSecond": "schermate al secondo", + "followMe": "Tutti seguono te", + "followMeRecorder": "Il registratore segue te", + "framesPerSecond": "fotogrammi al secondo", "incomingMessage": "Messaggio in arrivo", "language": "Lingua", "loggedIn": "Connesso come {{name}}", - "maxStageParticipants": "Numero massimo video che possono essere fissati nella schemata", + "maxStageParticipants": "Numero massimo di partecipanti che possono essere messi in evidenza nella schermata principale", "microphones": "Microfoni", - "moderator": "Moderatore", - "more": "Mostra di più", + "moderator": "Relatore", + "moderatorOptions": "Opzioni relatore", + "more": "Generali", "name": "Nome", "noDevice": "Nessuno", - "participantJoined": "Partecipante Entrato", - "participantKnocking": "Participante in sala d'attesa", - "participantLeft": "Partecipante Uscito", + "notifications": "Notifiche", + "participantJoined": "Partecipante entrato", + "participantKnocking": "Partecipante in sala d'attesa", + "participantLeft": "Partecipante uscito", "playSounds": "Suoni attivati", "reactions": "Reazioni riunione", - "sameAsSystem": "Stesso del computer ({{label}})", + "sameAsSystem": "Stesso del sistema ({{label}})", "selectAudioOutput": "Uscita audio", "selectCamera": "Videocamera", "selectMic": "Microfono", "selfView": "Tua immagine", - "sounds": "Suoni", + "shortcuts": "Scorciatoie", + "showSubtitlesOnStage": "Mostra sottotitoli in primo piano", "speakers": "Altoparlanti", - "startAudioMuted": "Tutti cominciano a microfono spento", + "startAudioMuted": "Tutti iniziano a microfono spento", "startReactionsMuted": "Spegni i suoni delle reazioni a tutti", - "startVideoMuted": "Tutti cominciano a videocamera disattivata", + "startVideoMuted": "Tutti iniziano a videocamera disattivata", "talkWhileMuted": "Parli a microfono spento", - "title": "Impostazioni" + "title": "Impostazioni", + "video": "Video" }, "settingsView": { "advanced": "Avanzate", "alertCancel": "Annulla", "alertOk": "OK", "alertTitle": "Attenzione", - "alertURLText": "L'URL del server inserito non è valido", + "alertURLText": "L'URL del server inserito non valido", + "apply": "Applica", "buildInfoSection": "Versione", "conferenceSection": "Riunione", - "disableCallIntegration": "Disattiva l'integrazione delle chiamate native", + "disableCallIntegration": "Disattiva l'integrazione nativa delle chiamate", "disableCrashReporting": "Disattiva la diagnostica dei crash", - "disableCrashReportingWarning": "Sei sicuro di voler disattivare la diagnostica dei crash? Quest'impostazione verrà eseguita al prossimo avvio dell'app.", - "disableP2P": "Disattiva la modalità punto-punto", + "disableCrashReportingWarning": "Vuoi disattivare la diagnostica dei crash? Quest'impostazione verrà applicata al prossimo avvio dell'app.", + "disableP2P": "Disattiva la modalità Peer-to-Peer", "displayName": "Nome visualizzato", "displayNamePlaceholderText": "Es: Mario Rossi", - "email": "email", + "email": "Email", + "emailPlaceholderText": "email@esempio.com", + "gavatarMessage": "Se la tua email è associata ad un account Gravatar, questo verrà usato per mostrare la tua immagine di profilo.", "goTo": "Vai a", "header": "Impostazioni", "help": "Aiuto", "links": "Collegamenti", "privacy": "Privacy", "profileSection": "Profilo", + "sdkVersion": "versione SDK", "serverURL": "URL del server", - "showAdvanced": "Impostazioni avanzate", - "startCarModeInLowBandwidthMode": "Avvia modalità Auto con solo audio", - "startWithAudioMuted": "Inizia con audio disattivato", - "startWithVideoMuted": "Inizia con video disattivato", + "showAdvanced": "Mostra impostazioni avanzate", + "startCarModeInLowBandwidthMode": "Avvia modalità auto in modalità larghezza di banda limitata", + "startWithAudioMuted": "Avvia con audio disattivato", + "startWithVideoMuted": "Avvia con video disattivato", "terms": "Termini", "version": "Versione" }, "share": { - "dialInfoText": "\n\n=====\n\nVuoi solo ascoltare la riunione da un telefono?\n\n{{defaultDialInNumber}}Clicca questo link per vedere i numeri telefonici di questo meeting\n{{dialInfoPageUrl}}", + "dialInfoText": "\n\n=====\n\nVuoi ascoltare la riunione da un telefono?\n\n{{defaultDialInNumber}}Clicca su questo link per vedere i numeri telefonici di questa riunione\n{{dialInfoPageUrl}}", "mainText": "Fai click sul link seguente per partecipare alla riunione:\n{{roomUrl}}" }, "speaker": "Relatore", "speakerStats": { "angry": "Arrabbiato", "disgusted": "Disgustato", - "displayEmotions": "Mostra faccine", + "displayEmotions": "Mostra emozioni", "fearful": "Spaventato", "happy": "Contento", "hours": "{{count}}h", + "labelTooltip": "Numero di partecipanti: {{count}}", "minutes": "{{count}}m", "name": "Nome", "neutral": "Neutro", "sad": "Triste", "search": "Cerca", + "searchDescription": "Scrivi per filtrare i partecipanti", "searchHint": "Cerca partecipanti", "seconds": "{{count}}s", "speakerStats": "Statistiche", "speakerTime": "Tempo", - "surprised": "Sorpreso" + "surprised": "A bocca aperta" }, "startupoverlay": { "genericTitle": "Per la riunione devono essere usati il tuo microfono e la tua videocamera.", @@ -1049,326 +1278,406 @@ }, "suspendedoverlay": { "rejoinKeyTitle": "Ricollegati", - "text": "Premi il pulsante Ricollegati per ricollegarti.", - "title": "La video chiamata si è interrotta perché il computer è stato sospeso." + "text": "Premi il pulsante Ricollegati per ricollegarti.", + "title": "La videochiamata si è interrotta perché il computer è stato sospeso." }, "termsView": { "title": "Termini" }, - "toggleTopPanelLabel": "Scheda superiore", + "toggleTopPanelLabel": "Mostra scheda superiore", "toolbar": { "Settings": "Impostazioni", "accessibilityLabel": { - "Settings": "Impostazioni", - "audioOnly": "Audio", - "audioRoute": "Scegli l'uscita audio", - "boo": "Boo", - "breakoutRoom": "Sottogruppo (entra/esci)", - "callQuality": "Imposta qualità della chiamata", - "carmode": "Modalità Auto", - "cc": "Sottotitoli", - "chat": "Conversazione", + "Settings": "Apri impostazioni", + "audioOnly": "Attiva solo audio", + "audioRoute": "Scegli il dispositivo audio", + "boo": "Buu", + "breakoutRooms": "Stanze", + "callQuality": "Imposta qualità del video", + "carmode": "Modalità auto", + "cc": "Mostra sottotitoli", + "chat": "Apri chat", "clap": "Applaudi", + "closeChat": "Chiudi chat", + "closeMoreActions": "Chiudi menu avanzato", + "closeParticipantsPane": "Chiudi pannello partecipanti", + "closedCaptions": "Sottotitoli", "collapse": "Riduci", - "document": "Documenti condivisi", + "document": "Mostra documenti condivisi", + "documentClose": "Chiudi documento condiviso", + "documentOpen": "Apri documento condiviso", "download": "Scarica le nostre app", - "embedMeeting": "Incorpora riunione altrove", + "embedMeeting": "Incorpora riunione", "endConference": "Termina la riunione per tutti", + "enterFullScreen": "Mostra a schermo intero", + "enterTileView": "Mostra vista a mosaico", + "exitFullScreen": "Esci dalla modalità a schermo intero", + "exitTileView": "Esci dalla vista a mosaico", "expand": "Espandi", "feedback": "Lascia un feedback", - "fullScreen": "Schermo intero", - "giphy": "Menù GIPHY", - "grantModerator": "Autorizza moderatore", + "fullScreen": "Attiva modalità a schermo intero", + "giphy": "Mostra menu GIPHY", + "grantModerator": "Concedi permessi da relatore", "hangup": "Lascia la riunione", + "heading": "Barra degli strumenti", "help": "Aiuto", + "hideWhiteboard": "Nascondi lavagna", "invite": "Invita partecipanti", "kick": "Espelli partecipante", "laugh": "Ridi", "leaveConference": " Lascia riunione", "like": "Mi piace", "linkToSalesforce": "Collega a Salesforce", - "lobbyButton": "Sala d'attesa", - "localRecording": "Controlli di registrazione locale", - "lockRoom": "Attiva o disattiva password", - "moreActions": "Attiva o disattiva menu avanzato", + "lobbyButton": "Attiva/disattiva sala d'attesa", + "localRecording": "Mostra controlli della registrazione", + "lockRoom": "Attiva/disattiva password della riunione", + "love": "Cuore", + "lowerHand": "Abbassa la mano", + "moreActions": "Avanzate", "moreActionsMenu": "Menu avanzato", "moreOptions": "Altre opzioni", - "mute": "Audio", - "muteEveryone": "Spegni i microfoni a tutti", - "muteEveryoneElse": "Spegni i microfoni di tutti gli altri", - "muteEveryoneElsesVideoStream": "Spegni la videocamera di tutti gli altri", + "mute": "Spegni microfono", + "muteEveryone": "Spegni il microfono a tutti", + "muteEveryoneElse": "Spegni il microfono a tutti gli altri", + "muteEveryoneElsesVideoStream": "Spegni la videocamera a tutti gli altri", "muteEveryonesVideoStream": "Spegni la videocamera a tutti", - "noiseSuppression": "Riduzione del rumore", - "participants": "Partecipanti", - "pip": "Immagine nell’immagine", + "muteGUMPending": "Connessione del microfono in corso", + "noiseSuppression": "Cancellazione del rumore (BETA)", + "openChat": "Apri chat", + "participants": "Apri pannello partecipanti. {{participantsCount}} partecipanti", + "pip": "Attiva modalità Picture-in-Picture", "privateMessage": "Invia messaggio privato", "profile": "Modifica profilo", - "raiseHand": "Alza o abbassa la mano", - "reactionsMenu": "Reazioni", - "recording": "Registrazione", + "raiseHand": "Alza la mano", + "react": "Reazione ai messaggi", + "reactions": "Reazioni", + "reactionsMenu": "Menu reazioni", + "recording": "Avvia registrazione", "remoteMute": "Spegni microfono al partecipante", - "remoteVideoMute": "Spegni videocamera del partecipante", - "security": "Impostazioni di sicurezza", + "remoteVideoMute": "Spegni videocamera al partecipante", + "security": "Opzioni di sicurezza", "selectBackground": "Scegli sfondo", "selfView": "Mostra tua immagine", "shareRoom": "Invita qualcuno", "shareYourScreen": "Condivisione schermo", "shareaudio": "Condividi audio", - "sharedvideo": "Condivisione", - "shortcuts": "Scorciatoie", + "sharedvideo": "Condividi video", + "shortcuts": "Mostra scorciatoie", "show": "Mostra in primo piano", + "showWhiteboard": "Mostra lavagna", "silence": "Senza parole", - "speakerStats": "Statistiche relatore", - "surprised": "Sorpreso", - "tileView": "Vedi tutti i partecipanti, o uno solo", + "speakerStats": "Mostra statistiche partecipanti", + "stopScreenSharing": "Interrompi condivisione dello schermo", + "stopSharedVideo": "Interrompi video", + "surprised": "A bocca aperta", + "tileView": "Mostra vista a mosaico", "toggleCamera": "Cambia videocamera", - "toggleFilmstrip": "Pellicola", + "toggleFilmstrip": "Mostra pellicola", + "unmute": "Attiva il microfono", "videoblur": "Sfoca video", - "videomute": "Videocamera", - "whiteboard": "Usa lavagna" + "videomute": "Spegni videocamera", + "videomuteGUMPending": "Connessione della videocamera in corso", + "videounmute": "Accendi videocamera" }, "addPeople": "Aggiungi partecipanti alla chiamata", - "audioOnlyOff": "Disabilita modalità per banda limitata", - "audioOnlyOn": "Abilita modalità per banda limitata", - "audioRoute": "Scegli l'uscita audio", + "advancedAudioSettings": { + "aec": { + "label": "Cancellazione dell'eco" + }, + "agc": { + "label": "Controllo del guadagno automatico" + }, + "ns": { + "label": "Cancellazione del rumore" + }, + "stereo": { + "label": "Stereo" + } + }, + "audioOnlyOff": "Disabilita modalità larghezza di banda limitata", + "audioOnlyOn": "Abilita modalità larghezza di banda limitata", + "audioRoute": "Scegli il dispositivo audio", "audioSettings": "Impostazioni audio", "authenticate": "Autenticazione", - "boo": "Boo", + "boo": "Buu", "callQuality": "Imposta qualità video", - "chat": "Conversazione", + "chat": "Apri chat", "clap": "Applaudi", - "closeChat": "Chiudi conversazione", - "closeReactionsMenu": "Chiudi il menù reazioni", - "disableNoiseSuppression": "Interrompi riduzione rumore", - "disableReactionSounds": "Puoi disattivare i suoni delle reaction, in questa riunione", + "closeChat": "Chiudi chat", + "closeParticipantsPane": "Chiudi pannello partecipanti", + "closeReactionsMenu": "Chiudi menu reazioni", + "closedCaptions": "Sottotitoli", + "disableNoiseSuppression": "Disattiva cancellazione del rumore (BETA)", + "disableReactionSounds": "Puoi disattivare i suoni delle reazioni in questa riunione", "documentClose": "Chiudi documento condiviso", "documentOpen": "Apri documento condiviso", "download": "Scarica le nostre app", - "e2ee": "Crittografia punto-punto", - "embedMeeting": "Incorpora riunione altrove", + "e2ee": "Crittografia End-to-End", + "embedMeeting": "Incorpora riunione", + "enableNoiseSuppression": "Attiva cancellazione del rumore (BETA)", "endConference": "Termina la riunione per tutti", - "enterFullScreen": "Schermo intero", - "enterTileView": "Vedi tutti i partecipanti", - "exitFullScreen": "Esci da schermo intero", - "exitTileView": "Vedi una persona sola", + "enterFullScreen": "Mostra a schermo intero", + "enterTileView": "Mostra vista a mosaico", + "exitFullScreen": "Esci dalla modalità a schermo intero", + "exitTileView": "Esci dalla vista a mosaico", "feedback": "Lascia un feedback", - "giphy": "Menù GIPHY", - "hangup": "Butta giù", + "giphy": "Menu GIPHY", + "hangup": "Lascia la riunione", "help": "Aiuto", "hideWhiteboard": "Nascondi lavagna", "invite": "Invita partecipanti", - "joinBreakoutRoom": "Entra in sottogruppo", + "joinBreakoutRoom": "Entra nella stanza", "laugh": "Ridi", - "leaveBreakoutRoom": "Lascia breakout room", + "leaveBreakoutRoom": "Lascia stanza", "leaveConference": " Lascia riunione", "like": "Mi piace", "linkToSalesforce": "Collega a Salesforce", - "lobbyButtonDisable": "Disabilita sala d'attesa", + "lobbyButtonDisable": "Disattiva sala d'attesa", "lobbyButtonEnable": "Abilita sala d'attesa", "login": "Accedi", - "logout": "Scollegati", + "logout": "Disconnetti", + "love": "Cuore", "lowerYourHand": "Abbassa la mano", - "moreActions": "Altre azioni", + "moreActions": "Avanzate", "moreOptions": "Altre opzioni", - "mute": "Microfono", - "muteEveryone": "Spegni audio a tutti", - "muteEveryonesVideo": "Spegni videocamera di tutti", - "noAudioSignalDesc": "Se non l'hai disabilitato intenzionalmente nelle impostazioni, prova a cambiare dispositivo di input.", - "noAudioSignalDescSuggestion": "Se non l'hai disabilitato intenzionalmente nelle impostazioni, prova a scegliere il dispositivo consigliato.", + "mute": "Spegni microfono", + "muteEveryone": "Spegni microfono a tutti", + "muteEveryonesVideo": "Spegni videocamera a tutti", + "muteGUMPending": "Connessione del microfono in corso", + "noAudioSignalDesc": "Se non l'hai disabilitato intenzionalmente nelle impostazioni di sistema o hardware, prova a cambiare dispositivo.", + "noAudioSignalDescSuggestion": "Se non l'hai disabilitato intenzionalmente nelle impostazioni di sistema o hardware, prova ad usare il dispositivo di consigliato.", "noAudioSignalDialInDesc": "Puoi anche chiamare usando:", - "noAudioSignalDialInLinkDesc": "Numberi di telefono", - "noAudioSignalTitle": "Non arrivano suoni dal tuo microfono!", - "noiseSuppression": "Riduzione del rumore", - "noisyAudioInputDesc": "Sembra che il tuo microfono faccia dei rumori, prova a spegnerlo o cambiarlo per favore.", - "noisyAudioInputTitle": "Il tuo microfono sembra rumoroso!", - "openChat": "Apri le conversazioni", - "openReactionsMenu": "Apri il menù reazioni", + "noAudioSignalDialInLinkDesc": "Numeri di telefono", + "noAudioSignalTitle": "Nessun suono rilevato dal tuo microfono!", + "noiseSuppression": "Cancellazione del rumore (BETA)", + "noisyAudioInputDesc": "Sembra che il tuo microfono faccia rumore, si prega di spegnerlo o cambiarlo.", + "noisyAudioInputTitle": "Il tuo microfono sembra fare rumore!", + "openChat": "Apri chat", + "openReactionsMenu": "Apri il menu reazioni", "participants": "Partecipanti", - "pip": "Abilita visualizzazione immagine nell'immagine", - "privateMessage": "invia un messaggio privato", + "pip": "Abilita modalità Picture-in-Picture", + "privateMessage": "Invia un messaggio privato", "profile": "Modifica profilo", - "raiseHand": "Alza/Abbassa la mano", + "raiseHand": "Alza la mano", "raiseYourHand": "Alza la mano", - "reactionBoo": "Invia boo", - "reactionClap": "Invia applauso", - "reactionLaugh": "Invia risata", - "reactionLike": "Invia mi piace", - "reactionSilence": "Invia silenzio", - "reactionSurprised": "Invia sorpresa", - "security": "Impostazioni di sicurezza", + "reactionBoo": "Invia Buu", + "reactionClap": "Invia Applauso", + "reactionHeart": "Invia Cuore", + "reactionLaugh": "Invia Risata", + "reactionLike": "Invia Mi piace", + "reactionLove": "Invia Love", + "reactionSilence": "Invia senza parole", + "reactionSurprised": "Invia a bocca aperta", + "reactions": "Reazioni", + "security": "Opzioni di sicurezza", "selectBackground": "Scegli sfondo", - "shareRoom": "Invita partecipante", + "shareRoom": "Invita qualcuno", "shareaudio": "Condividi audio", - "sharedvideo": "Condividi un video", + "sharedvideo": "Condividi video", "shortcuts": "Visualizza scorciatoie", - "showWhiteboard": "Show whiteboard", - "silence": "Silenzio", - "speakerStats": "Statistiche", - "startScreenSharing": "Inizia la condivisione dello schermo", - "startSubtitles": "Avvia sottotitoli", - "stopAudioSharing": "Ferma condivisione audio", - "stopScreenSharing": "Ferma la condivisione dello schermo", - "stopSharedVideo": "Ferma video", - "stopSubtitles": "Ferma sottotitoli", - "surprised": "Sopresa", - "talkWhileMutedPopup": "Stai provando a parlare? Il microfono è disattivato.", - "tileViewToggle": "Vedi tutti i partecipanti insieme, o uno solo", + "showWhiteboard": "Mostra lavagna", + "silence": "Senza parole", + "speakerStats": "Statistiche partecipanti", + "startScreenSharing": "Avvia la condivisione dello schermo", + "startSubtitles": "Avvia sottotitoli • {{language}}", + "stopAudioSharing": "Interrompi condivisione audio", + "stopScreenSharing": "Interrompi la condivisione dello schermo", + "stopSharedVideo": "Interrompi video", + "stopSubtitles": "Interrompi sottotitoli", + "surprised": "Sopreso", + "talkWhileMutedPopup": "Stai parlando? Il microfono è disattivato.", + "tileViewToggle": "Mostra vista a mosaico", "toggleCamera": "Cambia videocamera", + "unmute": "Riattiva microfono", "videoSettings": "Impostazioni video", - "videomute": "Videocamera" + "videomute": "Spegni videocamera", + "videomuteGUMPending": "Connessione della videocamera in corso", + "videounmute": "Accendi videocamera" }, "transcribing": { - "ccButtonTooltip": "Sottotitoli", - "error": "Trascrizione fallita. Prova di nuovo.", - "expandedLabel": "La trascrizione della riunione è attiva", - "failedToStart": "C'è stato un errore nell'avvio del servizio di trascrizione.", - "labelToolTip": "Il servizio di trascrizione è in fase di avvio", - "off": "Trascrizione interrotta", - "pending": "Avvio del servizio di trascrizione della riunione...", + "ccButtonTooltip": "Avvia sottotitoli", + "expandedLabel": "La trascrizione è attiva", + "failed": "Trascrizione non riuscita", + "labelTooltip": "La trascrizione della riunione è in corso.", + "labelTooltipExtra": "Inoltre, una trascrizione sarà disponibile in seguito.", + "openClosedCaptions": "Apri sottotitoli", + "original": "Originale", "sourceLanguageDesc": "Al momento la riunione è in {{sourceLanguage}}.
Puoi cambiare lingua da ", - "sourceLanguageHere": "here", + "sourceLanguageHere": "qui", "start": "Avvia visualizzazione sottotitoli", - "stop": "Interrompi la visualizzazione dei sottotitoli", + "stop": "Interrompi visualizzazione sottotitoli", "subtitles": "Sottotitoli", - "subtitlesOff": "Spento", - "tr": "TR" + "subtitlesOff": "Spenti", + "tr": "TR", + "translateTo": "Traduci in" }, + "unpinParticipant": "{{participantName}} - Disattiva in evidenza", "userMedia": { - "androidGrantPermissions": "Seleziona consenti quando richiesto dal browser.", - "chromeGrantPermissions": "Seleziona consenti quando richiesto dal browser.", - "edgeGrantPermissions": "Seleziona quando richiesto dal browser.", - "electronGrantPermissions": "Concedi l'autorizzazione ad usare telecamera e microfono", - "firefoxGrantPermissions": "Seleziona condividi i dispositivi selezionati quando richiesto dal browser.", - "iexplorerGrantPermissions": "Seleziona OK quando richiesto dal browser.", - "nwjsGrantPermissions": "Concedi l'autorizzazione ad usare telecamera e microfono", - "operaGrantPermissions": "Seleziona consenti quando richiesto dal browser.", - "react-nativeGrantPermissions": "Seleziona consenti quando richiesto dal browser.", - "safariGrantPermissions": "Seleziona OK quando richiesto dal browser." + "grantPermissions": "Si prega di concedere l'autorizzazione ad usare videocamera e microfono." }, "videoSIPGW": { - "busy": "Stiamo lavorando per liberare le risorse. Riprova tra qualche minuto.", - "busyTitle": "Il servizio Riunione al momento è occupato", + "busy": "Stiamo lavorando per liberare le risorse. Si prega di riprovare tra qualche minuto.", + "busyTitle": "Il servizio di riunione al momento è occupato", "errorAlreadyInvited": "{{displayName}} già invitato", - "errorInvite": "Riunione non ancora stabilita. Riprova più tardi.", - "errorInviteFailed": "Stiamo lavorando per risolvere il problema. Riprova più tardi.", - "errorInviteFailedTitle": "Invito a {{displayName}} fallito", + "errorInvite": "Riunione non ancora iniziata. Si prega di riprovare più tardi.", + "errorInviteFailed": "Stiamo lavorando per risolvere il problema. Si prega di riprovare più tardi.", + "errorInviteFailedTitle": "Invito a {{displayName}} non riuscito", "errorInviteTitle": "Errore nell'invito alla riunione", "pending": "{{displayName}} è stato invitato" }, "videoStatus": { "adjustFor": "Ottimizza per:", "audioOnly": "AUD", - "audioOnlyExpanded": "Hai attivato la modalità per banda limitata. Questa modalità permette di risparmiare banda, ma non vedrai gli altri partecipanti.", + "audioOnlyExpanded": "Hai attivato la modalità larghezza di banda limitata. In questa modalità riceverai solo l'audio e la condivisione dello schermo.", "bestPerformance": "Prestazioni max.", - "callQuality": "Qualità video", + "callQuality": "Qualità video (0 per prestazioni massime, 3 per qualità massima)", "hd": "HD", - "hdTooltip": "Stai vedendo in alta definizione", + "hdTooltip": "Il video è in alta definizione", "highDefinition": "Alta definizione", - "highestQuality": "Definizione max.", + "highestQuality": "Qualità max.", "labelTooiltipNoVideo": "Nessun video", - "labelTooltipAudioOnly": "Hai attivato la modalità per banda limitata", + "labelTooltipAudioOnly": "Modalità larghezza di banda limitata attivata", "ld": "LD", - "ldTooltip": "Stai vedendo a bassa definizione", + "ldTooltip": "Il video è a bassa definizione", "lowDefinition": "Bassa definizione", - "performanceSettings": "Imposta prestazioni", + "performanceSettings": "Impostazioni prestazioni", + "recording": "Questa riunione sta venendo registrata.", "sd": "SD", - "sdTooltip": "Stai vedendo a definizione standard", - "standardDefinition": "Definizione standard" + "sdTooltip": "Il video è in definizione standard", + "standardDefinition": "Definizione standard", + "streaming": "Trasmissione in corso" }, "videothumbnail": { - "connectionInfo": "Info connessione", - "domute": "Silenzia", - "domuteOthers": "Disattiva audio di tutti gli altri", - "domuteVideo": "Disattiva video", - "domuteVideoOfOthers": "Disattiva video di tutti gli altri", - "flip": "Rifletti", - "grantModerator": "Autorizza moderatore", - "hideSelfView": "Nascondi tua immagine", + "connectionInfo": "Informazioni connessione", + "demote": "Fai diventare spettatore", + "domute": "Disattiva microfono", + "domuteDesktop": "Interrompi la condivisione dello schermo", + "domuteDesktopOfOthers": "Interrompi la condivisione dello schermo agli altri", + "domuteOthers": "Disattiva microfono a tutti gli altri", + "domuteVideo": "Disattiva videocamera", + "domuteVideoOfOthers": "Disattiva videocamera a tutti gli altri", + "flip": "Specchia", + "grantModerator": "Concedi permessi da relatore", + "hideSelfView": "Nascondi la tua immagine", "kick": "Espelli", - "moderator": "Moderatore", + "mirrorVideo": "Specchia il tuo video", + "moderator": "Relatore", "mute": "Il partecipante ha il microfono spento", - "muted": "Audio disattivato", - "pinToStage": "Fissa questo video", - "remoteControl": "Controllo remoto", + "muted": "Microfono spento", + "pinToStage": "Metti in primo piano", + "remoteControl": "Avvia controllo remoto", "screenSharing": "Il partecipante sta condividendo lo schermo", - "show": "Mostra tra gli oratori", - "showSelfView": "Mostra tua immagine", - "unpinFromStage": "Libera questo video", - "videoMuted": "Video disattivato", - "videomute": "Il partecipante ha la videocamera spenta" + "show": "Mostra in primo piano", + "showSelfView": "Mostra la tua immagine", + "unpinFromStage": "Non più in primo piano", + "verify": "Verifica partecipante", + "videoMuted": "Videocamera disattivata", + "videomute": "Il partecipante ha la spento la videocamera" }, "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Sfondo attuale: {{background}}", + "selectBackground": "Seleziona uno sfondo" + }, "addBackground": "Aggiungi sfondo", "apply": "Applica", - "backgroundEffectError": "L'applicazione dell'effetto allo sfondo è fallita.", - "blur": "Sfuoca", + "backgroundEffectError": "L'applicazione dell'effetto allo sfondo non riuscita.", + "blur": "Sfocatura", "deleteImage": "Cancella immagine", "desktopShare": "Condivisione desktop", "desktopShareError": "Impossibile condividere il desktop", "image1": "Spiaggia", - "image2": "Parete neutra bianca", + "image2": "Parete bianca neutra", "image3": "Stanza bianca vuota", "image4": "Lampada da pavimento nera", "image5": "Montagna", "image6": "Foresta", "image7": "Alba", "none": "Nessuno", - "pleaseWait": "Aspetta un momento...", - "removeBackground": "Togli sfondo", - "slightBlur": "Sfuoca leggermente", - "title": "Sfondi", - "uploadedImage": "Carica immagine {{index}}", + "pleaseWait": "Si prega di attendere…", + "removeBackground": "Rimuovi sfondo", + "slightBlur": "Sfocatura leggera", + "title": "Sfondi virtuali", + "uploadedImage": "Immagine caricata {{index}}", "webAssemblyWarning": "Il WebAssembly non è supportato", "webAssemblyWarningDescription": "Il WebAssembly è disabilitato o non è supportato da questo browser" }, - "volumeSlider": "Sbarra volume", + "visitors": { + "chatIndicator": "(spettatore)", + "joinMeeting": { + "description": "Adesso sei uno spettatore in questa riunione.", + "raiseHand": "Alza la mano", + "title": "Ingresso nella riunione in corso", + "wishToSpeak": "Se vuoi parlare, si prega di alzare la mano sotto e aspettare l'autorizzazione del relatore." + }, + "labelTooltip": "Numero di spettatori: {{count}}", + "notification": { + "demoteDescription": "Fatto diventare spettatore da {{actor}}, alza la mano per intervenire", + "noMainParticipantsDescription": "Un partecipante deve iniziare la riunione. Si prega di riprovare più tardi.", + "noMainParticipantsTitle": "La riunione non è ancora iniziata.", + "noVisitorLobby": "Non puoi partecipare se la sala d'attesa è attiva per la riunione.", + "notAllowedPromotion": "Un partecipante deve autorizzare la tua richiesta prima.", + "title": "Sei uno spettatore nella riunione" + }, + "waitingMessage": "Ti unirai alla riunione quando inizierà!" + }, + "volumeSlider": "Barra del volume", "welcomepage": { "accessibilityLabel": { "join": "Tocca per accedere", "roomname": "Inserisci nome riunione" }, - "addMeetingName": "Aggiungi Nome riunione", - "appDescription": "Avvia una videochiamata con tutto il team. Invita tutti quelli che conosci. {{app}} è una soluzione per effettuare videoconferenze totalmente crittografata, 100% open source, che puoi usare sempre, ogni giorno, gratuitamente – senza bisogno di un account.", + "addMeetingName": "Aggiungi nome riunione", + "appDescription": "Avvia una videochiamata con tutto il gruppo. Invita tutti quelli che conosci. {{app}} è una soluzione per effettuare videoconferenze totalmente crittografata, 100% open source, che puoi usare sempre, ogni giorno, gratuitamente – senza bisogno di un account.", "audioVideoSwitch": { "audio": "Voce", "video": "Video" }, "calendar": "Calendario", "connectCalendarButton": "Collega calendario", - "connectCalendarText": "Connetti il tuo calendario per vedere tutte le riunione dentro {{app}}. Poi, aggiungi {{provider}} di riunione al tuo calendario, per avviarle con un clic.", + "connectCalendarText": "Collega il tuo calendario per vedere tutte le riunioni dentro {{app}}. Poi, aggiungi {{provider}} di riunione al tuo calendario per avviarle con un clic.", "enterRoomTitle": "Avvia una nuova riunione", - "getHelp": "Trova aiuto", + "getHelp": "Ottieni aiuto", "go": "VAI", "goSmall": "VAI", "headerSubtitle": "Riunioni sicure e di alta qualità", "headerTitle": "Internxt Meet", "info": "Informazioni chiamata", - "jitsiOnMobile": "Jitsi su mobile – scarica le nostre app e dai inizio ad una riunione dovunque tu sia", + "jitsiOnMobile": "Jitsi su mobile – scarica le nostre applicazioni e dai inizio ad una riunione dovunque tu sia", "join": "CREA/UNISCITI", "logo": { "calendar": "Logo calendario", - "desktopPreviewThumbnail": "Icona anteprima desktop", + "desktopPreviewThumbnail": "Miniatura anteprima del desktop", "googleLogo": "Logo Google", "logoDeepLinking": "Logo Jitsi meet", "microsoftLogo": "Logo Microsoft", - "policyLogo": "Logo normativa" + "policyLogo": "Logo politica" }, - "mobileDownLoadLinkAndroid": "Scarica app per Android", - "mobileDownLoadLinkFDroid": "Scarica app da F-Droid", - "mobileDownLoadLinkIos": "Scarica app per iOS", - "moderatedMessage": "O prepara una URL in anticipo, per le riunioni di cui sei il moderatore.", - "privacy": "Riservatezza", + "meetingsAccessibilityLabel": "Riunioni", + "mobileDownLoadLinkAndroid": "Scarica applicazione per Android", + "mobileDownLoadLinkFDroid": "Scarica applicazione da F-Droid", + "mobileDownLoadLinkIos": "Scarica applicazione per iOS", + "moderatedMessage": "O prepara un URL di riunione in anticipo, quando sei l'unico organizzatore.", + "privacy": "Privacy", "recentList": "Recenti", "recentListDelete": "Cancella", - "recentListEmpty": "La lista delle riunioni recenti è vuota. Partecipa almeno ad una riunione e potrai riavviarla in seguito.", + "recentListEmpty": "La lista delle riunioni recenti è vuota. Parla con il tuo gruppo e troverai tutte le riunioni recenti qui.", + "recentMeetings": "Riunioni recenti", "reducedUIText": "Benvenuto in {{app}}!", "roomNameAllowedChars": "Il nome della riunione non deve contenere questi caratteri: ?, &, :, ', \", %, #.", "roomname": "Inserisci il nome della riunione", - "roomnameHint": "Inserisci il nome o l'URL della alla quale vuoi accedere. Puoi anche inventarti un nome, assicurati solo che le persone che vuoi contattare lo conoscano, così che possano inserire lo stesso nome.", + "roomnameHint": "Inserisci il nome o l'URL della riunione a cui vuoi accedere. Puoi anche inventarti un nome, assicurati solo che le persone con cui vuoi collegarti lo conoscano, così che possano inserire lo stesso nome.", "sendFeedback": "Invia feedback", "settings": "Impostazioni", - "startMeeting": "Inizia riunione", + "startMeeting": "Avvia riunione", "terms": "Termini di utilizzo", - "title": "Il sistema di videoconferenza sicuro, funzionale e completamente gratuito." + "title": "Il sistema di videoconferenza sicuro, funzionale e completamente gratuito.", + "upcomingMeetings": "Prossime riunioni" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Lavagna" + }, + "screenTitle": "Lavagna" } } diff --git a/lang/main-ja.json b/lang/main-ja.json index 4c94a7e5f525..63a7e2582061 100644 --- a/lang/main-ja.json +++ b/lang/main-ja.json @@ -20,7 +20,7 @@ "noResults": "一致する検索結果がありません", "outlookEmail": "Outlook メール", "phoneNumbers": "電話番号", - "searching": "検索中...", + "searching": "検索中…", "shareInvite": "ミーティングの招待状を共有", "shareLink": "ミーティングへのリンクを共有して、他の人を招待しましょう", "shareStream": "ライブ配信へのリンクを共有する", @@ -112,7 +112,7 @@ "installExtensionText": "Google カレンダーと Office 365 統合のための拡張機能をインストールしてください" }, "connectingOverlay": { - "joiningRoom": "ミーティングに参加しています..." + "joiningRoom": "ミーティングに参加しています…" }, "connection": { "ATTACHED": "アタッチされました", @@ -124,9 +124,9 @@ "DISCONNECTED": "切断されました", "DISCONNECTING": "切断しています", "ERROR": "エラー", - "FETCH_SESSION_ID": "セッションIDの取得中...", + "FETCH_SESSION_ID": "セッションIDの取得中…", "GET_SESSION_ID_ERROR": "セッションIDの取得エラー: {{code}}", - "GOT_SESSION_ID": "セッションIDの取得中... 完了", + "GOT_SESSION_ID": "セッションIDの取得中… 完了", "LOW_BANDWIDTH": "帯域節約のため、{{displayName}} のビデオがオフになりました" }, "connectionindicator": { @@ -179,7 +179,7 @@ "ifHaveApp": "すでにこのアプリを持っている場合:", "joinInApp": "アプリでミーティングに参加", "launchWebButton": "Web 版を起動", - "title": "{{app}} でミーティングを開始しています...", + "title": "{{app}} でミーティングを開始しています…", "tryAgainButton": "デスクトップでもう一度お試しください", "unsupportedBrowser": "我々がサポートしていないブラウザをお使いのようです。" }, @@ -209,7 +209,7 @@ "Share": "共有", "Submit": "投稿", "WaitForHostMsg": "ミーティング はまだ開始されていません。あなたがホストの場合は、認証を行ってください。それ以外の場合は、ホストの到着をお待ちください。", - "WaitingForHostTitle": "ホストの到着を待っています...", + "WaitingForHostTitle": "ホストの到着を待っています…", "Yes": "はい", "accessibilityLabel": { "liveStreaming": "ライブ配信" @@ -229,9 +229,9 @@ "cameraUnknownError": "不明な理由でカメラが使用できません。", "cameraUnsupportedResolutionError": "お使いのカメラは、必要なビデオ解像度をサポートしていません。", "close": "閉じる", - "conferenceDisconnectMsg": "ネットワーク接続を確認することができます。{{seconds}} 秒以内に再接続します...", + "conferenceDisconnectMsg": "ネットワーク接続を確認することができます。{{seconds}} 秒以内に再接続します…", "conferenceDisconnectTitle": "あなたは切断されました。", - "conferenceReloadMsg": "私たちはこれを解決しようとしています。{{seconds}} 秒以内に再接続します...", + "conferenceReloadMsg": "私たちはこれを解決しようとしています。{{seconds}} 秒以内に再接続します…", "conferenceReloadTitle": "残念ながら、何か問題が発生しています。", "confirm": "確認", "confirmNo": "いいえ", @@ -499,7 +499,7 @@ "errorLiveStreamNotEnabled": "{{email}} のライブ配信は有効ではありません。ライブ配信を有効にしてもらうか、ライブ配信が有効なアカウントでログインしてください。", "expandedOff": "ライブ配信が停止しました", "expandedOn": "このミーティングは、現在 YouTube に配信されています。", - "expandedPending": "ライブ配信を開始しています...", + "expandedPending": "ライブ配信を開始しています…", "failedToStart": "ライブ配信の開始に失敗しました", "getStreamKeyManually": "ライブ配信を取得できませんでした。YouTube よりストリームキーの取得を試してください。", "googlePrivacyPolicy": "Google プライバシーポリシー", @@ -511,7 +511,7 @@ "offBy": "{{name}} がライブ配信を停止しました", "on": "ライブ配信を開始しました", "onBy": "{{name}} がライブ配信を開始しました", - "pending": "ライブ配信を開始しています...", + "pending": "ライブ配信を開始しています…", "serviceName": "ライブ配信サービス", "sessionAlreadyActive": "このセッションはすでに録画またはライブ配信されています。", "signIn": "Google でログイン", @@ -540,10 +540,10 @@ "invalidPassword": "無効なパスワード", "joinRejectedMessage": "あなたの参加リクエストは、モデレーターによって却下されました。", "joinTitle": "ミーティングに参加", - "joinWithPasswordMessage": "パスワードを使って参加しようとしています。お待ちください...", + "joinWithPasswordMessage": "パスワードを使って参加しようとしています。お待ちください…", "joiningMessage": "誰かがあなたのリクエストを受け入れたら、すぐに会議に参加します", - "joiningTitle": "ミーティングへの参加を依頼中...", - "joiningWithPasswordTitle": "パスワードを使って参加中...", + "joiningTitle": "ミーティングへの参加を依頼中…", + "joiningWithPasswordTitle": "パスワードを使って参加中…", "knockButton": "参加を依頼", "knockTitle": "会議に参加したい人がいます", "knockingParticipantList": "待機中の参加者一覧", @@ -739,7 +739,7 @@ "callMe": "呼び出してください", "callMeAtNumber": "この番号に電話してください:", "calling": "呼び出し中", - "configuringDevices": "デバイスの設定中...", + "configuringDevices": "デバイスの設定中…", "connectedWithAudioQ": "オーディオを有効にして接続していますか?", "connection": { "good": "インターネット接続は良好のようです!", @@ -784,7 +784,6 @@ "or": "または", "premeeting": "プレミーティング", "screenSharingError": "画面共有のエラー:", - "showScreen": "プレミーティング画面を有効", "startWithPhone": "音声通話を開始", "videoOnlyError": "ビデオのエラー:", "videoTrackError": "ビデオトラックを生成できませんでした。", @@ -792,17 +791,17 @@ }, "presenceStatus": { "busy": "話し中", - "calling": "呼び出し中...", + "calling": "呼び出し中…", "connected": "接続されました", - "connecting": "接続中...", - "connecting2": "接続中*...", + "connecting": "接続中…", + "connecting2": "接続中*…", "disconnected": "切断されました", "expired": "期限切れ", "ignored": "無視", - "initializingCall": "通話の初期化中...", + "initializingCall": "通話の初期化中…", "invited": "招待", "rejected": "拒否", - "ringing": "呼び出し中..." + "ringing": "呼び出し中…" }, "privacyView": { "title": "プライバシー" @@ -827,7 +826,7 @@ "errorFetchingLink": "録画のリンクを取得中にエラーが発生しました。", "expandedOff": "録画が停止しました", "expandedOn": "このミーティングは現在録画中です。", - "expandedPending": "録画の開始中です...", + "expandedPending": "録画の開始中です…", "failedToStart": "録画の開始に失敗しました", "fileSharingdescription": "録画をミーティングの参加者と共有する", "highlight": "ハイライト", @@ -846,7 +845,7 @@ "localRecordingStartWarningTitle": "録画を停止して保存", "localRecordingVideoStop": "ビデオを停止すると録画も停止されます。停止してもよろしいですか?", "localRecordingVideoWarning": "ビデオを録画するためには録画開始前に有効化しておく必要があります", - "localRecordingWarning": "正しく録画をするために必ず現在のタブを選択してください。現在録画は1GBまで、約100分に制限されています。", + "localRecordingWarning": "正しく録画をするために必ず現在のタブを選択してください。", "loggedIn": "{{userName}} としてログイン", "noMicPermission": "マイクが認識できませんでした。マイクへのアクセス権を確認してください。", "noStreams": "音声・映像が検出されませんでした。", @@ -855,7 +854,7 @@ "on": "録画を開始しました", "onBy": "{{name}} が録画を開始しました", "onlyRecordSelf": "自身の音声・映像のみを録画する", - "pending": "ミーティングの録画準備中...", + "pending": "ミーティングの録画準備中…", "rec": "REC", "saveLocalRecording": "ローカルに録画を保存 (Beta)", "serviceDescription": "ビデオは録画サービスで録画されます", @@ -1126,22 +1125,13 @@ "failedToStart": "文字起こしを開始できませんでした", "labelToolTip": "ミーティングの文字起こしが行われています", "off": "文字起こしが停止されています", - "pending": "ミーティングの文字起こしの準備中...", + "pending": "ミーティングの文字起こしの準備中…", "start": "字幕の表示を開始", "stop": "字幕の表示を停止", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。", - "chromeGrantPermissions": "ブラウザーのポップアップで許可を選択してください。", - "edgeGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。", - "electronGrantPermissions": "マイクとカメラの共有を許可してください。", - "firefoxGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。", - "iexplorerGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。", - "nwjsGrantPermissions": "マイクとカメラの共有を許可してください。", - "operaGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。", - "react-nativeGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。", - "safariGrantPermissions": "ブラウザーのポップアップで許可するを選択してください。" + "grantPermissions": "マイクとカメラの共有を許可してください。." }, "videoSIPGW": { "busy": "リソースを開放しています。数分後にもう一度お試しください。", @@ -1208,7 +1198,7 @@ "image6": "フォレスト", "image7": "サンライズ", "none": "無し", - "pleaseWait": "しばらくお待ちください...", + "pleaseWait": "しばらくお待ちください…", "removeBackground": "背景削除", "slightBlur": "少しぼかし", "title": "バーチャル背景", diff --git a/lang/main-kab.json b/lang/main-kab.json index 7ed92a9bea89..aef29d7b5216 100644 --- a/lang/main-kab.json +++ b/lang/main-kab.json @@ -20,7 +20,7 @@ "noResults": "Ulac igmaḍ n unadi yemṣadan", "outlookEmail": "Imayl n Outlook", "phoneNumbers": "uṭṭunen n tiliɣri", - "searching": "Anadi...", + "searching": "Anadi…", "shareInvite": "Bḍu tinubga n temlilit", "shareLink": "Bḍu aseɣwen n usarag i usnubget n wiyaḍ", "shareStream": "Bḍu aseɣwen n usuddem usrid", @@ -90,7 +90,7 @@ "installExtensionText": "Sbedd asiɣzef i umsidef n uwitay n Google d Office 365" }, "connectingOverlay": { - "joiningRoom": "Tetteqqneḍ ɣer temlilit-ik·im..." + "joiningRoom": "Tetteqqneḍ ɣer temlilit-ik·im…" }, "connection": { "ATTACHED": "Isedda", @@ -102,9 +102,9 @@ "DISCONNECTED": "Ur yeqqin ara", "DISCONNECTING": "Tuffɣa", "ERROR": "Tuccḍa", - "FETCH_SESSION_ID": "Awway n usulay n tɣimit...", + "FETCH_SESSION_ID": "Awway n usulay n tɣimit…", "GET_SESSION_ID_ERROR": "Tuccḍa deg wawway n usulay n tɣimit: {{code}}", - "GOT_SESSION_ID": "Awway n usulay n tɣimit... Yemmed", + "GOT_SESSION_ID": "Awway n usulay n tɣimit… Yemmed", "LOW_BANDWIDTH": "Tettwasens tvidyut i {{displayName}} i wakken ad tettwaḥraz tehri n tseftit" }, "connectionindicator": { @@ -157,7 +157,7 @@ "ifHaveApp": "Ma yella tesɛiḍ yakan asnas:", "joinInApp": "Ttekki deg usarag s useqdec n usnas", "launchWebButton": "Seddu deg web", - "title": "Seddu timlilit-ik·im deg {{app}}...", + "title": "Seddu timlilit-ik·im deg {{app}}…", "tryAgainButton": "Ɛreḍ tikkelt-nniḍen ɣef tnarit" }, "defaultLink": "md. {{url}}", @@ -186,7 +186,7 @@ "Share": "Bḍu", "Submit": "Azen", "WaitForHostMsg": "Asarag mazal ur yebdi ara. Ma yella d kečč·kemm i d asenneftaɣ, ttxil-k·m ilaq usesteb. Ma yella xaṭi, ttxil-k·m rǧu asenneftaɣ ad d-yaweḍ.", - "WaitingForHostTitle": "Aṛaǧu n usenneftaɣ ...", + "WaitingForHostTitle": "Aṛaǧu n usenneftaɣ…", "Yes": "Ih", "accessibilityLabel": { "liveStreaming": "Asuddim usrid" @@ -206,9 +206,9 @@ "cameraUnknownError": "Ur tezmireḍ ara ad tesqedceḍ takamiṛat, ur neẓri ara acuɣer.", "cameraUnsupportedResolutionError": "Takamiṛat-ik·im ur tessefrak ara afray tvidyut yettusran.", "close": "Mdel", - "conferenceDisconnectMsg": "Ilaq-ak·am ad tesneqdeḍ tuqqna-inek·inem ɣer uzeṭṭa. Allus n tuqqna deg {{seconds}} tisinin...", + "conferenceDisconnectMsg": "Ilaq-ak·am ad tesneqdeḍ tuqqna-inek·inem ɣer uzeṭṭa. Allus n tuqqna deg {{seconds}} tisinin…", "conferenceDisconnectTitle": "Tettwasuffɣeḍ.", - "conferenceReloadMsg": "Nettaɛraḍ ad nṣeggem aya. Allus n tuqqna deg {{seconds}} tisinin...", + "conferenceReloadMsg": "Nettaɛraḍ ad nṣeggem aya. Allus n tuqqna deg {{seconds}} tisinin…", "conferenceReloadTitle": "Nesḥassef, yella wayen ur nteddu ara akken ilaq.", "confirm": "Sentem", "confirmNo": "Uhu", @@ -475,7 +475,7 @@ "errorLiveStreamNotEnabled": "Asuddem usrid ur yettwarmed ara deg {{email}}. Ma ulac aɣilif rmed asuddem usrid neɣ kcem ɣer umiḍan s usuddem usrid yettwaremden.", "expandedOff": "Asuddes usrid yettuseḥbes", "expandedOn": "Timlilit ha-tt-a akka tura tettɛeddi-d deg Youtuba.", - "expandedPending": "Asuddem usrid ha-t-an ad yebdu...", + "expandedPending": "Asuddem usrid ha-t-an ad yebdu…", "failedToStart": "Ur yesmurres wusrid deg uqlaɛ", "getStreamKeyManually": "Ur nessaweḍ ara ad d-nerr ula d yiwen n usuddem usrid. Ɛreḍ ad d-tawiḍ tasarut-ik·im n usuddem usrid seg Youtube.", "googlePrivacyPolicy": "Tasertit tabaḍnit n Google", @@ -486,7 +486,7 @@ "offBy": "{{name}} iseḥbes asuddem usrid", "on": "Yebda usuddem usrid", "onBy": "{{name}} yebda asuddem usrid", - "pending": "Beddu n usuddem usrid...", + "pending": "Beddu n usuddem usrid…", "serviceName": "Ameẓlu n usuddem usrid", "signIn": "Qqen s Google", "signInCTA": "Qqen neɣ sekcem tasarut-ik·im n usuddem usrid seg Youtube.", @@ -513,10 +513,10 @@ "invalidPassword": "Yir awal uffir", "joinRejectedMessage": "Asuter-inek·inem n uttekki yettwagi sɣur amaẓrag.", "joinTitle": "Ttekki deg temlilit", - "joinWithPasswordMessage": "Aneɛruḍ n uttekki s wawal uffir, ttxil-k·m rǧu...", + "joinWithPasswordMessage": "Aneɛruḍ n uttekki s wawal uffir, ttxil-k·m rǧu…", "joiningMessage": "Ad tettekkiḍ deg temlilit akken kan ara yeqbel walbaɛḍ asuter-inek·inem", - "joiningTitle": "Asuter n uttekki deg temlilit...", - "joiningWithPasswordTitle": "Attekki s wawal uffir...", + "joiningTitle": "Asuter n uttekki deg temlilit…", + "joiningWithPasswordTitle": "Attekki s wawal uffir…", "knockButton": "Suter attekki", "knockTitle": "Yella win yebɣan ad ittekki deg temlilit", "knockingParticipantList": "Tadbart n yimttekkiyen n usṭebṭeb", @@ -691,7 +691,7 @@ "callMe": "Siwel-iyi-d", "callMeAtNumber": "Siwel-iyi-d ɣer wuṭṭun-a:", "calling": "Asiwel", - "configuringDevices": "Amtawi n yibenkan...", + "configuringDevices": "Amtawi n yibenkan…", "connectedWithAudioQ": "Teqqneḍ s umeslaw?", "connection": { "good": "Tuqqna-inek·inem internet tettban tgerrez!", @@ -736,7 +736,6 @@ "or": "neɣ", "premeeting": "Timlilit tuzwirt", "screenSharingError": "Tuccḍa deg beṭṭu n ugdil:", - "showScreen": "Rmed agdil n temlilit tuzwirt", "startWithPhone": "Bdu s umeslaw n tiliɣri", "videoOnlyError": "Tuccḍa deg tvidyut:", "videoTrackError": "Asnulfu n track n tvidyut ulamek.", @@ -744,17 +743,17 @@ }, "presenceStatus": { "busy": "Yecɣel", - "calling": "Yessawal...", + "calling": "Yessawal…", "connected": "Yeqqen", "connecting": "Yetteqqen…", "connecting2": "Yetteqqen*…", "disconnected": "Yeffeɣ", "expired": "Yemmut", "ignored": "Yettwanef", - "initializingCall": "Awennez n usiwel...", + "initializingCall": "Awennez n usiwel…", "invited": "Yettwancad", "rejected": "Yettwagi", - "ringing": "Yettṣuni...." + "ringing": "Yettṣuni…." }, "profile": { "avatar": "avaṭar", @@ -775,7 +774,7 @@ "errorFetchingLink": "Tuccḍa lawan n tririt n useɣwen n usekles.", "expandedOff": "Asekles yettuseḥbes", "expandedOn": "Timlilit ha-tt-a akka tura tettwaseklas.", - "expandedPending": "Asekles ha-t-an yebda....", + "expandedPending": "Asekles ha-t-an yebda….", "failedToStart": "Beddu n usekles ur yeddi ara", "fileSharingdescription": "Bḍu asekles d yimttekkiyen n temlilit", "limitNotificationDescriptionNative": "Seg tuget n usuter, asekles-inek·inem ad yesɛu kan {{limit}} tesdidin. I yiseklas war tilas, ɛreḍ <3>{{app}}.", @@ -787,7 +786,7 @@ "offBy": "{{name}} iseḥbes asekles", "on": "Asekles", "onBy": "{{name}} yebda asekles", - "pending": "Aheyyi n usekles n temlilit...", + "pending": "Aheyyi n usekles n temlilit…", "rec": "REC", "serviceDescription": "Asekles-inek·inem ad yettwasekles s umeẓlu n usekles", "serviceDescriptionCloud": "Asekles deg usigna", @@ -1041,22 +1040,13 @@ "failedToStart": "Aseskel yegguma ad yebdu", "labelToolTip": "Timlilit ha-tt-an la tettwaseskal", "off": "Aseskel yettwaḥbes", - "pending": "Aheyyi i useskel n temlilit...", + "pending": "Aheyyi i useskel n temlilit…", "start": "Bdu askan n yizwal isnawanen", "stop": "Seḥbes askan n yiduzwilen", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Fren Sireg mara d-yessuter yiminig-ik tisurag.", - "chromeGrantPermissions": "Fren Sireg mara d-yessuter yiminig-ik tisurag.", - "edgeGrantPermissions": "Fren Ih mi ara d-yessuter yiminig-ik·im tisirag.", - "electronGrantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik", - "firefoxGrantPermissions": "Fren Bḍu ibenk yettwafernen mi ara d-yessuter yiminig-ik·im tisirag.", - "iexplorerGrantPermissions": "Fren Ih mara d-yessuter yiminig tisurag.", - "nwjsGrantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik", - "operaGrantPermissions": "Fren Sireg Mara d-yessuter yiminig-ik tisurag.", - "react-nativeGrantPermissions": "Fren Sireg mara d-yessuter yiminig-ik tisurag.", - "safariGrantPermissions": "Fren Ih mara d-yessuter yiminig tisurag." + "grantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik." }, "videoSIPGW": { "busy": "Aql-aɣ nxeddem ad d-neslelli tiɣbula. Ma ulac aɣilif, ɛreḍ tikkelt-nniḍen deg kra n tesdidin.", @@ -1117,7 +1107,7 @@ "image6": "Tiẓgi ", "image7": "Alluy n yiṭṭij", "none": "Ula d yiwen", - "pleaseWait": "Ttxil-k rǧu...", + "pleaseWait": "Ttxil-k rǧu…", "removeBackground": "Kkes agilal", "slightBlur": "Cwiṭ n uluɣu", "title": "Igilalen uhlisen", diff --git a/lang/main-ko.json b/lang/main-ko.json index e285eae3e445..ef7a7286e704 100644 --- a/lang/main-ko.json +++ b/lang/main-ko.json @@ -1,7 +1,11 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "회의 링크: {{url}}" + }, "add": "초대", "addContacts": "연락처로 초대하세요", + "contacts": "연락처", "copyInvite": "회의 초대 복사", "copyLink": "회의 링크 복사", "copyStream": "라이브 스트리밍 링크 복사", @@ -10,30 +14,26 @@ "defaultEmail": "기본 이메일", "disabled": "사람들을 초대 할 수 없습니다.", "failedToAdd": "참가자를 추가하지 못했습니다.", - "footerText": "전화 걸기가 비활성화되었습니다.", "googleEmail": "Google 이메일", "inviteMoreHeader": "회의에 혼자 참여하고 있습니다.", "inviteMoreMailSubject": "{{appName}} 회의에 참여하세요", "inviteMorePrompt": "더 많은 사람을 초대하세요", "linkCopied": "링크가 클립보드에 복사되었습니다.", - "loading": "사람 및 전화번호 검색", - "loadingNumber": "전화번호 확인중", - "loadingPeople": "초대할 사람 찾기", "noResults": "일치하는 검색 결과 없음", - "noValidNumbers": "전화 번호를 입력하십시오.", "outlookEmail": "Outlook 이메일", - "searchNumbers": "전화번호 추가", - "searchPeople": "인명 검색", - "searchPeopleAndNumbers": "인명 검색 또는 전화번호 추가", + "phoneNumbers": "전화번호", + "searching": "검색 중…", "shareInvite": "회의 초대 공유", "shareLink": "다른 사람을 초대하려면 회의 링크를 공유하세요.", "shareStream": "라이브 스트리밍 링크 공유", + "sipAddresses": "SIP 주소", "telephone": "전화: {{number}}", "title": "이 회의에 사람들을 초대하십시오", "yahooEmail": "Yahoo 이메일" }, "audioDevices": { "bluetooth": "블루투스", + "car": "자동차 오디오", "headphones": "헤드폰", "none": "사용 가능한 오디오 장치가 없습니다.", "phone": "폰", @@ -42,6 +42,44 @@ "audioOnly": { "audioOnly": "음성 전용" }, + "bandwidthSettings": { + "assumedBandwidthBps": "예: 10000000 (10 Mbps)", + "assumedBandwidthBpsWarning": "더 높은 값은 네트워크 문제를 일으킬 수 있습니다.", + "customValue": "사용자 정의 값", + "customValueEffect": "실제 bps 값을 설정하기 위해", + "leaveEmpty": "비워두기", + "leaveEmptyEffect": "추정값을 사용하도록 허용", + "possibleValues": "가능한 값들", + "setAssumedBandwidthBps": "예상 대역폭 (bps)", + "title": "대역폭 설정", + "zeroEffect": "비디오를 비활성화하려면" + }, + "breakoutRooms": { + "actions": { + "add": "분할 회의실 추가", + "autoAssign": "자동 분배", + "close": "닫기", + "join": "참여", + "leaveBreakoutRoom": "분할 회의실 나가기", + "more": "더 보기", + "remove": "제거", + "rename": "이름 변경", + "renameBreakoutRoom": "분할 회의실 이름 변경", + "sendToBreakoutRoom": "분할 회의실로 참가자 보내기" + }, + "breakoutList": "분할 회의실 목록", + "buttonLabel": "분할 회의실", + "defaultName": "분할 회의실 #{{index}}", + "hideParticipantList": "참가자 목록 숨기기", + "mainRoom": "주 회의실", + "notifications": { + "joined": "\"{{name}}\" 분할 회의실에 참여했습니다", + "joinedMainRoom": "주 회의실에 참여했습니다", + "joinedTitle": "분할 회의실" + }, + "showParticipantList": "참가자 목록 보기", + "title": "분할 회의실" + }, "calendarSync": { "addMeetingURL": "회의 링크 추가", "confirmAddLink": "이 이벤트에 Jitsi 링크를 추가 하시겠습니까?", @@ -60,12 +98,27 @@ "refresh": "캘린더 새로고침", "today": "오늘" }, + "carmode": { + "actions": { + "selectSoundDevice": "음성 장치 선택" + }, + "labels": { + "buttonLabel": "자동차 모드", + "title": "자동차 모드", + "videoStopped": "비디오가 중지되었습니다" + } + }, "chat": { "enter": "채팅방 입장", "error": "오류 : 메시지가 전송되지 않았습니다. 이유 : {{error}}", "fieldPlaceHolder": "메세지를 여기에 입력하세요", + "lobbyChatMessageTo": "로비 채팅 메시지 대상: {{recipient}}", + "message": "메시지", + "messageAccessibleTitle": "{{user}}님이 말합니다:", + "messageAccessibleTitleMe": "내가 말합니다:", "messageTo": "{{recipient}}에게 보내는 비공개 메시지", "messagebox": "메시지 입력", + "newMessages": "새 메시지", "nickname": { "popover": "닉네임을 선택하세요", "title": "채팅에서 사용할 닉네임을 입력하세요", @@ -74,17 +127,25 @@ "noMessagesMessage": "아직 회의에 메시지가 없습니다. 여기서 대화를 시작하세요!", "privateNotice": "{{recipient}}에게 보내는 비공개 메시지", "sendButton": "전송", + "smileysPanel": "이모지 패널", + "systemDisplayName": "시스템", + "tabs": { + "chat": "채팅", + "polls": "투표" + }, "title": "채팅", "titleWithPolls": "채팅", "you": "당신" }, "chromeExtensionBanner": { "buttonText": "Chrome 확장 프로그램을 설치합니다.", + "buttonTextEdge": "Edge 확장 프로그램 설치", + "close": "닫기", "dontShowAgain": "다시 보지 않기", "installExtensionText": "Google 캘린더 및 Office 365 확장 프로그램을 설치합니다." }, "connectingOverlay": { - "joiningRoom": "회의에 연결중 ..." + "joiningRoom": "회의에 연결중…" }, "connection": { "ATTACHED": "첨부", @@ -96,36 +157,49 @@ "DISCONNECTED": "연결 끊김", "DISCONNECTING": "연결 종료중", "ERROR": "에러", + "FETCH_SESSION_ID": "세션 ID 가져오는 중…", "GET_SESSION_ID_ERROR": "세션 ID 가져오기 오류 : {{code}}", - "GOT_SESSION_ID": "세션 ID를 가져오는중 ... 완료", - "LOW_BANDWIDTH": "대역폭을 절약하기 위해 {{displayName}}의 동영상이 중지되었습니다.", - "RECONNECTING": "네트워크 문제가 발생했습니다. 다시 연결중..." + "GOT_SESSION_ID": "세션 ID를 가져오는중… 완료", + "LOW_BANDWIDTH": "대역폭을 절약하기 위해 {{displayName}}의 동영상이 중지되었습니다." }, "connectionindicator": { "address": "주소:", + "audio_ssrc": "오디오 SSRC:", "bandwidth": "예상 대역폭:", "bitrate": "전송률:", - "bridgeCount": "", - "connectedTo": "", + "bridgeCount": "서버 수: ", + "codecs": "코덱 (A/V): ", + "connectedTo": "연결됨:", + "e2eeVerified": "종단 간 암호화 확인됨:", "framerate": "프레임 속도:", "less": "간략히 보기", - "localaddress": "", - "localport": "", + "localaddress": "로컬 주소:", + "localaddress_plural": "로컬 주소들:", + "localport": "로컬 포트:", + "localport_plural": "로컬 포트들:", + "maxEnabledResolution": "최대 전송 해상도", "more": "자세히 보기", + "no": "아니오", "packetloss": "패킷 손실:", + "participant_id": "참가자 ID:", "quality": { "good": "좋음", - "inactive": "Inactive", - "lost": "Lost", - "nonoptimal": "Nonoptimal", - "poor": "Poor" + "inactive": "비활성", + "lost": "손실됨", + "nonoptimal": "비최적", + "poor": "나쁨" }, - "remoteaddress": "", - "remoteport": "", + "remoteaddress": "원격 주소:", + "remoteaddress_plural": "원격 주소들:", + "remoteport": "원격 포트:", + "remoteport_plural": "원격 포트들:", "resolution": "해상도:", + "savelogs": "로그 저장", "status": "연결:", - "transport": "", - "turn": " (turn)" + "transport": "전송 방식:", + "transport_plural": "전송 방식들:", + "video_ssrc": "비디오 SSRC:", + "yes": "예" }, "dateUtils": { "earlier": "일찍이", @@ -135,17 +209,28 @@ "deepLinking": { "appNotInstalled": "회의에 참여하려면 모바일 앱 설치가 필요합니다", "description": "{{app}} 데스크톱 앱에서 회의를 시작했습니다. {{app}} 웹 응용 프로그램에서 다시 시도하거나 실행하십시오.", - "descriptionWithoutWeb": "", + "descriptionNew": "설치가 안되었나요? {{app}} 데스크톱 앱에서 회의를 시작하려고 시도했습니다.

다시 시도하거나 웹에서 실행할 수 있습니다.", + "descriptionWithoutWeb": "설치가 안되었나요? {{app}} 데스크톱 앱에서 회의를 시작하려고 시도했습니다.", "downloadApp": "앱 다운로드", + "downloadMobileApp": "앱 스토어에서 다운로드", "ifDoNotHaveApp": "앱이 설치되지 않은 경우:", "ifHaveApp": "앱이 설치되어 있는 경우:", "joinInApp": "앱을 사용하여 회의에 참여하세요.", + "joinInAppNew": "앱에서 참여하기", + "joinInBrowser": "브라우저에서 참여하기", + "launchMeetingLabel": "이 회의에 어떻게 참여하시겠습니까?", "launchWebButton": "웹에서 실행", - "openApp": "방으로 이동하기", + "noDesktopApp": "앱이 없으신가요?", + "noMobileApp": "앱이 없으신가요?", + "or": "또는", + "termsAndConditions": "계속하면 이용 약관에 동의하게 됩니다.", "title": "{{app}}에서 회의 시작…", - "tryAgainButton": "데스크톱에서 다시 시도하십시오" + "titleNew": "회의를 시작하는 중...", + "tryAgainButton": "데스크톱에서 다시 시도하십시오", + "unsupportedBrowser": "지원하지 않는 브라우저를 사용 중인 것 같습니다." }, - "defaultLink": "e.g. {{url}}", + "defaultLink": "예: {{url}}", + "defaultNickname": "예: 홍길동", "deviceError": { "cameraError": "카메라에 액세스하지 못했습니다", "cameraPermission": "카메라 권한을 얻는 중 오류가 발생했습니다", @@ -153,13 +238,22 @@ "microphonePermission": "마이크 권한을 얻는 중 오류가 발생했습니다" }, "deviceSelection": { + "hid": { + "callControl": "통화 제어", + "connectedDevices": "연결된 장치:", + "deleteDevice": "장치 삭제", + "pairDevice": "장치 연결" + }, "noPermission": "허가 거부", "previewUnavailable": "미리보기를 사용할 수 없음", - "selectADevice": "디바이스 선택", + "selectADevice": "장치 선택", "testAudio": "테스트 사운드 재생" }, + "dialIn": { + "screenTitle": "전화 접속 요약" + }, "dialOut": { - "statusMessage": "지금은 {{status}}입니다" + "statusMessage": "현재 상태: {{status}}" }, "dialog": { "Back": "뒤로가기", @@ -170,21 +264,33 @@ "Share": "공유", "Submit": "제출", "WaitForHostMsg": "회의가 시작되지 않았습니다. 호스트인 경우 인증하십시오. 그렇지 않으면 호스트가 도착할 때까지 기다리십시오.", - "WaitingForHost": "호스트를 기다리는 중입니다…", + "WaitForHostNoAuthMsg": "회의가 시작되지 않았습니다. 호스트가 도착할 때까지 기다리십시오.", + "WaitingForHostButton": "호스트를 기다립니다", + "WaitingForHostTitle": "호스트를 기다리는 중…", "Yes": "예", "accessibilityLabel": { - "liveStreaming": "실시간 스트리밍:" + "Cancel": "취소 (대화 상자 나가기)", + "Ok": "확인 (저장하고 대화 상자 나가기)", + "close": "대화 상자 닫기", + "liveStreaming": "실시간 스트리밍:", + "sharingTabs": "공유 옵션" }, "add": "추가", + "addMeetingNote": "회의 노트 추가", + "addOptionalNote": "노트 추가 (선택사항):", "allow": "허락", - "alreadySharedVideoMsg": "다른 참가자가 이미 비디오를 공유하고 있습니다. 이 회의는 한 번에 하나의 공유 비디오만 허용합니다.", - "alreadySharedVideoTitle": "한 번에 하나의 공유 비디오만 허용됩니다", + "allowToggleCameraDialog": "{{initiatorName}}에게 카메라 전환을 허용하시겠습니까?", + "allowToggleCameraTitle": "카메라 전환 허용?", + "alreadySharedVideoMsg": "다른 참가자가 이미 비디오를 공유하고 있습니다. 한 번에 하나의 비디오만 공유 가능합니다.", + "alreadySharedVideoTitle": "비디오 공유는 한 번에 하나만 허용됩니다", "applicationWindow": "응용 프로그램 창", - "cameraConstraintFailedError": "카메라가 필요한 제약 조건 중 일부를 만족하지 못합니다", + "authenticationRequired": "인증이 필요합니다", + "cameraConstraintFailedError": "카메라가 필요한 제약 조건을 충족하지 못했습니다", "cameraNotFoundError": "카메라를 찾을 수 없습니다", "cameraNotSendingData": "카메라에 액세스 할 수 없습니다. 다른 응용 프로그램이 장치를 사용하고 있는지 확인한 후 설정 메뉴에서 다른 장치를 선택하거나 응용 프로그램을 다시 로드하십시오.", "cameraNotSendingDataTitle": "카메라에 액세스 할 수 없습니다", - "cameraPermissionDeniedError": "카메라 사용 권한을 부여하지 않았습니다. 회의에 계속 참여할 수 있지만 다른 참석자는 귀하를 볼 수 없습니다. 검색 주소창의 카메라 버튼을 사용하여 문제를 해결하십시오.", + "cameraPermissionDeniedError": "카메라 사용 권한이 부여되지 않았습니다. 회의에 계속 참여할 수 있지만 다른 참가자는 귀하를 볼 수 없습니다. 검색 주소창의 카메라 버튼을 사용하여 문제를 해결하십시오.", + "cameraTimeoutError": "비디오 소스를 시작할 수 없습니다. 시간 초과가 발생했습니다!", "cameraUnknownError": "알 수 없는 이유로 카메라를 사용할 수 없습니다", "cameraUnsupportedResolutionError": "카메라가 필요한 비디오 해상도를 지원하지 않습니다", "close": "닫기", @@ -196,36 +302,49 @@ "confirmNo": "아니요", "confirmYes": "예", "connectError": "죄송합니다. 문제가 발생하여 회의에 연결할 수 없습니다", - "connectErrorWithMsg": "죄송합니다. 뭔가 잘못되어 회의에 연결할 수 없습니다: {{msg}}", + "connectErrorWithMsg": "죄송합니다. 문제가 발생하여 회의에 연결할 수 없습니다: {{msg}}", "connecting": "연결중", "contactSupport": "지원 연락처", + "copied": "복사됨", "copy": "복사", - "dismiss": "", + "demoteParticipantDialog": "이 참가자를 방문자로 이동시키겠습니까?", + "demoteParticipantTitle": "방문자로 이동", + "dismiss": "닫기", "displayNameRequired": "당신의 이름은 무엇입니까?", "done": "완료", + "e2eeDescription": "종단 간 암호화는 현재 실험적입니다. 종단 간 암호화를 켜면 전화 참여와 같은 서버 제공 서비스가 비활성화됩니다. 또한 이 회의는 insertable streams을 지원하는 브라우저에서만 작동합니다.", + "e2eeDisabledDueToMaxModeDescription": "참가자가 너무 많아서 종단 간 암호화를 활성화할 수 없습니다.", + "e2eeLabel": "종단 간 암호화 활성화", + "e2eeWarning": "경고: 이 회의의 모든 참가자가 종단 간 암호화를 지원하는 것 같지 않습니다. 활성화하면 그들은 귀하를 볼 수 없거나 들을 수 없습니다.", + "e2eeWillDisableDueToMaxModeDescription": "경고: 더 많은 참가자가 회의에 참여하면 종단 간 암호화가 자동으로 비활성화됩니다.", + "embedMeeting": "회의 삽입", "enterDisplayName": "당신의 이름을 입력해주세요.", "error": "에러", - "externalInstallationMsg": "데스크톱 공유 확장 프로그램을 설치해야 합니다", - "externalInstallationTitle": "확장 프로그램이 필요합니다", - "goToStore": "웹 스토어로 이동", - "gracefulShutdown": "서비스는 현재 유지 관리를 위해 중단되었습니다. 나중에 다시 시도 해주십시오.", + "errorRoomCreationRestriction": "너무 빠르게 시도했습니다. 잠시 후 다시 시도해 주세요.", + "gracefulShutdown": "서비스가 현재 유지 관리를 위해 중단되었습니다. 나중에 다시 시도 해주십시오.", + "grantModeratorDialog": "이 참가자({{participantName}})에게 중재자 권한을 부여하시겠습니까?", + "grantModeratorTitle": "중재자 권한 부여", + "hide": "숨기기", + "hideShareAudioHelper": "이 대화 상자를 다시 표시하지 않음", "incorrectPassword": "잘못된 사용자 이름 또는 비밀번호", "incorrectRoomLockPassword": "잘못된 비밀번호", - "inlineInstallExtension": "지금 설치", - "inlineInstallationMsg": "데스크톱 공유 확장 프로그램을 설치해야합니다", - "internalError": "죄송합니다. 뭔가 잘못 됐습니다. 다음 오류가 발생했습니다: {{error}}", + "internalError": "죄송합니다. 문제가 발생하여 회의에 연결할 수 없습니다: {{error}}", "internalErrorTitle": "내부 에러", "kickMessage": "자세한 내용은 {{participantDisplayName}}에 문의하세요.", "kickParticipantButton": "추방", "kickParticipantDialog": "이 참가자를 정말 추방 하시겠습니까?", "kickParticipantTitle": "이 참가자를 추방 하시겠습니까?", "kickTitle": "{{participantDisplayName}} 님이 회의에서 퇴장했습니다.", + "linkMeeting": "회의 연결", + "linkMeetingTitle": "회의를 Salesforce에 연결", "liveStreaming": "실시간 스트리밍", - "liveStreamingDisabledForGuestTooltip": "게스트는 라이브 스트리밍을 시작할 수 없습니다.", - "liveStreamingDisabledTooltip": "라이브 스트림 시작이 비활성화되었습니다.", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "녹화 중에는 사용할 수 없습니다", + "localUserControls": "로컬 사용자 컨트롤", "lockMessage": "회의를 비공개하지 못했습니다", "lockRoom": "회의 추가 $t(lockRoomPasswordUppercase)", "lockTitle": "비공개 실패", + "login": "로그인", + "loginQuestion": "로그인하고 회의를 떠나시겠습니까?", "logoutQuestion": "로그아웃하고 컨퍼런스를 중지하시겠습니까?", "logoutTitle": "로그아웃", "maxUsersLimitReached": "회의의 최대 참가자 수에 도달했습니다. 회의 소유자에게 연락하거나 나중에 다시 시도하십시오!", @@ -235,35 +354,44 @@ "micNotSendingData": "컴퓨터의 설정으로 이동하여 마이크 음소거를 해제하고 레벨을 조정하세요.", "micNotSendingDataTitle": "시스템 설정에 의해 마이크가 음소거되었습니다.", "micPermissionDeniedError": "마이크를 사용할 수있는 권한을 부여하지 않았습니다. 회의에 계속 참여할 수는 있지만 다른 사람들은 듣지 않습니다. 검색 주소창의 카메라 버튼을 사용하여 문제를 해결하십시오.", + "micTimeoutError": "오디오 소스를 시작할 수 없습니다. 시간 초과가 발생했습니다!", "micUnknownError": "알 수 없는 이유로 마이크를 사용할 수 없습니다", + "moderationAudioLabel": "참가자가 스스로 음소거 해제 허용", + "moderationVideoLabel": "참가자가 자신의 비디오 시작 허용", "muteEveryoneDialog": "모든 참가자를 음소거 하시겠습니까? 당신이 다른 사람들의 음소거를 해제 할 수는 없지만 언제든지 다른 사람들은 스스로 음소거를 해제할 수 있습니다.", + "muteEveryoneDialogModerationOn": "참가자는 언제든지 발언 요청을 보낼 수 있습니다.", "muteEveryoneElseDialog": "당신이 다른 사람들의 음소거를 해제 할 수는 없지만 언제든지 다른 사람들은 스스로 음소거를 해제할 수 있습니다.", - "muteEveryoneElseTitle": "{{whom}} 를 제외하고 전부 음소거 하시겠습니까?", + "muteEveryoneElseTitle": "{{whom}}을(를) 제외하고 전부 음소거 하시겠습니까?", "muteEveryoneElsesVideoDialog": "당신이 다른 사람들의 카메라를 다시 켤 수는 없지만 언제든지 다른 사람들은 스스로 카메라를 켤 수 있습니다.", - "muteEveryoneElsesVideoTitle": "{{whom}} 를 제외하고 전부 카메라를 비활성화 하시겠습니까?", + "muteEveryoneElsesVideoTitle": "{{whom}}을(를) 제외하고 전부 카메라를 비활성화 하시겠습니까?", + "muteEveryoneSelf": "당신 자신", "muteEveryoneStartMuted": "지금부터 모두 음소거 됩니다.", "muteEveryoneTitle": "모두 음소거 하시겠습니까?", "muteEveryonesVideoDialog": "모든 참가자의 카메라를 비활성화 하시겠습니까? 당신이 다른 사람들의 카메라를 다시 켤 수는 없지만 언제든지 다른 사람들은 스스로 카메라를 켤 수 있습니다.", + "muteEveryonesVideoDialogModerationOn": "참가자는 언제든지 비디오를 켜기 위한 요청을 보낼 수 있습니다.", "muteEveryonesVideoDialogOk": "비활성화", "muteEveryonesVideoTitle": "모든 카메라를 비활성화 하시겠습니까?", "muteParticipantBody": "당신이 다른 사람들의 음소거를 해제 할 수는 없지만 언제든지 다른 사람들은 스스로 음소거를 해제할 수 있습니다.", "muteParticipantButton": "음소거", - "muteParticipantDialog": "이 참가자를 음소거 하시겠습니까? 당신이 다른 사람들의 음소거를 해제 할 수는 없지만 언제든지 다른 사람들은 스스로 음소거를 해제할 수 있습니다.", - "muteParticipantTitle": "이 참가자를 음소거 하시겠습니까?", "muteParticipantsVideoBody": "당신이 다른 사람들의 카메라를 다시 켤 수는 없지만 언제든지 다른 사람들은 스스로 카메라를 켤 수 있습니다.", + "muteParticipantsVideoBodyModerationOn": "당신은 카메라를 다시 켤 수 없으며 그들도 마찬가지입니다.", "muteParticipantsVideoButton": "카메라 비활성화", + "muteParticipantsVideoDialog": "이 참가자의 카메라를 끄시겠습니까? 당신은 카메라를 다시 켤 수 없지만, 그들은 언제든지 다시 켤 수 있습니다.", + "muteParticipantsVideoDialogModerationOn": "이 참가자의 카메라를 끄시겠습니까? 당신은 카메라를 다시 켤 수 없으며 그들도 마찬가지입니다.", "muteParticipantsVideoTitle": "이 참가자의 카메라를 비활성화 하시겠습니까?", + "noDropboxToken": "유효한 Dropbox 토큰이 없습니다", + "password": "비밀번호", "passwordLabel": "잠긴 회의입니다. 회의에 참여하려면 비밀번호를 입력하세요.", "passwordNotSupported": "회의 비밀번호 설정은 지원되지 않습니다", "passwordNotSupportedTitle": "비밀번호 미지원", "passwordRequired": "비밀번호 필수", - "popupError": "브라우저가이 사이트의 팝업 창을 차단하고 있습니다. 브라우저의 보안 설정에서 팝업을 활성화하고 다시 시도하십시오.", - "popupErrorTitle": "팝업 차단됨", + "permissionCameraRequiredError": "비디오로 회의에 참여하려면 카메라 권한이 필요합니다. 설정에서 허용하십시오", + "permissionErrorTitle": "권한 필요", + "permissionMicRequiredError": "오디오로 회의에 참여하려면 마이크 권한이 필요합니다. 설정에서 허용하십시오", "readMore": "더보기", + "recentlyUsedObjects": "최근에 사용한 객체", "recording": "녹화", - "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "라이브 스트리밍 중에는 사용하실 수 없습니다.", - "recordingDisabledForGuestTooltip": "게스트는 녹화를 시작할 수 없습니다.", - "recordingDisabledTooltip": "녹화가 비활성화 되었습니다.", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "라이브 스트리밍이 활성화되어 있는 동안에는 사용할 수 없습니다", "rejoinNow": "지금 재가입", "remoteControlAllowedMessage": "{{user}}이(가) 원격 제어 요청을 수락했습니다", "remoteControlDeniedMessage": "{{user}}이(가) 원격 제어 요청을 거부했습니다", @@ -272,29 +400,56 @@ "remoteControlShareScreenWarning": "\"허락\"을 누르면 화면을 공유합니다", "remoteControlStopMessage": "원격 제어 세션이 종료되었습니다", "remoteControlTitle": "원격 데스크탑 컨트롤", + "remoteUserControls": "{{username}}의 원격 사용자 컨트롤", "removePassword": "비밀번호 제거", "removeSharedVideoMsg": "공유한 동영상을 삭제하시겠습니까?", "removeSharedVideoTitle": "공유된 동영상 삭제", + "renameBreakoutRoomLabel": "방 이름", + "renameBreakoutRoomTitle": "분할 회의실 이름 변경", "reservationError": "예약 시스템 오류", "reservationErrorMsg": "오류 코드: {{code}}, 메시지: {{msg}}", "retry": "재시도", "screenSharingAudio": "오디오 공유", - "screenSharingFailedToInstall": "죄송합니다. 화면 공유 확장 프로그램을 설치하지 못했습니다.", - "screenSharingFailedToInstallTitle": "화면 공유 확장 프로그램을 설치하지 못했습니다", - "screenSharingFirefoxPermissionDeniedError": "화면을 공유하는 동안 문제가 발생했습니다. 그렇게 할 수 있는 권한을 부여했는지 확인하십시오.", - "screenSharingFirefoxPermissionDeniedTitle": "죄송합니다. 화면 공유를 시작할 수 없었습니다!", + "screenSharingFailed": "죄송합니다! 문제가 발생하여 화면 공유를 시작할 수 없었습니다!", + "screenSharingFailedTitle": "화면 공유 실패!", "screenSharingPermissionDeniedError": "죄송합니다. 화면 공유 확장 권한으로 문제가 발생했습니다. 다시 로드하고 재시도하십시오.", + "searchInSalesforce": "Salesforce에서 검색", + "searchResults": "검색 결과({{count}})", + "searchResultsDetailsError": "소유자 데이터를 검색하는 동안 문제가 발생했습니다.", + "searchResultsError": "데이터를 검색하는 동안 문제가 발생했습니다.", + "searchResultsNotFound": "검색 결과를 찾을 수 없습니다.", + "searchResultsTryAgain": "대체 키워드를 사용해보세요.", "sendPrivateMessage": "최근에 비공개 메시지를 받았습니다. 비공개로 답장을 보내시겠습니까, 아니면 그룹에 메시지를 보내시겠습니까?", "sendPrivateMessageCancel": "그룹에 보내기", "sendPrivateMessageOk": "비공개로 보내기", "sendPrivateMessageTitle": "비공개로 보낼까요?", "serviceUnavailable": "서비스를 사용할 수 없음", "sessTerminated": "통화 종료", + "sessTerminatedReason": "회의가 종료되었습니다", + "sessionRestarted": "연결 문제로 인해 통화가 재시작되었습니다.", + "shareAudio": "계속", + "shareAudioAltText": "원하는 콘텐츠를 공유하려면 \"브라우저 탭\"으로 이동하여 콘텐츠를 선택하고 \"오디오 공유\" 체크 표시를 활성화한 다음 \"공유\" 버튼을 클릭하십시오", + "shareAudioTitle": "오디오 공유 방법", + "shareAudioWarningD1": "오디오를 공유하기 전에 화면 공유를 중지해야 합니다.", + "shareAudioWarningD2": "화면 공유를 다시 시작하고 \"오디오 공유\" 옵션을 선택해야 합니다.", + "shareAudioWarningH1": "오디오만 공유하려면:", + "shareAudioWarningTitle": "오디오를 공유하기 전에 화면 공유를 중지해야 합니다", + "shareMediaWarningGenericH2": "화면과 오디오를 공유하려면", + "shareScreenWarningD1": "화면을 공유하기 전에 오디오 공유를 중지해야 합니다.", + "shareScreenWarningD2": "오디오 공유를 중지하고 화면 공유를 시작한 다음 \"오디오 공유\" 옵션을 선택해야 합니다.", + "shareScreenWarningH1": "화면만 공유하려면:", + "shareScreenWarningTitle": "화면을 공유하기 전에 오디오 공유를 중지해야 합니다", + "shareVideoConfirmPlay": "외부 웹사이트를 열려고 합니다. 계속하시겠습니까?", + "shareVideoConfirmPlayTitle": "{{name}}님이 동영상을 공유했습니다.", "shareVideoLinkError": "올바른 YouTube 링크를 제공하십시오", + "shareVideoLinkStopped": "{{name}}님의 동영상이 중지되었습니다.", "shareVideoTitle": "비디오 공유", "shareYourScreen": "화면공유", "shareYourScreenDisabled": "화면 공유가 비활성화 되었습니다.", - "shareYourScreenDisabledForGuest": "게스트는 화면을 공유 할 수 없습니다.", + "sharedVideoDialogError": "오류: 잘못되었거나 금지된 URL", + "sharedVideoLinkPlaceholder": "YouTube 링크 또는 직접 동영상 링크", + "show": "보이기", + "start": "시작", "startLiveStreaming": "라이브 스트리밍 시작", "startRecording": "녹화 시작", "startRemoteControlErrorMessage": "원격 제어 세션을 시작하는 동안 오류가 발생했습니다", @@ -306,26 +461,74 @@ "thankYou": "{{appName}}을 이용해 주셔서 감사합니다!", "token": "토큰", "tokenAuthFailed": "죄송합니다. 통화에 참여하실 수 없습니다.", + "tokenAuthFailedReason": { + "audInvalid": "잘못된 `aud` 값입니다. `jitsi`여야 합니다.", + "contextNotFound": "`context` 객체가 페이로드에 없습니다.", + "expInvalid": "잘못된 `exp` 값입니다.", + "featureInvalid": "잘못된 기능: {{feature}}, 아직 구현되지 않았을 수 있습니다.", + "featureValueInvalid": "기능의 잘못된 값: {{feature}}.", + "featuresNotFound": "`features` 객체가 페이로드에 없습니다.", + "headerNotFound": "헤더가 없습니다.", + "issInvalid": "잘못된 `iss` 값입니다. `chat`이어야 합니다.", + "kidMismatch": "키 ID(kid)가 sub와 일치하지 않습니다.", + "kidNotFound": "키 ID(kid)가 없습니다.", + "nbfFuture": "`nbf` 값이 미래에 있습니다.", + "nbfInvalid": "잘못된 `nbf` 값입니다.", + "payloadNotFound": "페이로드가 없습니다.", + "tokenExpired": "토큰이 만료되었습니다." + }, "tokenAuthFailedTitle": "인증 실패", - "transcribing": "", + "tokenAuthFailedWithReasons": "죄송합니다, 이 통화에 참여할 수 없습니다. 가능한 이유: {{reason}}", + "tokenAuthUnsupported": "토큰 URL은 지원되지 않습니다.", + "transcribing": "스크립트 작성 중", "unlockRoom": "회의 비밀번호 제거", + "user": "사용자", + "userIdentifier": "사용자 식별자", "userPassword": "사용자 비밀번호", + "verifyParticipantConfirm": "일치합니다", + "verifyParticipantDismiss": "일치하지 않습니다", + "verifyParticipantQuestion": "실험적: 참가자 {{participantName}}에게 동일한 내용이 동일한 순서로 표시되는지 확인하십시오.", + "verifyParticipantTitle": "사용자 확인", + "videoLink": "비디오 링크", + "viewUpgradeOptions": "업그레이드 옵션 보기", + "viewUpgradeOptionsContent": "녹화, 전사, RTMP 스트리밍 등과 같은 프리미엄 기능에 무제한으로 액세스하려면 요금제를 업그레이드해야 합니다.", + "viewUpgradeOptionsTitle": "프리미엄 기능을 발견했습니다!", + "whiteboardLimitContent": "죄송합니다, 동시 화이트보드 사용자 수 한도에 도달했습니다.", + "whiteboardLimitReference": "자세한 내용은", + "whiteboardLimitReferenceUrl": "당사 웹사이트", + "whiteboardLimitTitle": "화이트보드 사용 제한", "yourEntireScreen": "전체 화면" }, "documentSharing": { "title": "문서 공유" }, + "e2ee": { + "labelToolTip": "이 통화의 오디오 및 비디오 통신은 종단 간 암호화됩니다" + }, + "embedMeeting": { + "title": "이 회의를 임베드하기" + }, "feedback": { + "accessibilityLabel": { + "yourChoice": "귀하의 선택: {{rating}}" + }, "average": "보통", "bad": "나쁨", "detailsLabel": "더 자세히 알려주십시오", "good": "좋음", "rateExperience": "회의 경험 평가하기", + "star": "별", "veryBad": "매우 나쁨", "veryGood": "매우 좋음" }, - "helpView": { - "title": "지원 센터" + "filmstrip": { + "accessibilityLabel": { + "heading": "비디오 썸네일" + } + }, + "giphy": { + "noResults": "결과를 찾을 수 없습니다 :(", + "search": "GIPHY 검색" }, "incomingCall": { "answer": "응답", @@ -339,19 +542,25 @@ "addPassword": "$t(lockRoomPassword) 추가", "cancelPassword": "$t(lockRoomPassword) 취소", "conferenceURL": "링크:", + "copyNumber": "번호 복사", "country": "지역", - "dialANumber": "회의에 참여하려면이 번호 중 하나를 누른 다음 PIN을 입력하십시오.", + "dialANumber": "회의에 참여하려면 이 번호 중 하나를 누른 다음 PIN을 입력하십시오.", "dialInConferenceID": "PIN:", "dialInNotSupported": "죄송합니다. 현재 전화를 걸 수 없습니다.", "dialInNumber": "전화 접속:", "dialInSummaryError": "지금 전화 접속 정보를 가져 오는 중에 오류가 발생했습니다. 나중에 다시 시도하십시오.", - "dialInTollFree": "", + "dialInTollFree": "수신자 부담", "genericError": "일반적인 오류가 발생했습니다", - "inviteLiveStream": "이 회의의 실시간 스트림을 보려면이 링크를 클릭하십시오: {{url}}", + "inviteLiveStream": "이 회의의 실시간 스트림을 보려면 이 링크를 클릭하십시오: {{url}}", "invitePhone": "폰으로 참여하려면, 이것을 누르십시오: {{number}},,{{conferenceID}}#\n", - "invitePhoneAlternatives": "", + "invitePhoneAlternatives": "다른 전화 접속 번호를 찾으십니까?\n회의 전화 접속 번호 보기: {{url}}\n\n\n방 전화로도 전화 접속하는 경우, 오디오에 연결하지 않고 참여하세요: {{silentUrl}}", + "inviteSipEndpoint": "SIP 주소를 사용하여 참여하려면 다음을 입력하십시오: {{sipUri}}", + "inviteTextiOSInviteUrl": "다음 링크를 클릭하여 참여하세요: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "방 전화로 전화 접속하는 경우, 이 링크를 사용하여 오디오에 연결하지 않고 참여하세요: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}}님이 회의에 초대했습니다.", + "inviteTextiOSPhone": "전화로 참여하려면 이 번호를 사용하세요: {{number}},,{{conferenceID}}#. 다른 번호를 찾고 있다면, 전체 목록은 다음과 같습니다: {{didUrl}}.", "inviteURLFirstPartGeneral": "회의에 초대되었습니다.", - "inviteURLFirstPartPersonal": "{{name}}이 회의에 초대하였습니다.\n", + "inviteURLFirstPartPersonal": "{{name}}님이 회의에 초대하였습니다.\n", "inviteURLSecondPart": "\n회의에 참여하기:\n{{url}}\n", "label": "회의 정보", "liveStreamURL": "실시간 스트리밍:", @@ -359,10 +568,16 @@ "noNumbers": "전화 접속 번호 없음", "noPassword": "없음", "noRoom": "전화 접속이 가능한 방을 지정하지 않았습니다", + "noWhiteboard": "화이트보드를 로드할 수 없습니다.", "numbers": "전화 접속 번호", "password": "비밀번호", + "reachedLimit": "요금제 한도에 도달했습니다.", + "sip": "SIP 주소", + "sipAudioOnly": "SIP 오디오 전용 주소", "title": "공유", - "tooltip": "링크 공유 및 회의에 대한 정보" + "tooltip": "링크 공유 및 회의에 대한 정보", + "upgradeOptions": "업그레이드 옵션을 확인하세요", + "whiteboardError": "화이트보드를 로드하는 중 오류가 발생했습니다. 나중에 다시 시도하십시오." }, "inlineDialogFailure": { "msg": "약간의 문제가 있습니다", @@ -378,10 +593,12 @@ "searchPlaceholder": "참가자 또는 전화 번호", "send": "전송" }, + "jitsiHome": "{{logo}} 로고, 홈페이지 링크", "keyboardShortcuts": { "focusLocal": "자신의 동영상에 포커스", "focusRemote": "다른 발신자의 동영상에 포커스", "fullScreen": "전체화면 표시 또는 종료", + "giphyMenu": "GIPHY 메뉴 전환", "keyboardShortcuts": "키보드 단축키", "localRecording": "로컬 녹화 컨트롤 표시 또는 숨기기", "mute": "마이크 음소거 또는 음소거 해제", @@ -390,32 +607,43 @@ "showSpeakerStats": "접속자 통계 표시", "toggleChat": "채팅 표시 또는 숨기기", "toggleFilmstrip": "동영상 표시 또는 숨기기", + "toggleParticipantsPane": "참가자 창 표시 또는 숨기기", "toggleScreensharing": "카메라와 화면 공유간에 전환", "toggleShortcuts": "도움말 메뉴 표시 또는 숨기기", - "videoMute": "카메라 시작 또는 중지", - "videoQuality": "비디오 품질" + "videoMute": "카메라 시작 또는 중지" + }, + "largeVideo": { + "screenIsShared": "화면을 공유 중입니다", + "showMeWhatImSharing": "내가 공유하는 내용을 보여줘" }, "liveStreaming": { "busy": "스트리밍 자원을 확보하기 위해 노력하고 있습니다. 몇 분 후에 다시 시도하십시오.", "busyTitle": "모든 스트리머가 현재 사용 중입니다", "changeSignIn": "계정을 전환하십시오", "choose": "실시간 스트리밍을 선택하세요", - "chooseCTA": "스트리밍 옵션을 선택하십시오. 현재 {{email}} (으)로 로그인되어 있습니다.", + "chooseCTA": "스트리밍 옵션을 선택하십시오. 현재 {{email}}(으)로 로그인되어 있습니다.", "enterStreamKey": "YouTube 실시간 스트리밍 키를 입력하십시오", "error": "실시간 스트리밍에 실패했습니다. 다시 시도하십시오.", "errorAPI": "YouTube 방송에 액세스하는 중에 오류가 발생했습니다. 다시 로그인하십시오.", "errorLiveStreamNotEnabled": "{{email}}에 의해 라이브 스트리밍이 활성화되지 않았습니다. 라이브 스트리밍을 활성화하거나 라이브 스트리밍이 활성화된 계정으로 로그인하십시오.", "expandedOff": "라이브 스트리밍이 중지되었습니다", "expandedOn": "현재 회의가 YouTube로 스트리밍되고 있습니다.", - "expandedPending": "라이브 스트리밍이 시작됩니다 ...", + "expandedPending": "라이브 스트리밍이 시작됩니다…", "failedToStart": "실시간 스트리밍 시작 실패", "getStreamKeyManually": "실시간 스트림을 가져올 수 없습니다. YouTube에서 실시간 스트림 키를 받아보세요.", "googlePrivacyPolicy": "Google 개인 정보 보호 정책", + "inProgress": "녹화 또는 실시간 스트리밍 진행 중", "invalidStreamKey": "라이브 스트림 키가 잘못되었을 수 있습니다.", + "limitNotificationDescriptionNative": "스트리밍이 {{limit}}분으로 제한됩니다. 무제한 스트리밍을 사용하려면 {{app}}을 시도해 보세요.", + "limitNotificationDescriptionWeb": "수요가 많아 스트리밍이 {{limit}}분으로 제한됩니다. 무제한 스트리밍을 사용하려면 {{app}}을 시도해 보세요.", "off": "실시간 스트리밍이 중지됨", + "offBy": "{{name}}님이 실시간 스트리밍을 중지했습니다", "on": "실시간 스트리밍", + "onBy": "{{name}}님이 실시간 스트리밍을 시작했습니다", "pending": "실시간 스트리밍 시작…", + "policyError": "실시간 스트림을 너무 빨리 시작하려고 했습니다. 나중에 다시 시도하십시오!", "serviceName": "실시간 스트리밍 서비스", + "sessionAlreadyActive": "이 세션은 이미 녹화되거나 실시간 스트리밍 중입니다.", "signIn": "Google로 로그인", "signInCTA": "YouTube에서 로그인하거나 실시간 스트리밍 키를 입력하십시오", "signOut": "로그아웃", @@ -426,33 +654,73 @@ "unavailableTitle": "실시간 스트리밍을 사용할 수 없음", "youtubeTerms": "YouTube 서비스 약관" }, + "lobby": { + "backToKnockModeButton": "참여 요청", + "chat": "채팅", + "dialogTitle": "로비 모드", + "disableDialogContent": "로비 모드가 현재 활성화되어 있습니다. 이 기능은 원치 않는 참가자가 회의에 참여하지 못하도록 보장합니다. 이를 비활성화하시겠습니까?", + "disableDialogSubmit": "비활성화", + "emailField": "이메일 주소를 입력하세요", + "enableDialogPasswordField": "비밀번호 설정 (선택 사항)", + "enableDialogSubmit": "활성화", + "enableDialogText": "로비 모드는 중재자의 승인을 거쳐서만 참가자들이 회의에 입장할 수 있도록 보호합니다.", + "enterPasswordButton": "회의 비밀번호 입력", + "enterPasswordTitle": "회의에 참여하려면 비밀번호를 입력하세요", + "errorMissingPassword": "회의 비밀번호를 입력하세요", + "invalidPassword": "잘못된 비밀번호", + "joinRejectedMessage": "중재자가 귀하의 참여 요청을 거부했습니다.", + "joinRejectedTitle": "참여 요청 거부됨", + "joinTitle": "회의 참여", + "joinWithPasswordMessage": "비밀번호로 참여하려고 시도 중입니다, 잠시만 기다려 주세요…", + "joiningMessage": "중재자가 참여 요청을 승인하면 회의에 참여하게 됩니다.", + "joiningTitle": "회의 참여 요청 중…", + "joiningWithPasswordTitle": "비밀번호로 참여 중…", + "knockButton": "참여 요청", + "knockTitle": "누군가 회의에 참여를 요청했습니다", + "knockingParticipantList": "참여 요청한 참가자 목록", + "lobbyChatStartedNotification": "{{moderator}}가 {{attendee}}와 로비 채팅을 시작했습니다", + "lobbyChatStartedTitle": "{{moderator}}가 당신과 로비 채팅을 시작했습니다.", + "lobbyClosed": "로비 방이 닫혔습니다.", + "nameField": "이름을 입력하세요", + "notificationLobbyAccessDenied": "{{targetParticipantName}}가 {{originParticipantName}}에 의해 참여가 거부되었습니다.", + "notificationLobbyAccessGranted": "{{targetParticipantName}}가 {{originParticipantName}}에 의해 참여가 승인되었습니다.", + "notificationLobbyDisabled": "로비가 {{originParticipantName}}에 의해 비활성화되었습니다.", + "notificationLobbyEnabled": "로비가 {{originParticipantName}}에 의해 활성화되었습니다.", + "notificationTitle": "로비", + "passwordJoinButton": "비밀번호로 참여", + "title": "로비", + "toggleLabel": "로비 활성화" + }, "localRecording": { "clientState": { "off": "꺼짐", "on": "켜짐", "unknown": "알 수 없음" }, - "dialogTitle": "", - "duration": "", - "durationNA": "", - "encoding": "", - "label": "", - "labelToolTip": "", - "localRecording": "", + "dialogTitle": "로컬 녹화 컨트롤", + "duration": "기간", + "durationNA": "N/A", + "encoding": "인코딩", + "label": "LOR", + "labelToolTip": "로컬 녹화가 진행 중입니다", + "localRecording": "로컬 녹화", "me": "나", "messages": { - "engaged": "", - "finished": "", - "finishedModerator": "", - "notModerator": "" + "engaged": "로컬 녹화 시작됨.", + "finished": "녹화 세션 {{token}}이 완료되었습니다. 녹화된 파일을 중재자에게 보내주세요.", + "finishedModerator": "녹화 세션 {{token}}이 완료되었습니다. 로컬 트랙의 녹화가 저장되었습니다. 다른 참가자에게 녹화를 제출하도록 요청하세요.", + "notModerator": "당신은 중재자가 아닙니다. 로컬 녹화를 시작하거나 중지할 수 없습니다." }, - "moderator": "", + "moderator": "중재자", "no": "아니요", - "participant": "", - "participantStats": "", - "sessionToken": "", + "participant": "참가자", + "participantStats": "참가자 통계", + "selectTabTitle": "🎥 녹화를 위해 이 탭을 선택하세요", + "sessionToken": "세션 토큰", "start": "녹화 시작", "stop": "녹화 종료", + "stopping": "녹화 중지 중", + "wait": "녹화를 저장하는 동안 기다려 주세요", "yes": "예" }, "lockRoomPassword": "비밀번호", @@ -463,18 +731,61 @@ }, "me": "나", "notify": { + "OldElectronAPPTitle": "보안 취약성!", + "allowAction": "허용", + "allowedUnmute": "마이크 음소거 해제, 카메라 시작 또는 화면 공유를 할 수 있습니다.", + "audioUnmuteBlockedDescription": "시스템 제한으로 인해 마이크 음소거 해제 작업이 일시적으로 차단되었습니다.", + "audioUnmuteBlockedTitle": "마이크 음소거 해제 차단됨!", + "chatMessages": "채팅 메시지", "connectedOneMember": "{{name}}님이 회의에 참여했습니다.", "connectedThreePlusMembers": "{{name}}님 외 {{count}}명이 회의에 참여했습니다.", "connectedTwoMembers": "{{first}}님과 {{second}}님이 회의에 참여했습니다.", + "connectionFailed": "연결 실패. 나중에 다시 시도하십시오!", + "dataChannelClosed": "비디오 품질이 저하될 수 있습니다", + "dataChannelClosedDescription": "브리지 채널이 다운되어 비디오 품질이 가장 낮은 설정으로 제한될 수 있습니다.", + "dataChannelClosedDescriptionWithAudio": "브리지 채널이 다운되어 오디오 및 비디오에 장애가 발생할 수 있습니다.", + "dataChannelClosedWithAudio": "오디오 및 비디오 품질이 저하될 수 있습니다", + "disabledIframe": "임베딩은 데모 목적에만 사용되므로 이 통화는 {{timeout}}분 후에 연결이 끊어집니다.", + "disabledIframeSecondary": "{{domain}} 임베딩은 데모 목적에만 사용되므로 이 통화는 {{timeout}}분 후에 연결이 끊어집니다. 프로덕션 임베딩을 위해 Jitsi as a Service를 사용하세요!", "disconnected": "연결이 끊김", + "displayNotifications": "다음에 대한 알림 표시", + "dontRemindMe": "다시 알리지 않기", "focus": "컨퍼런스 포커스", "focusFail": "{{component}}을 사용할 수 없음 - {{ms}} 초 후에 다시 시도하십시오", - "grantedTo": "{{to}}에게 방장 권한이 부여되었습니다!", + "gifsMenu": "GIPHY", + "groupTitle": "알림", + "hostAskedUnmute": "중재자가 말하기를 원합니다", + "invalidTenant": "잘못된 테넌트", + "invalidTenantHyphenDescription": "사용 중인 테넌트가 잘못되었습니다('-'로 시작하거나 끝남).", + "invalidTenantLengthDescription": "사용 중인 테넌트가 너무 깁니다.", "invitedOneMember": "{{name}}님이 초대되었습니다.", "invitedThreePlusMembers": "{{name}}님 외 {{count}}명이 초대되었습니다.", "invitedTwoMembers": "{{first}}님과 {{second}}님이 초대되었습니다.", + "joinMeeting": "참여하기", "kickParticipant": "{{kicker}}님이 {{kicked}}님을 추방했습니다.", + "leftOneMember": "{{name}}님이 회의를 떠났습니다", + "leftThreePlusMembers": "{{name}}님 외 여러 명이 회의를 떠났습니다", + "leftTwoMembers": "{{first}}님과 {{second}}님이 회의를 떠났습니다", + "linkToSalesforce": "Salesforce에 연결", + "linkToSalesforceDescription": "회의 요약을 Salesforce 객체에 연결할 수 있습니다.", + "linkToSalesforceError": "회의를 Salesforce에 연결하지 못했습니다", + "linkToSalesforceKey": "이 회의 연결", + "linkToSalesforceProgress": "회의를 Salesforce에 연결 중…", + "linkToSalesforceSuccess": "회의가 Salesforce에 연결되었습니다", + "localRecordingStarted": "{{name}}님이 로컬 녹화를 시작했습니다.", + "localRecordingStopped": "{{name}}님이 로컬 녹화를 중지했습니다.", "me": "나", + "moderationInEffectCSDescription": "화면을 공유하려면 손을 들어주세요.", + "moderationInEffectCSTitle": "화면 공유가 중재자에 의해 차단되었습니다", + "moderationInEffectDescription": "말씀하시려면 손을 들어주세요.", + "moderationInEffectTitle": "마이크가 중재자에 의해 음소거되었습니다", + "moderationInEffectVideoDescription": "카메라를 시작하려면 손을 들어주세요.", + "moderationInEffectVideoTitle": "카메라가 중재자에 의해 차단되었습니다", + "moderationRequestFromModerator": "호스트가 음소거 해제를 원합니다", + "moderationRequestFromParticipant": "말하고 싶어합니다", + "moderationStartedTitle": "중재 시작됨", + "moderationStoppedTitle": "중재 중지됨", + "moderationToggleDescription": "{{participantDisplayName}}에 의해", "moderator": "방장 권한이 부여되었습니다!", "muted": "음소거로 대화가 시작되었습니다", "mutedRemotelyDescription": "말할 준비가되면 언제든지 음소거를 해제 할 수 있습니다.", @@ -483,82 +794,304 @@ "newDeviceAction": "사용", "newDeviceAudioTitle": "새 오디오 장치 감지", "newDeviceCameraTitle": "새 카메라 감지", + "nextToSpeak": "당신은 다음 발언자입니다", + "noiseSuppressionDesktopAudioDescription": "추가 노이즈 억제는 데스크톱 오디오 공유 중에는 활성화할 수 없습니다. 비활성화하고 다시 시도하십시오.", + "noiseSuppressionFailedTitle": "추가 노이즈 억제를 시작하지 못했습니다", + "noiseSuppressionStereoDescription": "추가 노이즈 억제는 현재 스테레오 오디오와 함께 지원되지 않습니다.", + "oldElectronClientDescription1": "보안 취약성이 있는 오래된 Jitsi Meet 클라이언트를 사용하고 있는 것 같습니다. 최신 빌드로 업데이트하세요", + "oldElectronClientDescription2": "최신 빌드", + "oldElectronClientDescription3": "지금!", + "participantWantsToJoin": "회의에 참여하려고 합니다", + "participantsWantToJoin": "회의에 참여하려고 합니다", "passwordRemovedRemotely": "다른 참가자가 $t(lockRoomPasswordUppercase)를 제거했습니다.", "passwordSetRemotely": "다른 참가자가 $t(lockRoomPasswordUppercase)를 설정했습니다.", + "raiseHandAction": "손 들기", "raisedHand": "{{name}}님이 말하고 싶어합니다.", + "raisedHands": "{{participantName}}님과 {{raisedHands}}명이 더", + "reactionSounds": "소리 비활성화", + "reactionSoundsForAll": "모든 사람의 소리 비활성화", + "screenShareNoAudio": "창 선택 화면에서 오디오 공유 상자가 선택되지 않았습니다.", + "screenShareNoAudioTitle": "시스템 오디오를 공유할 수 없습니다!", + "screenSharingAudioOnlyDescription": "화면을 공유하면 \"최적의 성능\" 모드에 영향을 주며 더 많은 대역폭을 사용하게 됩니다.", + "screenSharingAudioOnlyTitle": "\"최적의 성능\" 모드", + "selfViewTitle": "설정에서 언제든지 셀프뷰를 다시 표시할 수 있습니다", "somebody": "누군가", "startSilentDescription": "오디오를 사용하려면 회의에 다시 참여하세요.", "startSilentTitle": "오디오 출력없이 참여했습니다!", - "suboptimalExperienceDescription": "{{appName}}에 대한 귀하의 경험이 없으시다면 완벽하게 지원되는 브라우저 중 하나를 사용해보십시오.", + "suboptimalBrowserWarning": "여기에서 회의 경험이 좋지 않을 것 같습니다. 이를 개선하기 위해 노력하고 있지만 그때까지 완전히 지원되는 브라우저 중 하나를 사용해보세요.", "suboptimalExperienceTitle": "브라우저 경고", + "suggestRecordingAction": "시작", + "suggestRecordingDescription": "녹화를 시작하시겠습니까?", + "suggestRecordingTitle": "이 회의를 녹화합니다", "unmute": "음소거 해제", "videoMutedRemotelyDescription": "언제든지 카메라를 다시 켤 수 있습니다.", - "videoMutedRemotelyTitle": "{{participantDisplayName}}에 의해 카메라가 비활성화되었습니다!" + "videoMutedRemotelyTitle": "{{participantDisplayName}}에 의해 카메라가 비활성화되었습니다!", + "videoUnmuteBlockedDescription": "카메라 음소거 해제 및 화면 공유 작업이 시스템 제한으로 인해 일시적으로 차단되었습니다.", + "videoUnmuteBlockedTitle": "카메라 음소거 해제 및 화면 공유 차단됨!", + "viewLobby": "로비 보기", + "viewParticipants": "참가자 보기", + "viewVisitors": "방문자 보기", + "waitingParticipants": "{{waitingParticipants}}명", + "waitingVisitors": "대기열에서 대기 중인 방문자: {{waitingVisitors}}", + "waitingVisitorsTitle": "회의가 아직 시작되지 않았습니다!", + "whiteboardLimitDescription": "진행 상황을 저장하세요. 사용자 한도에 곧 도달하여 화이트보드가 닫힐 것입니다.", + "whiteboardLimitTitle": "화이트보드 사용" + }, + "participantsPane": { + "actions": { + "admit": "승인", + "admitAll": "모두 승인", + "allow": "참가자에게 허용:", + "allowVideo": "비디오 허용", + "askUnmute": "음소거 해제 요청", + "audioModeration": "스스로 음소거 해제", + "blockEveryoneMicCamera": "모두의 마이크와 카메라 차단", + "breakoutRooms": "분할 회의실", + "goLive": "실시간 방송", + "invite": "사람 초대", + "lowerAllHands": "모든 손 내리기", + "lowerHand": "손 내리기", + "moreModerationActions": "더 많은 중재 옵션", + "moreModerationControls": "더 많은 중재 컨트롤", + "moreParticipantOptions": "더 많은 참가자 옵션", + "mute": "음소거", + "muteAll": "모두 음소거", + "muteEveryoneElse": "다른 사람 모두 음소거", + "reject": "거부", + "stopEveryonesVideo": "모두의 비디오 중지", + "stopVideo": "비디오 중지", + "unblockEveryoneMicCamera": "모두의 마이크와 카메라 차단 해제", + "videoModeration": "자신의 비디오 시작" + }, + "close": "닫기", + "headings": { + "lobby": "로비 ({{count}})", + "participantsList": "회의 참가자 ({{count}})", + "visitorInQueue": " (대기 중 {{count}})", + "visitorRequests": " (요청 {{count}})", + "visitors": "방문자 {{count}}", + "waitingLobby": "로비에서 대기 중 ({{count}})" + }, + "search": "참가자 검색", + "title": "참가자" }, "passwordDigitsOnly": "최대 {{number}} 자리", "passwordSetRemotely": "다른 참가자가 설정", + "pinParticipant": "{{participantName}} - 고정", + "pinnedParticipant": "참가자가 고정되었습니다", "polls": { + "answer": { + "edit": "편집", + "send": "보내기", + "skip": "건너뛰기", + "submit": "제출" + }, + "by": "{{name}}님이 작성", + "closeButton": "투표 종료", + "create": { + "addOption": "옵션 추가", + "answerPlaceholder": "옵션 {{index}}", + "cancel": "취소", + "create": "투표 만들기", + "pollOption": "투표 옵션 {{index}}", + "pollQuestion": "투표 질문", + "questionPlaceholder": "질문을 입력하세요", + "removeOption": "옵션 제거", + "save": "저장", + "send": "보내기" + }, "errors": { "notUniqueOption": "옵션은 고유해야합니다" + }, + "notification": { + "description": "투표 탭을 열어 투표하세요", + "title": "새로운 투표가 이 회의에 추가되었습니다" + }, + "results": { + "changeVote": "투표 변경", + "empty": "회의에 아직 투표가 없습니다. 여기에서 투표를 시작하세요!", + "hideDetailedResults": "세부 정보 숨기기", + "showDetailedResults": "세부 정보 보기", + "vote": "투표" } }, - "poweredby": "powered by", + "poweredby": "제공:", + "prejoin": { + "audioAndVideoError": "오디오 및 비디오 오류:", + "audioDeviceProblem": "오디오 장치에 문제가 있습니다", + "audioOnlyError": "오디오 오류:", + "audioTrackError": "오디오 트랙을 생성할 수 없습니다.", + "callMe": "나에게 전화하기", + "callMeAtNumber": "이 번호로 전화하기:", + "calling": "전화 중", + "configuringDevices": "장치 구성 중…", + "connectedWithAudioQ": "오디오에 연결되어 있습니까?", + "connection": { + "failed": "연결 테스트 실패!", + "good": "인터넷 연결이 좋아 보입니다!", + "nonOptimal": "인터넷 연결이 최적이 아닙니다", + "poor": "인터넷 연결이 좋지 않습니다", + "running": "연결 테스트 실행 중…" + }, + "connectionDetails": { + "audioClipping": "오디오가 클리핑될 것으로 예상됩니다.", + "audioHighQuality": "오디오가 우수한 품질일 것으로 예상됩니다.", + "audioLowNoVideo": "오디오 품질이 낮고 비디오는 없을 것으로 예상됩니다.", + "goodQuality": "멋져요! 미디어 품질이 훌륭할 것입니다.", + "noMediaConnectivity": "이 테스트를 위해 미디어 연결성을 설정할 수 있는 방법을 찾을 수 없었습니다. 이는 일반적으로 방화벽이나 NAT로 인해 발생합니다.", + "noVideo": "비디오가 매우 나쁠 것으로 예상됩니다.", + "testFailed": "연결 테스트에서 예기치 않은 문제가 발생했지만 이것이 귀하의 경험에 영향을 미치지 않을 수 있습니다.", + "undetectable": "브라우저에서 여전히 전화를 걸 수 없는 경우, 스피커, 마이크 및 카메라가 제대로 설정되었는지 확인하고 브라우저에 마이크 및 카메라 사용 권한을 부여했는지 확인하고 브라우저 버전이 최신인지 확인하는 것이 좋습니다. 여전히 통화에 문제가 있는 경우 웹 애플리케이션 개발자에게 문의해야 합니다.", + "veryPoorConnection": "통화 품질이 정말 나쁠 것으로 예상됩니다.", + "videoFreezing": "비디오가 멈추거나, 검은 화면이 되거나, 픽셀화될 것으로 예상됩니다.", + "videoHighQuality": "비디오 품질이 좋을 것으로 예상됩니다.", + "videoLowQuality": "프레임 속도와 해상도 측면에서 비디오 품질이 낮을 것으로 예상됩니다.", + "videoTearing": "비디오가 픽셀화되거나 시각적 결함이 있을 것으로 예상됩니다." + }, + "copyAndShare": "회의 링크 복사 및 공유", + "dialInMeeting": "회의에 전화 접속", + "dialInPin": "회의에 전화 접속하고 PIN 코드를 입력하세요:", + "dialing": "전화 거는 중", + "doNotShow": "이 화면 다시 표시하지 않기", + "errorDialOut": "전화를 걸 수 없습니다", + "errorDialOutDisconnected": "전화를 걸 수 없습니다. 연결 끊김", + "errorDialOutFailed": "전화를 걸 수 없습니다. 통화 실패", + "errorDialOutStatus": "전화 걸기 상태 가져오기 오류", + "errorMissingName": "회의에 참여하려면 이름을 입력하세요", + "errorNoPermissions": "마이크 및 카메라 액세스를 허용해야 합니다", + "errorStatusCode": "전화 걸기 오류, 상태 코드: {{status}}", + "errorValidation": "번호 검증 실패", + "iWantToDialIn": "전화로 참여하고 싶습니다", + "initiated": "통화 시작됨", + "joinAudioByPhone": "전화로 오디오 참여", + "joinMeeting": "회의 참여", + "joinMeetingInLowBandwidthMode": "낮은 대역폭 모드로 참여", + "joinWithoutAudio": "오디오 없이 참여", + "keyboardShortcuts": "키보드 단축키 사용", + "linkCopied": "클립보드에 링크가 복사되었습니다", + "lookGood": "장치가 제대로 작동하고 있습니다", + "or": "또는", + "premeeting": "회의 전", + "proceedAnyway": "그래도 진행", + "recordingWarning": "다른 참가자가 이 통화를 녹화하고 있을 수 있습니다", + "screenSharingError": "화면 공유 오류:", + "startWithPhone": "전화 오디오로 시작", + "unsafeRoomConsent": "위험을 이해하며 회의에 참여하고 싶습니다", + "videoOnlyError": "비디오 오류:", + "videoTrackError": "비디오 트랙을 생성할 수 없습니다.", + "viewAllNumbers": "모든 번호 보기" + }, "presenceStatus": { "busy": "바쁨", - "calling": "전화 거는중", + "calling": "전화 거는 중", "connected": "연결됨", - "connecting": "연결중", - "connecting2": "연결중*", + "connecting": "연결 중", + "connecting2": "연결 중*", "disconnected": "연결 끊김", "expired": "만료됨", "ignored": "무시됨", - "initializingCall": "통화 초기화중", + "initializingCall": "통화 초기화 중", "invited": "초대됨", "rejected": "거부됨", - "ringing": "전화중" + "ringing": "전화 중" }, "profile": { + "avatar": "아바타", "setDisplayNameLabel": "표시 이름 설정", "setEmailInput": "이메일 입력", "setEmailLabel": "이메일 설정", "title": "프로필" }, + "raisedHand": "말하고 싶어합니다", + "raisedHandsLabel": "손 든 사람 수", + "record": { + "already": { + "linked": "회의가 이미 이 Salesforce 객체에 연결되었습니다." + }, + "type": { + "account": "계정", + "contact": "연락처", + "lead": "잠재 고객", + "opportunity": "기회", + "owner": "소유자" + } + }, "recording": { "authDropboxText": "Dropbox에 업로드", "availableSpace": "사용 가능한 공간 : {{spaceLeft}}MB (약 {{duration}}분 녹화)", "beta": "베타", "busy": "녹화 자원을 확보하고 있습니다. 몇 분 후에 다시 시도하십시오.", "busyTitle": "모든 레코더가 현재 사용 중입니다", + "copyLink": "링크 복사", "error": "녹화가 실패했습니다. 다시 시도하십시오.", + "errorFetchingLink": "녹화 링크를 가져오는 중 오류가 발생했습니다.", "expandedOff": "녹화가 중지됨", "expandedOn": "회의가 현재 녹화 중입니다.", - "expandedPending": "녹화가 시작됩니다 ...", + "expandedPending": "녹화가 시작됩니다…", "failedToStart": "녹화를 시작하지 못했습니다", "fileSharingdescription": "회의 참가자와 녹화 공유", - "live": "라이브", + "highlight": "하이라이트", + "highlightMoment": "순간 강조 표시", + "highlightMomentDisabled": "녹화가 시작되면 순간을 강조 표시할 수 있습니다", + "highlightMomentSuccess": "순간 강조 표시됨", + "highlightMomentSucessDescription": "강조 표시된 순간이 회의 요약에 추가됩니다.", + "inProgress": "녹화 또는 실시간 스트리밍 진행 중", + "limitNotificationDescriptionNative": "수요가 많아 녹화가 {{limit}}분으로 제한됩니다. 무제한 녹화를 사용하려면 {{app}}을 시도해 보세요.", + "limitNotificationDescriptionWeb": "수요가 많아 녹화가 {{limit}}분으로 제한됩니다. 무제한 녹화를 사용하려면 {{app}}을 시도해 보세요.", + "linkGenerated": "녹화에 대한 링크를 생성했습니다.", + "localRecordingNoNotificationWarning": "녹화가 다른 참가자에게 알리지 않습니다. 회의가 녹화되고 있음을 알려야 합니다.", + "localRecordingNoVideo": "비디오는 녹화되지 않습니다", + "localRecordingStartWarning": "녹화를 저장하려면 회의에서 나가기 전에 녹화를 중지해야 합니다.", + "localRecordingStartWarningTitle": "저장을 위해 녹화를 중지하세요", + "localRecordingVideoStop": "비디오를 중지하면 로컬 녹화도 중지됩니다. 계속하시겠습니까?", + "localRecordingVideoWarning": "비디오를 녹화하려면 녹화를 시작할 때 켜져 있어야 합니다", + "localRecordingWarning": "올바른 비디오 및 오디오를 사용하려면 현재 탭을 선택해야 합니다.", "loggedIn": "{{userName}}으로 로그인했습니다.", + "noMicPermission": "마이크 트랙을 생성할 수 없습니다. 마이크 사용 권한을 부여하세요.", + "noStreams": "오디오 또는 비디오 스트림이 감지되지 않았습니다.", "off": "녹화가 중지됨", + "offBy": "{{name}}님이 녹화를 중지했습니다", "on": "녹화", + "onBy": "{{name}}님이 녹화를 시작했습니다", + "onlyRecordSelf": "나의 오디오 및 비디오 스트림만 녹화", "pending": "참석할 멤버를 기다리는 중입니다…", - "rec": "녹화", + "policyError": "녹화를 너무 빨리 시작하려고 했습니다. 나중에 다시 시도하십시오!", + "recordAudioAndVideo": "오디오와 비디오 녹화", + "recordTranscription": "자막 녹화", + "saveLocalRecording": "녹화 파일을 로컬에 저장 (베타)", "serviceDescription": "녹화는 녹화 서비스에 의해 저장됩니다.", + "serviceDescriptionCloud": "클라우드 녹화", + "serviceDescriptionCloudInfo": "녹화된 회의는 녹화 후 24시간 후에 자동으로 삭제됩니다.", "serviceName": "녹화 서비스", + "sessionAlreadyActive": "이 세션은 이미 녹화되거나 라이브 스트림 중입니다.", + "showAdvancedOptions": "고급 옵션", "signIn": "로그인", "signOut": "로그아웃", + "surfaceError": "현재 탭을 선택해 주세요.", "title": "녹화", "unavailable": "죄송합니다. {{serviceName}}은 현재 사용할 수 없습니다. 저희는 문제를 해결하기 위해 노력하고 있습니다. 나중에 다시 시도 해주십시오.", - "unavailableTitle": "녹화를 사용할 수 없습니다" + "unavailableTitle": "녹화를 사용할 수 없습니다", + "uploadToCloud": "클라우드에 업로드" }, + "screenshareDisplayName": "{{name}}의 화면", "sectionList": { "pullToRefresh": "당겨서 새로고침" }, "security": { "about": "회의에 $t(lockRoomPassword)를 추가할 수 있습니다. 참가자는 회의에 참여하기 위해 $t(lockRoomPassword)를 입력해야합니다.", "aboutReadOnly": "방장은 회의에 $t(lockRoomPassword)를 추가할 수 있습니다. 참가자는 회의에 참여하기 위해 $t(lockRoomPassword)를 입력해야합니다.", - "insecureRoomNameWarning": "원하지 않은 참가자가 회의에 참여할 수 있습니다. 보안 옵션 버튼을 통해 회의를 보호하는 것을 고려하십시오.", - "securityOptions": "보안 옵션" + "insecureRoomNameWarningNative": "방 이름이 안전하지 않습니다. 원하지 않는 참가자가 회의에 참여할 수 있습니다. {{recommendAction}} 회의를 보호하는 방법을 알아보세요", + "insecureRoomNameWarningWeb": "방 이름이 안전하지 않습니다. 원하지 않는 참가자가 회의에 참여할 수 있습니다. {{recommendAction}} 회의를 보호하는 방법은 여기에서 알아보세요.", + "title": "보안 옵션", + "unsafeRoomActions": { + "meeting": "회의 보안을 위해 보안 버튼을 사용하세요.", + "prejoin": "더 고유한 회의 이름을 사용하는 것이 좋습니다.", + "welcome": "더 고유한 회의 이름을 사용하거나 제안을 선택하는 것이 좋습니다." + } }, "settings": { + "audio": "오디오", + "buttonLabel": "설정", "calendar": { "about": "{{appName}} 캘린더 통합은 예정된 일정을 읽을 수 있도록 캘린더에 안전하게 액세스하는 데 사용됩니다.", "disconnect": "연결 끊김", @@ -566,20 +1099,42 @@ "signedIn": "현재 {{email}}의 캘린더 일정에 액세스하고 있습니다. 캘린더 이벤트 액세스를 중지하려면 아래 연결 해제 버튼을 클릭하세요.", "title": "캘린더" }, + "desktopShareFramerate": "데스크톱 공유 프레임 레이트", + "desktopShareHighFpsWarning": "데스크톱 공유의 높은 프레임 레이트는 대역폭에 영향을 줄 수 있습니다. 새로운 설정이 적용되도록 화면 공유를 다시 시작해야 합니다.", + "desktopShareWarning": "새로운 설정이 적용되도록 화면 공유를 다시 시작해야 합니다.", "devices": "장치", "followMe": "모두 나와 같은 설정 상태로", + "followMeRecorder": "녹화도 나를 따릅니다", + "framesPerSecond": "초당 프레임 수", + "incomingMessage": "수신 메시지", "language": "언어", "loggedIn": "{{name}}으로 로그인", - "moderator": "마이크", + "maxStageParticipants": "메인 스테이지에 고정할 수 있는 최대 참가자 수", + "microphones": "마이크", + "moderator": "진행자", + "moderatorOptions": "진행자 옵션", "more": "더보기", "name": "이름", "noDevice": "없음", + "notifications": "알림", + "participantJoined": "참가자 입장", + "participantKnocking": "참가자가 로비에 입장", + "participantLeft": "참가자 퇴장", + "playSounds": "소리 켜기", + "reactions": "반응", + "sameAsSystem": "시스템과 동일 ({{label}})", "selectAudioOutput": "오디오 출력", "selectCamera": "카메라", "selectMic": "오디오", - "startAudioMuted": "모두가 음소거를 시작합니다", - "startVideoMuted": "모두가 비디오 비활성화로 시작합니다", - "title": "설정" + "selfView": "자기 보기", + "shortcuts": "단축키", + "speakers": "스피커", + "startAudioMuted": "모두 음소거 상태로 시작", + "startReactionsMuted": "모든 사람의 반응 소리 음소거", + "startVideoMuted": "모두 비디오 비활성화 상태로 시작", + "talkWhileMuted": "음소거 상태에서 말하기", + "title": "설정", + "video": "비디오" }, "settingsView": { "advanced": "고급", @@ -587,33 +1142,58 @@ "alertOk": "확인", "alertTitle": "경고", "alertURLText": "입력된 서버 URL이 잘못되었습니다", + "apply": "적용", "buildInfoSection": "빌드 정보", "conferenceSection": "회의", + "disableCallIntegration": "네이티브 통화 통합 비활성화", + "disableCrashReporting": "크래시 리포팅 비활성화", + "disableCrashReportingWarning": "크래시 리포팅을 비활성화하시겠습니까? 설정은 앱을 다시 시작한 후 적용됩니다.", + "disableP2P": "피어-투-피어 모드 비활성화", "displayName": "유저이름", + "displayNamePlaceholderText": "예: 홍길동", "email": "이메일", + "emailPlaceholderText": "email@example.com", + "gavatarMessage": "이메일이 Gravatar 계정과 연결되어 있으면 프로필 사진을 표시하는 데 사용됩니다.", + "goTo": "이동", "header": "설정", + "help": "도움말", + "links": "링크", + "privacy": "개인정보", "profileSection": "프로필", + "sdkVersion": "SDK 버전", "serverURL": "서버 URL", + "showAdvanced": "고급 설정 표시", + "startCarModeInLowBandwidthMode": "낮은 대역폭 모드에서 자동차 모드 시작", "startWithAudioMuted": "오디오 음소거 상태로 시작", "startWithVideoMuted": "비디오 비활성화 상태로 시작", + "terms": "이용약관", "version": "버전" }, "share": { - "dialInfoText": "", + "dialInfoText": "\n\n=====\n\n전화로 접속하고 싶으신가요?\n\n{{defaultDialInNumber}}이 회의의 전화 접속 번호를 보려면 이 링크를 클릭하세요\n{{dialInfoPageUrl}}", "mainText": "회의에 참여하려면 다음 링크를 클릭하십시오.\n{{roomUrl}}" }, "speaker": "스피커", "speakerStats": { - "hours": "{{count}}h", - "minutes": "{{count}}m", + "angry": "화남", + "disgusted": "역겨움", + "displayEmotions": "감정 표시", + "fearful": "두려움", + "happy": "행복", + "hours": "{{count}}시간", + "minutes": "{{count}}분", "name": "이름", + "neutral": "중립적", + "sad": "슬픔", "search": "검색", "searchHint": "참가자 검색", - "seconds": "{{count}}s", + "seconds": "{{count}}초", "speakerStats": "접속자 통계", - "speakerTime": "접속자 오디오 사용 시간" + "speakerTime": "접속자 오디오 사용 시간", + "surprised": "놀람" }, "startupoverlay": { + "genericTitle": "회의에서 마이크와 카메라를 사용해야 합니다.", "policyText": " ", "title": "{{app}}은 마이크와 카메라를 사용해야합니다" }, @@ -622,125 +1202,218 @@ "text": "다시 연결하려면 재접속 버튼을 누르십시오", "title": "컴퓨터 휴식 모드가 되어 화상 통화가 중단되었습니다" }, + "termsView": { + "title": "이용약관" + }, + "toggleTopPanelLabel": "상단 패널 전환", "toolbar": { "Settings": "설정", "accessibilityLabel": { "Settings": "설정 전환", "audioOnly": "음성 전용 모드 전환", "audioRoute": "음성 장비 선택하기", + "boo": "야유", + "breakoutRooms": "소회의실", "callQuality": "비디오 품질 관리", + "carmode": "자동차 모드", "cc": "자막 사용 전환", "chat": "채팅창 보이기 전환", + "clap": "박수", + "closeChat": "채팅 닫기", + "closeMoreActions": "추가 작업 메뉴 닫기", + "closeParticipantsPane": "참가자 패널 닫기", + "collapse": "축소", "document": "문서 전환", + "documentClose": "공유 문서 닫기", + "documentOpen": "공유 문서 열기", + "download": "앱 다운로드", + "embedMeeting": "회의 삽입", + "endConference": "모두를 위한 회의 종료", + "enterFullScreen": "전체 화면 보기", + "enterTileView": "타일 보기 시작", + "exitFullScreen": "전체 화면 종료", + "exitTileView": "타일 보기 종료", + "expand": "확장", "feedback": "피드백 남기기", "fullScreen": "전체 화면 전환", + "giphy": "GIPHY 메뉴 전환", + "grantModerator": "진행자 권한 부여", "hangup": "떠나기", + "heading": "도구 모음", "help": "도움말", + "hideWhiteboard": "화이트보드 숨기기", "invite": "사용자 초대", "kick": "참가자 추방", + "laugh": "웃음", + "leaveConference": "회의 떠나기", + "like": "좋아요", + "linkToSalesforce": "Salesforce에 연결", "lobbyButton": "로비 모드 활성화/비활성화", - "localRecording": "", + "localRecording": "로컬 녹화 제어 전환", "lockRoom": "회의 비밀번호 전환", - "moreActions": "", - "moreActionsMenu": "", + "love": "하트", + "lowerHand": "손 내리기", + "moreActions": "추가 작업", + "moreActionsMenu": "추가 작업 메뉴", + "moreOptions": "추가 옵션 보기", "mute": "음소거 전환", "muteEveryone": "모두 음소거", "muteEveryoneElse": "다른 사람 모두 음소거", - "muteEveryoneElsesVideo": "다른 사람의 카메라 모두 비활성화", - "muteEveryonesVideo": "모든 카메라 비활성화", - "pip": "", + "muteEveryoneElsesVideoStream": "다른 사람들의 비디오 중지", + "muteEveryonesVideoStream": "모든 사람의 비디오 중지", + "muteGUMPending": "마이크 연결 중", + "noiseSuppression": "추가 잡음 제거 (베타)", + "openChat": "채팅 열기", + "participants": "참가자 패널 열기. {{participantsCount}}명 참가자", + "pip": "PIP 모드 전환", "privateMessage": "비공개 메세지 보내기", "profile": "프로필 수정", "raiseHand": "손 들기", + "react": "메시지 반응", + "reactions": "반응", + "reactionsMenu": "반응 메뉴", "recording": "녹화 전환", "remoteMute": "참가자 음소거", + "remoteVideoMute": "참가자의 카메라 비활성화", + "security": "보안 옵션", "selectBackground": "배경 선택", + "selfView": "자기 보기 전환", "shareRoom": "초대하기", "shareYourScreen": "화면 공유 전환", + "shareaudio": "오디오 공유", "sharedvideo": "YouTube 비디오 공유 전환", "shortcuts": "단축키 전환", - "show": "", + "show": "스테이지에 표시", + "showWhiteboard": "화이트보드 표시", + "silence": "조용히", "speakerStats": "접속자 통계 전환", + "stopScreenSharing": "화면 공유 중지", + "stopSharedVideo": "비디오 중지", + "surprised": "놀람", "tileView": "타일뷰 전환", "toggleCamera": "카메라 전환", - "videoblur": "", - "videomute": "비디오 비활성화 전환" + "toggleFilmstrip": "필름스트립 전환", + "unmute": "마이크 음소거 해제", + "videoblur": "비디오 흐리기 전환", + "videomute": "비디오 비활성화 전환", + "videomuteGUMPending": "카메라 연결 중", + "videounmute": "카메라 시작" }, "addPeople": "통화에 사용자 추가", "audioOnlyOff": "음성전용 모드 끄기", - "audioOnlyOn": "음성전용 모드 끄기", + "audioOnlyOn": "음성전용 모드 켜기", "audioRoute": "음성 장비 선택하기", "audioSettings": "오디오 설정", "authenticate": "인증중", + "boo": "야유", "callQuality": "품질 설정하기", "chat": "대화 열기/닫기", + "clap": "박수", "closeChat": "대화 닫기", + "closeParticipantsPane": "참가자 패널 닫기", + "closeReactionsMenu": "반응 메뉴 닫기", + "disableNoiseSuppression": "추가 잡음 제거 비활성화 (베타)", + "disableReactionSounds": "이 회의에서 반응 소리를 비활성화할 수 있습니다", "documentClose": "문서 공유 닫기", "documentOpen": "문서 공유 열기", "download": "앱 다운로드", + "e2ee": "종단간 암호화", + "embedMeeting": "회의 삽입", + "enableNoiseSuppression": "추가 잡음 제거 활성화 (베타)", + "endConference": "모두를 위한 회의 종료", "enterFullScreen": "전체화면 보기", "enterTileView": "타일보기 시작", "exitFullScreen": "전체화면 취소", "exitTileView": "타일보기 종료", "feedback": "피드백 남기기", + "giphy": "GIPHY 메뉴 전환", "hangup": "떠나기", "help": "도움말", + "hideWhiteboard": "화이트보드 숨기기", "invite": "초대", + "joinBreakoutRoom": "소회의실 참여", + "laugh": "웃음", + "leaveBreakoutRoom": "소회의실 나가기", + "leaveConference": "회의 떠나기", + "like": "좋아요", + "linkToSalesforce": "Salesforce에 연결", + "lobbyButtonDisable": "로비 모드 비활성화", + "lobbyButtonEnable": "로비 모드 활성화", "login": "로그인", "logout": "로그아웃", + "love": "하트", "lowerYourHand": "손을 내려주세요", "moreActions": "추가 액션", "moreOptions": "옵션 더보기", "mute": "음소거 설정/해제", "muteEveryone": "모두 음소거", + "muteEveryonesVideo": "모두의 카메라 중지", + "muteGUMPending": "마이크 연결 중", + "noAudioSignalDesc": "시스템 설정이나 하드웨어에서 의도적으로 음소거하지 않았다면 장치를 변경하는 것을 고려하세요.", + "noAudioSignalDescSuggestion": "시스템 설정이나 하드웨어에서 의도적으로 음소거하지 않았다면 제안된 장치로 전환하는 것을 고려하세요.", + "noAudioSignalDialInDesc": "다음 번호를 사용하여 전화 접속할 수도 있습니다:", + "noAudioSignalDialInLinkDesc": "전화 접속 번호", + "noAudioSignalTitle": "마이크에서 입력이 없습니다!", + "noiseSuppression": "추가 잡음 제거 (베타)", + "noisyAudioInputDesc": "마이크에서 소음이 발생하는 것 같습니다. 음소거하거나 장치를 변경하는 것을 고려하세요.", + "noisyAudioInputTitle": "마이크가 소음을 발생시키는 것 같습니다!", "openChat": "대화 열기", - "pip": "", + "openReactionsMenu": "반응 메뉴 열기", + "participants": "참가자", + "pip": "Picture-in-Picture 모드 시작", "privateMessage": "비공개 메시지 보내기", "profile": "프로필 수정", "raiseHand": "말하기 요청/해제", "raiseYourHand": "손 들어주세요", + "reactionBoo": "야유 반응 보내기", + "reactionClap": "박수 반응 보내기", + "reactionHeart": "하트 반응 보내기", + "reactionLaugh": "웃음 반응 보내기", + "reactionLike": "좋아요 반응 보내기", + "reactionSilence": "조용히 반응 보내기", + "reactionSurprised": "놀람 반응 보내기", + "reactions": "반응", "security": "보안 옵션", "selectBackground": "배경 선택", "shareRoom": "초대하기", + "shareaudio": "오디오 공유", "sharedvideo": "YouTube 비디오 공유", "shortcuts": "단축키보기", + "showWhiteboard": "화이트보드 표시", + "silence": "조용히", "speakerStats": "접속자 통계", "startScreenSharing": "화면 공유 시작", "startSubtitles": "자막 시작", - "startvideoblur": "내 배경을 흐리게", + "stopAudioSharing": "오디오 공유 중지", "stopScreenSharing": "화면 공유 중지", "stopSharedVideo": "YouTube 비디오 공유 중지", "stopSubtitles": "자막 중지", - "stopvideoblur": "배경 흐림 비활성화", + "surprised": "놀람", "talkWhileMutedPopup": "음소거 상태입니다.", "tileViewToggle": "타일뷰 전환", "toggleCamera": "카메라 전환", + "unmute": "마이크 음소거 해제", "videoSettings": "비디오 설정", - "videomute": "카메라 시작/중지" + "videomute": "카메라 시작/중지", + "videomuteGUMPending": "카메라 연결 중", + "videounmute": "카메라 시작" }, "transcribing": { "ccButtonTooltip": "자막 시작/종료", - "error": "녹화가 실패했습니다. 다시 시도하십시오.", "expandedLabel": "현재 스크립트 작성 중", - "failedToStart": "스크립트 작성을 시작하지 못했습니다.", + "failed": "자막 작성 실패", "labelToolTip": "회의가 기록되고 있습니다.", - "off": "스크립트 작성이 중지되었습니다.", - "pending": "참석할 멤버를 기다리는 중입니다…", + "sourceLanguageDesc": "현재 회의 언어는 {{sourceLanguage}}로 설정되어 있습니다.
변경하려면 ", + "sourceLanguageHere": "여기에서", "start": "자막 표시 시작", "stop": "자막 표시 중지", - "tr": "" + "subtitles": "자막", + "subtitlesOff": "끄기", + "tr": "번역" }, + "unpinParticipant": "{{participantName}} - 고정 해제", "userMedia": { - "androidGrantPermissions": "브라우저에서 권한을 요청할 때 허락을 선택", - "chromeGrantPermissions": "브라우저에서 권한을 요청할 때 허락을 선택", - "edgeGrantPermissions": "브라우저에서 권한을 요청할 때 Yes를 선택", - "electronGrantPermissions": "카메라와 마이크 사용 권한을 부여하십시오", - "firefoxGrantPermissions": "브라우저에서 권한을 요청할 때 선택된 디바이스 공유를 선택", - "iexplorerGrantPermissions": "브라우저에서 권한을 요청할 때 OK를 선택", - "nwjsGrantPermissions": "카메라와 마이크 사용 권한을 부여하십시오", - "operaGrantPermissions": "브라우저에서 권한을 요청할 때 허락을 선택", - "react-nativeGrantPermissions": "브라우저에서 권한을 요청할 때 허락을 선택", - "safariGrantPermissions": "브라우저에서 권한을 요청할 때 OK를 선택" + "grantPermissions": "카메라와 마이크 사용 권한을 부여하십시오." }, "videoSIPGW": { "busy": "자원을 확보하기 위해 노력하고 있습니다. 몇 분 후에 다시 시도하십시오.", @@ -753,44 +1426,106 @@ "pending": "{{displayName}} 이미 초대되었습니다" }, "videoStatus": { + "adjustFor": "조정 대상:", "audioOnly": "오디오 전용", "audioOnlyExpanded": "낮은 대역폭 모드에 있습니다. 이 모드에서는 오디오 및 화면 공유만 수신합니다.", + "bestPerformance": "최고의 성능", "callQuality": "비디오 품질", "hd": "HD", + "hdTooltip": "고해상도 비디오 보기", "highDefinition": "고해상도", + "highestQuality": "최고 품질", "labelTooiltipNoVideo": "비디오 없음", "labelTooltipAudioOnly": "오디오 전용 모드 사용", "ld": "LD", - "lowDefinition": "저화질", - "onlyAudioAvailable": "오디오만 사용할 수 있습니다", - "onlyAudioSupported": "이 브라우저에서는 오디오만 지원합니다", + "ldTooltip": "저해상도 비디오 보기", + "lowDefinition": "저해상도", + "performanceSettings": "성능 설정", + "recording": "녹화 진행 중", "sd": "SD", - "standardDefinition": "표준 해상도" + "sdTooltip": "표준 해상도 비디오 보기", + "standardDefinition": "표준 해상도", + "streaming": "스트리밍 진행 중" }, "videothumbnail": { + "connectionInfo": "연결 정보", + "demote": "방문자로 이동", "domute": "음소거", - "flip": "플립", + "domuteOthers": "다른 사람 모두 음소거", + "domuteVideo": "카메라 비활성화", + "domuteVideoOfOthers": "다른 사람의 카메라 비활성화", + "flip": "뒤집기", + "grantModerator": "진행자 권한 부여", + "hideSelfView": "자기 보기 숨기기", "kick": "내보내기", - "moderator": "중재자", + "mirrorVideo": "내 비디오 미러링", + "moderator": "진행자", "mute": "참가자 음소거", "muted": "음소거됨", + "pinToStage": "스테이지에 고정", "remoteControl": "원격 제어", + "screenSharing": "참가자가 화면을 공유하고 있습니다", "show": "화면에 표시", + "showSelfView": "자기 보기 표시", + "unpinFromStage": "고정 해제", + "verify": "참가자 확인", + "videoMuted": "카메라 비활성화됨", "videomute": "참가자가 카메라를 중지했습니다." }, "virtualBackground": { - "enableBlur": "흐린 배경 활성화", + "accessibilityLabel": { + "currentBackground": "현재 배경: {{background}}", + "selectBackground": "배경 선택" + }, + "addBackground": "배경 추가", + "apply": "적용", + "backgroundEffectError": "배경 효과 적용 실패.", + "blur": "흐리게", + "deleteImage": "이미지 삭제", + "desktopShare": "데스크톱 공유", + "desktopShareError": "데스크톱 공유를 생성할 수 없습니다", + "image1": "해변", + "image2": "흰색 중립 벽", + "image3": "흰색 빈 방", + "image4": "검은색 바닥 램프", + "image5": "산", + "image6": "숲", + "image7": "일출", "none": "없음", - "pleaseWait": "잠시만 기다려주세요...", + "pleaseWait": "잠시만 기다려주세요…", "removeBackground": "배경 제거", + "slightBlur": "약간 흐리게", "title": "배경", - "uploadImage": "이미지 업로드" + "uploadedImage": "업로드된 이미지 {{index}}", + "webAssemblyWarning": "WebAssembly를 지원하지 않습니다", + "webAssemblyWarningDescription": "이 브라우저에서 WebAssembly가 비활성화되었거나 지원되지 않습니다" }, + "visitors": { + "chatIndicator": "(방문자)", + "joinMeeting": { + "description": "현재 이 회의에서 참관인입니다.", + "raiseHand": "손 들기", + "title": "회의 참가", + "wishToSpeak": "발언하고 싶으시면 아래에서 손을 들고 진행자의 승인을 기다려주세요." + }, + "labelTooltip": "방문자 수: {{count}}", + "notification": { + "demoteDescription": "{{actor}}에 의해 여기로 보내졌습니다. 참여하려면 손을 들어주세요.", + "noMainParticipantsDescription": "참가자가 회의를 시작해야 합니다. 잠시 후 다시 시도해 주세요.", + "noMainParticipantsTitle": "이 회의는 아직 시작되지 않았습니다.", + "noVisitorLobby": "회의에 로비가 활성화되어 있어 참여할 수 없습니다.", + "notAllowedPromotion": "참가자가 먼저 귀하의 요청을 승인해야 합니다.", + "title": "회의에서 방문자입니다" + }, + "waitingMessage": "회의가 시작되면 곧 참여하실 수 있습니다!" + }, + "volumeSlider": "볼륨 슬라이더", "welcomepage": { "accessibilityLabel": { "join": "가입", "roomname": "방 이름 입력" }, + "addMeetingName": "회의 이름 추가", "appDescription": "전체 팀과 화상 채팅을하십시오. 당신이 아는 모든 사람들을 초대하십시오. {{app}}은 완전히 암호화 된 100 % 오픈 소스 화상 회의 솔루션으로 계정 없이도 하루 종일, 매일 무료로 사용할 수 있습니다.", "audioVideoSwitch": { "audio": "음성", @@ -803,18 +1538,44 @@ "getHelp": "도움 받기", "go": "계속", "goSmall": "계속", + "headerSubtitle": "안전하고 고품질의 회의", + "headerTitle": "Jitsi Meet", "info": "정보", + "jitsiOnMobile": "모바일에서 Jitsi – 앱을 다운로드하고 어디서나 회의를 시작하세요", "join": "가입", + "logo": { + "calendar": "캘린더 로고", + "desktopPreviewThumbnail": "데스크톱 미리보기 썸네일", + "googleLogo": "구글 로고", + "logoDeepLinking": "Jitsi meet 로고", + "microsoftLogo": "마이크로소프트 로고", + "policyLogo": "정책 로고" + }, + "meetingsAccessibilityLabel": "회의", + "mobileDownLoadLinkAndroid": "Android용 모바일 앱 다운로드", + "mobileDownLoadLinkFDroid": "F-Droid용 모바일 앱 다운로드", + "mobileDownLoadLinkIos": "iOS용 모바일 앱 다운로드", + "moderatedMessage": "또는 회의 URL을 미리 예약하여 유일한 진행자가 되십시오.", "privacy": "개인정보", "recentList": "최근", "recentListDelete": "삭제", "recentListEmpty": "최근 목록이 현재 비어 있습니다. 팀과 채팅하면 여기에서 최근 회의를 모두 찾을 수 있습니다.", + "recentMeetings": "최근 회의", "reducedUIText": "{{app}}에 오신 것을 환영합니다!", - "roomNameAllowedChars": "회의 이름은 이러한 문자를 포함 할 수 없습니다.: ?, &, :, ', \", %, #.", + "roomNameAllowedChars": "회의 이름은 다음 문자를 포함할 수 없습니다.: ?, &, :, ', \", %, #.", "roomname": "방 이름 입력", "roomnameHint": "참여하려는 방의 이름 또는 URL을 입력하십시오. 이름을 정하고 만나는 사람들에게 같은 이름을 입력하도록 알리면됩니다.", "sendFeedback": "피드백 보내기", + "settings": "설정", + "startMeeting": "회의 시작", "terms": "이용약관", - "title": "안전하고 모든 기능을 갖춘 완전 무료 화상 회의" + "title": "안전하고 모든 기능을 갖춘 완전 무료 화상 회의", + "upcomingMeetings": "예정된 회의" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "화이트보드" + }, + "screenTitle": "화이트보드" } } diff --git a/lang/main-lt.json b/lang/main-lt.json index c164fe6d88a3..ecfed99c333a 100644 --- a/lang/main-lt.json +++ b/lang/main-lt.json @@ -68,7 +68,7 @@ "installExtensionText": "Įdiekite „Google“ ir „Office 365“ kalendoriaus plėtinį" }, "connectingOverlay": { - "joiningRoom": "Jungiamasi prie jūsų susitikimo..." + "joiningRoom": "Jungiamasi prie jūsų susitikimo…" }, "connection": { "ATTACHED": "Pridėta", @@ -80,9 +80,9 @@ "DISCONNECTED": "Atsijungta", "DISCONNECTING": "Atsijungiama", "ERROR": "Klaida", - "FETCH_SESSION_ID": "Gaunamas sesijos-id...", + "FETCH_SESSION_ID": "Gaunamas sesijos-id…", "GET_SESSION_ID_ERROR": "Sesijos-id gavimo klaida: {{kodas}}", - "GOT_SESSION_ID": "Gautas sesijos-id... Atlikta", + "GOT_SESSION_ID": "Gautas sesijos-id… Atlikta", "LOW_BANDWIDTH": "Vaizdo įrašas, skirtas {{displayName}}, buvo išjungtas, kad būtų išsaugotas pralaidumas" }, "connectionindicator": { @@ -127,7 +127,7 @@ "downloadApp": "Atsisiųsti programą", "launchWebButton": "Paleisti svetainėje", "openApp": "Tęsti mobiliaja programėle", - "title": "Paleidžiamas susitikimas {{app}}...", + "title": "Paleidžiamas susitikimas {{app}}…", "tryAgainButton": "Bandyti dar kartą darbalaukyje" }, "defaultLink": "e.g. {{url}}", @@ -156,7 +156,7 @@ "Share": "Dalintis", "Submit": "Pateikti", "WaitForHostMsg": "Konferencija dar neprasidėjo. Jei jūs organizatorius, prašome tai patvirtinti. Jei ne, prašome palaukti organizatoriaus.", - "WaitingForHost": "Laukiama organizatoriaus ...", + "WaitingForHost": "Laukiama organizatoriaus…", "Yes": "Taip", "accessibilityLabel": { "liveStreaming": "Tiesioginis srautas" @@ -173,9 +173,9 @@ "cameraUnknownError": "Įvyko klaida - negalite naudoti kameros.", "cameraUnsupportedResolutionError": "Jūsų kamera nepalaiko reikalaujamos vaizdo raiškos.", "close": "Uždaryti", - "conferenceDisconnectMsg": "Pasitikrinkite savo interneto ryšį. Perkrausime už {{seconds}} sek. ...", + "conferenceDisconnectMsg": "Pasitikrinkite savo interneto ryšį. Perkrausime už {{seconds}} sek.…", "conferenceDisconnectTitle": "Jūs buvote atjungta(-as).", - "conferenceReloadMsg": "Mes bandome tai pataisyti. Perkrausime už {{seconds}} sek. ...", + "conferenceReloadMsg": "Mes bandome tai pataisyti. Perkrausime už {{seconds}} sek.…", "conferenceReloadTitle": "Apgailėstaujame, įvyko klaida.", "confirm": "Patvirtinti", "confirmNo": "Ne", @@ -379,7 +379,7 @@ "errorLiveStreamNotEnabled": "Tiesioginė transliacija nėra galima paskyrai {{email}}. Įjunkite tiesioginį srautą arba prisijunkite prie paskyros, kurioje įjungta tiesioginė transliacija.", "expandedOff": "Tiesioginė transliacija sustojo", "expandedOn": "Šiuo metu susitikimas transliuojamas per YouTube.", - "expandedPending": "Tiesioginė transliacija prasideda...", + "expandedPending": "Tiesioginė transliacija prasideda…", "failedToStart": "Nepavyko pajungti tiesioginės transliacijos", "getStreamKeyManually": "Mums nepavyko atverti jokios tiesioginės transliacijos. Pabandykite suvesti tiesioginės transliacijos raktažodį iš Youtube.", "invalidStreamKey": "Tiesioginės transliacijos raktažodis neteisingas.", @@ -387,7 +387,7 @@ "offBy": "{{name}} sustabdė srautą", "on": "Tiesioginė transliacija", "onBy": "{{name}} pradėjo tiesioginę transliaciją", - "pending": "Pradedama tiesioginė transliacija...", + "pending": "Pradedama tiesioginė transliacija…", "serviceName": "Tiesioginė transliacijos tarnyba", "signIn": "Prisijunkite su Google", "signInCTA": "Prisijunkite arba įveskite raktažodį iš Youtube.", @@ -475,17 +475,17 @@ "poweredby": "pateikiamas", "presenceStatus": { "busy": "Užimtas", - "calling": "Skambinama...", + "calling": "Skambinama…", "connected": "Prisijungta", - "connecting": "Prisijungiama...", - "connecting2": "Prisijungiama*...", + "connecting": "Prisijungiama…", + "connecting2": "Prisijungiama*…", "disconnected": "Atsijungta", "expired": "Pasibaigęs", "ignored": "Ignoruojamas", - "initializingCall": "Inicijuojamas skambutis...", + "initializingCall": "Inicijuojamas skambutis…", "invited": "Pakviestas", "rejected": "Atmestas", - "ringing": "Skambina..." + "ringing": "Skambina…" }, "profile": { "setDisplayNameLabel": "Įveskite savo vardą", @@ -503,7 +503,7 @@ "error": "Įrašymas nepavyko. Bandykite dar kartą.", "expandedOff": "Įrašymas buvo sustabdytas", "expandedOn": "Šis susitikimas šiuo metu yra įrašomas.", - "expandedPending": "Įrašymas prasidėjo...", + "expandedPending": "Įrašymas prasidėjo…", "failedToStart": "Nepavyko pradėti įrašymo", "fileSharingdescription": "Dalintis įrašu su kitais naudotojais", "live": "GYVAI", @@ -512,7 +512,7 @@ "offBy": "{{name}} sustabdė įrašą", "on": "Įrašinėjama", "onBy": "{{name}} pradėjo įrašą", - "pending": "Ruošiama įrašinėti susitikimą...", + "pending": "Ruošiama įrašinėti susitikimą…", "rec": "REC", "serviceDescription": "Jūsų įrašą išssaugos įrašymo tarnyba", "serviceName": "Įrašymo tarnyba", @@ -695,22 +695,13 @@ "failedToStart": "Perrašymas neprasidėjo", "labelToolTip": "Susitikimas yra perrašomas", "off": "Perrašymas sustojo", - "pending": "Ruošiama perrašyti susitikimą...", + "pending": "Ruošiama perrašyti susitikimą…", "start": "Pradėti rodyti subtitrus", "stop": "Nustoti rodyti subtitrus", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Pasirinkite Allow kai jūsų naršyklė prašys leidimo.", - "chromeGrantPermissions": "Pasirinkite Allow kai jūsų naršyklė prašys leidimo.", - "edgeGrantPermissions": "Pasirinkite Yes kai jūsų naršyklė prašys leidimų.", - "electronGrantPermissions": "Prašome duoti leidimą, kad galėtumėte naudotis kamera ir mikrofonu", - "firefoxGrantPermissions": "Pasirinkite Share Selected Device kai jūsų naršyklė prašys leidimo.", - "iexplorerGrantPermissions": "Pasirinkite OK kai jūsų naršyklė prašys leidimo.", - "nwjsGrantPermissions": "Prašome duoti leidimo, kad galėtumėte naudotis kamera ir mikrofonu", - "operaGrantPermissions": "Pasirinkite Allow kai jūsų naršyklė prašys leidimo.", - "react-nativeGrantPermissions": "Pasirinkite Allow kai jūsų naršyklė prašys leidimo.", - "safariGrantPermissions": "Pasirinkite OK kai jūsų naršyklė prašys leidimo." + "grantPermissions": "Prašome duoti leidimo, kad galėtumėte naudotis kamera ir mikrofonu." }, "videoSIPGW": { "busy": "Mes dirbame, kad atlaisvinti išteklius. Prašome pabandyti dar kartą po kelių minučių.", diff --git a/lang/main-lv.json b/lang/main-lv.json index c2fea22f658d..031b8d19b12c 100644 --- a/lang/main-lv.json +++ b/lang/main-lv.json @@ -22,7 +22,7 @@ "noResults": "Nav atbilstošu meklēšanas rezultātu", "outlookEmail": "Outlook e-pasts", "phoneNumbers": "tālruņu numuri", - "searching": "Meklēšana...", + "searching": "Meklēšana…", "shareInvite": "Kopīgojiet sapulces ielūgumu", "shareLink": "Kopīgojiet sapulces saiti, lai uzaicinātu citus", "shareStream": "Kopīgojiet tiešraides straumēšanas saiti", @@ -109,9 +109,12 @@ } }, "chat": { + "disabled": "Tērzēšanas ziņojumu sūtīšana ir atspējota.", "enter": "Ienākt istabā", "error": "Kļūda: Jūsu ziņa netika nosūtīta. Cēlonis: {{error}}", + "everyone": "Visi", "fieldPlaceHolder": "Rakstiet ziņu šeit", + "guestsChatIndicator": "(viesis)", "lobbyChatMessageTo": "Vestibila tērzēšanas ziņa adresātam {{recipient}}", "message": "Ziņa", "messageAccessibleTitle": "{{user}} saka:", @@ -122,17 +125,26 @@ "nickname": { "popover": "Izvēlieties vārdu", "title": "Ierakstiet vārdu, lai izmantotu tērzēšanā", - "titleWithPolls": "Ierakstiet vārdu, lai izmantotu tērzēšanā un aptaujās" + "titleWithCC": "Ievadiet segvārdu, lai izmantotu tērzēšanā un slēptos subtitros", + "titleWithPolls": "Ierakstiet segvārdu, lai izmantotu tērzēšanā un aptaujās", + "titleWithPollsAndCC": "Ievadiet segvārdu, lai izmantotu tērzēšanā, aptaujās un slēptos subtitros", + "titleWithPollsAndCCAndFileSharing": "Ievadiet segvārdu, lai izmantotu tērzēšanā, aptaujās, slēptos subtitros un failos" }, "noMessagesMessage": "Sapulcē pagaidām nav nevienas ziņas. Uzsāciet saraksti!", "privateNotice": "Privāta ziņa adresātam {{recipient}}", "sendButton": "Nosūtīt", "smileysPanel": "Emociju panelis", + "systemDisplayName": "Sistēma", "tabs": { "chat": "Tērzēšana", + "closedCaptions": "Slēptie subtitri", + "fileSharing": "Faili", "polls": "Aptaujas" }, "title": "Tērzēšana", + "titleWithCC": "Tērzēšana un Slēptie subtitri", + "titleWithFeatures": "Tērzēšana un", + "titleWithFileSharing": "Faili", "titleWithPolls": "Tērzēšana un Aptaujas", "you": "jūs" }, @@ -143,8 +155,12 @@ "dontShowAgain": "Nerādīt man šo vēlreiz", "installExtensionText": "Uzstādīt spraudni Google kalendāra un Office 365 integrācijai" }, + "closedCaptionsTab": { + "emptyState": "Slēpto subtitru saturs būs pieejams, tiklīdz moderators uzsāks to.", + "startClosedCaptionsButton": "Uzsākt slēptos subtitrus" + }, "connectingOverlay": { - "joiningRoom": "Notiek pieslēgšanās jūsu sapulcei..." + "joiningRoom": "Notiek pieslēgšanās jūsu sapulcei…" }, "connection": { "ATTACHED": "Piestiprināts", @@ -156,9 +172,9 @@ "DISCONNECTED": "Atvienots", "DISCONNECTING": "Notiek atvienošanās", "ERROR": "Kļūda", - "FETCH_SESSION_ID": "Tiek iegūts sesijas-id...", + "FETCH_SESSION_ID": "Tiek iegūts sesijas-id…", "GET_SESSION_ID_ERROR": "Notika sesijas-id kļūda: {{code}}", - "GOT_SESSION_ID": "Tiek iegūts sesijas-id... Darīts", + "GOT_SESSION_ID": "Tiek iegūts sesijas-id… Darīts", "LOW_BANDWIDTH": "{{displayName}} video tika izslēgts, lai mazinātu tīkla noslodzi" }, "connectionindicator": { @@ -223,8 +239,8 @@ "noMobileApp": "Vai jums nav lietotnes?", "or": "vai", "termsAndConditions": "Turpinot jūs piekrītat mūsu pakalpojumu sniegšanas noteikumiem.", - "title": "Notiek jūsu sapulces palaišana lietotnē {{app}}...", - "titleNew": "Notiek jūsu sapulces palaišana ...", + "title": "Notiek jūsu sapulces palaišana lietotnē {{app}}…", + "titleNew": "Notiek jūsu sapulces palaišana…", "tryAgainButton": "Mēģināt vēlreiz darbvirsmā", "unsupportedBrowser": "Izskatās, ka izmantojat pārlūkprogrammu, kuru mēs neatbalstām." }, @@ -262,9 +278,12 @@ "Remove": "Noņemt", "Share": "Kopīgot", "Submit": "Iesniegt", - "WaitForHostMsg": "Sapulce vēl nav sākusies. Ja esat sapulces rīkotājs, lūdzu autorizējaties. Pretējā gadījumā, lūdzu, uzgaidiet.", + "Understand": "Saprotu", + "UnderstandAndUnmute": "Es saprotu, lūdzu, ieslēdziet skaņu.", + "WaitForHostMsg": "Sapulce vēl nav sākusies, jo vēl nav ieradies neviens moderators. Lūdzu, autorizējieties, lai kļūtu par moderatoru. Pretējā gadījumā, lūdzu, uzgaidiet.", + "WaitForHostNoAuthMsg": "Sapulce vēl nav sākusies, jo vēl nav ieradies neviens moderators. Lūdzu, uzgaidiet.", "WaitingForHostButton": "Gaidīt rīkotāju", - "WaitingForHostTitle": "Gaida rīkotāju...", + "WaitingForHostTitle": "Gaida rīkotāju…", "Yes": "Jā", "accessibilityLabel": { "Cancel": "Atcelt (pamest dialoglogu)", @@ -283,6 +302,12 @@ "alreadySharedVideoTitle": "Atļauts tikai viens kopīgots videoklips", "applicationWindow": "Lietotnes logs", "authenticationRequired": "Nepieciešama autentifikācija", + "cameraCaptureDialog": { + "description": "Uzņemt un nosūtīt attēlu, izmantojot mobilā tālruņa kameru", + "ok": "Atvērt kameru", + "reject": "Ne tagad", + "title": "Uzņemt attēlu" + }, "cameraConstraintFailedError": "Kamera neatbilst noteiktajām prasībām.", "cameraNotFoundError": "Kamera nav atrasta.", "cameraNotSendingData": "Nevar piekļūt jūsu kamerai. Lūdzu, pārbaudiet, vai šo ierīci neizmanto cita programma, iestatījumu izvēlnē atlasiet citu ierīci vai mēģiniet atkārtoti ielādēt programmu.", @@ -292,11 +317,12 @@ "cameraUnknownError": "Nevar izmantot kameru nezināma iemesla dēļ.", "cameraUnsupportedResolutionError": "Jūsu kamera neatbalsta nepieciešamo video izšķirtspēju.", "close": "Aizvērt", - "conferenceDisconnectMsg": "Pārbaudiet interneta savienojumu. Atkārtota savienojuma izveide pēc {{seconds}} sek...", + "conferenceDisconnectMsg": "Pārbaudiet interneta savienojumu. Atkārtota savienojuma izveide pēc {{seconds}} sek…", "conferenceDisconnectTitle": "Jūs esat atvienots.", - "conferenceReloadMsg": "Cenšamies to labot. Atkārtota savienojuma izveide pēc {{seconds}} sek....", + "conferenceReloadMsg": "Cenšamies to labot. Atkārtota savienojuma izveide pēc {{seconds}} sek….", "conferenceReloadTitle": "Diemžēl kaut kas nogāja greizi.", "confirm": "Apstiprināt", + "confirmBack": "Atpakaļ", "confirmNo": "Nē", "confirmYes": "Jā", "connectError": "Hmm! Radās problēma, un mēs nevarējām izveidot savienojumu ar sapulci.", @@ -318,6 +344,7 @@ "embedMeeting": "Iegult sapulci", "enterDisplayName": "Ievadiet savu vārdu", "error": "Kļūda", + "errorRoomCreationRestriction": "Jūs mēģinājāt pievienoties pārāk ātri. Lūdzu, atgriezieties vēlāk.", "gracefulShutdown": "Mūsu serviss pašlaik nedarbojas apkopes dēļ. Lūdzu, pamēģiniet vēlreiz vēlāk.", "grantModeratorDialog": "Vai tiešām vēlaties piešķirt moderatora tiesības dalībniekam {{participantName}}?", "grantModeratorTitle": "Piešķirt moderatora tiesības", @@ -331,14 +358,16 @@ "kickParticipantButton": "Izraidīt", "kickParticipantDialog": "Vai esat pārliecināti, ka vēlaties izraidīt šo dalībnieku?", "kickParticipantTitle": "Izraidīt šo dalībnieku?", + "kickSystemTitle": "Ak! Jūs izraidīja no sapulces", "kickTitle": "Ak! {{participantDisplayName}} izraidīja jūs no sapulces", + "learnMore": "uzzināt vairāk", "linkMeeting": "Sasaistīt sapulci", "linkMeetingTitle": "Sasaistīt sapulci ar Salesforce", "liveStreaming": "Tiešraides straumēšana", "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Nav iespējams, kamēr ir aktīva ierakstīšana", "localUserControls": "Lokālo lietotāju kontroles", "lockMessage": "Neizdevās aizslēgt sapulci.", - "lockRoom": "Pievienot sapulci $t(lockRoomPasswordUppercase)", + "lockRoom": "Iestatīt sapulces $t(lockRoomPasswordUppercase)", "lockTitle": "Aizslēgšāna neizdevās", "login": "Pierakstīties", "loginQuestion": "Vai tiešām vēlaties pierakstīties un pamest sapulci?", @@ -353,35 +382,47 @@ "micPermissionDeniedError": "Nav piekļuves mikrofonam. Jūs varat piedalīties sapulcē, bet citi jūs nedzirdēs. Lai to novērstu, izmantojiet kameras ikonu pārlūkprogrammas adrešu joslā.", "micTimeoutError": "Nevarēja palaist audio avotu. Iestājās noildze!", "micUnknownError": "Nevar izmantot mikrofonu nezināma iemesla dēļ.", - "moderationAudioLabel": "Ļaujiet dalībniekiem ieslēgt savu mikrofonu", - "moderationVideoLabel": "Ļaujiet dalībniekiem ieslēgt savu kameru", - "muteEveryoneDialog": "Dalībnieki jebkurā laikā var ieslēgt savu mikrofonu.", - "muteEveryoneDialogModerationOn": "Dalībnieki jebkurā laikā var nosūtīt pieprasījumu runāt.", - "muteEveryoneElseDialog": "Kad skaņa būs izslēgta, jūs nevarēsit to ieslēgt atpakaļ, taču dalībnieki jebkurā laikā to varēs izdarīt paši.", + "moderationAudioLabel": "Atļaut dalībniekiem ieslēgt savu mikrofonu", + "moderationDesktopLabel": "Atļaut lietotājiem, kas nav moderatori, kopīgot savu ekrānu", + "moderationVideoLabel": "Atļaut dalībniekiem ieslēgt savu kameru", + "muteEveryoneDialog": "Dalībnieki paši var ieslēgt savu mikrofonu.", + "muteEveryoneDialogModerationOn": "Dalībnieki var nosūtīt pieprasījumu ieslēgt savu mikrofonu.", + "muteEveryoneElseDialog": "Kad skaņa būs izslēgta, jūs nevarēsiet to ieslēgt atpakaļ, taču dalībnieki to varēs izdarīt paši.", "muteEveryoneElseTitle": "Vai izslēgt skaņu visiem, izņemot {{whom}}?", - "muteEveryoneElsesVideoDialog": "Kad video būs izslēgts, jūs nevarēsit to ieslēgt atpakaļ, taču dalībnieki jebkurā laikā to varēs izdarīt paši.", + "muteEveryoneElsesDesktopDialog": "Kad kopīgošana būs apturēta, jūs vairs nevarēsiet to ieslēgt atpakaļ, bet viņi to varēs izdarīt jebkurā laikā.", + "muteEveryoneElsesDesktopTitle": "Apturēt ekrāna kopīgošanu visiem, izņemot {{kam}}?", + "muteEveryoneElsesVideoDialog": "Kad video būs izslēgts, jūs nevarēsiet to ieslēgt atpakaļ, taču dalībnieki to varēs izdarīt paši.", "muteEveryoneElsesVideoTitle": "Vai izslēgt video visiem, izņemot {{whom}}?", "muteEveryoneSelf": "jūs", "muteEveryoneStartMuted": "No šī brīža visi jauni dalībnieki pieslēdzas ar izslēgt skaņu", "muteEveryoneTitle": "Vai izslēgt skaņu visiem?", - "muteEveryonesVideoDialog": "Dalībnieki var jebkurā laikā ieslēgt savu video.", - "muteEveryonesVideoDialogModerationOn": "Dalībnieki jebkurā laikā var nosūtīt pieprasījumu ieslēgt viņu video.", + "muteEveryonesDesktopDialog": "Dalībnieki var kopīgot savu ekrānu jebkurā laikā.", + "muteEveryonesDesktopDialogModerationOn": "Dalībnieki jebkurā laikā var nosūtīt pieprasījumu kopīgot savu ekrānu.", + "muteEveryonesDesktopTitle": "Vai pārtraukt ekrāna kopīgošanu visiem?", + "muteEveryonesVideoDialog": "Dalībnieki var ieslēgt savu video.", + "muteEveryonesVideoDialogModerationOn": "Dalībnieki var nosūtīt pieprasījumu ieslēgt viņu video.", "muteEveryonesVideoDialogOk": "Atspējot", "muteEveryonesVideoTitle": "Vai apturēt ikviena video?", - "muteParticipantBody": "Jūs nevarat viņiem ieslēgt skaņu, bet viņi paši to var izdarīt jebkurā laikā.", + "muteParticipantBody": "Jūs nevariet viņiem ieslēgt skaņu, bet viņi paši to var izdarīt jebkurā laikā.", "muteParticipantButton": "Izslēgt skaņu", - "muteParticipantsVideoBody": "Jūs nevarēsiet atkal ieslēgt kameru, taču viņi var to jebkurā laikā atkal ieslēgt.", - "muteParticipantsVideoBodyModerationOn": "Jūs nevarēsiet atkal ieslēgt kameru, un viņi arī nevarēs.", + "muteParticipantsDesktopBody": "Jūs nevarēsiet sākt viņu ekrāna kopīgošanu, bet viņi to varēs izdarīt jebkurā laikā.", + "muteParticipantsDesktopBodyModerationOn": "Jūs nevarēsiet sākt viņu ekrāna kopīgošanu, un arī viņi to nevarēs izdarīt.", + "muteParticipantsDesktopButton": "Pārtraukt ekrāna kopīgošanu", + "muteParticipantsDesktopDialog": "Vai tiešām vēlaties izslēgt šī dalībnieka ekrāna kopīgošanu? Jūs vairs nevarēsiet ieslēgt to atpakaļ, bet viņš to varēs izdarīt jebkurā laikā.", + "muteParticipantsDesktopDialogModerationOn": "Vai tiešām vēlaties izslēgt šī dalībnieka ekrāna kopīgošanu? Jūs vairs nevarēsiet ieslēgt to atpakaļ, un arī viņš to nevarēs izdarīt.", + "muteParticipantsDesktopTitle": "Atspējot ekrāna kopīgošanu šim dalībniekam?", + "muteParticipantsVideoBody": "Jūs nevarēsiet kameru ieslēgt atpakaļ, taču viņi paši to varēs izdarīt jebkurā laikā.", + "muteParticipantsVideoBodyModerationOn": "Ne Jūs, ne dalībnieki nevarēsiet ieslēgt kameru atpakaļ.", "muteParticipantsVideoButton": "Pārtraukt video", - "muteParticipantsVideoDialog": "Vai tiešām vēlaties izslēgt šī dalībnieka kameru? Jūs nevarēsiet atkal ieslēgt kameru, taču viņi var to jebkurā laikā atkal ieslēgt.", - "muteParticipantsVideoDialogModerationOn": "Vai tiešām vēlaties izslēgt šī dalībnieka kameru? Jūs nevarēsiet atkal ieslēgt kameru, un viņi arī nevarēs.", + "muteParticipantsVideoDialog": "Vai tiešām vēlaties izslēgt šī dalībnieka kameru? Jūs nevarēsiet to ieslēgt atpakaļ, taču dalībnieks pats to varēs izdarīt jebkurā laikā.", + "muteParticipantsVideoDialogModerationOn": "Vai tiešām vēlaties izslēgt šī dalībnieka kameru? Ne Jūs, ne dalībnieks nevarēsiet to ieslēgt atpakaļ.", "muteParticipantsVideoTitle": "Vai izslēgt šī dalībnieka video?", "noDropboxToken": "Nav derīga Dropbox tokena", "password": "Parole", "passwordLabel": "Dalībnieks ir aizslēdzis sapulci. Lūdzu, ievadiet $t(lockRoomPassword), lai pievienotos.", - "passwordNotSupported": "Sapulces $t(lockRoomPassword) iestatīšana netiek atbalstīta.", - "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) netiek atbalstīts", - "passwordRequired": "Nepieciešams $t(lockRoomPasswordUppercase)", + "passwordNotSupported": "Sapulces slēgšana ar $t(lockRoomPassword) netiek atbalstīta.", + "passwordNotSupportedTitle": "Slēgšana ar $t(lockRoomPasswordUppercase) netiek atbalstīta", + "passwordRequired": "Nepieciešams ievadīt $t(lockRoomPasswordUppercase)", "permissionCameraRequiredError": "Lai piedalītos konferencēs ar video, ir nepieciešama kameras atļauja. Lūdzu, piešķiriet to Iestatījumos", "permissionErrorTitle": "Nepieciešama atļauja", "permissionMicRequiredError": "Lai piedalītos konferencēs ar audio, nepieciešama mikrofona atļauja. Lūdzu, piešķiriet to Iestatījumos", @@ -389,6 +430,10 @@ "recentlyUsedObjects": "Jūsu nesen izmantotie objekti", "recording": "Ieraksts", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Nav iespējams, kamēr ir aktīva tiešraides straume", + "recordingInProgressDescription": "Šī sapulce tiek ierakstīta. Jūsu audio un video ir izslēgti. Ja izvēlaties ieslēgt skaņu vai video, jūs piekrītat ierakstīšanai.", + "recordingInProgressDescriptionFirstHalf": "Šo sanāksmi ieraksta un analizē mākslīgais intelekts", + "recordingInProgressDescriptionSecondHalf": ". Jūsu audio un video skaņa ir izslēgta. Ja izvēlaties ieslēgt skaņu, jūs piekrītat ierakstīšanai.", + "recordingInProgressTitle": "Notiek ierakstīšana", "rejoinNow": "Pieslēgties no jauna", "remoteControlAllowedMessage": "{{user}} apstiprināja jūsu attālās pārvaldības pieprasījumu!", "remoteControlDeniedMessage": "{{user}} noraidīja jūsu attālās pārvaldības pieprasījumu!", @@ -436,7 +481,10 @@ "shareScreenWarningD2": "jums ir jāpārtrauc audio kopīgošana, jāsāk ekrāna kopīgošana un jāatzīmē opcija \"kopīgot audio\".", "shareScreenWarningH1": "Ja vēlaties kopīgot tikai savu ekrānu:", "shareScreenWarningTitle": "Pirms ekrāna kopīgošanas jums ir jāpārtrauc audio kopīgošana", + "shareVideoConfirmPlay": "Jūs gatavojaties atvērt ārēju vietni. Vai vēlaties turpināt?", + "shareVideoConfirmPlayTitle": "{{name}} kopīgoja ar jums videoklipu.", "shareVideoLinkError": "Lūdzu, norādiet pareizu video saiti.", + "shareVideoLinkStopped": "Videoklips no {{name}} tika apturēts.", "shareVideoTitle": "Kopīgot video", "shareYourScreen": "Kopīgot ekrānu", "shareYourScreenDisabled": "Ekrāna kopīgošana izslēgta.", @@ -474,18 +522,18 @@ "tokenAuthFailedTitle": "Autentifikācijas kļūda", "tokenAuthFailedWithReasons": "Atvainojiet, jums nav atļauts pievienoties šim zvanam. Iespējamie iemesli: {{reason}}", "tokenAuthUnsupported": "Token URL netiek atbalstīts.", - "transcribing": "Notiek transkripcija", + "transcribing": "Notiek atšifrējuma izveide", "unlockRoom": "Noņemt $t(lockRoomPassword)", "user": "Lietotājs", - "userIdentifier": "Lietotāja identifikators", - "userPassword": "lietotāja parole", + "userIdentifier": "Lietotājvārds", + "userPassword": "Parole", "verifyParticipantConfirm": "Sakrīt", "verifyParticipantDismiss": "Nesakrīt", "verifyParticipantQuestion": "EKSPERIMENTĀLS: pajautājiet dalībniekam {{participantName}}, vai viņš redz to pašu saturu tādā pašā secībā.", "verifyParticipantTitle": "Lietotāja verifikācija", "videoLink": "Video saite", "viewUpgradeOptions": "Skatīt jaunināšanas iespējas", - "viewUpgradeOptionsContent": "Lai iegūtu neierobežotu piekļuvi augstākās klases funkcijām, piemēram, ierakstīšanai, transkripcijām, RTMP straumēšanai un citām iespējām, jums ir jāpalielina plāns.", + "viewUpgradeOptionsContent": "Lai iegūtu neierobežotu piekļuvi augstākās klases funkcijām, piemēram, ierakstīšanai, atšifrējuma izveidei, RTMP straumēšanai un citām iespējām, jums ir jāpalielina plāns.", "viewUpgradeOptionsTitle": "Jūs atklājāt premium funkcionalitāti!", "whiteboardLimitContent": "Diemžēl ir sasniegts vienlaicīgu tāfeles lietotāju ierobežojums.", "whiteboardLimitReference": "Lai iegūtu vairāk informācijas, lūdzu, apmeklējiet", @@ -515,6 +563,23 @@ "veryBad": "Ļoti Slikta", "veryGood": "Ļoti Laba" }, + "fileSharing": { + "downloadFailedDescription": "Lūdzu, mēģiniet vēlreiz.", + "downloadFailedTitle": "Lejuplādes kļūda", + "downloadFile": "Lejuplādēt", + "downloadStarted": "Sākta faila lejuplāde", + "dragAndDrop": "Velciet un palaidiet failus šeit, vai jebkurā ekrāna vietā", + "fileAlreadyUploaded": "Fails jau ir augšuplādēts šajā sanāksmē.", + "fileTooLargeDescription": "Lūdzu, pārliecinieties, vai faila lielums nepārsniedz {{ maxFileSize }}.", + "fileTooLargeTitle": "Izvēlētais fails ir pārāk liels", + "fileUploadProgress": "Faila augšuplādes gaita", + "fileUploadedSuccessfully": "Fails veiksmīgi augšuplādēts", + "removeFile": "Noņemt", + "removeFileSuccess": "Fails veiksmīgi noņemts", + "uploadFailedDescription": "Lūdzu, mēģiniet vēlreiz.", + "uploadFailedTitle": "Augšuplādes kļūda", + "uploadFile": "Kopīgot failu" + }, "filmstrip": { "accessibilityLabel": { "heading": "Video sīktēli" @@ -564,7 +629,7 @@ "noRoom": "Iezvana numuram nav piesaistīta neviena sapulces telpa.", "noWhiteboard": "Nevarēja ielādēt tāfeli.", "numbers": "Iezvana numuri", - "password": "$t(lockRoomPasswordUppercase):", + "password": "Ievadiet $t(lockRoomPasswordUppercase):", "reachedLimit": "Jūs esat sasniedzis sava plāna limitu.", "sip": "SIP adrese", "sipAudioOnly": "Tikai SIP audio adrese", @@ -601,7 +666,7 @@ "showSpeakerStats": "Rādīt prezentētāja statistiku", "toggleChat": "Tērzētava (čats) (atvērt/aizvērt)", "toggleFilmstrip": "Kinolente (rādīt/nerādīt)", - "toggleParticipantsPane": "Rādīt vai paslēpt dalībnieku paneli", + "toggleParticipantsPane": "Rādīt/paslēpt dalībnieku paneli", "toggleScreensharing": "Pārslēgties starp kameru un ekrāna rādīšanu", "toggleShortcuts": "Atrās piekļuves taustiņi (rādīt/nerādīt)", "videoMute": "Kamera (iesl./izsl.)" @@ -619,10 +684,10 @@ "enterStreamKey": "Ievadiet jūsu YouTube tiešraides atslēgu.", "error": "Tiešraides kļūda. Lūdzu, mēģiniet vēlreiz.", "errorAPI": "Piekļūstot jūsu YouTube tiešraidēm, atgadījās kļūda. Lūdzu, mēģiniet ierakstīties vēlreiz.", - "errorLiveStreamNotEnabled": "Tiešraide lietotājam {{email}} nav iespējota. Lūdzu, iespējojiet tiešraidi vai ierakstieties kontā, kuram jau iespējota tiešraide...", + "errorLiveStreamNotEnabled": "Tiešraide lietotājam {{email}} nav iespējota. Lūdzu, iespējojiet tiešraidi vai ierakstieties kontā, kuram jau iespējota tiešraide…", "expandedOff": "Tiešraide izslēgta/nenotiek", "expandedOn": "Pašlaik sapulce tiek straumēta uz YouTube.", - "expandedPending": "Sākas tiešraide...", + "expandedPending": "Sākas tiešraide…", "failedToStart": "Neizdevās uzsākt tiešraidi", "getStreamKeyManually": "Tiešraides nav atrastas. Iegūstiet tiešraides atslēgu no YouTube.", "googlePrivacyPolicy": "Google konfidencialitātes politika", @@ -634,7 +699,8 @@ "offBy": "{{name}} izslēdza tiešraidi", "on": "Tiešraide ieslēgta", "onBy": "{{name}} ieslēdza tiešraidi", - "pending": "Sākam tiešraidi...", + "pending": "Sākam tiešraidi…", + "policyError": "Jūs mēģinājāt pārāk ātri sākt tiešraides straumi. Lūdzu, vēlāk mēģiniet vēlreiz!", "serviceName": "Tiešsaistes pakalpojums", "sessionAlreadyActive": "Šī sesija jau tiek ierakstīta vai straumēta tiešraidē.", "signIn": "Ierakstīties ar Google kontu", @@ -656,7 +722,7 @@ "emailField": "Ievadiet savu e-pasta adresi", "enableDialogPasswordField": "Iestatīt paroli (neobligāti)", "enableDialogSubmit": "Iespējot", - "enableDialogText": "Vestibila režīms ļauj aizsargāt sapulci, ļaujot cilvēkiem tajā iekļūt tikai pēc oficiāla moderatora apstiprinājuma.", + "enableDialogText": "Vestibila režīms ļauj aizsargāt sapulci, ļaujot cilvēkiem tajā iekļūt tikai pēc moderatora apstiprinājuma.", "enterPasswordButton": "Ievadiet sapulces paroli", "enterPasswordTitle": "Ievadiet paroli, lai pievienotos sapulcei", "errorMissingPassword": "Lūdzu, ievadiet sapulces paroli", @@ -664,10 +730,10 @@ "joinRejectedMessage": "Moderators noraidīja jūsu pievienošanās pieprasījumu.", "joinRejectedTitle": "Pievienošanās pieprasījums noraidīts.", "joinTitle": "Pievienoties Sapulcei", - "joinWithPasswordMessage": "Mēģina pievienoties, izmantojot paroli, lūdzu, uzgaidiet...", + "joinWithPasswordMessage": "Mēģina pievienoties, izmantojot paroli, lūdzu, uzgaidiet…", "joiningMessage": "Jūs pievienosities sapulcei, tiklīdz kāds apstiprinās jūsu pieprasījumu", - "joiningTitle": "Lūgums pievienoties sapulcei...", - "joiningWithPasswordTitle": "Notiek pievienošanās ar paroli...", + "joiningTitle": "Lūgums pievienoties sapulcei…", + "joiningWithPasswordTitle": "Notiek pievienošanās ar paroli…", "knockButton": "Pajautāt Pievienoties", "knockTitle": "Kāds vēlas pievienoties sapulcei", "knockingParticipantList": "Dalībnieku saraksts, kas vēlas pievienoties", @@ -716,8 +782,8 @@ "wait": "Lūdzu, uzgaidiet, kamēr jūsu ieraksts tiek saglabāts", "yes": "Jā" }, - "lockRoomPassword": "parole", - "lockRoomPasswordUppercase": "Parole", + "lockRoomPassword": "paroli", + "lockRoomPasswordUppercase": "Paroli", "lonelyMeetingExperience": { "button": "Uzaiciniet citus", "youAreAlone": "Jūs esat vienīgais sapulcē" @@ -725,7 +791,10 @@ "me": "es", "notify": { "OldElectronAPPTitle": "Drošības ievainojamība!", - "allowAction": "Atļaut", + "allowAll": "Atļaut visu", + "allowAudio": "Atļaut audio", + "allowDesktop": "Atļaut ekrāna kopīgošanu", + "allowVideo": "Atļaut video", "allowedUnmute": "Varat ieslēgt mikrofona skaņu, ieslēgt kameru vai kopīgot ekrānu.", "audioUnmuteBlockedDescription": "Mikrofona ieslēgšanas darbība ir īslaicīgi bloķēta sistēmas ierobežojumu dēļ.", "audioUnmuteBlockedTitle": "Mikrofona ieslēgšana ir bloķēta!", @@ -733,10 +802,15 @@ "connectedOneMember": "{{name}} ir pievienojies sapulcei", "connectedThreePlusMembers": "{{name}} un {{count}} citi ir pievienojušies sapulcei", "connectedTwoMembers": "{{first}} un {{second}} ir pievienojušies sapulcei", - "dataChannelClosed": "Video kvalitāte ir traucēta", - "dataChannelClosedDescription": "Savienojuma kanāls ir atvienots, un tādējādi video kvalitāte ir ierobežota līdz zemākajam iestatījumam.", + "connectionFailed": "Savienojums neizdevās. Lūdzu, vēlāk mēģiniet vēlreiz!", + "dataChannelClosed": "Video kvalitāte var būt traucēta", + "dataChannelClosedDescription": "Savienojuma kanāls nedarbojas, tāpēc video kvalitāte var būt ierobežota līdz zemākajam iestatījumam.", + "dataChannelClosedDescriptionWithAudio": "Savienojuma kanāls nedarbojas, tāpēc var rasties audio un video traucējumi.", + "dataChannelClosedWithAudio": "Audio un video kvalitāte var būt traucēta", + "desktopMutedRemotelyTitle": "", "disabledIframe": "Iegulšana ir paredzēta tikai demonstrācijas nolūkiem, tāpēc šis zvans tiks atvienots pēc {{timeout}} minūtēm.", - "disabledIframeSecondary": "{{domain}} iegulšana ir paredzēta tikai demonstrācijas nolūkiem, tāpēc šis zvans tiks atvienots pēc {{timeout}} minūtēm. Lūdzu, izmantojiet Jitsi kā Pakalpojums produkcijas iegulšanai!", + "disabledIframeSecondaryNative": "Domēna {{domain}} iegulšana ir paredzēta tikai demonstrācijas nolūkiem, tāpēc šis zvans tiks pārtraukts pēc {{timeout}} minūtēm.", + "disabledIframeSecondaryWeb": "Domēna {{domain}} iegulšana ir paredzēta tikai demonstrācijas nolūkiem, tāpēc šis zvans tiks pārtraukts pēc {{timeout}} minūtēm. Lūdzu, produkcijas videi izmantojiet Jitsi as a Service!", "disconnected": "savienojums pārtraukts", "displayNotifications": "Rādīt paziņojumus", "dontRemindMe": "Neatgādināt man", @@ -745,6 +819,9 @@ "gifsMenu": "GIPHY", "groupTitle": "Paziņojumi", "hostAskedUnmute": "Moderators vēlas, lai jūs runātu", + "invalidTenant": "Nederīgs tenants", + "invalidTenantHyphenDescription": "Jūsu izmantotais tenants nav derīgs (sākas vai beidzas ar '-').", + "invalidTenantLengthDescription": "Jūsu izmantotais tenants ir pārāk garš.", "invitedOneMember": "{{displayName}} tika uzaicināts", "invitedThreePlusMembers": "Uzaicināts {{name}} un {{count}} citi lietotāji", "invitedTwoMembers": "{{first}} un {{second}} tika uzaicināti uz sapulci", @@ -757,7 +834,7 @@ "linkToSalesforceDescription": "Varat saistīt sapulces kopsavilkumu ar Salesforce objektu.", "linkToSalesforceError": "Neizdevās saistīt sapulci ar Salesforce", "linkToSalesforceKey": "Saistīt šo sapulci", - "linkToSalesforceProgress": "Notiek sapulces saistīšana ar Salesforce...", + "linkToSalesforceProgress": "Notiek sapulces saistīšana ar Salesforce…", "linkToSalesforceSuccess": "Sapulce tika saistīta ar Salesforce", "localRecordingStarted": "{{name}} uzsāka lokālu ierakstu.", "localRecordingStopped": "{{name}} beidza lokālu ierakstu.", @@ -781,6 +858,7 @@ "newDeviceAction": "Izmantot", "newDeviceAudioTitle": "Atrasta jauna audio ierīce", "newDeviceCameraTitle": "Atrasta jauna kamera", + "nextToSpeak": "Jūs esat nākamais runātājs rindā", "noiseSuppressionDesktopAudioDescription": "Darbvirsmas audio koplietošanas laikā nevar iespējot trokšņu slāpēšanu. Lūdzu, atspējojiet to un mēģiniet vēlreiz.", "noiseSuppressionFailedTitle": "Neizdevās sākt trokšņu slāpēšanu", "noiseSuppressionStereoDescription": "Stereo audio trokšņu slāpēšana pašlaik netiek atbalstīta.", @@ -810,13 +888,18 @@ "suggestRecordingDescription": "Vai vēlaties sākt ierakstīšanu?", "suggestRecordingTitle": "Ierakstīt sanāksmi", "unmute": "Ieslēgt mikrofonu", + "unmuteScreen": "", + "unmuteVideo": "Ieslēgt video", "videoMutedRemotelyDescription": "Jūs vienmēr varat to atkal ieslēgt.", "videoMutedRemotelyTitle": "{{participantDisplayName}} izslēdza jūsu video", "videoUnmuteBlockedDescription": "Kameras ieslēgšanas un darbvirsmas koplietošanas darbība ir īslaicīgi bloķēta sistēmas ierobežojumu dēļ.", "videoUnmuteBlockedTitle": "Kameras ieslēgšana un darbvirsmas koplietošana ir bloķēta!", "viewLobby": "Skatīt vestibilu", + "viewParticipants": "Skatīt dalībniekus", "viewVisitors": "Skatīt apmeklētājus", "waitingParticipants": "{{waitingParticipants}} personas", + "waitingVisitors": "Apmeklētāji gaida rindā: {{waitingVisitors}}", + "waitingVisitorsTitle": "Sanāksme vēl nav sākusies!", "whiteboardLimitDescription": "Lūdzu, saglabājiet savu progresu, jo drīz tiks sasniegts lietotāju limits un tāfele tiks aizvērta.", "whiteboardLimitTitle": "Tāfeles lietošana" }, @@ -825,19 +908,27 @@ "admit": "Apstiprināt", "admitAll": "Apstiprināt visus", "allow": "Atļaut dalībniekiem:", + "allowDesktop": "Atļaut ekrāna kopīgošanu", "allowVideo": "Atļaut video", + "askDesktop": "Lūgt kopīgot ekrānu", "askUnmute": "Lūgt ieslēgt skaņu", "audioModeration": "Ieslēgt savu skaņu", "blockEveryoneMicCamera": "Bloķēt visiem mikrofonu un kameru", "breakoutRooms": "Grupu istabas", + "desktopModeration": "Sākt ekrāna kopīgošanu", + "goLive": "Sākt", "invite": "Uzaicināt", + "lowerAllHands": "Nolaist visas paceltās rokas", + "lowerHand": "Nolaist roku", "moreModerationActions": "Vairāk moderēšanas iespēju", - "moreModerationControls": "Vairāk moderēšanas kontroļu", + "moreModerationControls": "Vairāk moderēšanas iespēju", "moreParticipantOptions": "Vairāk dalībnieku iespēju", "mute": "Apklusināt", "muteAll": "Apklusināt visus", "muteEveryoneElse": "Apklusināt pārējos", "reject": "Noraidīt", + "stopDesktop": "Pārtraukt ekrāna kopīgošanu", + "stopEveryonesDesktop": "Pārtraukt visiem ekrāna kopīgošanu", "stopEveryonesVideo": "Izslēgt visiem video", "stopVideo": "Izslēgt video", "unblockEveryoneMicCamera": "Atbloķēt visiem mikrofonu un kameru", @@ -847,11 +938,15 @@ "headings": { "lobby": "Vestibils ({{count}})", "participantsList": "Sapulces dalībnieki ({{count}})", + "viewerRequests": "Apmeklētāju pieprasījumi {{count}}", + "visitorInQueue": " (gaida {{count}})", "visitorRequests": " (pieprasījumi {{count}})", - "visitors": "Apmeklētāji ({{count}})", + "visitors": "Apmeklētāji {{count}}", + "visitorsList": "Apmeklētāji ({{count}})", "waitingLobby": "Gaida vestibilā ({{count}})" }, "search": "Meklēt dalībniekus", + "searchDescription": "Sāciet rakstīt, lai atlasītu dalībnieks", "title": "Dalībnieki" }, "passwordDigitsOnly": "Līdz {{number}} cipariem", @@ -860,10 +955,13 @@ "pinnedParticipant": "Dalībnieks ir piesprausts", "polls": { "answer": { + "edit": "Labot", + "send": "Nosūtīt", "skip": "Izlaist", "submit": "Iesniegt" }, "by": "Pēc {{ name }} iniciatīvas", + "closeButton": "Slēgt aptauju", "create": { "addOption": "Pievienot opciju", "answerPlaceholder": "Opcija {{index}}", @@ -873,6 +971,7 @@ "pollQuestion": "Aptaujas Jautājums", "questionPlaceholder": "Uzdod jautājumu", "removeOption": "Noņemt opciju", + "save": "Saglabāt", "send": "Nosūtīt" }, "errors": { @@ -899,12 +998,14 @@ "callMe": "Piezvani man", "callMeAtNumber": "Piezvani man uz šo numuru:", "calling": "Zvana", - "configuringDevices": "Notiek ierīču konfigurēšana...", + "configuringDevices": "Notiek ierīču konfigurēšana…", "connectedWithAudioQ": "Vai esat pievienojies audio?", "connection": { - "good": "Jūsu interneta savienojums izskatās labs!", + "failed": "Savienojuma pārbaude neizdevās!", + "good": "Jūsu interneta savienojums ir labs!", "nonOptimal": "Jūsu interneta savienojums nav optimāls", - "poor": "Jums ir slikts interneta savienojums" + "poor": "Jums ir slikts interneta savienojums", + "running": "Notiek savienojuma pārbaude…" }, "connectionDetails": { "audioClipping": "Mēs sagaidām, ka jūsu audio raustīsies.", @@ -913,6 +1014,7 @@ "goodQuality": "Satriecoši! Jūsu multivides kvalitāte būs lieliska.", "noMediaConnectivity": "Mēs nevarējām atrast veidu, kā šim testam izveidot multivides savienojumu. To parasti izraisa ugunsmūris vai NAT.", "noVideo": "Mēs sagaidām, ka jūsu video kvalitāte būs briesmīga.", + "testFailed": "Savienojuma testā radās neparedzētas problēmas, tomēr tas var neietekmēt jūsu pieredzi.", "undetectable": "Ja pārlūkprogrammā joprojām nevarat veikt zvanus, iesakām pārliecināties, vai skaļruņi, mikrofons un kamera ir pareizi iestatīti, vai esat piešķīris pārlūkprogrammai tiesības izmantot mikrofonu un kameru un vai pārlūkprogrammas versija ir atjaunināta. Ja joprojām neizdodas zvanīt, sazinieties ar tīmekļa lietojumprogrammas izstrādātāju.", "veryPoorConnection": "Mēs sagaidām, ka jūsu zvanu kvalitāte būs patiešām briesmīga.", "videoFreezing": "Mēs sagaidām, ka jūsu video sastings, kļūs melns un pikseļosies.", @@ -947,7 +1049,6 @@ "proceedAnyway": "Tik un tā turpināt", "recordingWarning": "Citi dalībnieki var ierakstīt šo zvanu", "screenSharingError": "Ekrāna koplietošanas kļūda:", - "showScreen": "Iespējot ekrānu pirms sapulces", "startWithPhone": "Sākt ar tālruņa audio", "unsafeRoomConsent": "Es saprotu riskus, vēlos pievienoties sapulcei", "videoOnlyError": "Video kļūda:", @@ -956,17 +1057,17 @@ }, "presenceStatus": { "busy": "Aizņemts", - "calling": "Izsaucu...", + "calling": "Izsaucu…", "connected": "Savienots", - "connecting": "Notiek savienošanās...", - "connecting2": "Notiek savienošanās*...", + "connecting": "Notiek savienošanās…", + "connecting2": "Notiek savienošanās*…", "disconnected": "Atvienots", "expired": "Noilga", "ignored": "Ignorēts", - "initializingCall": "Izsaukums tiek inicializēts...", + "initializingCall": "Izsaukums tiek inicializēts…", "invited": "Aicināts", "rejected": "Noraidīts", - "ringing": "Zvana..." + "ringing": "Zvana…" }, "profile": { "avatar": "avatars", @@ -1000,7 +1101,7 @@ "errorFetchingLink": "Kļūda iegūstot ieraksta saiti.", "expandedOff": "Ieraksts apturēts", "expandedOn": "Šī sapulce tiek ierakstīta.", - "expandedPending": "Sākam sapulces ierakstu...", + "expandedPending": "Sākam sapulces ierakstu…", "failedToStart": "Neizdevās sākt ierakstu", "fileSharingdescription": "Kopīgot ierakstu ar sapulces dalībniekiem", "highlight": "Izcelt", @@ -1018,7 +1119,7 @@ "localRecordingStartWarningTitle": "Apturiet ierakstīšanu, lai to saglabātu", "localRecordingVideoStop": "Apturot vide, tiks apturēta arī lokālā ierakstīšana. Vai tiešām vēlaties turpināt?", "localRecordingVideoWarning": "Lai ierakstītu video, tas ir jāieslēdz, uzsākot ierakstīšanu", - "localRecordingWarning": "Noteikti atlasiet pašreizējo cilni, lai izmantotu pareizo video un audio. Ieraksts pašlaik ir ierobežots līdz 1 GB, kas ir aptuveni 100 minūtes.", + "localRecordingWarning": "Noteikti izvēlieties pašreizējo cilni, lai izmantotu pareizo video un audio.", "loggedIn": "Pierakstījies kā {{userName}}", "noMicPermission": "Mikrofona ierakstu nevarēja izveidot. Lūdzu, piešķiriet atļauju lietot mikrofonu.", "noStreams": "Nav konstatēta audio vai video straume.", @@ -1027,9 +1128,10 @@ "on": "Notiek ieraksts", "onBy": "{{name}} ieslēdza ierakstu", "onlyRecordSelf": "Ierakstīt tikai manas audio un video straumes", - "pending": "Gatavojas ierakstīt sapulci...", + "pending": "Gatavojas ierakstīt sapulci…", + "policyError": "Jūs mēģinājāt pārāk ātri sākt ierakstīšanu. Lūdzu, vēlāk mēģiniet vēlreiz!", "recordAudioAndVideo": "Ierakstīt audio un video", - "recordTranscription": "Ierakstīt transkripciju", + "recordTranscription": "Ierakstīt atšifrējumu", "saveLocalRecording": "Ieraksta faila saglabāšana lokāli (beta)", "serviceDescription": "Jūsu ierakstu saglabās attiecīgais pakalpojums", "serviceDescriptionCloud": "Ierakstīšana mākonī", @@ -1050,8 +1152,8 @@ "pullToRefresh": "Pavilkt, lai atsvaidzinātu" }, "security": { - "about": "Savai sapulcei pievienojiet $t(lockRoomPassword). Dalībniekiem būs jānorāda $t(lockRoomPassword), lai viņi varētu pievienoties sapulcei.", - "aboutReadOnly": "Moderatora dalībnieki sapulcei var pievienot $t(lockRoomPassword). Dalībniekiem būs jānorāda $t(lockRoomPassword), lai viņi varētu pievienoties sapulcei.", + "about": "Iestatiet sapulcei $t(lockRoomPassword). Dalībniekiem būs jānorāda $t(lockRoomPassword), lai viņi varētu pievienoties sapulcei.", + "aboutReadOnly": "Moderatora dalībnieki sapulcei var iestatīt $t(lockRoomPassword). Dalībniekiem būs jānorāda $t(lockRoomPassword), lai viņi varētu pievienoties sapulcei.", "insecureRoomNameWarningNative": "Istabas nosaukums nav drošs. Nevēlami dalībnieki var pievienoties jūsu sapulcei. {{recommendAction}} Uzziniet vairāk par tikšanās nodrošināšanu", "insecureRoomNameWarningWeb": "Istabas nosaukums nav drošs. Nevēlami dalībnieki var pievienoties jūsu sapulcei. {{recommendAction}} Uzziniet vairāk par to, kā nodrošināt atbilstību prasībām šeit.", "title": "Drošības iespējas", @@ -1071,16 +1173,18 @@ "signedIn": "Pašreiz ir piekļuve e-pasta adreses {{email}} kalendāra notikumiem. Noklikšķiniet uz pogas |Atslēgt|, lai izslēgtu piekļuvi šiem kalendāra pasākumiem.", "title": "Kalendārs" }, + "chatWithPermissions": "Tērzēšanai nepieciešama atļauja", "desktopShareFramerate": "Darbvirsmas koplietošanas kadru ātrums", "desktopShareHighFpsWarning": "Lielāks kadru nomaiņas ātrums darbvirsmas koplietošanai var ietekmēt joslas platumu. Lai jaunie iestatījumi stātos spēkā, ir jārestartē ekrāna kopīgošana.", "desktopShareWarning": "Lai jaunie iestatījumi stātos spēkā, ir jārestartē ekrāna kopīgošana.", "devices": "Ierīces", - "followMe": "Visi man seko", + "followMe": "Visi seko man", + "followMeRecorder": "Ierakstītājs seko man", "framesPerSecond": "kadri sekundē", "incomingMessage": "Ienākošā ziņa", "language": "Valoda", "loggedIn": "Ierakstījies kā {{name}}", - "maxStageParticipants": "Maksimālais dalībnieku skaits, kurus var piespraust galvenajai skatuvei (EKSPERIMENTĀLS)", + "maxStageParticipants": "Maksimālais dalībnieku skaits, kurus var piespraust galvenajai skatuvei", "microphones": "Mikrofoni", "moderator": "Moderators", "moderatorOptions": "Moderatora opcijas", @@ -1099,8 +1203,9 @@ "selectMic": "Mikrofons", "selfView": "Pašskats", "shortcuts": "Īsceļi", + "showSubtitlesOnStage": "Rādīt subtitrus galvenajā skatā", "speakers": "Skaļruņi", - "startAudioMuted": "Dalībnieki pievienojas ar izslēgtu skaņu", + "startAudioMuted": "Dalībnieki pievienojas ar izslēgtu mikrofonu", "startReactionsMuted": "Izslēgt reakcijas skaņas visiem", "startVideoMuted": "Dalībnieki pievienojas ar izslēgtu kameru", "talkWhileMuted": "Runā, kad izslēgta skaņa", @@ -1152,11 +1257,13 @@ "fearful": "Bailīgs", "happy": "Priecīgs", "hours": "{{count}}s", + "labelTooltip": "Dalībnieku skaits: {{count}}", "minutes": "{{count}}m", "name": "Vārds", "neutral": "Neitrāls", "sad": "Bēdīgs", "search": "Meklēt", + "searchDescription": "Sāciet rakstīt, lai atlasītu dalībnieks", "searchHint": "Meklēt dalībniekus", "seconds": "{{count}}s", "speakerStats": "Dalībnieka uzstāšanās statistika", @@ -1193,6 +1300,7 @@ "closeChat": "Aizvērt tērzēšanu", "closeMoreActions": "Aizvērt vairāk darbību izvēlni", "closeParticipantsPane": "Aizvērt dalībnieku paneli", + "closedCaptions": "Slēptie subtitri", "collapse": "Sakļaut", "document": "Kopīgotais dokuments (iesl./izsl.)", "documentClose": "Aizvērt kopīgoto dokumentu", @@ -1222,6 +1330,7 @@ "lobbyButton": "Iespējot/atspējot vestibila režīmu", "localRecording": "Lokālā ieraksta vadības rīki (iesl./izsl.)", "lockRoom": "Telpas slēgšana ar paroli (iesl./izsl.)", + "love": "Sirds", "lowerHand": "Nolaist roku", "moreActions": "Papildus iestatījumu izvēlne (rādīt/nerādīt)", "moreActionsMenu": "Papildus iestatījumu izvēlne", @@ -1239,6 +1348,7 @@ "privateMessage": "Nosūtīt privātu ziņu", "profile": "Rediģēt savu profilu", "raiseHand": "Pacelt roku", + "react": "Ziņojumu reakcijas", "reactions": "Reakcijas", "reactionsMenu": "Reakciju izvēlne", "recording": "Ieraksts (iesl./izsl.)", @@ -1281,6 +1391,7 @@ "closeChat": "Aizvērt tērzētavu", "closeParticipantsPane": "Aizvērt dalībnieku paneli", "closeReactionsMenu": "Aizvērt reakciju izvēlni", + "closedCaptions": "Slēptie subtitri", "disableNoiseSuppression": "Atspējot trokšņu slāpēšanu", "disableReactionSounds": "Šai sapulcei varat atspējot reakcijas skaņas", "documentClose": "Aizvērt kopīgoto dokumentu", @@ -1310,6 +1421,7 @@ "lobbyButtonEnable": "Iespējot vestibila režīmu", "login": "Ierakstīties", "logout": "Izrakstīties", + "love": "Sirds", "lowerYourHand": "Nolaist roku", "moreActions": "Vairāk rīcību", "moreOptions": "Vairāk opciju", @@ -1335,6 +1447,7 @@ "raiseYourHand": "Pacelt roku", "reactionBoo": "Nosūtīt būū reakciju", "reactionClap": "Nosūtīt aplausu reakciju", + "reactionHeart": "Nosūtīt sirds reakciju", "reactionLaugh": "Nosūtīt smieklu reakciju", "reactionLike": "Nosūtīt īkšķi augšup reakciju", "reactionSilence": "Nosūtīt klusuma reakciju", @@ -1367,29 +1480,24 @@ }, "transcribing": { "ccButtonTooltip": "Iesl./izsl. subtitrus", - "expandedLabel": "Transkripcija ir ieslēgta", - "failedToStart": "Neizdevās sākt transkripciju", - "labelToolTip": "Notiek sapulces transkripcija", + "expandedLabel": "Atšifrējuma izveide ir ieslēgta", + "failed": "Atšifrējuma izveide neizdevās", + "labelTooltip": "Šajā sapulcē notiek atšifrējuma izveide.", + "labelTooltipExtra": "Turklāt vēlāk būs pieejams atšifrējums.", + "openClosedCaptions": "Atvērt slēptos subtitrus", + "original": "Oriģināls", "sourceLanguageDesc": "Pašlaik sapulces valoda ir iestatīta uz {{sourceLanguage}}.
Varat to mainīt no ", "sourceLanguageHere": "šeit", "start": "Iesl. subtitru rādīšanu", "stop": "Izsl. subtitru rādīšanu", "subtitles": "Subtitri", "subtitlesOff": "Izslēgts", - "tr": "TR" + "tr": "TR", + "translateTo": "Tulkot uz" }, "unpinParticipant": "{{participantName}} — atspraust", "userMedia": { - "androidGrantPermissions": "Izvēlieties Atļaut, kad pārlūks vaicā par atļaujām.", - "chromeGrantPermissions": "Izvēlieties Atļaut, kad pārlūks vaicā par atļaujām.", - "edgeGrantPermissions": "Izvēlieties , kad pārlūks vaicā par atļaujām.", - "electronGrantPermissions": "Lūdzu, dodiet atļauju piekļūt kamerai un mikrofonam", - "firefoxGrantPermissions": "Izvēlieties Kopīgot izvēlēto ierīci, kad pārlūks vaicā par atļaujām.", - "iexplorerGrantPermissions": "Izvēlieties OK, kad pārlūks vaicā par atļaujām.", - "nwjsGrantPermissions": "“Lūdzu, dodiet atļauju piekļūt kamerai un mikrofonam", - "operaGrantPermissions": "Izvēlieties Atļaut, kad pārlūks vaicā par atļaujām.", - "react-nativeGrantPermissions": "Izvēlieties Atļaut, kad pārlūks vaicā par atļaujām.", - "safariGrantPermissions": "Izvēlieties OK, kad pārlūks vaicā par atļaujām." + "grantPermissions": "“Lūdzu, dodiet atļauju piekļūt kamerai un mikrofonam." }, "videoSIPGW": { "busy": "Tiek strādāts pie resursu atbrīvošanas. Lūdzu, pēc dažām minūtēm mēģiniet vēlreiz.", @@ -1427,6 +1535,8 @@ "connectionInfo": "Informācija par savienojumu", "demote": "Pārveidot par apmeklētāju", "domute": "Izlsēgt skaņu", + "domuteDesktop": "Pārtraukt ekrāna kopīgošanu", + "domuteDesktopOfOthers": "Pārtraukt ekrāna kopīgošanu visiem pārējiem", "domuteOthers": "Izslēgt skaņu visiem pārējiem", "domuteVideo": "Izslēgt kameru", "domuteVideoOfOthers": "Izslēgt video visiem pārējiem", @@ -1468,7 +1578,7 @@ "image6": "Mežs", "image7": "Saullēkts", "none": "Nav", - "pleaseWait": "Lūdzu uzgaidiet...", + "pleaseWait": "Lūdzu uzgaidiet…", "removeBackground": "Noņemt fonu", "slightBlur": "Viegli izplūdis", "title": "Virtuālie foni", @@ -1478,12 +1588,22 @@ }, "visitors": { "chatIndicator": "(apmeklētājs)", + "joinMeeting": { + "description": "Jūs pašlaik esat novērotājs šajā konferencē.", + "raiseHand": "Pacelt roku", + "title": "Pievienošanās sapulcei", + "wishToSpeak": "Ja vēlaties runāt, lūdzu, paceliet roku zemāk un gaidiet moderatora apstiprinājumu." + }, "labelTooltip": "Apmeklētāju skaits: {{count}}", "notification": { "demoteDescription": "{{actor}} pārveidoja par apmeklētāju, paceliet roku, lai piedalītos", - "description": "Paceliet roku, lai piedalītos", + "noMainParticipantsDescription": "Dalībniekam ir jāsāk sapulce. Lūdzu, pēc brīža mēģiniet vēlreiz.", + "noMainParticipantsTitle": "Šī sapulce vēl nav sākusies.", + "noVisitorLobby": "Jūs nevarat pievienoties, kamēr sapulcei ir iespējots vestibils.", + "notAllowedPromotion": "Dalībniekam vispirms ir jāatļauj jūsu pieprasījums.", "title": "Jūs esat sapulces apmeklētājs" - } + }, + "waitingMessage": "Jūs pievienosities sapulcei, tiklīdz tā sāksies!" }, "volumeSlider": "Skaļuma slīdnis", "welcomepage": { diff --git a/lang/main-ml.json b/lang/main-ml.json index 8f7454832f86..2e3102612837 100644 --- a/lang/main-ml.json +++ b/lang/main-ml.json @@ -83,7 +83,7 @@ "installExtensionText": "Install the extension for Google Calendar and Office 365 integration" }, "connectingOverlay": { - "joiningRoom": "നിങ്ങളുടെ മീറ്റിംഗിലേക്ക് നിങ്ങളെ ബന്ധിപ്പിക്കുന്നു ..." + "joiningRoom": "നിങ്ങളുടെ മീറ്റിംഗിലേക്ക് നിങ്ങളെ ബന്ധിപ്പിക്കുന്നു…" }, "connection": { "ATTACHED": "അറ്റാച്ചുചെയ്തു", @@ -95,9 +95,9 @@ "DISCONNECTED": "ബന്ധം വേർപെടുത്തിയിരിക്കുന്നു", "DISCONNECTING": "ഡിസ്കണനെക്ട ചെയ്യുന്നു ", "ERROR": "Error", - "FETCH_SESSION_ID": "സെഷൻ ഐഡി നേടുന്നു ...", + "FETCH_SESSION_ID": "സെഷൻ ഐഡി നേടുന്നു…", "GET_SESSION_ID_ERROR": "Get session-id error: {{code}}", - "GOT_SESSION_ID": "സെഷൻ ഐഡി നേടുന്നു... ചെയ്തു", + "GOT_SESSION_ID": "സെഷൻ ഐഡി നേടുന്നു… ചെയ്തു", "LOW_BANDWIDTH": "ബാൻഡ്വിഡിത്ത് സൂക്ഷിക്കുന്നതിനായി {{displayName}}-നുള്ള വീഡിയോ ഓഫ് ചെയ്തിരിക്കുന്നു" }, "connectionindicator": { @@ -146,7 +146,7 @@ "ifHaveApp": "നിങ്ങൾക്ക് അപ്ലിക്കേഷൻ ഉണ്ടെങ്കിൽ:", "joinInApp": "അപ്ലിക്കേഷൻ ഉപയോഗിച്ച് ഈ മീറ്റിംഗിൽ ചേരുക", "launchWebButton": "വെബിൽ സമാരംഭിക്കുക", - "title": "Launching your meeting in {{app}}...", + "title": "Launching your meeting in {{app}}…", "tryAgainButton": "ഡെസ്ക്ടോപ്പിൽ വീണ്ടും ശ്രമിക്കുക" }, "defaultLink": "e.g. {{url}}", @@ -175,7 +175,7 @@ "Share": "പങ്കിടുക", "Submit": "സമർപ്പിക്കുക", "WaitForHostMsg": "The conference has not yet started. If you are the host then please authenticate. Otherwise, please wait for the host to arrive.", - "WaitingForHost": "ഹോസ്റ്റിനായി കാത്തിരിക്കുന്നു ...", + "WaitingForHost": "ഹോസ്റ്റിനായി കാത്തിരിക്കുന്നു…", "Yes": "അതെ", "accessibilityLabel": { "liveStreaming": "തത്സമയ സംപ്രേക്ഷണം" @@ -193,9 +193,9 @@ "cameraUnknownError": "Cannot use camera for an unknown reason.", "cameraUnsupportedResolutionError": "Your camera does not support required video resolution.", "close": "അടയ്ക്കുക", - "conferenceDisconnectMsg": "You may want to check your network connection. Reconnecting in {{seconds}} sec...", + "conferenceDisconnectMsg": "You may want to check your network connection. Reconnecting in {{seconds}} sec…", "conferenceDisconnectTitle": "നിങ്ങൾ ബന്ധം വിച്ഛേദിച്ചിരിക്കുന്നു.", - "conferenceReloadMsg": "ഞങ്ങൾ ഇത് പരിഹരിക്കാൻ ശ്രമിക്കുകയാണ്. {{seconds}} സെക്കൻഡിൽ വീണ്ടും കണക്റ്റുചെയ്യുന്നു ...", + "conferenceReloadMsg": "ഞങ്ങൾ ഇത് പരിഹരിക്കാൻ ശ്രമിക്കുകയാണ്. {{seconds}} സെക്കൻഡിൽ വീണ്ടും കണക്റ്റുചെയ്യുന്നു…", "conferenceReloadTitle": "നിർഭാഗ്യവശാൽ, എന്തോ കുഴപ്പം സംഭവിച്ചു.", "confirm": "ഉറപ്പാക്കുക", "confirmNo": "വേണ്ട", @@ -411,7 +411,7 @@ "errorLiveStreamNotEnabled": "{{email}} -ൽ തത്സമയ സ്ട്രീമിംഗ് പ്രാപ്തമാക്കിയിട്ടില്ല.തത്സമയ സ്ട്രീമിംഗ് പ്രാപ്തമാക്കുക അല്ലെങ്കിൽ തത്സമയ സ്ട്രീമിംഗ് പ്രാപ്തമാക്കിയ ഒരു അക്കൗണ്ടിലേക്ക് പ്രവേശിക്കുക.", "expandedOff": "തത്സമയ സ്ട്രീമിംഗ് അവസാനിച്ചു", "expandedOn": "മീറ്റിംഗ് നിലവിൽ യൂട്യൂബിലേക്ക് സ്ട്രീം ചെയ്യുന്നു.", - "expandedPending": "തത്സമയ സ്ട്രീമിംഗ് ആരംഭിക്കുന്നു...", + "expandedPending": "തത്സമയ സ്ട്രീമിംഗ് ആരംഭിക്കുന്നു…", "failedToStart": "തത്സമയ സ്ട്രീമിംഗ് ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു", "getStreamKeyManually": "ഞങ്ങൾക്ക് തത്സമയ സ്ട്രീമുകളൊന്നും നേടാനായില്ല. യൂട്യൂബിൽ നിന്ന് നിങ്ങളുടെ തത്സമയ സ്ട്രീം കീ നേടാൻ ശ്രമിക്കുക.", "googlePrivacyPolicy": "ഗൂഗിൾ സ്വകാര്യതാ നയം", @@ -422,7 +422,7 @@ "offBy": "{{name}} തത്സമയ സ്ട്രീമിംഗ് നിർത്തി", "on": "തത്സമയ സംപ്രേക്ഷണം", "onBy": "{{name}} തത്സമയ സ്ട്രീമിംഗ് ആരംഭിച്ചു", - "pending": "തത്സമയ സ്ട്രീം ആരംഭിക്കുന്നു...", + "pending": "തത്സമയ സ്ട്രീം ആരംഭിക്കുന്നു…", "serviceName": "തത്സമയ സ്ട്രീമിംഗ് സേവനം", "signIn": "ഗൂഗിൾ ഉപയോഗിച്ച് പ്രവേശിക്കുക", "signInCTA": "പ്രവേശിക്കുക അല്ലെങ്കിൽ നിങ്ങളുടെ യൂട്യൂബ് തത്സമയ സ്ട്രീം കീ നൽകുക.", @@ -449,10 +449,10 @@ "invalidPassword": "പാസ്‌വേഡ് അസാധുവാണ്", "joinRejectedMessage": "നിങ്ങളുടെ ചേരൽ അഭ്യർത്ഥന ഒരു മോഡറേറ്റർ നിരസിച്ചു.", "joinTitle": "മീറ്റിംഗിൽ ചേരുക", - "joinWithPasswordMessage": "പാസ്‌വേഡുമായി ചേരാൻ ശ്രമിക്കുന്നു, ദയവായി കാത്തിരിക്കുക ...", + "joinWithPasswordMessage": "പാസ്‌വേഡുമായി ചേരാൻ ശ്രമിക്കുന്നു, ദയവായി കാത്തിരിക്കുക…", "joiningMessage": "ആരെങ്കിലും നിങ്ങളുടെ അഭ്യർത്ഥന സ്വീകരിച്ചാലുടൻ നിങ്ങൾ മീറ്റിംഗിൽ ചേരും", - "joiningTitle": "മീറ്റിംഗിൽ ചേരാൻ ആവശ്യപ്പെടുന്നു ...", - "joiningWithPasswordTitle": "പാസ്‌വേഡുമായി ചേരുന്നു ...", + "joiningTitle": "മീറ്റിംഗിൽ ചേരാൻ ആവശ്യപ്പെടുന്നു…", + "joiningWithPasswordTitle": "പാസ്‌വേഡുമായി ചേരുന്നു…", "knockButton": "ചേരാൻ ആവശ്യപ്പെടുക", "knockTitle": "ആരോ മീറ്റിംഗിൽ ചേരാൻ ശ്രമിക്കുന്നു ", "knockingParticipantList": "Knocking participant list", @@ -559,7 +559,7 @@ "callMe": "എന്നെ വിളിക്കുക", "callMeAtNumber": "ഈ നമ്പറിൽ എന്നെ വിളിക്കുക:", "calling": "വിളിക്കുന്നു", - "configuringDevices": "ഉപകരണങ്ങൾ ക്രമീകരിക്കുന്നു...", + "configuringDevices": "ഉപകരണങ്ങൾ ക്രമീകരിക്കുന്നു…", "connectedWithAudioQ": "നിങ്ങൾ ഓഡിയോയുമായി ബന്ധിപ്പിച്ചിട്ടുണ്ടോ?", "connection": { "good": "നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ മികച്ചതായി തോന്നുന്നു!", @@ -602,7 +602,6 @@ "or": "അല്ലെങ്കിൽ", "premeeting": "പ്രീ മീറ്റിംഗ്", "screenSharingError": "സ്ക്രീൻ പങ്കിടൽ പിശക്:", - "showScreen": "പ്രീ മീറ്റിംഗ് സ്ക്രീൻ പ്രാപ്തമാക്കുക", "startWithPhone": "ഫോൺ ഓഡിയോ ഉപയോഗിച്ച് ആരംഭിക്കുക", "videoOnlyError": "വീഡിയോ പിശക്:", "videoTrackError": "വീഡിയോ ട്രാക്ക് സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല.", @@ -610,17 +609,17 @@ }, "presenceStatus": { "busy": "തിരക്ക്", - "calling": "വിളിക്കുന്നു ...", + "calling": "വിളിക്കുന്നു…", "connected": "ബന്ധിപ്പിച്ചു", - "connecting": "ബന്ധിപ്പിക്കുന്നു...", - "connecting2": "ബന്ധിപ്പിക്കുന്നു*...", + "connecting": "ബന്ധിപ്പിക്കുന്നു…", + "connecting2": "ബന്ധിപ്പിക്കുന്നു*…", "disconnected": "വിച്ഛേദിച്ചു", "expired": "കാലഹരണപ്പെട്ടു", "ignored": "അവഗണിച്ചു", - "initializingCall": "കോൾ സമാരംഭിക്കുന്നു...", + "initializingCall": "കോൾ സമാരംഭിക്കുന്നു…", "invited": "ക്ഷണിച്ചു", "rejected": "നിരസിച്ചു", - "ringing": "റിംഗുചെയ്യുന്നു..." + "ringing": "റിംഗുചെയ്യുന്നു…" }, "profile": { "setDisplayNameLabel": "നിങ്ങളുടെ ഡിസ്പ്ലേ നാമം സജ്ജമാക്കുക", @@ -638,7 +637,7 @@ "error": "റെക്കോർഡിംഗ് പരാജയപ്പെട്ടു. ദയവായി വീണ്ടും ശ്രമിക്കുക.", "expandedOff": "റെക്കോർഡിംഗ് അവസാനിച്ചു ", "expandedOn": "മീറ്റിംഗ് നിലവിൽ റെക്കോർഡുചെയ്യുന്നു.", - "expandedPending": "റെക്കോർഡിംഗ് ആരംഭിച്ചു...", + "expandedPending": "റെക്കോർഡിംഗ് ആരംഭിച്ചു…", "failedToStart": "റെക്കോർഡിംഗ് ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു", "fileSharingdescription": "മീറ്റിംഗ് പങ്കാളികളുമായി റെക്കോർഡിംഗ് പങ്കിടുക", "limitNotificationDescriptionNative": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ റെക്കോർഡിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത റെക്കോർഡിംഗുകൾക്കായി <3>{{app}}.", @@ -649,7 +648,7 @@ "offBy": "{{name}} റെക്കോർഡിംഗ് നിർത്തി", "on": "റെക്കോർഡിംഗ്", "onBy": "{{name}} റെക്കോർഡിംഗ് ആരംഭിച്ചു", - "pending": "മീറ്റിംഗ് റെക്കോർഡുചെയ്യാൻ തയ്യാറെടുക്കുന്നു...", + "pending": "മീറ്റിംഗ് റെക്കോർഡുചെയ്യാൻ തയ്യാറെടുക്കുന്നു…", "rec": "REC", "serviceDescription": "നിങ്ങളുടെ റെക്കോർഡിംഗ് റെക്കോർഡിംഗ് സേവനം സൂക്ഷിക്കും", "serviceName": "റെക്കോർഡിംഗ് സേവനം ", @@ -852,22 +851,13 @@ "failedToStart": "ട്രാൻസ്‌ക്രൈബുചെയ്യൽ ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു", "labelToolTip": "മീറ്റിംഗ് പകർത്തിയെഴുതുകയാണ്", "off": "ട്രാൻസ്‌ക്രൈബുചെയ്യൽ നിർത്തി", - "pending": "മീറ്റിംഗ് പകർത്തിയെഴുതാൻ തയ്യാറെടുക്കുന്നു...", + "pending": "മീറ്റിംഗ് പകർത്തിയെഴുതാൻ തയ്യാറെടുക്കുന്നു…", "start": "സബ്ടൈറ്റിലുകൾ കാണിക്കാൻ ആരംഭിക്കുക", "stop": "സബ്‌ടൈറ്റിലുകൾ കാണിക്കുന്നത് നിർത്തുക", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "നിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ അനുവദിക്കുക തിരഞ്ഞെടുക്കുക.", - "chromeGrantPermissions": "നിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ അനുവദിക്കുക തിരഞ്ഞെടുക്കുക.", - "edgeGrantPermissions": "നിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ അതെ തിരഞ്ഞെടുക്കുക.", - "electronGrantPermissions": "നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കാൻ അനുമതി നൽകുക", - "firefoxGrantPermissions": "നിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ തിരഞ്ഞെടുത്ത ഉപകരണം പങ്കിടുക തിരഞ്ഞെടുക്കുക.", - "iexplorerGrantPermissions": "ിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ ശരി തിരഞ്ഞെടുക്കുക.", - "nwjsGrantPermissions": "നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കാൻ അനുമതി നൽകുക", - "operaGrantPermissions": "നിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ അനുവദിക്കുക തിരഞ്ഞെടുക്കുക.", - "react-nativeGrantPermissions": "ിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ അനുവദിക്കുക തിരഞ്ഞെടുക്കുക.", - "safariGrantPermissions": "നിങ്ങളുടെ ബ്രൌസർ അനുമതികൾ ആവശ്യപ്പെടുമ്പോൾ അനുവദിക്കുക തിരഞ്ഞെടുക്കുക." + "grantPermissions": "നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കാൻ അനുമതി നൽകുക." }, "videoSIPGW": { "busy": "ഉറവിടങ്ങൾ സ്വതന്ത്രമാക്കുന്നതിനായി ഞങ്ങൾ പ്രവർത്തിക്കുന്നു. കുറച്ച് മിനിറ്റിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക.", diff --git a/lang/main-mn.json b/lang/main-mn.json index babf4676ccf5..5606a86583f6 100644 --- a/lang/main-mn.json +++ b/lang/main-mn.json @@ -19,7 +19,7 @@ "noResults": "Үр дүн олдсонгүй", "outlookEmail": "Outlook и-мэйл", "phoneNumbers": "утасны дугаар", - "searching": "Хайж байна ...", + "searching": "Хайж байна…", "shareInvite": "Уулзалтын урилга хуваалцах", "shareLink": "Уулзалтын линк хуваалцан бусдыг урих", "shareStream": "Шууд дамжуулалтын линк хуваалцах", @@ -122,7 +122,7 @@ "installExtensionText": "Google Calendar болон Office 365 интеграци хийхийн тулд энэ extension суулгана" }, "connectingOverlay": { - "joiningRoom": "Таныг уулзалтад холбож байна..." + "joiningRoom": "Таныг уулзалтад холбож байна…" }, "connection": { "ATTACHED": "Хавсаргасан", @@ -134,9 +134,9 @@ "DISCONNECTED": "Холбогдоогүй", "DISCONNECTING": "Салгаж байна", "ERROR": "Алдаа", - "FETCH_SESSION_ID": "Оролцогчийн холболтыг олох...", + "FETCH_SESSION_ID": "Оролцогчийн холболтыг олох…", "GET_SESSION_ID_ERROR": "Оролцогчийн холболт дээр алдаа: {{code}}", - "GOT_SESSION_ID": "Оролцогчийн холболтыг олох... Дууссан", + "GOT_SESSION_ID": "Оролцогчийн холболтыг олох… Дууссан", "LOW_BANDWIDTH": "{{displayName}} чанарыг бууруулж видео унтраасан байна" }, "connectionindicator": { @@ -199,8 +199,8 @@ "launchWebButton": "Вэб дээр ажиллуулах", "noMobileApp": "Таньд энэ апп байхгүй юу?", "termsAndConditions": "Үргэлжлүүлэхийн тулд та үйлчилгээний нөхцлийг бидний үйлчилгээний нөхцлийг зөвшөөрнө үү.", - "title": "Таны {{app}} уулзалтыг эхлүүлж байна....", - "titleNew": "Таныг уулзалтад холбож байна ...", + "title": "Таны {{app}} уулзалтыг эхлүүлж байна….", + "titleNew": "Таныг уулзалтад холбож байна…", "tryAgainButton": "Дахин оролдоно уу", "unsupportedBrowser": "Таны ашиглаж буй вэб хөтчийг дэмжихгүй байна." }, @@ -239,7 +239,7 @@ "Share": "Хуваалцах", "Submit": "Илгээх", "WaitForHostMsg": "Уулзалт хараахан эхлээгүй байна. Хэрэв та хост байгаа бол нэвтэрнэ үү. Үгүй бол хост ирэхийг хүлээнэ үү.", - "WaitingForHostTitle": "Зочдыг хүлээж байна ...", + "WaitingForHostTitle": "Зочдыг хүлээж байна…", "Yes": "Тийм", "accessibilityLabel": { "close": "Цонх хаах", @@ -263,9 +263,9 @@ "cameraUnknownError": "Ямар нэг шалтгааны улмаас камерыг ашиглаж чадахгүй.", "cameraUnsupportedResolutionError": "Таны камер шаардлагатай видеоны хэмжээг дэмждэггүй.", "close": "Хаах", - "conferenceDisconnectMsg": "Сүлжээний холболт шалгаж байна. Дахин холбогдож байна {{seconds}} сек...", + "conferenceDisconnectMsg": "Сүлжээний холболт шалгаж байна. Дахин холбогдож байна {{seconds}} сек…", "conferenceDisconnectTitle": "Та салсан байна.", - "conferenceReloadMsg": "Бид засахаар оролдож байна. Дахин холбогдож байна {{seconds}} сек...", + "conferenceReloadMsg": "Бид засахаар оролдож байна. Дахин холбогдож байна {{seconds}} сек…", "conferenceReloadTitle": "Уучлаарай. Ямар нэг алдаа гарсан байна.", "confirm": "Батлах", "confirmNo": "Үгүй", @@ -560,7 +560,7 @@ "errorLiveStreamNotEnabled": "Шууд дамжуулалт {{email}} дээр идэвхжүүлээгүй байна. Шууд дамжуулалтыг идэвхжүүл эсвэл шууд дамжуулалт хийх боломжтой бүртгэлээр нэвтэрнэ үү.", "expandedOff": "Шууд дамжуулалт зогссон байна", "expandedOn": "Энэ уулзалтыг YouTube дээр шууд дамжуулж байна.", - "expandedPending": "Шууд дамжуулалтыг эхлүүлж байна...", + "expandedPending": "Шууд дамжуулалтыг эхлүүлж байна…", "failedToStart": "Шууд дамжуулалтыг эхлүүлж чадсангүй", "getStreamKeyManually": "Шууд дамжуулалтыг хийх чадсангүй. YouTube-ээс шууд дамжуулалтын түлхүүрээ шалгаж үзээрэй.", "googlePrivacyPolicy": "Google хувийн мэдээлэл хамгаалах дүрэм", @@ -572,7 +572,7 @@ "offBy": "{{name}} шууд дамжуулалтыг зогсоосон", "on": "Шууд дамжуулалт", "onBy": "{{name}} шууд дамжуулалт эхлүүлсэн", - "pending": "Шууд дамжуулалтыг эхлүүлж байна...", + "pending": "Шууд дамжуулалтыг эхлүүлж байна…", "serviceName": "Шууд дамжуулалт үйлчилгээ", "sessionAlreadyActive": "Энэ дамжуулалтын шууд дамжуулах эсвэл бичлэг хийхийг эхлүүлсэн байна.", "signIn": "Google-р нэвтрэх", @@ -602,10 +602,10 @@ "joinRejectedMessage": "Таны уулзалтанд орох хүсэлтийг зөвшөөрөгдсөнгүй.", "joinRejectedTitle": "Уулзалтын хүсэлт зөвшөөрөгдөөгүй.", "joinTitle": "Уулзалтанд оролцох", - "joinWithPasswordMessage": "Нууц үг оруулан уулзалтад оролцохыг оролдож байна, түр хүлээнэ үү...", + "joinWithPasswordMessage": "Нууц үг оруулан уулзалтад оролцохыг оролдож байна, түр хүлээнэ үү…", "joiningMessage": "Таны хүсэлтийг хэн нэгэн зөвшөөрөнгүүт та уулзалтанд нэгдэнэ", - "joiningTitle": "Уулзалтанд орохыг асууж байна...", - "joiningWithPasswordTitle": "Нууц үгтэйгээр оролцож байна...", + "joiningTitle": "Уулзалтанд орохыг асууж байна…", + "joiningWithPasswordTitle": "Нууц үгтэйгээр оролцож байна…", "knockButton": "Уулзалтанд орохыг асуух", "knockTitle": "Хэн нэгэн энэ уулзалтын хүсэлт илгээсэн байна", "knockingParticipantList": "Оролцогчийн жагсаалт шалгах", @@ -691,7 +691,7 @@ "linkToSalesforceDescription": "You can link the meeting summary to a Salesforce object.", "linkToSalesforceError": "Уулзалтыг Salesforce-руу холбох амжилтгүй", "linkToSalesforceKey": "Уулзалтыг холбох", - "linkToSalesforceProgress": "Уулзалтыг Salesforce-той холбож байна...", + "linkToSalesforceProgress": "Уулзалтыг Salesforce-той холбож байна…", "linkToSalesforceSuccess": "Уулзалтыг Salesforce-той холбосон", "localRecordingStarted": "{{name}} өөрийн төхөөрөмжинд бичлэгийг эхлүүлсэн.", "localRecordingStopped": "{{name}} өөрийн төхөөрөмжийн бичлэгээ зогсоосон..", @@ -826,7 +826,7 @@ "callMe": "Над руу залга", "callMeAtNumber": "Энэ дугаараар над руу залга:", "calling": "Дуудаж байна", - "configuringDevices": "Төхөөрөмжийг тохируулж байна...", + "configuringDevices": "Төхөөрөмжийг тохируулж байна…", "connectedWithAudioQ": "Та зөвхөн дуугаа холбогдсон уу?", "connection": { "good": "Таны интернетийн хурд сайн байна!", @@ -872,7 +872,6 @@ "or": "эсвэл", "premeeting": "Уулзалтын өмнө", "screenSharingError": "Дэлгэц хуваалцахын алдаа:", - "showScreen": "Уулзалтын өмгөх дэлгэц идэвхижүүлэх", "startWithPhone": "Утасны дуугаар холбогдох", "videoOnlyError": "Видео дамжуулалтын алдаа:", "videoTrackError": "Видео бичлэг үүсгэж чадсангүй.", @@ -880,17 +879,17 @@ }, "presenceStatus": { "busy": "Завгүй", - "calling": "Дуудаж байна...", + "calling": "Дуудаж байна…", "connected": "Холбогдсон", - "connecting": "Холбож байна...", - "connecting2": "Холбож байна*...", + "connecting": "Холбож байна…", + "connecting2": "Холбож байна*…", "disconnected": "Холбогдоогүй", "expired": "Хугацаа нь дууссан", "ignored": "Ignored", - "initializingCall": "Дуудлагыг эхлүүлж байна...", + "initializingCall": "Дуудлагыг эхлүүлж байна…", "invited": "Урьсан", "rejected": "Татгалзсан", - "ringing": "Дуудаж байна..." + "ringing": "Дуудаж байна…" }, "profile": { "avatar": "avatar", @@ -924,7 +923,7 @@ "errorFetchingLink": "Бичлэгийн холбоос татах үеийн алдаа.", "expandedOff": "Бичлэг хийх зогссон", "expandedOn": "Уулзалтыг одоо тэмдэглэж байна.", - "expandedPending": "Бичлэгийг хийж байна...", + "expandedPending": "Бичлэгийг хийж байна…", "failedToStart": "Бичлэг хийх амжилтгүй боллоо", "fileSharingdescription": "Бичлэгийг уулзалтын оролцогчидтой хуваалцах", "highlight": "Highlight", @@ -943,7 +942,7 @@ "localRecordingStartWarningTitle": "Хадгалахын тулд бичлэгээ зогсооно уу", "localRecordingVideoStop": "Видео бичлэгээ зогсоовол өөр дээрээ файлаар хадгалах нь хамтдаа зогсоно. Та үргэлжлүүлэхдээ итгэлтэй байна уу?", "localRecordingVideoWarning": "To record your video you must have it on when starting the recording", - "localRecordingWarning": "Дуу болон видео дамжуулалтын зөвшөөрлийг өгөхийн тулд энэ табыг сонгоно уу. Бичлэгийн дээд хэмжээ нь 1ГБ буюу ойролцоогоор The recording is currently limited to 1GB, which is around 100 minutes.", + "localRecordingWarning": "Дуу болон видео дамжуулалтын зөвшөөрлийг өгөхийн тулд энэ табыг сонгоно уу.", "loggedIn": "{userName} нэвтэрнэ үү", "noMicPermission": "Микрофон олдсонгүй. Микрофон ашиглах зөвшөөрлөө өгнө үү.", "noStreams": "Дуу эсвэл видео дамжуулалт олдсонгүй.", @@ -952,7 +951,7 @@ "on": "Бичиж байна", "onBy": "{{name}} бичлэг хийж эхлэв", "onlyRecordSelf": "Зөвхөн миний видео болон дууны дамжуулалтыг бичих", - "pending": "Уулзалтыг бичихээр бэлтгэж байна...", + "pending": "Уулзалтыг бичихээр бэлтгэж байна…", "rec": "REC", "saveLocalRecording": "Бичлэгийн файлаа өөрийн компьютерт хадгал (Beta)", "serviceDescription": "Таны бичлэгийг хадгална", @@ -997,7 +996,7 @@ "incomingMessage": "Ирсэн мессэж", "language": "Хэл", "loggedIn": "{{name}} нэвтэрсэн", - "maxStageParticipants": "Үндсэн тайз руу гарах оролцогчийн хамгийн их тоо(Туршилтынх)", + "maxStageParticipants": "Үндсэн тайз руу гарах оролцогчийн хамгийн их тоо", "microphones": "Микрофон", "moderator": "Зохицуулагч", "moderatorOptions": "Зохицуулагчийн сонголт", @@ -1280,7 +1279,7 @@ "failedToStart": "Хадмал орчуулга эхлүүлж чадсангүй", "labelToolTip": "Уулзалтын хадмал орчуулга", "off": "Хадмал орчуулга больсон", - "pending": "Уулзалтын хадмал орчуулга хийхэд бэлдэж байна...", + "pending": "Уулзалтын хадмал орчуулга хийхэд бэлдэж байна…", "sourceLanguageDesc": "Уулзалтын хэлийг {{sourceLanguage}} болгон өөрчилсөн.
Та эндээс солих боломжтой ", "sourceLanguageHere": "энд", "start": "Хадмал орчуулгыг харуулах", @@ -1291,16 +1290,7 @@ }, "unpinParticipant": "{{participantName}} - Онцлох", "userMedia": { - "androidGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд Allow дарна уу.", - "chromeGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд Allow дарна уу.", - "edgeGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд Yes дарна уу.", - "electronGrantPermissions": "Камер болон микрофон ашиглах зөвшөөрөл өгнө үү", - "firefoxGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд Share Selected Device дарна уу.", - "iexplorerGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд OK дарна уу.", - "nwjsGrantPermissions": "Камер болон микрофон ашиглах зөвшөөрөл өгнө үү", - "operaGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд Allow дарна уу.", - "react-nativeGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд Allow дарна уу.", - "safariGrantPermissions": "Хөтөчөөс зөвшөөрөл хүсэх тохиолдолд OK дарна уу." + "grantPermissions": "Камер болон микрофон ашиглах зөвшөөрөл өгнө үү." }, "videoSIPGW": { "busy": "Бид нөөцийг чөлөөлөхөөр ажиллаж байна. Хэдэн минутын дараа дахин оролдоно уу.", @@ -1374,7 +1364,7 @@ "image6": "Forest ", "image7": "Sunrise", "none": "Аль нь ч биш", - "pleaseWait": "Түр хүлээнэ үү...", + "pleaseWait": "Түр хүлээнэ үү…", "removeBackground": "Арын зураг устгах", "slightBlur": "Тал бүдгэрүүлэх", "title": "Виртуал бүдгэрүүлэлт", diff --git a/lang/main-mr.json b/lang/main-mr.json index cadcb65c85e4..93acadeddfc2 100644 --- a/lang/main-mr.json +++ b/lang/main-mr.json @@ -68,7 +68,7 @@ "installExtensionText": "Google कॅलेंडर आणि ऑफिस 365 एकत्रिकरणासाठी विस्तार स्थापित करा" }, "connectingOverlay": { - "joiningRoom": "आपल्याला आपल्या संमेलनात कनेक्ट करीत आहे ..." + "joiningRoom": "आपल्याला आपल्या संमेलनात कनेक्ट करीत आहे…" }, "connection": { "ATTACHED": "जोडले", @@ -80,9 +80,9 @@ "DISCONNECTED": "डिस्कनेक्ट केलेले", "DISCONNECTING": "डिस्कनेक्ट करत आहे", "ERROR": "त्रुटी", - "FETCH_SESSION_ID": "सत्र आयडी प्राप्त करीत आहे ...", + "FETCH_SESSION_ID": "सत्र आयडी प्राप्त करीत आहे…", "GET_SESSION_ID_ERROR": "सत्र-आयडी त्रुटी मिळवा:{{code}}", - "GOT_SESSION_ID": "सत्र-आयडी मिळवित आहे ... पूर्ण झाले", + "GOT_SESSION_ID": "सत्र-आयडी मिळवित आहे… पूर्ण झाले", "LOW_BANDWIDTH": "बँडविड्थ जतन करण्यासाठी {{displayName}}चा व्हिडिओ बंद केला गेला आहे" }, "connectionindicator": { @@ -156,7 +156,7 @@ "Share": "सामायिक करा", "Submit": "प्रस्तुत करणे", "WaitForHostMsg": "परिषद अद्याप सुरू झाले नाही. आपण होस्ट असल्यास कृपया अधिकृत करा. अन्यथा, कृपया होस्ट येण्याची प्रतीक्षा करा.", - "WaitingForHost": " होस्टची प्रतीक्षा करीत आहे ...", + "WaitingForHost": " होस्टची प्रतीक्षा करीत आहे…", "Yes": "होय", "accessibilityLabel": { "liveStreaming": "थेट प्रसारण" @@ -175,7 +175,7 @@ "close": "बंद", "conferenceDisconnectMsg": "आपण आपले नेटवर्क कनेक्शन तपासू शकता. सेकंदात पुन्हा कनेक्ट करत आहे {{seconds}}..", "conferenceDisconnectTitle": "आपण डिस्कनेक्ट झाला आहात.", - "conferenceReloadMsg": "आम्ही हे निश्चित करण्याचा प्रयत्न करीत आहोत. पुन्हा कनेक्ट करत आहे. {{seconds}} sec...", + "conferenceReloadMsg": "आम्ही हे निश्चित करण्याचा प्रयत्न करीत आहोत. पुन्हा कनेक्ट करत आहे. {{seconds}} sec…", "conferenceReloadTitle": "दुर्दैवाने, काहीतरी चूक झाली", "confirm": "पुष्टी", "confirmNo": "नाही", @@ -397,7 +397,7 @@ "offBy": "{{name}} थेट प्रवाह थांबविला", "on": "थेट प्रवाह", "onBy": "{{name}} थेट प्रवाह सुरू केला", - "pending": "थेट प्रवाह सुरू करत आहे ...", + "pending": "थेट प्रवाह सुरू करत आहे…", "serviceName": "थेट प्रवाह सेवा", "signIn": "Google सह साइन इन करा", "signInCTA": "YouTube वरून साइन इन करा किंवा आपली थेट प्रवाह की प्रविष्ट करा.", @@ -495,7 +495,7 @@ "callMe": "मला कॉल करा", "callMeAtNumber": "मला या नंबरवर कॉल करा:", "calling": "कॉल करीत आहे", - "configuringDevices": "डिव्हाइस कॉन्फिगर करीत आहे ...", + "configuringDevices": "डिव्हाइस कॉन्फिगर करीत आहे…", "connectedWithAudioQ": "आपण ऑडिओशी कनेक्ट आहात?", "copyAndShare": "मीटिंगचा दुवा कॉपी आणि सामायिक करा", "dialInMeeting": "बैठकीत डायल करा", @@ -517,17 +517,17 @@ }, "presenceStatus": { "busy": "व्यस्त", - "calling": "कॉल करीत आहे ...", + "calling": "कॉल करीत आहे…", "connected": "जोडलेले", - "connecting": "कनेक्ट करीत आहे ...", - "connecting2": "कनेक्ट करीत आहे ...", + "connecting": "कनेक्ट करीत आहे…", + "connecting2": "कनेक्ट करीत आहे…", "disconnected": "डिस्कनेक्ट केलेले", "expired": "कालबाह्य", "ignored": "दुर्लक्षित", - "initializingCall": "कॉल प्रारंभ करीत आहे ...", + "initializingCall": "कॉल प्रारंभ करीत आहे…", "invited": "आमंत्रित केले", "rejected": "नाकारले", - "ringing": "रिंग होत आहे ..." + "ringing": "रिंग होत आहे…" }, "profile": { "setDisplayNameLabel": " आपले प्रदर्शन नाव सेट करा", @@ -545,7 +545,7 @@ "error": "रेकॉर्डिंग अयशस्वी. कृपया पुन्हा प्रयत्न करा.", "expandedOff": "रेकॉर्डिंग थांबले आहे", "expandedOn": "सभेची नोंद सध्या घेतली जात आहे.", - "expandedPending": "रेकॉर्डिंग सुरू केले जात आहे ...", + "expandedPending": "रेकॉर्डिंग सुरू केले जात आहे…", "failedToStart": "रेकॉर्डिंग सुरू करण्यात अयशस्वी", "fileSharingdescription": "मीटिंगमधील सहभागींसह रेकॉर्डिंग सामायिक करा", "live": "LIVE", @@ -554,7 +554,7 @@ "offBy": "{{name}} रेकॉर्डिंग थांबविले", "on": "Recording", "onBy": "{{name}} रेकॉर्डिंग सुरू केले", - "pending": "मीटिंग रेकॉर्ड करण्याची तयारी करत आहे ...", + "pending": "मीटिंग रेकॉर्ड करण्याची तयारी करत आहे…", "rec": "REC", "serviceDescription": "आपले रेकॉर्डिंग रेकॉर्डिंग सेवेद्वारे जतन केले जाईल", "serviceName": "रेकॉर्डिंग सेवा", @@ -701,22 +701,13 @@ "failedToStart": "लिप्यंतरण सुरू करण्यात अयशस्वी", "labelToolTip": "सभेचे प्रतिलेखन केले जात आहे", "off": "लिप्यंतरण थांबविले", - "pending": "संमेलनाची नक्कल करण्याची तयारी करत आहे ...", + "pending": "संमेलनाची नक्कल करण्याची तयारी करत आहे…", "start": "उपशीर्षके दर्शविणे प्रारंभ करा", "stop": "उपशीर्षके दर्शविणे थांबवा", "tr": "टीआर" }, "userMedia": { - "androidGrantPermissions": "निवडा परवानगी द्या जेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "chromeGrantPermissions": "निवडा परवानगी द्या जेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "edgeGrantPermissions": "निवडा होय जेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "electronGrantPermissions": "कृपया आपला कॅमेरा आणि मायक्रोफोन वापरण्यास परवानगी द्या", - "firefoxGrantPermissions": "Select निवडलेले डिव्हाइस सामायिक करा जेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "iexplorerGrantPermissions": "निवडा ठीक आहे जेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "nwjsGrantPermissions": "कृपया आपला कॅमेरा आणि मायक्रोफोन वापरण्यास परवानगी द्या", - "operaGrantPermissions": "निवडा परवानगी द्या जेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "react-nativeGrantPermissions": "निवडा परवानगी द्याजेव्हा आपला ब्राउझर परवानग्या विचारतो.", - "safariGrantPermissions": "निवडा ठीक आहे जेव्हा आपला ब्राउझर परवानग्या विचारतो." + "grantPermissions": "कृपया आपला कॅमेरा आणि मायक्रोफोन वापरण्यास परवानगी द्या." }, "videoSIPGW": { "busy": "आम्ही स्त्रोत मुक्त करण्याचे काम करत आहोत. कृपया काही मिनिटांत पुन्हा प्रयत्न करा.", diff --git a/lang/main-nb.json b/lang/main-nb.json new file mode 100644 index 000000000000..4aa731e2c685 --- /dev/null +++ b/lang/main-nb.json @@ -0,0 +1,1583 @@ +{ + "addPeople": { + "accessibilityLabel": { + "meetingLink": "møtelink: {{url}}" + }, + "add": "Inviter", + "addContacts": "Inviter dine kontakter", + "contacts": "kontakter", + "copyInvite": "Kopier møteinvitasjon", + "copyLink": "Kopier møtelink", + "copyStream": "Kopier direktesending-lenke", + "countryNotSupported": "Vi støtter ikke denne destinasjonen ennå.", + "countryReminder": "Ringer du utenfor USA? Vennligst sørg for å starte med landskoden!", + "defaultEmail": "Din standard e-post", + "disabled": "Du kan ikke invitere folk.", + "failedToAdd": "Kunne ikke legge til deltakere", + "googleEmail": "Google e-post", + "inviteMoreHeader": "Du er den eneste i møtet", + "inviteMoreMailSubject": "Bli med i{{appName}} møtet", + "inviteMorePrompt": "Inviter flere personer", + "linkCopied": "Lenke kopiert til utklippstavlen", + "noResults": "Ingen treff på søket", + "outlookEmail": "Outlook e-post", + "phoneNumbers": "telefonnumre", + "searching": "Søker…", + "shareInvite": "Del møteinvitasjon", + "shareLink": "Del møtelinken for å invitere andre", + "shareStream": "Del direktesending-lenken", + "sipAddresses": "SIP-adresser", + "telephone": "Telefon: {{number}}", + "title": "Inviter folk til dette møtet", + "yahooEmail": "Yahoo e-post" + }, + "audioDevices": { + "bluetooth": "Bluetooth", + "car": "Lyd i bil", + "headphones": "Hodetelefoner", + "none": "Lydutstyr ikke tilgjengelig", + "phone": "Telefon", + "speaker": "Høyttaler" + }, + "audioOnly": { + "audioOnly": "Lav båndbredde" + }, + "bandwidthSettings": { + "assumedBandwidthBps": "f.eks. 10000000 for 10 Mbps", + "assumedBandwidthBpsWarning": "Høyere verdier kan forårsake nettverksproblemer.", + "customValue": "Egendefinert verdi", + "customValueEffect": "For å sette den faktiske bps-verdien", + "leaveEmpty": "La stå tomt", + "leaveEmptyEffect": "For å tillate at estimater blir gjort", + "possibleValues": "Mulige verdier", + "setAssumedBandwidthBps": "Antatt båndbredde (bps)", + "title": "Båndbreddeinnstillinger", + "zeroEffect": "For å deaktivere video" + }, + "breakoutRooms": { + "actions": { + "add": "Legg til grupperom", + "autoAssign": "Automatisk tildeling til grupperom", + "close": "Lukk", + "join": "Bli med", + "leaveBreakoutRoom": "Forlat grupperom", + "more": "Mer", + "remove": "Fjern", + "rename": "Gi nytt navn", + "renameBreakoutRoom": "Gi nytt navn til grupperom", + "sendToBreakoutRoom": "Send deltaker til:" + }, + "breakoutList": "Grupperomsliste", + "buttonLabel": "Grupperom", + "defaultName": "Grupperom #{{index}}", + "hideParticipantList": "Skjul deltakerliste", + "mainRoom": "Hovedrom", + "notifications": { + "joined": "Bli med i \"{{name}}\" grupperom", + "joinedMainRoom": "Bli med i hovedrom", + "joinedTitle": "Grupperom" + }, + "showParticipantList": "Vis deltakerliste", + "title": "Grupperom" + }, + "calendarSync": { + "addMeetingURL": "Legg til en møtelenke", + "confirmAddLink": "Vil du legge til en Jitsi-lenke til denne hendelsen?", + "error": { + "appConfiguration": "Kalenderintegrasjonen er ikke riktig konfigurert.", + "generic": "En feil har oppstått. Sjekk kalenderinnstillingene dine eller prøv å oppdatere kalenderen.", + "notSignedIn": "En feil oppstod under autentisering for å se kalenderhendelser. Sjekk kalenderinnstillingene dine og prøv å logge inn igjen." + }, + "join": "Bli med", + "joinTooltip": "Bli med i møtet", + "nextMeeting": "Neste møte", + "noEvents": "Det er ingen planlagte kommende hendelser.", + "ongoingMeeting": "Pågående møte", + "permissionButton": "Åpne innstillinger", + "permissionMessage": "Kalendertillatelse er nødvendig for å se møtene dine i appen.", + "refresh": "Oppdater kalender", + "today": "I dag" + }, + "carmode": { + "actions": { + "selectSoundDevice": "Velg lydenhet" + }, + "labels": { + "buttonLabel": "Bilmodus", + "title": "Bilmodus", + "videoStopped": "Videoen din er stoppet" + } + }, + "chat": { + "enter": "Gå inn i rommet", + "error": "Feil: meldingen din ble ikke sendt. Årsak: {{error}}", + "fieldPlaceHolder": "Aa", + "lobbyChatMessageTo": "Lobby-chatmelding til {{recipient}}", + "message": "Melding", + "messageAccessibleTitle": "{{user}} sier:", + "messageAccessibleTitleMe": "jeg sier:", + "messageTo": "Privat melding til {{recipient}}", + "messagebox": "Skriv en melding", + "newMessages": "Nye meldinger", + "nickname": { + "popover": "Velg et kallenavn", + "title": "Skriv inn et kallenavn for å bruke chatten", + "titleWithPolls": "Skriv inn et kallenavn for å bruke chatten og avstemninger" + }, + "noMessagesMessage": "Det er ingen meldinger i møtet ennå. Start en samtale her!", + "privateNotice": "Privat melding til {{recipient}}", + "sendButton": "Send", + "smileysPanel": "Emoji-panel", + "systemDisplayName": "System", + "tabs": { + "chat": "Chat", + "polls": "Avstemninger" + }, + "title": "Chat", + "titleWithPolls": "Chat og avstemninger", + "you": "du" + }, + "chromeExtensionBanner": { + "buttonText": "Installer Chrome-utvidelse", + "buttonTextEdge": "Installer Edge-utvidelse", + "close": "Lukk", + "dontShowAgain": "Ikke vis dette igjen", + "installExtensionText": "Installer utvidelsen for integrasjon med Google Kalender og Office 365" + }, + "connectingOverlay": { + "joiningRoom": "Kobler deg til møtet…" + }, + "connection": { + "ATTACHED": "Tilkoblet", + "AUTHENTICATING": "Autentiserer", + "AUTHFAIL": "Autentisering mislyktes", + "CONNECTED": "Tilkoblet", + "CONNECTING": "Kobler til", + "CONNFAIL": "Tilkobling mislyktes", + "DISCONNECTED": "Frakoblet", + "DISCONNECTING": "Kobler fra", + "ERROR": "Feil", + "FETCH_SESSION_ID": "Henter sesjons-ID…", + "GET_SESSION_ID_ERROR": "Feil ved henting av sesjons-ID: {{code}}", + "GOT_SESSION_ID": "Henting av sesjons-ID fullført", + "LOW_BANDWIDTH": "Videoen til {{displayName}} er slått av for å spare båndbredde" + }, + "connectionindicator": { + "address": "Adresse:", + "audio_ssrc": "Audio SSRC:", + "bandwidth": "Estimert båndbredde:", + "bitrate": "Bithastighet:", + "bridgeCount": "Antall servere: ", + "codecs": "Kodeker (A/V): ", + "connectedTo": "Tilkoblet til:", + "e2eeVerified": "E2EE verifisert:", + "framerate": "Bildefrekvens:", + "less": "Vis mindre", + "localaddress": "Lokal adresse:", + "localaddress_plural": "Lokale adresser:", + "localport": "Lokal port:", + "localport_plural": "Lokale porter:", + "maxEnabledResolution": "send maks", + "more": "Vis mer", + "no": "nei", + "packetloss": "Pakktap:", + "participant_id": "Deltaker-ID:", + "quality": { + "good": "Bra", + "inactive": "Inaktiv", + "lost": "Tapt", + "nonoptimal": "Ikke optimal", + "poor": "Dårlig" + }, + "remoteaddress": "Ekstern adresse:", + "remoteaddress_plural": "Eksterne adresser:", + "remoteport": "Ekstern port:", + "remoteport_plural": "Eksterne porter:", + "resolution": "Oppløsning:", + "savelogs": "Lagre logger", + "status": "Tilkobling:", + "transport": "Transport:", + "transport_plural": "Transporter:", + "video_ssrc": "Video SSRC:", + "yes": "ja" + }, + "dateUtils": { + "earlier": "Tidligere", + "today": "I dag", + "yesterday": "I går" + }, + "deepLinking": { + "appNotInstalled": "Du trenger mobilappen {{app}} for å bli med i dette møtet på telefonen.", + "description": "Ingenting skjedde? Vi prøvde å starte møtet ditt i {{app}} skrivebordsappen. Prøv igjen eller åpne det i {{app}} nettappen.", + "descriptionNew": "Ingenting skjedde? Vi prøvde å starte møtet ditt i {{app}} skrivebordsappen.

Du kan prøve igjen eller åpne det i nettleseren.", + "descriptionWithoutWeb": "Ingenting skjedde? Vi prøvde å starte møtet ditt i {{app}} skrivebordsappen.", + "downloadApp": "Last ned appen", + "downloadMobileApp": "Last ned fra App Store", + "ifDoNotHaveApp": "Hvis du ikke har appen ennå:", + "ifHaveApp": "Hvis du allerede har appen:", + "joinInApp": "Bli med i dette møtet ved å bruke appen", + "joinInAppNew": "Bli med i appen", + "joinInBrowser": "Bli med i nettleseren", + "launchMeetingLabel": "Hvordan vil du bli med i dette møtet?", + "launchWebButton": "Start i nettleseren", + "noDesktopApp": "Har du ikke appen?", + "noMobileApp": "Har du ikke appen?", + "or": "ELLER", + "termsAndConditions": "Ved å fortsette godtar du våre vilkår og betingelser.", + "title": "Starter møtet ditt i {{app}}…", + "titleNew": "Starter møtet ditt…", + "tryAgainButton": "Prøv igjen på skrivebordet", + "unsupportedBrowser": "Det ser ut som om du bruker en nettleser vi ikke støtter." + }, + "defaultLink": "f.eks. {{url}}", + "defaultNickname": "f.eks. Jane Pink", + "deviceError": { + "cameraError": "Kunne ikke få tilgang til kameraet ditt", + "cameraPermission": "Feil ved innhenting av kameratilgang", + "microphoneError": "Kunne ikke få tilgang til mikrofonen din", + "microphonePermission": "Feil ved innhenting av mikrofontillatelse" + }, + "deviceSelection": { + "hid": { + "callControl": "Samtalekontroll", + "connectedDevices": "Tilkoblede enheter:", + "deleteDevice": "Slett enhet", + "pairDevice": "Koble til enhet" + }, + "noPermission": "Tillatelse ikke gitt", + "previewUnavailable": "Forhåndsvisning ikke tilgjengelig", + "selectADevice": "Velg en enhet", + "testAudio": "Test" + }, + "dialIn": { + "screenTitle": "Sammendrag av innringing" + }, + "dialOut": { + "statusMessage": "er nå {{status}}" + }, + "dialog": { + "Back": "Tilbake", + "Cancel": "Avbryt", + "IamHost": "Logg inn", + "Ok": "OK", + "Remove": "Fjern", + "Share": "Del", + "Submit": "Send inn", + "WaitForHostMsg": "Konferansen har ikke startet ennå fordi ingen moderatorer har ankommet. Hvis du vil bli moderator, vennligst logg inn. Ellers, vennligst vent.", + "WaitForHostNoAuthMsg": "Konferansen har ikke startet ennå fordi ingen moderatorer har ankommet. Vennligst vent.", + "WaitingForHostButton": "Vent på moderator", + "WaitingForHostTitle": "Venter på en moderator…", + "Yes": "Ja", + "accessibilityLabel": { + "Cancel": "Avbryt (forlat dialog)", + "Ok": "OK (lagre og forlat dialog)", + "close": "Lukk dialog", + "liveStreaming": "Direktesending", + "sharingTabs": "Delingsalternativer" + }, + "add": "Legg til", + "addMeetingNote": "Legg til en notat om dette møtet", + "addOptionalNote": "Legg til en notat (valgfritt):", + "allow": "Tillat", + "allowToggleCameraDialog": "Tillater du at {{initiatorName}} bytter kameramodus?", + "allowToggleCameraTitle": "Tillat bytte av kamera?", + "alreadySharedVideoMsg": "En annen deltaker deler allerede en video. Denne konferansen tillater kun én delt video om gangen.", + "alreadySharedVideoTitle": "Kun én delt video er tillatt om gangen", + "applicationWindow": "Programvindu", + "authenticationRequired": "Autentisering kreves", + "cameraConstraintFailedError": "Kameraet ditt oppfyller ikke noen av de nødvendige kravene.", + "cameraNotFoundError": "Kamera ble ikke funnet.", + "cameraNotSendingData": "Vi kan ikke få tilgang til kameraet ditt. Sjekk om en annen applikasjon bruker denne enheten, velg en annen enhet i innstillingene eller prøv å laste inn applikasjonen på nytt.", + "cameraNotSendingDataTitle": "Kan ikke få tilgang til kameraet", + "cameraPermissionDeniedError": "Du har ikke gitt tillatelse til å bruke kameraet ditt. Du kan fortsatt bli med i konferansen, men andre vil ikke se deg. Bruk kameraknappen i adressefeltet for å fikse dette.", + "cameraTimeoutError": "Kunne ikke starte videokilden. Tidsavbrudd oppstod!", + "cameraUnknownError": "Kan ikke bruke kameraet av en ukjent grunn.", + "cameraUnsupportedResolutionError": "Kameraet ditt støtter ikke den nødvendige videooppløsningen.", + "close": "Lukk", + "conferenceDisconnectMsg": "Sjekk nettverkstilkoblingen din. Prøver å koble til igjen om {{seconds}} sekunder…", + "conferenceDisconnectTitle": "Du har blitt frakoblet.", + "conferenceReloadMsg": "Vi prøver å fikse dette. Prøver å koble til igjen om {{seconds}} sekunder…", + "conferenceReloadTitle": "Dessverre oppstod det en feil.", + "confirm": "Bekreft", + "confirmNo": "Nei", + "confirmYes": "Ja", + "connectError": "Oops! Noe gikk galt, og vi kunne ikke koble til konferansen.", + "connectErrorWithMsg": "Oops! Noe gikk galt, og vi kunne ikke koble til konferansen: {{msg}}", + "connecting": "Kobler til", + "contactSupport": "Kontakt brukerstøtte", + "copied": "Kopiert", + "copy": "Kopier", + "demoteParticipantDialog": "Er du sikker på at du vil flytte denne deltakeren til seer?", + "demoteParticipantTitle": "Flytt til seer", + "dismiss": "Avvis", + "displayNameRequired": "Hei! Hva heter du?", + "done": "Ferdig", + "e2eeDescription": "Ende-til-ende-kryptering er for øyeblikket EKSPERIMENTELL. Husk at aktivering av ende-til-ende-kryptering vil deaktivere serverbaserte tjenester som for eksempel telefon-deltakelse. Husk også at møtet kun vil fungere for brukere som deltar fra nettlesere som støtter innsettbare strømmer.", + "e2eeDisabledDueToMaxModeDescription": "Kan ikke aktivere ende-til-ende-kryptering på grunn av et stort antall deltakere i konferansen.", + "e2eeLabel": "Aktiver ende-til-ende-kryptering", + "e2eeWarning": "ADVARSEL: Ikke alle deltakere i dette møtet ser ut til å støtte ende-til-ende-kryptering. Hvis du aktiverer det, vil de verken kunne se eller høre deg.", + "e2eeWillDisableDueToMaxModeDescription": "ADVARSEL: Ende-til-ende-kryptering vil automatisk bli deaktivert hvis flere deltakere blir med i konferansen.", + "embedMeeting": "Bygg inn møte", + "enterDisplayName": "Skriv inn navnet ditt", + "error": "Feil", + "errorRoomCreationRestriction": "Du prøvde å bli med for raskt, vennligst prøv igjen om litt.", + "gracefulShutdown": "Tjenesten vår er for øyeblikket nede for vedlikehold. Prøv igjen senere.", + "grantModeratorDialog": "Er du sikker på at du vil gi moderatorrettigheter til {{participantName}}?", + "grantModeratorTitle": "Gi moderatorrettigheter", + "hide": "Skjul", + "hideShareAudioHelper": "Ikke vis denne dialogen igjen", + "incorrectPassword": "Feil brukernavn eller passord", + "incorrectRoomLockPassword": "Feil passord", + "internalError": "Oops! Noe gikk galt. Følgende feil oppstod: {{error}}", + "internalErrorTitle": "Intern feil", + "kickMessage": "Du kan kontakte {{participantDisplayName}} for mer informasjon.", + "kickParticipantButton": "Fjern", + "kickParticipantDialog": "Er du sikker på at du vil fjerne denne deltakeren?", + "kickParticipantTitle": "Fjern denne deltakeren?", + "kickSystemTitle": "Oi! Du ble kastet ut av møtet", + "kickTitle": "Oi! {{participantDisplayName}} kastet deg ut av møtet", + "linkMeeting": "Koble møte", + "linkMeetingTitle": "Koble møtet til Salesforce", + "liveStreaming": "Direktesending", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Ikke mulig mens opptak er aktivt", + "localUserControls": "Lokale brukerkontroller", + "lockMessage": "Kunne ikke låse konferansen.", + "lockRoom": "Legg til møtets $t(lockRoomPassword)", + "lockTitle": "Låsing mislyktes", + "login": "Logg inn", + "loginQuestion": "Er du sikker på at du vil logge inn og forlate konferansen?", + "logoutQuestion": "Er du sikker på at du vil logge ut og forlate konferansen?", + "logoutTitle": "Logg ut", + "maxUsersLimitReached": "Grensen for maksimalt antall deltakere er nådd. Konferansen er full. Vennligst kontakt møtearrangøren eller prøv igjen senere!", + "maxUsersLimitReachedTitle": "Maksimalt deltakerantall nådd", + "micConstraintFailedError": "Mikrofonen din oppfyller ikke noen av de nødvendige kravene.", + "micNotFoundError": "Mikrofonen ble ikke funnet.", + "micNotSendingData": "Gå til datamaskinens innstillinger for å slå på mikrofonen og justere nivået", + "micNotSendingDataTitle": "Mikrofonen din er dempet av systeminnstillingene", + "micPermissionDeniedError": "Du har ikke gitt tillatelse til å bruke mikrofonen din. Du kan fortsatt delta i konferansen, men andre vil ikke høre deg. Bruk kameraknappen i adressefeltet for å fikse dette.", + "micTimeoutError": "Kunne ikke starte lydkilden. Tidsavbrudd oppstod!", + "micUnknownError": "Kan ikke bruke mikrofonen av en ukjent grunn.", + "moderationAudioLabel": "Tillat deltakere å slå på lyden selv", + "moderationVideoLabel": "Tillat deltakere å starte videoen sin", + "muteEveryoneDialog": "Deltakerne kan slå på lyden sin når som helst.", + "muteEveryoneDialogModerationOn": "Deltakerne kan sende en forespørsel om å få snakke når som helst.", + "muteEveryoneElseDialog": "Når de er dempet, kan du ikke slå på lyden for dem, men de kan gjøre det selv når som helst.", + "muteEveryoneElseTitle": "Demp alle unntatt {{whom}}?", + "muteEveryoneElsesVideoDialog": "Når kameraet er deaktivert, kan du ikke slå det på igjen, men deltakerne kan gjøre det selv når som helst.", + "muteEveryoneElsesVideoTitle": "Stopp alles video unntatt {{whom}}?", + "muteEveryoneSelf": "deg selv", + "muteEveryoneStartMuted": "Alle starter dempet fra nå av", + "muteEveryoneTitle": "Demp alle?", + "muteEveryonesVideoDialog": "Deltakerne kan slå på videoen sin når som helst.", + "muteEveryonesVideoDialogModerationOn": "Deltakerne kan sende en forespørsel om å slå på videoen når som helst.", + "muteEveryonesVideoDialogOk": "Deaktiver", + "muteEveryonesVideoTitle": "Stopp alles video?", + "muteParticipantBody": "Du kan ikke slå på lyden for dem, men de kan gjøre det selv når som helst.", + "muteParticipantButton": "Demp", + "muteParticipantsVideoBody": "Du vil ikke kunne slå på kameraet igjen, men de kan gjøre det selv når som helst.", + "muteParticipantsVideoBodyModerationOn": "Du vil ikke kunne slå på kameraet igjen, og det vil heller ikke de.", + "muteParticipantsVideoButton": "Stopp video", + "muteParticipantsVideoDialog": "Er du sikker på at du vil slå av kameraet til denne deltakeren? Du vil ikke kunne slå det på igjen, men deltakeren kan gjøre det selv når som helst.", + "muteParticipantsVideoDialogModerationOn": "Er du sikker på at du vil slå av kameraet til denne deltakeren? Du vil ikke kunne slå det på igjen, og det vil heller ikke de.", + "muteParticipantsVideoTitle": "Deaktiver kameraet til denne deltakeren?", + "noDropboxToken": "Ingen gyldig Dropbox-token", + "password": "Passord", + "passwordLabel": "Møtet har blitt låst av en deltaker. Vennligst skriv inn $t(lockRoomPassword) for å bli med.", + "passwordNotSupported": "Å angi et møte $t(lockRoomPassword) støttes ikke.", + "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) støttes ikke", + "passwordRequired": "$t(lockRoomPasswordUppercase) kreves", + "permissionCameraRequiredError": "Kameratilgang er nødvendig for å delta i videokonferanser. Vennligst gi tillatelse i Innstillinger", + "permissionErrorTitle": "Tillatelse kreves", + "permissionMicRequiredError": "Mikrofontilgang er nødvendig for å delta i lydkonferanser. Vennligst gi tillatelse i Innstillinger", + "readMore": "mer", + "recentlyUsedObjects": "Dine nylig brukte objekter", + "recording": "Opptak", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ikke mulig mens direktesending er aktiv", + "rejoinNow": "Bli med igjen nå", + "remoteControlAllowedMessage": "{{user}} godtok forespørselen din om fjernkontroll!", + "remoteControlDeniedMessage": "{{user}} avslo forespørselen din om fjernkontroll!", + "remoteControlErrorMessage": "En feil oppstod da vi prøvde å be om fjernkontrolltillatelser fra {{user}}!", + "remoteControlRequestMessage": "Vil du tillate at {{user}} fjernstyrer skrivebordet ditt?", + "remoteControlShareScreenWarning": "Merk at hvis du trykker \"Tillat\", vil du dele skjermen din!", + "remoteControlStopMessage": "Fjernkontrolløkten ble avsluttet!", + "remoteControlTitle": "Fjernstyring av skrivebord", + "remoteUserControls": "Fjernbrukerkontroller for {{username}}", + "removePassword": "Fjern $t(lockRoomPassword)", + "removeSharedVideoMsg": "Er du sikker på at du vil fjerne den delte videoen din?", + "removeSharedVideoTitle": "Fjern delt video", + "renameBreakoutRoomLabel": "Romnavn", + "renameBreakoutRoomTitle": "Gi nytt navn til grupperom", + "reservationError": "Feil i reservasjonsystemet", + "reservationErrorMsg": "Feilkode: {{code}}, melding: {{msg}}", + "retry": "Prøv igjen", + "screenSharingAudio": "Del lyd", + "screenSharingFailed": "Oops! Noe gikk galt, vi kunne ikke starte skjermdeling!", + "screenSharingFailedTitle": "Skjermdeling mislyktes!", + "screenSharingPermissionDeniedError": "Oops! Noe gikk galt med skjermdelingstillatelsene dine. Vennligst last inn siden på nytt og prøv igjen.", + "searchInSalesforce": "Søk i Salesforce", + "searchResults": "Søkeresultater ({{count}})", + "searchResultsDetailsError": "Noe gikk galt ved henting av eierdata.", + "searchResultsError": "Noe gikk galt ved henting av data.", + "searchResultsNotFound": "Ingen søkeresultater funnet.", + "searchResultsTryAgain": "Prøv med alternative søkeord.", + "sendPrivateMessage": "Du har nylig mottatt en privat melding. Ønsker du å svare privat, eller vil du sende meldingen til gruppen?", + "sendPrivateMessageCancel": "Send til gruppen", + "sendPrivateMessageOk": "Send privat", + "sendPrivateMessageTitle": "Send privat?", + "serviceUnavailable": "Tjenesten er utilgjengelig", + "sessTerminated": "Samtale avsluttet", + "sessTerminatedReason": "Møtet har blitt avsluttet", + "sessionRestarted": "Samtalen ble startet på nytt på grunn av en tilkoblingsfeil.", + "shareAudio": "Fortsett", + "shareAudioAltText": "For å dele ønsket innhold, gå til \"Nettleserfane\", velg innholdet, aktiver \"del lyd\"-avkrysningsboksen og klikk deretter på \"del\"-knappen", + "shareAudioTitle": "Hvordan dele lyd", + "shareAudioWarningD1": "Du må stoppe skjermdelingen før du deler lyden din.", + "shareAudioWarningD2": "Du må starte skjermdelingen på nytt og velge \"del lyd\"-alternativet.", + "shareAudioWarningH1": "Hvis du bare vil dele lyd:", + "shareAudioWarningTitle": "Du må stoppe skjermdelingen før du kan dele lyd", + "shareMediaWarningGenericH2": "Hvis du vil dele både skjermen og lyden", + "shareScreenWarningD1": "Du må stoppe lyddelingen før du deler skjermen din.", + "shareScreenWarningD2": "Du må stoppe lyddelingen, starte skjermdelingen på nytt og velge \"del lyd\"-alternativet.", + "shareScreenWarningH1": "Hvis du bare vil dele skjermen din:", + "shareScreenWarningTitle": "Du må stoppe lyddelingen før du kan dele skjermen", + "shareVideoConfirmPlay": "Du er i ferd med å åpne et eksternt nettsted. Vil du fortsette?", + "shareVideoConfirmPlayTitle": "{{name}} har delt en video med deg.", + "shareVideoLinkError": "Oops, denne videoen kan ikke spilles av.", + "shareVideoLinkStopped": "Videoen fra {{name}} ble stoppet.", + "shareVideoTitle": "Del video", + "shareYourScreen": "Del skjermen din", + "shareYourScreenDisabled": "Skjermdeling deaktivert.", + "sharedVideoDialogError": "Feil: Ugyldig eller forbudt URL", + "sharedVideoLinkPlaceholder": "YouTube-lenke eller direkte videolenke", + "show": "Vis", + "start": "Start ", + "startLiveStreaming": "Start direktesending", + "startRecording": "Start opptak", + "startRemoteControlErrorMessage": "En feil oppstod ved forsøk på å starte fjernkontrolløkten!", + "stopLiveStreaming": "Stopp direktesending", + "stopRecording": "Stopp opptak", + "stopRecordingWarning": "Er du sikker på at du vil stoppe opptaket?", + "stopStreamingWarning": "Er du sikker på at du vil stoppe direktesendingen?", + "streamKey": "Nøkkel for direktesending", + "thankYou": "Takk for at du bruker {{appName}}!", + "token": "token", + "tokenAuthFailed": "Beklager, du har ikke tillatelse til å bli med i denne samtalen.", + "tokenAuthFailedReason": { + "audInvalid": "Ugyldig `aud`-verdi. Den skal være `jitsi`.", + "contextNotFound": "`context`-objektet mangler i nyttelasten.", + "expInvalid": "Ugyldig `exp`-verdi.", + "featureInvalid": "Ugyldig funksjon: {{feature}}, sannsynligvis ikke implementert ennå.", + "featureValueInvalid": "Ugyldig verdi for funksjon: {{feature}}.", + "featuresNotFound": "`features`-objektet mangler i nyttelasten.", + "headerNotFound": "Mangler header.", + "issInvalid": "Ugyldig `iss`-verdi. Den skal være `chat`.", + "kidMismatch": "Nøkkel-ID (kid) samsvarer ikke med sub.", + "kidNotFound": "Mangler nøkkel-ID (kid).", + "nbfFuture": "`nbf`-verdien er i fremtiden.", + "nbfInvalid": "Ugyldig `nbf`-verdi.", + "payloadNotFound": "Mangler nyttelasten.", + "tokenExpired": "Tokenet er utløpt." + }, + "tokenAuthFailedTitle": "Autentisering mislyktes", + "tokenAuthFailedWithReasons": "Beklager, du har ikke tillatelse til å bli med i denne samtalen. Mulige årsaker: {{reason}}", + "tokenAuthUnsupported": "Token-URL støttes ikke.", + "transcribing": "Transkriberer", + "unlockRoom": "Fjern møte $t(lockRoomPassword)", + "user": "Bruker", + "userIdentifier": "Brukeridentifikator", + "userPassword": "Brukerpassord", + "verifyParticipantConfirm": "De samsvarer", + "verifyParticipantDismiss": "De samsvarer ikke", + "verifyParticipantQuestion": "EKSPERIMENTELL: Spør deltaker {{participantName}} om de ser det samme innholdet, i samme rekkefølge.", + "verifyParticipantTitle": "Brukerverifisering", + "videoLink": "Videolenke", + "viewUpgradeOptions": "Se oppgraderingsalternativer", + "viewUpgradeOptionsContent": "For å få ubegrenset tilgang til premiumfunksjoner som opptak, transkripsjoner, RTMP-streaming og mer, må du oppgradere planen din.", + "viewUpgradeOptionsTitle": "Du har oppdaget en premiumfunksjon!", + "whiteboardLimitContent": "Beklager, grensen for samtidige brukere av whiteboard er nådd.", + "whiteboardLimitReference": "For mer informasjon, besøk", + "whiteboardLimitReferenceUrl": "vår nettside", + "whiteboardLimitTitle": "Begrenset tilgang til whiteboard", + "yourEntireScreen": "Hele skjermen din" + }, + "documentSharing": { + "title": "Delt dokument" + }, + "e2ee": { + "labelToolTip": "Lyd- og videokommunikasjon i denne samtalen er ende-til-ende-kryptert" + }, + "embedMeeting": { + "title": "Bygg inn dette møtet" + }, + "feedback": { + "accessibilityLabel": { + "yourChoice": "Ditt valg: {{rating}}" + }, + "average": "Gjennomsnittlig", + "bad": "Dårlig", + "detailsLabel": "Fortell oss mer om det.", + "good": "Bra", + "rateExperience": "Vurder møteopplevelsen din", + "star": "Stjerne", + "veryBad": "Veldig dårlig", + "veryGood": "Veldig bra" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Videominiatyrer" + } + }, + "giphy": { + "noResults": "Ingen resultater funnet :(", + "search": "Søk i GIPHY" + }, + "incomingCall": { + "answer": "Svar", + "audioCallTitle": "Innkommende anrop", + "decline": "Avvis", + "productLabel": "fra Jitsi Meet", + "videoCallTitle": "Innkommende videoanrop" + }, + "info": { + "accessibilityLabel": "Vis info", + "addPassword": "Legg til $t(lockRoomPassword)", + "cancelPassword": "Avbryt $t(lockRoomPassword)", + "conferenceURL": "Lenke:", + "copyNumber": "Kopier nummer", + "country": "Land", + "dialANumber": "For å bli med i møtet, ring et av disse numrene og tast deretter inn PIN-koden.", + "dialInConferenceID": "PIN-kode:", + "dialInNotSupported": "Beklager, innringing støttes for øyeblikket ikke.", + "dialInNumber": "Innringingsnummer:", + "dialInSummaryError": "Feil ved henting av innringingsinformasjon. Vennligst prøv igjen senere.", + "dialInTollFree": "Gratisnummer", + "genericError": "Oops, noe gikk galt.", + "inviteLiveStream": "For å se direktesendingen av dette møtet, klikk denne lenken: {{url}}", + "invitePhone": "For å bli med via telefon, trykk her: {{number}},,{{conferenceID}}#\n", + "invitePhoneAlternatives": "Leter du etter et annet innringingsnummer?\nSe listen over innringingsnumre: {{url}}\n\n\nHvis du også ringer inn via en romtelefon, bli med uten å koble til lyd: {{silentUrl}}", + "inviteSipEndpoint": "For å bli med via SIP-adresse, tast inn denne: {{sipUri}}", + "inviteTextiOSInviteUrl": "Klikk på følgende lenke for å bli med: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "Hvis du ringer inn via en romtelefon, bruk denne lenken for å bli med uten å koble til lyd: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}} inviterer deg til et møte.", + "inviteTextiOSPhone": "For å bli med via telefon, bruk dette nummeret: {{number}},,{{conferenceID}}#. Hvis du trenger et annet nummer, finner du hele listen her: {{didUrl}}.", + "inviteURLFirstPartGeneral": "Du er invitert til å bli med i et møte.", + "inviteURLFirstPartPersonal": "{{name}} inviterer deg til et møte.\n", + "inviteURLSecondPart": "\nBli med i møtet:\n{{url}}\n", + "label": "Innringingsinformasjon", + "liveStreamURL": "Direktesendingslenke:", + "moreNumbers": "Flere numre", + "noNumbers": "Ingen innringingsnumre.", + "noPassword": "Ingen", + "noRoom": "Ingen rom ble spesifisert for innringing.", + "noWhiteboard": "Kunne ikke laste inn whiteboard.", + "numbers": "Innringingsnumre", + "password": "$t(lockRoomPasswordUppercase): ", + "reachedLimit": "Du har nådd grensen for planen din.", + "sip": "SIP-adresse", + "sipAudioOnly": "SIP-lydadresse", + "title": "Del", + "tooltip": "Del lenke og innringingsinformasjon for dette møtet", + "upgradeOptions": "Vennligst sjekk oppgraderingsalternativene på", + "whiteboardError": "Feil ved lasting av whiteboard. Vennligst prøv igjen senere." + }, + "inlineDialogFailure": { + "msg": "Vi støtte på et problem.", + "retry": "Prøv igjen", + "support": "Brukerstøtte", + "supportMsg": "Hvis dette fortsetter å skje, ta kontakt med" + }, + "inviteDialog": { + "alertText": "Kunne ikke invitere noen deltakere.", + "header": "Inviter", + "searchCallOnlyPlaceholder": "Skriv inn telefonnummer", + "searchPeopleOnlyPlaceholder": "Søk etter deltakere", + "searchPlaceholder": "Deltaker eller telefonnummer", + "send": "Send" + }, + "jitsiHome": "{{logo}} Logo, lenker til Hjemmeside", + "keyboardShortcuts": { + "focusLocal": "Fokuser på din video", + "focusRemote": "Fokuser på en annen persons video", + "fullScreen": "Vis eller avslutt fullskjerm", + "giphyMenu": "Vis eller skjul GIPHY-menyen", + "keyboardShortcuts": "Hurtigtaster", + "localRecording": "Vis eller skjul kontroller for lokal opptak", + "mute": "Demp eller slå på mikrofonen din", + "pushToTalk": "Trykk for å snakke", + "raiseHand": "Rekk opp eller ta ned hånden", + "showSpeakerStats": "Vis deltakerstatistikk", + "toggleChat": "Åpne eller lukk chatten", + "toggleFilmstrip": "Vis eller skjul videominiatyrer", + "toggleParticipantsPane": "Vis eller skjul deltakerlisten", + "toggleScreensharing": "Bytt mellom kamera og skjermdeling", + "toggleShortcuts": "Vis eller skjul hurtigtaster", + "videoMute": "Start eller stopp kameraet ditt" + }, + "largeVideo": { + "screenIsShared": "Du deler skjermen din", + "showMeWhatImSharing": "Vis meg hva jeg deler" + }, + "liveStreaming": { + "busy": "Vi jobber med å frigjøre strømmeressurser. Vennligst prøv igjen om noen minutter.", + "busyTitle": "Alle strømmere er for øyeblikket opptatt", + "changeSignIn": "Bytt konto.", + "choose": "Velg en direktesending", + "chooseCTA": "Velg et strømmealternativ. Du er for øyeblikket logget inn som {{email}}.", + "enterStreamKey": "Skriv inn YouTube-strømmenøkkelen din her.", + "error": "Direktesending mislyktes. Vennligst prøv igjen.", + "errorAPI": "En feil oppstod ved tilgang til YouTube-sendingene dine. Prøv å logge inn igjen.", + "errorLiveStreamNotEnabled": "Direktesending er ikke aktivert på {{email}}. Aktiver direktesending eller logg inn på en konto med direktesending aktivert.", + "expandedOff": "Direktesendingen har stoppet", + "expandedOn": "Møtet kringkastes for øyeblikket direkte", + "expandedPending": "Direktesendingen starter…", + "failedToStart": "Kunne ikke starte direktesending", + "getStreamKeyManually": "Vi kunne ikke hente noen direktesendinger. Prøv å hente strømmenøkkelen din fra YouTube.", + "googlePrivacyPolicy": "Googles personvernpolicy", + "inProgress": "Opptak eller direktesending pågår", + "invalidStreamKey": "Strømmenøkkelen kan være feil.", + "limitNotificationDescriptionNative": "Direktesendingen din vil være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.", + "limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil direktesendingen din være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.", + "off": "Direktesending stoppet", + "offBy": "{{name}} stoppet direktesendingen", + "on": "Direktesending startet", + "onBy": "{{name}} startet direktesendingen", + "pending": "Starter direktesending…", + "policyError": "Du prøvde å starte en direktesending for raskt. Vennligst prøv igjen senere!", + "serviceName": "Direktesendingstjeneste", + "sessionAlreadyActive": "Denne økten blir allerede tatt opp eller direktesendt.", + "signIn": "Logg inn med Google", + "signInCTA": "Logg inn eller skriv inn YouTube-strømmenøkkelen din.", + "signOut": "Logg ut", + "signedInAs": "Du er for øyeblikket logget inn som:", + "start": "Start en direktesending", + "streamIdHelp": "Hva er dette?", + "title": "Direktesending", + "unavailableTitle": "Direktesending utilgjengelig", + "youtubeTerms": "YouTubes vilkår for bruk" + }, + "lobby": { + "backToKnockModeButton": "Be om å bli med", + "chat": "Chat", + "dialogTitle": "Lobby-modus", + "disableDialogContent": "Lobby-modus er for øyeblikket aktivert. Denne funksjonen sikrer at uønskede deltakere ikke kan bli med i møtet. Vil du deaktivere den?", + "disableDialogSubmit": "Deaktiver", + "emailField": "Skriv inn e-postadressen din", + "enableDialogPasswordField": "Sett passord (valgfritt)", + "enableDialogSubmit": "Aktiver", + "enableDialogText": "Lobby-modus lar deg beskytte møtet ved kun å tillate personer å bli med etter godkjenning fra en moderator.", + "enterPasswordButton": "Skriv inn møtepassord", + "enterPasswordTitle": "Skriv inn passord for å bli med i møtet", + "errorMissingPassword": "Vennligst skriv inn møtepassordet", + "invalidPassword": "Ugyldig passord", + "joinRejectedMessage": "Forespørselen din om å bli med ble avvist av en moderator.", + "joinRejectedTitle": "Forespørsel om å bli med avvist.", + "joinTitle": "Bli med i møtet", + "joinWithPasswordMessage": "Prøver å bli med med passord, vennligst vent…", + "joiningMessage": "Du blir med i møtet så snart noen godkjenner forespørselen din", + "joiningTitle": "Ber om å bli med i møtet…", + "joiningWithPasswordTitle": "Bli med med passord…", + "knockButton": "Be om å bli med", + "knockTitle": "Noen ønsker å bli med i møtet", + "knockingParticipantList": "Liste over deltakere som venter", + "lobbyChatStartedNotification": "{{moderator}} startet en lobby-chat med {{attendee}}", + "lobbyChatStartedTitle": "{{moderator}} har startet en lobby-chat med deg.", + "lobbyClosed": "Lobby-rommet har blitt stengt.", + "nameField": "Skriv inn navnet ditt", + "notificationLobbyAccessDenied": "{{targetParticipantName}} har blitt avvist av {{originParticipantName}}", + "notificationLobbyAccessGranted": "{{targetParticipantName}} har fått tilgang av {{originParticipantName}}", + "notificationLobbyDisabled": "Lobby har blitt deaktivert av {{originParticipantName}}", + "notificationLobbyEnabled": "Lobby har blitt aktivert av {{originParticipantName}}", + "notificationTitle": "Lobby", + "passwordJoinButton": "Bli med", + "title": "Lobby", + "toggleLabel": "Aktiver lobby" + }, + "localRecording": { + "clientState": { + "off": "Av", + "on": "På", + "unknown": "Ukjent" + }, + "dialogTitle": "Kontroller for lokal opptak", + "duration": "Varighet", + "durationNA": "Ikke tilgjengelig", + "encoding": "Koding", + "label": "LOR", + "labelToolTip": "Lokalt opptak er aktivert", + "localRecording": "Lokalt opptak", + "me": "Meg", + "messages": { + "engaged": "Lokalt opptak er aktivert.", + "finished": "Opptaksøkt {{token}} er fullført. Vennligst send den innspilte filen til moderator.", + "finishedModerator": "Opptaksøkt {{token}} er fullført. Opptaket av det lokale sporet er lagret. Vennligst be de andre deltakerne om å sende inn sine opptak.", + "notModerator": "Du er ikke moderator. Du kan ikke starte eller stoppe lokalt opptak." + }, + "moderator": "Moderator", + "no": "Nei", + "participant": "Deltaker", + "participantStats": "Deltakerstatistikk", + "selectTabTitle": "🎥 Velg denne fanen for opptak", + "sessionToken": "Økt-token", + "start": "Start opptak", + "stop": "Stopp opptak", + "stopping": "Stopper opptak", + "wait": "Vennligst vent mens vi lagrer opptaket ditt", + "yes": "Ja" + }, + "lockRoomPassword": "passord", + "lockRoomPasswordUppercase": "Passord", + "lonelyMeetingExperience": { + "button": "Inviter andre", + "youAreAlone": "Du er den eneste i møtet" + }, + "me": "meg", + "notify": { + "OldElectronAPPTitle": "Sikkerhetssårbarhet!", + "allowAction": "Tillat", + "allowedUnmute": "Du kan slå på mikrofonen, starte kameraet eller dele skjermen din.", + "audioUnmuteBlockedDescription": "Slå på mikrofonen er midlertidig blokkert på grunn av systembegrensninger.", + "audioUnmuteBlockedTitle": "Mikrofonaktivering blokkert!", + "chatMessages": "Chatmeldinger", + "connectedOneMember": "{{name}} ble med i møtet", + "connectedThreePlusMembers": "{{name}} og mange andre ble med i møtet", + "connectedTwoMembers": "{{first}} og {{second}} ble med i møtet", + "connectionFailed": "Tilkobling mislyktes. Vennligst prøv igjen senere!", + "dataChannelClosed": "Videokvaliteten kan være svekket", + "dataChannelClosedDescription": "Brokkanalen er nede, og dermed kan videokvaliteten være begrenset til laveste innstilling.", + "dataChannelClosedDescriptionWithAudio": "Brokkanalen er nede, og dermed kan det oppstå forstyrrelser i lyd og video.", + "dataChannelClosedWithAudio": "Lyd- og videokvaliteten kan være svekket", + "disabledIframe": "Innebygging er kun ment for demonstrasjonsformål, så denne samtalen vil kobles fra om {{timeout}} minutter.", + "disabledIframeSecondary": "Innebygging av {{domain}} er kun ment for demonstrasjonsformål, så denne samtalen vil kobles fra om {{timeout}} minutter. Vennligst bruk Jitsi as a Service for innebygging i produksjon!", + "disconnected": "frakoblet", + "displayNotifications": "Vis varsler for", + "dontRemindMe": "Ikke minn meg på dette", + "focus": "Konferansefokus", + "focusFail": "{{component}} ikke tilgjengelig - prøver igjen om {{ms}} sek", + "gifsMenu": "GIPHY", + "groupTitle": "Varsler", + "hostAskedUnmute": "Moderator ønsker at du skal snakke", + "invalidTenant": "Ugyldig leietaker", + "invalidTenantHyphenDescription": "Leietakeren du bruker er ugyldig (starter eller slutter med '-').", + "invalidTenantLengthDescription": "Leietakeren du bruker er for lang.", + "invitedOneMember": "{{name}} har blitt invitert", + "invitedThreePlusMembers": "{{name}} og {{count}} andre har blitt invitert", + "invitedTwoMembers": "{{first}} og {{second}} har blitt invitert", + "joinMeeting": "Bli med", + "kickParticipant": "{{kicked}} ble kastet ut av {{kicker}}", + "leftOneMember": "{{name}} forlot møtet", + "leftThreePlusMembers": "{{name}} og mange andre forlot møtet", + "leftTwoMembers": "{{first}} og {{second}} forlot møtet", + "linkToSalesforce": "Koble til Salesforce", + "linkToSalesforceDescription": "Du kan knytte møtereferatet til et Salesforce-objekt.", + "linkToSalesforceError": "Kunne ikke koble møtet til Salesforce", + "linkToSalesforceKey": "Koble dette møtet", + "linkToSalesforceProgress": "Kobler møtet til Salesforce…", + "linkToSalesforceSuccess": "Møtet ble koblet til Salesforce", + "localRecordingStarted": "{{name}} har startet et lokalt opptak.", + "localRecordingStopped": "{{name}} har stoppet et lokalt opptak.", + "me": "Meg", + "moderationInEffectCSDescription": "Vennligst rekke opp hånden hvis du vil dele skjermen din.", + "moderationInEffectCSTitle": "Skjermdeling er blokkert av moderator", + "moderationInEffectDescription": "Vennligst rekke opp hånden hvis du vil snakke.", + "moderationInEffectTitle": "Mikrofonen din er dempet av moderator", + "moderationInEffectVideoDescription": "Vennligst rekke opp hånden hvis du vil starte kameraet ditt.", + "moderationInEffectVideoTitle": "Kameraet ditt er blokkert av moderator", + "moderationRequestFromModerator": "Verten ønsker at du slår på lyden", + "moderationRequestFromParticipant": "Ønsker å snakke", + "moderationStartedTitle": "Moderasjon startet", + "moderationStoppedTitle": "Moderasjon stoppet", + "moderationToggleDescription": "av {{participantDisplayName}}", + "moderator": "Du er nå moderator", + "muted": "Du har startet samtalen dempet.", + "mutedRemotelyDescription": "Du kan alltid slå på lyden når du er klar til å snakke. Demp igjen når du er ferdig for å redusere støy i møtet.", + "mutedRemotelyTitle": "Du har blitt dempet av {{participantDisplayName}}", + "mutedTitle": "Du er dempet!", + "newDeviceAction": "Bruk", + "newDeviceAudioTitle": "Ny lydenhet oppdaget", + "newDeviceCameraTitle": "Nytt kamera oppdaget", + "nextToSpeak": "Du er nestemann til å snakke", + "noiseSuppressionDesktopAudioDescription": "Ekstra støydemping kan ikke aktiveres mens du deler skrivebordets lyd. Deaktiver det og prøv igjen.", + "noiseSuppressionFailedTitle": "Kunne ikke starte ekstra støydemping", + "noiseSuppressionStereoDescription": "Ekstra støydemping støttes foreløpig ikke med stereolyd.", + "oldElectronClientDescription1": "Det ser ut til at du bruker en gammel versjon av Jitsi Meet-klienten som har kjente sikkerhetsproblemer. Vennligst oppdater til vår ", + "oldElectronClientDescription2": "nyeste versjon", + "oldElectronClientDescription3": " nå!", + "participantWantsToJoin": "Ønsker å bli med i møtet", + "participantsWantToJoin": "Ønsker å bli med i møtet", + "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) fjernet av en annen deltaker", + "passwordSetRemotely": "$t(lockRoomPasswordUppercase) satt av en annen deltaker", + "raiseHandAction": "Rekk opp hånden", + "raisedHand": "Ønsker å snakke.", + "raisedHands": "{{participantName}} og {{raisedHands}} flere personer", + "reactionSounds": "Deaktiver lyder", + "reactionSoundsForAll": "Deaktiver lyder for alle", + "screenShareNoAudio": "Del lyd-boksen ble ikke valgt i vindusvalget.", + "screenShareNoAudioTitle": "Kunne ikke dele systemlyd!", + "screenSharingAudioOnlyDescription": "Vær oppmerksom på at ved å dele skjermen påvirker du \"Beste ytelse\"-modusen, og du vil bruke mer båndbredde.", + "screenSharingAudioOnlyTitle": "\"Beste ytelse\"-modus", + "selfViewTitle": "Du kan alltid vise selvvisningen igjen fra innstillingene", + "somebody": "Noen", + "startSilentDescription": "Bli med i møtet på nytt for å aktivere lyd", + "startSilentTitle": "Du ble med uten lydutgang!", + "suboptimalBrowserWarning": "Vi er redd møteopplevelsen din ikke blir optimal her. Vi jobber med forbedringer, men inntil videre kan du prøve en av de fullt støttede nettleserne.", + "suboptimalExperienceTitle": "Nettleseradvarsel", + "suggestRecordingAction": "Start", + "suggestRecordingDescription": "Vil du starte et opptak?", + "suggestRecordingTitle": "Ta opp dette møtet", + "unmute": "Slå på lyden", + "videoMutedRemotelyDescription": "Du kan alltid slå det på igjen.", + "videoMutedRemotelyTitle": "Videoen din har blitt slått av av {{participantDisplayName}}", + "videoUnmuteBlockedDescription": "Aktivering av kamera og skjermdeling har blitt midlertidig blokkert på grunn av systembegrensninger.", + "videoUnmuteBlockedTitle": "Aktivering av kamera og skjermdeling blokkert!", + "viewLobby": "Vis lobby", + "viewParticipants": "Vis deltakere", + "viewVisitors": "Vis seere", + "waitingParticipants": "{{waitingParticipants}} personer", + "waitingVisitors": "Seere som venter i kø: {{waitingVisitors}}", + "waitingVisitorsTitle": "Møtet er ikke live ennå!", + "whiteboardLimitDescription": "Vennligst lagre fremgangen din, siden brukergrensen snart blir nådd og whiteboardet vil lukkes.", + "whiteboardLimitTitle": "Bruk av whiteboard" + }, + "participantsPane": { + "actions": { + "admit": "Godkjenn", + "admitAll": "Godkjenn alle", + "allow": "Tillat deltakere å:", + "allowVideo": "Tillat video", + "askUnmute": "Be om å slå på lyden", + "audioModeration": "Slå på lyden selv", + "blockEveryoneMicCamera": "Blokker alles mikrofon og kamera", + "breakoutRooms": "Grupperom", + "goLive": "Gå live", + "invite": "Inviter noen", + "lowerAllHands": "Senk alle hender", + "lowerHand": "Senk hånden", + "moreModerationActions": "Flere moderasjonsalternativer", + "moreModerationControls": "Flere moderasjonskontroller", + "moreParticipantOptions": "Flere deltakeralternativer", + "mute": "Demp", + "muteAll": "Demp alle", + "muteEveryoneElse": "Demp alle andre", + "reject": "Avvis", + "stopEveryonesVideo": "Stopp alles video", + "stopVideo": "Stopp video", + "unblockEveryoneMicCamera": "Fjern blokkering av alles mikrofon og kamera", + "videoModeration": "Starte videoen sin" + }, + "close": "Lukk", + "headings": { + "lobby": "Lobby ({{count}})", + "participantsList": "Møtedeltakere ({{count}})", + "visitorInQueue": " (venter {{count}})", + "visitorRequests": " (forespørsler {{count}})", + "visitors": "Seere {{count}}", + "waitingLobby": "Venter i lobbyen ({{count}})" + }, + "search": "Søk etter deltakere", + "title": "Deltakere" + }, + "passwordDigitsOnly": "Opptil {{number}} sifre", + "passwordSetRemotely": "Satt av en annen deltaker", + "pinParticipant": "{{participantName}} - Fest", + "pinnedParticipant": "Deltakeren er festet", + "polls": { + "answer": { + "edit": "Rediger", + "send": "Send", + "skip": "Hopp over", + "submit": "Send inn" + }, + "by": "Av {{ name }}", + "closeButton": "Lukk avstemning", + "create": { + "addOption": "Legg til alternativ", + "answerPlaceholder": "Alternativ {{index}}", + "cancel": "Avbryt", + "create": "Opprett en avstemning", + "pollOption": "Avstemningsalternativ {{index}}", + "pollQuestion": "Avstemningsspørsmål", + "questionPlaceholder": "Still et spørsmål", + "removeOption": "Fjern alternativ", + "save": "Lagre", + "send": "Send" + }, + "errors": { + "notUniqueOption": "Alternativene må være unike" + }, + "notification": { + "description": "Åpne avstemningsfanen for å stemme", + "title": "En ny avstemning ble lagt til i dette møtet" + }, + "results": { + "changeVote": "Endre stemme", + "empty": "Det er ingen avstemninger i møtet ennå. Start en avstemning her!", + "hideDetailedResults": "Skjul detaljer", + "showDetailedResults": "Vis detaljer", + "vote": "Stem" + } + }, + "poweredby": "drevet av", + "prejoin": { + "audioAndVideoError": "Lyd- og videofeil:", + "audioDeviceProblem": "Det er et problem med lydenheten din", + "audioOnlyError": "Lydfeil:", + "audioTrackError": "Kunne ikke opprette lydspor.", + "callMe": "Ring meg", + "callMeAtNumber": "Ring meg på dette nummeret:", + "calling": "Ringer", + "configuringDevices": "Konfigurerer enheter…", + "connectedWithAudioQ": "Er du tilkoblet med lyd?", + "connection": { + "failed": "Tilkoblingstesten mislyktes!", + "good": "Internettforbindelsen din ser bra ut!", + "nonOptimal": "Internettforbindelsen din er ikke optimal", + "poor": "Du har en dårlig internettforbindelse", + "running": "Kjører tilkoblingstest…" + }, + "connectionDetails": { + "audioClipping": "Vi forventer at lyden din vil bli avkuttet.", + "audioHighQuality": "Vi forventer at lyden din vil ha utmerket kvalitet.", + "audioLowNoVideo": "Vi forventer at lydkvaliteten din vil være lav, og at det ikke vil være video.", + "goodQuality": "Fantastisk! Mediekvaliteten din kommer til å være utmerket.", + "noMediaConnectivity": "Vi kunne ikke finne en måte å opprette medietilkobling for denne testen. Dette skyldes vanligvis en brannmur eller NAT.", + "noVideo": "Vi forventer at videokvaliteten din vil være svært dårlig.", + "testFailed": "Tilkoblingstesten støtte på uventede problemer, men dette vil kanskje ikke påvirke opplevelsen din.", + "undetectable": "Hvis du fortsatt ikke kan foreta anrop i nettleseren, anbefaler vi at du sjekker at høyttalere, mikrofon og kamera er riktig konfigurert, at du har gitt nettleseren tillatelse til å bruke mikrofon og kamera, og at nettleseren din er oppdatert. Hvis du fortsatt har problemer, bør du kontakte utvikleren av nettapplikasjonen.", + "veryPoorConnection": "Vi forventer at samtalekvaliteten din vil være svært dårlig.", + "videoFreezing": "Vi forventer at videoen din vil fryse, bli svart eller ha pikselerte forstyrrelser.", + "videoHighQuality": "Vi forventer at videoen din vil ha god kvalitet.", + "videoLowQuality": "Vi forventer at videoen din vil ha lav kvalitet når det gjelder bildefrekvens og oppløsning.", + "videoTearing": "Vi forventer at videoen din vil være pikselert eller ha visuelle artefakter." + }, + "copyAndShare": "Kopier og del møtelenken", + "dialInMeeting": "Ring inn til møtet", + "dialInPin": "Ring inn til møtet og tast inn PIN-kode:", + "dialing": "Ringer", + "doNotShow": "Ikke vis denne skjermen igjen", + "errorDialOut": "Kunne ikke ringe ut", + "errorDialOutDisconnected": "Kunne ikke ringe ut. Frakoblet", + "errorDialOutFailed": "Kunne ikke ringe ut. Anrop mislyktes", + "errorDialOutStatus": "Feil ved henting av status for utgående anrop", + "errorMissingName": "Vennligst skriv inn navnet ditt for å bli med i møtet", + "errorNoPermissions": "Du må gi tilgang til mikrofon og kamera", + "errorStatusCode": "Feil ved utgående anrop, statuskode: {{status}}", + "errorValidation": "Nummerverifisering mislyktes", + "iWantToDialIn": "Jeg vil ringe inn", + "initiated": "Anrop initiert", + "joinAudioByPhone": "Bli med via telefonlyd", + "joinMeeting": "Bli med i møtet", + "joinMeetingInLowBandwidthMode": "Bli med i modus for lav båndbredde", + "joinWithoutAudio": "Bli med uten lyd", + "keyboardShortcuts": "Aktiver hurtigtaster", + "linkCopied": "Lenke kopiert til utklippstavlen", + "lookGood": "Enhetene dine fungerer som de skal", + "or": "eller", + "premeeting": "Før møtet", + "proceedAnyway": "Fortsett likevel", + "recordingWarning": "Andre deltakere kan ta opp denne samtalen", + "screenSharingError": "Feil ved skjermdeling:", + "startWithPhone": "Start med telefonlyd", + "unsafeRoomConsent": "Jeg forstår risikoen, jeg vil bli med i møtet", + "videoOnlyError": "Video feil:", + "videoTrackError": "Kunne ikke opprette videospor.", + "viewAllNumbers": "se alle numre" + }, + "presenceStatus": { + "busy": "Opptatt", + "calling": "Ringer…", + "connected": "Tilkoblet", + "connecting": "Kobler til…", + "connecting2": "Kobler til*…", + "disconnected": "Frakoblet", + "expired": "Utløpt", + "ignored": "Ignorert", + "initializingCall": "Initialiserer anrop…", + "invited": "Invitert", + "rejected": "Avvist", + "ringing": "Ringer…" + }, + "profile": { + "avatar": "avatar", + "setDisplayNameLabel": "Navn", + "setEmailInput": "Skriv inn e-post", + "setEmailLabel": "Gravatar e-post", + "title": "Profil" + }, + "raisedHand": "Ønsker å snakke", + "raisedHandsLabel": "Antall hevede hender", + "record": { + "already": { + "linked": "Møtet er allerede koblet til dette Salesforce-objektet." + }, + "type": { + "account": "Konto", + "contact": "Kontakt", + "lead": "Lead", + "opportunity": "Mulighet", + "owner": "Eier" + } + }, + "recording": { + "authDropboxText": "Last opp til Dropbox", + "availableSpace": "Tilgjengelig plass: {{spaceLeft}} MB (omtrent {{duration}} minutter med opptak)", + "beta": "BETA", + "busy": "Vi jobber med å frigjøre opptaksressurser. Vennligst prøv igjen om noen minutter.", + "busyTitle": "Alle opptakere er for øyeblikket opptatt", + "copyLink": "Kopier lenke", + "error": "Opptak mislyktes. Vennligst prøv igjen.", + "errorFetchingLink": "Feil ved henting av opptaksl link.", + "expandedOff": "Opptaket har stoppet", + "expandedOn": "Møtet blir for øyeblikket tatt opp", + "expandedPending": "Opptak starter…", + "failedToStart": "Kunne ikke starte opptak", + "fileSharingdescription": "Del opptakslenken med møtedeltakerne", + "highlight": "Høydepunkt", + "highlightMoment": "Marker øyeblikk", + "highlightMomentDisabled": "Du kan markere øyeblikk når opptaket starter", + "highlightMomentSuccess": "Øyeblikk markert", + "highlightMomentSucessDescription": "Det markerte øyeblikket vil bli lagt til møtereferatet.", + "inProgress": "Opptak eller direktesending pågår", + "limitNotificationDescriptionNative": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <3>{{app}}.", + "limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv {{app}}.", + "linkGenerated": "Vi har generert en lenke til opptaket ditt.", + "localRecordingNoNotificationWarning": "Opptaket vil ikke bli annonsert til de andre deltakerne. Du må informere dem om at møtet blir tatt opp.", + "localRecordingNoVideo": "Video blir ikke tatt opp", + "localRecordingStartWarning": "Sørg for å stoppe opptaket før du forlater møtet for å lagre det.", + "localRecordingStartWarningTitle": "Stopp opptaket for å lagre det", + "localRecordingVideoStop": "Hvis du stopper videoen, vil også det lokale opptaket stoppe. Er du sikker på at du vil fortsette?", + "localRecordingVideoWarning": "For å ta opp videoen din, må du ha den på når opptaket starter", + "localRecordingWarning": "Pass på å velge den gjeldende fanen for å bruke riktig video og lyd.", + "loggedIn": "Logget inn som {{userName}}", + "noMicPermission": "Kunne ikke opprette mikrofonspor. Vennligst gi tillatelse til å bruke mikrofonen.", + "noStreams": "Ingen lyd- eller videostrøm oppdaget.", + "off": "Opptak stoppet", + "offBy": "{{name}} stoppet opptaket", + "on": "Opptak startet", + "onBy": "{{name}} startet opptaket", + "onlyRecordSelf": "Ta kun opp min egen lyd- og videostrøm", + "pending": "Forbereder opptak av møtet…", + "policyError": "Du prøvde å starte et opptak for raskt. Vennligst prøv igjen senere!", + "recordAudioAndVideo": "Ta opp lyd og video", + "recordTranscription": "Ta opp transkripsjon", + "saveLocalRecording": "Lagre opptaksfilen lokalt (Beta)", + "serviceDescription": "Opptaket ditt vil bli lagret av opptakstjenesten", + "serviceDescriptionCloud": "Skylagringsopptak", + "serviceDescriptionCloudInfo": "Opptak av møter slettes automatisk 24 timer etter opptakstidspunktet.", + "serviceName": "Opptakstjeneste", + "sessionAlreadyActive": "Denne økten blir allerede tatt opp eller direktesendt.", + "showAdvancedOptions": "Avanserte alternativer", + "signIn": "Logg inn", + "signOut": "Logg ut", + "surfaceError": "Vennligst velg den gjeldende fanen.", + "title": "Opptak", + "unavailable": "Oops! {{serviceName}} er for øyeblikket utilgjengelig. Vi jobber med å løse problemet. Vennligst prøv igjen senere.", + "unavailableTitle": "Opptak utilgjengelig", + "uploadToCloud": "Last opp til skyen" + }, + "screenshareDisplayName": "{{name}}s skjerm", + "sectionList": { + "pullToRefresh": "Dra for å oppdatere" + }, + "security": { + "about": "Du kan legge til et $t(lockRoomPassword) for møtet ditt. Deltakere må oppgi $t(lockRoomPassword) før de får bli med i møtet.", + "aboutReadOnly": "Moderatorer kan legge til et $t(lockRoomPassword) for møtet. Deltakere må oppgi $t(lockRoomPassword) før de får bli med i møtet.", + "insecureRoomNameWarningNative": "Romnavnet er usikkert. Uønskede deltakere kan bli med i møtet ditt. {{recommendAction}} Lær mer om hvordan du sikrer møtet ditt.", + "insecureRoomNameWarningWeb": "Romnavnet er usikkert. Uønskede deltakere kan bli med i møtet ditt. {{recommendAction}} Lær mer om hvordan du sikrer møtet ditt her.", + "title": "Sikkerhetsalternativer", + "unsafeRoomActions": { + "meeting": "Vurder å sikre møtet ditt ved å bruke sikkerhetsknappen.", + "prejoin": "Vurder å bruke et mer unikt møtenavn.", + "welcome": "Vurder å bruke et mer unikt møtenavn, eller velg ett av forslagene." + } + }, + "settings": { + "audio": "Lyd", + "buttonLabel": "Innstillinger", + "calendar": { + "about": "{{appName}} kalenderintegrasjon brukes til å få sikker tilgang til kalenderen din slik at den kan lese kommende hendelser.", + "disconnect": "Koble fra", + "microsoftSignIn": "Logg inn med Microsoft", + "signedIn": "Har for øyeblikket tilgang til kalenderhendelser for {{email}}. Klikk på Koble fra-knappen nedenfor for å stoppe tilgangen til kalenderhendelser.", + "title": "Kalender" + }, + "desktopShareFramerate": "Bildefrekvens for skjermdeling", + "desktopShareHighFpsWarning": "En høyere bildefrekvens for skjermdeling kan påvirke båndbredden din. Du må starte skjermdelingen på nytt for at de nye innstillingene skal tre i kraft.", + "desktopShareWarning": "Du må starte skjermdelingen på nytt for at de nye innstillingene skal tre i kraft.", + "devices": "Enheter", + "followMe": "Alle følger meg", + "followMeRecorder": "Opptaker følger meg", + "framesPerSecond": "bilder per sekund", + "incomingMessage": "Innkommende melding", + "language": "Språk", + "loggedIn": "Logget inn som {{name}}", + "maxStageParticipants": "Maksimalt antall deltakere som kan festes til hovedscenen", + "microphones": "Mikrofoner", + "moderator": "Moderator", + "moderatorOptions": "Moderatoralternativer", + "more": "Generelt", + "name": "Navn", + "noDevice": "Ingen", + "notifications": "Varsler", + "participantJoined": "Deltaker ble med", + "participantKnocking": "Deltaker kom inn i lobbyen", + "participantLeft": "Deltaker forlot møtet", + "playSounds": "Spill av lyd ved", + "reactions": "Møtereaksjoner", + "sameAsSystem": "Samme som systemet ({{label}})", + "selectAudioOutput": "Lydutgang", + "selectCamera": "Kamera", + "selectMic": "Mikrofon", + "selfView": "Selvvisning", + "shortcuts": "Hurtigtaster", + "speakers": "Høyttalere", + "startAudioMuted": "Alle starter dempet", + "startReactionsMuted": "Demp reaksjonslyder for alle", + "startVideoMuted": "Alle starter skjult", + "talkWhileMuted": "Snakk mens du er dempet", + "title": "Innstillinger", + "video": "Video" + }, + "settingsView": { + "advanced": "Avansert", + "alertCancel": "Avbryt", + "alertOk": "OK", + "alertTitle": "Advarsel", + "alertURLText": "Den angitte server-URL-en er ugyldig", + "apply": "Bruk", + "buildInfoSection": "Bygginformasjon", + "conferenceSection": "Konferanse", + "disableCallIntegration": "Deaktiver integrasjon med native anrop", + "disableCrashReporting": "Deaktiver feilmeldingsrapportering", + "disableCrashReportingWarning": "Er du sikker på at du vil deaktivere feilmeldingsrapportering? Innstillingen vil bli brukt etter at du starter appen på nytt.", + "disableP2P": "Deaktiver Peer-To-Peer-modus", + "displayName": "Visningsnavn", + "displayNamePlaceholderText": "F.eks.: John Doe", + "email": "E-post", + "emailPlaceholderText": "email@eksempel.com", + "gavatarMessage": "Hvis e-posten din er knyttet til en Gravatar-konto, vil vi bruke den til å vise profilbildet ditt.", + "goTo": "Gå til", + "header": "Innstillinger", + "help": "Hjelp", + "links": "Lenker", + "privacy": "Personvern", + "profileSection": "Profil", + "sdkVersion": "SDK-versjon", + "serverURL": "Server-URL", + "showAdvanced": "Vis avanserte innstillinger", + "startCarModeInLowBandwidthMode": "Start bilmodus i modus for lav båndbredde", + "startWithAudioMuted": "Start med dempet lyd", + "startWithVideoMuted": "Start med deaktivert video", + "terms": "Vilkår", + "version": "App-versjon" + }, + "share": { + "dialInfoText": "\n\n=====\n\nVil du bare ringe inn via telefon?\n\n{{defaultDialInNumber}}Klikk denne lenken for å se innringingsnumrene for dette møtet\n{{dialInfoPageUrl}}", + "mainText": "Klikk på følgende lenke for å bli med i møtet:\n{{roomUrl}}" + }, + "speaker": "Taler", + "speakerStats": { + "angry": "Sint", + "disgusted": "Frastøtt", + "displayEmotions": "Vis følelser", + "fearful": "Redd", + "happy": "Glad", + "hours": "{{count}}t", + "labelTooltip": "Antall deltakere: {{count}}", + "minutes": "{{count}}m", + "name": "Navn", + "neutral": "Nøytral", + "sad": "Trist", + "search": "Søk", + "searchHint": "Søk etter deltakere", + "seconds": "{{count}}s", + "speakerStats": "Deltakerstatistikk", + "speakerTime": "Taletid", + "surprised": "Overrasket" + }, + "startupoverlay": { + "genericTitle": "Møtet må bruke mikrofonen og kameraet ditt.", + "policyText": " ", + "title": "{{app}} må bruke mikrofonen og kameraet ditt." + }, + "suspendedoverlay": { + "rejoinKeyTitle": "Bli med igjen", + "text": "Trykk på Bli med igjen-knappen for å koble til på nytt.", + "title": "Videosamtalen din ble avbrutt fordi denne datamaskinen gikk i dvale." + }, + "termsView": { + "title": "Vilkår" + }, + "toggleTopPanelLabel": "Veksle toppanel", + "toolbar": { + "Settings": "Innstillinger", + "accessibilityLabel": { + "Settings": "Åpne innstillinger", + "audioOnly": "Veksle kun lyd", + "audioRoute": "Velg lydenhet", + "boo": "Buu", + "breakoutRooms": "Grupperom", + "callQuality": "Administrer videokvalitet", + "carmode": "Bilmodus", + "cc": "Veksle undertekster", + "chat": "Åpne / Lukk chat", + "clap": "Applaus", + "closeChat": "Lukk chat", + "closeMoreActions": "Lukk menyen for flere handlinger", + "closeParticipantsPane": "Lukk deltakerpanelet", + "collapse": "Skjul", + "document": "Veksle delt dokument", + "documentClose": "Lukk delt dokument", + "documentOpen": "Åpne delt dokument", + "download": "Last ned våre apper", + "embedMeeting": "Bygg inn møte", + "endConference": "Avslutt møte for alle", + "enterFullScreen": "Vis i fullskjerm", + "enterTileView": "Aktiver rutenettvisning", + "exitFullScreen": "Avslutt fullskjerm", + "exitTileView": "Avslutt rutenettvisning", + "expand": "Utvid", + "feedback": "Legg igjen tilbakemelding", + "fullScreen": "Veksle fullskjerm", + "giphy": "Veksle GIPHY-meny", + "grantModerator": "Gi moderatorrettigheter", + "hangup": "Forlat møtet", + "heading": "Verktøylinje", + "help": "Hjelp", + "hideWhiteboard": "Skjul whiteboard", + "invite": "Inviter personer", + "kick": "Fjern deltaker", + "laugh": "Latter", + "leaveConference": "Forlat møtet", + "like": "Tommelen opp", + "linkToSalesforce": "Koble til Salesforce", + "lobbyButton": "Aktiver/deaktiver lobby-modus", + "localRecording": "Veksle kontroller for lokalt opptak", + "lockRoom": "Veksle møtepassord", + "love": "Hjerte", + "lowerHand": "Senk hånden", + "moreActions": "Flere handlinger", + "moreActionsMenu": "Meny for flere handlinger", + "moreOptions": "Vis flere alternativer", + "mute": "Demp mikrofon", + "muteEveryone": "Demp alle", + "muteEveryoneElse": "Demp alle andre", + "muteEveryoneElsesVideoStream": "Stopp video for alle andre", + "muteEveryonesVideoStream": "Stopp alles video", + "muteGUMPending": "Kobler til mikrofonen din", + "noiseSuppression": "Ekstra støydemping (BETA)", + "openChat": "Åpne chat", + "participants": "Åpne deltakerpanelet. {{participantsCount}} deltakere", + "pip": "Veksle bilde-i-bilde-modus", + "privateMessage": "Send privat melding", + "profile": "Rediger profilen din", + "raiseHand": "Rekk opp hånden", + "react": "Meldingsreaksjoner", + "reactions": "Reaksjoner", + "reactionsMenu": "Meny for reaksjoner", + "recording": "Veksle opptak", + "remoteMute": "Demp deltaker", + "remoteVideoMute": "Deaktiver deltakers kamera", + "security": "Sikkerhetsalternativer", + "selectBackground": "Velg bakgrunn", + "selfView": "Veksle selvvisning", + "shareRoom": "Inviter noen", + "shareYourScreen": "Start skjermdeling", + "shareaudio": "Del lyd", + "sharedvideo": "Del video", + "shortcuts": "Veksle snarveier", + "show": "Vis på scenen", + "showWhiteboard": "Vis whiteboard", + "silence": "Stillhet", + "speakerStats": "Veksle deltakerstatistikk", + "stopScreenSharing": "Stopp skjermdeling", + "stopSharedVideo": "Stopp video", + "surprised": "Overrasket", + "tileView": "Veksle rutenettvisning", + "toggleCamera": "Veksle kamera", + "toggleFilmstrip": "Veksle filmstripe", + "unmute": "Slå på mikrofon", + "videoblur": "Veksle uskarp bakgrunn", + "videomute": "Stopp kamera", + "videomuteGUMPending": "Kobler til kameraet ditt", + "videounmute": "Start kamera" + }, + "addPeople": "Legg til personer i samtalen din", + "audioOnlyOff": "Deaktiver modus for lav båndbredde", + "audioOnlyOn": "Aktiver modus for lav båndbredde", + "audioRoute": "Velg lydenhet", + "audioSettings": "Lydinnstillinger", + "authenticate": "Autentiser", + "boo": "Buu", + "callQuality": "Administrer videokvalitet", + "chat": "Åpne / Lukk chat", + "clap": "Applaus", + "closeChat": "Lukk chat", + "closeParticipantsPane": "Lukk deltakerpanelet", + "closeReactionsMenu": "Lukk reaksjonsmenyen", + "disableNoiseSuppression": "Deaktiver ekstra støydemping (BETA)", + "disableReactionSounds": "Du kan deaktivere reaksjonslyder for dette møtet", + "documentClose": "Lukk delt dokument", + "documentOpen": "Åpne delt dokument", + "download": "Last ned våre apper", + "e2ee": "Ende-til-ende-kryptering", + "embedMeeting": "Bygg inn møte", + "enableNoiseSuppression": "Aktiver ekstra støydemping (BETA)", + "endConference": "Avslutt møtet for alle", + "enterFullScreen": "Vis i fullskjerm", + "enterTileView": "Aktiver rutenettvisning", + "exitFullScreen": "Avslutt fullskjerm", + "exitTileView": "Avslutt rutenettvisning", + "feedback": "Legg igjen tilbakemelding", + "giphy": "Veksle GIPHY-meny", + "hangup": "Forlat møtet", + "help": "Hjelp", + "hideWhiteboard": "Skjul whiteboard", + "invite": "Inviter personer", + "joinBreakoutRoom": "Bli med i grupperom", + "laugh": "Latter", + "leaveBreakoutRoom": "Forlat grupperom", + "leaveConference": "Forlat møtet", + "like": "Tommelen opp", + "linkToSalesforce": "Koble til Salesforce", + "lobbyButtonDisable": "Deaktiver lobby-modus", + "lobbyButtonEnable": "Aktiver lobby-modus", + "login": "Logg inn", + "logout": "Logg ut", + "love": "Hjerte", + "lowerYourHand": "Senk hånden", + "moreActions": "Flere handlinger", + "moreOptions": "Flere alternativer", + "mute": "Demp mikrofon", + "muteEveryone": "Demp alle", + "muteEveryonesVideo": "Deaktiver alles kamera", + "muteGUMPending": "Kobler til mikrofonen din", + "noAudioSignalDesc": "Hvis du ikke dempet mikrofonen med systeminnstillinger eller maskinvare, vurder å bytte enhet.", + "noAudioSignalDescSuggestion": "Hvis du ikke dempet mikrofonen med systeminnstillinger eller maskinvare, vurder å bytte til den foreslåtte enheten.", + "noAudioSignalDialInDesc": "Du kan også ringe inn ved å bruke:", + "noAudioSignalDialInLinkDesc": "Innringingsnumre", + "noAudioSignalTitle": "Det er ingen lydinngang fra mikrofonen din!", + "noiseSuppression": "Ekstra støydemping (BETA)", + "noisyAudioInputDesc": "Det høres ut som mikrofonen din lager støy. Vurder å dempe eller bytte enhet.", + "noisyAudioInputTitle": "Mikrofonen din ser ut til å være støyende!", + "openChat": "Åpne chat", + "openReactionsMenu": "Åpne reaksjonsmeny", + "participants": "Deltakere", + "pip": "Aktiver bilde-i-bilde-modus", + "privateMessage": "Send privat melding", + "profile": "Rediger profilen din", + "raiseHand": "Rekk opp hånden", + "raiseYourHand": "Rekk opp hånden", + "reactionBoo": "Send buu-reaksjon", + "reactionClap": "Send applaus-reaksjon", + "reactionHeart": "Send hjerte-reaksjon", + "reactionLaugh": "Send latter-reaksjon", + "reactionLike": "Send tommel opp-reaksjon", + "reactionSilence": "Send stillhet-reaksjon", + "reactionSurprised": "Send overrasket-reaksjon", + "reactions": "Reaksjoner", + "security": "Sikkerhetsalternativer", + "selectBackground": "Velg bakgrunn", + "shareRoom": "Inviter noen", + "shareaudio": "Del lyd", + "sharedvideo": "Del video", + "shortcuts": "Vis hurtigtaster", + "showWhiteboard": "Vis whiteboard", + "silence": "Stillhet", + "speakerStats": "Deltakerstatistikk", + "startScreenSharing": "Start skjermdeling", + "startSubtitles": "Undertekster • {{language}}", + "stopAudioSharing": "Stopp deling av lyd", + "stopScreenSharing": "Stopp skjermdeling", + "stopSharedVideo": "Stopp video", + "stopSubtitles": "Stopp undertekster", + "surprised": "Overrasket", + "talkWhileMutedPopup": "Prøver du å snakke? Du er dempet.", + "tileViewToggle": "Veksle rutenettvisning", + "toggleCamera": "Veksle kamera", + "unmute": "Slå på mikrofon", + "videoSettings": "Videoinnstillinger", + "videomute": "Stopp kamera", + "videomuteGUMPending": "Kobler til kameraet ditt", + "videounmute": "Start kamera" + }, + "transcribing": { + "ccButtonTooltip": "Start / Stopp undertekster", + "expandedLabel": "Transkribering er for øyeblikket på", + "failed": "Transkribering mislyktes", + "labelToolTip": "Møtet blir transkribert", + "sourceLanguageDesc": "For øyeblikket er møtespråket satt til {{sourceLanguage}}.
Du kan endre det ", + "sourceLanguageHere": "her", + "start": "Start visning av undertekster", + "stop": "Stopp visning av undertekster", + "subtitles": "Undertekster", + "subtitlesOff": "Av", + "tr": "TR" + }, + "unpinParticipant": "{{participantName}} - Løsne", + "userMedia": { + "grantPermissions": "Vennligst gi tillatelser for å bruke kameraet og mikrofonen din." + }, + "videoSIPGW": { + "busy": "Vi jobber med å frigjøre ressurser. Vennligst prøv igjen om noen minutter.", + "busyTitle": "Romtjenesten er for øyeblikket opptatt", + "errorAlreadyInvited": "{{displayName}} er allerede invitert", + "errorInvite": "Konferansen er ikke opprettet ennå. Vennligst prøv igjen senere.", + "errorInviteFailed": "Vi jobber med å løse problemet. Vennligst prøv igjen senere.", + "errorInviteFailedTitle": "Invitasjon til {{displayName}} mislyktes", + "errorInviteTitle": "Feil ved invitasjon av rom", + "pending": "{{displayName}} har blitt invitert" + }, + "videoStatus": { + "adjustFor": "Juster for:", + "audioOnly": "LYD", + "audioOnlyExpanded": "Du er i modus for lav båndbredde. I denne modusen vil du kun motta lyd og skjermdeling.", + "bestPerformance": "Beste ytelse", + "callQuality": "Videokvalitet (0 for best ytelse, 3 for høyeste kvalitet)", + "hd": "HD", + "hdTooltip": "Ser video i høy oppløsning", + "highDefinition": "Høy oppløsning", + "highestQuality": "Høyeste kvalitet", + "labelTooiltipNoVideo": "Ingen video", + "labelTooltipAudioOnly": "Modus for lav båndbredde aktivert", + "ld": "LD", + "ldTooltip": "Ser video i lav oppløsning", + "lowDefinition": "Lav oppløsning", + "performanceSettings": "Ytelsesinnstillinger", + "recording": "Opptak pågår", + "sd": "SD", + "sdTooltip": "Ser video i standard oppløsning", + "standardDefinition": "Standard oppløsning", + "streaming": "Direktesending pågår" + }, + "videothumbnail": { + "connectionInfo": "Tilkoblingsinformasjon", + "demote": "Flytt til seer", + "domute": "Demp", + "domuteOthers": "Demp alle andre", + "domuteVideo": "Deaktiver kamera", + "domuteVideoOfOthers": "Deaktiver kamera for alle andre", + "flip": "Snu", + "grantModerator": "Gi moderatorrettigheter", + "hideSelfView": "Skjul selvvisning", + "kick": "Fjern deltaker", + "mirrorVideo": "Speil videoen min", + "moderator": "Moderator", + "mute": "Deltaker er dempet", + "muted": "Dempet", + "pinToStage": "Fest til scenen", + "remoteControl": "Start / Stopp fjernkontroll", + "screenSharing": "Deltaker deler skjermen sin", + "show": "Vis på scenen", + "showSelfView": "Vis selvvisning", + "unpinFromStage": "Løsne", + "verify": "Bekreft deltaker", + "videoMuted": "Kamera deaktivert", + "videomute": "Deltakeren har stoppet kameraet" + }, + "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Nåværende bakgrunn: {{background}}", + "selectBackground": "Velg en bakgrunn" + }, + "addBackground": "Legg til bakgrunn", + "apply": "Bruk", + "backgroundEffectError": "Kunne ikke bruke bakgrunnseffekten.", + "blur": "Uskarp", + "deleteImage": "Slett bilde", + "desktopShare": "Skjermdeling", + "desktopShareError": "Kunne ikke opprette skjermdeling", + "image1": "Strand", + "image2": "Hvit nøytral vegg", + "image3": "Hvitt tomt rom", + "image4": "Svart gulvlampe", + "image5": "Fjell", + "image6": "Skog", + "image7": "Soloppgang", + "none": "Ingen", + "pleaseWait": "Vennligst vent…", + "removeBackground": "Fjern bakgrunn", + "slightBlur": "Delvis uskarp", + "title": "Virtuelle bakgrunner", + "uploadedImage": "Opplastet bilde {{index}}", + "webAssemblyWarning": "WebAssembly ikke støttet", + "webAssemblyWarningDescription": "WebAssembly er deaktivert eller ikke støttet av denne nettleseren" + }, + "visitors": { + "chatIndicator": "(seer)", + "joinMeeting": { + "description": "Du er for øyeblikket en seer i denne konferansen.", + "raiseHand": "Rekk opp hånden", + "title": "Bli med i møtet", + "wishToSpeak": "Hvis du ønsker å snakke, vennligst rekk opp hånden nedenfor og vent på godkjenning fra moderator." + }, + "labelTooltip": "Antall seere: {{count}}", + "notification": { + "demoteDescription": "Sendt hit av {{actor}}, rekk opp hånden for å delta", + "noMainParticipantsDescription": "En deltaker må starte møtet. Vennligst prøv igjen om litt.", + "noMainParticipantsTitle": "Dette møtet har ikke startet ennå.", + "noVisitorLobby": "Du kan ikke bli med så lenge lobbyen er aktivert for møtet.", + "notAllowedPromotion": "En deltaker må godkjenne forespørselen din først.", + "title": "Du er en seer i møtet" + }, + "waitingMessage": "Du blir med i møtet så snart det er live!" + }, + "volumeSlider": "Volumkontroll", + "welcomepage": { + "accessibilityLabel": { + "join": "Trykk for å bli med", + "roomname": "Skriv inn romnavn" + }, + "addMeetingName": "Legg til møtenavn", + "appDescription": "Sett i gang, ha videosamtaler med hele teamet. Faktisk, inviter alle du kjenner. {{app}} er en fullstendig kryptert, 100 % åpen kildekode videokonferanseløsning som du kan bruke hele dagen, hver dag, gratis — uten behov for konto.", + "audioVideoSwitch": { + "audio": "Stemme", + "video": "Video" + }, + "calendar": "Kalender", + "connectCalendarButton": "Koble til kalenderen din", + "connectCalendarText": "Koble til kalenderen din for å se alle møtene dine i {{app}}. I tillegg kan du legge til {{provider}}-møter i kalenderen din og starte dem med ett klikk.", + "enterRoomTitle": "Start et nytt møte", + "getHelp": "Få hjelp", + "go": "GÅ", + "goSmall": "GÅ", + "headerSubtitle": "Sikre møter av høy kvalitet", + "headerTitle": "Jitsi Meet", + "info": "Innringingsinformasjon", + "jitsiOnMobile": "Jitsi på mobil – last ned appene våre og start et møte fra hvor som helst", + "join": "OPPRETT / BLI MED", + "logo": { + "calendar": "Kalenderlogo", + "desktopPreviewThumbnail": "Forhåndsvisningsminiatyr for skrivebord", + "googleLogo": "Google-logo", + "logoDeepLinking": "Jitsi Meet-logo", + "microsoftLogo": "Microsoft-logo", + "policyLogo": "Retningslinjelogo" + }, + "meetingsAccessibilityLabel": "Møter", + "mobileDownLoadLinkAndroid": "Last ned mobilappen for Android", + "mobileDownLoadLinkFDroid": "Last ned mobilappen for F-Droid", + "mobileDownLoadLinkIos": "Last ned mobilappen for iOS", + "moderatedMessage": "Eller bestill en møtelink på forhånd hvor du er den eneste moderator.", + "privacy": "Personvern", + "recentList": "Nylige", + "recentListDelete": "Slett oppføring", + "recentListEmpty": "Listen din er for øyeblikket tom. Chat med teamet ditt, så finner du alle dine nylige møter her.", + "recentMeetings": "Dine nylige møter", + "reducedUIText": "Velkommen til {{app}}!", + "roomNameAllowedChars": "Møtenavnet skal ikke inneholde noen av disse tegnene: ?, &, :, ', \", %, #.", + "roomname": "Skriv inn romnavn", + "roomnameHint": "Skriv inn navnet eller URL-en til rommet du vil bli med i. Du kan finne på et navn, bare sørg for at de du møter vet det slik at de skriver inn det samme navnet.", + "sendFeedback": "Send tilbakemelding", + "settings": "Innstillinger", + "startMeeting": "Start møte", + "terms": "Vilkår", + "title": "Sikker, fullverdig og helt gratis videokonferanse", + "upcomingMeetings": "Dine kommende møter" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Whiteboard" + }, + "screenTitle": "Whiteboard" + } +} diff --git a/lang/main-nl.json b/lang/main-nl.json index 3d84bf236144..f57c1cdbf46f 100644 --- a/lang/main-nl.json +++ b/lang/main-nl.json @@ -20,7 +20,7 @@ "noResults": "Geen resultaten die overeenkomen met de zoekopdracht", "outlookEmail": "Outlook e-mail", "phoneNumbers": "telefoonnummers", - "searching": "Zoeken...", + "searching": "Zoeken…", "shareInvite": "Uitnodiging voor vergadering delen", "shareLink": "Deel de link naar de vergadering om anderen uit te nodigen", "shareStream": "Deel de link naar de livestream", @@ -110,7 +110,7 @@ "installExtensionText": "Installeer de extensie voor Google Calendar en Office 365 integratie" }, "connectingOverlay": { - "joiningRoom": "U wordt verbonden met uw vergadering..." + "joiningRoom": "U wordt verbonden met uw vergadering…" }, "connection": { "ATTACHED": "Bijgevoegd", @@ -122,9 +122,9 @@ "DISCONNECTED": "Verbinding verbroken", "DISCONNECTING": "Verbinding verbreken", "ERROR": "Fout", - "FETCH_SESSION_ID": "Sessie-id ophalen...", + "FETCH_SESSION_ID": "Sessie-id ophalen…", "GET_SESSION_ID_ERROR": "Fout bij ophalen sessie-id: {{code}}", - "GOT_SESSION_ID": "Sessie-id ophalen... Klaar", + "GOT_SESSION_ID": "Sessie-id ophalen… Klaar", "LOW_BANDWIDTH": "Video voor {{displayName}} is uitgeschakeld om bandbreedte te besparen" }, "connectionindicator": { @@ -177,7 +177,7 @@ "ifHaveApp": "Als u de app al hebt:", "joinInApp": "Deelnemen aan deze vergadering met de app", "launchWebButton": "Starten in web", - "title": "Uw vergadering wordt gestart in {{app}}...", + "title": "Uw vergadering wordt gestart in {{app}}…", "tryAgainButton": "Opnieuw proberen in desktop", "unsupportedBrowser": "Het lijkt erop dat u een browser gebruikt die wij niet ondersteunen." }, @@ -226,9 +226,9 @@ "cameraUnknownError": "Kan de camera om een onbekende reden niet gebruiken.", "cameraUnsupportedResolutionError": "Uw camera ondersteunt de vereiste videoresolutie niet.", "close": "Sluiten", - "conferenceDisconnectMsg": "Controleer uw netwerkverbinding. Over {{seconds}} sec. wordt opnieuw geprobeerd verbinding te maken...", + "conferenceDisconnectMsg": "Controleer uw netwerkverbinding. Over {{seconds}} sec. wordt opnieuw geprobeerd verbinding te maken…", "conferenceDisconnectTitle": "Uw verbinding is verbroken.", - "conferenceReloadMsg": "Er wordt geprobeerd om dit op te lossen. Over {{seconds}} sec. wordt opnieuw geprobeerd verbinding te maken...", + "conferenceReloadMsg": "Er wordt geprobeerd om dit op te lossen. Over {{seconds}} sec. wordt opnieuw geprobeerd verbinding te maken…", "conferenceReloadTitle": "Er is helaas iets misgegaan.", "confirm": "Bevestigen", "confirmNo": "Nee", @@ -462,7 +462,7 @@ "errorLiveStreamNotEnabled": "Livestreamen is niet ingeschakeld voor {{email}}. Schakel livestreamen in of meld u aan met een account waarbij livestreamen is ingeschakeld.", "expandedOff": "De livestream is gestopt", "expandedOn": "De vergadering wordt momenteel gestreamd naar YouTube.", - "expandedPending": "De livestream wordt gestart...", + "expandedPending": "De livestream wordt gestart…", "failedToStart": "Livestream starten mislukt", "getStreamKeyManually": "Er konden geen livestreams opgehaald worden. Probeer uw livestream-sleutel van YouTube te krijgen.", "googlePrivacyPolicy": "Privacybeleid Google", @@ -473,7 +473,7 @@ "offBy": "{{name}} heeft de livestream gestopt.", "on": "Livestream", "onBy": "{{name}} heeft de livestream gestart.", - "pending": "Livestream starten...", + "pending": "Livestream starten…", "serviceName": "Livestreamservice", "signIn": "Aanmelden met Google", "signInCTA": "Meld u aan of voer uw livestream-sleutel van YouTube in.", @@ -502,10 +502,10 @@ "joinRejectedMessage": "Uw verzoek tot deelname is afgewezen door een moderator.", "joinRejectedTitle": "Verzoek tot deelname afgewezen", "joinTitle": "Deelnemen aan vergadering", - "joinWithPasswordMessage": "Poging tot deelname met wachtwoord, even geduld a.u.b...", + "joinWithPasswordMessage": "Poging tot deelname met wachtwoord, even geduld a.u.b…", "joiningMessage": "U neemt deel aan de vergadering zodra iemand uw verzoek accepteert", - "joiningTitle": "Vragen om deel te nemen aan vergadering...", - "joiningWithPasswordTitle": "Deelnemen met wachtwoord...", + "joiningTitle": "Vragen om deel te nemen aan vergadering…", + "joiningWithPasswordTitle": "Deelnemen met wachtwoord…", "knockButton": "Vragen om deel te nemen", "knockTitle": "Iemand wil deelnemen aan de vergadering", "knockingParticipantList": "Lijst van aankloppende deelnemers", @@ -692,7 +692,7 @@ "callMe": "Bel me", "callMeAtNumber": "Bel me op dit nummer:", "calling": "Bellen", - "configuringDevices": "Apparaten instellen...", + "configuringDevices": "Apparaten instellen…", "connectedWithAudioQ": "Bent u verbonden met audio?", "connection": { "good": "Uw internetverbinding lijkt goed te zijn!", @@ -723,7 +723,6 @@ "or": "of", "premeeting": "Voorbeeldscherm", "screenSharingError": "Fout bij schermdeling:", - "showScreen": "Voorbeeldscherm inschakelen", "startWithPhone": "Starten met telefoonaudio", "videoOnlyError": "Videofout:", "videoTrackError": "Kon videotrack niet aanmaken.", @@ -731,17 +730,17 @@ }, "presenceStatus": { "busy": "Bezet", - "calling": "Bellen...", + "calling": "Bellen…", "connected": "Verbonden", - "connecting": "Verbinding maken...", - "connecting2": "Verbinding maken*...", + "connecting": "Verbinding maken…", + "connecting2": "Verbinding maken*…", "disconnected": "Verbinding verbroken", "expired": "Verlopen", "ignored": "Genegeerd", - "initializingCall": "Oproep Starten...", + "initializingCall": "Oproep Starten…", "invited": "Uitgenodigd", "rejected": "Geweigerd", - "ringing": "Gaat over..." + "ringing": "Gaat over…" }, "privacyView": { "title": "Privacy" @@ -762,7 +761,7 @@ "error": "Opname is mislukt. Probeer het opnieuw.", "expandedOff": "Opname is gestopt", "expandedOn": "De vergadering wordt momenteel opgenomen.", - "expandedPending": "Opname wordt gestart...", + "expandedPending": "Opname wordt gestart…", "failedToStart": "Opname starten mislukt", "fileSharingdescription": "Opname delen met deelnemers aan vergadering", "limitNotificationDescriptionNative": "Vanwege een grote vraag wordt uw opname beperkt tot {{limit}} min. Voor ongelimiteerde opnamen, probeer <3>{{app}}.", @@ -773,7 +772,7 @@ "offBy": "{{name}} heeft de opname gestopt", "on": "Opnemen", "onBy": "{{name}} heeft de opname gestart", - "pending": "Voorbereiden op opnemen van de vergadering...", + "pending": "Voorbereiden op opnemen van de vergadering…", "rec": "OPN", "serviceDescription": "Uw opname wordt opgeslagen door de opnameservice", "serviceName": "Opnameservice", @@ -1007,22 +1006,13 @@ "failedToStart": "Transcriberen starten mislukt", "labelToolTip": "De vergadering wordt getranscribeerd", "off": "Transcriberen gestopt", - "pending": "Voorbereiden op transcriberen van de vergadering...", + "pending": "Voorbereiden op transcriberen van de vergadering…", "start": "Weergave van ondertiteling starten", "stop": "Weergave van ondertiteling stoppen", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Selecteer Toestaan wanneer uw browser om toegangsrechten vraagt.", - "chromeGrantPermissions": "Selecteer Toestaan wanneer uw browser om toegangsrechten vraagt.", - "edgeGrantPermissions": "Selecteer Ja wanneer uw browser om toegangsrechten vraagt.", - "electronGrantPermissions": "Verleen toestemming om uw camera en microfoon te gebruiken.", - "firefoxGrantPermissions": "Selecteer Geselecteerd apparaat delen wanneer uw browser om toegangsrechten vraagt.", - "iexplorerGrantPermissions": "Selecteer OK wanneer uw browser om toegangsrechten vraagt.", - "nwjsGrantPermissions": "Verleen toestemming om uw camera en microfoon te gebruiken.", - "operaGrantPermissions": "Selecteer Toestaan wanneer uw browser om toegangsrechten vraagt.", - "react-nativeGrantPermissions": "Selecteer Toestaan wanneer uw browser om toegangsrechten vraagt.", - "safariGrantPermissions": "Selecteer OK wanneer uw browser om toegangsrechten vraagt." + "grantPermissions": "Verleen toestemming om uw camera en microfoon te gebruiken." }, "videoSIPGW": { "busy": "Er worden middelen vrijgemaakt. Probeer het over enkele minuten opnieuw.", @@ -1077,7 +1067,7 @@ "apply": "Toepassen", "blur": "Vervagen", "none": "Geen", - "pleaseWait": "Even geduld a.u.b...", + "pleaseWait": "Even geduld a.u.b…", "removeBackground": "Verwijder achtergrond", "slightBlur": "Licht vervagen", "title": "Achtergronden" diff --git a/lang/main-no.json b/lang/main-no.json new file mode 100644 index 000000000000..4aa731e2c685 --- /dev/null +++ b/lang/main-no.json @@ -0,0 +1,1583 @@ +{ + "addPeople": { + "accessibilityLabel": { + "meetingLink": "møtelink: {{url}}" + }, + "add": "Inviter", + "addContacts": "Inviter dine kontakter", + "contacts": "kontakter", + "copyInvite": "Kopier møteinvitasjon", + "copyLink": "Kopier møtelink", + "copyStream": "Kopier direktesending-lenke", + "countryNotSupported": "Vi støtter ikke denne destinasjonen ennå.", + "countryReminder": "Ringer du utenfor USA? Vennligst sørg for å starte med landskoden!", + "defaultEmail": "Din standard e-post", + "disabled": "Du kan ikke invitere folk.", + "failedToAdd": "Kunne ikke legge til deltakere", + "googleEmail": "Google e-post", + "inviteMoreHeader": "Du er den eneste i møtet", + "inviteMoreMailSubject": "Bli med i{{appName}} møtet", + "inviteMorePrompt": "Inviter flere personer", + "linkCopied": "Lenke kopiert til utklippstavlen", + "noResults": "Ingen treff på søket", + "outlookEmail": "Outlook e-post", + "phoneNumbers": "telefonnumre", + "searching": "Søker…", + "shareInvite": "Del møteinvitasjon", + "shareLink": "Del møtelinken for å invitere andre", + "shareStream": "Del direktesending-lenken", + "sipAddresses": "SIP-adresser", + "telephone": "Telefon: {{number}}", + "title": "Inviter folk til dette møtet", + "yahooEmail": "Yahoo e-post" + }, + "audioDevices": { + "bluetooth": "Bluetooth", + "car": "Lyd i bil", + "headphones": "Hodetelefoner", + "none": "Lydutstyr ikke tilgjengelig", + "phone": "Telefon", + "speaker": "Høyttaler" + }, + "audioOnly": { + "audioOnly": "Lav båndbredde" + }, + "bandwidthSettings": { + "assumedBandwidthBps": "f.eks. 10000000 for 10 Mbps", + "assumedBandwidthBpsWarning": "Høyere verdier kan forårsake nettverksproblemer.", + "customValue": "Egendefinert verdi", + "customValueEffect": "For å sette den faktiske bps-verdien", + "leaveEmpty": "La stå tomt", + "leaveEmptyEffect": "For å tillate at estimater blir gjort", + "possibleValues": "Mulige verdier", + "setAssumedBandwidthBps": "Antatt båndbredde (bps)", + "title": "Båndbreddeinnstillinger", + "zeroEffect": "For å deaktivere video" + }, + "breakoutRooms": { + "actions": { + "add": "Legg til grupperom", + "autoAssign": "Automatisk tildeling til grupperom", + "close": "Lukk", + "join": "Bli med", + "leaveBreakoutRoom": "Forlat grupperom", + "more": "Mer", + "remove": "Fjern", + "rename": "Gi nytt navn", + "renameBreakoutRoom": "Gi nytt navn til grupperom", + "sendToBreakoutRoom": "Send deltaker til:" + }, + "breakoutList": "Grupperomsliste", + "buttonLabel": "Grupperom", + "defaultName": "Grupperom #{{index}}", + "hideParticipantList": "Skjul deltakerliste", + "mainRoom": "Hovedrom", + "notifications": { + "joined": "Bli med i \"{{name}}\" grupperom", + "joinedMainRoom": "Bli med i hovedrom", + "joinedTitle": "Grupperom" + }, + "showParticipantList": "Vis deltakerliste", + "title": "Grupperom" + }, + "calendarSync": { + "addMeetingURL": "Legg til en møtelenke", + "confirmAddLink": "Vil du legge til en Jitsi-lenke til denne hendelsen?", + "error": { + "appConfiguration": "Kalenderintegrasjonen er ikke riktig konfigurert.", + "generic": "En feil har oppstått. Sjekk kalenderinnstillingene dine eller prøv å oppdatere kalenderen.", + "notSignedIn": "En feil oppstod under autentisering for å se kalenderhendelser. Sjekk kalenderinnstillingene dine og prøv å logge inn igjen." + }, + "join": "Bli med", + "joinTooltip": "Bli med i møtet", + "nextMeeting": "Neste møte", + "noEvents": "Det er ingen planlagte kommende hendelser.", + "ongoingMeeting": "Pågående møte", + "permissionButton": "Åpne innstillinger", + "permissionMessage": "Kalendertillatelse er nødvendig for å se møtene dine i appen.", + "refresh": "Oppdater kalender", + "today": "I dag" + }, + "carmode": { + "actions": { + "selectSoundDevice": "Velg lydenhet" + }, + "labels": { + "buttonLabel": "Bilmodus", + "title": "Bilmodus", + "videoStopped": "Videoen din er stoppet" + } + }, + "chat": { + "enter": "Gå inn i rommet", + "error": "Feil: meldingen din ble ikke sendt. Årsak: {{error}}", + "fieldPlaceHolder": "Aa", + "lobbyChatMessageTo": "Lobby-chatmelding til {{recipient}}", + "message": "Melding", + "messageAccessibleTitle": "{{user}} sier:", + "messageAccessibleTitleMe": "jeg sier:", + "messageTo": "Privat melding til {{recipient}}", + "messagebox": "Skriv en melding", + "newMessages": "Nye meldinger", + "nickname": { + "popover": "Velg et kallenavn", + "title": "Skriv inn et kallenavn for å bruke chatten", + "titleWithPolls": "Skriv inn et kallenavn for å bruke chatten og avstemninger" + }, + "noMessagesMessage": "Det er ingen meldinger i møtet ennå. Start en samtale her!", + "privateNotice": "Privat melding til {{recipient}}", + "sendButton": "Send", + "smileysPanel": "Emoji-panel", + "systemDisplayName": "System", + "tabs": { + "chat": "Chat", + "polls": "Avstemninger" + }, + "title": "Chat", + "titleWithPolls": "Chat og avstemninger", + "you": "du" + }, + "chromeExtensionBanner": { + "buttonText": "Installer Chrome-utvidelse", + "buttonTextEdge": "Installer Edge-utvidelse", + "close": "Lukk", + "dontShowAgain": "Ikke vis dette igjen", + "installExtensionText": "Installer utvidelsen for integrasjon med Google Kalender og Office 365" + }, + "connectingOverlay": { + "joiningRoom": "Kobler deg til møtet…" + }, + "connection": { + "ATTACHED": "Tilkoblet", + "AUTHENTICATING": "Autentiserer", + "AUTHFAIL": "Autentisering mislyktes", + "CONNECTED": "Tilkoblet", + "CONNECTING": "Kobler til", + "CONNFAIL": "Tilkobling mislyktes", + "DISCONNECTED": "Frakoblet", + "DISCONNECTING": "Kobler fra", + "ERROR": "Feil", + "FETCH_SESSION_ID": "Henter sesjons-ID…", + "GET_SESSION_ID_ERROR": "Feil ved henting av sesjons-ID: {{code}}", + "GOT_SESSION_ID": "Henting av sesjons-ID fullført", + "LOW_BANDWIDTH": "Videoen til {{displayName}} er slått av for å spare båndbredde" + }, + "connectionindicator": { + "address": "Adresse:", + "audio_ssrc": "Audio SSRC:", + "bandwidth": "Estimert båndbredde:", + "bitrate": "Bithastighet:", + "bridgeCount": "Antall servere: ", + "codecs": "Kodeker (A/V): ", + "connectedTo": "Tilkoblet til:", + "e2eeVerified": "E2EE verifisert:", + "framerate": "Bildefrekvens:", + "less": "Vis mindre", + "localaddress": "Lokal adresse:", + "localaddress_plural": "Lokale adresser:", + "localport": "Lokal port:", + "localport_plural": "Lokale porter:", + "maxEnabledResolution": "send maks", + "more": "Vis mer", + "no": "nei", + "packetloss": "Pakktap:", + "participant_id": "Deltaker-ID:", + "quality": { + "good": "Bra", + "inactive": "Inaktiv", + "lost": "Tapt", + "nonoptimal": "Ikke optimal", + "poor": "Dårlig" + }, + "remoteaddress": "Ekstern adresse:", + "remoteaddress_plural": "Eksterne adresser:", + "remoteport": "Ekstern port:", + "remoteport_plural": "Eksterne porter:", + "resolution": "Oppløsning:", + "savelogs": "Lagre logger", + "status": "Tilkobling:", + "transport": "Transport:", + "transport_plural": "Transporter:", + "video_ssrc": "Video SSRC:", + "yes": "ja" + }, + "dateUtils": { + "earlier": "Tidligere", + "today": "I dag", + "yesterday": "I går" + }, + "deepLinking": { + "appNotInstalled": "Du trenger mobilappen {{app}} for å bli med i dette møtet på telefonen.", + "description": "Ingenting skjedde? Vi prøvde å starte møtet ditt i {{app}} skrivebordsappen. Prøv igjen eller åpne det i {{app}} nettappen.", + "descriptionNew": "Ingenting skjedde? Vi prøvde å starte møtet ditt i {{app}} skrivebordsappen.

Du kan prøve igjen eller åpne det i nettleseren.", + "descriptionWithoutWeb": "Ingenting skjedde? Vi prøvde å starte møtet ditt i {{app}} skrivebordsappen.", + "downloadApp": "Last ned appen", + "downloadMobileApp": "Last ned fra App Store", + "ifDoNotHaveApp": "Hvis du ikke har appen ennå:", + "ifHaveApp": "Hvis du allerede har appen:", + "joinInApp": "Bli med i dette møtet ved å bruke appen", + "joinInAppNew": "Bli med i appen", + "joinInBrowser": "Bli med i nettleseren", + "launchMeetingLabel": "Hvordan vil du bli med i dette møtet?", + "launchWebButton": "Start i nettleseren", + "noDesktopApp": "Har du ikke appen?", + "noMobileApp": "Har du ikke appen?", + "or": "ELLER", + "termsAndConditions": "Ved å fortsette godtar du våre vilkår og betingelser.", + "title": "Starter møtet ditt i {{app}}…", + "titleNew": "Starter møtet ditt…", + "tryAgainButton": "Prøv igjen på skrivebordet", + "unsupportedBrowser": "Det ser ut som om du bruker en nettleser vi ikke støtter." + }, + "defaultLink": "f.eks. {{url}}", + "defaultNickname": "f.eks. Jane Pink", + "deviceError": { + "cameraError": "Kunne ikke få tilgang til kameraet ditt", + "cameraPermission": "Feil ved innhenting av kameratilgang", + "microphoneError": "Kunne ikke få tilgang til mikrofonen din", + "microphonePermission": "Feil ved innhenting av mikrofontillatelse" + }, + "deviceSelection": { + "hid": { + "callControl": "Samtalekontroll", + "connectedDevices": "Tilkoblede enheter:", + "deleteDevice": "Slett enhet", + "pairDevice": "Koble til enhet" + }, + "noPermission": "Tillatelse ikke gitt", + "previewUnavailable": "Forhåndsvisning ikke tilgjengelig", + "selectADevice": "Velg en enhet", + "testAudio": "Test" + }, + "dialIn": { + "screenTitle": "Sammendrag av innringing" + }, + "dialOut": { + "statusMessage": "er nå {{status}}" + }, + "dialog": { + "Back": "Tilbake", + "Cancel": "Avbryt", + "IamHost": "Logg inn", + "Ok": "OK", + "Remove": "Fjern", + "Share": "Del", + "Submit": "Send inn", + "WaitForHostMsg": "Konferansen har ikke startet ennå fordi ingen moderatorer har ankommet. Hvis du vil bli moderator, vennligst logg inn. Ellers, vennligst vent.", + "WaitForHostNoAuthMsg": "Konferansen har ikke startet ennå fordi ingen moderatorer har ankommet. Vennligst vent.", + "WaitingForHostButton": "Vent på moderator", + "WaitingForHostTitle": "Venter på en moderator…", + "Yes": "Ja", + "accessibilityLabel": { + "Cancel": "Avbryt (forlat dialog)", + "Ok": "OK (lagre og forlat dialog)", + "close": "Lukk dialog", + "liveStreaming": "Direktesending", + "sharingTabs": "Delingsalternativer" + }, + "add": "Legg til", + "addMeetingNote": "Legg til en notat om dette møtet", + "addOptionalNote": "Legg til en notat (valgfritt):", + "allow": "Tillat", + "allowToggleCameraDialog": "Tillater du at {{initiatorName}} bytter kameramodus?", + "allowToggleCameraTitle": "Tillat bytte av kamera?", + "alreadySharedVideoMsg": "En annen deltaker deler allerede en video. Denne konferansen tillater kun én delt video om gangen.", + "alreadySharedVideoTitle": "Kun én delt video er tillatt om gangen", + "applicationWindow": "Programvindu", + "authenticationRequired": "Autentisering kreves", + "cameraConstraintFailedError": "Kameraet ditt oppfyller ikke noen av de nødvendige kravene.", + "cameraNotFoundError": "Kamera ble ikke funnet.", + "cameraNotSendingData": "Vi kan ikke få tilgang til kameraet ditt. Sjekk om en annen applikasjon bruker denne enheten, velg en annen enhet i innstillingene eller prøv å laste inn applikasjonen på nytt.", + "cameraNotSendingDataTitle": "Kan ikke få tilgang til kameraet", + "cameraPermissionDeniedError": "Du har ikke gitt tillatelse til å bruke kameraet ditt. Du kan fortsatt bli med i konferansen, men andre vil ikke se deg. Bruk kameraknappen i adressefeltet for å fikse dette.", + "cameraTimeoutError": "Kunne ikke starte videokilden. Tidsavbrudd oppstod!", + "cameraUnknownError": "Kan ikke bruke kameraet av en ukjent grunn.", + "cameraUnsupportedResolutionError": "Kameraet ditt støtter ikke den nødvendige videooppløsningen.", + "close": "Lukk", + "conferenceDisconnectMsg": "Sjekk nettverkstilkoblingen din. Prøver å koble til igjen om {{seconds}} sekunder…", + "conferenceDisconnectTitle": "Du har blitt frakoblet.", + "conferenceReloadMsg": "Vi prøver å fikse dette. Prøver å koble til igjen om {{seconds}} sekunder…", + "conferenceReloadTitle": "Dessverre oppstod det en feil.", + "confirm": "Bekreft", + "confirmNo": "Nei", + "confirmYes": "Ja", + "connectError": "Oops! Noe gikk galt, og vi kunne ikke koble til konferansen.", + "connectErrorWithMsg": "Oops! Noe gikk galt, og vi kunne ikke koble til konferansen: {{msg}}", + "connecting": "Kobler til", + "contactSupport": "Kontakt brukerstøtte", + "copied": "Kopiert", + "copy": "Kopier", + "demoteParticipantDialog": "Er du sikker på at du vil flytte denne deltakeren til seer?", + "demoteParticipantTitle": "Flytt til seer", + "dismiss": "Avvis", + "displayNameRequired": "Hei! Hva heter du?", + "done": "Ferdig", + "e2eeDescription": "Ende-til-ende-kryptering er for øyeblikket EKSPERIMENTELL. Husk at aktivering av ende-til-ende-kryptering vil deaktivere serverbaserte tjenester som for eksempel telefon-deltakelse. Husk også at møtet kun vil fungere for brukere som deltar fra nettlesere som støtter innsettbare strømmer.", + "e2eeDisabledDueToMaxModeDescription": "Kan ikke aktivere ende-til-ende-kryptering på grunn av et stort antall deltakere i konferansen.", + "e2eeLabel": "Aktiver ende-til-ende-kryptering", + "e2eeWarning": "ADVARSEL: Ikke alle deltakere i dette møtet ser ut til å støtte ende-til-ende-kryptering. Hvis du aktiverer det, vil de verken kunne se eller høre deg.", + "e2eeWillDisableDueToMaxModeDescription": "ADVARSEL: Ende-til-ende-kryptering vil automatisk bli deaktivert hvis flere deltakere blir med i konferansen.", + "embedMeeting": "Bygg inn møte", + "enterDisplayName": "Skriv inn navnet ditt", + "error": "Feil", + "errorRoomCreationRestriction": "Du prøvde å bli med for raskt, vennligst prøv igjen om litt.", + "gracefulShutdown": "Tjenesten vår er for øyeblikket nede for vedlikehold. Prøv igjen senere.", + "grantModeratorDialog": "Er du sikker på at du vil gi moderatorrettigheter til {{participantName}}?", + "grantModeratorTitle": "Gi moderatorrettigheter", + "hide": "Skjul", + "hideShareAudioHelper": "Ikke vis denne dialogen igjen", + "incorrectPassword": "Feil brukernavn eller passord", + "incorrectRoomLockPassword": "Feil passord", + "internalError": "Oops! Noe gikk galt. Følgende feil oppstod: {{error}}", + "internalErrorTitle": "Intern feil", + "kickMessage": "Du kan kontakte {{participantDisplayName}} for mer informasjon.", + "kickParticipantButton": "Fjern", + "kickParticipantDialog": "Er du sikker på at du vil fjerne denne deltakeren?", + "kickParticipantTitle": "Fjern denne deltakeren?", + "kickSystemTitle": "Oi! Du ble kastet ut av møtet", + "kickTitle": "Oi! {{participantDisplayName}} kastet deg ut av møtet", + "linkMeeting": "Koble møte", + "linkMeetingTitle": "Koble møtet til Salesforce", + "liveStreaming": "Direktesending", + "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Ikke mulig mens opptak er aktivt", + "localUserControls": "Lokale brukerkontroller", + "lockMessage": "Kunne ikke låse konferansen.", + "lockRoom": "Legg til møtets $t(lockRoomPassword)", + "lockTitle": "Låsing mislyktes", + "login": "Logg inn", + "loginQuestion": "Er du sikker på at du vil logge inn og forlate konferansen?", + "logoutQuestion": "Er du sikker på at du vil logge ut og forlate konferansen?", + "logoutTitle": "Logg ut", + "maxUsersLimitReached": "Grensen for maksimalt antall deltakere er nådd. Konferansen er full. Vennligst kontakt møtearrangøren eller prøv igjen senere!", + "maxUsersLimitReachedTitle": "Maksimalt deltakerantall nådd", + "micConstraintFailedError": "Mikrofonen din oppfyller ikke noen av de nødvendige kravene.", + "micNotFoundError": "Mikrofonen ble ikke funnet.", + "micNotSendingData": "Gå til datamaskinens innstillinger for å slå på mikrofonen og justere nivået", + "micNotSendingDataTitle": "Mikrofonen din er dempet av systeminnstillingene", + "micPermissionDeniedError": "Du har ikke gitt tillatelse til å bruke mikrofonen din. Du kan fortsatt delta i konferansen, men andre vil ikke høre deg. Bruk kameraknappen i adressefeltet for å fikse dette.", + "micTimeoutError": "Kunne ikke starte lydkilden. Tidsavbrudd oppstod!", + "micUnknownError": "Kan ikke bruke mikrofonen av en ukjent grunn.", + "moderationAudioLabel": "Tillat deltakere å slå på lyden selv", + "moderationVideoLabel": "Tillat deltakere å starte videoen sin", + "muteEveryoneDialog": "Deltakerne kan slå på lyden sin når som helst.", + "muteEveryoneDialogModerationOn": "Deltakerne kan sende en forespørsel om å få snakke når som helst.", + "muteEveryoneElseDialog": "Når de er dempet, kan du ikke slå på lyden for dem, men de kan gjøre det selv når som helst.", + "muteEveryoneElseTitle": "Demp alle unntatt {{whom}}?", + "muteEveryoneElsesVideoDialog": "Når kameraet er deaktivert, kan du ikke slå det på igjen, men deltakerne kan gjøre det selv når som helst.", + "muteEveryoneElsesVideoTitle": "Stopp alles video unntatt {{whom}}?", + "muteEveryoneSelf": "deg selv", + "muteEveryoneStartMuted": "Alle starter dempet fra nå av", + "muteEveryoneTitle": "Demp alle?", + "muteEveryonesVideoDialog": "Deltakerne kan slå på videoen sin når som helst.", + "muteEveryonesVideoDialogModerationOn": "Deltakerne kan sende en forespørsel om å slå på videoen når som helst.", + "muteEveryonesVideoDialogOk": "Deaktiver", + "muteEveryonesVideoTitle": "Stopp alles video?", + "muteParticipantBody": "Du kan ikke slå på lyden for dem, men de kan gjøre det selv når som helst.", + "muteParticipantButton": "Demp", + "muteParticipantsVideoBody": "Du vil ikke kunne slå på kameraet igjen, men de kan gjøre det selv når som helst.", + "muteParticipantsVideoBodyModerationOn": "Du vil ikke kunne slå på kameraet igjen, og det vil heller ikke de.", + "muteParticipantsVideoButton": "Stopp video", + "muteParticipantsVideoDialog": "Er du sikker på at du vil slå av kameraet til denne deltakeren? Du vil ikke kunne slå det på igjen, men deltakeren kan gjøre det selv når som helst.", + "muteParticipantsVideoDialogModerationOn": "Er du sikker på at du vil slå av kameraet til denne deltakeren? Du vil ikke kunne slå det på igjen, og det vil heller ikke de.", + "muteParticipantsVideoTitle": "Deaktiver kameraet til denne deltakeren?", + "noDropboxToken": "Ingen gyldig Dropbox-token", + "password": "Passord", + "passwordLabel": "Møtet har blitt låst av en deltaker. Vennligst skriv inn $t(lockRoomPassword) for å bli med.", + "passwordNotSupported": "Å angi et møte $t(lockRoomPassword) støttes ikke.", + "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) støttes ikke", + "passwordRequired": "$t(lockRoomPasswordUppercase) kreves", + "permissionCameraRequiredError": "Kameratilgang er nødvendig for å delta i videokonferanser. Vennligst gi tillatelse i Innstillinger", + "permissionErrorTitle": "Tillatelse kreves", + "permissionMicRequiredError": "Mikrofontilgang er nødvendig for å delta i lydkonferanser. Vennligst gi tillatelse i Innstillinger", + "readMore": "mer", + "recentlyUsedObjects": "Dine nylig brukte objekter", + "recording": "Opptak", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ikke mulig mens direktesending er aktiv", + "rejoinNow": "Bli med igjen nå", + "remoteControlAllowedMessage": "{{user}} godtok forespørselen din om fjernkontroll!", + "remoteControlDeniedMessage": "{{user}} avslo forespørselen din om fjernkontroll!", + "remoteControlErrorMessage": "En feil oppstod da vi prøvde å be om fjernkontrolltillatelser fra {{user}}!", + "remoteControlRequestMessage": "Vil du tillate at {{user}} fjernstyrer skrivebordet ditt?", + "remoteControlShareScreenWarning": "Merk at hvis du trykker \"Tillat\", vil du dele skjermen din!", + "remoteControlStopMessage": "Fjernkontrolløkten ble avsluttet!", + "remoteControlTitle": "Fjernstyring av skrivebord", + "remoteUserControls": "Fjernbrukerkontroller for {{username}}", + "removePassword": "Fjern $t(lockRoomPassword)", + "removeSharedVideoMsg": "Er du sikker på at du vil fjerne den delte videoen din?", + "removeSharedVideoTitle": "Fjern delt video", + "renameBreakoutRoomLabel": "Romnavn", + "renameBreakoutRoomTitle": "Gi nytt navn til grupperom", + "reservationError": "Feil i reservasjonsystemet", + "reservationErrorMsg": "Feilkode: {{code}}, melding: {{msg}}", + "retry": "Prøv igjen", + "screenSharingAudio": "Del lyd", + "screenSharingFailed": "Oops! Noe gikk galt, vi kunne ikke starte skjermdeling!", + "screenSharingFailedTitle": "Skjermdeling mislyktes!", + "screenSharingPermissionDeniedError": "Oops! Noe gikk galt med skjermdelingstillatelsene dine. Vennligst last inn siden på nytt og prøv igjen.", + "searchInSalesforce": "Søk i Salesforce", + "searchResults": "Søkeresultater ({{count}})", + "searchResultsDetailsError": "Noe gikk galt ved henting av eierdata.", + "searchResultsError": "Noe gikk galt ved henting av data.", + "searchResultsNotFound": "Ingen søkeresultater funnet.", + "searchResultsTryAgain": "Prøv med alternative søkeord.", + "sendPrivateMessage": "Du har nylig mottatt en privat melding. Ønsker du å svare privat, eller vil du sende meldingen til gruppen?", + "sendPrivateMessageCancel": "Send til gruppen", + "sendPrivateMessageOk": "Send privat", + "sendPrivateMessageTitle": "Send privat?", + "serviceUnavailable": "Tjenesten er utilgjengelig", + "sessTerminated": "Samtale avsluttet", + "sessTerminatedReason": "Møtet har blitt avsluttet", + "sessionRestarted": "Samtalen ble startet på nytt på grunn av en tilkoblingsfeil.", + "shareAudio": "Fortsett", + "shareAudioAltText": "For å dele ønsket innhold, gå til \"Nettleserfane\", velg innholdet, aktiver \"del lyd\"-avkrysningsboksen og klikk deretter på \"del\"-knappen", + "shareAudioTitle": "Hvordan dele lyd", + "shareAudioWarningD1": "Du må stoppe skjermdelingen før du deler lyden din.", + "shareAudioWarningD2": "Du må starte skjermdelingen på nytt og velge \"del lyd\"-alternativet.", + "shareAudioWarningH1": "Hvis du bare vil dele lyd:", + "shareAudioWarningTitle": "Du må stoppe skjermdelingen før du kan dele lyd", + "shareMediaWarningGenericH2": "Hvis du vil dele både skjermen og lyden", + "shareScreenWarningD1": "Du må stoppe lyddelingen før du deler skjermen din.", + "shareScreenWarningD2": "Du må stoppe lyddelingen, starte skjermdelingen på nytt og velge \"del lyd\"-alternativet.", + "shareScreenWarningH1": "Hvis du bare vil dele skjermen din:", + "shareScreenWarningTitle": "Du må stoppe lyddelingen før du kan dele skjermen", + "shareVideoConfirmPlay": "Du er i ferd med å åpne et eksternt nettsted. Vil du fortsette?", + "shareVideoConfirmPlayTitle": "{{name}} har delt en video med deg.", + "shareVideoLinkError": "Oops, denne videoen kan ikke spilles av.", + "shareVideoLinkStopped": "Videoen fra {{name}} ble stoppet.", + "shareVideoTitle": "Del video", + "shareYourScreen": "Del skjermen din", + "shareYourScreenDisabled": "Skjermdeling deaktivert.", + "sharedVideoDialogError": "Feil: Ugyldig eller forbudt URL", + "sharedVideoLinkPlaceholder": "YouTube-lenke eller direkte videolenke", + "show": "Vis", + "start": "Start ", + "startLiveStreaming": "Start direktesending", + "startRecording": "Start opptak", + "startRemoteControlErrorMessage": "En feil oppstod ved forsøk på å starte fjernkontrolløkten!", + "stopLiveStreaming": "Stopp direktesending", + "stopRecording": "Stopp opptak", + "stopRecordingWarning": "Er du sikker på at du vil stoppe opptaket?", + "stopStreamingWarning": "Er du sikker på at du vil stoppe direktesendingen?", + "streamKey": "Nøkkel for direktesending", + "thankYou": "Takk for at du bruker {{appName}}!", + "token": "token", + "tokenAuthFailed": "Beklager, du har ikke tillatelse til å bli med i denne samtalen.", + "tokenAuthFailedReason": { + "audInvalid": "Ugyldig `aud`-verdi. Den skal være `jitsi`.", + "contextNotFound": "`context`-objektet mangler i nyttelasten.", + "expInvalid": "Ugyldig `exp`-verdi.", + "featureInvalid": "Ugyldig funksjon: {{feature}}, sannsynligvis ikke implementert ennå.", + "featureValueInvalid": "Ugyldig verdi for funksjon: {{feature}}.", + "featuresNotFound": "`features`-objektet mangler i nyttelasten.", + "headerNotFound": "Mangler header.", + "issInvalid": "Ugyldig `iss`-verdi. Den skal være `chat`.", + "kidMismatch": "Nøkkel-ID (kid) samsvarer ikke med sub.", + "kidNotFound": "Mangler nøkkel-ID (kid).", + "nbfFuture": "`nbf`-verdien er i fremtiden.", + "nbfInvalid": "Ugyldig `nbf`-verdi.", + "payloadNotFound": "Mangler nyttelasten.", + "tokenExpired": "Tokenet er utløpt." + }, + "tokenAuthFailedTitle": "Autentisering mislyktes", + "tokenAuthFailedWithReasons": "Beklager, du har ikke tillatelse til å bli med i denne samtalen. Mulige årsaker: {{reason}}", + "tokenAuthUnsupported": "Token-URL støttes ikke.", + "transcribing": "Transkriberer", + "unlockRoom": "Fjern møte $t(lockRoomPassword)", + "user": "Bruker", + "userIdentifier": "Brukeridentifikator", + "userPassword": "Brukerpassord", + "verifyParticipantConfirm": "De samsvarer", + "verifyParticipantDismiss": "De samsvarer ikke", + "verifyParticipantQuestion": "EKSPERIMENTELL: Spør deltaker {{participantName}} om de ser det samme innholdet, i samme rekkefølge.", + "verifyParticipantTitle": "Brukerverifisering", + "videoLink": "Videolenke", + "viewUpgradeOptions": "Se oppgraderingsalternativer", + "viewUpgradeOptionsContent": "For å få ubegrenset tilgang til premiumfunksjoner som opptak, transkripsjoner, RTMP-streaming og mer, må du oppgradere planen din.", + "viewUpgradeOptionsTitle": "Du har oppdaget en premiumfunksjon!", + "whiteboardLimitContent": "Beklager, grensen for samtidige brukere av whiteboard er nådd.", + "whiteboardLimitReference": "For mer informasjon, besøk", + "whiteboardLimitReferenceUrl": "vår nettside", + "whiteboardLimitTitle": "Begrenset tilgang til whiteboard", + "yourEntireScreen": "Hele skjermen din" + }, + "documentSharing": { + "title": "Delt dokument" + }, + "e2ee": { + "labelToolTip": "Lyd- og videokommunikasjon i denne samtalen er ende-til-ende-kryptert" + }, + "embedMeeting": { + "title": "Bygg inn dette møtet" + }, + "feedback": { + "accessibilityLabel": { + "yourChoice": "Ditt valg: {{rating}}" + }, + "average": "Gjennomsnittlig", + "bad": "Dårlig", + "detailsLabel": "Fortell oss mer om det.", + "good": "Bra", + "rateExperience": "Vurder møteopplevelsen din", + "star": "Stjerne", + "veryBad": "Veldig dårlig", + "veryGood": "Veldig bra" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Videominiatyrer" + } + }, + "giphy": { + "noResults": "Ingen resultater funnet :(", + "search": "Søk i GIPHY" + }, + "incomingCall": { + "answer": "Svar", + "audioCallTitle": "Innkommende anrop", + "decline": "Avvis", + "productLabel": "fra Jitsi Meet", + "videoCallTitle": "Innkommende videoanrop" + }, + "info": { + "accessibilityLabel": "Vis info", + "addPassword": "Legg til $t(lockRoomPassword)", + "cancelPassword": "Avbryt $t(lockRoomPassword)", + "conferenceURL": "Lenke:", + "copyNumber": "Kopier nummer", + "country": "Land", + "dialANumber": "For å bli med i møtet, ring et av disse numrene og tast deretter inn PIN-koden.", + "dialInConferenceID": "PIN-kode:", + "dialInNotSupported": "Beklager, innringing støttes for øyeblikket ikke.", + "dialInNumber": "Innringingsnummer:", + "dialInSummaryError": "Feil ved henting av innringingsinformasjon. Vennligst prøv igjen senere.", + "dialInTollFree": "Gratisnummer", + "genericError": "Oops, noe gikk galt.", + "inviteLiveStream": "For å se direktesendingen av dette møtet, klikk denne lenken: {{url}}", + "invitePhone": "For å bli med via telefon, trykk her: {{number}},,{{conferenceID}}#\n", + "invitePhoneAlternatives": "Leter du etter et annet innringingsnummer?\nSe listen over innringingsnumre: {{url}}\n\n\nHvis du også ringer inn via en romtelefon, bli med uten å koble til lyd: {{silentUrl}}", + "inviteSipEndpoint": "For å bli med via SIP-adresse, tast inn denne: {{sipUri}}", + "inviteTextiOSInviteUrl": "Klikk på følgende lenke for å bli med: {{inviteUrl}}.", + "inviteTextiOSJoinSilent": "Hvis du ringer inn via en romtelefon, bruk denne lenken for å bli med uten å koble til lyd: {{silentUrl}}.", + "inviteTextiOSPersonal": "{{name}} inviterer deg til et møte.", + "inviteTextiOSPhone": "For å bli med via telefon, bruk dette nummeret: {{number}},,{{conferenceID}}#. Hvis du trenger et annet nummer, finner du hele listen her: {{didUrl}}.", + "inviteURLFirstPartGeneral": "Du er invitert til å bli med i et møte.", + "inviteURLFirstPartPersonal": "{{name}} inviterer deg til et møte.\n", + "inviteURLSecondPart": "\nBli med i møtet:\n{{url}}\n", + "label": "Innringingsinformasjon", + "liveStreamURL": "Direktesendingslenke:", + "moreNumbers": "Flere numre", + "noNumbers": "Ingen innringingsnumre.", + "noPassword": "Ingen", + "noRoom": "Ingen rom ble spesifisert for innringing.", + "noWhiteboard": "Kunne ikke laste inn whiteboard.", + "numbers": "Innringingsnumre", + "password": "$t(lockRoomPasswordUppercase): ", + "reachedLimit": "Du har nådd grensen for planen din.", + "sip": "SIP-adresse", + "sipAudioOnly": "SIP-lydadresse", + "title": "Del", + "tooltip": "Del lenke og innringingsinformasjon for dette møtet", + "upgradeOptions": "Vennligst sjekk oppgraderingsalternativene på", + "whiteboardError": "Feil ved lasting av whiteboard. Vennligst prøv igjen senere." + }, + "inlineDialogFailure": { + "msg": "Vi støtte på et problem.", + "retry": "Prøv igjen", + "support": "Brukerstøtte", + "supportMsg": "Hvis dette fortsetter å skje, ta kontakt med" + }, + "inviteDialog": { + "alertText": "Kunne ikke invitere noen deltakere.", + "header": "Inviter", + "searchCallOnlyPlaceholder": "Skriv inn telefonnummer", + "searchPeopleOnlyPlaceholder": "Søk etter deltakere", + "searchPlaceholder": "Deltaker eller telefonnummer", + "send": "Send" + }, + "jitsiHome": "{{logo}} Logo, lenker til Hjemmeside", + "keyboardShortcuts": { + "focusLocal": "Fokuser på din video", + "focusRemote": "Fokuser på en annen persons video", + "fullScreen": "Vis eller avslutt fullskjerm", + "giphyMenu": "Vis eller skjul GIPHY-menyen", + "keyboardShortcuts": "Hurtigtaster", + "localRecording": "Vis eller skjul kontroller for lokal opptak", + "mute": "Demp eller slå på mikrofonen din", + "pushToTalk": "Trykk for å snakke", + "raiseHand": "Rekk opp eller ta ned hånden", + "showSpeakerStats": "Vis deltakerstatistikk", + "toggleChat": "Åpne eller lukk chatten", + "toggleFilmstrip": "Vis eller skjul videominiatyrer", + "toggleParticipantsPane": "Vis eller skjul deltakerlisten", + "toggleScreensharing": "Bytt mellom kamera og skjermdeling", + "toggleShortcuts": "Vis eller skjul hurtigtaster", + "videoMute": "Start eller stopp kameraet ditt" + }, + "largeVideo": { + "screenIsShared": "Du deler skjermen din", + "showMeWhatImSharing": "Vis meg hva jeg deler" + }, + "liveStreaming": { + "busy": "Vi jobber med å frigjøre strømmeressurser. Vennligst prøv igjen om noen minutter.", + "busyTitle": "Alle strømmere er for øyeblikket opptatt", + "changeSignIn": "Bytt konto.", + "choose": "Velg en direktesending", + "chooseCTA": "Velg et strømmealternativ. Du er for øyeblikket logget inn som {{email}}.", + "enterStreamKey": "Skriv inn YouTube-strømmenøkkelen din her.", + "error": "Direktesending mislyktes. Vennligst prøv igjen.", + "errorAPI": "En feil oppstod ved tilgang til YouTube-sendingene dine. Prøv å logge inn igjen.", + "errorLiveStreamNotEnabled": "Direktesending er ikke aktivert på {{email}}. Aktiver direktesending eller logg inn på en konto med direktesending aktivert.", + "expandedOff": "Direktesendingen har stoppet", + "expandedOn": "Møtet kringkastes for øyeblikket direkte", + "expandedPending": "Direktesendingen starter…", + "failedToStart": "Kunne ikke starte direktesending", + "getStreamKeyManually": "Vi kunne ikke hente noen direktesendinger. Prøv å hente strømmenøkkelen din fra YouTube.", + "googlePrivacyPolicy": "Googles personvernpolicy", + "inProgress": "Opptak eller direktesending pågår", + "invalidStreamKey": "Strømmenøkkelen kan være feil.", + "limitNotificationDescriptionNative": "Direktesendingen din vil være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.", + "limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil direktesendingen din være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.", + "off": "Direktesending stoppet", + "offBy": "{{name}} stoppet direktesendingen", + "on": "Direktesending startet", + "onBy": "{{name}} startet direktesendingen", + "pending": "Starter direktesending…", + "policyError": "Du prøvde å starte en direktesending for raskt. Vennligst prøv igjen senere!", + "serviceName": "Direktesendingstjeneste", + "sessionAlreadyActive": "Denne økten blir allerede tatt opp eller direktesendt.", + "signIn": "Logg inn med Google", + "signInCTA": "Logg inn eller skriv inn YouTube-strømmenøkkelen din.", + "signOut": "Logg ut", + "signedInAs": "Du er for øyeblikket logget inn som:", + "start": "Start en direktesending", + "streamIdHelp": "Hva er dette?", + "title": "Direktesending", + "unavailableTitle": "Direktesending utilgjengelig", + "youtubeTerms": "YouTubes vilkår for bruk" + }, + "lobby": { + "backToKnockModeButton": "Be om å bli med", + "chat": "Chat", + "dialogTitle": "Lobby-modus", + "disableDialogContent": "Lobby-modus er for øyeblikket aktivert. Denne funksjonen sikrer at uønskede deltakere ikke kan bli med i møtet. Vil du deaktivere den?", + "disableDialogSubmit": "Deaktiver", + "emailField": "Skriv inn e-postadressen din", + "enableDialogPasswordField": "Sett passord (valgfritt)", + "enableDialogSubmit": "Aktiver", + "enableDialogText": "Lobby-modus lar deg beskytte møtet ved kun å tillate personer å bli med etter godkjenning fra en moderator.", + "enterPasswordButton": "Skriv inn møtepassord", + "enterPasswordTitle": "Skriv inn passord for å bli med i møtet", + "errorMissingPassword": "Vennligst skriv inn møtepassordet", + "invalidPassword": "Ugyldig passord", + "joinRejectedMessage": "Forespørselen din om å bli med ble avvist av en moderator.", + "joinRejectedTitle": "Forespørsel om å bli med avvist.", + "joinTitle": "Bli med i møtet", + "joinWithPasswordMessage": "Prøver å bli med med passord, vennligst vent…", + "joiningMessage": "Du blir med i møtet så snart noen godkjenner forespørselen din", + "joiningTitle": "Ber om å bli med i møtet…", + "joiningWithPasswordTitle": "Bli med med passord…", + "knockButton": "Be om å bli med", + "knockTitle": "Noen ønsker å bli med i møtet", + "knockingParticipantList": "Liste over deltakere som venter", + "lobbyChatStartedNotification": "{{moderator}} startet en lobby-chat med {{attendee}}", + "lobbyChatStartedTitle": "{{moderator}} har startet en lobby-chat med deg.", + "lobbyClosed": "Lobby-rommet har blitt stengt.", + "nameField": "Skriv inn navnet ditt", + "notificationLobbyAccessDenied": "{{targetParticipantName}} har blitt avvist av {{originParticipantName}}", + "notificationLobbyAccessGranted": "{{targetParticipantName}} har fått tilgang av {{originParticipantName}}", + "notificationLobbyDisabled": "Lobby har blitt deaktivert av {{originParticipantName}}", + "notificationLobbyEnabled": "Lobby har blitt aktivert av {{originParticipantName}}", + "notificationTitle": "Lobby", + "passwordJoinButton": "Bli med", + "title": "Lobby", + "toggleLabel": "Aktiver lobby" + }, + "localRecording": { + "clientState": { + "off": "Av", + "on": "På", + "unknown": "Ukjent" + }, + "dialogTitle": "Kontroller for lokal opptak", + "duration": "Varighet", + "durationNA": "Ikke tilgjengelig", + "encoding": "Koding", + "label": "LOR", + "labelToolTip": "Lokalt opptak er aktivert", + "localRecording": "Lokalt opptak", + "me": "Meg", + "messages": { + "engaged": "Lokalt opptak er aktivert.", + "finished": "Opptaksøkt {{token}} er fullført. Vennligst send den innspilte filen til moderator.", + "finishedModerator": "Opptaksøkt {{token}} er fullført. Opptaket av det lokale sporet er lagret. Vennligst be de andre deltakerne om å sende inn sine opptak.", + "notModerator": "Du er ikke moderator. Du kan ikke starte eller stoppe lokalt opptak." + }, + "moderator": "Moderator", + "no": "Nei", + "participant": "Deltaker", + "participantStats": "Deltakerstatistikk", + "selectTabTitle": "🎥 Velg denne fanen for opptak", + "sessionToken": "Økt-token", + "start": "Start opptak", + "stop": "Stopp opptak", + "stopping": "Stopper opptak", + "wait": "Vennligst vent mens vi lagrer opptaket ditt", + "yes": "Ja" + }, + "lockRoomPassword": "passord", + "lockRoomPasswordUppercase": "Passord", + "lonelyMeetingExperience": { + "button": "Inviter andre", + "youAreAlone": "Du er den eneste i møtet" + }, + "me": "meg", + "notify": { + "OldElectronAPPTitle": "Sikkerhetssårbarhet!", + "allowAction": "Tillat", + "allowedUnmute": "Du kan slå på mikrofonen, starte kameraet eller dele skjermen din.", + "audioUnmuteBlockedDescription": "Slå på mikrofonen er midlertidig blokkert på grunn av systembegrensninger.", + "audioUnmuteBlockedTitle": "Mikrofonaktivering blokkert!", + "chatMessages": "Chatmeldinger", + "connectedOneMember": "{{name}} ble med i møtet", + "connectedThreePlusMembers": "{{name}} og mange andre ble med i møtet", + "connectedTwoMembers": "{{first}} og {{second}} ble med i møtet", + "connectionFailed": "Tilkobling mislyktes. Vennligst prøv igjen senere!", + "dataChannelClosed": "Videokvaliteten kan være svekket", + "dataChannelClosedDescription": "Brokkanalen er nede, og dermed kan videokvaliteten være begrenset til laveste innstilling.", + "dataChannelClosedDescriptionWithAudio": "Brokkanalen er nede, og dermed kan det oppstå forstyrrelser i lyd og video.", + "dataChannelClosedWithAudio": "Lyd- og videokvaliteten kan være svekket", + "disabledIframe": "Innebygging er kun ment for demonstrasjonsformål, så denne samtalen vil kobles fra om {{timeout}} minutter.", + "disabledIframeSecondary": "Innebygging av {{domain}} er kun ment for demonstrasjonsformål, så denne samtalen vil kobles fra om {{timeout}} minutter. Vennligst bruk Jitsi as a Service for innebygging i produksjon!", + "disconnected": "frakoblet", + "displayNotifications": "Vis varsler for", + "dontRemindMe": "Ikke minn meg på dette", + "focus": "Konferansefokus", + "focusFail": "{{component}} ikke tilgjengelig - prøver igjen om {{ms}} sek", + "gifsMenu": "GIPHY", + "groupTitle": "Varsler", + "hostAskedUnmute": "Moderator ønsker at du skal snakke", + "invalidTenant": "Ugyldig leietaker", + "invalidTenantHyphenDescription": "Leietakeren du bruker er ugyldig (starter eller slutter med '-').", + "invalidTenantLengthDescription": "Leietakeren du bruker er for lang.", + "invitedOneMember": "{{name}} har blitt invitert", + "invitedThreePlusMembers": "{{name}} og {{count}} andre har blitt invitert", + "invitedTwoMembers": "{{first}} og {{second}} har blitt invitert", + "joinMeeting": "Bli med", + "kickParticipant": "{{kicked}} ble kastet ut av {{kicker}}", + "leftOneMember": "{{name}} forlot møtet", + "leftThreePlusMembers": "{{name}} og mange andre forlot møtet", + "leftTwoMembers": "{{first}} og {{second}} forlot møtet", + "linkToSalesforce": "Koble til Salesforce", + "linkToSalesforceDescription": "Du kan knytte møtereferatet til et Salesforce-objekt.", + "linkToSalesforceError": "Kunne ikke koble møtet til Salesforce", + "linkToSalesforceKey": "Koble dette møtet", + "linkToSalesforceProgress": "Kobler møtet til Salesforce…", + "linkToSalesforceSuccess": "Møtet ble koblet til Salesforce", + "localRecordingStarted": "{{name}} har startet et lokalt opptak.", + "localRecordingStopped": "{{name}} har stoppet et lokalt opptak.", + "me": "Meg", + "moderationInEffectCSDescription": "Vennligst rekke opp hånden hvis du vil dele skjermen din.", + "moderationInEffectCSTitle": "Skjermdeling er blokkert av moderator", + "moderationInEffectDescription": "Vennligst rekke opp hånden hvis du vil snakke.", + "moderationInEffectTitle": "Mikrofonen din er dempet av moderator", + "moderationInEffectVideoDescription": "Vennligst rekke opp hånden hvis du vil starte kameraet ditt.", + "moderationInEffectVideoTitle": "Kameraet ditt er blokkert av moderator", + "moderationRequestFromModerator": "Verten ønsker at du slår på lyden", + "moderationRequestFromParticipant": "Ønsker å snakke", + "moderationStartedTitle": "Moderasjon startet", + "moderationStoppedTitle": "Moderasjon stoppet", + "moderationToggleDescription": "av {{participantDisplayName}}", + "moderator": "Du er nå moderator", + "muted": "Du har startet samtalen dempet.", + "mutedRemotelyDescription": "Du kan alltid slå på lyden når du er klar til å snakke. Demp igjen når du er ferdig for å redusere støy i møtet.", + "mutedRemotelyTitle": "Du har blitt dempet av {{participantDisplayName}}", + "mutedTitle": "Du er dempet!", + "newDeviceAction": "Bruk", + "newDeviceAudioTitle": "Ny lydenhet oppdaget", + "newDeviceCameraTitle": "Nytt kamera oppdaget", + "nextToSpeak": "Du er nestemann til å snakke", + "noiseSuppressionDesktopAudioDescription": "Ekstra støydemping kan ikke aktiveres mens du deler skrivebordets lyd. Deaktiver det og prøv igjen.", + "noiseSuppressionFailedTitle": "Kunne ikke starte ekstra støydemping", + "noiseSuppressionStereoDescription": "Ekstra støydemping støttes foreløpig ikke med stereolyd.", + "oldElectronClientDescription1": "Det ser ut til at du bruker en gammel versjon av Jitsi Meet-klienten som har kjente sikkerhetsproblemer. Vennligst oppdater til vår ", + "oldElectronClientDescription2": "nyeste versjon", + "oldElectronClientDescription3": " nå!", + "participantWantsToJoin": "Ønsker å bli med i møtet", + "participantsWantToJoin": "Ønsker å bli med i møtet", + "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) fjernet av en annen deltaker", + "passwordSetRemotely": "$t(lockRoomPasswordUppercase) satt av en annen deltaker", + "raiseHandAction": "Rekk opp hånden", + "raisedHand": "Ønsker å snakke.", + "raisedHands": "{{participantName}} og {{raisedHands}} flere personer", + "reactionSounds": "Deaktiver lyder", + "reactionSoundsForAll": "Deaktiver lyder for alle", + "screenShareNoAudio": "Del lyd-boksen ble ikke valgt i vindusvalget.", + "screenShareNoAudioTitle": "Kunne ikke dele systemlyd!", + "screenSharingAudioOnlyDescription": "Vær oppmerksom på at ved å dele skjermen påvirker du \"Beste ytelse\"-modusen, og du vil bruke mer båndbredde.", + "screenSharingAudioOnlyTitle": "\"Beste ytelse\"-modus", + "selfViewTitle": "Du kan alltid vise selvvisningen igjen fra innstillingene", + "somebody": "Noen", + "startSilentDescription": "Bli med i møtet på nytt for å aktivere lyd", + "startSilentTitle": "Du ble med uten lydutgang!", + "suboptimalBrowserWarning": "Vi er redd møteopplevelsen din ikke blir optimal her. Vi jobber med forbedringer, men inntil videre kan du prøve en av de fullt støttede nettleserne.", + "suboptimalExperienceTitle": "Nettleseradvarsel", + "suggestRecordingAction": "Start", + "suggestRecordingDescription": "Vil du starte et opptak?", + "suggestRecordingTitle": "Ta opp dette møtet", + "unmute": "Slå på lyden", + "videoMutedRemotelyDescription": "Du kan alltid slå det på igjen.", + "videoMutedRemotelyTitle": "Videoen din har blitt slått av av {{participantDisplayName}}", + "videoUnmuteBlockedDescription": "Aktivering av kamera og skjermdeling har blitt midlertidig blokkert på grunn av systembegrensninger.", + "videoUnmuteBlockedTitle": "Aktivering av kamera og skjermdeling blokkert!", + "viewLobby": "Vis lobby", + "viewParticipants": "Vis deltakere", + "viewVisitors": "Vis seere", + "waitingParticipants": "{{waitingParticipants}} personer", + "waitingVisitors": "Seere som venter i kø: {{waitingVisitors}}", + "waitingVisitorsTitle": "Møtet er ikke live ennå!", + "whiteboardLimitDescription": "Vennligst lagre fremgangen din, siden brukergrensen snart blir nådd og whiteboardet vil lukkes.", + "whiteboardLimitTitle": "Bruk av whiteboard" + }, + "participantsPane": { + "actions": { + "admit": "Godkjenn", + "admitAll": "Godkjenn alle", + "allow": "Tillat deltakere å:", + "allowVideo": "Tillat video", + "askUnmute": "Be om å slå på lyden", + "audioModeration": "Slå på lyden selv", + "blockEveryoneMicCamera": "Blokker alles mikrofon og kamera", + "breakoutRooms": "Grupperom", + "goLive": "Gå live", + "invite": "Inviter noen", + "lowerAllHands": "Senk alle hender", + "lowerHand": "Senk hånden", + "moreModerationActions": "Flere moderasjonsalternativer", + "moreModerationControls": "Flere moderasjonskontroller", + "moreParticipantOptions": "Flere deltakeralternativer", + "mute": "Demp", + "muteAll": "Demp alle", + "muteEveryoneElse": "Demp alle andre", + "reject": "Avvis", + "stopEveryonesVideo": "Stopp alles video", + "stopVideo": "Stopp video", + "unblockEveryoneMicCamera": "Fjern blokkering av alles mikrofon og kamera", + "videoModeration": "Starte videoen sin" + }, + "close": "Lukk", + "headings": { + "lobby": "Lobby ({{count}})", + "participantsList": "Møtedeltakere ({{count}})", + "visitorInQueue": " (venter {{count}})", + "visitorRequests": " (forespørsler {{count}})", + "visitors": "Seere {{count}}", + "waitingLobby": "Venter i lobbyen ({{count}})" + }, + "search": "Søk etter deltakere", + "title": "Deltakere" + }, + "passwordDigitsOnly": "Opptil {{number}} sifre", + "passwordSetRemotely": "Satt av en annen deltaker", + "pinParticipant": "{{participantName}} - Fest", + "pinnedParticipant": "Deltakeren er festet", + "polls": { + "answer": { + "edit": "Rediger", + "send": "Send", + "skip": "Hopp over", + "submit": "Send inn" + }, + "by": "Av {{ name }}", + "closeButton": "Lukk avstemning", + "create": { + "addOption": "Legg til alternativ", + "answerPlaceholder": "Alternativ {{index}}", + "cancel": "Avbryt", + "create": "Opprett en avstemning", + "pollOption": "Avstemningsalternativ {{index}}", + "pollQuestion": "Avstemningsspørsmål", + "questionPlaceholder": "Still et spørsmål", + "removeOption": "Fjern alternativ", + "save": "Lagre", + "send": "Send" + }, + "errors": { + "notUniqueOption": "Alternativene må være unike" + }, + "notification": { + "description": "Åpne avstemningsfanen for å stemme", + "title": "En ny avstemning ble lagt til i dette møtet" + }, + "results": { + "changeVote": "Endre stemme", + "empty": "Det er ingen avstemninger i møtet ennå. Start en avstemning her!", + "hideDetailedResults": "Skjul detaljer", + "showDetailedResults": "Vis detaljer", + "vote": "Stem" + } + }, + "poweredby": "drevet av", + "prejoin": { + "audioAndVideoError": "Lyd- og videofeil:", + "audioDeviceProblem": "Det er et problem med lydenheten din", + "audioOnlyError": "Lydfeil:", + "audioTrackError": "Kunne ikke opprette lydspor.", + "callMe": "Ring meg", + "callMeAtNumber": "Ring meg på dette nummeret:", + "calling": "Ringer", + "configuringDevices": "Konfigurerer enheter…", + "connectedWithAudioQ": "Er du tilkoblet med lyd?", + "connection": { + "failed": "Tilkoblingstesten mislyktes!", + "good": "Internettforbindelsen din ser bra ut!", + "nonOptimal": "Internettforbindelsen din er ikke optimal", + "poor": "Du har en dårlig internettforbindelse", + "running": "Kjører tilkoblingstest…" + }, + "connectionDetails": { + "audioClipping": "Vi forventer at lyden din vil bli avkuttet.", + "audioHighQuality": "Vi forventer at lyden din vil ha utmerket kvalitet.", + "audioLowNoVideo": "Vi forventer at lydkvaliteten din vil være lav, og at det ikke vil være video.", + "goodQuality": "Fantastisk! Mediekvaliteten din kommer til å være utmerket.", + "noMediaConnectivity": "Vi kunne ikke finne en måte å opprette medietilkobling for denne testen. Dette skyldes vanligvis en brannmur eller NAT.", + "noVideo": "Vi forventer at videokvaliteten din vil være svært dårlig.", + "testFailed": "Tilkoblingstesten støtte på uventede problemer, men dette vil kanskje ikke påvirke opplevelsen din.", + "undetectable": "Hvis du fortsatt ikke kan foreta anrop i nettleseren, anbefaler vi at du sjekker at høyttalere, mikrofon og kamera er riktig konfigurert, at du har gitt nettleseren tillatelse til å bruke mikrofon og kamera, og at nettleseren din er oppdatert. Hvis du fortsatt har problemer, bør du kontakte utvikleren av nettapplikasjonen.", + "veryPoorConnection": "Vi forventer at samtalekvaliteten din vil være svært dårlig.", + "videoFreezing": "Vi forventer at videoen din vil fryse, bli svart eller ha pikselerte forstyrrelser.", + "videoHighQuality": "Vi forventer at videoen din vil ha god kvalitet.", + "videoLowQuality": "Vi forventer at videoen din vil ha lav kvalitet når det gjelder bildefrekvens og oppløsning.", + "videoTearing": "Vi forventer at videoen din vil være pikselert eller ha visuelle artefakter." + }, + "copyAndShare": "Kopier og del møtelenken", + "dialInMeeting": "Ring inn til møtet", + "dialInPin": "Ring inn til møtet og tast inn PIN-kode:", + "dialing": "Ringer", + "doNotShow": "Ikke vis denne skjermen igjen", + "errorDialOut": "Kunne ikke ringe ut", + "errorDialOutDisconnected": "Kunne ikke ringe ut. Frakoblet", + "errorDialOutFailed": "Kunne ikke ringe ut. Anrop mislyktes", + "errorDialOutStatus": "Feil ved henting av status for utgående anrop", + "errorMissingName": "Vennligst skriv inn navnet ditt for å bli med i møtet", + "errorNoPermissions": "Du må gi tilgang til mikrofon og kamera", + "errorStatusCode": "Feil ved utgående anrop, statuskode: {{status}}", + "errorValidation": "Nummerverifisering mislyktes", + "iWantToDialIn": "Jeg vil ringe inn", + "initiated": "Anrop initiert", + "joinAudioByPhone": "Bli med via telefonlyd", + "joinMeeting": "Bli med i møtet", + "joinMeetingInLowBandwidthMode": "Bli med i modus for lav båndbredde", + "joinWithoutAudio": "Bli med uten lyd", + "keyboardShortcuts": "Aktiver hurtigtaster", + "linkCopied": "Lenke kopiert til utklippstavlen", + "lookGood": "Enhetene dine fungerer som de skal", + "or": "eller", + "premeeting": "Før møtet", + "proceedAnyway": "Fortsett likevel", + "recordingWarning": "Andre deltakere kan ta opp denne samtalen", + "screenSharingError": "Feil ved skjermdeling:", + "startWithPhone": "Start med telefonlyd", + "unsafeRoomConsent": "Jeg forstår risikoen, jeg vil bli med i møtet", + "videoOnlyError": "Video feil:", + "videoTrackError": "Kunne ikke opprette videospor.", + "viewAllNumbers": "se alle numre" + }, + "presenceStatus": { + "busy": "Opptatt", + "calling": "Ringer…", + "connected": "Tilkoblet", + "connecting": "Kobler til…", + "connecting2": "Kobler til*…", + "disconnected": "Frakoblet", + "expired": "Utløpt", + "ignored": "Ignorert", + "initializingCall": "Initialiserer anrop…", + "invited": "Invitert", + "rejected": "Avvist", + "ringing": "Ringer…" + }, + "profile": { + "avatar": "avatar", + "setDisplayNameLabel": "Navn", + "setEmailInput": "Skriv inn e-post", + "setEmailLabel": "Gravatar e-post", + "title": "Profil" + }, + "raisedHand": "Ønsker å snakke", + "raisedHandsLabel": "Antall hevede hender", + "record": { + "already": { + "linked": "Møtet er allerede koblet til dette Salesforce-objektet." + }, + "type": { + "account": "Konto", + "contact": "Kontakt", + "lead": "Lead", + "opportunity": "Mulighet", + "owner": "Eier" + } + }, + "recording": { + "authDropboxText": "Last opp til Dropbox", + "availableSpace": "Tilgjengelig plass: {{spaceLeft}} MB (omtrent {{duration}} minutter med opptak)", + "beta": "BETA", + "busy": "Vi jobber med å frigjøre opptaksressurser. Vennligst prøv igjen om noen minutter.", + "busyTitle": "Alle opptakere er for øyeblikket opptatt", + "copyLink": "Kopier lenke", + "error": "Opptak mislyktes. Vennligst prøv igjen.", + "errorFetchingLink": "Feil ved henting av opptaksl link.", + "expandedOff": "Opptaket har stoppet", + "expandedOn": "Møtet blir for øyeblikket tatt opp", + "expandedPending": "Opptak starter…", + "failedToStart": "Kunne ikke starte opptak", + "fileSharingdescription": "Del opptakslenken med møtedeltakerne", + "highlight": "Høydepunkt", + "highlightMoment": "Marker øyeblikk", + "highlightMomentDisabled": "Du kan markere øyeblikk når opptaket starter", + "highlightMomentSuccess": "Øyeblikk markert", + "highlightMomentSucessDescription": "Det markerte øyeblikket vil bli lagt til møtereferatet.", + "inProgress": "Opptak eller direktesending pågår", + "limitNotificationDescriptionNative": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <3>{{app}}.", + "limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv {{app}}.", + "linkGenerated": "Vi har generert en lenke til opptaket ditt.", + "localRecordingNoNotificationWarning": "Opptaket vil ikke bli annonsert til de andre deltakerne. Du må informere dem om at møtet blir tatt opp.", + "localRecordingNoVideo": "Video blir ikke tatt opp", + "localRecordingStartWarning": "Sørg for å stoppe opptaket før du forlater møtet for å lagre det.", + "localRecordingStartWarningTitle": "Stopp opptaket for å lagre det", + "localRecordingVideoStop": "Hvis du stopper videoen, vil også det lokale opptaket stoppe. Er du sikker på at du vil fortsette?", + "localRecordingVideoWarning": "For å ta opp videoen din, må du ha den på når opptaket starter", + "localRecordingWarning": "Pass på å velge den gjeldende fanen for å bruke riktig video og lyd.", + "loggedIn": "Logget inn som {{userName}}", + "noMicPermission": "Kunne ikke opprette mikrofonspor. Vennligst gi tillatelse til å bruke mikrofonen.", + "noStreams": "Ingen lyd- eller videostrøm oppdaget.", + "off": "Opptak stoppet", + "offBy": "{{name}} stoppet opptaket", + "on": "Opptak startet", + "onBy": "{{name}} startet opptaket", + "onlyRecordSelf": "Ta kun opp min egen lyd- og videostrøm", + "pending": "Forbereder opptak av møtet…", + "policyError": "Du prøvde å starte et opptak for raskt. Vennligst prøv igjen senere!", + "recordAudioAndVideo": "Ta opp lyd og video", + "recordTranscription": "Ta opp transkripsjon", + "saveLocalRecording": "Lagre opptaksfilen lokalt (Beta)", + "serviceDescription": "Opptaket ditt vil bli lagret av opptakstjenesten", + "serviceDescriptionCloud": "Skylagringsopptak", + "serviceDescriptionCloudInfo": "Opptak av møter slettes automatisk 24 timer etter opptakstidspunktet.", + "serviceName": "Opptakstjeneste", + "sessionAlreadyActive": "Denne økten blir allerede tatt opp eller direktesendt.", + "showAdvancedOptions": "Avanserte alternativer", + "signIn": "Logg inn", + "signOut": "Logg ut", + "surfaceError": "Vennligst velg den gjeldende fanen.", + "title": "Opptak", + "unavailable": "Oops! {{serviceName}} er for øyeblikket utilgjengelig. Vi jobber med å løse problemet. Vennligst prøv igjen senere.", + "unavailableTitle": "Opptak utilgjengelig", + "uploadToCloud": "Last opp til skyen" + }, + "screenshareDisplayName": "{{name}}s skjerm", + "sectionList": { + "pullToRefresh": "Dra for å oppdatere" + }, + "security": { + "about": "Du kan legge til et $t(lockRoomPassword) for møtet ditt. Deltakere må oppgi $t(lockRoomPassword) før de får bli med i møtet.", + "aboutReadOnly": "Moderatorer kan legge til et $t(lockRoomPassword) for møtet. Deltakere må oppgi $t(lockRoomPassword) før de får bli med i møtet.", + "insecureRoomNameWarningNative": "Romnavnet er usikkert. Uønskede deltakere kan bli med i møtet ditt. {{recommendAction}} Lær mer om hvordan du sikrer møtet ditt.", + "insecureRoomNameWarningWeb": "Romnavnet er usikkert. Uønskede deltakere kan bli med i møtet ditt. {{recommendAction}} Lær mer om hvordan du sikrer møtet ditt her.", + "title": "Sikkerhetsalternativer", + "unsafeRoomActions": { + "meeting": "Vurder å sikre møtet ditt ved å bruke sikkerhetsknappen.", + "prejoin": "Vurder å bruke et mer unikt møtenavn.", + "welcome": "Vurder å bruke et mer unikt møtenavn, eller velg ett av forslagene." + } + }, + "settings": { + "audio": "Lyd", + "buttonLabel": "Innstillinger", + "calendar": { + "about": "{{appName}} kalenderintegrasjon brukes til å få sikker tilgang til kalenderen din slik at den kan lese kommende hendelser.", + "disconnect": "Koble fra", + "microsoftSignIn": "Logg inn med Microsoft", + "signedIn": "Har for øyeblikket tilgang til kalenderhendelser for {{email}}. Klikk på Koble fra-knappen nedenfor for å stoppe tilgangen til kalenderhendelser.", + "title": "Kalender" + }, + "desktopShareFramerate": "Bildefrekvens for skjermdeling", + "desktopShareHighFpsWarning": "En høyere bildefrekvens for skjermdeling kan påvirke båndbredden din. Du må starte skjermdelingen på nytt for at de nye innstillingene skal tre i kraft.", + "desktopShareWarning": "Du må starte skjermdelingen på nytt for at de nye innstillingene skal tre i kraft.", + "devices": "Enheter", + "followMe": "Alle følger meg", + "followMeRecorder": "Opptaker følger meg", + "framesPerSecond": "bilder per sekund", + "incomingMessage": "Innkommende melding", + "language": "Språk", + "loggedIn": "Logget inn som {{name}}", + "maxStageParticipants": "Maksimalt antall deltakere som kan festes til hovedscenen", + "microphones": "Mikrofoner", + "moderator": "Moderator", + "moderatorOptions": "Moderatoralternativer", + "more": "Generelt", + "name": "Navn", + "noDevice": "Ingen", + "notifications": "Varsler", + "participantJoined": "Deltaker ble med", + "participantKnocking": "Deltaker kom inn i lobbyen", + "participantLeft": "Deltaker forlot møtet", + "playSounds": "Spill av lyd ved", + "reactions": "Møtereaksjoner", + "sameAsSystem": "Samme som systemet ({{label}})", + "selectAudioOutput": "Lydutgang", + "selectCamera": "Kamera", + "selectMic": "Mikrofon", + "selfView": "Selvvisning", + "shortcuts": "Hurtigtaster", + "speakers": "Høyttalere", + "startAudioMuted": "Alle starter dempet", + "startReactionsMuted": "Demp reaksjonslyder for alle", + "startVideoMuted": "Alle starter skjult", + "talkWhileMuted": "Snakk mens du er dempet", + "title": "Innstillinger", + "video": "Video" + }, + "settingsView": { + "advanced": "Avansert", + "alertCancel": "Avbryt", + "alertOk": "OK", + "alertTitle": "Advarsel", + "alertURLText": "Den angitte server-URL-en er ugyldig", + "apply": "Bruk", + "buildInfoSection": "Bygginformasjon", + "conferenceSection": "Konferanse", + "disableCallIntegration": "Deaktiver integrasjon med native anrop", + "disableCrashReporting": "Deaktiver feilmeldingsrapportering", + "disableCrashReportingWarning": "Er du sikker på at du vil deaktivere feilmeldingsrapportering? Innstillingen vil bli brukt etter at du starter appen på nytt.", + "disableP2P": "Deaktiver Peer-To-Peer-modus", + "displayName": "Visningsnavn", + "displayNamePlaceholderText": "F.eks.: John Doe", + "email": "E-post", + "emailPlaceholderText": "email@eksempel.com", + "gavatarMessage": "Hvis e-posten din er knyttet til en Gravatar-konto, vil vi bruke den til å vise profilbildet ditt.", + "goTo": "Gå til", + "header": "Innstillinger", + "help": "Hjelp", + "links": "Lenker", + "privacy": "Personvern", + "profileSection": "Profil", + "sdkVersion": "SDK-versjon", + "serverURL": "Server-URL", + "showAdvanced": "Vis avanserte innstillinger", + "startCarModeInLowBandwidthMode": "Start bilmodus i modus for lav båndbredde", + "startWithAudioMuted": "Start med dempet lyd", + "startWithVideoMuted": "Start med deaktivert video", + "terms": "Vilkår", + "version": "App-versjon" + }, + "share": { + "dialInfoText": "\n\n=====\n\nVil du bare ringe inn via telefon?\n\n{{defaultDialInNumber}}Klikk denne lenken for å se innringingsnumrene for dette møtet\n{{dialInfoPageUrl}}", + "mainText": "Klikk på følgende lenke for å bli med i møtet:\n{{roomUrl}}" + }, + "speaker": "Taler", + "speakerStats": { + "angry": "Sint", + "disgusted": "Frastøtt", + "displayEmotions": "Vis følelser", + "fearful": "Redd", + "happy": "Glad", + "hours": "{{count}}t", + "labelTooltip": "Antall deltakere: {{count}}", + "minutes": "{{count}}m", + "name": "Navn", + "neutral": "Nøytral", + "sad": "Trist", + "search": "Søk", + "searchHint": "Søk etter deltakere", + "seconds": "{{count}}s", + "speakerStats": "Deltakerstatistikk", + "speakerTime": "Taletid", + "surprised": "Overrasket" + }, + "startupoverlay": { + "genericTitle": "Møtet må bruke mikrofonen og kameraet ditt.", + "policyText": " ", + "title": "{{app}} må bruke mikrofonen og kameraet ditt." + }, + "suspendedoverlay": { + "rejoinKeyTitle": "Bli med igjen", + "text": "Trykk på Bli med igjen-knappen for å koble til på nytt.", + "title": "Videosamtalen din ble avbrutt fordi denne datamaskinen gikk i dvale." + }, + "termsView": { + "title": "Vilkår" + }, + "toggleTopPanelLabel": "Veksle toppanel", + "toolbar": { + "Settings": "Innstillinger", + "accessibilityLabel": { + "Settings": "Åpne innstillinger", + "audioOnly": "Veksle kun lyd", + "audioRoute": "Velg lydenhet", + "boo": "Buu", + "breakoutRooms": "Grupperom", + "callQuality": "Administrer videokvalitet", + "carmode": "Bilmodus", + "cc": "Veksle undertekster", + "chat": "Åpne / Lukk chat", + "clap": "Applaus", + "closeChat": "Lukk chat", + "closeMoreActions": "Lukk menyen for flere handlinger", + "closeParticipantsPane": "Lukk deltakerpanelet", + "collapse": "Skjul", + "document": "Veksle delt dokument", + "documentClose": "Lukk delt dokument", + "documentOpen": "Åpne delt dokument", + "download": "Last ned våre apper", + "embedMeeting": "Bygg inn møte", + "endConference": "Avslutt møte for alle", + "enterFullScreen": "Vis i fullskjerm", + "enterTileView": "Aktiver rutenettvisning", + "exitFullScreen": "Avslutt fullskjerm", + "exitTileView": "Avslutt rutenettvisning", + "expand": "Utvid", + "feedback": "Legg igjen tilbakemelding", + "fullScreen": "Veksle fullskjerm", + "giphy": "Veksle GIPHY-meny", + "grantModerator": "Gi moderatorrettigheter", + "hangup": "Forlat møtet", + "heading": "Verktøylinje", + "help": "Hjelp", + "hideWhiteboard": "Skjul whiteboard", + "invite": "Inviter personer", + "kick": "Fjern deltaker", + "laugh": "Latter", + "leaveConference": "Forlat møtet", + "like": "Tommelen opp", + "linkToSalesforce": "Koble til Salesforce", + "lobbyButton": "Aktiver/deaktiver lobby-modus", + "localRecording": "Veksle kontroller for lokalt opptak", + "lockRoom": "Veksle møtepassord", + "love": "Hjerte", + "lowerHand": "Senk hånden", + "moreActions": "Flere handlinger", + "moreActionsMenu": "Meny for flere handlinger", + "moreOptions": "Vis flere alternativer", + "mute": "Demp mikrofon", + "muteEveryone": "Demp alle", + "muteEveryoneElse": "Demp alle andre", + "muteEveryoneElsesVideoStream": "Stopp video for alle andre", + "muteEveryonesVideoStream": "Stopp alles video", + "muteGUMPending": "Kobler til mikrofonen din", + "noiseSuppression": "Ekstra støydemping (BETA)", + "openChat": "Åpne chat", + "participants": "Åpne deltakerpanelet. {{participantsCount}} deltakere", + "pip": "Veksle bilde-i-bilde-modus", + "privateMessage": "Send privat melding", + "profile": "Rediger profilen din", + "raiseHand": "Rekk opp hånden", + "react": "Meldingsreaksjoner", + "reactions": "Reaksjoner", + "reactionsMenu": "Meny for reaksjoner", + "recording": "Veksle opptak", + "remoteMute": "Demp deltaker", + "remoteVideoMute": "Deaktiver deltakers kamera", + "security": "Sikkerhetsalternativer", + "selectBackground": "Velg bakgrunn", + "selfView": "Veksle selvvisning", + "shareRoom": "Inviter noen", + "shareYourScreen": "Start skjermdeling", + "shareaudio": "Del lyd", + "sharedvideo": "Del video", + "shortcuts": "Veksle snarveier", + "show": "Vis på scenen", + "showWhiteboard": "Vis whiteboard", + "silence": "Stillhet", + "speakerStats": "Veksle deltakerstatistikk", + "stopScreenSharing": "Stopp skjermdeling", + "stopSharedVideo": "Stopp video", + "surprised": "Overrasket", + "tileView": "Veksle rutenettvisning", + "toggleCamera": "Veksle kamera", + "toggleFilmstrip": "Veksle filmstripe", + "unmute": "Slå på mikrofon", + "videoblur": "Veksle uskarp bakgrunn", + "videomute": "Stopp kamera", + "videomuteGUMPending": "Kobler til kameraet ditt", + "videounmute": "Start kamera" + }, + "addPeople": "Legg til personer i samtalen din", + "audioOnlyOff": "Deaktiver modus for lav båndbredde", + "audioOnlyOn": "Aktiver modus for lav båndbredde", + "audioRoute": "Velg lydenhet", + "audioSettings": "Lydinnstillinger", + "authenticate": "Autentiser", + "boo": "Buu", + "callQuality": "Administrer videokvalitet", + "chat": "Åpne / Lukk chat", + "clap": "Applaus", + "closeChat": "Lukk chat", + "closeParticipantsPane": "Lukk deltakerpanelet", + "closeReactionsMenu": "Lukk reaksjonsmenyen", + "disableNoiseSuppression": "Deaktiver ekstra støydemping (BETA)", + "disableReactionSounds": "Du kan deaktivere reaksjonslyder for dette møtet", + "documentClose": "Lukk delt dokument", + "documentOpen": "Åpne delt dokument", + "download": "Last ned våre apper", + "e2ee": "Ende-til-ende-kryptering", + "embedMeeting": "Bygg inn møte", + "enableNoiseSuppression": "Aktiver ekstra støydemping (BETA)", + "endConference": "Avslutt møtet for alle", + "enterFullScreen": "Vis i fullskjerm", + "enterTileView": "Aktiver rutenettvisning", + "exitFullScreen": "Avslutt fullskjerm", + "exitTileView": "Avslutt rutenettvisning", + "feedback": "Legg igjen tilbakemelding", + "giphy": "Veksle GIPHY-meny", + "hangup": "Forlat møtet", + "help": "Hjelp", + "hideWhiteboard": "Skjul whiteboard", + "invite": "Inviter personer", + "joinBreakoutRoom": "Bli med i grupperom", + "laugh": "Latter", + "leaveBreakoutRoom": "Forlat grupperom", + "leaveConference": "Forlat møtet", + "like": "Tommelen opp", + "linkToSalesforce": "Koble til Salesforce", + "lobbyButtonDisable": "Deaktiver lobby-modus", + "lobbyButtonEnable": "Aktiver lobby-modus", + "login": "Logg inn", + "logout": "Logg ut", + "love": "Hjerte", + "lowerYourHand": "Senk hånden", + "moreActions": "Flere handlinger", + "moreOptions": "Flere alternativer", + "mute": "Demp mikrofon", + "muteEveryone": "Demp alle", + "muteEveryonesVideo": "Deaktiver alles kamera", + "muteGUMPending": "Kobler til mikrofonen din", + "noAudioSignalDesc": "Hvis du ikke dempet mikrofonen med systeminnstillinger eller maskinvare, vurder å bytte enhet.", + "noAudioSignalDescSuggestion": "Hvis du ikke dempet mikrofonen med systeminnstillinger eller maskinvare, vurder å bytte til den foreslåtte enheten.", + "noAudioSignalDialInDesc": "Du kan også ringe inn ved å bruke:", + "noAudioSignalDialInLinkDesc": "Innringingsnumre", + "noAudioSignalTitle": "Det er ingen lydinngang fra mikrofonen din!", + "noiseSuppression": "Ekstra støydemping (BETA)", + "noisyAudioInputDesc": "Det høres ut som mikrofonen din lager støy. Vurder å dempe eller bytte enhet.", + "noisyAudioInputTitle": "Mikrofonen din ser ut til å være støyende!", + "openChat": "Åpne chat", + "openReactionsMenu": "Åpne reaksjonsmeny", + "participants": "Deltakere", + "pip": "Aktiver bilde-i-bilde-modus", + "privateMessage": "Send privat melding", + "profile": "Rediger profilen din", + "raiseHand": "Rekk opp hånden", + "raiseYourHand": "Rekk opp hånden", + "reactionBoo": "Send buu-reaksjon", + "reactionClap": "Send applaus-reaksjon", + "reactionHeart": "Send hjerte-reaksjon", + "reactionLaugh": "Send latter-reaksjon", + "reactionLike": "Send tommel opp-reaksjon", + "reactionSilence": "Send stillhet-reaksjon", + "reactionSurprised": "Send overrasket-reaksjon", + "reactions": "Reaksjoner", + "security": "Sikkerhetsalternativer", + "selectBackground": "Velg bakgrunn", + "shareRoom": "Inviter noen", + "shareaudio": "Del lyd", + "sharedvideo": "Del video", + "shortcuts": "Vis hurtigtaster", + "showWhiteboard": "Vis whiteboard", + "silence": "Stillhet", + "speakerStats": "Deltakerstatistikk", + "startScreenSharing": "Start skjermdeling", + "startSubtitles": "Undertekster • {{language}}", + "stopAudioSharing": "Stopp deling av lyd", + "stopScreenSharing": "Stopp skjermdeling", + "stopSharedVideo": "Stopp video", + "stopSubtitles": "Stopp undertekster", + "surprised": "Overrasket", + "talkWhileMutedPopup": "Prøver du å snakke? Du er dempet.", + "tileViewToggle": "Veksle rutenettvisning", + "toggleCamera": "Veksle kamera", + "unmute": "Slå på mikrofon", + "videoSettings": "Videoinnstillinger", + "videomute": "Stopp kamera", + "videomuteGUMPending": "Kobler til kameraet ditt", + "videounmute": "Start kamera" + }, + "transcribing": { + "ccButtonTooltip": "Start / Stopp undertekster", + "expandedLabel": "Transkribering er for øyeblikket på", + "failed": "Transkribering mislyktes", + "labelToolTip": "Møtet blir transkribert", + "sourceLanguageDesc": "For øyeblikket er møtespråket satt til {{sourceLanguage}}.
Du kan endre det ", + "sourceLanguageHere": "her", + "start": "Start visning av undertekster", + "stop": "Stopp visning av undertekster", + "subtitles": "Undertekster", + "subtitlesOff": "Av", + "tr": "TR" + }, + "unpinParticipant": "{{participantName}} - Løsne", + "userMedia": { + "grantPermissions": "Vennligst gi tillatelser for å bruke kameraet og mikrofonen din." + }, + "videoSIPGW": { + "busy": "Vi jobber med å frigjøre ressurser. Vennligst prøv igjen om noen minutter.", + "busyTitle": "Romtjenesten er for øyeblikket opptatt", + "errorAlreadyInvited": "{{displayName}} er allerede invitert", + "errorInvite": "Konferansen er ikke opprettet ennå. Vennligst prøv igjen senere.", + "errorInviteFailed": "Vi jobber med å løse problemet. Vennligst prøv igjen senere.", + "errorInviteFailedTitle": "Invitasjon til {{displayName}} mislyktes", + "errorInviteTitle": "Feil ved invitasjon av rom", + "pending": "{{displayName}} har blitt invitert" + }, + "videoStatus": { + "adjustFor": "Juster for:", + "audioOnly": "LYD", + "audioOnlyExpanded": "Du er i modus for lav båndbredde. I denne modusen vil du kun motta lyd og skjermdeling.", + "bestPerformance": "Beste ytelse", + "callQuality": "Videokvalitet (0 for best ytelse, 3 for høyeste kvalitet)", + "hd": "HD", + "hdTooltip": "Ser video i høy oppløsning", + "highDefinition": "Høy oppløsning", + "highestQuality": "Høyeste kvalitet", + "labelTooiltipNoVideo": "Ingen video", + "labelTooltipAudioOnly": "Modus for lav båndbredde aktivert", + "ld": "LD", + "ldTooltip": "Ser video i lav oppløsning", + "lowDefinition": "Lav oppløsning", + "performanceSettings": "Ytelsesinnstillinger", + "recording": "Opptak pågår", + "sd": "SD", + "sdTooltip": "Ser video i standard oppløsning", + "standardDefinition": "Standard oppløsning", + "streaming": "Direktesending pågår" + }, + "videothumbnail": { + "connectionInfo": "Tilkoblingsinformasjon", + "demote": "Flytt til seer", + "domute": "Demp", + "domuteOthers": "Demp alle andre", + "domuteVideo": "Deaktiver kamera", + "domuteVideoOfOthers": "Deaktiver kamera for alle andre", + "flip": "Snu", + "grantModerator": "Gi moderatorrettigheter", + "hideSelfView": "Skjul selvvisning", + "kick": "Fjern deltaker", + "mirrorVideo": "Speil videoen min", + "moderator": "Moderator", + "mute": "Deltaker er dempet", + "muted": "Dempet", + "pinToStage": "Fest til scenen", + "remoteControl": "Start / Stopp fjernkontroll", + "screenSharing": "Deltaker deler skjermen sin", + "show": "Vis på scenen", + "showSelfView": "Vis selvvisning", + "unpinFromStage": "Løsne", + "verify": "Bekreft deltaker", + "videoMuted": "Kamera deaktivert", + "videomute": "Deltakeren har stoppet kameraet" + }, + "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Nåværende bakgrunn: {{background}}", + "selectBackground": "Velg en bakgrunn" + }, + "addBackground": "Legg til bakgrunn", + "apply": "Bruk", + "backgroundEffectError": "Kunne ikke bruke bakgrunnseffekten.", + "blur": "Uskarp", + "deleteImage": "Slett bilde", + "desktopShare": "Skjermdeling", + "desktopShareError": "Kunne ikke opprette skjermdeling", + "image1": "Strand", + "image2": "Hvit nøytral vegg", + "image3": "Hvitt tomt rom", + "image4": "Svart gulvlampe", + "image5": "Fjell", + "image6": "Skog", + "image7": "Soloppgang", + "none": "Ingen", + "pleaseWait": "Vennligst vent…", + "removeBackground": "Fjern bakgrunn", + "slightBlur": "Delvis uskarp", + "title": "Virtuelle bakgrunner", + "uploadedImage": "Opplastet bilde {{index}}", + "webAssemblyWarning": "WebAssembly ikke støttet", + "webAssemblyWarningDescription": "WebAssembly er deaktivert eller ikke støttet av denne nettleseren" + }, + "visitors": { + "chatIndicator": "(seer)", + "joinMeeting": { + "description": "Du er for øyeblikket en seer i denne konferansen.", + "raiseHand": "Rekk opp hånden", + "title": "Bli med i møtet", + "wishToSpeak": "Hvis du ønsker å snakke, vennligst rekk opp hånden nedenfor og vent på godkjenning fra moderator." + }, + "labelTooltip": "Antall seere: {{count}}", + "notification": { + "demoteDescription": "Sendt hit av {{actor}}, rekk opp hånden for å delta", + "noMainParticipantsDescription": "En deltaker må starte møtet. Vennligst prøv igjen om litt.", + "noMainParticipantsTitle": "Dette møtet har ikke startet ennå.", + "noVisitorLobby": "Du kan ikke bli med så lenge lobbyen er aktivert for møtet.", + "notAllowedPromotion": "En deltaker må godkjenne forespørselen din først.", + "title": "Du er en seer i møtet" + }, + "waitingMessage": "Du blir med i møtet så snart det er live!" + }, + "volumeSlider": "Volumkontroll", + "welcomepage": { + "accessibilityLabel": { + "join": "Trykk for å bli med", + "roomname": "Skriv inn romnavn" + }, + "addMeetingName": "Legg til møtenavn", + "appDescription": "Sett i gang, ha videosamtaler med hele teamet. Faktisk, inviter alle du kjenner. {{app}} er en fullstendig kryptert, 100 % åpen kildekode videokonferanseløsning som du kan bruke hele dagen, hver dag, gratis — uten behov for konto.", + "audioVideoSwitch": { + "audio": "Stemme", + "video": "Video" + }, + "calendar": "Kalender", + "connectCalendarButton": "Koble til kalenderen din", + "connectCalendarText": "Koble til kalenderen din for å se alle møtene dine i {{app}}. I tillegg kan du legge til {{provider}}-møter i kalenderen din og starte dem med ett klikk.", + "enterRoomTitle": "Start et nytt møte", + "getHelp": "Få hjelp", + "go": "GÅ", + "goSmall": "GÅ", + "headerSubtitle": "Sikre møter av høy kvalitet", + "headerTitle": "Jitsi Meet", + "info": "Innringingsinformasjon", + "jitsiOnMobile": "Jitsi på mobil – last ned appene våre og start et møte fra hvor som helst", + "join": "OPPRETT / BLI MED", + "logo": { + "calendar": "Kalenderlogo", + "desktopPreviewThumbnail": "Forhåndsvisningsminiatyr for skrivebord", + "googleLogo": "Google-logo", + "logoDeepLinking": "Jitsi Meet-logo", + "microsoftLogo": "Microsoft-logo", + "policyLogo": "Retningslinjelogo" + }, + "meetingsAccessibilityLabel": "Møter", + "mobileDownLoadLinkAndroid": "Last ned mobilappen for Android", + "mobileDownLoadLinkFDroid": "Last ned mobilappen for F-Droid", + "mobileDownLoadLinkIos": "Last ned mobilappen for iOS", + "moderatedMessage": "Eller bestill en møtelink på forhånd hvor du er den eneste moderator.", + "privacy": "Personvern", + "recentList": "Nylige", + "recentListDelete": "Slett oppføring", + "recentListEmpty": "Listen din er for øyeblikket tom. Chat med teamet ditt, så finner du alle dine nylige møter her.", + "recentMeetings": "Dine nylige møter", + "reducedUIText": "Velkommen til {{app}}!", + "roomNameAllowedChars": "Møtenavnet skal ikke inneholde noen av disse tegnene: ?, &, :, ', \", %, #.", + "roomname": "Skriv inn romnavn", + "roomnameHint": "Skriv inn navnet eller URL-en til rommet du vil bli med i. Du kan finne på et navn, bare sørg for at de du møter vet det slik at de skriver inn det samme navnet.", + "sendFeedback": "Send tilbakemelding", + "settings": "Innstillinger", + "startMeeting": "Start møte", + "terms": "Vilkår", + "title": "Sikker, fullverdig og helt gratis videokonferanse", + "upcomingMeetings": "Dine kommende møter" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Whiteboard" + }, + "screenTitle": "Whiteboard" + } +} diff --git a/lang/main-oc.json b/lang/main-oc.json index e7acd87065f8..1d4f3b8fe046 100644 --- a/lang/main-oc.json +++ b/lang/main-oc.json @@ -1,36 +1,39 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "Ligam de la reünion : {{url}}" + }, "add": "Convidar", "addContacts": "Convidatz vòstres contactes", "contacts": "contactes", - "copyInvite": "Copiar l’invitacion a la conferéncia", - "copyLink": "Copiar lo ligam de la conferéncia", + "copyInvite": "Copiar l’invitacion a la reünion", + "copyLink": "Copiar lo ligam de la reünion", "copyStream": "Copiar lo ligam de la difusion en dirècte", "countryNotSupported": "Sèm pas encara compatibles amb aquesta destinacion.", "countryReminder": "Sonatz defòra los US ? Mercés de vos assegurar de començar amb lo còdi país.", "defaultEmail": "Vòstre email per defaut", "disabled": "Podètz pas convidar de monde.", "failedToAdd": "Fracàs de l'ajust de participants", - "footerText": "Sonadas ext. desactivadas.", "googleEmail": "Google Email", - "inviteMoreHeader": "Sètz l’unica persona de la conferéncia", - "inviteMoreMailSubject": "Rejónher la conferéncia {{appName}}", + "inviteMoreHeader": "Sètz l’unica persona de la reünion", + "inviteMoreMailSubject": "Rejónher la reünion {{appName}}", "inviteMorePrompt": "Convidar mai de monde", "linkCopied": "Ligam copiat al quichapapièrs", "noResults": "Pas cap de resultat trobat", "outlookEmail": "Outlook Email", "phoneNumbers": "numèros de telefòn", - "searching": "Recèrca...", - "shareInvite": "Partejar invitacion conferéncia", - "shareLink": "Partejar lo ligam de la conferéncia per convidar de monde", + "searching": "Recèrca…", + "shareInvite": "Partejar l’invitacion a la reünion", + "shareLink": "Partejar lo ligam de la reünion per convidar de monde", "shareStream": "Partejar la ligam de la difusion en dirècte", "sipAddresses": "adreças sip", "telephone": "Telefòn : {{number}}", - "title": "Convidatz de monde a vòstra conferéncia", + "title": "Convidatz de monde a vòstra reünion", "yahooEmail": "Yahoo Email" }, "audioDevices": { "bluetooth": "Bluetooth", + "car": "Àudio veitura", "headphones": "Escotadors", "none": "Cap de periferic àudio pas disponible", "phone": "Telefòn", @@ -39,8 +42,17 @@ "audioOnly": { "audioOnly": "Benda passanta febla" }, - "blankPage": { - "meetingEnded": "Conferéncia acabada." + "bandwidthSettings": { + "assumedBandwidthBps": "ex.10000000 per 10 Mbps", + "assumedBandwidthBpsWarning": "De valors mai nautas pòdon causar de problèmas de ret.", + "customValue": "valor personalizada", + "customValueEffect": "per definir la valor bps reala", + "leaveEmpty": "daissar void", + "leaveEmptyEffect": "per permetre las estimacions", + "possibleValues": "Valors possiblas", + "setAssumedBandwidthBps": "Benda passanta estimada (bps)", + "title": "Paramètres de debit", + "zeroEffect": "per desactivar la vidèo" }, "breakoutRooms": { "actions": { @@ -51,15 +63,22 @@ "leaveBreakoutRoom": "Quitar la sala de reünion", "more": "Mai", "remove": "Levar", + "rename": "Renomenar", + "renameBreakoutRoom": "Renomenar la sala d’espèra", "sendToBreakoutRoom": "Enviar lo participant a :" }, + "breakoutList": "Lista de salas petitas", + "buttonLabel": "Salas per gropons", "defaultName": "Sala de reünion #{{index}}", + "hideParticipantList": "Rescondre la lista de participants", "mainRoom": "Sala principala", "notifications": { "joined": "Dintrada a la sala suplementària « {{name}} »", "joinedMainRoom": "Retorn a la sala principala", "joinedTitle": "Salas suplementàrias" - } + }, + "showParticipantList": "Mostrar la lista de participants", + "title": "Salas per gropons" }, "calendarSync": { "addMeetingURL": "Ajustar un ligam de reünion", @@ -70,33 +89,46 @@ "notSignedIn": "Una error s’es producha pendent l’autentificacion per veire los eveniments del calendièr. Verificatz los paramètres del calendièr e connectatz-vos tornamai." }, "join": "Jónher", - "joinTooltip": "Rejónher la conferéncia", - "nextMeeting": "conferéncia venenta", + "joinTooltip": "Rejónher la reünion", + "nextMeeting": "reünion venenta", "noEvents": "Cap d’eveniments venents pas prevists.", - "ongoingMeeting": "conferéncia en cors", + "ongoingMeeting": "Reünion en cors", "permissionButton": "Dobrir los paramètres", "permissionMessage": "La permission pel calendari es necessària per listar vòstres RDV dins l’aplicacion.", "refresh": "Actualizar lo calendari", "today": "Uèi" }, + "carmode": { + "actions": { + "selectSoundDevice": "Seleccionar lo periferic àudio" + }, + "labels": { + "buttonLabel": "Mòde veitura", + "title": "Mòde veitura", + "videoStopped": "Vòstra vidèo es arrestada" + } + }, "chat": { "enter": "Dintrar dins la sala", "error": "Error : lo messatge es pas estat enviat. Rason : {{error}}", "fieldPlaceHolder": "Picatz vòstre messatge aquí", + "lobbyChatMessageTo": "Messatge de la sala d'espèra per {{recipient}}", "message": "Messatge", "messageAccessibleTitle": "{{user}} ditz :", "messageAccessibleTitleMe": "disi :", "messageTo": "Messatge privat per {{recipient}}", "messagebox": "Picatz un messatge", + "newMessages": "Messatges novèls", "nickname": { "popover": "Causissètz un escais", "title": "Picatz un escais-nom per utilizar la messatjariá", "titleWithPolls": "Picatz un escais-nom per utilizar la messatjariá" }, - "noMessagesMessage": "I a pas cap de messatge dins la conferéncia pel moment. Començat una conversacion aquí !", + "noMessagesMessage": "I a pas cap de messatge dins la reünion pel moment. Començat una conversacion aquí !", "privateNotice": "Messatge privat per {{recipient}}", "sendButton": "Mandar", "smileysPanel": "Panèl d’Emoji", + "systemDisplayName": "Sistèma", "tabs": { "chat": "Messatjariá", "polls": "Sondatges" @@ -107,6 +139,7 @@ }, "chromeExtensionBanner": { "buttonText": "Installar l’extension Chrome", + "buttonTextEdge": "Installar l'extension Edge", "close": "Tampar", "dontShowAgain": "Me mostrar pas mai aquò", "installExtensionText": "Installar l’extension per l’integracion de Google Calendar e Office 365" @@ -124,9 +157,9 @@ "DISCONNECTED": "Desconnectat", "DISCONNECTING": "Desconnexion en cors", "ERROR": "Error", - "FETCH_SESSION_ID": "Obtencion de session-id...", + "FETCH_SESSION_ID": "Obtencion de session-id…", "GET_SESSION_ID_ERROR": "Obténer l’error session-id : {{code}}", - "GOT_SESSION_ID": "Obtencion de session-id... Fach", + "GOT_SESSION_ID": "Obtencion de session-id… Fach", "LOW_BANDWIDTH": "La vidèo per {{displayName}} es estada copada per estalviar la banda passanta" }, "connectionindicator": { @@ -137,6 +170,7 @@ "bridgeCount": "Nombre de servidor : ", "codecs": "Codecs (A/V) : ", "connectedTo": "Connectat a :", + "e2eeVerified": "E2EE verificat :", "framerate": "Frequéncia imatge :", "less": "Amagar lo detalh", "localaddress": "Adreça locala :", @@ -145,6 +179,7 @@ "localport_plural": "Pòrts locals :", "maxEnabledResolution": "enviar max", "more": "Ne veire mai", + "no": "non", "packetloss": "Pèrda de paquets :", "participant_id": "Id participant :", "quality": { @@ -163,7 +198,8 @@ "status": "Connexion :", "transport": "Transpòrt :", "transport_plural": "Transpòrts :", - "video_ssrc": "Vidèo SSRC :" + "video_ssrc": "Vidèo SSRC :", + "yes": "òc" }, "dateUtils": { "earlier": "Mai d’ora", @@ -171,15 +207,25 @@ "yesterday": "Ièr" }, "deepLinking": { - "appNotInstalled": "Vos cal l’aplicacion {{app}} per jónher la conferéncia amb vòstre mobil.", - "description": "Res s’es pas passat ? Avèm ensajat de lançar la conferéncia dins l’aplicacion {{app}}. Mercés de tornar ensajar o de la lançar dins l’aplicacion web {{app}}.", - "descriptionWithoutWeb": "Res se passa pas ? Avèm ensajat de lançar la conferéncia dins l’aplicacion de burèu {{app}}.", + "appNotInstalled": "Vos cal l’aplicacion {{app}} per jónher la reünion amb vòstre mobil.", + "description": "Res s’es pas passat ? Avèm ensajat de lançar la reünion dins l’aplicacion {{app}}. Mercés de tornar ensajar o de la lançar dins l’aplicacion web {{app}}.", + "descriptionNew": "Pas res se's pas produsit ? Avèm ensajat de lançar vòstra reünion dins l'aplicacion de burèu {{app}}.

Podètz tornar ensajar o la lançar sul web.", + "descriptionWithoutWeb": "Res se passa pas ? Avèm ensajat de lançar la reünion dins l’aplicacion de burèu {{app}}.", "downloadApp": "Telecargar l’aplicacion", + "downloadMobileApp": "Telecargar de l'App Store", "ifDoNotHaveApp": "S’avètz pas encara l’aplicacion :", "ifHaveApp": "S’avètz ja l’aplicacion :", - "joinInApp": "Rejónher la conferéncia en utilizant l’aplicacion", + "joinInApp": "Rejónher la reünion en utilizant l’aplicacion", + "joinInAppNew": "Rejónher dins l'aplicacion", + "joinInBrowser": "Rejónher dins lo navegador", + "launchMeetingLabel": "Cossí volètz rejónher aquesta reünion ?", "launchWebButton": "Lançar del navigador", - "title": "Aviada de vòstra conferéncia dins {{app}}…", + "noDesktopApp": "Avètz pas l'aplicacion ?", + "noMobileApp": "Avètz pas l'aplicacion ?", + "or": "O", + "termsAndConditions": "En contunhant, acceptatz nòstras condicions generalas d'utilizacion.", + "title": "Aviada de vòstra reünion dins {{app}}…", + "titleNew": "Lançament de la reünion…", "tryAgainButton": "Tornar ensajar del burèu", "unsupportedBrowser": "Sembla qu’utilizatz un navigador que prenèm pas en carga." }, @@ -192,11 +238,20 @@ "microphonePermission": "Error d'obtencion de la permission pel microfòn" }, "deviceSelection": { + "hid": { + "callControl": "Contraròtle de las sonadas", + "connectedDevices": "Aparelhs connectats :", + "deleteDevice": "Suprimir lo periferic", + "pairDevice": "Associar un aparelh" + }, "noPermission": "Autorizacion pas acordada", "previewUnavailable": "Apercebut pas disponible", "selectADevice": "Seleccionatz un aparelh", "testAudio": "Legir un son de pròva" }, + "dialIn": { + "screenTitle": "Resumit de la sonada" + }, "dialOut": { "statusMessage": "ara es {{status}}" }, @@ -209,13 +264,23 @@ "Share": "Partejar", "Submit": "Validar", "WaitForHostMsg": "La conferéncia a pas encara començat. Se sètz l’òst volgatz ben vos identificar. Autrament esperatz qu’arribe l’òste.", - "WaitingForHostTitle": "En espèra de l’òste...", + "WaitForHostNoAuthMsg": "La conferéncia a pas encara començat perque cap de moderator es pas encara arribat. Volgatz esperar.", + "WaitingForHostButton": "Esperar l'òste", + "WaitingForHostTitle": "En espèra de l’òste…", "Yes": "Òc", "accessibilityLabel": { - "liveStreaming": "Difusion en dirècte" + "Cancel": "Anullar (quitar la fenèstra)", + "Ok": "D'acòrdi (salvagardar e tampar la fenèstra)", + "close": "Tampar la fenèstra", + "liveStreaming": "Difusion en dirècte", + "sharingTabs": "Opcions de partatge" }, "add": "Ajustar", + "addMeetingNote": "Ajustar una nòta a aquesta reünion", + "addOptionalNote": "Ajustar una nòta (opcionala) :", "allow": "Autorizar", + "allowToggleCameraDialog": "Permetre a {{initiatorName}} de bascular lo mòde de la camèra ?", + "allowToggleCameraTitle": "Permetre lo cambiament de mòde de camèra ?", "alreadySharedVideoMsg": "Un autre participant parteja ja sa vidèo. Aquesta conferéncia permet pas qu’un partatge de vidèo a l’encòp.", "alreadySharedVideoTitle": "Solament un partatge de vidèo a l'encòp es autorizat", "applicationWindow": "Fenèstra de l'aplicacion", @@ -242,20 +307,24 @@ "contactSupport": "Contactar l'assisténcia", "copied": "Copiat", "copy": "Copiar", + "demoteParticipantDialog": "Volètz vertadièrament desplaçar aqueste participant en visitor ?", + "demoteParticipantTitle": "Desplaçar en visitor", "dismiss": "Regetar", "displayNameRequired": "Adiu ! Cossí vos dison ?", "done": "Tampar", - "e2eeDescription": "Lo chiframent del cap a la fin es actualament EXPERIMENTALA. Mercés de gardar a l'esperit qu'activar lo chiframent del cap a la fin desactivarà en efièch los servicis costat servidor coma : l'enregistrament, la difusion en dirècte e las participacions telefonicas. Remembratz tanben que la conferéncia foncionarà pas que per lo monde que participan amb un navigador compatible amb los fluxes inseribles.", + "e2eeDescription": "Lo chiframent del cap a la fin es actualament EXPERIMENTALA. Mercés de gardar a l'esperit qu'activar lo chiframent del cap a la fin desactivarà en efièch los servicis costat servidor coma : l'enregistrament, la difusion en dirècte e las participacions telefonicas. Remembratz tanben que la reünion foncionarà pas que per lo monde que participan amb un navigador compatible amb los fluxes inseribles.", "e2eeDisabledDueToMaxModeDescription": "Impossible d'activar lo chiframent del cap a la fin a causa d'un nombre tròp bèl de participants dins la conferéncia.", "e2eeLabel": "Activar lo chiframant del cap a la fin", - "e2eeWarning": "AVERTIMENT : pas totes los participants d'aquesta conferéncia semblan poder suportar lo chiframent del cap a la fin. Se l'activatz poiràn pas vos veire nimai vos entendre.", + "e2eeWarning": "AVERTIMENT : pas totes los participants d'aquesta reünion semblan poder suportar lo chiframent del cap a la fin. Se l'activatz poiràn pas vos veire nimai vos entendre.", "e2eeWillDisableDueToMaxModeDescription": "AVERTIMENT : lo chiframent del cap a la fin serà automaticament desactivat se mai de participants rejonhent la conferéncia.", - "embedMeeting": "Integrar la conferéncia", + "embedMeeting": "Integrar la reünion", "enterDisplayName": "Volgatz picar vòstre nom aquí", "error": "Error", + "errorRoomCreationRestriction": "Avètz ensajat de rejónher tròp rapidament, volètz tornar d'aquí un moment.", "gracefulShutdown": "Lo servici es actualament en mantenença. Ensajatz tornamai pus tard.", - "grantModeratorDialog": "Volètz vertadièrament far venir aqueste participant moderator ?", + "grantModeratorDialog": "Volètz vertadièrament far venir {{participantName}} moderator ?", "grantModeratorTitle": "Passar moderator", + "hide": "Rescondre", "hideShareAudioHelper": "Afichar pas mai aquesta fenèstra", "incorrectPassword": "Nom de compte o senhal incorrècte", "incorrectRoomLockPassword": "Senhal incorrècte", @@ -265,18 +334,21 @@ "kickParticipantButton": "Forabandir", "kickParticipantDialog": "Volètz vertadièrament forabandir aqueste participant ?", "kickParticipantTitle": "Forabandir aqueste participant ?", - "kickTitle": "Ai ! {{participantDisplayName}} vos a forabandit de la conferéncia", + "kickSystemTitle": "Ai ! Vos an forabandit de la reünion", + "kickTitle": "Ai ! {{participantDisplayName}} vos a forabandit de la reünion", + "linkMeeting": "Ligam de la reünion", + "linkMeetingTitle": "Ligar la reünion a Salesforce", "liveStreaming": "La difusion en dirècte es estada arrestada", "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Impossible pendent un enregistrament actiu", - "liveStreamingDisabledTooltip": "Difusion en dirècte desactivada.", "localUserControls": "Contraròtles de l’utilizaire local", "lockMessage": "Impossible de verrolhar la conferéncia.", - "lockRoom": "Ajustar un $t(lockRoomPasswordUppercase) a la conferéncia", + "lockRoom": "Ajustar un $t(lockRoomPassword) a la reünion", "lockTitle": "Fracàs del verrolhatge", "login": "Connexion", + "loginQuestion": "Volètz vertadièrament vos connectar e quitar la conferéncia ?", "logoutQuestion": "Sètz segur que vos volètz desconnectar e arrestar la conferéncia ?", "logoutTitle": "Desconnexion", - "maxUsersLimitReached": "La limita de nombre maximum de participant es estada atenguda. La conferéncia es complèta. Contactatz lo proprietari de la conferéncia o tornatz ensajar mai tard.", + "maxUsersLimitReached": "La limita de nombre maximum de participant es estada atenguda. La reünion es complèta. Contactatz lo proprietari de la conferéncia o tornatz ensajar mai tard.", "maxUsersLimitReachedTitle": "Limita de participants maximum atenguda", "micConstraintFailedError": "Vòstre microfòn satisfà pas totas las constrentas necessàrias.", "micNotFoundError": "Lo microfòn es pas estat trobat.", @@ -310,19 +382,17 @@ "muteParticipantsVideoTitle": "Desactivar la camèra d’aqueste participant ?", "noDropboxToken": "Cap de geton Dropbox pas valid", "password": "Senhal", - "passwordLabel": "Aquesta conferéncia es estada barrada per un participant. Mercés de dintrar lo $t(lockRoomPassword) per la rejónher.", - "passwordNotSupported": "Ajustar un $t(lockRoomPassword) a una conferéncia es pas suportat.", + "passwordLabel": "Aquesta reünion es estada barrada per un participant. Mercés de dintrar lo $t(lockRoomPassword) per la rejónher.", + "passwordNotSupported": "Ajustar un $t(lockRoomPassword) a una reünion es pas suportat.", "passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) pas suportat", "passwordRequired": "$t(lockRoomPasswordUppercase) requesit", "permissionCameraRequiredError": "L’autorizacion de la camèra es requerida per participar a la conferéncia amb la vidèo. Mercés de la donar als Paramètres", "permissionErrorTitle": "Autorizacion requerida", "permissionMicRequiredError": "L’autorizacion del microfòn es requerida per participar a la conferéncia amb l’àudio. Mercés de la donar als Paramètres", - "popupError": "Vòstre navigador bloca las fenèstras que sorgisson a partir d'aqueste site. Mercés d'activar aquelas fenèstras dins los paramètres de vòstre navigador e de tornar ensajar.", - "popupErrorTitle": "Fenèstra que sorgís blocada", "readMore": "mai", + "recentlyUsedObjects": "Vòstres objectes recentament utilizats", "recording": "Enregistrament", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible pendent una difusion activa", - "recordingDisabledTooltip": "L’enregistrament es desactivat.", "rejoinNow": "Participar ara", "remoteControlAllowedMessage": "{{user}} a acceptat vòstra demanda de contraròtle alonhat !", "remoteControlDeniedMessage": "{{user}} a refusat vòstra demanda de contraròtle alonhat !", @@ -335,6 +405,8 @@ "removePassword": "Suprimir lo $t(lockRoomPassword)", "removeSharedVideoMsg": "Sètz segur que volètz suprimir vòstra vidèo partejada ?", "removeSharedVideoTitle": "Suprimir la vidèo partejada", + "renameBreakoutRoomLabel": "Nom de la sala", + "renameBreakoutRoomTitle": "Renomenar la sala petita", "reservationError": "Error del sistèma de reservacion", "reservationErrorMsg": "Còdi d'error: {{code}}, messatge: {{msg}}", "retry": "Ensajar tornamai", @@ -342,14 +414,22 @@ "screenSharingFailed": "Ops ! Quicòm a trucat, avèm pas pogut començar lo partiment d'ecran!", "screenSharingFailedTitle": "Fracàs del partiment d'ecran !", "screenSharingPermissionDeniedError": "Òps ! Quicòm s'es pas ben passat amb l'autorizacion de vòstra autorizacion de partatge d'ecran. Mercés de recargar e tornar ensajar.", + "searchInSalesforce": "Cercar dins Salesforce", + "searchResults": "Resultats de recèrca ({{count}})", + "searchResultsDetailsError": "S'es produsit un problèma en recuperant las donadas del proprietari.", + "searchResultsError": "Un problèma s'es produsit pendent la recuperacion de las donadas.", + "searchResultsNotFound": "Cap de resultat pas trobat.", + "searchResultsTryAgain": "Ensajatz d'utilizar d'autres mots clau.", "sendPrivateMessage": "Avètz recentament recebut un messatge privat. Avètz ensajat d’i respondre en privat, o volètz enviar lo messatge al grop ?", "sendPrivateMessageCancel": "Enviar al grop", "sendPrivateMessageOk": "Enviar en privat", "sendPrivateMessageTitle": "Enviar en privat ?", "serviceUnavailable": "Servici indisponible", "sessTerminated": "Sonada acabada", + "sessTerminatedReason": "La sonada es terminada", "sessionRestarted": "Sonada reaviada a causa d’un problèma de connexion.", "shareAudio": "Contunhar", + "shareAudioAltText": "Per partejar lo contengut volgut, anatz a « Onglet del navegador », seleccionatz lo contengut, activatz lo boton « partejar l'àudio » puèi clicatz lo boton « partejar »", "shareAudioTitle": "Cossí partejar l’àudio", "shareAudioWarningD1": "devètz arrestar lo partiment d’ecran abans lo partiment d’àudio.", "shareAudioWarningD2": "devètz reaviar lo partiment d’ecran e clicar l’opcion « partejar l’àudio ».", @@ -360,11 +440,17 @@ "shareScreenWarningD2": "devètz arrestar lo partiment àudio, aviar lo partiment d’ecran e clicar l’opcion « partejar l’àudio ».", "shareScreenWarningH1": "Se volètz partejar pas que l’ecran :", "shareScreenWarningTitle": "Devètz arrestar lo partiment àudio abans lo partiment de l’ecran", + "shareVideoConfirmPlay": "Sètz a mand de dobrir un site web extèrn. Volètz persègre ?", + "shareVideoConfirmPlayTitle": "{{name}} a partejat una vidèo amb vos.", "shareVideoLinkError": "Se vos plai, provesissètz un ligam foncional.", + "shareVideoLinkStopped": "La vidèo de {{name}} se's arrestat.", "shareVideoTitle": "Partejar una vidèo", "shareYourScreen": "Partejar vòstre ecran", "shareYourScreenDisabled": "Lo partiment d’ecran es desactivat.", + "sharedVideoDialogError": "Error : URL invalida", "sharedVideoLinkPlaceholder": "Ligam YouTube o ligam vidèo dirèct", + "show": "Mostrar", + "start": "Lançar ", "startLiveStreaming": "Aviar una difusion en dirècte", "startRecording": "Arrestar l'enregistrament", "startRemoteControlErrorMessage": "Una error s'es produsida en ensajar de començar la session de contraròtle a distància !", @@ -376,16 +462,42 @@ "thankYou": "Mercé d'aver utilizat {{appName}} !", "token": "geton", "tokenAuthFailed": "O planhèm, sètz pas autorizat a rejónher l'apèl.", + "tokenAuthFailedReason": { + "audInvalid": "Valor invalida `aud`. Deu èsser `jitsi`.", + "contextNotFound": "L'objècte `context` es absent de la carga utila.", + "expInvalid": "Valor `exp` invalida.", + "featureInvalid": "Foncionalitat invalida : {{feature}}, probablament pas encara implementada.", + "featureValueInvalid": "Valor invalida per la foncionalitat : {{feature}}.", + "featuresNotFound": "L'objècte `features` es absent de la carga utila.", + "headerNotFound": "Entèsta pas trobada.", + "issInvalid": "Valor`iss` invalida. Deu èsser `chat`.", + "kidMismatch": "Key ID (kid) correspond pas al sub.", + "kidNotFound": "Key ID (kid) absent.", + "nbfFuture": "La valor `nbf` es dins lo futur.", + "nbfInvalid": "Valor `nbf` invalida.", + "payloadNotFound": "Carga utila pas trobada.", + "tokenExpired": "Lo geton a expirat." + }, "tokenAuthFailedTitle": "Fracàs de l'autentificacion", + "tokenAuthFailedWithReasons": "Avètz pas lo drech de rejónher la sonada. La rason possiblva : {{reason}}", + "tokenAuthUnsupported": "Geton URL pas pres en carga.", "transcribing": "Transcripcion", - "unlockRoom": "Suprimir lo $t(lockRoomPassword) de la conferéncia", + "unlockRoom": "Suprimir lo $t(lockRoomPassword) de la reünion", "user": "utilizaire", "userIdentifier": "Identificador utilizaire", "userPassword": "senhal utilizaire", + "verifyParticipantConfirm": "Correspondon", + "verifyParticipantDismiss": "Correspondon pas", + "verifyParticipantQuestion": "EXPERIMENTAL : demandar al participant {{participantName}} se vei lo meteis contengut, dins lo meteis òrdre.", + "verifyParticipantTitle": "Verificacion utilizaire", "videoLink": "ligam vidèo", "viewUpgradeOptions": "Veire las opcions de mesa a nivèl", "viewUpgradeOptionsContent": "Per obténer un accès sens limit a las foncionalitats premium coma l’enregistrament, la transcripcion, la difusion RTMP e encara mai, devètz passar al nivèl superior.", "viewUpgradeOptionsTitle": "Avètz descobèrt una foncionalitat premium !", + "whiteboardLimitContent": "Lo limit del tablèu blanc es atengut.", + "whiteboardLimitReference": "Per mai d'informacions mercés de consultar", + "whiteboardLimitReferenceUrl": "nòstre site web", + "whiteboardLimitTitle": "Utilizacion del tablèu blanc limitada", "yourEntireScreen": "Vòstre ecran complet" }, "documentSharing": { @@ -395,9 +507,12 @@ "labelToolTip": "La comunicacion àudio e vidèo d’aquesta sonada es chifrada del cap a la fin" }, "embedMeeting": { - "title": "Integrar aquesta conferéncia" + "title": "Integrar aquesta reünion" }, "feedback": { + "accessibilityLabel": { + "yourChoice": "Vòstra causida : {{rating}}" + }, "average": "Mejana", "bad": "Marrida", "detailsLabel": "Digatz-nos-ne mai a prepaus d’aquò.", @@ -407,8 +522,14 @@ "veryBad": "Fòrça marrida", "veryGood": "Fòrça bona" }, - "helpView": { - "title": "Centre d’ajuda" + "filmstrip": { + "accessibilityLabel": { + "heading": "Miniaturas vidèo" + } + }, + "giphy": { + "noResults": "Cap de resultat de recèrca pas trobat :(", + "search": "Recercar dins GIPHY" }, "incomingCall": { "answer": "Uèi", @@ -424,35 +545,40 @@ "conferenceURL": "Ligam :", "copyNumber": "Copiar lo numèro", "country": "País", - "dialANumber": "Per participar a la conferéncia, sonatz un d’aquestes numèros puèi picatz lo senhal.", + "dialANumber": "Per participar a la reünion, sonatz un d’aquestes numèros puèi picatz lo senhal.", "dialInConferenceID": "PIN :", "dialInNotSupported": "Las sonadas son pas encara foncionalas.", "dialInNumber": "Compausar :", "dialInSummaryError": "Error en recuperant las informacions per sonar. Volgatz tornar mai tard.", "dialInTollFree": "Sonada gratuïta", "genericError": "Ops, quicòm a fach mèuca.", - "inviteLiveStream": "Per veire lo flux en dirècte de la conferéncia, clicatz aqueste ligam : {{url}}", + "inviteLiveStream": "Per veire lo flux en dirècte de la reünion, clicatz aqueste ligam : {{url}}", "invitePhone": "Per jónher per telefòn a la plaça, compausatz aquò : {{number}},,{{conferenceID}}#\n", "invitePhoneAlternatives": "Cercatz mai de numèros de telefòn ?\nFar veire los numèros de sonada de la reünion : {{url}}\n\n\nSe volètz sonar tanben un telefòn de sala, jonhètz sens connectar l’àudio : {{silentUrl}}", "inviteSipEndpoint": "Per rejónher en utilizant l’adreça SIP, picatz aquò : {{sipUri}}", "inviteTextiOSInviteUrl": "Clicatz lo ligam seguent per rejónher : {{inviteUrl}}.", "inviteTextiOSJoinSilent": "Se sonatz via un aparelh de sala de reünion, utilizatz aqueste ligam per rejónher sens connectar l’àudio : {{silentUrl}}.", - "inviteTextiOSPersonal": "{{name}} vos convida a la conferéncia.", + "inviteTextiOSPersonal": "{{name}} vos convida a la reünion.", "inviteTextiOSPhone": "Per participar per telefòn, utilizatz aqueste numèro : {{number}},,{{conferenceID}}#. Se cercatz un numèro diferent, vaquí la lista complèta : {{didUrl}}.", - "inviteURLFirstPartGeneral": "Sètz convidat a participar a la conferéncia.", - "inviteURLFirstPartPersonal": "{{name}} vos convida a la conferéncia.\n", - "inviteURLSecondPart": "\nParticipar a la conferéncia :\n{{url}}\n", + "inviteURLFirstPartGeneral": "Sètz convidat a participar a la reünion.", + "inviteURLFirstPartPersonal": "{{name}} vos convida a la reünion.\n", + "inviteURLSecondPart": "\nParticipar a la reünion :\n{{url}}\n", "label": "Info conferéncia", "liveStreamURL": "Flux dirècte :", "moreNumbers": "Mai de numèros", "noNumbers": "Pas cap de numèro.", "noPassword": "Pas cap", "noRoom": "Cap de sala pas donada per la jónher.", + "noWhiteboard": "Cargament impossible del tablèu blanc.", "numbers": "Sonar de numèros", "password": "$t(lockRoomPasswordUppercase): ", + "reachedLimit": "Avètz atengut lo limit de vòstre forfach.", "sip": "adreça SIP", + "sipAudioOnly": "Adreça SIP en àudio unicament", "title": "Partejar", - "tooltip": "Partejar lo ligam e las informacions d’aquesta conferéncia" + "tooltip": "Partejar lo ligam e las informacions d’aquesta reünion", + "upgradeOptions": "Volgatz verificar las opcions de mesas a nivèl", + "whiteboardError": "Error de cargament del tablèu blanc. Volgatz tornar ensajar mai tard." }, "inlineDialogFailure": { "msg": "Avèm un pauc patit a manténer la connexion.", @@ -473,6 +599,7 @@ "focusLocal": "Centrar sus vòstra vidèo", "focusRemote": "Centrar sus la vidèo de qualqu'un mai", "fullScreen": "Activar / Desactivar l'ecran complet", + "giphyMenu": "Alternar lo menú GIPHY", "keyboardShortcuts": "Acorchis de clavièr", "localRecording": "Mostrar o amagar los contraròtles d’enregistrament local", "mute": "Activar o desactivar lo microfòn", @@ -486,6 +613,10 @@ "toggleShortcuts": "Mostrar o amagar los acorchis clavièr", "videoMute": "Aviar o arrestar vòstra camèra" }, + "largeVideo": { + "screenIsShared": "Sètz a partejar vòstre ecran", + "showMeWhatImSharing": "M'afichar çò que partegi" + }, "liveStreaming": { "busy": "Sèm a ensajar de liurar de ressorças flux. Mercés de tornar ensajar dins una estona.", "busyTitle": "Totes los difusors son ocupats", @@ -497,7 +628,7 @@ "errorAPI": "Una error s’es producha pendent l’accès al flux YouTube. Mercé d’ensajar de vos connectar mai tard.", "errorLiveStreamNotEnabled": "La difusion en dirècte es pas activada per {{email}}. Volgatz ben activar la difusion en dirècte o vos connectar amb un compte que l’a activada.", "expandedOff": "La difusion en dirècte es estada arrestada", - "expandedOn": "La conferéncia es difusada sus YouTube.", + "expandedOn": "La reünion es actualament difusada", "expandedPending": "La difusion en dirècte comença…", "failedToStart": "La difusion en dirècte a pas capitat de s'aviar", "getStreamKeyManually": "Avèm pas pogut recuperar cap de flux en dirècte. Ensajatz d’obténer vòstre clau de difusion sus YouTube.", @@ -511,6 +642,7 @@ "on": "Difusion en dirècte", "onBy": "{{name}} a començat la difusion en dirècte", "pending": "Començar lo dirècte…", + "policyError": "Avètz ensajat de començar una difusion en dirècte tròp rapidament. Ensajatz de nòu mai tard !", "serviceName": "Servici de difusion en dirècte", "sessionAlreadyActive": "Aquesta session es ja en cors d’enregistrament o en difusion en dirèct.", "signIn": "Se connectar amb Google", @@ -524,35 +656,38 @@ "youtubeTerms": "Condicions d’utilizacion de YouTube" }, "lobby": { - "allow": "Autorizar", "backToKnockModeButton": "Cap de senhal, demandar a participar a la plaça", + "chat": "Chat", "dialogTitle": "Mòde sala d'espèra", "disableDialogContent": "La sala d’espèra es actualament activada. Aquesta foncionalitat assegura que los participants indesirables poiràn pas participar. La volètz desactivar ?", "disableDialogSubmit": "Desactivar", "emailField": "Picata vòstra adreça electronica", "enableDialogPasswordField": "Definir un senhal (opcional)", "enableDialogSubmit": "Activar", - "enableDialogText": "La sala d’espèra vos permet de protegir vòstras conferéncias en autorizant las personas de dintrar qu’aprèp l’aprobacion formala d’un moderator.", - "enterPasswordButton": "Dintratz lo senhal de la conferéncia", - "enterPasswordTitle": "Dintratz lo senhal per rejónher la conferéncia", - "errorMissingPassword": "Mercés de picar lo senhal de la conferéncia", + "enableDialogText": "La sala d’espèra vos permet de protegir vòstras reünion en autorizant las personas de dintrar qu’aprèp l’aprobacion formala d’un moderator.", + "enterPasswordButton": "Dintratz lo senhal de la reünion", + "enterPasswordTitle": "Dintratz lo senhal per rejónher la reünion", + "errorMissingPassword": "Mercés de picar lo senhal de la reünion", "invalidPassword": "Senhal invalid", "joinRejectedMessage": "Un moderator a regetat vòstra demanda de participacion.", - "joinTitle": "Rejónher la conferéncia", - "joinWithPasswordMessage": "Ensag de participacion amb senhal, volgatz esperar...", - "joiningMessage": "Dintraretz dins la conferéncia tre que qualqu’un aurà acceptat vòstra demanda", - "joiningTitle": "Demanda a rejónher la conferéncia...", - "joiningWithPasswordTitle": "A rejónher amb senhal...", + "joinRejectedTitle": "Demanda d'accès regetada.", + "joinTitle": "Rejónher la reünion", + "joinWithPasswordMessage": "Ensag de participacion amb senhal, volgatz esperar…", + "joiningMessage": "Dintraretz dins la reünion tre que qualqu’un aurà acceptat vòstra demanda", + "joiningTitle": "Demanda a rejónher la reünion…", + "joiningWithPasswordTitle": "A rejónher amb senhal…", "knockButton": "Demandar a rejónher", - "knockTitle": "Qualqu’un vòl rejónher la conferéncia", + "knockTitle": "Qualqu’un vòl rejónher la reünion", "knockingParticipantList": "Lista de participants en espèra", + "lobbyChatStartedNotification": "{{moderator}} es a charrar en sala d'espèra amb {{attendee}}", + "lobbyChatStartedTitle": "{{moderator}} a començat de charrar en sala d'espèra amb vos.", + "lobbyClosed": "Es estada barrada la sala d'espèra.", "nameField": "Escrivètz vòstre nom", "notificationLobbyAccessDenied": "{{originParticipantName}} a decidit de regetar la demanda de {{targetParticipantName}}", "notificationLobbyAccessGranted": "{{originParticipantName}} a autorizat {{targetParticipantName}} a dintrar", "notificationLobbyDisabled": "Lo mòde sala d'espèra es estat desactivat per {{originParticipantName}}", "notificationLobbyEnabled": "Lo mòde sala d'espèra activat per {{originParticipantName}}", "notificationTitle": "Sala d'espèra", - "passwordField": "Picatz lo senhal de la conferéncia", "passwordJoinButton": "Rejónher", "title": "Sala d'espèra", "toggleLabel": "Activar la sala d'espèra" @@ -581,16 +716,19 @@ "no": "Non", "participant": "Participant", "participantStats": "Estatisticas del participant", + "selectTabTitle": "🎥 Mercés de seleccionar aqueste onglet per enregistrar", "sessionToken": "Geton de session", "start": "Aviar l'enregistrament", "stop": "Arrestar l'enregistrament", + "stopping": "Arrèst de l'enregistrament", + "wait": "Esperatz pendent la salvagarda de vòstre enregistrament", "yes": "Òc" }, "lockRoomPassword": "senhal", "lockRoomPasswordUppercase": "Senhal", "lonelyMeetingExperience": { "button": "Convidar d’autres", - "youAreAlone": "Sètz l’unica persona de la conferéncia" + "youAreAlone": "Sètz l’unica persona de la reünion" }, "me": "ieu", "notify": { @@ -600,22 +738,43 @@ "audioUnmuteBlockedDescription": "Las operacion de restabliment del son microfòn son estadas blocadas pel moment a causa de limitas sistèma.", "audioUnmuteBlockedTitle": "Restabliment del son del microfòn blocat !", "chatMessages": "Messatges del chat", - "connectedOneMember": "{{name}} a jonch la conferéncia", - "connectedThreePlusMembers": "{{name}} e {{count}} personas mai participan a la conferéncia", - "connectedTwoMembers": "{{first}} e {{second}} participan a la conferéncia", + "connectedOneMember": "{{name}} a rejonch la reünion", + "connectedThreePlusMembers": "{{name}} e plen mai d'autras personas participan a la reünion", + "connectedTwoMembers": "{{first}} e {{second}} participan a la reünion", + "connectionFailed": "Fracàs de la connexion. Mercés de tornar ensajar mai tard !", + "dataChannelClosed": "Qualitat vidèo deteriorada", + "dataChannelClosedDescription": "Lo canal pont es indisponible alara la qualitat vidèo es limitada a sa valor mai febla.", + "dataChannelClosedDescriptionWithAudio": "Lo canal pont es indisponible, alara de perturbacion de l'àudio e de la vidèo pòdon arribar.", + "dataChannelClosedWithAudio": "La qualitat de l'àudio e de la vidèo pòt èsser deteriorada", + "disabledIframe": "L'integracion d'iframe es sonque destinada a las demonstracion, aquesta sonada s'acabarà d'aquí {{timeout}} minutas.", + "disabledIframeSecondary": "L'integracion d'iframe de {{domain}} es sonque destinada a las demonstracion, aquesta sonada s'acabarà d'aquí {{timeout}} minutas. Mercés d'utilizar Jitsi coma servici per una integracion en produccion.", "disconnected": "desconnectat", "displayNotifications": "Afichar las notificacions per", + "dontRemindMe": "Lo me rapelar pas", "focus": "Focus de conferéncia", "focusFail": "{{component}} es pas disponible - ensajatz tornamai dins {{ms}} sec", + "gifsMenu": "GIPHY", "groupTitle": "Notificacions", "hostAskedUnmute": "Lo moderator vos que parletz", + "invalidTenant": "Titular invalid", + "invalidTenantHyphenDescription": "Lo titular que sètz a utilizar es invalid (començar o acabar per '-').", + "invalidTenantLengthDescription": "Lo titular qu'utilizatz es tròp long.", "invitedOneMember": "{{name}} es estat convidat", "invitedThreePlusMembers": "{{name}} e {{count}} autres son estats convidats", "invitedTwoMembers": "{{first}} e {{second}} son estats convidats", + "joinMeeting": "Rejónher", "kickParticipant": "{{kicked}} es estat expulsat per {{kicker}}", - "leftOneMember": "{{name}} a quitat la conferéncia", - "leftThreePlusMembers": "{{name}} e un molon d’autres an quitat la conferéncia", - "leftTwoMembers": "{{first}} e {{second}} an quitat la conferéncia", + "leftOneMember": "{{name}} a quitat la reünion", + "leftThreePlusMembers": "{{name}} e un molon d’autres an quitat la reünion", + "leftTwoMembers": "{{first}} e {{second}} an quitat la reünion", + "linkToSalesforce": "Ligam cap a Salesforce", + "linkToSalesforceDescription": "Podètz associar lo resumit de la reünion a un objècte Salesforce.", + "linkToSalesforceError": "Impossible d'associar la reünion a Salesforce", + "linkToSalesforceKey": "Ligar aquesta reünion", + "linkToSalesforceProgress": "Ligason de la reünion a Salesforce…", + "linkToSalesforceSuccess": "La reünion es estada tirada de Salesforce", + "localRecordingStarted": "{{name}} a començar un enregistrament loca.", + "localRecordingStopped": "{{name}} a arrestat l'enregistrament local.", "me": "Ieu", "moderationInEffectCSDescription": "Volgatz levar la man se volètz partejar vòstre ecran.", "moderationInEffectCSTitle": "Lo moderator a blocat lo partiment d’ecran", @@ -636,6 +795,10 @@ "newDeviceAction": "Utilizar", "newDeviceAudioTitle": "Nòu periferic àudio detectat", "newDeviceCameraTitle": "Nòva camèra detectada", + "nextToSpeak": "Palaretz aprèp la persona actuala", + "noiseSuppressionDesktopAudioDescription": "La supression del bruch se pòt pas activat a l'encòp que lo partiment de l'àudio del sistèma, volgatz lo desactivar e tornar ensajar.", + "noiseSuppressionFailedTitle": "Fracàs de l'aviada de la supression del bruch", + "noiseSuppressionStereoDescription": "La supression del bruch d'una font estereo es pas encara suportada.", "oldElectronClientDescription1": "Sembla qu’utilizatz una version anciana del client Jitsi Meet qu’es conegut per conténer de problèmas de seguretat. Mercés de vos assegurar de metre a jorn ", "oldElectronClientDescription2": "darrièra compilacion", "oldElectronClientDescription3": " ara !", @@ -644,25 +807,36 @@ "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) tirat per un autre participant", "passwordSetRemotely": "$t(lockRoomPasswordUppercase) definit per un autre participant", "raiseHandAction": "Levar la man", - "raisedHand": "{{name}} volriá parlar.", + "raisedHand": "Volriá parlar.", "raisedHands": "{{participantName}} e {{raisedHands}} autres", "reactionSounds": "Desactivar los sons", "reactionSoundsForAll": "Desactivar los sons per totes", "screenShareNoAudio": " La casa Partejar l’àudio es pas estada marcada a l’ecran de seleccion de la fenèstra.", "screenShareNoAudioTitle": "Partiment impossible de l’àudio del sistèma !", + "screenSharingAudioOnlyDescription": "Notatz qu'en partejant vòstre ecran, afectatz lo mòde « Melhora performança » e sollicitatz mai de benda passanta.", + "screenSharingAudioOnlyTitle": "Mòde « Melhora performança »", "selfViewTitle": "Podètz totjorn quitar d’amagar vòstra pròpria vista a partir dels paramètres", "somebody": "Qualqu'un", - "startSilentDescription": "Rejónher la conferéncia per activar l’àudio", + "startSilentDescription": "Rejónher la reünion per activar l’àudio", "startSilentTitle": "Avètz jonch sens cap de sortida àudio !", - "suboptimalBrowserWarning": "Planhèm que vòstra experiéncia de la conferéncia siá pas de las bonas. Sèm a cercar de solucions per melhorar aquò, d’aquel temps, ensajatz un dels navigadors compatibles.", + "suboptimalBrowserWarning": "Planhèm que vòstra experiéncia de la reünion siá pas de las bonas. Sèm a cercar de solucions per melhorar aquò, d’aquel temps, ensajatz un dels navigadors compatibles.", "suboptimalExperienceTitle": "Avertiment del navigador", + "suggestRecordingAction": "Aviar", + "suggestRecordingDescription": "Volètz aviar un enregistrament ?", + "suggestRecordingTitle": "Enregistrar aquesta reünion", "unmute": "Restablir lo son", "videoMutedRemotelyDescription": "La podètz totjorn tornar activar.", "videoMutedRemotelyTitle": "{{participantDisplayName}} a copat vòstra vidèo", "videoUnmuteBlockedDescription": "Las operacion de restabliment de la camèra e del partiment del burèu son estadas blocadas pel moment a causa de limitas sistèma.", "videoUnmuteBlockedTitle": "Restabliment de la camèra e del partiment de burèu blocat  !", "viewLobby": "Veire sala d’espèra", - "waitingParticipants": "{{waitingParticipants}} personas" + "viewParticipants": "Veire los participants", + "viewVisitors": "Veire los visitaires", + "waitingParticipants": "{{waitingParticipants}} personas", + "waitingVisitors": "Visitaires en espèra dins la fila : {{waitingVisitors}}", + "waitingVisitorsTitle": "La reünion es pas encara en dirècte !", + "whiteboardLimitDescription": "Volgatz salvagardar vòstra progression, perque lo limit d'utilizacion del tablèu blanc serà lèu atengut e lo tablèu tamparà.", + "whiteboardLimitTitle": "Utilizacion del tablèu blanc" }, "participantsPane": { "actions": { @@ -673,7 +847,11 @@ "askUnmute": "Demandar a restablir lo son", "audioModeration": "Se tornar lo son", "blockEveryoneMicCamera": "Blocar lo microfòn e la camèra del monde", + "breakoutRooms": "Salas petitas", + "goLive": "Bascular en dirècte", "invite": "Convidar qualqu'un", + "lowerAllHands": "Baissar totas las mans", + "lowerHand": "Baissar la man", "moreModerationActions": "Mai d’opcions de moderacion", "moreModerationControls": "Opcions de moderacion suplementàrias", "moreParticipantOptions": "Mai d’opcions de participant", @@ -689,7 +867,10 @@ "close": "Tancar", "headings": { "lobby": "Sala d’espèra ({{count}})", - "participantsList": "Participants de la conferéncia ({{count}})", + "participantsList": "Participants de la reünion ({{count}})", + "visitorInQueue": " (en espèra {{count}})", + "visitorRequests": " (demanda {{count}})", + "visitors": "Visitaire {{count}}", "waitingLobby": "Dins la sala d'espèra ({{count}})" }, "search": "Cercar participants", @@ -697,12 +878,17 @@ }, "passwordDigitsOnly": "Fins a {{number}} chifras", "passwordSetRemotely": "causit per qualqu'un mai", + "pinParticipant": "Penjar - {{participantName}}", + "pinnedParticipant": "Lo participant es penjat", "polls": { "answer": { + "edit": "Modificar", + "send": "Enviar", "skip": "Sautar", "submit": "Enviar" }, "by": "Per {{ name }}", + "closeButton": "Tampar lo sondatge", "create": { "addOption": "Apondre una opcion", "answerPlaceholder": "Opcion {{index}}", @@ -712,6 +898,7 @@ "pollQuestion": "Question del sondatge", "questionPlaceholder": "Pausar una question", "removeOption": "Suprimir l'opcion", + "save": "Enregistrar", "send": "Enviar" }, "errors": { @@ -719,11 +906,11 @@ }, "notification": { "description": "Dobrissètz l’onglet dels sondatge per votar", - "title": "Un sondatge novèl es estat apondut a la conferéncia" + "title": "Un sondatge novèl es estat apondut a la reünion" }, "results": { "changeVote": "Cambiar lo vote", - "empty": "I a pas cap de sondatge dins la conferéncia pel moment. Començatz-ne un aicí !", + "empty": "I a pas cap de sondatge dins la reünion pel moment. Començatz-ne un aicí !", "hideDetailedResults": "Rescondre los detalhs", "showDetailedResults": "Mostrar los detalhs", "vote": "Votar" @@ -738,12 +925,14 @@ "callMe": "Sona-me", "callMeAtNumber": "Sona-me a aqueste numèro :", "calling": "A sonar", - "configuringDevices": "Parametratge dels aparelhs...", + "configuringDevices": "Parametratge dels aparelhs…", "connectedWithAudioQ": "Sètz connectat amb l’àudio ?", "connection": { + "failed": "Ensag de connexion fracassat !", "good": "Vòstra connexion Internet sembla bona !", "nonOptimal": "Vòstra connexion Internet es pas optimala", - "poor": "Vòstra connexion Internet es febla" + "poor": "Vòstra connexion Internet es febla", + "running": "Execucion de l'ensag de connexion…" }, "connectionDetails": { "audioClipping": "Nos esperam a trobar vòstre àudio troncat.", @@ -752,6 +941,7 @@ "goodQuality": "Crane ! Vòstra qualitat serà geniala.", "noMediaConnectivity": "Avèm pas trobat cap de biais d'establir una connectivitat mèdia per aquesta pròva. Sovent es a causat d'un parafòc o un NAT.", "noVideo": "Nos esperam a trobat vòstra qualitat vidèo òrra.", + "testFailed": "L'ensag de connexion a rescontrat de problèmas, mas se poiriá qu'aquò afècta pas vòstra experiéncia.", "undetectable": "Se capitatz totjorn pas de sonar del navigador estant, vos recomandam de vos assegurar que vos naut-parlaires, lo microfòn e la camèra son corrèctament configurats, qu’avètz donadas las autorizacions al navegador pel microfòn e la camèra e que lo navigador es a jorn. Se tenètz d’aver de dificultats per sonar, devètz contactar lo desvolopaire de l’aplicacion Web.", "veryPoorConnection": "Nos esperam a trobar vòstra qualitat vidèo plan òrra.", "videoFreezing": "Nos esperam a veire vòstra vidèo se gelar, venir negra e se pixelizar.", @@ -759,7 +949,7 @@ "videoLowQuality": "Presumissèm que vòstra vidèo aurà una baissa qualitat tocant la frequéncia d’imatge e la resolucion.", "videoTearing": "Presumissèm que vòstra vidèo serà pixelizada e aurà d’artefacts visuals." }, - "copyAndShare": "Copiar e partejar lo ligam de conferéncia", + "copyAndShare": "Copiar e partejar lo ligam de reünion", "dialInMeeting": "Participatz a la reünion", "dialInPin": "Participar a la reünion e picar lo còdi PIN :", "dialing": "A sonar", @@ -768,23 +958,26 @@ "errorDialOutDisconnected": "Impossible de sonar aqueste numèro. Desconnectat", "errorDialOutFailed": "Impossible de sonar aqueste numèro. La sonada a fracassat", "errorDialOutStatus": "Error en recuperant l’estat de la sonada sortissenta", - "errorMissingName": "Mercés de picar vòstre nom per rejónher la conferéncia", + "errorMissingName": "Mercés de picar vòstre nom per rejónher la reünion", "errorNoPermissions": "Devètz activar l’accès al microfòn e a la camèra", "errorStatusCode": "Error de numerotacion, còdi d’estat : {{status}}", "errorValidation": "Validacion del numèro fracassada", "iWantToDialIn": "Vòli me connectar", "initiated": "Sonada aviada", "joinAudioByPhone": "Rejónher amb l’àudio del telefòn", - "joinMeeting": "Rejónher la conferéncia", + "joinMeeting": "Rejónher la reünion", + "joinMeetingInLowBandwidthMode": "Rejónher en mòde benda passanta redusida", "joinWithoutAudio": "Rejónher sens àudio", "keyboardShortcuts": "Activar los acorchis de clavièr", "linkCopied": "Ligam copiat al quichapapièrs", "lookGood": "Sembla que lo microfòn fonciona pas coma cal", "or": "o", - "premeeting": "Preconferéncia", + "premeeting": "Prereünion", + "proceedAnyway": "Contunhar malgrat tot", + "recordingWarning": "D'autres participants pòdon enregistrar aquesta sonada", "screenSharingError": "Error de partatge d’ecran :", - "showScreen": "Activar l'ecran de preconferéncia", "startWithPhone": "Començar amb l’àudio del telefòn", + "unsafeRoomConsent": "Compreni lo risc e vòli çaquelà participar a la reünion", "videoOnlyError": "Error vidèo :", "videoTrackError": "Creacion d’una pista àudio impossibla.", "viewAllNumbers": "veire totes los numèros" @@ -794,7 +987,7 @@ "calling": "Sonada…", "connected": "Connectat", "connecting": "Connexion en cors…", - "connecting2": "Connexion*...", + "connecting2": "Connexion*…", "disconnected": "Desconnectat", "expired": "Expirat", "ignored": "Ignorat", @@ -803,9 +996,6 @@ "rejected": "Refusat", "ringing": "A sonar…" }, - "privacyView": { - "title": "Confidencialitat" - }, "profile": { "avatar": "avatar", "setDisplayNameLabel": "Causissètz vòstre escais", @@ -815,6 +1005,18 @@ }, "raisedHand": "Volriá charrar", "raisedHandsLabel": "Nombre de mans levadas", + "record": { + "already": { + "linked": "L'enregistrament es ja ligat a aqueste objècte Salesforce." + }, + "type": { + "account": "Compte", + "contact": "Contacte", + "lead": "Principal", + "opportunity": "Oportunitat", + "owner": "Proprietari" + } + }, "recording": { "authDropboxText": "Enviar a Dropbox", "availableSpace": "Espaci disponible : {{spaceLeft}} Mo (altorn de {{duration}} minutas d’enregistrament)", @@ -825,43 +1027,72 @@ "error": "Fracàs de l'enregistrament. Mercés de tornar ensajar.", "errorFetchingLink": "Error en recuperant lo ligam de l’enregistrament.", "expandedOff": "Enregistrament arrestat", - "expandedOn": "La conferéncia es enregistrada.", + "expandedOn": "La reünion es actualament enregistrada", "expandedPending": "Aviada de l’enregistrament…", "failedToStart": "L'enregistrament n'as pas réussi a démarrer", "fileSharingdescription": "Partejar l’enregistrament amb los participants de la reünion", + "highlight": "Suslinhar", + "highlightMoment": "Metre en avant un moment", + "highlightMomentDisabled": "Podètz pas metre en avant un moment pendent una reünion", + "highlightMomentSuccess": "Moments destacats", + "highlightMomentSucessDescription": "Vòstre moment suslinhat serà apondut al resumit de la reünion.", "inProgress": "Enregistrament o difusion en dirècte en cors", "limitNotificationDescriptionNative": "A causa d’una demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per d’enregistraments sens limit ensajatz <3>{{app}}.", "limitNotificationDescriptionWeb": "A causa d’una demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per d’enregistraments sens limit ensajatz {{app}}.", "linkGenerated": "Avèm generat un ligam pel vòstre enregistrament.", - "live": "DIRÈCTE", + "localRecordingNoNotificationWarning": "L'enregistrament s'anonciarà pas als autres participants. Los deuretz informar que la reünion serà enregistrada.", + "localRecordingNoVideo": "La vidèo es pas enregistrada actualament", + "localRecordingStartWarning": "Asseguratz-vos d'arrestar l'enregistrament abans de sortir de la reünion per lo poder enregistrar.", + "localRecordingStartWarningTitle": "Arrestar l'enregistrament per lo salvar", + "localRecordingVideoStop": "Arrestar la vidèo arrestarà tanben l'enregistrament local. Volètz vertadièrament contunhar ?", + "localRecordingVideoWarning": "Per enregistrar vòstra vidèo, devètz l'aver activada en començant l'enregistrament", + "localRecordingWarning": "Asseguratz-vos de causir l'onglet actual per utilizar lo son e la vidèo corrècts.", "loggedIn": "Session a {{userName}}", + "noMicPermission": "Se pòt pas crear la pista del microfòn. Volgatz autorizar l'utilizacion del microfòn.", + "noStreams": "Cap de flux àudio o vidèo pas detectat.", "off": "Enregistrament arrestar", "offBy": "{{name}} a arrestat l’enregistrament", "on": "Enregistrament", "onBy": "{{name}} a començat l’enregistrament", - "pending": "Preparacion de l’enregistrament de la conferéncia…", - "rec": "ENRG", + "onlyRecordSelf": "Enregistrar solament mon àudio e ma vidèo", + "pending": "Preparacion de l’enregistrament de la reünion…", + "policyError": "Avètz ensajat de començar l'enregistrament tròp rapidament. Mercés de tornar ensajar mai tard.", + "recordAudioAndVideo": "Enregistrar l'àudio e la vidèo", + "recordTranscription": "Enregistrar la transcripcion", + "saveLocalRecording": "Salvagardar l'enregistrament local (Beta)", "serviceDescription": "Vòstre enregistrament serà salvagardat pel servici dedicat", "serviceDescriptionCloud": "Enregistrament distant", + "serviceDescriptionCloudInfo": "Las reünions enregistradas se suprimisson automaticament 24h après l'enregistrament.", "serviceName": "Servici d’enregistrament", "sessionAlreadyActive": "Aquesta session es ja en cors d’enregistrament o en difusion en dirèct.", + "showAdvancedOptions": "Opcions avançadas", "signIn": "Connexion", "signOut": "Se desconnectar", + "surfaceError": "Seleccionatz l'onglet actual.", "title": "Enregistrament", "unavailable": "Ops ! Lo {{serviceName}} es pas disponible pel moment. Sèm a reglar aqueste problèma. Mercés de tornar ensajar mai tard.", "unavailableTitle": "Enregistrament indisponible", "uploadToCloud": "Enviar al cloud" }, + "screenshareDisplayName": "Ecran de {{name}}", "sectionList": { "pullToRefresh": "Tirar per actualizar" }, "security": { - "about": "Podètz ajustar un $t(lockRoomPassword) per rejónher una conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans d’obténer l’autorizacion de dintrar dins la conferéncia.", - "aboutReadOnly": "Los participants que son moderators pòdon ajustar un $t(lockRoomPassword) a la conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans d’aver l’autorizacion de rejónher la conferéncia.", - "header": "Opcions de seguretat", - "insecureRoomNameWarning": "Lo nom de la sala es pas segur. De monde indesirables poirián rejónher vòstra conferéncia." + "about": "Podètz ajustar un $t(lockRoomPassword) per rejónher una reünion. Los participants deuràn fornir lo $t(lockRoomPassword) abans d’obténer l’autorizacion de dintrar dins la reünion.", + "aboutReadOnly": "Los participants que son moderators pòdon ajustar un $t(lockRoomPassword) a la reünion. Los participants deuràn fornir lo $t(lockRoomPassword) abans d’aver l’autorizacion de rejónher la reünion.", + "insecureRoomNameWarningNative": "Lo nom de la sala de reünion es pas segur. Participants non desirats poirián la rejónher. {{recommendAction}} Ne saber mai per securizar vòstras reünions ", + "insecureRoomNameWarningWeb": "Lo nom de la sala de reünion es pas segur. Participants non desirats poirián la rejónher. {{recommendAction}} Ne saber mai per securizar vòstras reünions aquí.", + "title": "Opcions de seguretat", + "unsafeRoomActions": { + "meeting": "Consideratz de securizar vòstra reünion en utilizant lo boton opcions de seguretat.", + "prejoin": "Ensajatz d'utilizar un nom mai unic.", + "welcome": "Consideratz d'utilizar un nom mai unic o causissètz-ne un demest los suggerits" + } }, "settings": { + "audio": "Àudio", + "buttonLabel": "Paramètres", "calendar": { "about": "L’integracion de {{appName}} amb vòstre calendièr permet d’accedir d’un biais segur als eveniments venents.", "disconnect": "Desconnectar", @@ -874,31 +1105,37 @@ "desktopShareWarning": "Devètz reaviar lo partiment d’ecran per prendre en compte las modificacions.", "devices": "Periferics", "followMe": "Tot lo mond me sèc", + "followMeRecorder": "L'enregistrador me seguís", "framesPerSecond": "frames-per-second", "incomingMessage": "Messatge dintrant", "language": "Lenga", "loggedIn": "Session a {{name}}", + "maxStageParticipants": "Nombre maximal de participants que se pòt penjar a la scèna principala", "microphones": "Microfòns", "moderator": "Moderator", + "moderatorOptions": "Opcions de moderacion", "more": "Mai", "name": "Escais", "noDevice": "Pas cap", + "notifications": "Notificacions", "participantJoined": "Lo participant a rejonch", + "participantKnocking": "Lo participant es dintrat dins la sala d'espèra", "participantLeft": "Lo participant es partit", "playSounds": "Lectura dels sons activa", - "reactions": "Reaccions de la conferéncia", + "reactions": "Reaccions de la reünion", "sameAsSystem": "Coma pel sistèma ({{label}})", "selectAudioOutput": "Sortida àudio", "selectCamera": "Camèra", "selectMic": "Microfòn", "selfView": "Vista de se", - "sounds": "Sons", + "shortcuts": "Acorchi", "speakers": "Naut-parlairs", "startAudioMuted": "Començan totes sens son", "startReactionsMuted": "Començan totes amb las reaccions sonòras amudidas", "startVideoMuted": "Començan totes sens vidèo", "talkWhileMuted": "Parlar en mut", - "title": "Paramètres" + "title": "Paramètres", + "video": "Vidèo" }, "settingsView": { "advanced": "Avançat", @@ -906,6 +1143,7 @@ "alertOk": "D’acòrdi", "alertTitle": "Avertiment", "alertURLText": "L’URL del servidor es pas valida", + "apply": "Aplicar", "buildInfoSection": "Informacions de generacion", "conferenceSection": "Conferéncia", "disableCallIntegration": "Desactivar l’integracion nativa de las sonadas", @@ -913,23 +1151,34 @@ "disableCrashReportingWarning": "Volètz vertadièrament desactivar lo rapòrt de plantatge ? Lo paramètre serà aplicat aprèp la reaviada de l’aplicacion.", "disableP2P": "Desactivar lo mòde par a par", "displayName": "Escais-nom", + "displayNamePlaceholderText": "Ex : Joan Martin", "email": "Corrièl", + "emailPlaceholderText": "email@exemple.com", + "gavatarMessage": "Se vòstra adreça electronica es ligada a un compte Gravatar, l'utilizarem per mostrar vòstre imatge de perfil.", + "goTo": "Anar a", "header": "Paramètres", + "help": "Ajuda", + "links": "Ligams", + "privacy": "Confidencialitat", "profileSection": "Perfil", + "sdkVersion": "Version del SDK", "serverURL": "URL del servidor", "showAdvanced": "Mostrar los paramètres avançats", + "startCarModeInLowBandwidthMode": "Lançar lo mòde veitura amb lo mòde d'estalvi de connectivitat", "startWithAudioMuted": "Començar sens son", "startWithVideoMuted": "Començar sens vièdo", + "terms": "Condicions d'utilizacions", "version": "Version" }, "share": { - "dialInfoText": "\n\n=====\n\nVolètz sonar de vòstre telefòn estant ?\n\n{{defaultDialInNumber}}Clicatz lo ligam per veire los numèros de telefòn d’aquesta conferéncia\n{{dialInfoPageUrl}}", - "mainText": "Copiatz lo ligam seguent per dintrar dins la conferéncia :\n{{roomUrl}}" + "dialInfoText": "\n\n=====\n\nVolètz sonar de vòstre telefòn estant ?\n\n{{defaultDialInNumber}}Clicatz lo ligam per veire los numèros de telefòn d’aquesta reünion\n{{dialInfoPageUrl}}", + "mainText": "Copiatz lo ligam seguent per dintrar dins la reünion :\n{{roomUrl}}" }, "speaker": "Orator", "speakerStats": { "angry": "Encolerat", "disgusted": "Desgostat", + "displayEmotions": "Mostrar las emocions", "fearful": "Pauruc", "happy": "Content", "hours": "{{count}} oras", @@ -957,6 +1206,7 @@ "termsView": { "title": "Acòrds" }, + "toggleTopPanelLabel": "Alternar lo panèl superior", "toolbar": { "Settings": "Paramètres", "accessibilityLabel": { @@ -964,28 +1214,46 @@ "audioOnly": "Passar al sol àudio", "audioRoute": "Seleccionar lo periferic àudio", "boo": "Aücar", - "breakoutRoom": "Rejónher/quitar la sala de reünion", + "breakoutRooms": "Salas petitas", "callQuality": "Gerir la qualitat vidèo", - "cc": "Passar als jostítols", + "carmode": "Mòde veitura", + "cc": "Alternar los sostítols", "chat": "Passar a la fenèstra chat", "clap": "Picar de las mans", + "closeChat": "Tampar la discussion", + "closeMoreActions": "Tampar lo menú d'accions", + "closeParticipantsPane": "Tampar lo panèl de participants", "collapse": "Plegar", "document": "Tampar los documents partejats", + "documentClose": "Tampar lo document partejat", + "documentOpen": "Dorbir lo document partejat", "download": "Telecargar nòstra aplicacion", - "embedMeeting": "Conferéncia integrada", + "embedMeeting": "Reünion integrada", + "endConference": "Terminar la reünion per tot lo monde", + "enterFullScreen": "Passar en plen ecran", + "enterTileView": "Passar en vista mosaïc", + "exitFullScreen": "Quitar lo plen ecran", + "exitTileView": "Sortir de la vista mosaïc", "expand": "Espandir", "feedback": "Daissar un comentari", "fullScreen": "Passar al ecran complèt", + "giphy": "Alternar lo menú GIPHY", "grantModerator": "Passar moderator", "hangup": "Quitar la sonada", + "heading": "Barra d'aisinas", "help": "Ajuda", + "hideWhiteboard": "Rescondre lo tablèu blanc", "invite": "Convidar de monde", "kick": "Exclure un participant", "laugh": "Rire", + "leaveConference": "Quitar la reünion", "like": "Levar lo det gròs", + "linkToSalesforce": "Ligam cap a Salesforce", "lobbyButton": "Activar/Desactivar mòde sala d'espèra", "localRecording": "Passar al panèl d’enregistraments locals", - "lockRoom": "Tirar/Metre lo senhal de la conferéncia", + "lockRoom": "Tirar/Metre lo senhal de la reünion", + "love": "Còr", + "lowerHand": "Baissar la man", "moreActions": "Passar al menú mai d’accions", "moreActionsMenu": "Mai de menús d’accion", "moreOptions": "Mostrar mai d’opcions", @@ -994,31 +1262,43 @@ "muteEveryoneElse": "Copar lo microfòn dels autres", "muteEveryoneElsesVideoStream": "Arrestar la vidèo de totes los autres", "muteEveryonesVideoStream": "Arrestar la vidèo de tot lo monde", - "participants": "Participants", + "muteGUMPending": "Connexion al microfòn", + "noiseSuppression": "Supression del bruch suplementària (BETA)", + "openChat": "Dobrir lo chat", + "participants": "Dobrir lo panèl participants. {{participantsCount}} participants", "pip": "Activar/Desactivar lo mòde Picture-in-Picture", "privateMessage": "Enviar un messatge privat", "profile": "Modificar vòstre perfil", "raiseHand": "Demandar la paraula", + "react": "Reaccions al messatge", + "reactions": "Reaccions", "reactionsMenu": "Dobrir / Tampar lo menú de reaccions", "recording": "Passar al enregistraments", "remoteMute": "Copar lo son del participant", "remoteVideoMute": "Copar la camèra del participant", "security": "Opcions de seguretat", "selectBackground": "Seleccionar un rèireplan", + "selfView": "Alternar l'afichatge de vòstra vidèo", "shareRoom": "Convidar qualqu’un", "shareYourScreen": "Passar a la captura d’ecran", "shareaudio": "Partejar l’àudio", "sharedvideo": "Passar al partatge de vidèo", "shortcuts": "Passar als acorchis", "show": "Mostrar davant", + "showWhiteboard": "Mostrar lo tablèu blanc", "silence": "Amudir", "speakerStats": "Mostrar/Amagar los estatisticas de paraula", + "stopScreenSharing": "Arrestar lo partiment d'ecran", + "stopSharedVideo": "Arrestar la vidèo partejada", "surprised": "Suspresa", "tileView": "Activar/Desactivar la vista en mosaïc", "toggleCamera": "Passar a la camèra", "toggleFilmstrip": "Bascular mòde benda film", + "unmute": "Activar lo microfòn", "videoblur": "Enfoscar o non la vidèo", - "videomute": "Silenciar la vidèo" + "videomute": "Silenciar la vidèo", + "videomuteGUMPending": "Connexion de la camèra", + "videounmute": "Aviar la camèra" }, "addPeople": "Ajustar de monde a vòstra sonada", "audioOnlyOff": "Desactivar lo mòde connexion febla", @@ -1031,40 +1311,51 @@ "chat": "Dobrir / tampar la conversacion", "clap": "Picar de las mans", "closeChat": "Tampar la messatjariá", + "closeParticipantsPane": "Tampar lo panèl dels participants", "closeReactionsMenu": "Tampar lo menú de reaccions", - "disableReactionSounds": "Podètz desactivar los sons de las reaccions per aquesta conferéncia", + "disableNoiseSuppression": "Desactivar la supression de bruch suplementària (BETA)", + "disableReactionSounds": "Podètz desactivar los sons de las reaccions per aquesta reünion", "documentClose": "Tampar los documents partejats", "documentOpen": "Dobrir los documents partejats", "download": "Telecargar nòstra aplicacion", "e2ee": "Chiframent del cap a la fin", - "embedMeeting": "Integrar conferéncia", + "embedMeeting": "Integrar la reünion", + "enableNoiseSuppression": "Activar la supression de bruch suplementària (BETA)", + "endConference": "Terminar la reünion per tot lo monde", "enterFullScreen": "Veire l’ecran complèt", "enterTileView": "Dintrar dins la vista mosaïca", "exitFullScreen": "Sortir de l’ecran complèt", "exitTileView": "Quitar la vista mosaïca", "feedback": "Daissar un comentari", + "giphy": "Alternar lo menú GIPHY", "hangup": "Quitar", "help": "Ajuda", + "hideWhiteboard": "Rescontre lo tablèu blanc", "invite": "Convidar de monde", "joinBreakoutRoom": "Rejónher la sala de reünion", "laugh": "Rire", "leaveBreakoutRoom": "Quitar la sala de reünion", + "leaveConference": "Quitar la reünion", "like": "Levar lo det gròs", + "linkToSalesforce": "Ligam a Saleforce", "lobbyButtonDisable": "Desactivar lo mòde sala d'espèra", "lobbyButtonEnable": "Activar mòde sala d'espèra", "login": "Connexion", "logout": "Desconnexion", + "love": "Còr", "lowerYourHand": "Baissar la man", "moreActions": "Mai d’opcions", "moreOptions": "Autras opcions", "mute": "Mut / Actiu", "muteEveryone": "Rendre mut tot lo monde", "muteEveryonesVideo": "Desactivar la camèra de tot lo monde", + "muteGUMPending": "Connexion del microfòn", "noAudioSignalDesc": "S’avètz pas volontàriament copat lo son a partir dels paramètres sistèma o material, pensatz de cambiar d’aparelh.", "noAudioSignalDescSuggestion": "S’avètz pas volontàriament copat lo son a partir dels paramètres sistèma o material, pensatz d’utilizar un autre aparelh suggerit.", "noAudioSignalDialInDesc": "Podètz tanben sonar en utilizant :", "noAudioSignalDialInLinkDesc": "Numèros de sonada", "noAudioSignalTitle": "I a pas cap de son en entrada del microfòn !", + "noiseSuppression": "Supression del bruch (BETA)", "noisyAudioInputDesc": "Sembla que vòstre microfòn mene bruch, pensatz de lo copar o de lo cambiar.", "noisyAudioInputTitle": "Vòstre microfòn sembla brusent !", "openChat": "Dobrir la messatjariá", @@ -1077,20 +1368,23 @@ "raiseYourHand": "Levar la man", "reactionBoo": "Enviar una reaccion de bramada", "reactionClap": "Enviar una reaccion d’aplaudiment", + "reactionHeart": "Enviar un còr en reaccion", "reactionLaugh": "Enviar una reaccion de rire", "reactionLike": "Enviar una reaccion d’aprobacion", "reactionSilence": "Enviar una reaccion de silenci", "reactionSurprised": "Enviar una reaccion de suspresa", + "reactions": "Reaccions", "security": "Opcions de seguretat", "selectBackground": "Seleccionar un rèireplan", "shareRoom": "Convidar qualqu’un", "shareaudio": "Partejar l’àudio", "sharedvideo": "Partejar una vidèo", "shortcuts": "Veire los acorchis clavièr", + "showWhiteboard": "Mostrar lo tablèu blanc", "silence": "Amudir", "speakerStats": "Estatisticas parladors", "startScreenSharing": "Aviar lo partatge d’ecran", - "startSubtitles": "Aviar los sostítols", + "startSubtitles": "Sostítols • {{language}}", "stopAudioSharing": "Arrestar lo partiment àudio", "stopScreenSharing": "Arrestar lo partatge d’ecran", "stopSharedVideo": "Arrestar la vidèo", @@ -1099,32 +1393,28 @@ "talkWhileMutedPopup": "Ensajatz de parlar ? Vòstre microfòn es copat.", "tileViewToggle": "Activar/Desactivar la vista en mosaïc", "toggleCamera": "Passar a la camèra", + "unmute": "Restablir lo microfòn", "videoSettings": "Paramètres vidèo", - "videomute": "Aviar / Arrestar la camèra" + "videomute": "Aviar / Arrestar la camèra", + "videomuteGUMPending": "Connexion a la camèra", + "videounmute": "Aviar la camèra" }, "transcribing": { "ccButtonTooltip": "Aviar / Arrestat los sostítols", - "error": "Fracàs de la transcripcion. Mercés de tornar ensajar.", "expandedLabel": "La transcripcion es activada", - "failedToStart": "Fracàs de l’aviada de la transcripcion", - "labelToolTip": "La conferéncia es a èsser transcricha", - "off": "Transcripcion arrestada", - "pending": "Preparacion de l’enregistrament de la conferéncia…", + "failed": "La transcipcion a pas capitat", + "labelToolTip": "La reünion es a èsser transcricha", + "sourceLanguageDesc": "La lenga actuala de la reünion es definida a {{sourceLanguage}}.
La podètz cambiar a partir d' ", + "sourceLanguageHere": "aquí", "start": "Mostrar los sostítols", "stop": "Levar los sostítols", + "subtitles": "Sostítols", + "subtitlesOff": "Inactius", "tr": "TR" }, + "unpinParticipant": "{{participantName}} - Despenjar", "userMedia": { - "androidGrantPermissions": "Causissètz Autorizar quand vòstre navigador vos demanda l'autorizacion.", - "chromeGrantPermissions": "Causissètz Autorizar quand vòstre navigador vos demanda l'autorizacion.", - "edgeGrantPermissions": "Causissètz Òc quand vòstre navigador vos demanda l'autorizacion.", - "electronGrantPermissions": "Mercés de donar las permissions d'utilizar vòstra camèra e vòstre microfòn", - "firefoxGrantPermissions": "Causissètz Partejar l'aparelh seleccionat quand vòstre navigador vos demanda l'autorizacion.", - "iexplorerGrantPermissions": "Causissètz OK quand vòstre navigador vos demanda l'autorizacion.", - "nwjsGrantPermissions": "Mercés de donar las permissions d'utilizar vòstra camèra e vòstre microfòn", - "operaGrantPermissions": "Causissètz Autorizar quand vòstre navigador vos demanda l'autorizacion.", - "react-nativeGrantPermissions": "Causissètz Autorizar quand vòstre navigador vos demanda l'autorizacion.", - "safariGrantPermissions": "Causissètz OK quand vòstre navigador vos demanda l'autorizacion." + "grantPermissions": "Mercés de donar las permissions d'utilizar vòstra camèra e vòstre microfòn." }, "videoSIPGW": { "busy": "Sèm a liurar de resorgas. Mercés de tornar ensajar dins una estona.", @@ -1152,12 +1442,15 @@ "ldTooltip": "Difusion vidèo en bassa definicion", "lowDefinition": "Bassa definicion", "performanceSettings": "Paramètres de performança", + "recording": "A enregistrar", "sd": "SD", "sdTooltip": "Difusion vidèo en definicion estandard", - "standardDefinition": "Definicion estandard" + "standardDefinition": "Definicion estandard", + "streaming": "Difusion en dirècte en cors" }, "videothumbnail": { "connectionInfo": "Info connexion", + "demote": "Desplaçar coma visitaire", "domute": "Copar lo son", "domuteOthers": "Rendre mut totes los autres", "domuteVideo": "Desactivar la camèra", @@ -1166,16 +1459,25 @@ "grantModerator": "Nomenar moderator", "hideSelfView": "Amagar pròpria vista", "kick": "Exclure", + "mirrorVideo": "Intervertir ma vidèo", "moderator": "Moderator", "mute": "Un participant a copat son micro", "muted": "Mut", + "pinToStage": "Penjar a la scèna", "remoteControl": "Contraròtle alonhat", "screenSharing": "Lo participant es a partejar son ecran", "show": "Mostrar davant", + "showSelfView": "Mostrar sa pròpia vidèo", + "unpinFromStage": "Quitar de penjar", + "verify": "Verificar lo participant", "videoMuted": "Camèra desactivada", "videomute": "Lo participant a arrestat la camèra" }, "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Rèireplan actual : {{background}}", + "selectBackground": "Seleccionar un rèireplan" + }, "addBackground": "Apondre un rèireplan", "apply": "Aplicar", "backgroundEffectError": "Aplicacion fracassada de l’efeich al rèireplan.", @@ -1191,7 +1493,7 @@ "image6": "Forèst ", "image7": "Solelh levant", "none": "Cap", - "pleaseWait": "Esperatz...", + "pleaseWait": "Esperatz…", "removeBackground": "Suprimir lo rèireplan", "slightBlur": "Fosc leugièr", "title": "Rèireplans virtuals", @@ -1199,13 +1501,32 @@ "webAssemblyWarning": "WebAssembly pas pres en carga", "webAssemblyWarningDescription": "WebAssembly es desactivat o pas pres en carga per aqueste navigador" }, + "visitors": { + "chatIndicator": "(visitaire)", + "joinMeeting": { + "description": "Observatz solament aquesta conferéncia.", + "raiseHand": "Levar la man", + "title": "Dintrada dins la reünion", + "wishToSpeak": "Se volètz parlar, mercés de levar la man e d’esperar que la moderacion apròve." + }, + "labelTooltip": "Nombre de visitaires : {{count}}", + "notification": { + "demoteDescription": "Enviat aquí per {{actor}}, levatz la man per participar", + "noMainParticipantsDescription": "Un participant deu començar la reünion. Mercés d’esperar un moment.", + "noMainParticipantsTitle": "Aquesta reünion a pas encara començat.", + "noVisitorLobby": "Podètz pas rejónher tan qu’i a una sala d’espèra activada per la reünion.", + "notAllowedPromotion": "Un participant deu d’en primièr autorizar vòstra demanda.", + "title": "Visitatz solament aquesta reünion" + }, + "waitingMessage": "Dintraretz dins la reünion tre que serà en dirècte !" + }, "volumeSlider": "Nivèl de volum", "welcomepage": { "accessibilityLabel": { "join": "Tocatz per participar", "roomname": "Sasissètz un nom de sala" }, - "addMeetingName": "Nomenar la conferéncia", + "addMeetingName": "Nomenar la reünion", "appDescription": "Endavant, charratz en vidèo amb tota la còla. Per dire de convidar tot lo monde que coneissètz. {{app}} es una solucion de vidèo-conferéncia complètament chifrada e 100% liura que podètz utilizar tota la jornada, totes los jorns, gratuitament— sens cap de compte pas requesit.", "audioVideoSwitch": { "audio": "Votz", @@ -1214,14 +1535,14 @@ "calendar": "Calendari", "connectCalendarButton": "Connectar lo calendari", "connectCalendarText": "Connectatz vòstre calendièr per veire vòstras reünions dins {{app}}. Ajustatz tanben las reünions de {{provider}} a vòstre calendièr e aviatz-las amb un sol clic.", - "enterRoomTitle": "Començar una nòva conferéncia", + "enterRoomTitle": "Començar una reünion nòva", "getHelp": "Obténer d’ajuda", "go": "Crear", "goSmall": "Crear", "headerSubtitle": "Conferéncias securizadas e de Nauta qualitat", "headerTitle": "Internxt Meet", "info": "Infor", - "jitsiOnMobile": "Jitsi sus mobil –telecargatz nòstra aplicacion e començatz de conferéncias de pertot", + "jitsiOnMobile": "Jitsi sus mobil – telecargatz nòstra aplicacion e començatz de reünions de pertot", "join": "CREAR / REJÓNHER", "logo": { "calendar": "Logotipe Calendar", @@ -1231,21 +1552,31 @@ "microsoftLogo": "Logotipe Microsoft", "policyLogo": "Logotipe de la politica" }, + "meetingsAccessibilityLabel": "Reünions", "mobileDownLoadLinkAndroid": "Telecargar l'aplicacion per Android", "mobileDownLoadLinkFDroid": "Telecargar l'aplicacion per F-Droid", "mobileDownLoadLinkIos": "Telecargar l'aplicacion per iOS", - "moderatedMessage": "O reservatz una URL de conferéncia a l'avança ont sètz l'unic moderator.", + "moderatedMessage": "O reservatz una URL de reünion a l'avança ont sètz l'unic moderator.", "privacy": "Vida privada", "recentList": "Recents", "recentListDelete": "Suprimits", - "recentListEmpty": "Vòstra lista de contactes recents es voida. Charratz amb vòstra còla e trobaretz totes vòstras conferéncias recentas aquí.", + "recentListEmpty": "Vòstra lista de contactes recents es voida. Charratz amb vòstra còla e trobaretz totes vòstras reünions recentas aquí.", + "recentMeetings": "Vòstras reünions recentas", "reducedUIText": "Benvengut a {{app}} !", - "roomNameAllowedChars": "Lo nom de la conferéncia deu pas conténer aqueles caractèrs : ?, &, :, ', \", %, #.", + "roomNameAllowedChars": "Lo nom de la reünion deu pas conténer aqueles caractèrs : ?, &, :, ', \", %, #.", "roomname": "Sasissètz un nom de sala", "roomnameHint": "Picatz lo nom o l’URL de la sala que volètz jónher. Podètz inventar un nom, cal pas que lo monde que volètz convidar lo sàpian.", "sendFeedback": "Mandar vòstra opinion", + "settings": "Paramètres", "startMeeting": "Començar la reünion", "terms": "Tèrmes", - "title": "Conferéncias vidèo securizadas amb plen de foncionalitats e complètament gratuitas" + "title": "Conferéncias vidèo securizadas amb plen de foncionalitats e complètament gratuitas", + "upcomingMeetings": "Vòstras reünions venentas" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Tablèu blanc" + }, + "screenTitle": "Tablèu blanc" } } diff --git a/lang/main-pl.json b/lang/main-pl.json index 24128d611542..1dedce37f3a4 100644 --- a/lang/main-pl.json +++ b/lang/main-pl.json @@ -19,7 +19,7 @@ "noResults": "Brak pasujących wyników wyszukiwania", "outlookEmail": "Poczta Outlook", "phoneNumbers": "numery telefonów", - "searching": "Wyszukiwanie...", + "searching": "Wyszukiwanie…", "shareInvite": "Udostępnij zaproszenie na spotkanie", "shareLink": "Udostępnij link do spotkania, aby zaprosić innych uczestników", "shareStream": "Udostępnij link transmisji na żywo", @@ -122,7 +122,7 @@ "installExtensionText": "Zainstaluj rozszerzenie integrujące Kalendarz Google i Office 365" }, "connectingOverlay": { - "joiningRoom": "Łączenie ze spotkaniem..." + "joiningRoom": "Łączenie ze spotkaniem…" }, "connection": { "ATTACHED": "Załącznik", @@ -134,9 +134,9 @@ "DISCONNECTED": "Rozłączony", "DISCONNECTING": "Rozłączanie", "ERROR": "Błąd", - "FETCH_SESSION_ID": "Uzyskiwanie id sesji...", + "FETCH_SESSION_ID": "Uzyskiwanie id sesji…", "GET_SESSION_ID_ERROR": "Nie można uzyskać id sesji. Błąd: {{code}}", - "GOT_SESSION_ID": "Uzyskiwanie id sesji... Gotowe", + "GOT_SESSION_ID": "Uzyskiwanie id sesji… Gotowe", "LOW_BANDWIDTH": "Wideo {{displayName}} zostało wyłączone w celu zaoszczędzenia przepustowości sieci" }, "connectionindicator": { @@ -199,8 +199,8 @@ "launchWebButton": "Uruchom przez przeglądarkę", "noMobileApp": "Nie masz aplikacji?", "termsAndConditions": "Kontynuując zgadzasz się na nasze Zasady i Warunki.", - "title": "Trwa uruchamianie Twojego spotkania w {{app}}...", - "titleNew": "Rozpoczynam spotkanie...", + "title": "Trwa uruchamianie Twojego spotkania w {{app}}…", + "titleNew": "Rozpoczynam spotkanie…", "tryAgainButton": "Spróbuj ponownie w aplikacji stacjonarnej", "unsupportedBrowser": "Wygląda na to, że używasz przeglądarki, której nie wspieramy." }, @@ -239,7 +239,7 @@ "Share": "Udostępnij", "Submit": "Wyślij", "WaitForHostMsg": "Spotkanie jeszcze się nie rozpoczęło. Jeśli jesteś gospodarzem, prosimy o uwierzytelnienie. Jeśli nie, prosimy czekać na przybycie gospodarza.", - "WaitingForHostTitle": "Oczekiwanie na gospodarza...", + "WaitingForHostTitle": "Oczekiwanie na gospodarza…", "Yes": "Tak", "accessibilityLabel": { "close": "Zamknij okno dialogowe", @@ -263,9 +263,9 @@ "cameraUnknownError": "Z nieznanej przyczyny nie można użyć kamery.", "cameraUnsupportedResolutionError": "Twoja kamera nie obsługuje wymaganej rozdzielczości.", "close": "Zamknij", - "conferenceDisconnectMsg": "Być może należy sprawdzić połączenie sieciowe. Ponowne połączenie za {{seconds}} sekund...", + "conferenceDisconnectMsg": "Być może należy sprawdzić połączenie sieciowe. Ponowne połączenie za {{seconds}} sekund…", "conferenceDisconnectTitle": "Nastąpiło rozłączenie.", - "conferenceReloadMsg": "Staramy się to naprawić. Ponowne połączenie za {{seconds}} sekund...", + "conferenceReloadMsg": "Staramy się to naprawić. Ponowne połączenie za {{seconds}} sekund…", "conferenceReloadTitle": "Niestety, coś poszło nie tak.", "confirm": "Potwierdź", "confirmNo": "Nie", @@ -560,7 +560,7 @@ "errorLiveStreamNotEnabled": "Strumieniowanie na żywo nie jest włączone dla {{email}}. Proszę włączyć strumieniowanie na żywo lub zalogować się na konto z włączoną funkcją strumieniowania.", "expandedOff": "Transmisja na żywo została zatrzymana", "expandedOn": "Spotkanie jest obecnie transmitowane na YouTube.", - "expandedPending": "Transmisja na żywo rozpoczyna się...", + "expandedPending": "Transmisja na żywo rozpoczyna się…", "failedToStart": "Transmitowanie na żywo nie uruchomiło się", "getStreamKeyManually": "Nie byliśmy w stanie pobrać żadnych transmisji na żywo. Spróbuj uzyskać klucz do transmisji na żywo z YouTube.", "googlePrivacyPolicy": "Polityka prywatności Google", @@ -572,7 +572,7 @@ "offBy": "{{name}} zatrzymał transmisję na żywo", "on": "Strumień live", "onBy": "{{name}} rozpoczął transmisję na żywo", - "pending": "Start strumieniowania live...", + "pending": "Start strumieniowania live…", "serviceName": "Usługa transmisji na żywo", "sessionAlreadyActive": "Ta sesja jest już nagrywana lub transmitowana na żywo.", "signIn": "Zaloguj się z Google", @@ -602,10 +602,10 @@ "joinRejectedMessage": "Twoja prośba została odrzucona przez moderatora.", "joinRejectedTitle": "Prośba o dołączenie została odrzucona.", "joinTitle": "Dołącz do spotkania", - "joinWithPasswordMessage": "Dołączanie z hasłem, proszę czekać...", + "joinWithPasswordMessage": "Dołączanie z hasłem, proszę czekać…", "joiningMessage": "Dołączysz do spotkania po zaakceptowaniu Twojej prośby", - "joiningTitle": "Dołączanie do spotkania...", - "joiningWithPasswordTitle": "Dołączanie z hasłem...", + "joiningTitle": "Dołączanie do spotkania…", + "joiningWithPasswordTitle": "Dołączanie z hasłem…", "knockButton": "Poproś o dołączenie", "knockTitle": "Ktoś chce dołączyć do spotkania", "knockingParticipantList": "Oczekujący uczestnicy", @@ -692,7 +692,7 @@ "linkToSalesforceDescription": "Możesz połączyć podsumowanie spotkania z obiektem Salesforce.", "linkToSalesforceError": "Nie udało się połączyć spotkania z Salesforce", "linkToSalesforceKey": "Powiąż to spotkanie", - "linkToSalesforceProgress": "Łączenie spotkania z Salesforce...", + "linkToSalesforceProgress": "Łączenie spotkania z Salesforce…", "linkToSalesforceSuccess": "Spotkanie zostało połączone z Salesforce", "localRecordingStarted": "{{name}} rozpoczął nagrywanie lokalne.", "localRecordingStopped": "{{name}} zatrzymał nagrywanie lokalne.", @@ -827,7 +827,7 @@ "callMe": "Zadzwoń do mnie", "callMeAtNumber": "Zadzwoń do mnie pod ten numer:", "calling": "Wybieranie", - "configuringDevices": "Konfigurowanie urządzeń...", + "configuringDevices": "Konfigurowanie urządzeń…", "connectedWithAudioQ": "Jesteś połączony głosowo?", "connection": { "good": "Twoje połączenie internetowe wygląda dobrze!", @@ -874,7 +874,6 @@ "premeeting": "Przed spotkaniem", "proceedAnyway": "Kontynuuj mimo to", "screenSharingError": "Błąd udostępniania ekranu:", - "showScreen": "Tryb osobistej poczekalni przed spotkaniem", "startWithPhone": "Uruchom przez telefon", "unsafeRoomConsent": "Rozumiem ryzyko, chcę dołączyć do spotkania", "videoOnlyError": "Błąd wideo:", @@ -883,17 +882,17 @@ }, "presenceStatus": { "busy": "Zajęte", - "calling": "Dzwonię...", + "calling": "Dzwonię…", "connected": "Połączono", - "connecting": "Łączę...", - "connecting2": "Łączę*...", + "connecting": "Łączę…", + "connecting2": "Łączę*…", "disconnected": "Rozłączony", "expired": "Wygasły", "ignored": "Zignorowane", - "initializingCall": "Inicjalizacja połączenia...", + "initializingCall": "Inicjalizacja połączenia…", "invited": "Zaproszony", "rejected": "Odrzucony", - "ringing": "Dzwonek..." + "ringing": "Dzwonek…" }, "profile": { "avatar": "awatar", @@ -927,7 +926,7 @@ "errorFetchingLink": "Nie udało się wczytać linku do nagrania.", "expandedOff": "Nagrywanie zostało zatrzymane", "expandedOn": "Spotkanie jest obecnie nagrywane.", - "expandedPending": "Nagrywanie się rozpoczyna...", + "expandedPending": "Nagrywanie się rozpoczyna…", "failedToStart": "Nagrywanie nie jest możliwe", "fileSharingdescription": "Udostępnij nagranie uczestnikom spotkania", "highlight": "Oznacz", @@ -946,7 +945,7 @@ "localRecordingStartWarningTitle": "Zatrzymaj nagrywanie, aby je zapisać", "localRecordingVideoStop": "Zatrzymanie filmu spowoduje również zatrzymanie nagrywania lokalnego. Jesteś pewien, że chcesz kontynuować?", "localRecordingVideoWarning": "Aby nagrać film, musisz go mieć na początku nagrywania", - "localRecordingWarning": "Upewnij się, że wybrałeś bieżącą kartę, aby użyć odpowiedniego obrazu i dźwięku. Nagranie jest obecnie ograniczone do 1 GB, czyli około 100 minut.", + "localRecordingWarning": "Upewnij się, że wybrałeś bieżącą kartę, aby użyć odpowiedniego obrazu i dźwięku.", "loggedIn": "Zalogowano jako {{userName}}", "noMicPermission": "Nie można utworzyć ścieżki mikrofonu. Zezwól na korzystanie z mikrofonu.", "noStreams": "Nie wykryto strumienia audio lub wideo.", @@ -955,7 +954,7 @@ "on": "Nagrywanie", "onBy": "{{name}} rozpoczął nagrywanie", "onlyRecordSelf": "Nagrywaj tylko moje strumienie audio i wideo", - "pending": "Przygotowanie do nagrania spotkania...", + "pending": "Przygotowanie do nagrania spotkania…", "rec": "NAGRYWANIE", "saveLocalRecording": "Zapisz plik nagrania lokalnie (Beta)", "serviceDescription": "Twoje nagranie zostanie zapisane przez usługę nagrywania", @@ -1295,7 +1294,7 @@ "failedToStart": "Błąd uruchomienia transkrypcji", "labelToolTip": "Spotkanie jest transkrybowane", "off": "Transkrypcja została zatrzymana", - "pending": "Przygotowanie do transkrypcji spotkania...", + "pending": "Przygotowanie do transkrypcji spotkania…", "sourceLanguageDesc": "Obecnie język spotkania jest ustawiony na {{sourceLanguage}}.
Możesz to zmienić ", "sourceLanguageHere": "tutaj", "start": "Rozpocznij wyświetlanie napisów", @@ -1306,16 +1305,7 @@ }, "unpinParticipant": "{{participantName}} - Odepnij", "userMedia": { - "androidGrantPermissions": "Wybierz Pozwól, gdy przeglądarka zapyta o pozwolenie.", - "chromeGrantPermissions": "Wybierz Pozwól, gdy przeglądarka zapyta o pozwolenie.", - "edgeGrantPermissions": "Wybierz Tak, gdy przeglądarka zapyta o pozwolenie.", - "electronGrantPermissions": "Udziel przyzwolenia na użycie swej kamery i mikrofonu", - "firefoxGrantPermissions": "Wybierz Udostępnij wybrane urządzenie, gdy przeglądarka zapyta o pozwolenie.", - "iexplorerGrantPermissions": "Wybierz OK, gdy przegladarka zapyta o pozwolenie.", - "nwjsGrantPermissions": "Udziel przyzwolenia na użycie swej kamery i mikrofonu", - "operaGrantPermissions": "Wybierz Pozwól, gdy przeglądarka zapyta o pozwolenie.", - "react-nativeGrantPermissions": "Wybierz Pozwól, gdy przeglądarka zapyta o pozwolenie.", - "safariGrantPermissions": "Wybierz OK, gdy przegladarka zapyta o pozwolenie." + "grantPermissions": "Udziel przyzwolenia na użycie swej kamery i mikrofonu." }, "videoSIPGW": { "busy": "Pracujemy nad uwolnieniem zasobów. Prosimy spróbować za kilka minut.", @@ -1389,7 +1379,7 @@ "image6": "Las", "image7": "Wschód słońca", "none": "Żadne", - "pleaseWait": "Proszę czekać...", + "pleaseWait": "Proszę czekać…", "removeBackground": "Usuń tło", "slightBlur": "Lekkie rozmycie", "title": "Tła", diff --git a/lang/main-ptBR.json b/lang/main-pt-BR.json similarity index 97% rename from lang/main-ptBR.json rename to lang/main-pt-BR.json index dc0dd75f97ac..388ebbf6e1a7 100644 --- a/lang/main-ptBR.json +++ b/lang/main-pt-BR.json @@ -22,7 +22,7 @@ "noResults": "Nenhum resultado de busca correspondente", "outlookEmail": "Email Outlook ", "phoneNumbers": "números de telefone", - "searching": "Procurando...", + "searching": "Procurando…", "shareInvite": "Compartilhar convite da reunião", "shareLink": "Compartilhando o link da reunião", "shareStream": "Compartilhar o link da transmissão ao vivo", @@ -156,9 +156,9 @@ "DISCONNECTED": "Desconectado", "DISCONNECTING": "Desconectando", "ERROR": "Erro", - "FETCH_SESSION_ID": "Obtendo ID da sessão...", + "FETCH_SESSION_ID": "Obtendo ID da sessão…", "GET_SESSION_ID_ERROR": "Erro ao obter o ID da sessão: {{code}}", - "GOT_SESSION_ID": "Obtendo ID da sessão... Feito", + "GOT_SESSION_ID": "Obtendo ID da sessão… Feito", "LOW_BANDWIDTH": "O vídeo de {{displayName}} foi desativado para economizar largura de banda" }, "connectionindicator": { @@ -221,8 +221,8 @@ "launchWebButton": "Iniciar na web", "noMobileApp": "Não tem o app?", "termsAndConditions": "Ao continuar você estará aceitando nossos termos e condições.", - "title": "Iniciando sua reunião no {{app}}...", - "titleNew": "Iniciando sua reunião ...", + "title": "Iniciando sua reunião no {{app}}…", + "titleNew": "Iniciando sua reunião…", "tryAgainButton": "Tente novamente no desktop", "unsupportedBrowser": "Parece que você está usando um navegador ao qual não temos suporte." }, @@ -262,7 +262,7 @@ "Submit": "Enviar", "WaitForHostMsg": "A conferência ainda não começou. Se você é o anfitrião, faça a autenticação. Do contrário, aguarde a chegada do anfitrião.", "WaitingForHostButton": "Aguardar por anfitrião", - "WaitingForHostTitle": "Esperando o anfitrião...", + "WaitingForHostTitle": "Esperando o anfitrião…", "Yes": "Sim", "accessibilityLabel": { "Cancel": "Cancelar (fechar janela)", @@ -290,9 +290,9 @@ "cameraUnknownError": "Não pode usar a câmera por uma razão desconhecida.", "cameraUnsupportedResolutionError": "Sua câmera não suporta a resolução de vídeo requerida.", "close": "Fechar", - "conferenceDisconnectMsg": "Você pode querer verificar sua conexão de rede. Reconectando em {{seconds}} segundos ...", + "conferenceDisconnectMsg": "Você pode querer verificar sua conexão de rede. Reconectando em {{seconds}} segundos…", "conferenceDisconnectTitle": "Você foi desconectado.", - "conferenceReloadMsg": "Estamos tentando consertar isto. Reconectando em {{seconds}} segundos...", + "conferenceReloadMsg": "Estamos tentando consertar isto. Reconectando em {{seconds}} segundos…", "conferenceReloadTitle": "Infelizmente, algo deu errado.", "confirm": "Confirmar", "confirmNo": "Não", @@ -381,7 +381,7 @@ "permissionCameraRequiredError": "É necessário permitir acesso à câmera para participar de reuniões com vídeo. Ative a permissão nas configurações", "permissionErrorTitle": "Permissão necessária", "permissionMicRequiredError": "É necessário permitir acesso ao microfone para participar de reuniões com áudio. Ative a permissão nas configurações", - "readMore": "mais...", + "readMore": "mais…", "recentlyUsedObjects": "Seus objetos usados recentemente", "recording": "Gravando", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Não é possível transmitir enquanto a gravação está ativa", @@ -616,7 +616,7 @@ "errorLiveStreamNotEnabled": "Transmissão ao vivo não está ativada em {{email}}. Ative a transmissão ao vivo ou registre numa conta com transmissão ao vivo ativada.", "expandedOff": "A transmissão ao vivo foi encerrada", "expandedOn": "A reunião está sendo transmitida pelo YouTube.", - "expandedPending": "Iniciando a transmissão ao vivo...", + "expandedPending": "Iniciando a transmissão ao vivo…", "failedToStart": "Falha ao iniciar a transmissão ao vivo", "getStreamKeyManually": "Não conseguimos buscar nenhuma transmissão ao vivo. Tente obter sua chave de transmissão ao vivo no YouTube.", "googlePrivacyPolicy": "Política de Privacidade do Google", @@ -628,7 +628,7 @@ "offBy": "{{name}} parou a transmissão ao vivo", "on": "Transmissão ao Vivo", "onBy": "{{name}} iniciou a transmissão ao vivo", - "pending": "Iniciando Transmissão ao Vivo...", + "pending": "Iniciando Transmissão ao Vivo…", "serviceName": "Serviço de Transmissão ao Vivo", "sessionAlreadyActive": "Esta sessão já está sendo gravada ou em live streaming.", "signIn": "Faça login no Google", @@ -658,10 +658,10 @@ "joinRejectedMessage": "Sua solicitação de participação foi rejeitada pelo moderador.", "joinRejectedTitle": "Solicitação de participação recusada", "joinTitle": "Junte-se à conferência", - "joinWithPasswordMessage": "Tentando entrar com a senha, por favor aguarde...", + "joinWithPasswordMessage": "Tentando entrar com a senha, por favor aguarde…", "joiningMessage": "Você se juntará à conferência tão logo alguém aprove sua solicitação", - "joiningTitle": "Pedindo para se juntar à conferência...", - "joiningWithPasswordTitle": "Participando com senha...", + "joiningTitle": "Pedindo para se juntar à conferência…", + "joiningWithPasswordTitle": "Participando com senha…", "knockButton": "Peça para participar", "knockTitle": "Alguém deseja participar da conferência", "knockingParticipantList": "Remover lista de participantes", @@ -751,7 +751,7 @@ "linkToSalesforceDescription": "Você pode vincular o sumário da reunião a um objeto do Salesforce.", "linkToSalesforceError": "Falha ao vincular reunião ao Salesforce", "linkToSalesforceKey": "Vincular esta reunião", - "linkToSalesforceProgress": "Vinculando reunião ao Salesforce...", + "linkToSalesforceProgress": "Vinculando reunião ao Salesforce…", "linkToSalesforceSuccess": "A reunião foi vinculada ao Salesforce", "localRecordingStarted": "{{name}} iniciou uma gravação local.", "localRecordingStopped": "{{name}} parou uma gravação local.", @@ -888,7 +888,7 @@ "callMe": "Me ligue", "callMeAtNumber": "Me ligue nesse número:", "calling": "Ligando", - "configuringDevices": "Configurando dispositivos...", + "configuringDevices": "Configurando dispositivos…", "connectedWithAudioQ": "Você está conectado com áudio?", "connection": { "good": "Sua conexão com a internet parece boa!", @@ -935,7 +935,6 @@ "premeeting": "Pré-reunião", "proceedAnyway": "Prosseguir mesmo assim", "screenSharingError": "Erro de compartilhamento de tela:", - "showScreen": "Habilitar tela pré-reunião", "startWithPhone": "Iniciar com o áudio da ligação", "unsafeRoomConsent": "Eu entendo os riscos, desejo ingressar na reunião", "videoOnlyError": "Erro de vídeo:", @@ -944,17 +943,17 @@ }, "presenceStatus": { "busy": "Ocupado", - "calling": "Chamando...", + "calling": "Chamando…", "connected": "Conectado", - "connecting": "Conectando...", - "connecting2": "Conectando*...", + "connecting": "Conectando…", + "connecting2": "Conectando*…", "disconnected": "Desconectado", "expired": "Expirado", "ignored": "Ignorado", - "initializingCall": "Iniciando Chamada...", + "initializingCall": "Iniciando Chamada…", "invited": "Convidar", "rejected": "Rejeitado", - "ringing": "Tocando..." + "ringing": "Tocando…" }, "profile": { "avatar": "avatar", @@ -988,7 +987,7 @@ "errorFetchingLink": "Erro ao buscar link da gravação.", "expandedOff": "Gravação finalizada", "expandedOn": "A reunião está sendo gravada.", - "expandedPending": "Iniciando gravação...", + "expandedPending": "Iniciando gravação…", "failedToStart": "Falha ao iniciar a gravação", "fileSharingdescription": "Compartilhar gravação com participantes da reunião", "highlight": "Destaque", @@ -1007,7 +1006,7 @@ "localRecordingStartWarningTitle": "Parar a gravação para salvá-la", "localRecordingVideoStop": "Ao parar o seu vídeo a gravação local também será parada. Tem certeza que deseja continuar?", "localRecordingVideoWarning": "Para gravar o seu vídeo você precisa ativá-lo antes de inicar a gravação", - "localRecordingWarning": "Tenha certeza de selecionar a aba atual para usar o áudio e vídeo corretos. A gravação está atualmente limitada a 1GB, que corresponde a aproximadamente 100 minutos.", + "localRecordingWarning": "Tenha certeza de selecionar a aba atual para usar o áudio e vídeo corretos.", "loggedIn": "Conectado como {{userName}}", "noMicPermission": "Trilha para o microfone não pôde ser criada. Por favor conceda permissão para usar o microfone.", "noStreams": "Nenhum fluxo de áudio ou vídeo detectado.", @@ -1016,7 +1015,7 @@ "on": "Gravando", "onBy": "{{name}} iniciou a gravação", "onlyRecordSelf": "Gravar apenas o meu fluxo de áudio e vídeo", - "pending": "Preparando para gravar a reunião...", + "pending": "Preparando para gravar a reunião…", "rec": "REC", "saveLocalRecording": "Salvar o arquivo de gravação localmente (Beta)", "serviceDescription": "Sua gravação será salva pelo serviço de gravação", @@ -1067,7 +1066,7 @@ "incomingMessage": "Mensagem recebida", "language": "Idioma", "loggedIn": "Conectado como {{name}}", - "maxStageParticipants": "Número máximo de participantes que podem ser fixados no palco principal (EXPERIMENTAL)", + "maxStageParticipants": "Número máximo de participantes que podem ser fixados no palco principal", "microphones": "Microfones", "moderator": "Moderador", "moderatorOptions": "Opções de moderador", @@ -1359,7 +1358,7 @@ "failedToStart": "Transcrição falhou ao iniciar", "labelToolTip": "A reunião esta sendo transcrita", "off": "Transcrição parada", - "pending": "Preparando a transcrição da reunião...", + "pending": "Preparando a transcrição da reunião…", "sourceLanguageDesc": "No momento o idioma da reunião está definido para {{sourceLanguage}}.
Você pode alterar-lo ", "sourceLanguageHere": "aqui", "start": "Exibir legendas", @@ -1370,16 +1369,7 @@ }, "unpinParticipant": "{{participantName}} - Desafixar", "userMedia": { - "androidGrantPermissions": "Selecione Permitir quando seu navegador perguntar pelas permissões.", - "chromeGrantPermissions": "Selecione Permitir quando seu navegador perguntar pelas permissões.", - "edgeGrantPermissions": "Selecione Sim quando seu navegador perguntar pelas permissões.", - "electronGrantPermissions": "Dê as permissões para usar sua câmera e microfone", - "firefoxGrantPermissions": "Selecione Compartilhar Dispositivos Selecionados quando seu navegador perguntar pelas permissões.", - "iexplorerGrantPermissions": "Selecione OK quando seu navegador perguntar pelas permissões.", - "nwjsGrantPermissions": "Dê as permissões para usar sua câmera e microfone", - "operaGrantPermissions": "Selecione Permitir quando seu navegador perguntar pelas permissões.", - "react-nativeGrantPermissions": "Selecione Permitir quando seu navegador perguntar pelas permissões.", - "safariGrantPermissions": "Selecione OK quando seu navegador perguntar pelas permissões." + "grantPermissions": "Dê as permissões para usar sua câmera e microfone." }, "videoSIPGW": { "busy": "Estamos trabalhando para liberar recursos. Por favor, tente novamente em alguns minutos.", @@ -1457,7 +1447,7 @@ "image6": "Floresta", "image7": "Alvorada", "none": "Nenhum", - "pleaseWait": "Aguarde...", + "pleaseWait": "Aguarde…", "removeBackground": "Remover fundo", "slightBlur": "Desfoque suave", "title": "Fundos virtuais", diff --git a/lang/main-pt.json b/lang/main-pt.json index c4e8c34804db..3f5a4e069868 100644 --- a/lang/main-pt.json +++ b/lang/main-pt.json @@ -22,7 +22,7 @@ "noResults": "Sem resultados de pesquisa correspondentes", "outlookEmail": "Email do Outlook", "phoneNumbers": "números de telefone", - "searching": "A pesquisar...", + "searching": "A pesquisar…", "shareInvite": "Partilhar convite de reunião", "shareLink": "Partilhar o link da reunião para convidar outras pessoas", "shareStream": "Partilhar o link de transmissão em direto", @@ -109,8 +109,10 @@ } }, "chat": { + "disabled": "O envio de mensagens de chat está desativado.", "enter": "Entrar na sala", "error": "Erro: a sua mensagem não foi enviada. Motivo: {{error}}", + "everyone": "Todos", "fieldPlaceHolder": "Aa", "lobbyChatMessageTo": "Mensagem de chat na sala de espera para {{recipient}}", "message": "Mensagem", @@ -122,18 +124,27 @@ "nickname": { "popover": "Escolha um apelido", "title": "Introduza um apelido para usar o chat", - "titleWithPolls": "Introduza um apelido para usar o chat e as sondagens" + "titleWithCC": "Insira um apelido para usar o chat e as legendas ocultas", + "titleWithPolls": "Digite um apelido para usar o chat e as sondagens", + "titleWithPollsAndCC": "Insira um apelido para utilizar o chat, as sondagens e as legendas ocultas", + "titleWithPollsAndCCAndFileSharing": "Insira um apelido para utilizar o chat, as sondagens, as legendas e os ficheiros" }, "noMessagesMessage": "Ainda não há mensagens na reunião. Comece aqui uma conversa!", "privateNotice": "Mensagem privada para {{recipient}}", "sendButton": "Enviar", "smileysPanel": "Painel de Emojis", + "systemDisplayName": "Sistema", "tabs": { "chat": "Chat", + "closedCaptions": "LO", + "fileSharing": "Ficheiros", "polls": "Sondagens" }, "title": "Chat", - "titleWithPolls": "Chat e Sondagens", + "titleWithCC": "LO", + "titleWithFeatures": "Chat e", + "titleWithFileSharing": "Ficheiros", + "titleWithPolls": "Sondagens", "you": "você" }, "chromeExtensionBanner": { @@ -143,6 +154,10 @@ "dontShowAgain": "Não me mostre isto outra vez", "installExtensionText": "Instalar a extensão para a integração Google Calendar e Office 365" }, + "closedCaptionsTab": { + "emptyState": "O conteúdo das legendas ocultas estará disponível assim que um moderador iniciar a sessão.", + "startClosedCaptionsButton": "Iniciar legendas ocultas" + }, "connectingOverlay": { "joiningRoom": "A ligá-lo à reunião…" }, @@ -156,9 +171,9 @@ "DISCONNECTED": "Desligado", "DISCONNECTING": "A desligar", "ERROR": "Erro", - "FETCH_SESSION_ID": "Obtenção da session-id...", + "FETCH_SESSION_ID": "Obtenção da session-id…", "GET_SESSION_ID_ERROR": "Obter erro de session-id: {{code}}", - "GOT_SESSION_ID": "Obtenção da session-id... Feito", + "GOT_SESSION_ID": "Obtenção da session-id… Feito", "LOW_BANDWIDTH": "O vídeo para {{displayName}} foi desligado para poupar largura de banda" }, "connectionindicator": { @@ -223,8 +238,8 @@ "noMobileApp": "Não tem a aplicação?", "or": "OU", "termsAndConditions": "Ao continuar, concorda com os nossos termos & condições.", - "title": "Iniciando a sua reunião na {{app}}...", - "titleNew": "Iniciando a sua reunião ...", + "title": "Iniciando a sua reunião na {{app}}…", + "titleNew": "Iniciando a sua reunião…", "tryAgainButton": "Tente novamente no desktop", "unsupportedBrowser": "Parece que está a usar um navegador que não suportamos." }, @@ -262,9 +277,12 @@ "Remove": "Remover", "Share": "Partilhar", "Submit": "Submeter", + "Understand": "Entendo, mantenha-me em silêncio por enquanto.", + "UnderstandAndUnmute": "Entendo, por favor, desative o silêncio.", "WaitForHostMsg": "A conferência ainda não começou porque ainda não chegaram moderadores. Se quiser ser um moderador, inicie a sessão. Caso contrário, aguarde.", + "WaitForHostNoAuthMsg": "A conferência ainda não começou porque ainda não chegaram os moderadores. Por favor, aguarde.", "WaitingForHostButton": "Esperar pelo moderador", - "WaitingForHostTitle": "À espera de um moderador...", + "WaitingForHostTitle": "À espera de um moderador…", "Yes": "Sim", "accessibilityLabel": { "Cancel": "Cancelar (sair da caixa de diálogo)", @@ -283,6 +301,12 @@ "alreadySharedVideoTitle": "Só é permitido um vídeo partilhado de cada vez", "applicationWindow": "Janela de aplicação", "authenticationRequired": "Autenticação necessária", + "cameraCaptureDialog": { + "description": "Tire e envie uma foto usando a câmara do seu telemóvel", + "ok": "Ligar a câmara", + "reject": "Agora não", + "title": "Tire uma foto" + }, "cameraConstraintFailedError": "A sua câmara não satisfaz algumas das restrições exigidas.", "cameraNotFoundError": "A câmara não foi encontrada.", "cameraNotSendingData": "Não podemos aceder à sua câmara. Verifique se outra aplicação está a utilizar este dispositivo, seleccione outro dispositivo do menu de definições ou tente recarregar a aplicação.", @@ -292,11 +316,12 @@ "cameraUnknownError": "Não é possível utilizar a câmara por uma razão desconhecida.", "cameraUnsupportedResolutionError": "A sua câmara não suporta a resolução de vídeo necessária.", "close": "Fechar", - "conferenceDisconnectMsg": "Poderá querer verificar a sua ligação à rede. Reconexão em {{seconds}} seg...", + "conferenceDisconnectMsg": "Poderá querer verificar a sua ligação à rede. Reconexão em {{seconds}} seg…", "conferenceDisconnectTitle": "Foi desconectado.", - "conferenceReloadMsg": "Estamos a tentar resolver isto. Reconexão em {{seconds}} seg...", + "conferenceReloadMsg": "Estamos a tentar resolver isto. Reconexão em {{seconds}} seg…", "conferenceReloadTitle": "Infelizmente, algo correu mal.", "confirm": "Confirme", + "confirmBack": "Voltar", "confirmNo": "Não", "confirmYes": "Sim", "connectError": "Oops! Algo correu mal e não conseguimos estabelecer uma ligação com a conferência.", @@ -305,8 +330,8 @@ "contactSupport": "Contacte o suporte", "copied": "Copiado", "copy": "Cópia", - "demoteParticipantDialog": "Tem a certeza de que pretende passar este participante para visitante?", - "demoteParticipantTitle": "Passar a visitante", + "demoteParticipantDialog": "Tem a certeza de que deseja mover este participante para espectador?", + "demoteParticipantTitle": "Mover para espectador", "dismiss": "Dispensar", "displayNameRequired": "Olá! Qual é o seu nome?", "done": "Feito", @@ -318,6 +343,7 @@ "embedMeeting": "Embutir reunião", "enterDisplayName": "Digite o seu nome", "error": "Erro", + "errorRoomCreationRestriction": "Tentou juntar-se demasiado depressa, por favor volte mais tarde.", "gracefulShutdown": "O nosso serviço está atualmente em manutenção. Por favor, tente novamente mais tarde.", "grantModeratorDialog": "Tem a certeza que quer conceder direitos de moderador a {{participantName}}?", "grantModeratorTitle": "Conceder direitos de moderador", @@ -331,7 +357,9 @@ "kickParticipantButton": "Expulsar", "kickParticipantDialog": "Tem a certeza que quer expulsar este participante?", "kickParticipantTitle": "Expulsar este participante?", + "kickSystemTitle": "Ai! Foste expulso da reunião.", "kickTitle": "Ai! {{participantDisplayName}} expulsou-o da reunião", + "learnMore": "saiba mais", "linkMeeting": "Link da reunião", "linkMeetingTitle": "Link da reunião à Força de Vendas", "liveStreaming": "Transmissão em direto", @@ -353,23 +381,35 @@ "micPermissionDeniedError": "Não concedeu autorização para utilizar o seu microfone. Ainda pode participar na conferência, mas outros não o ouvirão. Use o botão da câmara na barra de endereço para corrigir isto.", "micTimeoutError": "Não foi possível iniciar a fonte de áudio. Tempo limite expirado!", "micUnknownError": "Não pode usar microfone por uma razão desconhecida.", - "moderationAudioLabel": "Permitir aos participantes ligar o som", - "moderationVideoLabel": "Permitir aos participantes ligar a câmara", + "moderationAudioLabel": "Permitir aos não moderadores ligar o som", + "moderationDesktopLabel": "Permitir que não moderadores partilhem o seu ecrã", + "moderationVideoLabel": "Permitir que não moderadores iniciem os seus vídeos", "muteEveryoneDialog": "Os participantes podem ligar o som a qualquer momento.", "muteEveryoneDialogModerationOn": "Os participantes podem enviar um pedido para falar a qualquer momento.", "muteEveryoneElseDialog": "Uma vez silenciados, não poderá reativá-los, mas eles podem ligar o microfone a qualquer momento.", "muteEveryoneElseTitle": "Silenciar todos excepto {{whom}}?", + "muteEveryoneElsesDesktopDialog": "Depois que o compartilhamento for interrompido, não será possível reiniciá-lo, mas eles poderão fazê-lo a qualquer momento.", + "muteEveryoneElsesDesktopTitle": "SInterromper a partilha de ecrã de todos, exceto {{whom}}?", "muteEveryoneElsesVideoDialog": "Quando a câmara for desligada, não poderá voltar a ligá-la, mas eles podem voltar a ligá-la em qualquer momento.", "muteEveryoneElsesVideoTitle": "Parar o vídeo de todos excepto {{whom}}?", "muteEveryoneSelf": "você mesmo", "muteEveryoneStartMuted": "A partir de agora, toda a gente começa a ficar calada", "muteEveryoneTitle": "Silenciar toda a gente?", + "muteEveryonesDesktopDialog": "Os participantes podem partilhar o seu ecrã a qualquer momento.", + "muteEveryonesDesktopDialogModerationOn": "Os participantes podem enviar um pedido para partilhar o seu ecrã a qualquer momento.", + "muteEveryonesDesktopTitle": "Interromper a partilha de ecrã de todos?", "muteEveryonesVideoDialog": "Os participantes podem ligar a sua câmara a qualquer momento.", "muteEveryonesVideoDialogModerationOn": "Os participantes podem enviar um pedido para ligar a sua câmara a qualquer momento.", "muteEveryonesVideoDialogOk": "Desativar", "muteEveryonesVideoTitle": "Desligar a câmara de todos?", "muteParticipantBody": "Não poderá reativá-los, mas eles podem reativar-se a qualquer momento.", "muteParticipantButton": "Silenciar", + "muteParticipantsDesktopBody": "Não poderá iniciar a partilha de ecrã deles, mas eles podem fazê-lo a qualquer momento.", + "muteParticipantsDesktopBodyModerationOn": "Não será possível iniciar a partilha de ecrã nem para si nem para eles.", + "muteParticipantsDesktopButton": "Parar a partilha de ecrã", + "muteParticipantsDesktopDialog": "Tem a certeza de que deseja desativar a partilha de ecrã deste participante? Não será possível reiniciá-la, mas ele poderá fazê-lo a qualquer momento.", + "muteParticipantsDesktopDialogModerationOn": "Tem a certeza de que deseja desativar a partilha de ecrã deste participante? Não será possível reativar o ecrã, nem para si nem para ele.", + "muteParticipantsDesktopTitle": "Desativar a partilha de ecrã deste participante?", "muteParticipantsVideoBody": "Não poderá voltar a ligar a câmara, mas eles podem voltar a ligá-la a qualquer momento.", "muteParticipantsVideoBodyModerationOn": "Não será capaz de voltar a ligar a câmara e eles também não.", "muteParticipantsVideoButton": "Parar vídeo", @@ -389,6 +429,10 @@ "recentlyUsedObjects": "Os seus objetos recentemente utilizados", "recording": "A gravar", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Não possível enquanto a transmissão em direto estiver activa", + "recordingInProgressDescription": "Esta reunião está a ser gravada e analisada pela IA{{learnMore}}. O seu áudio e vídeo foram silenciados. Se optar por ativar o som, concorda em ser gravado.", + "recordingInProgressDescriptionFirstHalf": "Esta reunião está a ser gravada e analisada por IA.", + "recordingInProgressDescriptionSecondHalf": ". Your audio and video have been muted. If you choose to unmute, you consent to being recorded.", + "recordingInProgressTitle": "Gravação em andamento", "rejoinNow": "Reingressar agora", "remoteControlAllowedMessage": "{{user}} aceitou o seu pedido de controlo remoto!", "remoteControlDeniedMessage": "{{user}} rejeitou o seu pedido de controlo remoto!", @@ -436,7 +480,10 @@ "shareScreenWarningD2": "é necessário parar a partilha de áudio, iniciar a partilha de ecrã e verificar a opção \"partilhar áudio\".", "shareScreenWarningH1": "Se quiser partilhar apenas o seu ecrã:", "shareScreenWarningTitle": "Tem de parar a partilha de áudio antes de partilhar o seu ecrã", - "shareVideoLinkError": "Por favor, forneça um link correcto do vídeo.", + "shareVideoConfirmPlay": "Está prestes a abrir um site externo. Deseja continuar?", + "shareVideoConfirmPlayTitle": "{{name}} partilhou um vídeo consigo.", + "shareVideoLinkError": "Oops, este vídeo não pode ser reproduzido.", + "shareVideoLinkStopped": "O vídeo de {{name}} foi interrompido.", "shareVideoTitle": "Partilhar vídeo", "shareYourScreen": "Partilhe o seu ecrã", "shareYourScreenDisabled": "Partilha de ecrã desactivada.", @@ -515,6 +562,21 @@ "veryBad": "Muito má", "veryGood": "Muito boa" }, + "fileSharing": { + "downloadFailedDescription": "Por favor, tente novamente.", + "downloadFailedTitle": "Falha no descarregar", + "downloadFile": "Descarregar", + "dragAndDrop": "Arraste e solte os ficheiros aqui ou em qualquer lugar do ecrã", + "fileAlreadyUploaded": "O ficheiro já foi carregado para esta reunião.", + "fileTooLargeDescription": "Certifique-se de que o ficheiro não exceda {{ maxFileSize }}.", + "fileTooLargeTitle": "O ficheiro selecionado é muito grande", + "fileUploadProgress": "Progresso do envio do ficheiro", + "fileUploadedSuccessfully": "Ficheiro carregado com sucesso", + "removeFile": "Remover", + "uploadFailedDescription": "Por favor, tente novamente.", + "uploadFailedTitle": "Falha ao carregar", + "uploadFile": "Partilhar ficheiro" + }, "filmstrip": { "accessibilityLabel": { "heading": "Miniaturas de vídeo" @@ -622,7 +684,7 @@ "errorLiveStreamNotEnabled": "Transmissão em direto não está ativada em {{email}}. Ative a transmissão em direto ou registre numa conta com transmissão direto ativada.", "expandedOff": "A transmissão em direto foi encerrada", "expandedOn": "A reunião está sendo transmitida em direto.", - "expandedPending": "Iniciando a transmissão em direto...", + "expandedPending": "Iniciando a transmissão em direto…", "failedToStart": "Falha ao iniciar a transmissão em direto", "getStreamKeyManually": "Não conseguimos buscar nenhuma transmissão em direto. Tente obter sua chave de transmissão em direto no YouTube.", "googlePrivacyPolicy": "Política de Privacidade do Google", @@ -634,7 +696,8 @@ "offBy": "{{name}} parou a transmissão em direto", "on": "Iniciada a transmissão em direto", "onBy": "{{name}} iniciou a transmissão em direto", - "pending": "Início da transmissão em direto...", + "pending": "Início da transmissão em direto…", + "policyError": "Tentou iniciar uma transmissão ao vivo muito rapidamente. Por favor, tente novamente mais tarde!", "serviceName": "Serviço de Transmissão em Direto", "sessionAlreadyActive": "Esta sessão já está a ser gravada ou transmitida em direto.", "signIn": "Iniciar sessão com o Google", @@ -664,10 +727,10 @@ "joinRejectedMessage": "O seu pedido de adesão foi rejeitado por um moderador.", "joinRejectedTitle": "Pedido de adesão rejeitado.", "joinTitle": "Junte-se à reunião", - "joinWithPasswordMessage": "Tentando aderir com senha, por favor aguarde...", + "joinWithPasswordMessage": "Tentando aderir com senha, por favor aguarde…", "joiningMessage": "Participará na reunião assim que alguém aceitar o seu pedido", - "joiningTitle": "Pedir para participar na reunião...", - "joiningWithPasswordTitle": "Participando com senha...", + "joiningTitle": "Pedir para participar na reunião…", + "joiningWithPasswordTitle": "Participando com senha…", "knockButton": "Pedir para participar", "knockTitle": "Alguém quer juntar-se à reunião", "knockingParticipantList": "Lista de participantes a expulsar", @@ -725,7 +788,10 @@ "me": "eu", "notify": { "OldElectronAPPTitle": "Vulnerabilidade de segurança!", - "allowAction": "Permitir", + "allowAll": "Permitir tudo", + "allowAudio": "Permitir áudio", + "allowDesktop": "Permitir partilha de ecrã", + "allowVideo": "Permitir vídeo", "allowedUnmute": "Pode ligar o seu microfone, ligar a sua câmara ou partilhar o seu ecrã.", "audioUnmuteBlockedDescription": "A operação de ligar o microfone foi temporariamente bloqueada devido aos limites do sistema.", "audioUnmuteBlockedTitle": "Ligar microfone bloqueado!", @@ -733,10 +799,15 @@ "connectedOneMember": "{{name}} entrou na reunião", "connectedThreePlusMembers": "{{name}} e muitos outros entraram na reunião", "connectedTwoMembers": "{{first}} e {{second}} entraram na reunião", - "dataChannelClosed": "Deficiência na qualidade do vídeo", - "dataChannelClosedDescription": "O canal de ponte foi desconectado e, portanto, a qualidade do vídeo está limitada à sua configuração mais baixa.", + "connectionFailed": "Falha na ligação. Por favor, tente novamente mais tarde!", + "dataChannelClosed": "A qualidade do vídeo pode ser afetada", + "dataChannelClosedDescription": "O canal de ponte está em baixo e, por isso, a qualidade de vídeo pode estar limitada à sua definição mais baixa.", + "dataChannelClosedDescriptionWithAudio": "O canal de ponte está em baixo, pelo que podem ocorrer interrupções no áudio e no vídeo.", + "dataChannelClosedWithAudio": "A qualidade do áudio e do vídeo pode ser afetada", + "desktopMutedRemotelyTitle": "A partilha do seu ecrã foi interrompida por {{participantDisplayName}}", "disabledIframe": "A incorporação destina-se apenas a fins de demonstração, pelo que esta chamada será desligada em {{timeout}} minutos.", - "disabledIframeSecondary": "A incorporação de {{domain}} destina-se apenas a fins de demonstração, pelo que esta chamada será desligada em {{timeout}} minutos. Por favor, use Jitsi as a Service para incorporação em produção!", + "disabledIframeSecondaryNative": "A incorporação de {{domain}} destina-se apenas a fins de demonstração, pelo que esta chamada será desligada em {{timeout}} minutos.", + "disabledIframeSecondaryWeb": "A incorporação de {{domain}} destina-se apenas a fins de demonstração, pelo que esta chamada será desligada em {{timeout}} minutos. Utilize Jitsi as a Service para incorporação em produção!", "disconnected": "desconectado", "displayNotifications": "Mostrar notificações para", "dontRemindMe": "Não me lembre", @@ -744,7 +815,10 @@ "focusFail": "{{component}} não disponĩvel - tente em {{ms}} seg.", "gifsMenu": "GIPHY", "groupTitle": "Notificações", - "hostAskedUnmute": "O moderador gostaria que você falasse", + "hostAskedUnmute": "O moderador gostaria que participasse.", + "invalidTenant": "Tenant inválido", + "invalidTenantHyphenDescription": "O tenant que está a utilizar é inválido (começa ou termina com '-').", + "invalidTenantLengthDescription": "O tenant que está a utilizar é demasiado longo.", "invitedOneMember": "{{displayName}} foi convidado", "invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados", "invitedTwoMembers": "{{first}} e {{second}} foram convidados", @@ -757,7 +831,7 @@ "linkToSalesforceDescription": "Pode ligar o resumo da reunião a um objecto da Salesforce.", "linkToSalesforceError": "Falha na ligação da reunião à Salesforce", "linkToSalesforceKey": "Ligar esta reunião", - "linkToSalesforceProgress": "A ligar a reunião à Salesforce...", + "linkToSalesforceProgress": "A ligar a reunião à Salesforce…", "linkToSalesforceSuccess": "A reunião foi ligada à Salesforce", "localRecordingStarted": "{{name}} iniciou uma gravação local.", "localRecordingStopped": "{{name}} parou uma gravação local.", @@ -781,9 +855,10 @@ "newDeviceAction": "Usar", "newDeviceAudioTitle": "Novo dispositivo de áudio detetado", "newDeviceCameraTitle": "Nova câmara detetada", - "noiseSuppressionDesktopAudioDescription": "A supressão de ruído não pode ser ativada enquanto se partilha o áudio do ambiente de trabalho, por favor desative-o e tente novamente.", - "noiseSuppressionFailedTitle": "Falha ao iniciar a supressão de ruído", - "noiseSuppressionStereoDescription": "A supressão do ruído de áudio estéreo não é atualmente suportada.", + "nextToSpeak": "É o próximo na fila para falar", + "noiseSuppressionDesktopAudioDescription": "A supressão de ruído extra não pode ser ativada enquanto estiver a partilhar o áudio do ambiente de trabalho. Desative-a e tente novamente.", + "noiseSuppressionFailedTitle": "Falha ao iniciar a supressão de ruído extra", + "noiseSuppressionStereoDescription": "Atualmente, a supressão extra de ruído não é suportada com áudio estéreo.", "oldElectronClientDescription1": "Parece estar a utilizar uma versão antiga do cliente Jitsi Meet que tem vulnerabilidades de segurança conhecidas. Por favor, certifique-se de que actualiza a nossa ", "oldElectronClientDescription2": "compilação mais recente", "oldElectronClientDescription3": " agora!", @@ -792,7 +867,7 @@ "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante", "passwordSetRemotely": "$t(lockRoomPasswordUppercase) definido por outro participante", "raiseHandAction": "Levantar a mão", - "raisedHand": "Gostaria de falar.", + "raisedHand": "Gostaria de participar.", "raisedHands": "{{participantName}} e mais {{raisedHands}} pessoas", "reactionSounds": "Desactivar sons", "reactionSoundsForAll": "Desativar sons para todos", @@ -810,13 +885,18 @@ "suggestRecordingDescription": "Gostaria de iniciar uma gravação?", "suggestRecordingTitle": "Gravar esta reunião", "unmute": "Ligar microfone", + "unmuteScreen": "Iniciar partilha de ecrã", + "unmuteVideo": "Ligar câmara", "videoMutedRemotelyDescription": "Pode sempre ligá-la novamente.", "videoMutedRemotelyTitle": "A sua câmara foi desligada pelo {{participantDisplayName}}.", "videoUnmuteBlockedDescription": "A operação de ligar a câmara e partilhar o ambiente de trabalho foi temporariamente bloqueada devido aos limites do sistema.", "videoUnmuteBlockedTitle": "Está bloqueado ligar a câmara e partilhar o ambiente de trabalho!", "viewLobby": "Ver sala de espera", - "viewVisitors": "Ver visitantes", + "viewParticipants": "Ver participantes", + "viewVisitors": "Visualizar espectadores", "waitingParticipants": "{{waitingParticipants}} pessoas", + "waitingVisitors": "Espectadores em fila de espera: {{waitingVisitors}}", + "waitingVisitorsTitle": "A reunião ainda não está em direto!", "whiteboardLimitDescription": "Guarde o seu progresso, pois o limite de utilizadores será atingido em breve e o quadro branco será encerrado.", "whiteboardLimitTitle": "Utilização do quadro branco" }, @@ -824,13 +904,19 @@ "actions": { "admit": "Aceitar", "admitAll": "Aceitar todos", - "allow": "Permitir aos participantes:", + "allow": "Permitir que os não moderadores:", + "allowDesktop": "Permitir partilha de ecrã", "allowVideo": "Permitir vídeo", + "askDesktop": "Pedir para partilhar o ecrã", "askUnmute": "Pedir para ligar o som", "audioModeration": "Ligar o microfone deles", "blockEveryoneMicCamera": "Bloquear o microfone e a câmara de todos", "breakoutRooms": "Salas simultâneas", - "invite": "Convidar alguém", + "desktopModeration": "Iniciar partilha de ecrã", + "goLive": "Aceder ao vivo", + "invite": "Convide alguém", + "lowerAllHands": "Baixar todas as mãos", + "lowerHand": "Baixar a mão", "moreModerationActions": "Mais opções de moderação", "moreModerationControls": "Mais controlos de moderação", "moreParticipantOptions": "Mais opções de participantes", @@ -838,6 +924,8 @@ "muteAll": "Silenciar todos", "muteEveryoneElse": "Silenciar todos os outros", "reject": "Rejeitar", + "stopDesktop": "Parar a partilha de ecrã", + "stopEveryonesDesktop": "Interromper a partilha de ecrã de todos", "stopEveryonesVideo": "Desligar a câmara de todos", "stopVideo": "Desligar a câmara", "unblockEveryoneMicCamera": "Desbloquear o microfone e a câmara de todos", @@ -847,11 +935,15 @@ "headings": { "lobby": "Sala de espera ({{count}})", "participantsList": "Participantes da reunião ({{count}})", + "viewerRequests": "Pedidos dos espectadores {{count}}", + "visitorInQueue": " (à espera {{count}})", "visitorRequests": " (pedidos {{count}})", - "visitors": "Visitantes ({{count}})", + "visitors": "Espectadores ({{count}})", + "visitorsList": "Espectadores ({{count}})", "waitingLobby": "Aguardam na sala de espera ({{count}})" }, "search": "Pesquisar participantes", + "searchDescription": "Comece a digitar para filtrar os participantes", "title": "Participantes" }, "passwordDigitsOnly": "Até {{number}} dígitos", @@ -860,10 +952,13 @@ "pinnedParticipant": "O participante está afixado", "polls": { "answer": { + "edit": "Editar", + "send": "Enviar", "skip": "Ignorar", "submit": "Submeter" }, "by": "Por {{ name }}", + "closeButton": "Fechar sondagem", "create": { "addOption": "Adicionar opção", "answerPlaceholder": "Opção {{index}}", @@ -873,6 +968,7 @@ "pollQuestion": "Pergunta de Sondagem", "questionPlaceholder": "Faça uma pergunta", "removeOption": "Remover opção", + "save": "Guardar", "send": "Enviar" }, "errors": { @@ -884,7 +980,7 @@ }, "results": { "changeVote": "Mudar o voto", - "empty": "Ainda não há sondagens na reunião. Comece aqui uma sondagem!", + "empty": "Ainda não há sondagens na reunião.", "hideDetailedResults": "Ocultar detalhes", "showDetailedResults": "Mostrar detalhes", "vote": "Voto" @@ -899,12 +995,14 @@ "callMe": "Ligue-me", "callMeAtNumber": "Ligue-me para este número:", "calling": "A chamar", - "configuringDevices": "A configurar os dispositivos...", + "configuringDevices": "A configurar os dispositivos…", "connectedWithAudioQ": "Está ligado com áudio?", "connection": { + "failed": "Falha no teste de ligação!", "good": "A sua ligação à Internet parece boa!", "nonOptimal": "A sua ligação à Internet não é óptima", - "poor": "Tem uma má ligação à Internet" + "poor": "Tem uma ligação à Internet fraca", + "running": "A realizar teste de ligação..." }, "connectionDetails": { "audioClipping": "Prevemos que o seu áudio tenha cortes.", @@ -913,6 +1011,7 @@ "goodQuality": "Fantástico! A qualidade dos seus meios de comunicação vai ser óptima.", "noMediaConnectivity": "Não foi possível encontrar uma forma de estabelecer a conectividade dos meios de comunicação para este teste. Isto é tipicamente causado por uma firewall ou NAT.", "noVideo": "Prevemos que o seu vídeo seja terrível.", + "testFailed": "O teste de ligação encontrou problemas inesperados, mas isso pode não afetar a sua experiência.", "undetectable": "Se mesmo assim não conseguir fazer chamadas no browser, recomendamos que se certifique de que os seus altifalantes, microfone e câmara estão devidamente configurados, que concedeu ao seu browser direitos de utilização do seu microfone e câmara, e que a versão do seu browser está actualizada. Se mesmo assim tiver problemas em telefonar, deverá contactar o criador da aplicação web.", "veryPoorConnection": "Prevemos que a qualidade da sua chamada seja realmente terrível.", "videoFreezing": "Prevemos que o seu vídeo congele, fique preto, e seja pixelizado.", @@ -941,13 +1040,12 @@ "joinWithoutAudio": "Entrar sem áudio", "keyboardShortcuts": "Ativar os atalhos de teclado", "linkCopied": "Link copiado para a área de transferência", - "lookGood": "Tudo está a funcionar corretamente", + "lookGood": "Os seus dispositivos estão a funcionar corretamente", "or": "ou", "premeeting": "Pré-reunião", "proceedAnyway": "Continuar na mesma", "recordingWarning": "Outros participantes podem estar a gravar esta chamada", "screenSharingError": "Erro de partilha de ecrã:", - "showScreen": "Ativar o ecrã de pré-reunião", "startWithPhone": "Iniciar com o áudio do telefone", "unsafeRoomConsent": "Compreendo os riscos, quero participar na reunião", "videoOnlyError": "Erro de vídeo:", @@ -956,17 +1054,17 @@ }, "presenceStatus": { "busy": "Ocupado", - "calling": "Chamando...", + "calling": "Chamando…", "connected": "Conectado", - "connecting": "Conectando...", - "connecting2": "Conectando*...", + "connecting": "Conectando…", + "connecting2": "Conectando*…", "disconnected": "Desconectado", "expired": "Expirado", "ignored": "Ignorado", - "initializingCall": "Iniciando Chamada...", + "initializingCall": "Iniciando Chamada…", "invited": "Convidar", "rejected": "Rejeitado", - "ringing": "Tocando..." + "ringing": "Tocando…" }, "profile": { "avatar": "avatar", @@ -1000,7 +1098,7 @@ "errorFetchingLink": "Erro ao procurar link da gravação.", "expandedOff": "Gravação finalizada", "expandedOn": "A reunião está sendo gravada", - "expandedPending": "Iniciando gravação...", + "expandedPending": "Iniciando gravação…", "failedToStart": "Falha ao iniciar a gravação", "fileSharingdescription": "Partilhar o link da gravação com os participantes da reunião", "highlight": "Destaque", @@ -1018,7 +1116,7 @@ "localRecordingStartWarningTitle": "Parar a gravação para a salvar", "localRecordingVideoStop": "A paragem do seu vídeo também irá parar a gravação local. Tem a certeza de que quer continuar?", "localRecordingVideoWarning": "Para gravar o seu vídeo deve tê-lo ligado quando iniciar a gravação", - "localRecordingWarning": "Certifique-se de selecionar o separador actual a fim de utilizar o vídeo e áudio corretos. A gravação está actualmente limitada a 1 GB, o que é cerca de 100 minutos.", + "localRecordingWarning": "Certifique-se de selecionar o separador actual a fim de utilizar o vídeo e áudio corretos.", "loggedIn": "Conectado como {{userName}}", "noMicPermission": "Não foi possível criar a faixa de microfone. Por favor, conceda permissão para utilizar o microfone.", "noStreams": "Não foi detetado nenhum sinal áudio ou vídeo.", @@ -1027,7 +1125,8 @@ "on": "Começou a gravação", "onBy": "{{name}} iniciou a gravação", "onlyRecordSelf": "Gravar apenas as minhas transmissões áudio e vídeo", - "pending": "Preparando para gravar a reunião...", + "pending": "Preparando para gravar a reunião…", + "policyError": "Tentou iniciar uma gravação muito rapidamente. Por favor, tente novamente mais tarde!", "recordAudioAndVideo": "Gravar áudio e vídeo", "recordTranscription": "Gravar transcrições", "saveLocalRecording": "Guardar ficheiro de gravação localmente (Beta)", @@ -1071,16 +1170,18 @@ "signedIn": "Atualmente a aceder a eventos de calendário por {{email}}. Clique no botão Desconectar abaixo para parar de aceder a eventos de calendário.", "title": "Calendário" }, + "chatWithPermissions": "O chat requer permissão", "desktopShareFramerate": "Taxa de fotogramas para partilha do ambiente de trabalho", "desktopShareHighFpsWarning": "Uma taxa de fotogramas mais elevada para a partilha do ambiente de trabalho pode afectar a sua largura de banda. É necessário reiniciar a partilha de ecrã para que as novas definições entrem em vigor.", "desktopShareWarning": "É necessário reiniciar a partilha do ecrã para que as novas definições entrem em vigor.", "devices": "Dispositivos", "followMe": "Todos me seguem", + "followMeRecorder": "O gravador segue-me", "framesPerSecond": "fotogramas-por-segundo", "incomingMessage": "Receber uma mensagem", "language": "Idioma", "loggedIn": "Sessão iniciada como {{name}}", - "maxStageParticipants": "Número máximo de participantes que podem ser afixados (EXPERIMENTAL)", + "maxStageParticipants": "Número máximo de participantes que podem ser afixados", "microphones": "Microfones", "moderator": "Moderador", "moderatorOptions": "Opções de moderador", @@ -1099,6 +1200,7 @@ "selectMic": "Microfone", "selfView": "Autovisualização", "shortcuts": "Atalhos", + "showSubtitlesOnStage": "Mostrar legendas", "speakers": "Altifalantes", "startAudioMuted": "Todos começam com microfone desligado", "startReactionsMuted": "Todos começam com os sons de reação desativados", @@ -1152,11 +1254,13 @@ "fearful": "Temeroso", "happy": "Feliz", "hours": "{{count}}h", + "labelTooltip": "Número de participantes: {{count}}", "minutes": "{{count}}m", "name": "Nome", "neutral": "Neutro", "sad": "Triste", "search": "Pesquisar", + "searchDescription": "Comece a digitar para filtrar os participantes", "searchHint": "Pesquisar participantes", "seconds": "{{count}}s", "speakerStats": "Estatísticas dos Participantes", @@ -1193,6 +1297,7 @@ "closeChat": "Fechar chat", "closeMoreActions": "Fechar menu de mais ações", "closeParticipantsPane": "Fechar painel de participantes", + "closedCaptions": "Legendas ocultas", "collapse": "Colapsar", "document": "Mudar para documento partilhado", "documentClose": "Fechar documento partilhado", @@ -1222,6 +1327,7 @@ "lobbyButton": "Ativar/desativar sala de espera", "localRecording": "Mudar os controlos locais de gravação", "lockRoom": "Mudar palavra-chave de reunião", + "love": "Coração", "lowerHand": "Baixar a mão", "moreActions": "Mais ações", "moreActionsMenu": "Menu de mais ações", @@ -1232,13 +1338,14 @@ "muteEveryoneElsesVideo": "Parar o vídeo de todos os outros", "muteEveryonesVideo": "Parar o vídeo de todos", "muteGUMPending": "A ligar o seu microfone", - "noiseSuppression": "Supressão de ruído", + "noiseSuppression": "Supressão extra de ruído (BETA)", "openChat": "Abrir chat", - "participants": "Abrir painel de participantes", + "participants": "Abrir painel de participantes. {{participantsCount}} participantes", "pip": "Mudar para o modo Picture-in-Picture", "privateMessage": "Enviar mensagem privada", "profile": "Editar o seu perfil", "raiseHand": "Levantar a mão", + "react": "Reações às mensagens", "reactions": "Reações", "reactionsMenu": "Menu de reações", "recording": "Mudar gravação", @@ -1281,14 +1388,15 @@ "closeChat": "Fechar chat", "closeParticipantsPane": "Fechar painel de participantes", "closeReactionsMenu": "Fechar menu de reações", - "disableNoiseSuppression": "Desativar a supressão de ruído", + "closedCaptions": "Legendas ocultas", + "disableNoiseSuppression": "Desativar supressão de ruído extra (BETA)", "disableReactionSounds": "Pode desactivar os sons de reacção para esta reunião", "documentClose": "Fechar documento partilhado", "documentOpen": "Abrir documento partilhado", "download": "Descarregar as nossas aplicações", "e2ee": "Criptografia ponta a ponta", "embedMeeting": "Incorporar reunião", - "enableNoiseSuppression": "Ativar a supressão de ruído", + "enableNoiseSuppression": "Ativar supressão extra de ruído (BETA)", "endConference": "Terminar reunião para todos", "enterFullScreen": "Ver em ecrã completo", "enterTileView": "Ver em quadrícula", @@ -1310,6 +1418,7 @@ "lobbyButtonEnable": "Ativar sala de espera", "login": "Iniciar sessão", "logout": "Terminar sessão", + "love": "Coração", "lowerYourHand": "Baixar a mão", "moreActions": "Mais ações", "moreOptions": "Mais opções", @@ -1322,7 +1431,7 @@ "noAudioSignalDialInDesc": "Também pode marcar usando:", "noAudioSignalDialInLinkDesc": "Números de marcação", "noAudioSignalTitle": "Não há nenhuma entrada vinda do seu microfone!", - "noiseSuppression": "Supressão de ruído", + "noiseSuppression": "Supressão extra de ruído (BETA)", "noisyAudioInputDesc": "Parece que o seu microfone está a fazer barulho, por favor considere silenciar ou mudar de dispositivo.", "noisyAudioInputTitle": "Seu microfone parece estar barulhento!", "openChat": "Abrir chat", @@ -1335,6 +1444,7 @@ "raiseYourHand": "Levantar a mão", "reactionBoo": "Enviar reação de vaia", "reactionClap": "Enviar reação de aplausos", + "reactionHeart": "Enviar reação com coração", "reactionLaugh": "Enviar reação de risos", "reactionLike": "Enviar reação de aprovado", "reactionSilence": "Enviar reação de silêncio", @@ -1368,28 +1478,23 @@ "transcribing": { "ccButtonTooltip": "Iniciar/parar legendas", "expandedLabel": "Transcrição ativada", - "failedToStart": "Transcrição falhou ao iniciar", - "labelToolTip": "A reunião esta sendo transcrita", + "failed": "Falha na transcrição", + "labelTooltip": "Esta reunião está a ser transcrita.", + "labelTooltipExtra": "Além disso, uma transcrição estará disponível posteriormente.", + "openClosedCaptions": "Abrir legendas ocultas", + "original": "Original", "sourceLanguageDesc": "Atualmente a língua da reunião está definida para {{sourceLanguage}}.
Pode alterá-la a partir ", "sourceLanguageHere": "daqui", "start": "Exibir legendas", "stop": "Não exibir legendas", "subtitles": "Legendas", "subtitlesOff": "Desligado", - "tr": "TR" + "tr": "TR", + "translateTo": "Traduzir para" }, "unpinParticipant": "{{participantName}} - Desafixar", "userMedia": { - "androidGrantPermissions": "Selecione Permitir quando o seu navegador perguntar pelas permissões.", - "chromeGrantPermissions": "Selecione Permitir quando o seu navegador perguntar pelas permissões.", - "edgeGrantPermissions": "Selecione Sim quando o seu navegador perguntar pelas permissões.", - "electronGrantPermissions": "Dê as permissões para usar a sua câmara e microfone", - "firefoxGrantPermissions": "Selecione Partilhar Dispositivos Selecionados quando o seu navegador perguntar pelas permissões.", - "iexplorerGrantPermissions": "Selecione OK quando o seu navegador perguntar pelas permissões.", - "nwjsGrantPermissions": "Dê as permissões para usar a sua câmara e microfone", - "operaGrantPermissions": "Selecione Permitir quando o seu navegador perguntar pelas permissões.", - "react-nativeGrantPermissions": "Selecione Permitir quando o seu navegador perguntar pelas permissões.", - "safariGrantPermissions": "Selecione OK quando o seu navegador perguntar pelas permissões." + "grantPermissions": "Dê as permissões para usar a sua câmara e microfone." }, "videoSIPGW": { "busy": "Estamos a trabalhar para liberar recursos. Por favor, tente novamente em alguns minutos.", @@ -1417,7 +1522,7 @@ "ldTooltip": "Ver vídeo em baixa definição", "lowDefinition": "Baixa definição (LD)", "performanceSettings": "Definições de desempenho", - "recording": "Gravação em curso", + "recording": "Esta reunião está a ser gravada.", "sd": "SD", "sdTooltip": "Ver vídeo em definição padrão", "standardDefinition": "Definição padrão", @@ -1425,8 +1530,10 @@ }, "videothumbnail": { "connectionInfo": "Informações sobre a ligação", - "demote": "Passar a visitante", + "demote": "Passar a espectador", "domute": "Sem som", + "domuteDesktop": "Parar a partilha de ecrã", + "domuteDesktopOfOthers": "Interromper a partilha de ecrã para todos os outros", "domuteOthers": "Silenciar todos os outros", "domuteVideo": "Desativar a câmara", "domuteVideoOfOthers": "Desactivar a câmara de todos os outros", @@ -1468,7 +1575,7 @@ "image6": "Floresta ", "image7": "Nascer do sol", "none": "Nenhum", - "pleaseWait": "Por favor aguarde...", + "pleaseWait": "Por favor aguarde…", "removeBackground": "Remover imagem de fundo", "slightBlur": "Ligeiro esbatido", "title": "Fundos virtuais", @@ -1477,13 +1584,23 @@ "webAssemblyWarningDescription": "WebAssembly desactivado ou não suportado por este navegador" }, "visitors": { - "chatIndicator": "(visitante)", - "labelTooltip": "Número de visitantes: {{count}}", + "chatIndicator": "(espectador)", + "joinMeeting": { + "description": "Atualmente, é um espectador nesta conferência.", + "raiseHand": "Levantar a mão", + "title": "Participar na reunião", + "wishToSpeak": "Se deseja intervir, levante a mão e aguarde a aprovação do moderador." + }, + "labelTooltip": "Número de espectadores: {{count}}", "notification": { "demoteDescription": "Enviado aqui pelo {{actor}}, levante a mão para participar", - "description": "Para participar levante a sua mão", - "title": "É um visitante na reunião" - } + "noMainParticipantsDescription": "Um participante precisa de iniciar a reunião. Tente novamente daqui a pouco.", + "noMainParticipantsTitle": "Esta reunião ainda não começou.", + "noVisitorLobby": "Não é possível aderir enquanto houver uma sala de espera activada para a reunião.", + "notAllowedPromotion": "É necessário que um participante autorize primeiro o seu pedido.", + "title": "É um espectador na reunião" + }, + "waitingMessage": "Participará na reunião assim que esta estiver em direto!" }, "volumeSlider": "Controlo de volume", "welcomepage": { diff --git a/lang/main-ro.json b/lang/main-ro.json index ef51a031082b..c4175dffadc3 100644 --- a/lang/main-ro.json +++ b/lang/main-ro.json @@ -68,7 +68,7 @@ "installExtensionText": "" }, "connectingOverlay": { - "joiningRoom": "Sunteți conectat la conversația dumneavoastră ..." + "joiningRoom": "Sunteți conectat la conversația dumneavoastră…" }, "connection": { "ATTACHED": "Atașat", @@ -84,7 +84,7 @@ "GET_SESSION_ID_ERROR": "", "GOT_SESSION_ID": "", "LOW_BANDWIDTH": "", - "RECONNECTING": "A apărut o eroare de rețea. Reconectare..." + "RECONNECTING": "A apărut o eroare de rețea. Reconectare…" }, "connectionindicator": { "address": "Adresă:", @@ -131,7 +131,7 @@ "ifHaveApp": "Dacă aveti deja aplicația:", "launchWebButton": "Deschideți în browser", "openApp": "Continuați spre aplicație", - "title": "Deschidere apel video în {{app}}...", + "title": "Deschidere apel video în {{app}}…", "tryAgainButton": "Încercați din nou pe desktop" }, "defaultLink": "e.g. {{url}}", @@ -160,7 +160,7 @@ "Share": "Partajare", "Submit": "Trimiteți", "WaitForHostMsg": "Conferința nu a început. Daca sunteți moderatorul conferinței, vă rugăm să vă autentificați. Dacă nu, așteptați ca moderatorul să înceapă conferința.", - "WaitingForHost": "Așteptare moderator conferință ...", + "WaitingForHost": "Așteptare moderator conferință…", "Yes": "Da", "accessibilityLabel": { "liveStreaming": "Transmitere live" @@ -177,9 +177,9 @@ "cameraUnknownError": "Camera nu poate fi folosită din motive necunoscute.", "cameraUnsupportedResolutionError": "Camera dumneavoastră nu suportă rezoluția video necesara.", "close": "Închidere", - "conferenceDisconnectMsg": "Vă rugam să verificați conexiunea la rețea. Reconectare în {{seconds}} sec...", + "conferenceDisconnectMsg": "Vă rugam să verificați conexiunea la rețea. Reconectare în {{seconds}} sec…", "conferenceDisconnectTitle": "Ați fost deconectat.", - "conferenceReloadMsg": "Încercăm să remediem situația. Reconectare în {{seconds}} sec...", + "conferenceReloadMsg": "Încercăm să remediem situația. Reconectare în {{seconds}} sec…", "conferenceReloadTitle": "Din nefericire, ceva nu a funcționat corespunzător.", "confirm": "Confirmare", "confirmNo": "Nu", @@ -384,7 +384,7 @@ "errorLiveStreamNotEnabled": "Transmiterea live nu este activată pe {{email}}. Vă rugăm să activați opțiunea de transmitere live sau autentificați-vă cu un cont avand această opțiune activată.", "expandedOff": "Transmiterea live s-a încheiat", "expandedOn": "Acest apel video este transmis pe YouTube.", - "expandedPending": "Transmiterea a început...", + "expandedPending": "Transmiterea a început…", "failedToStart": "Începerea transmiterii live a eșuat ", "getStreamKeyManually": "Nu am reușit să preluăm fluxurile live. Încercați să obțineți cheia fluxului video YouTube.", "googlePrivacyPolicy": "Politica de confidențialitate Google", @@ -393,7 +393,7 @@ "offBy": "", "on": "Transmitere live", "onBy": "", - "pending": "Inițiere transmitere live...", + "pending": "Inițiere transmitere live…", "serviceName": "Serviciu de transmitere live", "signIn": "Conectați-vă cu Google", "signInCTA": "Conectați-vă sau introduceți cheia YouTube pentru distribuire video.", @@ -465,7 +465,7 @@ "startSilentDescription": "", "startSilentTitle": "", "suboptimalBrowserWarning": "Folosind acest browser nu veți beneficia de cea mai bună experiență pentru aceste apeluri video. În timp ce lucrăm la asta, vă recomandăm să folosiți unul din browser-ele suportate.", - "suboptimalExperienceDescription": "Hmm... se pare că experiența avută cu {{appName}} nu a decurs prea bine. Încercăm să îmbunătățim acest lucru, până atunci vă rugăm să folosiți unul dintre browserele suportate.", + "suboptimalExperienceDescription": "Hmm… se pare că experiența avută cu {{appName}} nu a decurs prea bine. Încercăm să îmbunătățim acest lucru, până atunci vă rugăm să folosiți unul dintre browserele suportate.", "suboptimalExperienceTitle": "Avertisment browser", "unmute": "" }, @@ -479,17 +479,17 @@ "poweredby": "cu sprijinul", "presenceStatus": { "busy": "Ocupat", - "calling": "Apelare...", + "calling": "Apelare…", "connected": "Conectat", - "connecting": "Conectare...", - "connecting2": "Conectare*...", + "connecting": "Conectare…", + "connecting2": "Conectare*…", "disconnected": "Deconectat", "expired": "Expirat", "ignored": "Ignorat", - "initializingCall": "Inițiere apel...", + "initializingCall": "Inițiere apel…", "invited": "Adăugat", "rejected": "Respins", - "ringing": "Apelare..." + "ringing": "Apelare…" }, "profile": { "setDisplayNameLabel": "Introduceți numele care va fi afișat", @@ -507,7 +507,7 @@ "error": "Înregistrare eșuată. Vă rugăm să încercați din nou mai târziu.", "expandedOff": "Înregistrarea s-a încheiat", "expandedOn": "Conversația este înregistrată.", - "expandedPending": "Înregistrarea a început...", + "expandedPending": "Înregistrarea a început…", "failedToStart": "Începerea înregistrării a eșuat", "fileSharingdescription": "Partajați înregistrarea cu ceilalți participanți", "live": "LIVE", @@ -516,7 +516,7 @@ "offBy": "{{name}} a oprit înregistrarea", "on": "Înregistrare", "onBy": "{{name}} a pornit înregistrarea", - "pending": "Se pregătește înregistrarea apelului video...", + "pending": "Se pregătește înregistrarea apelului video…", "rec": "REC", "serviceDescription": "Înregistrarea dumneavoastră va fi salvată de serviciul înregistrare", "serviceName": "Serviciu înregistrare", @@ -688,22 +688,13 @@ "failedToStart": "Inițierea copierii a eșuat", "labelToolTip": "Conversația este copiată", "off": "Copiere încheiată", - "pending": "Se pregătește copierea apelului video...", + "pending": "Se pregătește copierea apelului video…", "start": "Afișați subtitrări", "stop": "Ascundeți subtitrări", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Selectați 'Permiteti' când browserul vă cere permisiunea.", - "chromeGrantPermissions": "Selectați 'Permiteti' când browserul vă cere permisiunea.", - "edgeGrantPermissions": "Selectați 'Da' când browserul vă cere permisiunea.", - "electronGrantPermissions": "Vă rugam să acordați permisiunea pentru utilizarea camerei și a microfonului", - "firefoxGrantPermissions": "Selectați 'Parajare cu dispozitivul selectat' când browserul vă cere permisiunea.", - "iexplorerGrantPermissions": "Selectați OK când browserul vă cere permisiunea.", - "nwjsGrantPermissions": "Vă rugam să acordați permisiunea pentru utilizarea camerei și a microfonului", - "operaGrantPermissions": "Selectați 'Permiteti' când browserul vă cere permisiunea.", - "react-nativeGrantPermissions": "Selectați Allow când browserul vă cere permisiunea.", - "safariGrantPermissions": "Selectați OK când browserul vă cere permisiunea." + "grantPermissions": "Vă rugam să acordați permisiunea pentru utilizarea camerei și a microfonului." }, "videoSIPGW": { "busy": "Lucrăm la eliberarea resurselor. Vă rugăm încercați din nou în câteva minute.", diff --git a/lang/main-ru.json b/lang/main-ru.json index 20ce7909561f..ee43590305be 100644 --- a/lang/main-ru.json +++ b/lang/main-ru.json @@ -22,7 +22,7 @@ "noResults": "Поиск не дал результата", "outlookEmail": "Электронная почта Outlook", "phoneNumbers": "телефонные номера", - "searching": "Поиск...", + "searching": "Поиск…", "shareInvite": "Поделиться приглашением на встречу", "shareLink": "Поделиться ссылкой на встречу чтобы пригласить других", "shareStream": "Поделиться ссылкой на прямую трансляцию", @@ -144,7 +144,7 @@ "installExtensionText": "Установите расширение для интеграции с Google Календарь и Office 365" }, "connectingOverlay": { - "joiningRoom": "Пытаемся присоединиться к вашей конференции..." + "joiningRoom": "Пытаемся присоединиться к вашей конференции…" }, "connection": { "ATTACHED": "Прикреплено", @@ -223,8 +223,8 @@ "noMobileApp": "У вас нет приложения?", "or": "ИЛИ", "termsAndConditions": "Продолжая, вы соглашаетесь с нашими правилами и условиями.", - "title": "Запуск вашей встречи в {{app}}...", - "titleNew": "Запуск вашей встречи ...", + "title": "Запуск вашей встречи в {{app}}…", + "titleNew": "Запуск вашей встречи…", "tryAgainButton": "Повторите в настольном приложении", "unsupportedBrowser": "Вы используете браузер, который мы не поддерживаем." }, @@ -264,7 +264,7 @@ "Submit": "ОК", "WaitForHostMsg": "Конференция еще не началась. Если вы организатор, пожалуйста, авторизируйтесь. В противном случае дождитесь организатора.", "WaitingForHostButton": "Ждать организатора", - "WaitingForHostTitle": "Ждем организатора...", + "WaitingForHostTitle": "Ждем организатора…", "Yes": "Да", "accessibilityLabel": { "Cancel": "Отмена (закрыть диалоговое окно)", @@ -622,7 +622,7 @@ "errorLiveStreamNotEnabled": "Трансляция не подключена на {{email}}. Пожалуйста подключите трансляцию или войдите в аккаунт с подключенной трансляцией.", "expandedOff": "Прямая трансляция остановлена", "expandedOn": "В настоящий момент конференция транслируется на YouTube.", - "expandedPending": "Начинается прямая трансляция...", + "expandedPending": "Начинается прямая трансляция…", "failedToStart": "Ошибка трансляции видео", "getStreamKeyManually": "Прямые трансляций не найдены. Попробуйте получить ключ прямой трансляции от YouTube.", "googlePrivacyPolicy": "Политика конфиденциальности Google", @@ -634,7 +634,7 @@ "offBy": "{{name}} остановил прямую трансляцию", "on": "Трансляция", "onBy": "{{name}} начал прямую трансляцию", - "pending": "Начинаем трансляцию...", + "pending": "Начинаем трансляцию…", "serviceName": "Служба трансляции", "sessionAlreadyActive": "Этот сеанс уже записывается или транслируется в прямом эфире.", "signIn": "Войти через Google", @@ -664,10 +664,10 @@ "joinRejectedMessage": "Ваш запрос на присоединение был отклонен модератором.", "joinRejectedTitle": "Заявка на присоедиение отклонена.", "joinTitle": "Присоединиться к встрече", - "joinWithPasswordMessage": "Пытаюсь присоединиться с паролем, подождите...", + "joinWithPasswordMessage": "Пытаюсь присоединиться с паролем, подождите…", "joiningMessage": "Вы присоединитесь к встрече, как только кто-то примет ваш запрос", - "joiningTitle": "Просьба присоединиться к встрече...", - "joiningWithPasswordTitle": "Присоединение с паролем...", + "joiningTitle": "Просьба присоединиться к встрече…", + "joiningWithPasswordTitle": "Присоединение с паролем…", "knockButton": "Попросить присоединиться", "knockTitle": "Кто-то хочет присоединиться к встрече", "knockingParticipantList": "Список ожидающих участников", @@ -757,7 +757,7 @@ "linkToSalesforceDescription": "Вы можете отправить ссылку на сводку встречи Salesforce объекту.", "linkToSalesforceError": "Ошибка отправки ссылки на встречу для Salesforce", "linkToSalesforceKey": "Отправить ссылку на встречу для Salesforce", - "linkToSalesforceProgress": "Отправка ссылки на встречу для Salesforce...", + "linkToSalesforceProgress": "Отправка ссылки на встречу для Salesforce…", "linkToSalesforceSuccess": "Ссылка на эту встречу для Salesforce была отправлена", "localRecordingStarted": "{{name}} начал локальную запись.", "localRecordingStopped": "{{name}} остановил локальную запись.", @@ -822,8 +822,8 @@ }, "participantsPane": { "actions": { - "admit": "Признать", - "admitAll": "Признать все", + "admit": "Разрешить", + "admitAll": "Разрешить всем", "allow": "Разрешить", "allowVideo": "Разрешить видео", "askUnmute": "Попросить разрешение включить микрофон", @@ -837,7 +837,7 @@ "mute": "Выключить звук", "muteAll": "Выключить звук у всех", "muteEveryoneElse": "Выключить микрофон у остальных", - "reject": "Отказать", + "reject": "Отклонить", "stopEveryonesVideo": "Выключить у всех камеру", "stopVideo": "Остановить видео", "unblockEveryoneMicCamera": "Разблокировать у всех микрофон и камеру", @@ -860,6 +860,8 @@ "pinnedParticipant": "Участник закреплен", "polls": { "answer": { + "edit": "Редактировать", + "send": "Отправить", "skip": "Пропустить", "submit": "Подтвердить" }, @@ -873,6 +875,7 @@ "pollQuestion": "Вопрос опроса", "questionPlaceholder": "Задайте вопрос", "removeOption": "Удалить вариант", + "save": "Сохранить", "send": "Отправлять" }, "errors": { @@ -899,7 +902,7 @@ "callMe": "Позвоните мне", "callMeAtNumber": "Позвоните мне по этому номеру:", "calling": "Вызываем", - "configuringDevices": "Настраиваются устройства...", + "configuringDevices": "Настраиваются устройства…", "connectedWithAudioQ": "Вы подключили звук?", "connection": { "good": "Ваше интернет-соединение выглядит хорошо!", @@ -947,7 +950,6 @@ "proceedAnyway": "Продолжить в любом случае", "recordingWarning": "Другие участники могут записывать этот звонок", "screenSharingError": "Ошибка показа экрана:", - "showScreen": "Включить экран перед подключением", "startWithPhone": "Начать с телефонной связью", "unsafeRoomConsent": "Я понимаю риски и хочу присоединиться к встрече", "videoOnlyError": "Ошибка видео:", @@ -956,14 +958,14 @@ }, "presenceStatus": { "busy": "Занят", - "calling": "Вызываю...", + "calling": "Вызываю…", "connected": "Подключено", - "connecting": "Подключение...", - "connecting2": "Подключение*...", + "connecting": "Подключение…", + "connecting2": "Подключение*…", "disconnected": "Отключено", "expired": "Истек", "ignored": "Проигнорирован", - "initializingCall": "Инициализация звонка...", + "initializingCall": "Инициализация звонка…", "invited": "Приглашенный", "rejected": "Отклонен", "ringing": "Звоню. . ." @@ -1000,7 +1002,7 @@ "errorFetchingLink": "Ошибка получения ссылки на запись.", "expandedOff": "Запись остановлена", "expandedOn": "Данная конференция записывается.", - "expandedPending": "Начинаем запись конференции...", + "expandedPending": "Начинаем запись конференции…", "failedToStart": "Ошибка начала записи", "fileSharingdescription": "Поделиться записью с участниками конференции", "highlight": "Основное", @@ -1018,7 +1020,7 @@ "localRecordingStartWarningTitle": "Остановите запись для сохранения", "localRecordingVideoStop": "Остановка вашего видео также остановит локальную запись. Вы уверены, что хотите продолжить?", "localRecordingVideoWarning": "Чтобы записать ваше видео, оно должно быть включено при начале записи", - "localRecordingWarning": "Убедитесь, что вы выбрали текущую вкладку для использования правильного видео и аудио. Запись в настоящее время ограничена 1ГБ, что составляет около 100 минут.", + "localRecordingWarning": "Убедитесь, что вы выбрали текущую вкладку для использования правильного видео и аудио.", "loggedIn": "Вошел как {{userName}}", "noMicPermission": "Не удалось создать аудиодорожку микрофона. Пожалуйста, предоставьте разрешение на использование микрофона.", "noStreams": "Аудио или видеопоток не обнаружен.", @@ -1080,7 +1082,7 @@ "incomingMessage": "Входящее сообщение", "language": "Язык", "loggedIn": "Вошел как {{name}}", - "maxStageParticipants": "Максимальное количество участников, которых можно закрепить на главной сцене (ЭКСПЕРИМЕНТАЛЬНО)", + "maxStageParticipants": "Максимальное количество участников, которых можно закрепить на главной сцене", "microphones": "Микрофоны", "moderator": "Модератор", "moderatorOptions": "Настройки модератора", @@ -1380,16 +1382,7 @@ }, "unpinParticipant": "{{participantName}} - Открепить", "userMedia": { - "androidGrantPermissions": "Выберите Разрешить, когда браузер спросит о разрешениях.", - "chromeGrantPermissions": "Выберите Разрешить, когда браузер спросит о разрешениях.", - "edgeGrantPermissions": "Выберите Да, когда браузер спросит о разрешениях.", - "electronGrantPermissions": "Пожалуйста, дайте разрешение на доступ к камере и микрофону", - "firefoxGrantPermissions": "Выберите Поделиться выбранным устройством, когда браузер спросит о разрешениях.", - "iexplorerGrantPermissions": "Выберите OK, когда браузер спросит о разрешениях.", - "nwjsGrantPermissions": "Пожалуйста, дайте разрешение на доступ к камере и микрофону", - "operaGrantPermissions": "Выберите Разрешить, когда браузер спросит о разрешениях.", - "react-nativeGrantPermissions": "Выберите Разрешить, когда браузер спросит о разрешениях.", - "safariGrantPermissions": "Выберите OK, когда браузер спросит о разрешениях." + "grantPermissions": "Пожалуйста, дайте разрешение на доступ к камере и микрофону." }, "videoSIPGW": { "busy": "Мы работаем над высвобождением ресурсов. Пожалуйста, попробуйте через несколько минут.", @@ -1468,7 +1461,7 @@ "image6": "Лес", "image7": "Восход", "none": "Нет", - "pleaseWait": "Пожалуйста подождите...", + "pleaseWait": "Пожалуйста подождите…", "removeBackground": "Убрать фон", "slightBlur": "Легкое размытие", "title": "Виртуальные фоны", diff --git a/lang/main-sc.json b/lang/main-sc.json index 71b4513f7cf8..fff02a1c984f 100644 --- a/lang/main-sc.json +++ b/lang/main-sc.json @@ -1,5 +1,8 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "Ligòngiu a sa riunione: {{url}}" + }, "add": "Invita", "addContacts": "Invita a is cuntatos tuos", "contacts": "Cuntatos", @@ -19,7 +22,7 @@ "noResults": "Non cointzidet nissunu resultadu", "outlookEmail": "Posta de Outlook", "phoneNumbers": "nùmeros de telèfonu", - "searching": "Chirchende...", + "searching": "Chirchende…", "shareInvite": "Cumpartzi s'invitu a sa riunione", "shareLink": "Cumpartzi su ligòngiu de sa riunione pro invitare àtera gente", "shareStream": "Cumpartzi su ligòngiu a sa trasmissione in direta", @@ -39,6 +42,18 @@ "audioOnly": { "audioOnly": "Àmpiu de banda bàsciu" }, + "bandwidthSettings": { + "assumedBandwidthBps": "pro es. 10.000.000 pro 10 Mbps", + "assumedBandwidthBpsWarning": "Is valores prus artos podent provocare problemas de rete.", + "customValue": "valore personalizadu", + "customValueEffect": "pro cunfigurare su valore atuale de bps", + "leaveEmpty": "lassa·ddu bòidu", + "leaveEmptyEffect": "pro permìtere previsiones aprossimativas", + "possibleValues": "Valores possìbiles", + "setAssumedBandwidthBps": "Àmpiu de banda ipotèticu (bps)", + "title": "Cunfiguratziones de àmpiu de banda", + "zeroEffect": "pro disativare su vìdeu" + }, "breakoutRooms": { "actions": { "add": "Agiunghe aposentu separadu", @@ -48,15 +63,22 @@ "leaveBreakoutRoom": "Lassa s'aposentu separadu", "more": "Àteru", "remove": "Boga", + "rename": "Torra a nominare", + "renameBreakoutRoom": "Torra a nominare s'aposentu separadu", "sendToBreakoutRoom": "Imbia su partetzipante a:" }, + "breakoutList": "Lista de aposentos separados", + "buttonLabel": "Aposentos separados", "defaultName": "Aposentu separadu #{{index}}", + "hideParticipantList": "Cua sa lista de partetzipantes", "mainRoom": "Aposentu printzipale", "notifications": { - "joined": "Intrende a s'aposentu separadu\"{{name}}", + "joined": "Intrende a s'aposentu separadu\"{{name}}\"", "joinedMainRoom": "Intrende a s'aposentu printzipale", "joinedTitle": "Aposentos separados" - } + }, + "showParticipantList": "Ammustra sa lista de partetzipantes", + "title": "Aposentos separados" }, "calendarSync": { "addMeetingURL": "Agiunghe unu ligòngiu a s'addòbiu", @@ -87,9 +109,12 @@ } }, "chat": { + "disabled": "S'imbiu de messàgios de tzarrada est disativadu.", "enter": "Intra a s'aposentu", "error": "Faddina: su messàgiu tuo no est istadu imbiadu. Resone: {{faddina}}", + "everyone": "", "fieldPlaceHolder": "Aa", + "guestsChatIndicator": "", "lobbyChatMessageTo": "Messàgiu de tzarrada de aposentu de abetu a {{recipient}}", "message": "Messàgiu", "messageAccessibleTitle": "{{user}} narat:", @@ -100,18 +125,27 @@ "nickname": { "popover": "Sèbera unu nòmine", "title": "Inserta su nòmine pro impreare sa tzarrada", - "titleWithPolls": "Inserta su nòmine pro impreare sa tzarrada e is sondàgios" + "titleWithCC": "Inserta unu nòmine pro impreare is tzarradas e is sutatìtulos", + "titleWithPolls": "Inserta su nòmine pro impreare sa tzarrada e is sondàgios", + "titleWithPollsAndCC": "Inserta unu nòmine pro impreare is tzarradas, is sondàgios e is sutatìtulos", + "titleWithPollsAndCCAndFileSharing": "Inserta unu nòmine pro impreare is tzarradas, is sondàgios, is sutatìtulos e is archìvios" }, "noMessagesMessage": "Nissunu messàgiu ancora in sa riunione. Cumintza una tzarrada inoghe!", "privateNotice": "Messàgiu privadu a {{recipient}}", "sendButton": "Imbia", "smileysPanel": "Pannellu de emoji", + "systemDisplayName": "Sistema", "tabs": { "chat": "Tzarrada", + "closedCaptions": "Sutatìtulos", + "fileSharing": "Archìvios", "polls": "Sondàgios" }, "title": "Tzarrada", - "titleWithPolls": "Tzarradas e sondàgios", + "titleWithCC": "Sutatìtulos", + "titleWithFeatures": "Tzarrada e", + "titleWithFileSharing": "Archìvios", + "titleWithPolls": "Sondàgios", "you": "tue" }, "chromeExtensionBanner": { @@ -121,8 +155,12 @@ "dontShowAgain": "Non ddu torres a ammustrare", "installExtensionText": "Installa s'estensione de integratzione cun Google Calendar e Office 365" }, + "closedCaptionsTab": { + "emptyState": "Is sutatìtulos ant a èssere a disponimentu cando sa moderatzione ddos at a aviare", + "startClosedCaptionsButton": "Avia is sutatìtulos" + }, "connectingOverlay": { - "joiningRoom": "Connetende a sa riunione..." + "joiningRoom": "Connetende a sa riunione…" }, "connection": { "ATTACHED": "Allegados", @@ -134,9 +172,9 @@ "DISCONNECTED": "Disconnètidu", "DISCONNECTING": "Disconnetende", "ERROR": "Faddina", - "FETCH_SESSION_ID": "Otenende id de sessione...", + "FETCH_SESSION_ID": "Otenende id de sessione…", "GET_SESSION_ID_ERROR": "Faddina in su ritzevimentu de s'ide de sessione: {{code}}", - "GOT_SESSION_ID": "Otenende id de sessione... Fatu", + "GOT_SESSION_ID": "Otenende id de sessione… Fatu", "LOW_BANDWIDTH": "Vìdeu disativadu pro {{displayName}} pro istraviare àmpiu de banda" }, "connectionindicator": { @@ -147,6 +185,7 @@ "bridgeCount": "Nùmeru de servidores: ", "codecs": "Codificadores (A/V) ", "connectedTo": "Connessione cun:", + "e2eeVerified": "Verificadu cun E2EE:", "framerate": "Velotzidade de fotogrammas:", "less": "Prus pagu informatziones", "localaddress": "Indiritzu locale:", @@ -155,6 +194,7 @@ "localport_plural": "Portos locales:", "maxEnabledResolution": "imbiu màssimu", "more": "Àteras informatziones", + "no": "nono", "packetloss": "Pèrdida de pachetes:", "participant_id": "id de partetzipante:", "quality": { @@ -173,7 +213,8 @@ "status": "Connessione:", "transport": "Trasportu:", "transport_plural": "Trasportos:", - "video_ssrc": "Vìdeu SSRC:" + "video_ssrc": "Vìdeu SSRC:", + "yes": "eja" }, "dateUtils": { "earlier": "Prus antigu", @@ -183,13 +224,23 @@ "deepLinking": { "appNotInstalled": "Tenes bisòngiu de s'aplicatzione mòbile {{app}} pro aderire a custa tzarrada dae su telèfonu.", "description": "No est sutzèdidu nudda? Amus chircadu de aviare sa riunione tua in s'aplicatzione de iscrivania {{app}}. Torra a proare o avia·la dae s'aplicatzione web {{app}}.", + "descriptionNew": "No est sutzèdidu nudda? Amus proadu a aviare s'addòbiu tuo in s'{{app}}aplicatzione de iscrivania.

Podes torrare a proare o dd'aviare in su web.", "descriptionWithoutWeb": "No est sutzèdidu nudda? Amus chircadu de aviare sa riunione tua in s'aplicatzione de iscrivania {{app}}.", "downloadApp": "Iscàrriga s'aplicatzione", + "downloadMobileApp": "Iscàrriga·dda dae sa butega de aplicatziones", "ifDoNotHaveApp": "Si non tenes ancora s'aplicatzione:", "ifHaveApp": "Si tenes giai s'aplicatzione:", "joinInApp": "Intra a custa riunione impreende s'aplicatzione", + "joinInAppNew": "Aderi dae s'aplicatzione", + "joinInBrowser": "Aderi dae su navigadore", + "launchMeetingLabel": "Comente boles aderire a custu addòbiu?", "launchWebButton": "Avia in sa web", - "title": "Aviende sa reunione in {{app}}...", + "noDesktopApp": "Non tenes s'aplicatzione?", + "noMobileApp": "Non tenes s'aplicatzione?", + "or": "O PURU", + "termsAndConditions": "Si sighis a in antis, atzetas is tèrmines e cunditziones nostros.", + "title": "Aviende sa reunione in {{app}}…", + "titleNew": "Aviende s'addòbiu tuo…", "tryAgainButton": "Torra a proare in s'aplicatzione de iscrivania", "unsupportedBrowser": "Paret chi ses impreende unu navigadore non cumpatìbile." }, @@ -202,6 +253,12 @@ "microphonePermission": "Faddina in is permissos pro su micròfonu" }, "deviceSelection": { + "hid": { + "callControl": "Controllu de mutidas", + "connectedDevices": "Dispositivos connètidos:", + "deleteDevice": "Cantzella su dispositivu", + "pairDevice": "Assòtzia unu dispositivu" + }, "noPermission": "No as cuntzèdidu permissos", "previewUnavailable": "Sa pre-visualizatzione no est a disponimentu", "selectADevice": "Sèbera unu dispositivu", @@ -214,27 +271,43 @@ "statusMessage": "est immoe {{status}}" }, "dialog": { - "Back": "In segus", + "Back": "A coa", "Cancel": "Annulla", "IamHost": "So mere", "Ok": "AB", "Remove": "Boga", "Share": "Cumpartzi", "Submit": "Imbia", + "Understand": "Apo cumprèndidu. Mantene·mi a sa muda pro immoe", + "UnderstandAndUnmute": "Apo cumprèndidu. Ativa·mi s'àudio", "WaitForHostMsg": "Sa cunferèntzia no at cumintzadu. Si ses mere de custa cunferèntzia, autèntica·ti. Si nono, iseta chi arribet.", - "WaitingForHostTitle": "Isetende mere...", + "WaitForHostNoAuthMsg": "Sa cunferèntzia no at ancora cumintzadu ca nissunu profilu de moderatzione est arribadu. Abeta.", + "WaitingForHostButton": "Abeta sa moderatzione", + "WaitingForHostTitle": "Isetende mere…", "Yes": "Eja", "accessibilityLabel": { - "liveStreaming": "Trasmissione in direta" + "Cancel": "Annulla (lassa su diàlogu)", + "Ok": "AB (sarva e lassa su diàlogu)", + "close": "Serra su diàlogu", + "liveStreaming": "Trasmissione in direta", + "sharingTabs": "Optziones de cumpartzidura" }, "add": "Annanghe", "addMeetingNote": "Agiunghe una nota in pitzus de custa riunione", "addOptionalNote": "Agiunghe una nota (optzionale)", "allow": "Permite", + "allowToggleCameraDialog": "Permitis chi {{initiatorName}} cuncàmbiet sa modalidade de orientamentu de sa càmera tua?", + "allowToggleCameraTitle": "Permitis su càmbiu de càmera?", "alreadySharedVideoMsg": "Un'àteru partetzipante est giai cumpartende unu vìdeu. Custa cunferèntzia permitit de cumpartzire isceti unu vìdeu in contemporànea.", "alreadySharedVideoTitle": "Isceti unu vìdeu cumpartzidu in contemporànea.", "applicationWindow": "Ventana de s'aplicatzione", "authenticationRequired": "Autenticatzione netzessària", + "cameraCaptureDialog": { + "description": "Faghe una fotografia cun sa càmera e imbia·dda", + "ok": "Aberi sa càmera", + "reject": "Immoe nono", + "title": "Faghe una fotografia" + }, "cameraConstraintFailedError": "La càmera no satisfà algun dels requeriments.", "cameraNotFoundError": "Càmera no agatada.", "cameraNotSendingData": "Impossìbile atzèdere a sa càmera tua. Controlla si un'àtera aplicatzione est impreende custu dispositivu, sèbera un'àteru dispositivu dae su menù de cunfiguratziones o torra a carrigare s'aplicatzione.", @@ -244,11 +317,12 @@ "cameraUnknownError": "Non si podet impreare sa càmera (resone disconnota).", "cameraUnsupportedResolutionError": "Sa càmera no est cumpatìbile cun sa risolutzione de vìdeu rechèdida.", "close": "Serra", - "conferenceDisconnectMsg": "Controlla sa cunfiguratzione de rete. Torrende a connètere in {seconds} segundos...", + "conferenceDisconnectMsg": "Controlla sa cunfiguratzione de rete. Torrende a connètere in {seconds} segundos…", "conferenceDisconnectTitle": "Mutida disconnètida.", - "conferenceReloadMsg": "Semus chirchende de acontzare custu problema. Torrende a connètere in {seconds} segundos...", + "conferenceReloadMsg": "Semus chirchende de acontzare custu problema. Torrende a connètere in {seconds} segundos…", "conferenceReloadTitle": "B'est istada una faddina.", "confirm": "Cunfirma", + "confirmBack": "A coa", "confirmNo": "Nono", "confirmYes": "Eja", "connectError": "Ohia B'àt àpidu una faddina e non podimus connètere cun sa cunferèntzia.", @@ -257,6 +331,8 @@ "contactSupport": "Cuntatu s'agiudu", "copied": "Copiadu", "copy": "Còpia", + "demoteParticipantDialog": "Seguru chi boles mòvere custa persone a su pùblicu (visualizatzione ebbia)?", + "demoteParticipantTitle": "Cunverte a pùblicu (visualizatzione ebbia)", "dismiss": "Iscarta", "displayNameRequired": "Salude! Comente ti tzèrrias?", "done": "Fatu", @@ -268,6 +344,7 @@ "embedMeeting": "Incòrpora sa riunione", "enterDisplayName": "Inserta su nòmine tuo", "error": "Faddina", + "errorRoomCreationRestriction": "As chircadu de aderire tropu a sa lestra, torra a pustis.", "gracefulShutdown": "Su servìtziu nostru est in mantenimentu. Torra a proare a pustis.", "grantModeratorDialog": "Seguru chi boles donare permissos de moderatzione a {{participantName}}?", "grantModeratorTitle": "Dona permissos de moderatzione", @@ -281,7 +358,9 @@ "kickParticipantButton": "Boga", "kickParticipantDialog": "Seguru chi boles bogare custa persone?", "kickParticipantTitle": "Cheres bogare custa persone?", + "kickSystemTitle": "Ohia, t'ant bogadu dae s'addòbiu", "kickTitle": "Ohi! {{participantDisplayName}} t'at bogadu de sa riunione", + "learnMore": "àteras informatziones", "linkMeeting": "Acàpia sa riunione", "linkMeetingTitle": "Acàpia sa riunione a Salesforce", "liveStreaming": "Trasmissione in direta", @@ -291,6 +370,7 @@ "lockRoom": "Agiunghe una $t(lockRoomPassword) a sa riunion", "lockTitle": "Faddina in su blocu", "login": "Intra", + "loginQuestion": "Seguru chi ti boles identificare e lassare sa cunferèntzia?", "logoutQuestion": "Seguru chi boles essire e lassare sa cunferèntzia?", "logoutTitle": "Essi", "maxUsersLimitReached": "Lìmite de partetzipantes cròmpidu. Sa cunferèntzia est prena. Cuntata su mere de sa riunione o torra a proare.", @@ -303,22 +383,34 @@ "micTimeoutError": "Impossìbile aviare s'àudio. Lìmite de tempus lòmpidu.", "micUnknownError": "Non si podet impreare su micròfonu (resone disconnota).", "moderationAudioLabel": "Permite chi is partetzipantes ativent su micròfonu", - "moderationVideoLabel": "Permite chi is partetzipantes ativent su vìdeu", + "moderationDesktopLabel": "Permite chi is profilos chi no sunt de moderatzione potzant cumpartzire s'ischermu", + "moderationVideoLabel": "Permite chi profilos chi non sunt de moderatzione ativent su vìdeu", "muteEveryoneDialog": "Is partetzipantes podent ativare su micròfonu semper.", "muteEveryoneDialogModerationOn": "Is partetzipantes podent preguntare de chistionare semper.", "muteEveryoneElseDialog": "Una borta chi as postu calicunu a sa muda, no as a pòdere torrare a aviare s'àudio suo, però isse ddu at a pòdere fàghere in cale si siat momentu.", "muteEveryoneElseTitle": "Boles pònnere totus a sa muda francu {{whom}}?", + "muteEveryoneElsesDesktopDialog": "Cando si firmat sa cumpartzidura, non dda podes torrare a ativare, però is àteras persones ddu podent fàghere cando bolent.", + "muteEveryoneElsesDesktopTitle": "Boles firmare sa cumpartzidura de ischermu de totu is partetzipantes, francu cussa de {{whom}}?", "muteEveryoneElsesVideoDialog": "Cando sa càmera at a èssere disativada, no dd'as a pòdere ativare torra, isceti issos ant a pòdere.", "muteEveryoneElsesVideoTitle": "Boles firmare su vìdeu de totu is partetzipantes francu de {{whom}}?", "muteEveryoneSelf": "tue", "muteEveryoneStartMuted": "Dae immoe, is tzarradas cumintzant cun is utentes a sa muda", "muteEveryoneTitle": "Boles pònnere totus a sa muda?", + "muteEveryonesDesktopDialog": "Is partetzipantes podent cumpartzire s'ischermu in cale si siat momentu.", + "muteEveryonesDesktopDialogModerationOn": "Is partetzipantes podent imbiare una rechesta pro cumpartzire s'ischermu in cale si siat momentu.", + "muteEveryonesDesktopTitle": "Boles firmare sa cumpartzidura de ischermu de totu is partetzipantes?", "muteEveryonesVideoDialog": "Is partetzipantes podent ativare su vìdeu semper.", "muteEveryonesVideoDialogModerationOn": "Is partetzipantes podent preguntare de ativare su vìdeu semper.", "muteEveryonesVideoDialogOk": "Disabìlita", "muteEveryonesVideoTitle": "Boles firmare su vìdeu de totu is partetzipantes?", "muteParticipantBody": "No as a pòdere torrare a ativare s'àudio issoro, però is utentes ddu ant a pòdere ativare in cale si siat momentu.", "muteParticipantButton": "A sa muda", + "muteParticipantsDesktopBody": "No as a pòdere ativare sa cumpartzidura issoro, però ddu podent fàghere in cale si siat momentu.", + "muteParticipantsDesktopBodyModerationOn": "No as a pòdere aviare sa cumpartzidura de ischermu issoro, e nemmancu dd'ant a pòdere fàghere issos.", + "muteParticipantsDesktopButton": "Firma sa cumpartzidura de ischermu", + "muteParticipantsDesktopDialog": "Seguru chi boles disativare sa cumpartzidura de ischermu de custa persone? No dd'as a pòdere torrare a aviare, però issa ddu podet fàghere in cale si siat momentu.", + "muteParticipantsDesktopDialogModerationOn": "Seguru chi boles disativare sa cumpartzidura de ischermu de custa persone? No dd'as a pòdere torrare a aviare e nemmancu issa.", + "muteParticipantsDesktopTitle": "Boles disativare sa cumpartzidura de ischermu de custa persone?", "muteParticipantsVideoBody": "No dd'as a pòdere ativare torra, isceti issos ant a pòdere.", "muteParticipantsVideoBodyModerationOn": "No as a pòdere ativare sa càmera torra, nemmancu issos.", "muteParticipantsVideoButton": "Firma su vìdeu", @@ -334,12 +426,14 @@ "permissionCameraRequiredError": "Pro partetzipare in cunferèntzias cun vìdeu, serbint permissos pro sa càmera. Dona permissos in is cunfiguratziones", "permissionErrorTitle": "Permissu rechèdidu", "permissionMicRequiredError": "Pro partetzipare in cunferèntzias cun àudio, serbint permissos pro su micròfonu. Dona permissos in is cunfiguratziones", - "popupError": "Su navigadore tuo est blochende is ventanas emergentes de custu situ. Ativa is ventanas emergentes dae sa cunfiguratzione de seguresa de su navigadore e torra a proare.", - "popupErrorTitle": "Finestres emergents blocades", "readMore": "àteru", "recentlyUsedObjects": "Ogetos impreados de reghente", "recording": "Registrende", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossìbile in su mentras chi sa trasmissione in direta est ativa", + "recordingInProgressDescription": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA{{learnMore}}. S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.", + "recordingInProgressDescriptionFirstHalf": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA", + "recordingInProgressDescriptionSecondHalf": ". S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.", + "recordingInProgressTitle": "Registratzione in cursu", "rejoinNow": "Torra a intrare", "remoteControlAllowedMessage": "{{user}} at atzetadu sa rechesta tua de controllu remotu.", "remoteControlDeniedMessage": "{{user}} at refudadu sa rechesta tua de controllu remotu.", @@ -352,11 +446,13 @@ "removePassword": "Boga $t(lockRoomPassword)", "removeSharedVideoMsg": "Seguru chi boles bogare su vìdeu chi as cumpartzidu?", "removeSharedVideoTitle": "Boga vìdeu cumpartzidu", + "renameBreakoutRoomLabel": "Nòmine de s'aposentu", + "renameBreakoutRoomTitle": "Torra a nominare s'aposentu separadu", "reservationError": "Faddina de riserva de sistema", "reservationErrorMsg": "Còdighe de faddina: {{code}}, messàgiu: {{msg}}", "retry": "Torra a proare", "screenSharingAudio": "Cumpartzi s'àudio", - "screenSharingFailed": "Ohia Est istadu impossìbile a aviare sa cumpartzidura de ischermu.", + "screenSharingFailed": "Ohia! Est istadu impossìbile a aviare sa cumpartzidura de ischermu.", "screenSharingFailedTitle": "Faddina in sa cumpartzidura de ischermu.", "screenSharingPermissionDeniedError": "Ohia Faddina in is permissos de cumpartzidura de ischermu. Torra a carrigare e torra a proare.", "searchInSalesforce": "Chirca in Salesforce", @@ -371,8 +467,10 @@ "sendPrivateMessageTitle": "Boles imbiare custu messàgiu in privadu?", "serviceUnavailable": "Su servìtziu no est a disponimentu", "sessTerminated": "Mutida acabada", + "sessTerminatedReason": "Addòbiu acabbadu", "sessionRestarted": "Mutida ripristinada a càusa de unu problema de connessione.", "shareAudio": "Sighi", + "shareAudioAltText": "pro cumpartzire su cuntenutu disigiadu, nàviga a \"Ischeda de su navigadore\", seletziona su cuntenutu, ativa sa casella \"cumpartzi s'àudio\" e incarca su butone \"cumpartzi\"", "shareAudioTitle": "Comente si cumpartzit s'àudio", "shareAudioWarningD1": "depes firmare sa cumpartzidura de ischermu prima de cumpartzire d'àudio.", "shareAudioWarningD2": "depes torrare a aviare sa cumpartzidura de ischermu e ativare s'optzione \"cumpartzi s'àudio\".", @@ -383,11 +481,14 @@ "shareScreenWarningD2": "depes firmare sa cumpartzidura de àudio, aviare sa cumpartzidura de ischermu e ativare s'optzione \"cumpartzi s'àudio\".", "shareScreenWarningH1": "Si boles cumpartzire s'ischermu isceti:", "shareScreenWarningTitle": "Depes firmare sa cumpartzidura de àudio prima de cumpartzire s'ischermu", - "shareVideoLinkError": "Fruni unu ligòngiu de vìdeu curretu.", + "shareVideoConfirmPlay": "Ses chirchende de abèrrere unu situ esternu. Boles sighire?", + "shareVideoConfirmPlayTitle": "{{name}} at cumpartzidu unu vìdeu cun tegus.", + "shareVideoLinkError": "Ohia, custu vìdeu non si podet riproduire.", + "shareVideoLinkStopped": "Su vìdeu de {{name}} est istadu firmadu.", "shareVideoTitle": "Cumpartzi vìdeu", "shareYourScreen": "Cumpartzi s'ischermu", "shareYourScreenDisabled": "Cumpartzidura de ischermu disativada.", - "sharedVideoDialogError": "Faddina: URL non vàlidu", + "sharedVideoDialogError": "Faddina: URL non vàlidu o proibidu", "sharedVideoLinkPlaceholder": "ligòngiu de YouTube o ligòngiu de vìdeu diretu", "show": "Ammustra", "start": "Avia ", @@ -402,16 +503,42 @@ "thankYou": "Gràtzias de àere impreadu {{appName}}.", "token": "còdighe", "tokenAuthFailed": "No tenes permissu pro intrare in custa mutida.", + "tokenAuthFailedReason": { + "audInvalid": "Valore `aud` non vàlidu. Diat dèpere èssere `jitsi`.", + "contextNotFound": "Ammancat s'ogetu `context` de su payload.", + "expInvalid": "Valore `exp` non vàlidu.", + "featureInvalid": "Funtzionalidade non vàlida: {{feature}}. Est probàbile chi non siat istada ancora implementada.", + "featureValueInvalid": "Valore non vàlidu pro sa funtzionalidade {{feature}}.", + "featuresNotFound": "Ammancat s'ogetu `features` dae su payload.", + "headerNotFound": "Ammancat s'intestatzione.", + "issInvalid": "Valore `iss` non vàlidu. Diat dèpere èssere `chat`.", + "kidMismatch": "S'ID de sa crae (kid) non currispondet a sub.", + "kidNotFound": "Ammancat s'ID de sa crae (kid).", + "nbfFuture": "Su valore `nbf` est in su benidore.", + "nbfInvalid": "Valore `nbf` non vàlidu.", + "payloadNotFound": "Ammancat su payload.", + "tokenExpired": "Su token est iscadidu." + }, "tokenAuthFailedTitle": "Faddina in s'autenticatzione", + "tokenAuthFailedWithReasons": "Non tenes permissu pro aderire a custa mutida. Resones possìbiles: {{reason}}", + "tokenAuthUnsupported": "S'URL de su token no est cumpatìbile.", "transcribing": "Trascritzione", "unlockRoom": "Boga riunione $t(lockRoomPassword)", "user": "Impreadore", "userIdentifier": "Identificadore de utente", "userPassword": "Crae de utente", + "verifyParticipantConfirm": "Currispondent", + "verifyParticipantDismiss": "Non currispondent", + "verifyParticipantQuestion": "ISPERIMENTALE: Pregunta a {{participantName}} si bident su pròpiu cuntenutu in su pròpiu òrdine.", + "verifyParticipantTitle": "Verìfica de utente", "videoLink": "Ligòngiu de vìdeu", "viewUpgradeOptions": "Ammustra is optziones premium", "viewUpgradeOptionsContent": "Pro otènnere atzessu illimitadu a is funtzionalidades premium comente sa registratzione, sa trascritzione, trasmissione RTMP e àteru, depes passare a unu contu prus artu.", "viewUpgradeOptionsTitle": "As iscobertu una funtzionalidade premium.", + "whiteboardLimitContent": "Barigadu su nùmeru màssimu de utentes de sa pitzarra.", + "whiteboardLimitReference": "Pro àteras informatziones, bìsita", + "whiteboardLimitReferenceUrl": "su situ web nostru", + "whiteboardLimitTitle": "Impreu de sa pitzarra limitadu", "yourEntireScreen": "S'ischermu intreu" }, "documentSharing": { @@ -424,6 +551,9 @@ "title": "Incòrpora custa riunione" }, "feedback": { + "accessibilityLabel": { + "yourChoice": "Su sèberu tuo: {{rating}}" + }, "average": "Mèdiu", "bad": "Malu", "detailsLabel": "Nara·si de prus.", @@ -433,13 +563,32 @@ "veryBad": "Mala meda", "veryGood": "Bona meda" }, + "fileSharing": { + "downloadFailedDescription": "Torra·nche a proare.", + "downloadFailedTitle": "Faddina in s'iscarrigamentu", + "downloadFile": "Iscarrigamentu", + "downloadStarted": "", + "dragAndDrop": "Trìsina e lassa inoghe o in cale si siat àteru logu de s'ischermu is archìvios", + "fileAlreadyUploaded": "Custu archìviu est istadu giai carrigadu a custu addòbiu.", + "fileTooLargeDescription": "Assegura·ti chi s'archìviu non siat prus mannu de {{ maxFileSize }}.", + "fileTooLargeTitle": "S'archìviu seletzionadu est tropu mannu", + "fileUploadProgress": "", + "fileUploadedSuccessfully": "", + "removeFile": "Cantzella", + "removeFileSuccess": "", + "uploadFailedDescription": "Torra·nche a proare.", + "uploadFailedTitle": "Faddina in sa càrriga", + "uploadFile": "Cumpartzi un'archìviu" + }, + "filmstrip": { + "accessibilityLabel": { + "heading": "Miniaturas de vìdeu" + } + }, "giphy": { "noResults": "Nissunu resurtadu :(", "search": "Chirca GIPHY" }, - "helpView": { - "title": "Tzentru de agiudu" - }, "incomingCall": { "answer": "Risponde", "audioCallTitle": "Mutida in intrada", @@ -478,13 +627,16 @@ "noNumbers": "Nissunu nùmeru de mutire.", "noPassword": "Nissunu", "noRoom": "No as ispetzificadu nissuna sala de mutire.", + "noWhiteboard": "Impossìbile carrigare sa pitzarra.", "numbers": "Nùmeros de mutire.", "password": "$t(lockRoomPasswordUppercase): ", "reachedLimit": "Lìmite de su pianu barigadu.", "sip": "Indiritzu SIP", + "sipAudioOnly": "Indiritzu SIP de àudio ebbia", "title": "Cumpartzi", "tooltip": "Imbia su ligòngiu e is nùmeros de telèfonu de custa riunione", - "upgradeOptions": "Controlla is optziones premium in" + "upgradeOptions": "Controlla is optziones premium in", + "whiteboardError": "Faddina in sa càrriga de sa pitzarra. Torra·nche a proare a pustis." }, "inlineDialogFailure": { "msg": "Nci amus postu unu pagu.", @@ -534,10 +686,10 @@ "errorAPI": "Faddina in s'atzessu a is trasmissiones tuas de Youtube. Torra a proare.", "errorLiveStreamNotEnabled": "Sa trasmissione in direta no est ativa in {{email}}. Ativa sa trasmissione in direta o autèntica·ti in unu contu chi tèngiat ativa sa trasmissione in direta.", "expandedOff": "Trasmissione in direta firmada", - "expandedOn": "Custa riunione est trasmìtida in direta in YouTube.", - "expandedPending": "Trasmissione in direta aviada...", + "expandedOn": "Custu addòbiu est trasmìtidu in direta", + "expandedPending": "Trasmissione in direta aviada…", "failedToStart": "Faddina in s'aviu de sa trasmissione in direta", - "getStreamKeyManually": "No amus pòdidu retzire nissuna trasmissione in direta. Chirca de otènnere sa crae de YouTube tua pro is trasmissiones in idreta.", + "getStreamKeyManually": "No amus pòdidu retzire nissuna trasmissione in direta. Chirca de otènnere sa crae de YouTube tua pro is trasmissiones in direta.", "googlePrivacyPolicy": "Polìtica de riservadesa de Google", "inProgress": "Registratzione o trasmissione in direta in cursu", "invalidStreamKey": "Sa crae pro is trasmissiones in direta podet èssere iscurreta.", @@ -547,7 +699,8 @@ "offBy": "{{name}} at firmadu sa trasmissione in direta", "on": "Trasmissione in direta aviada", "onBy": "{{name}} at aviadu sa trasmissione in direta", - "pending": "Aviende sa trasmissione in direta...", + "pending": "Aviende sa trasmissione in direta…", + "policyError": "As chircadu de aviare una trasmissione in direta tropu a sa lestra. Torra·nche a proare a pustis.", "serviceName": "Servìtziu de trasmissione in direta", "sessionAlreadyActive": "S'est giai registrende o trasmitende in direta sa sessione.", "signIn": "Autèntica·ti cun Google", @@ -561,7 +714,6 @@ "youtubeTerms": "Cunditziones de servìtziu de YouTube" }, "lobby": { - "allow": "Permite", "backToKnockModeButton": "Pedi de intrare", "chat": "Tzarrada", "dialogTitle": "Modalidade de aposentu de abetu", @@ -578,22 +730,22 @@ "joinRejectedMessage": "Rechesta refudada dae sa moderatzione.", "joinRejectedTitle": "Rechesta refudada.", "joinTitle": "Intra a sa riunione", - "joinWithPasswordMessage": "Proende a intrare cun sa crae, abeta...", + "joinWithPasswordMessage": "Proende a intrare cun sa crae, abeta…", "joiningMessage": "As a intrare a sa riunione comente sa rechesta tua bèngiat atzetada", - "joiningTitle": "Pedende de intrare...", - "joiningWithPasswordTitle": "Intrende cun crae...", + "joiningTitle": "Pedende de intrare…", + "joiningWithPasswordTitle": "Intrende cun crae…", "knockButton": "Pedi de intrare", "knockTitle": "Una persone bolet intrare a sa riunione", "knockingParticipantList": "Lista de partetzipantes in ispera", "lobbyChatStartedNotification": "{{moderator}} at aviadu una tzarrada de aposentu de abetu cun {{attendee}}", "lobbyChatStartedTitle": "{{moderator}} at aviadu una tzarrada de aposentu de abetu cun tue.", + "lobbyClosed": "S'aposentu de abetu est istadu serradu.", "nameField": "Inserta su nòmin tuo", "notificationLobbyAccessDenied": "{{originParticipantName}} at refudadu s'intrada de {{targetParticipantName}}", "notificationLobbyAccessGranted": "{{originParticipantName}} at permìtidu s'intrada de {{targetParticipantName}}", "notificationLobbyDisabled": "{{originParticipantName} at disativadu s'aposentu de abetu", "notificationLobbyEnabled": "{{originParticipantName} at ativadu s'aposentu de abetu", "notificationTitle": "Aposentu de abetu", - "passwordField": "Inserta sa crae de sa riunione", "passwordJoinButton": "Aderi", "title": "Aposentu de abetu", "toggleLabel": "Ativa s'aposentu de abetu" @@ -626,6 +778,8 @@ "sessionToken": "Còdighe de sessione", "start": "Avia sa registratzione", "stop": "Firma sa registratzione", + "stopping": "Firmende sa registratzione", + "wait": "Abeta su sarvamentu de sa registratzione", "yes": "Eja" }, "lockRoomPassword": "crae", @@ -637,7 +791,10 @@ "me": "deo", "notify": { "OldElectronAPPTitle": "Vulnerabilidade de seguresa.", - "allowAction": "Permite", + "allowAll": "Permite totu", + "allowAudio": "Permite s'àudio", + "allowDesktop": "Permite sa cumpartzidura de ischermu", + "allowVideo": "Permite su vìdeu", "allowedUnmute": "Podes ativare su micròfonu tuo, aviare sa càmera o cumpartzire s'ischermu.", "audioUnmuteBlockedDescription": "S'ativatzione de su micròfonu est istada blocada a càusa de limitatziones de su sistema.", "audioUnmuteBlockedTitle": "Ativatzione de su micròfonu blocada.", @@ -645,18 +802,30 @@ "connectedOneMember": "{{name}} at aderidu a sa riunione", "connectedThreePlusMembers": "{{name}} e meda àtera gente at aderidu a sa riunione", "connectedTwoMembers": "{{first}} e {{second}} ant aderidu a sa riunione", - "dataChannelClosed": "Calidade de vìdeu bàscia", - "dataChannelClosedDescription": "Su canale ponte est istadu disconnètidu e pro custu sa calidade de vìdeu est limitada a su valore prus bàsciu.", + "connectionFailed": "Faddina in sa connessione. Torra·nche a proare a pustis.", + "dataChannelClosed": "Podet èssere chi sa calidade de vìdeu siat bàscia", + "dataChannelClosedDescription": "Su canale ponte est rutu e pro custu sa calidade de vìdeu podet èssere limitada a su valore prus bàsciu.", + "dataChannelClosedDescriptionWithAudio": "Su canale ponte est rutu e podet èssere chi nche siant problemas cun s'àudio e su vìdeu.", + "dataChannelClosedWithAudio": "Podet èssere chi nche siant problemas cun sa calidade de s'àudio e de su vìdeu", + "desktopMutedRemotelyTitle": "{{participantDisplayName}} at firmadu sa cumpartzidura de ischermu", + "disabledIframe": "S'integratzione serbit isceti a propòsitos de dimustratzione. Custa mutida s'at a disconnètere de immoe a {{timeout}} minutos.", + "disabledIframeSecondaryNative": "S'integratzione de {{domain}} serbit isceti a propòsitos de dimustratzione. Custa mutida s'at a disconnètere de immoe a {{timeout}} minutos.", + "disabledIframeSecondaryWeb": "S'integratzione de {{domain}} serbit isceti a propòsitos de dimustratzione. Custa mutida s'at a disconnètere de immoe a {{timeout}} minutos. Imprea Jitsi as a Service pro s'integratzione in produtzione.", "disconnected": "disconnètidu", "displayNotifications": "Ammustra is notìficas pro", + "dontRemindMe": "Non mi ddu regordes prus", "focus": "Focus de sa cunferèntzia", "focusFail": "{{component}} no est a disponimentu - torra a proare in {{ms}} seg", "gifsMenu": "GIPHY", "groupTitle": "Notìficas", - "hostAskedUnmute": "Sa moderatzione bolet chi chistiones", + "hostAskedUnmute": "Sa moderatzione bolet chi partètzipes.", + "invalidTenant": "Arrendatàriu non vàlidu", + "invalidTenantHyphenDescription": "S'arrendatàriu chi ses impreende no est vàlidu (cumintzat o acabbat cun '-').", + "invalidTenantLengthDescription": "S'arrendatàriu chi ses impreende est tropu longu.", "invitedOneMember": "Invitu imbiadu a {{name}}", "invitedThreePlusMembers": "Invitu imbiadu a {{name}} e àteras {{count}} persones", "invitedTwoMembers": "Invitu imbiadu a {{first}} e {{second}}", + "joinMeeting": "Aderi", "kickParticipant": "{{kicker}} at bogadu a {{kicked}}", "leftOneMember": "{{name}} at lassadu sa riunione", "leftThreePlusMembers": "{{name}} e meda àtera gente ant lassadu sa riunione", @@ -665,7 +834,7 @@ "linkToSalesforceDescription": "Podes acapiare su resumu de sa riunione a un'ogetu de Salesforce.", "linkToSalesforceError": "Faddina in s'acàpiu de sa riunione a Salesforce", "linkToSalesforceKey": "Acàpia custa riunione", - "linkToSalesforceProgress": "Acapiende sa riunione a Salesforce...", + "linkToSalesforceProgress": "Acapiende sa riunione a Salesforce…", "linkToSalesforceSuccess": "Riunione acapiada a Salesforce", "localRecordingStarted": "{{name}} at aviadu sa registratzione in locale.", "localRecordingStopped": "{{name}} at firmadu sa registratzione in locale.", @@ -689,48 +858,69 @@ "newDeviceAction": "Imprea", "newDeviceAudioTitle": "Dispositivu de àudio nou rilevadu", "newDeviceCameraTitle": "Càmera noa rilevada", - "noiseSuppressionDesktopAudioDescription": "Impossìbile ativare sa limpiadura de abbolotu in su mentras chi ses cumpartzende s'àudio de iscrivania. Disativa·dda e torra a proare.", - "noiseSuppressionFailedTitle": "Faddina in s'ativatzione de sa limpiadura de abbolotu", - "noiseSuppressionNoTrackDescription": "Ativa prima su telèfonu tuo.", - "noiseSuppressionStereoDescription": "Sa limpiadura de abbolotu de àudio stereo no est suportada.", + "nextToSpeak": "Ti tocat a chistionare a pustis", + "noiseSuppressionDesktopAudioDescription": "Impossìbile ativare sa limpiadura additzionale de abbolotu in su mentras chi ses cumpartzende s'àudio de iscrivania. Disativa·dda e torra a proare.", + "noiseSuppressionFailedTitle": "Faddina in s'ativatzione de sa limpiadura additzionale de abbolotu", + "noiseSuppressionStereoDescription": "Sa limpiadura additzionale de abbolotu no est cumpatìbile cun s'àudio stereo.", "oldElectronClientDescription1": "Paret chi ses impreende una versione betza de su cliente de Jitsi Meet, chi tenet vulnerabilidades de seguresa connotas. Assegura·ti chi atualizas a ", "oldElectronClientDescription2": "s'ùrtima versione", "oldElectronClientDescription3": " immoe.", + "openChat": "", "participantWantsToJoin": "Bolet intrare a sa riunione", "participantsWantToJoin": "Bolent intrare a sa riunione", "passwordRemovedRemotely": "Un'utente at bogadu $t(lockRoomPasswordUppercase)", "passwordSetRemotely": "Un'utente at cunfiguradu $t(lockRoomPasswordUppercase)", "raiseHandAction": "Àrtzia sa manu", - "raisedHand": "Bolet chistionare.", + "raisedHand": "Bolet partetzipare.", "raisedHands": "{{participantName}} e {{raisedHands}} àteras persones", "reactionSounds": "Disativa sonos", "reactionSoundsForAll": "Disativa sonos pro totus", "screenShareNoAudio": "Sa casella de cumpartzidura de àudio non fiat ativa in s'ischermu de seletzione de ventana.", "screenShareNoAudioTitle": "Impossìbile cumpartzire s'àudio de su sistema.", + "screenSharingAudioOnlyDescription": "Tene contu chi sa cumpartzidura de ischermu tenet cunsighèntzias in sa modalidade \"Rendimentu mègius\" e as a impreare prus àmpiu de banda.", + "screenSharingAudioOnlyTitle": "Modalidade \"Rendimentu mègius\"", "selfViewTitle": "Podes semper ammustrare s'àuto-visualizatzione dae sa cunfiguratzione", "somebody": "Calicunu", "startSilentDescription": "Torra a intrare pro ativare s'àudio", "startSilentTitle": "Ses intradu sena àudio.", "suboptimalBrowserWarning": "Timimus chi s'esperièntzia tua de custa riunione no at a èssere bona meda. Semus chirchende maneras de megiorare custu. In su mentras, proa un'àteru de is navigadores cumpatìbiles.", "suboptimalExperienceTitle": "Avisu subra de su navigadore", - "unmute": "Ativa su sonu", + "suggestRecordingAction": "Avia", + "suggestRecordingDescription": "Boles aviare sa registratzione?", + "suggestRecordingTitle": "Registra custu addòbiu", + "unmute": "Ativa s'àudio", + "unmuteScreen": "Avia sa cumpartzidura de ischermu", + "unmuteVideo": "Ativa su vìdeu", "videoMutedRemotelyDescription": "Ddu podes semper torrare a ativare.", "videoMutedRemotelyTitle": "{{participantDisplayName}} at istudadu su vìdeu tuo", "videoUnmuteBlockedDescription": "Ativatzione de sa càmera e cumpartzidura de ischermu blocadas in manera temporànea a càusa de limitatziones de su sistema.", "videoUnmuteBlockedTitle": "Ativatzione de sa càmera e cumpartzidura de ischermu blocadas.", "viewLobby": "Ammustra s'aposentu de abetu", - "waitingParticipants": "{{waitingParticipants}} persones" + "viewParticipants": "Ammustra is partetzipantes", + "viewVisitors": "Ammustra su pùblicu", + "waitingParticipants": "{{waitingParticipants}} persones", + "waitingVisitors": "Persones de su pùblicu abetende: {{waitingVisitors}}", + "waitingVisitorsTitle": "Sa trasmissione de s'addòbiu no est ancora cumintzada.", + "whiteboardLimitDescription": "Sarva su progressu tuo, dae chi su lìmite de utentes at a èssere barigadu de immoe a pagu e sa pitzarra s'at a serrare.", + "whiteboardLimitTitle": "Impreu de sa pitzarra" }, "participantsPane": { "actions": { "admit": "Ammite", "admitAll": "Ammite totu", - "allow": "Permite a is partetzipantes:", + "allow": "Permite a is partetzipantes sena profilu de moderatzione:", + "allowDesktop": "Permite sa cumpartzidura de ischermu", "allowVideo": "Permite vìdeu", + "askDesktop": "Pregunta·ddi de cumpartzire s'ischermu", "askUnmute": "Pedi de ativare su micròfonu", "audioModeration": "Ativare su pròpiu micròfonu", "blockEveryoneMicCamera": "Blocare su micròfonu e sa càmera de totu is partetzipantes", - "invite": "Invitare una persone", + "breakoutRooms": "Aposentos separados", + "desktopModeration": "Avia sa cumpartzidura de ischermu", + "goLive": "Trasmite in direta", + "invite": "Invita a una persone", + "lowerAllHands": "Abbassa totu is manos", + "lowerHand": "Abbassa sa manu", "moreModerationActions": "Àteras optziones de moderatzione", "moreModerationControls": "Àteros controllos de moderatzione", "moreParticipantOptions": "Àteras optziones de partetzipantes", @@ -738,6 +928,8 @@ "muteAll": "Totu a sa muda", "muteEveryoneElse": "Pone totus a sa muda", "reject": "Refuda", + "stopDesktop": "Firma sa cumpartzidura de ischermu", + "stopEveryonesDesktop": "Firma totu is cumpartziduras de ischermu", "stopEveryonesVideo": "Istuda su vìdeu de totu is partetzipantes", "stopVideo": "Firma su vìdeu", "unblockEveryoneMicCamera": "Isbloca su micròfonu e sa càmera de totu is partetzipantes", @@ -747,20 +939,30 @@ "headings": { "lobby": "Aposentu de abetu ({{count}})", "participantsList": "Partetzipantes de sa riunione ({{count}})", + "viewerRequests": "Rechestas de su pùblicu: {{count}}", + "visitorInQueue": " ({{count}} abetende)", + "visitorRequests": " ({{count}} rechestas)", + "visitors": "Persones de su pùblicu: {{count}}", + "visitorsList": "Persones de su pùblicu ({{count}})", "waitingLobby": "Abetende in s'aposentu de abetu ({{count}})" }, "search": "Chirca partetzipantes", + "searchDescription": "Cumintza a iscrìere pro filtrare partetzipantes", "title": "Partetzipantes" }, "passwordDigitsOnly": "Finas a {{number}} tzifras", "passwordSetRemotely": "Cunfiguradu dae un'àteru partetzipante", + "pinParticipant": "{{participantName}} - Apica", "pinnedParticipant": "Partetzipante apicadu", "polls": { "answer": { + "edit": "Modifica", + "send": "Imbia", "skip": "Brinca", "submit": "Imbia" }, "by": "Dae {{name}}", + "closeButton": "Serra su sondàgiu", "create": { "addOption": "Agiunghe optzione", "answerPlaceholder": "Optzione {{index}}", @@ -770,6 +972,7 @@ "pollQuestion": "Dimanda de sondàgiu", "questionPlaceholder": "Faghe una pregonta", "removeOption": "Boga s'optzione", + "save": "Sarva", "send": "Imbia" }, "errors": { @@ -781,7 +984,7 @@ }, "results": { "changeVote": "Càmbia su votu", - "empty": "Nissunu sondàgiu in custa riunione. Crea unu sondàgiu inoghe.", + "empty": "Nissunu sondàgiu in custu addòbiu.", "hideDetailedResults": "Cua is detàllios", "showDetailedResults": "Ammustra detàllios", "vote": "Vota" @@ -796,12 +999,14 @@ "callMe": "Muti·mi", "callMeAtNumber": "Muti·mi a custu nùmeru", "calling": "Mutende", - "configuringDevices": "Cunfigurende is dispositivos...", + "configuringDevices": "Cunfigurende is dispositivos…", "connectedWithAudioQ": "Tenes connessione de àudio?", "connection": { + "failed": "Faddina in su test de connessione.", "good": "Sa connessione internet tua paret bona.", "nonOptimal": "Sa connessione internet no est òtima", - "poor": "Sa connessione internet tua est pòbera" + "poor": "Sa connessione internet tua est pòbera", + "running": "Test de connessione in cursu…" }, "connectionDetails": { "audioClipping": "Est probàbile chi s'àudio tuo tèngiat interrutziones.", @@ -810,6 +1015,7 @@ "goodQuality": "Fantàsticu! Sa calidade de is elementos multimediales at a èssere perfeta.", "noMediaConnectivity": "Impossìbile istabilire connessione multimediale pro custa proa. A s'ispissu, custu est a càusa de unu firewall o NAT.", "noVideo": "Est probàbile chi s'àudio tuo siat de calidade bàscia meda.", + "testFailed": "Su test de connessione at agatadu problemas imprevistos, ma forsis no ant a tènnere cunsighèntzias in sa sessione tua.", "undetectable": "Si ancora non renesses a mutire dae su navigadore, assegura·ti chi is altoparlantes, sa càmera e su micròfonu tuos sunt cunfigurados bene, chia as donadu is permissos a su navigadore pro impreare sa càmera e su micròfonu e chi sa versione de su navigadore tuo est atualizada. Si tenes problemas in is mutidas, cuntata cun s'iscuadra de isvilupu de s'aplicatzione web.", "veryPoorConnection": "Est probàbile chi sa calidade de sa mutida siat bàscia meda.", "videoFreezing": "Est probàbile chi su vìdeu tuo s'at a cungelare, at a torrare nieddu o at a bènnere pixeladu. ", @@ -838,32 +1044,31 @@ "joinWithoutAudio": "Intra sena àudio", "keyboardShortcuts": "Ativa incurtzaduras de tecladu", "linkCopied": "Ligòngiu copiadu in punta de billete", - "lookGood": "Su micròfonu tuo est funtzionende", + "lookGood": "Is dispositivos tuos sunt funtzionende", "or": "opuru", "premeeting": "Pre-riunione", + "proceedAnyway": "Sighi su pròpiu", + "recordingWarning": "Podet èssere chi àteras persones siant registrende custa mutida", "screenSharingError": "Faddina in sa cumpartzidura de s'ischermu", - "showScreen": "Ativa ischermu de pre-riunione", "startWithPhone": "Avia imperende s'àudio de su telèfonu", + "unsafeRoomConsent": "Cumprendo is arriscos e bògio aderire a s'addòbiu", "videoOnlyError": "Faddina de vìdeu:", "videoTrackError": "Impossìbile creare una rasta de vìdeu.", "viewAllNumbers": "Ammustra totu is nùmeros" }, "presenceStatus": { "busy": "No a disponimentu", - "calling": "Mutende...", + "calling": "Mutende…", "connected": "Connessione istabilida", - "connecting": "Connetende...", - "connecting2": "Connetende*...", + "connecting": "Connetende…", + "connecting2": "Connetende*…", "disconnected": "Disconnètidu", "expired": "Iscadidu", "ignored": "Ignoradu", - "initializingCall": "Aviende sa mutida...", + "initializingCall": "Aviende sa mutida…", "invited": "Invitadu", "rejected": "Refudadu", - "ringing": "Sonende..." - }, - "privacyView": { - "title": "Riservadesa" + "ringing": "Sonende…" }, "profile": { "avatar": "immàgine de profilu", @@ -896,8 +1101,8 @@ "error": "Faddina in sa registratzione. Torra a proare.", "errorFetchingLink": "Faddina in su recùperu su ligòngiu de sa registratzione.", "expandedOff": "Registratzione firmada", - "expandedOn": "Registrende sa riunione.", - "expandedPending": "Aviende sa registratzione...", + "expandedOn": "Registrende sa riunione", + "expandedPending": "Aviende sa registratzione…", "failedToStart": "Faddina in s'aviu de sa registratzione", "fileSharingdescription": "Cumpartzi su ligòngiu de sa registratzione cun is partetzipantes a sa riunione", "highlight": "Evidèntzia", @@ -909,29 +1114,32 @@ "limitNotificationDescriptionNative": "A càusa de s'arta dimanda, sa registratzione tua at a èssere limitada a {{limit}} minutos. Pro una registratzione sena lìmites, imprea <3>{{app}}.", "limitNotificationDescriptionWeb": "A càusa de s'arta dimanda, sa registratzione tua at a èssere limitada a {{limit}} minutos. Pro registrare sena lìmites, imprea {{app}}.", "linkGenerated": "Amus generadu unu ligòngiu a sa registratzione tua.", - "live": "IN DIRETA", "localRecordingNoNotificationWarning": "Sa registratzione no at a èssere annuntziada a is partetzipantes. Si dd'as a dèpere fàghere iscire tue.", "localRecordingNoVideo": "Su vìdeu no s'est registrende.", "localRecordingStartWarning": "Assegura·ti chi firmas sa registratzione prima de essire de sa riunione, in manera chi bèngiat sarvada.", "localRecordingStartWarningTitle": "Firma sa registratzione pro dda sarvare", "localRecordingVideoStop": "Istudende su vìdeu as a firmare puru sa registratzione locale. Ses seguru de chèrrere sighire?", "localRecordingVideoWarning": "Pro registrare unu vìdeu, depet èssere allutu prima de cumintzare", - "localRecordingWarning": "Assegura·ti chi seletzionas s'ischeda atuale in manera de impreare s'àudio e su vìdeu curretos. Sa registratzione est limitada a 1 GB, est a nàrrere, a s'inghìriu de 100 minutos.", + "localRecordingWarning": "Assegura·ti chi seletzionas s'ischeda atuale in manera de impreare s'àudio e su vìdeu curretos.", "loggedIn": "Autenticatzione: {{userName}}", + "noMicPermission": "Est istadu possìbile a creare una rasta pro su micròfonu. Dona permissu pro impreare su micròfonu.", "noStreams": "Nissunu flussu de vìdeu o de àudio rilevadu.", "off": "Registratzione firmada", "offBy": "{{name}} at firmadu sa registratzione", "on": "Registratzione aviada", "onBy": "{{name}} at aviadu sa registratzione", "onlyRecordSelf": "Registra isceti is flussos mios de àudio e de vìdeu", - "pending": "Preparende pro registrare sa riunione", - "rec": "REG", + "pending": "Preparende sa registratzione de sa riunione…", + "policyError": "As chircadu de aviare sa registratzione tropu a sa lestra. Torra·nche a proare a pustis.", + "recordAudioAndVideo": "Registra s'àudio e su vìdeu", + "recordTranscription": "Registra sa trascritzione", "saveLocalRecording": "Sarva s'archìviu de registratzione in locale (Beta)", "serviceDescription": "Sa registratzione at a èssere sarvada dae su servìtziu de registratzione", "serviceDescriptionCloud": "Registratzione in sa nue", "serviceDescriptionCloudInfo": "Is riuniones registradas ant a èssere cantzelladas in automàticu a pustis de 24 oras de sa registratzione.", "serviceName": "Servìtziu de registratzione", "sessionAlreadyActive": "S'est giai registrende o trasmitende in direta sa sessione.", + "showAdvancedOptions": "Optziones avantzadas", "signIn": "Identìfica·ti", "signOut": "Essi", "surfaceError": "Seletziona s'ischeda atuale.", @@ -947,10 +1155,17 @@ "security": { "about": "Podes agiùnghere una $t(lockRoomPassword) a sa riunione. Is partetzipantes ant a dèpere frunire sa $t(lockRoomPassword) prima de èssere ammìtidos a sa riunione.", "aboutReadOnly": "Is partetzipantes moderadores podent agiùnghere una $t(lockRoomPassword) a sa riunione. Is partetzipantes ant a dèpere frunire sa $t(lockRoomPassword) prima de èssere ammìtidos a sa riunione.", - "insecureRoomNameWarning": "Su nòmine de custu aposentu no est seguru. Podet èssere chi lompant partetzipantes chi no as invitadu a sa cunferèntzia. Proa a crèschere sa seguresa de sa riunione cun su butone de seguresa.", - "title": "Optziones de seguresa" + "insecureRoomNameWarningNative": "Su nòmine de custu aposentu no est seguru. Podet èssere chi aderint a s'addòbiu persones chi non boles. {{recommendAction}} Àteras informatziones in pitzus de sa seguresa de is addòbios ", + "insecureRoomNameWarningWeb": "Su nòmine de custu aposentu no est seguru. Podet èssere chi aderint a s'addòbiu persones chi non boles. {{recommendAction}} Àteras informatziones in pitzus de sa seguresa de is addòbios inoghe.", + "title": "Optziones de seguresa", + "unsafeRoomActions": { + "meeting": "Piga in cunsideru de amparare s'addòbiu tuo impreende su butone de seguresa.", + "prejoin": "Piga in cunsideru s'impreu de unu nòmine prus ispetzìficu pro s'addòbiu.", + "welcome": "Piga in cunsideru unu nòmine prus ispetzìficu pro s'addòbiu, o sèbera unu de custos cussìgios." + } }, "settings": { + "audio": "Àudio", "buttonLabel": "Cunfiguratzione", "calendar": { "about": "S'integratzione cun su calendàriu {{appName}} est impreada pro atzèdere in manera segura a su calendàriu tuo pro chi potzat lèghere is eventos imbenientes.", @@ -959,21 +1174,25 @@ "signedIn": "Ses atzedende a is eventos de calendàriu pro {{email}}. Incarca su butone Disconnete in bàsciu pro firmare s'atzessu a eventos de calendàriu.", "title": "Calendàriu" }, + "chatWithPermissions": "Serbit su permissu pro impreare sa tzarrada", "desktopShareFramerate": "Lestresa de is fotogrammas de sa cumpartzidura de ischermu", "desktopShareHighFpsWarning": "Una lestresa prus arta pro sa cumpartzidura de ischermu podet influentzare s'àmpiu de banda. Depes torrare a aviare sa cumpartzidura de s'ischermu pro chi sa cunfiguratzione noa tèngiat efetu.", "desktopShareWarning": "Depes torrare a aviare sa cumpartzidura de s'ischermu pro chi sa cunfiguratzione noa tèngiat efetu.", "devices": "Dispositivos", "followMe": "Totus mi sighint", + "followMeRecorder": "Sa persone chi est registrende mi sighit", "framesPerSecond": "fotogrammas a su segundu", "incomingMessage": "Messàgiu in intrada", "language": "Limba", "loggedIn": "Autenticatzione: {{name}}", - "maxStageParticipants": "Nùmeru màssimu de partetzipantes chi podent èssere apicados a s'iscena printzipale (ISPERIMENTALE)", + "maxStageParticipants": "Nùmeru màssimu de partetzipantes chi podent èssere apicados a s'iscena printzipale", "microphones": "Micròfonos", "moderator": "Moderadore", + "moderatorOptions": "Optziones de moderatzione", "more": "Àteru", "name": "Nòmine", "noDevice": "Nissunu", + "notifications": "Notìficas", "participantJoined": "Partetzipante aderidu", "participantKnocking": "Unu partetzipante est intradu a s'aposentu de abetu", "participantLeft": "Unu partetzipante est essidu", @@ -984,13 +1203,15 @@ "selectCamera": "Càmera", "selectMic": "Micròfonu", "selfView": "Visualizatzione pròpia", - "sounds": "Sonos", + "shortcuts": "Incurtzaduras", + "showSubtitlesOnStage": "Ammustra sutatìtulos in su palcu", "speakers": "Altoparlantes", "startAudioMuted": "Totus cumintzant a sa muda", "startReactionsMuted": "Pone is sonos de reatzione a sa muda pro totus", "startVideoMuted": "Totus cumintzant a sa cua", "talkWhileMuted": "Chistiona cando a sa muda", - "title": "Cunfiguratzione" + "title": "Cunfiguratzione", + "video": "Vìdeu" }, "settingsView": { "advanced": "Avantzadas", @@ -998,6 +1219,7 @@ "alertOk": "AB", "alertTitle": "Atentzione", "alertURLText": "Custu URL no est vàlidu", + "apply": "Àplica", "buildInfoSection": "Informatzione de sa versione", "conferenceSection": "Cunferèntzia", "disableCallIntegration": "Disativa s'integratzione de mutidas nativas", @@ -1008,12 +1230,14 @@ "displayNamePlaceholderText": "Es: Laura Sanna", "email": "Indiritzu eletrònicu", "emailPlaceholderText": "indiritzu@esempru.com", + "gavatarMessage": "Si s'indiritzu de posta eletrònica tuo est assotziadu cun unu contu de Gravatar, dd'amus a impreare pro ammustrare sa fotografia de profilu tua.", "goTo": "Bae a", "header": "Cunfiguratzione", "help": "Agiudu", "links": "Ligòngios", "privacy": "Riservadesa", "profileSection": "Profilu", + "sdkVersion": "Versione SDK", "serverURL": "URL de su servidore", "showAdvanced": "Ammustra cunfiguratziones avantzadas", "startCarModeInLowBandwidthMode": "Avia sa modalidade de màchina cun àmpiu de banda bàsciu", @@ -1034,11 +1258,13 @@ "fearful": "Ispramadu", "happy": "Cuntentu", "hours": "{{count}} h", + "labelTooltip": "Nùmeru de partetzipantes: {{count}}", "minutes": "{{count}} min", "name": "Nòmine", "neutral": "Neutrale", "sad": "Tristu", "search": "Chirca", + "searchDescription": "Cumintza a iscrìere pro filtrare partetzipantes", "searchHint": "Chirca partetzipantes", "seconds": "{count} seg", "speakerStats": "Istatìsticas de partetzipante", @@ -1047,7 +1273,7 @@ }, "startupoverlay": { "genericTitle": "Sa riunione tenet bisòngiu de impreare sa càmera e su micròfonu tuos.", - "policyText": "", + "policyText": " ", "title": "{{app}} tenet bisòngiu de impreare sa càmera e su micròfonu tuos." }, "suspendedoverlay": { @@ -1062,29 +1288,40 @@ "toolbar": { "Settings": "Cunfiguratzione", "accessibilityLabel": { - "Settings": "Càmbia sa cunfiguratzione", + "Settings": "Aberi is cunfiguratziones", "audioOnly": "Càmbia àudio isceti", "audioRoute": "Sèbera su dispositivu de àudio", "boo": "Boo", - "breakoutRoom": "Intra/lassa s'aposentu separadu", + "breakoutRooms": "Aposentos separados", "callQuality": "Gesti sa calidade de su vìdeu", "carmode": "Modalidade de màchina", "cc": "Càmbia s'istadu de is sutatìtulos", "chat": "Aberi o serra sa tzarrada", "clap": "Aplàusu", + "closeChat": "Serra sa tzarrada", + "closeMoreActions": "Serra su menù de àteras optziones", + "closeParticipantsPane": "Serra su pannellu de partetzipantes", + "closedCaptions": "Sutatìtulos", "collapse": "Mìnima", - "dock": "Apica a sa ventana printzipale", "document": "Càmbia documentu cumpartzidu", + "documentClose": "Serra su documentu cumpartzidu", + "documentOpen": "Aberi su documentu cumpartzidu", "download": "Iscàrriga is aplicatziones nostras", "embedMeeting": "Incòrpora sa riunione", "endConference": "Serra sa riunione pro totus", + "enterFullScreen": "Ammustra in mannària prena", + "enterTileView": "Intra in visualizatzione in mosàicu", + "exitFullScreen": "Essi de ischermu in mannària prena", + "exitTileView": "Essi de sa visualizatzione in mosàicu", "expand": "Ismànnia", "feedback": "Lassa cummentos", "fullScreen": "Ativa o disativa ischermu in mannària prena", "giphy": "Cuncàmbia su menù GIPHY", "grantModerator": "Dona permissos de moderatzione", "hangup": "Essi de sa riunione", + "heading": "Barra de ainas", "help": "Agiudu", + "hideWhiteboard": "Cua sa pitzarra", "invite": "Invita gente", "kick": "Boga partetzipante", "laugh": "Rìere", @@ -1094,20 +1331,26 @@ "lobbyButton": "Ativa o disativa sa modalidade de aposentu de abetu", "localRecording": "Ativa o disativa is controllos de registratzione in locale", "lockRoom": "Ativa o disativa crae de riunione", + "love": "Coro", + "lowerHand": "Abbassa sa manu", "moreActions": "Àteras atziones", "moreActionsMenu": "Menù de atziones additzionales", "moreOptions": "Ammustra àteras optziones", - "mute": "Ativa o disativa s'àudio", + "mute": "Pone su micròfonu a sa muda", "muteEveryone": "Pone totus a sa muda", "muteEveryoneElse": "Pone totus a sa muda", "muteEveryoneElsesVideoStream": "Istuda su vìdeu de totu is àteros partetzipantes", "muteEveryonesVideoStream": "Istuda su vìdeu de totu is partetzipantes", - "noiseSuppression": "Limpiadura de abbolotu", - "participants": "Partetzipantes", + "muteGUMPending": "Connetende su micròfonu tuo", + "noiseSuppression": "Limpiadura additzionale de abbolotu (BETA)", + "openChat": "Aberi sa tzarrada", + "participants": "Aberi su pannellu de partetzipantes. {{participantsCount}} partetzipantes", "pip": "Ativa o disativa sa modalidade immàgine in immàgine", "privateMessage": "Imbia messàgiu de testu privadu", "profile": "Modìfica su profilu", "raiseHand": "Àrtzia o abbassa sa manu", + "react": "Reatziones a su messàgiu", + "reactions": "Reatziones", "reactionsMenu": "Aberi o serra su menù de reatziones", "recording": "Ativa o disativa sa registratzione", "remoteMute": "Pone partetzipante a sa muda", @@ -1121,18 +1364,36 @@ "sharedvideo": "Cuncàmbia sa cumpartzidura de vìdeu", "shortcuts": "Ativa o disativa incurtzaduras", "show": "Ammustra in s'iscena", + "showWhiteboard": "Ammustra sa pitzarra", "silence": "A sa muda", "speakerStats": "Càmbia istatìsticas de partetzipante", + "stopScreenSharing": "Firma sa cumpartzidura de ischermu tua", + "stopSharedVideo": "Firma su vìdeu", "surprised": "Ispantadu", "tileView": "Càmbia a visualizatzione in mosàicu", "toggleCamera": "Càmbia càmera", "toggleFilmstrip": "Ativa o disativa sa pellìcula", - "undock": "Boga e pone in una ventana separada", + "unmute": "Ativa su micròfonu", "videoblur": "Ativa o disativa isfocadu", "videomute": "Avia o firma sa càmera", - "whiteboard": "Ammustra o cua sa pitzarra" + "videomuteGUMPending": "Connessione a sa càmera tua in cursu", + "videounmute": "Avia sa càmera" }, "addPeople": "Agiunghe gente a sa mutida", + "advancedAudioSettings": { + "aec": { + "label": "" + }, + "agc": { + "label": "" + }, + "ns": { + "label": "" + }, + "stereo": { + "label": "" + } + }, "audioOnlyOff": "Disativa modalidade de àmpiu de banda bàsciu", "audioOnlyOn": "Ativa modalidade de àmpiu de banda bàsciu", "audioRoute": "Sèbera su dispositivu de àudio", @@ -1143,15 +1404,17 @@ "chat": "Aberi o serra sa tzarrada", "clap": "Aplàusu", "closeChat": "Serra sa tzarrada", + "closeParticipantsPane": "Serra su pannellu de is partetzipantes", "closeReactionsMenu": "Serra su menù de reatziones", - "disableNoiseSuppression": "Disativa sa limpiadura de abbolotu", + "closedCaptions": "Sutatìtulos", + "disableNoiseSuppression": "Disativa sa limpiadura additzionale de abbolotu (BETA)", "disableReactionSounds": "Podes disativare is sonos de reatzione pro custa riunione", - "dock": "Apica a sa ventana printzipale", "documentClose": "Serra su documentu cumpartzidu", "documentOpen": "Aberi su documentu cumpartzidu", "download": "Iscàrriga is aplicatziones nostras", "e2ee": "Critografia a nodu terminale", "embedMeeting": "Incòrpora sa riunione", + "enableNoiseSuppression": "Ativa sa limpiadura additzionale de abbolotu (BETA)", "endConference": "Serra sa riunione pro totus", "enterFullScreen": "Ammustra in mannària prena", "enterTileView": "Intra in visualizatzione in mosàicu", @@ -1173,18 +1436,20 @@ "lobbyButtonEnable": "Ativa sa modalidade de aposentu de abetu", "login": "Intra", "logout": "Essi", + "love": "Coro", "lowerYourHand": "Abbassa sa manu", "moreActions": "Àteras atziones", "moreOptions": "Àteras optziones", - "mute": "Ativa o disativa s'àudio", + "mute": "Pone su micròfonu a sa muda", "muteEveryone": "Pone totus a sa muda", "muteEveryonesVideo": "Istuda sa càmera de totus", + "muteGUMPending": "Connessione a su micròfonu tuo in cursu", "noAudioSignalDesc": "Si no dd'as postu a sa muda dae sa cunfiguratzione de sistema o dae su dispositivu, forsis depes cambiare dispositivu.", "noAudioSignalDescSuggestion": "Si no dd'as postu a sa muda dae sa cunfiguratzione de sistema o dae su dispositivu, forsis depes cambiare a su dispositivu cussigiadu.", "noAudioSignalDialInDesc": "Podes fintzas intrare cun una mutida:", "noAudioSignalDialInLinkDesc": "Nùmeros de mutida", "noAudioSignalTitle": "Nissunu sinnale dae su micròfonu tuo.", - "noiseSuppression": "Limpiadura de abbolotu", + "noiseSuppression": "Limpiadura additzionale de abbolotu (BETA)", "noisyAudioInputDesc": "Su micròfonu tuo faghet remore, forsis ti depes pònnere a sa muda o depes cambiare dispositivu.", "noisyAudioInputTitle": "Su micròfonu tuo faghet remore.", "openChat": "Aberi sa tzarrada", @@ -1197,10 +1462,13 @@ "raiseYourHand": "Àrtzia sa manu", "reactionBoo": "Imbia boo", "reactionClap": "Imbia aplàusu", + "reactionHeart": "Imbia unu coro comente reatzione", "reactionLaugh": "Imbia rìere", "reactionLike": "Imbia \"mi praghet\"", + "reactionLove": "", "reactionSilence": "Imbia reatzione de silèntziu", "reactionSurprised": "Imbia reatzione de ispantu", + "reactions": "Reatziones", "security": "Optziones de seguresa", "selectBackground": "Sèbera s'isfundu", "shareRoom": "Invita una persone", @@ -1220,37 +1488,32 @@ "talkWhileMutedPopup": "Ses chirchende de chistionare? Ses a sa muda.", "tileViewToggle": "Càmbia a visualizatzione in mosàicu", "toggleCamera": "Càmbia càmera", - "undock": "Boga e pone in una ventana separada", + "unmute": "Ativa su micròfonu", "videoSettings": "Impostatziones de sos vìdeos", - "videomute": "Avia o firma sa càmera" + "videomute": "Avia o firma sa càmera", + "videomuteGUMPending": "Connessione a sa càmera tua in cursu", + "videounmute": "Avia sa càmera" }, "transcribing": { "ccButtonTooltip": "Avia o firma sutatìtulos", - "error": "Faddina in sa trascritzione. Torra a proare.", "expandedLabel": "Trascritzione ativada", - "failedToStart": "Faddina in s'aviu de sa trascritzione", - "labelToolTip": "Trascriende sa riunione", - "off": "Trascritzione firmada", - "pending": "Preparende pro trascrìere sa riunione...", + "failed": "Faddina in sa trascritzione", + "labelTooltip": "Trascritzione de s'addòbiu in cursu.", + "labelTooltipExtra": "In prus, sa trascritzione at a èssere a disponimentu a pustis.", + "openClosedCaptions": "Aberi is sutatìtulos", + "original": "Originale", "sourceLanguageDesc": "Sa lìngua de sa riunione est {{sourceLanguage}}.
Dda podes modificare dae", "sourceLanguageHere": "inoghe", "start": "Cumintza a ammustrare sutatìtulos", "stop": "No ammustres prus sutatìtluos", "subtitles": "Sutatìtulos", "subtitlesOff": "Disativada", - "tr": "TR" + "tr": "TR", + "translateTo": "Tradue a" }, + "unpinParticipant": "{{participantName}} - Boga dae pitzus", "userMedia": { - "androidGrantPermissions": "Sèbera Permite cando su navigadore ti dimandet permissos.", - "chromeGrantPermissions": "Sèbera Permite cando su navigadore ti dimandet permissos.", - "edgeGrantPermissions": "Sèbera Eja cando su navigadore ti dimandet permissos.", - "electronGrantPermissions": "Proende a atzèdere a sa càmera e su micròfonu tuos", - "firefoxGrantPermissions": "Sèbera Cumpartzi dispositivos seletzionados cando su navigadore ti dimandet permissos.", - "iexplorerGrantPermissions": "Sèbera AB cando su navigadore ti dimandet permissos.", - "nwjsGrantPermissions": "Cuntzede permissos pro atzèdere a sa càmera e a su micròfonu tuos", - "operaGrantPermissions": "Sèbera Permite cando su navigadore ti dimandet permissos.", - "react-nativeGrantPermissions": "Sèbera Permite cando su navigadore ti dimandet permissos.", - "safariGrantPermissions": "Sèbera AB cando su navigadore ti dimandet permissos." + "grantPermissions": "Cuntzede permissos pro atzèdere a sa càmera e a su micròfonu tuos." }, "videoSIPGW": { "busy": "Semus traballende pro liberare resursas. Torra a proare dae immoe a carchi minutu.", @@ -1278,13 +1541,18 @@ "ldTooltip": "Vìdeu in definitzione bàscia (LD)", "lowDefinition": "Definitzione bàscia (LD)", "performanceSettings": "Impostatziones de rendimentu", + "recording": "Registratzione de s'addòbiu in cursu.", "sd": "SD", "sdTooltip": "Vìdeu in definitzione istandard (SD)", - "standardDefinition": "Definitzione istàndard (SD)" + "standardDefinition": "Definitzione istàndard (SD)", + "streaming": "Trasmissione in cursu" }, "videothumbnail": { "connectionInfo": "Informatzione de sa connessione", + "demote": "Cunverte a pùblicu (visualizatzione ebbia)", "domute": "A sa muda", + "domuteDesktop": "Firma sa cumpartzidura de s'ischermu", + "domuteDesktopOfOthers": "Firma sa cumpartzidura de ischermu de totu is àteras persones", "domuteOthers": "Pone totus a sa muda", "domuteVideo": "Disativa sa videocàmera", "domuteVideoOfOthers": "Disativa sa càmera de totu is àteros", @@ -1292,6 +1560,7 @@ "grantModerator": "Dona permissos de moderatzione", "hideSelfView": "Cua sa visualizatzione pròpia", "kick": "Boga", + "mirrorVideo": "Riprodui su vìdeu meu", "moderator": "Moderadore", "mute": "Partetzipante a sa muda", "muted": "A sa muda", @@ -1301,10 +1570,15 @@ "show": "Ammustra in s'iscena", "showSelfView": "Ammustra sa visualizatzione pròpia", "unpinFromStage": "Boga dae pitzu", + "verify": "Verifica su partetzipante", "videoMuted": "Càmera disativada", "videomute": "Custa persone at firmadu sa càmera" }, "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Isfundu atuale: {{background}}", + "selectBackground": "Seletziona un'isfundu" + }, "addBackground": "Agiunghe un'isfundu", "apply": "Àplica", "backgroundEffectError": "Faddina in s'efetu de isfundu", @@ -1320,7 +1594,7 @@ "image6": "Padente ", "image7": "Arbèschida", "none": "Nissunu", - "pleaseWait": "Abeta...", + "pleaseWait": "Abeta…", "removeBackground": "Boga s'isfundu", "slightBlur": "Isfocamentu ligeru", "title": "Isfundos virtuales", @@ -1328,6 +1602,27 @@ "webAssemblyWarning": "WebAssembly non cumpatìbile", "webAssemblyWarningDescription": "WebAssembly est disativadu o incumpatìbile cun custu navigadore" }, + "visitors": { + "chatIndicator": "(in su pùblicu)", + "joinMeeting": { + "description": "Ses parte de su pùblicu de custa cunferèntzia.", + "raiseHand": "Àrtzia sa manu", + "title": "Aderende a s'addòbiu", + "wishToSpeak": "Si boles chistionare, àrtzia sa manu cun s'icona in bàsciu e abeta su permissu de sa moderatzione." + }, + "labelTooltip": "Persones in su pùblicu: {{count}}", + "notification": { + "demoteDescription": "Imbiadu inoghe dae {{actor}}, àrtzia sa manu pro partetzipare", + "noMainParticipantsDescription": "S'addòbiu depet èssere aviadu dae una persone. Torra·nche a proare a pustis.", + "noMainParticipantsTitle": "Custu addòbiu no at ancora cumintzadu.", + "noVisitorLobby": "Non podes aderire cun un'aposentu de abetu ativu pro s'addòbiu.", + "notAllowedPromotion": "Sa rechesta tua depet èssere aprovada in antis dae calicuna persone.", + "requestToJoin": "", + "requestToJoinDescription": "", + "title": "Ses parte de su pùblicu de s'addòbiu" + }, + "waitingMessage": "As a aderire a s'addòbiu comente s'at a aviare sa trasmissione." + }, "volumeSlider": "Barra de volùmene", "welcomepage": { "accessibilityLabel": { @@ -1360,6 +1655,7 @@ "microsoftLogo": "Icona de Microsoft", "policyLogo": "Polìtica de iconas" }, + "meetingsAccessibilityLabel": "Addòbios", "mobileDownLoadLinkAndroid": "Iscàrriga s'aplicatzione mòbile pro Android", "mobileDownLoadLinkFDroid": "Iscàrriga s'aplicatzione mòbile pro F-Droid", "mobileDownLoadLinkIos": "Iscàrriga s'aplicatzione mòbile pro iOS", @@ -1368,6 +1664,7 @@ "recentList": "Reghentes", "recentListDelete": "Cantzella s'elementu", "recentListEmpty": "Sa lista de reghentes est bòida. Tzarra cun s'iscuadra tua e as a agatare totu is riuniones reghentes tuas inoghe.", + "recentMeetings": "Is addòbios reghentes tuos", "reducedUIText": "Ti donamus su benebènnidu a {{app}}!", "roomNameAllowedChars": "Su nòmine de sa riunione non podet inclùdere custos caràteres: ?, &, :, ', \", %, #.", "roomname": "Inserta su nòmine de s'aposentu", @@ -1376,6 +1673,13 @@ "settings": "Cunfiguratzione", "startMeeting": "Avia sa riunione", "terms": "Cunditziones", - "title": "Vìdeu-cunferèntzia segura, prena de funtzionalidades, lìbera e de badas" + "title": "Vìdeu-cunferèntzia segura, prena de funtzionalidades, lìbera e de badas", + "upcomingMeetings": "Is addòbios imbenientes tuos" + }, + "whiteboard": { + "accessibilityLabel": { + "heading": "Pitzarra" + }, + "screenTitle": "Pitzarra" } } diff --git a/lang/main-sk.json b/lang/main-sk.json index 2a527c48ab66..6e9b306a939d 100644 --- a/lang/main-sk.json +++ b/lang/main-sk.json @@ -83,7 +83,7 @@ "installExtensionText": "Nainštalujte rozšírenie pre integráciu s Google Calendar a Office 365" }, "connectingOverlay": { - "joiningRoom": "Pripájanie do konferencie..." + "joiningRoom": "Pripájanie do konferencie…" }, "connection": { "ATTACHED": "Priložený", @@ -95,9 +95,9 @@ "DISCONNECTED": "Odpojený", "DISCONNECTING": "Odpájanie", "ERROR": "Chyba", - "FETCH_SESSION_ID": "Získavanie session-id...", + "FETCH_SESSION_ID": "Získavanie session-id…", "GET_SESSION_ID_ERROR": "Chyba pri získavaní session-id: {{code}}", - "GOT_SESSION_ID": "Získavanie session-id... Hotovo", + "GOT_SESSION_ID": "Získavanie session-id… Hotovo", "LOW_BANDWIDTH": "Video pre {{displayName}} bolo vypnuté, aby sa ušetrila prenosová kapacita" }, "connectionindicator": { @@ -146,7 +146,7 @@ "ifHaveApp": "Ak máte aplikáciu:", "joinInApp": "Vstúpiť do konferencie cez aplikáciu", "launchWebButton": "Otvoriť na webe", - "title": "Konferencia sa otvára v {{app}}...", + "title": "Konferencia sa otvára v {{app}}…", "tryAgainButton": "Skúsiť znova s natívnou aplikáciou" }, "defaultLink": "napr. {{url}}", @@ -175,7 +175,7 @@ "Share": "Zdieľať", "Submit": "OK", "WaitForHostMsg": "Konferencia sa ešte nezačala. Autorizujte sa prosím ak ste hostiteľ. V opačnom prípade čakajte na hostiteľa.", - "WaitingForHost": "Čakám na hostiteľa ...", + "WaitingForHost": "Čakám na hostiteľa…", "Yes": "Áno", "accessibilityLabel": { "liveStreaming": "Živé vysielanie" @@ -193,9 +193,9 @@ "cameraUnknownError": "Z neznámeho dôvodu sa kamera nedá použiť.", "cameraUnsupportedResolutionError": "Kamera nepodporuje požadované rozlíšenie.", "close": "Zatvoriť", - "conferenceDisconnectMsg": "Skontrolujte prípadne vaše sieťové pripojenie. Pripájam znovu o {{seconds}} sekúnd...", + "conferenceDisconnectMsg": "Skontrolujte prípadne vaše sieťové pripojenie. Pripájam znovu o {{seconds}} sekúnd…", "conferenceDisconnectTitle": "Vaše spojenie bolo prerušené.", - "conferenceReloadMsg": "Snažíme sa to napraviť. Pripájam znovu o {{seconds}} sekund...", + "conferenceReloadMsg": "Snažíme sa to napraviť. Pripájam znovu o {{seconds}} sekund…", "conferenceReloadTitle": "Spojenie sa prerušilo.", "confirm": "Potvrdiť", "confirmNo": "Nie", @@ -413,7 +413,7 @@ "errorLiveStreamNotEnabled": "Živé vysielanie pre {{email}} nie je aktivované. Aktivujte živé vysielanie, alebo sa prihláste pomocou konta s aktivovaným živým vysielaním.", "expandedOff": "Živé vysielanie bolo zastavené", "expandedOn": "Stretnutie je momentálne vysielané na YouTube.", - "expandedPending": "Spúšťa živé vysielanie...", + "expandedPending": "Spúšťa živé vysielanie…", "failedToStart": "Nepodarilo sa spustiť živé vysielanie", "getStreamKeyManually": "Nepodarilo sa získať žiadne živé vysielania. Skúste získať kľúč pre živé vysielanie z YouTube.", "googlePrivacyPolicy": "Pravidlá ochrany súkromia Google", @@ -424,7 +424,7 @@ "offBy": "{{name}} ukončil živé vysielanie", "on": "Živé vysielanie", "onBy": "{{name}} začal živé vysielanie", - "pending": "Spúšťa sa živé vysielanie...", + "pending": "Spúšťa sa živé vysielanie…", "serviceName": "Služba pre živé vysielanie", "signIn": "Prihlásiť sa pomocou Google", "signInCTA": "Prihláste sa, alebo zadajte váš YouTube klúč pre živé vysielanie.", @@ -451,10 +451,10 @@ "invalidPassword": "Nesprávne heslo", "joinRejectedMessage": "Vaša žiadosť bola zamietnutá moderátorom.", "joinTitle": "Vstup do konferencie", - "joinWithPasswordMessage": "Vstupujem s heslom...", + "joinWithPasswordMessage": "Vstupujem s heslom…", "joiningMessage": "Vstúpite do konferencie, keď niekto schváli vašu žiadosť", - "joiningTitle": "Žiadam o vstup do konferencie...", - "joiningWithPasswordTitle": "Vstupujem s heslom...", + "joiningTitle": "Žiadam o vstup do konferencie…", + "joiningWithPasswordTitle": "Vstupujem s heslom…", "knockButton": "Požiadať o vstup", "knockTitle": "Niekto žiada o vstup do konferencie", "knockingParticipantList": "Zoznam čakajúcich účastníkov", @@ -560,7 +560,7 @@ "callMe": "Zavolať mi", "callMeAtNumber": "Zavolajte mi na toto číslo:", "calling": "Volanie", - "configuringDevices": "Konfigurácia zariedení...", + "configuringDevices": "Konfigurácia zariedení…", "connectedWithAudioQ": "Ste pripojení so zvukom?", "copyAndShare": "Kopírovať a zdieľať odkaz", "dialInMeeting": "Volanie dnu do konferencie", @@ -596,10 +596,10 @@ "disconnected": "Odpojený", "expired": "Vypršaní", "ignored": "Ignorovaný", - "initializingCall": "Volanie je inicializované...", + "initializingCall": "Volanie je inicializované…", "invited": "Pozvať", "rejected": "Zložiť", - "ringing": "Zvoní..." + "ringing": "Zvoní…" }, "profile": { "setDisplayNameLabel": "Nastavte si meno", @@ -617,7 +617,7 @@ "error": "Nahrávka sa nepodarila. Skúste prosím znovu.", "expandedOff": "Nahrávanie bolo zastavené", "expandedOn": "Stretnutie sa momentálne nahráva.", - "expandedPending": "Začína sa nahrávanie...", + "expandedPending": "Začína sa nahrávanie…", "failedToStart": "Nepodarilo sa začať nahrávanie", "fileSharingdescription": "Nahrávku zdielať s účastníkmi stretnutia", "limitNotificationDescriptionNative": "Nahrávanie je obmedzené na {{limit}} minút. Pre neobmedzené nahrávanie skúste <3>{{app}}.", @@ -628,7 +628,7 @@ "offBy": "{{name}} zastavil nahrávanie", "on": "Nahrávanie", "onBy": "{{name}} začal nahrávanie", - "pending": "Pripravuje sa nahrávanie stretnutia...", + "pending": "Pripravuje sa nahrávanie stretnutia…", "rec": "REC", "serviceDescription": "Vaša nahrávka sa ukladá nahrávacou službou", "serviceName": "Nahrávacia služba", @@ -831,22 +831,13 @@ "failedToStart": "Prepisovanie sa nepodarilo naštartovať", "labelToolTip": "Stretnutie je prepisované", "off": "Prepisovanie sa skončilo", - "pending": "Pripravuje sa prepisovanie stretnutia...", + "pending": "Pripravuje sa prepisovanie stretnutia…", "start": "Začni zobrazovať titulky", "stop": "Skonči zobrazovať titulky", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Vyberte Povoliť keď sa prehliadač bude pýtať na povolenie.", - "chromeGrantPermissions": "Vyberte Povoliť keď sa prehliadač bude pýtať na povolenie.", - "edgeGrantPermissions": "Vyberte Áno keď sa prehliadač bude pýtať na povolenie.", - "electronGrantPermissions": "Prosím povoľte prístup k vašemu mikrofónu a kamere.", - "firefoxGrantPermissions": "Vyberte Zdieľaj vybrané zariadenie keď sa prehliadač bude pýtať na povolenie.", - "iexplorerGrantPermissions": "Vyberte Ok keď sa prehliadač bude pýtať na povolenie.", - "nwjsGrantPermissions": "Prosím povoľte prístup k vašemu mikrofónu a kamere.", - "operaGrantPermissions": "Vyberte Povoliť keď sa prehliadač bude pýtať na povolenie.", - "react-nativeGrantPermissions": "Vyber Povoliť keď sa prehliadač bude pýtať na povolenie.", - "safariGrantPermissions": "Vyberte OK keď sa prehliadač bude pýtať na povolenie." + "grantPermissions": "Prosím povoľte prístup k vašemu mikrofónu a kamere." }, "videoSIPGW": { "busy": "Všetky zdroje sú obsadené, skúste znovu o pár minút.", diff --git a/lang/main-sl.json b/lang/main-sl.json index 84421f510e27..b795d17f3724 100644 --- a/lang/main-sl.json +++ b/lang/main-sl.json @@ -20,7 +20,7 @@ "noResults": "Ni bilo mogoče najti ustreznih rezultatov", "outlookEmail": "Outlook e-naslov", "phoneNumbers": "telefonske številke", - "searching": "Iskanje ...", + "searching": "Iskanje…", "shareInvite": "Deli povabilo za sestanek", "shareLink": "Deli povezavo sestanka za povabljanje drugih", "shareStream": "Deli povezavo do prenosa v živo", @@ -90,7 +90,7 @@ "installExtensionText": "Install the extension for Google Calendar and Office 365 integration" }, "connectingOverlay": { - "joiningRoom": "Povezovanje v sobo, kjer poteka srečanje..." + "joiningRoom": "Povezovanje v sobo, kjer poteka srečanje…" }, "connection": { "ATTACHED": "Priključeno", @@ -102,9 +102,9 @@ "DISCONNECTED": "Ni povezave", "DISCONNECTING": "Prekinjanje povezave", "ERROR": "Napaka", - "FETCH_SESSION_ID": "Pridobivanje ID-ja seje...", + "FETCH_SESSION_ID": "Pridobivanje ID-ja seje…", "GET_SESSION_ID_ERROR": "Napaka pri pridobivanju ID-ja seje: {{code}}", - "GOT_SESSION_ID": "Pridobivanje ID-ja seje... dokončano", + "GOT_SESSION_ID": "Pridobivanje ID-ja seje… dokončano", "LOW_BANDWIDTH": "Zaradi manjše porabe pasovne širine omrežja je bil video za uporabnika {{displayName}} izključen" }, "connectionindicator": { @@ -157,7 +157,7 @@ "ifHaveApp": "Če že imate aplikacijo:", "joinInApp": "Pridruži se sestanku z aplikacijo", "launchWebButton": "Zaženi na spletu", - "title": "Povezovanje na vaše srečanje v {{app}}...", + "title": "Povezovanje na vaše srečanje v {{app}}…", "tryAgainButton": "Poskusite ponovno na namizju" }, "defaultLink": "npr. {{url}}", @@ -186,7 +186,7 @@ "Share": "Deli", "Submit": "Pošlji", "WaitForHostMsg": "Konferenca v sobi se še ni začela. Če ste gostitelj, se prosimo prijavite, sicer pa počakajte na gostitelja srečanja.", - "WaitingForHostTitle": "Čakanje gostitelja ...", + "WaitingForHostTitle": "Čakanje gostitelja…", "Yes": "Da", "accessibilityLabel": { "liveStreaming": "Prenos v živo" @@ -206,9 +206,9 @@ "cameraUnknownError": "Kamere ni mogoče uporabiti zaradi neznanega razloga.", "cameraUnsupportedResolutionError": "Vaša kamera ne podpira zahtevane video ločljivosti.", "close": "Zapri", - "conferenceDisconnectMsg": "Imate morda težave z omrežno povezljivostjo? Poskus ponovne povezave čez {{seconds}} s...", + "conferenceDisconnectMsg": "Imate morda težave z omrežno povezljivostjo? Poskus ponovne povezave čez {{seconds}} s…", "conferenceDisconnectTitle": "Povezava je bila prekinjena.", - "conferenceReloadMsg": "Težavo skušamo odpraviti. Poskus ponovne povezave čez {{seconds}} s...", + "conferenceReloadMsg": "Težavo skušamo odpraviti. Poskus ponovne povezave čez {{seconds}} s…", "conferenceReloadTitle": "Nekaj je šlo žal narobe.", "confirm": "Potrdi", "confirmNo": "Ne", @@ -475,7 +475,7 @@ "errorLiveStreamNotEnabled": "Prenos v živo na {{email}} ni omogočen. Prosimo, omogočite prenos v živo ali se prijavite v račun, ki ima omogočen prenos v živo.", "expandedOff": "Prenos v živo je zaustavljen", "expandedOn": "Srečanje se prenaša na YouTube.", - "expandedPending": "Prenos v živo se začenja...", + "expandedPending": "Prenos v živo se začenja…", "failedToStart": "Prenos v živo se ni začel", "getStreamKeyManually": "Ni bilo mogoče najti prenosov v živo. Poskusite pridobiti ključ za prenos v živo iz YouTuba.", "googlePrivacyPolicy": "Politika zasebnosti Google", @@ -486,7 +486,7 @@ "offBy": "Uporabnik {{name}} je prekinil prenos v živo", "on": "Prenos v živo", "onBy": "Uporabnik {{name}} je začel prenos v živo", - "pending": "Začenjam prenos v živo...", + "pending": "Začenjam prenos v živo…", "serviceName": "Storitev prenosa v živo", "signIn": "Prijavite se z Googlovim računom", "signInCTA": "Prijavite se ali vnesite ključ za prenos v živo iz YouTuba.", @@ -514,10 +514,10 @@ "invalidPassword": "Napačno geslo", "joinRejectedMessage": "Vašo prošnjo je zavrnil moderator.", "joinTitle": "Pridruži se", - "joinWithPasswordMessage": "Pridruževanje sestanku z geslom...", + "joinWithPasswordMessage": "Pridruževanje sestanku z geslom…", "joiningMessage": "Sestanku se boste pridružili, takoj ko vas bo nekdo sprejel.", - "joiningTitle": "Pridruževanju sestanku...", - "joiningWithPasswordTitle": "Pridruževanje sestanku z geslom...", + "joiningTitle": "Pridruževanju sestanku…", + "joiningWithPasswordTitle": "Pridruževanje sestanku z geslom…", "knockButton": "Prosi za dostop", "knockTitle": "Nekdo se želi pridružiti sestanku", "knockingParticipantList": "Seznam udeležencev, ki se želijo pridružiti", @@ -692,7 +692,7 @@ "callMe": "Pokliči me", "callMeAtNumber": "Pokliči me na tej številki:", "calling": "Klicanje", - "configuringDevices": "Nastavljanje naprav...", + "configuringDevices": "Nastavljanje naprav…", "connectedWithAudioQ": "Ste povezani z zvokom?", "connection": { "good": "Vaša internetna povezava je dobra!", @@ -737,7 +737,6 @@ "or": "ali", "premeeting": "Pred sestanek", "screenSharingError": "Napaka deljenja zaslona:", - "showScreen": "Omogoči zaslon pred sestankom", "startWithPhone": "Začni z zvokom telefona", "videoOnlyError": "Napaka videa:", "videoTrackError": "Ni bilo mogoče ustvariti videa.", @@ -745,17 +744,17 @@ }, "presenceStatus": { "busy": "Zaseden", - "calling": "Kličem...", + "calling": "Kličem…", "connected": "Povezan", - "connecting": "Povezovanje...", - "connecting2": "Povezovanje*...", + "connecting": "Povezovanje…", + "connecting2": "Povezovanje*…", "disconnected": "Prekinjeno", "expired": "Pretečeno", "ignored": "Ignorirano", - "initializingCall": "Začetek klica...", + "initializingCall": "Začetek klica…", "invited": "Povabljen", "rejected": "Zavrnjen", - "ringing": "Zvoni..." + "ringing": "Zvoni…" }, "profile": { "avatar": "avatar", @@ -776,7 +775,7 @@ "errorFetchingLink": "Napaka pri pridobivanju povezave do posnetka.", "expandedOff": "Snemanje se je zaustavilo.", "expandedOn": "Sestanek se trenutno snema.", - "expandedPending": "Snemanje se začenja...", + "expandedPending": "Snemanje se začenja…", "failedToStart": "Snemanja ni bilo mogoče začeti", "fileSharingdescription": "Delite snemanje z udeleženci srečanja", "limitNotificationDescriptionNative": "Zaradi velikega povpraševanja bo snemanje omejeno na {{limit}} min. Za neomejeno snemanje preizkusite <3>{{app}}.", @@ -788,7 +787,7 @@ "offBy": "{{name}} je ustavil snemanje", "on": "Snemanje", "onBy": "{{name}} je začel snemanje", - "pending": "Priprava snemanja srečanja...", + "pending": "Priprava snemanja srečanja…", "rec": "REC", "serviceDescription": "Vaš posnetek bo shranila storitev snemanja", "serviceDescriptionCloud": "Snemanje v oblak", @@ -1042,22 +1041,13 @@ "failedToStart": "Prepisovanja ni bilo mogoče začeti", "labelToolTip": "Sestanek se prepisuje", "off": "Prepisovanje zaustavljeno", - "pending": "Priprava na prepis sestanka...", + "pending": "Priprava na prepis sestanka…", "start": "Začni prikazovati podnapise", "stop": "Prenehaj prikazovati podnapise", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Izberite Dovoli, ko brskalnik zahteva dovoljenja.", - "chromeGrantPermissions": "Izberite Dovoli, ko brskalnik zahteva dovoljenja.", - "edgeGrantPermissions": "Izberite Da, ko brskalnik zahteva dovoljenja.", - "electronGrantPermissions": "Prosimo, da odobrite zahtevo za uporabo kamere in mikrofona", - "firefoxGrantPermissions": "Izberite Skupna raba izbrane naprave, ko brskalnik zahteva dovoljenja.", - "iexplorerGrantPermissions": "Izberite OK, ko brskalnik zahteva dovoljenja.", - "nwjsGrantPermissions": "Prosimo, da odobrite zahtevo za uporabo kamere in mikrofona", - "operaGrantPermissions": "Izberite Dovoli, ko brskalnik zahteva dovoljenja.", - "react-nativeGrantPermissions": "Izberite Dovoli, ko brskalnik zahteva dovoljenja.", - "safariGrantPermissions": "Izberite OK, ko brskalnik zahteva dovoljenja." + "grantPermissions": "Prosimo, da odobrite zahtevo za uporabo kamere in mikrofona." }, "videoSIPGW": { "busy": "Delamo na sprostitvi virov. Poskusite znova čez nekaj minut.", @@ -1118,7 +1108,7 @@ "image6": "Gozd", "image7": "Sončni vzhod", "none": "Brez", - "pleaseWait": "Prosimo, počakajte ...", + "pleaseWait": "Prosimo, počakajte…", "removeBackground": "Odstrani ozadje", "slightBlur": "Delna zameglitev", "title": "Virtualna ozadja", diff --git a/lang/main-sq.json b/lang/main-sq.json index c00160908344..f239d27a3e67 100644 --- a/lang/main-sq.json +++ b/lang/main-sq.json @@ -128,6 +128,7 @@ "privateNotice": "Mesazh privat për {{recipient}}", "sendButton": "Dërgoje", "smileysPanel": "Panel emoxhish", + "systemDisplayName": "Sistem", "tabs": { "chat": "Fjalosje", "polls": "Pyetësorë" @@ -263,6 +264,7 @@ "Share": "Ndaje", "Submit": "Parashtroje", "WaitForHostMsg": "Konferenca s’ka nisur, ngaqë s’ka mbërritur ende ndonjë moderator. Nëse dëshironi të bëheni një moderator, ju lutemi, bëni hyrjen. Përndryshe, ju lutemi, pritni.", + "WaitForHostNoAuthMsg": "Konferenca s’ka nisur, ngaqë s’ka mbërritur ende ndonjë moderator. Përndryshe, ju lutemi, pritni.", "WaitingForHostButton": "Prit për moderator", "WaitingForHostTitle": "Po pritet për një moderator…", "Yes": "Po", @@ -305,6 +307,8 @@ "contactSupport": "Lidhuni me ata të asistencës", "copied": "U kopjua", "copy": "Kopjoje", + "demoteParticipantDialog": "Jeni i sigurt se doni ta kaloni këtë pjesëmarrës si vizitor?", + "demoteParticipantTitle": "Kaloje si vizitor", "dismiss": "Hidhe tej", "displayNameRequired": "Njatjeta! Cili është emri juaj?", "done": "U bë", @@ -316,6 +320,7 @@ "embedMeeting": "Trupëzoni takim", "enterDisplayName": "Jepni këtu emrin tuaj", "error": "Gabim", + "errorRoomCreationRestriction": "Provuat të hyni shumë shpejt, ju lutemi, kthehuni pas pak.", "gracefulShutdown": "Shërbimi ynë është aktualisht i ndërprerë, për punë mirëmbajtjeje. Ju lutemi, riprovoni më vonë.", "grantModeratorDialog": "Jeni i sigurt se doni të akordohen të drejta moderatori për {{participantName}}?", "grantModeratorTitle": "Akordoni të drejta moderatori", @@ -434,7 +439,10 @@ "shareScreenWarningD2": "lypset të ndalni ndarjen e audios me të tjerë, të nisni tregimin e ekranit dhe t’i vini shenjë mundësisë “ndani audio me të tjerë”.", "shareScreenWarningH1": "Nëse thjesht doni të tregoni ekranin tuaj:", "shareScreenWarningTitle": "Lypset të ndalni ndarjen e audios me të tjerë, para tregimit të ekranit tuaj", - "shareVideoLinkError": "Ju lutemi, jepni një lidhje të saktë videoje.", + "shareVideoConfirmPlay": "Ju ndan një hap nga hapja e një sajti të jashtëm. Doni të vazhdohet?", + "shareVideoConfirmPlayTitle": "{{name}} ndau me ju një video.", + "shareVideoLinkError": "Hëm, kjo video s’mund të luhet.", + "shareVideoLinkStopped": "Videoja nga {{name}} u ndal.", "shareVideoTitle": "Ndani video me të tjerë", "shareYourScreen": "Tregoni ekranin tuaj", "shareYourScreenDisabled": "Tregimi i ekranit është i çaktivizuar.", @@ -633,6 +641,7 @@ "on": "Filloi Transmetimi i Drejtpërdrejtë", "onBy": "{{name}} nisi transmetimin e drejtpërdrejtë", "pending": "Po niset Transmetimi i Drejtpërdrejtë…", + "policyError": "Provuat të nisni një transmetim të drejtpërdrejtë shumë shpejt. Ju lutemi, ripovoni më vonë!", "serviceName": "Shërbim Transmetimi i Drejtpërdrejtë", "sessionAlreadyActive": "Ky sesion po regjistrohet ose transmetohet drejtpërsëdrejti tashmë.", "signIn": "Hyni me Google", @@ -731,8 +740,11 @@ "connectedOneMember": "{{name}} nisi takimin", "connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë tjerë hynë në takim", "connectedTwoMembers": "{{first}} dhe {{second}} tjetër hynë në takim", - "dataChannelClosed": "Rënie cilësie videoje", + "connectionFailed": "Lidhja dështoi. Ju lutemi, riprovoni më vonë!", + "dataChannelClosed": "Cilësia e videos mund të jetë dëmtuar", "dataChannelClosedDescription": "Kanali urë u shkëput, kështu që cilësia e videos është kufizuar te vlera më e ulët.", + "dataChannelClosedDescriptionWithAudio": "Kanali urë është jashtë funksionimi, prandaj mund të ndodhin shkëputje te audioja dhe videoja.", + "dataChannelClosedWithAudio": "Cilësia e audios dhe videos mund të jetë dëmtuar", "disabledIframe": "Trupëzimi është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash.", "disabledIframeSecondary": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash. Ju lutemi, për trupëzime të njëmendta përdorni Jitsi as a Service!", "disconnected": "u shkëput", @@ -743,6 +755,9 @@ "gifsMenu": "GIPHY", "groupTitle": "Njoftime", "hostAskedUnmute": "Moderatori do të donte të flisnit", + "invalidTenant": "Qiramarrës i pavlefshëm", + "invalidTenantHyphenDescription": "Qiramarrësi që po përdorni është i pavlefshëm (fillon, ose përfundon me '-').", + "invalidTenantLengthDescription": "Qiramarrësi që po përdorni është shumë i gjatë.", "invitedOneMember": "{{name}} u ftua", "invitedThreePlusMembers": "{{name}} dhe {{count}} të tjerë u ftuan", "invitedTwoMembers": "{{first}} dhe {{second}} u ftuan", @@ -779,6 +794,7 @@ "newDeviceAction": "Përdore", "newDeviceAudioTitle": "U pikas pajisje audio e re", "newDeviceCameraTitle": "U pikas kamerë e re", + "nextToSpeak": "Jeni pasuesi në radhë për folje", "noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave s’mund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.", "noiseSuppressionFailedTitle": "S’u arrit të nisej mbytja e zhurmave", "noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash audioje stereo.", @@ -813,7 +829,11 @@ "videoUnmuteBlockedDescription": "Heqja e heshtimit të kamerës dhe veprimi i tregimit të desktopit janë bllokuar përkohësisht për shkak kufizimesh të sistemit.", "videoUnmuteBlockedTitle": "Heqja e heshtimit të kamerës dhe tregimi i desktopit janë bllokuar!", "viewLobby": "Shihni hollin", + "viewParticipants": "Shihni pjesëmarrësit", + "viewVisitors": "Shihni vizitorët", "waitingParticipants": "{{waitingParticipants}} vetë", + "waitingVisitors": "Vizitorë që presin në radhë: {{waitingVisitors}}", + "waitingVisitorsTitle": "Takimi s’ka filluar endeThe meeting is not live yet!", "whiteboardLimitDescription": "Ju lutemi, ruani ç’keni bërë, ngaqë së shpejti do të mbërrihet në kufi përdoruesi dhe tabela do të mbyllet.", "whiteboardLimitTitle": "Përdorim tabele" }, @@ -827,7 +847,10 @@ "audioModeration": "Heqin heshtim të vetes", "blockEveryoneMicCamera": "Bllokoni mikrofonin dhe kamerën e gjithkujt", "breakoutRooms": "Dhoma anekse konsultimesh", + "goLive": "Go live", "invite": "Ftoni Dikë", + "lowerAllHands": "Uli krejt duart", + "lowerHand": "Uleni dorën", "moreModerationActions": "Më tepër mundësi moderimi", "moreModerationControls": "Më tepër kontrolle moderimi", "moreParticipantOptions": "Më tepër mundësi pjesëmarrësi", @@ -844,6 +867,7 @@ "headings": { "lobby": "Holli ({{count}})", "participantsList": "Pjesëmarrës në takim ({{count}})", + "visitorInQueue": " (në pritje {{count}})", "visitorRequests": " (requests {{count}})", "visitors": "Vizitorë {{count}}", "waitingLobby": "Duke pritur në holl ({{count}})" @@ -857,10 +881,13 @@ "pinnedParticipant": "Pjesëmarrësi është fiksuar", "polls": { "answer": { + "edit": "Përpunojeni", + "send": "Dërgoje", "skip": "Anashkaloje", "submit": "Parashtroje" }, "by": "Nga {{ name }}", + "closeButton": "Mbylle pyetësorin", "create": { "addOption": "Shtoni mundësi", "answerPlaceholder": "Mundësia {{index}}", @@ -870,6 +897,7 @@ "pollQuestion": "Pyetje Pyetësori", "questionPlaceholder": "Bëni një pyetje", "removeOption": "Hiqe mundësinë", + "save": "Ruaje", "send": "Dërgoje" }, "errors": { @@ -899,9 +927,11 @@ "configuringDevices": "Po formësohen pajisjet…", "connectedWithAudioQ": "Jeni lidhur me audio?", "connection": { + "failed": "Prova e lidhjes dështoi!", "good": "Lidhja juaj internet duket mirë!", "nonOptimal": "Lidhja juaj internet s’është optimale", - "poor": "Keni lidhje të dobët internet" + "poor": "Keni lidhje të dobët internet", + "running": "Po bëhet prova e lidhjes…" }, "connectionDetails": { "audioClipping": "Presim që audioja juaj do të shformohet.", @@ -910,6 +940,7 @@ "goodQuality": "Shkëlqyeshëm! Cilësia e medias tuaj do të jetë shumë e mirë.", "noMediaConnectivity": "S’gjetëm dot rrugë për të vendosur lidhje media për këtë provë. Zakonisht kjo shkaktohet nga një firewall ose NAT.", "noVideo": "Presim që cilësia e videos për ju të jetë për të vënë kujën.", + "testFailed": "Prova e lidhjes hasi në probleme të papritura, por kjo mund të mos prekë funksionimin për ju.", "undetectable": "Nëse s’bëni dot ende thirrje në shfletues, rekomandojmë të siguroheni se altoparlantët, mikrofoni dhe kamera juaj janë ujdisur si duhet, se i keni akorduar shfletuesit tuaja të drejta të përdorë mikrofonin dhe kamerën tuaj, dhe se versioni i shfletuesit tuaj është i përditësuar. Nëse keni ende probleme me thirrje, duhet të lidheni me zhvilluesin e aplikacionit web.", "veryPoorConnection": "Presim që cilësia e thirrjes te ju të jetë për të vënë kujën", "videoFreezing": "Presim që videoja te ju të ngrijë, të bëhet e zezë dhe të shfaqet tërë piksela.", @@ -944,7 +975,6 @@ "proceedAnyway": "Vazhdo, sido qoftë", "recordingWarning": "Këtë thirrje pjesëmarrës të tjerë mund ta regjistrojnë", "screenSharingError": "Gabim ndarjeje ekrani me të tjerë:", - "showScreen": "Aktivizoni skenë para takimit", "startWithPhone": "Nise me audio telefoni", "unsafeRoomConsent": "I kuptoj rreziqet, dëshiroj të marr pjesë te takimi", "videoOnlyError": "Gabim video:", @@ -1015,7 +1045,7 @@ "localRecordingStartWarningTitle": "Ndaleni regjistrimin që ta ruani", "localRecordingVideoStop": "Ndalja e videos tuaj do të ndalë gjithashtu edhe regjistrimin vendor. Jeni i sigurt se doni të vazhdohet?", "localRecordingVideoWarning": "Që ta regjistroni, videon tuaj duhet ta keni të hapur, kur niset regjistrimi", - "localRecordingWarning": "Sigurohuni se përzgjidhni skedën e tanishme, që të mund të përdoret videoja dhe audioja e saktë. Regjistrimi aktualisht është i kufizuar deri në 1GB, çka është aty afër 100 minutave.", + "localRecordingWarning": "Sigurohuni se përzgjidhni skedën e tanishme, që të mund të përdoret videoja dhe audioja e saktë.", "loggedIn": "I futur si {{userName}}", "noMicPermission": "S’u krijua dot pistë mikrofoni. Ju lutemi, akordoni leje për përdorim të mikrofonit.", "noStreams": "S’u pikas rrjedhë audio ose video.", @@ -1025,6 +1055,7 @@ "onBy": "{{name}} nisi regjistrimin", "onlyRecordSelf": "Regjistro vetëm rrjedhat e mia audio dhe video", "pending": "Po përgatitet të regjistrohet takimi…", + "policyError": "Provuat të nisni një incizim shumë shpejt. Ju lutemi, riprovoni më vonë!", "recordAudioAndVideo": "Regjistro audio dhe video", "recordTranscription": "Regjistro transkriptimin", "saveLocalRecording": "Ruajeni lokalisht kartelën e regjistrimit (Beta)", @@ -1073,11 +1104,12 @@ "desktopShareWarning": "Që të hyjnë në fuqi rregullimet e reja, duhet të rinisni tregimin e ekranit.", "devices": "Pajisje", "followMe": "Më ndjek gjithkush", + "followMeRecorder": "Më ndjek regjistruesi", "framesPerSecond": "kuadro-për-sekondë", "incomingMessage": "Mesazh ardhës", "language": "Gjuhë", "loggedIn": "I futur si {{name}}", - "maxStageParticipants": "Numër maksimum pjesëmarrësish që mund të fiksohen te skena kryesore (EKSPERIMENTALe)", + "maxStageParticipants": "Numër maksimum pjesëmarrësish që mund të fiksohen te skena kryesore", "microphones": "Mikrofona", "moderator": "Moderator", "moderatorOptions": "Mundësi moderatori", @@ -1219,6 +1251,7 @@ "lobbyButton": "Aktivizo/Çaktivizoni mënyrën holl", "localRecording": "Shfaq/Fshih kontrolle regjistrimi vendor", "lockRoom": "Aktivizo/Çaktivizo fjalëkalim takimi", + "love": "Zemër", "lowerHand": "Ulni dorën", "moreActions": "Më tepër veprime", "moreActionsMenu": "Menu “Më tepër veprime”", @@ -1236,6 +1269,7 @@ "privateMessage": "Dërgoni mesazh privat", "profile": "Përpunoni profilin tuaj", "raiseHand": "Ngrini dorën", + "react": "Reagime ndaj mesazhesh", "reactions": "Reagime", "reactionsMenu": "Menu reagimesh", "recording": "Nis/Ndal regjistrimin", @@ -1307,6 +1341,7 @@ "lobbyButtonEnable": "Aktivizo mënyrën holl", "login": "Hyrje", "logout": "Dalje", + "love": "Zemër", "lowerYourHand": "Ulni dorën", "moreActions": "Më tepër veprime", "moreOptions": "Më tepër veprime", @@ -1332,6 +1367,7 @@ "raiseYourHand": "Ngrini dorën", "reactionBoo": "Dërgoni reagim me ya", "reactionClap": "Dërgoni reagim me duartrokitje", + "reactionHeart": "Dërgoni reagim me zemër", "reactionLaugh": "Dërgoni reagim me qeshje", "reactionLike": "Dërgoni reagim me “thumbs up”", "reactionSilence": "Dërgoni reagim me heshtje", @@ -1377,16 +1413,7 @@ }, "unpinParticipant": "{{participantName}} - Hiqja fiksimin", "userMedia": { - "androidGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni Lejoje.", - "chromeGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni Lejoje.", - "edgeGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni Po.", - "electronGrantPermissions": "Po provohet të përdoret kamera dhe mikrofoni juaj", - "firefoxGrantPermissions": "Përzgjidhni Nda Pajisjen e Përzgjedhur, kur shfletuesi juaj të kërkojë leje.", - "iexplorerGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni OK..", - "nwjsGrantPermissions": "Ju lutemi, akordoni leje për përdorim të kamerës dhe mikrofonit tuaj", - "operaGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni Lejoje.", - "react-nativeGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni Lejoje.", - "safariGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni OK." + "grantPermissions": "Ju lutemi, akordoni leje për përdorim të kamerës dhe mikrofonit tuaj." }, "videoSIPGW": { "busy": "Po përpiqemi të lirojmë burime. Ju lutemi, riprovoni pas pak minutash.", @@ -1422,6 +1449,7 @@ }, "videothumbnail": { "connectionInfo": "Hollësi Lidhjeje", + "demote": "Kaloje te vizitorët", "domute": "Heshtoje", "domuteOthers": "Heshto gjithkënd tjetër", "domuteVideo": "Çaktivizoje kamerën", @@ -1474,11 +1502,22 @@ }, "visitors": { "chatIndicator": "(vizitor)", + "joinMeeting": { + "description": "Aktualisht jeni vëzhgues në këtë konferencë.", + "raiseHand": "Ngrini dorën", + "title": "Hyrje në takim", + "wishToSpeak": "Nëse dëshironi të flisni, ju lutemi, ngrini dorën më poshtë dhe prisni miratimin e moderatorit." + }, "labelTooltip": "Numër vizitorësh: {{count}}", "notification": { - "description": "Që të merrni pjesë, ngrini dorën", + "demoteDescription": "Dërguar këtu nga {{actor}}, që të merrni pjesë, ngrini dorën", + "noMainParticipantsDescription": "Duhet që një pjesëmarrëstë nisë takimin. Ju lutemi, riprovoni pas pak.", + "noMainParticipantsTitle": "Ky takim s’ka filluar ende.", + "noVisitorLobby": "S’mund të hyni, teksa ka një holll të hapur për takimin.", + "notAllowedPromotion": "Lypset që së pari një pjesëmarrës të lejojë kërkesën tuaj.", "title": "Jeni vizitor në takim" - } + }, + "waitingMessage": "Do të merrni pjesë në këta takim sapo të fillojë!" }, "volumeSlider": "Rrëshqitës volumi", "welcomepage": { diff --git a/lang/main-sr.json b/lang/main-sr.json index 0e27a5236a2c..5f0c4f1138ac 100644 --- a/lang/main-sr.json +++ b/lang/main-sr.json @@ -66,7 +66,7 @@ "DISCONNECTED": "Нијe повeзано", "DISCONNECTING": "Прeкид повeзивања", "ERROR": "Грeшка", - "RECONNECTING": "Догодио сe проблeм с мрeжом. Поново повeзивањe..." + "RECONNECTING": "Догодио сe проблeм с мрeжом. Поново повeзивањe…" }, "connectionindicator": { "address": "Адрeса:", @@ -460,7 +460,7 @@ "callMe": "Позовите ме", "callMeAtNumber": "Позовите ме на овај број:", "calling": "Позивамо", - "configuringDevices": "Подешавамо уређаје...", + "configuringDevices": "Подешавамо уређаје…", "connectedWithAudioQ": "Да ли сте укључили звук?", "copyAndShare": "Копирати и подјелити везу за састанак", "dialInMeeting": "Позвонити у састанак", @@ -483,7 +483,6 @@ "or": "или", "premeeting": "Пред придруживањем", "screenSharingError": "Грешка дијељења екрана:", - "showScreen": "Укључити екран 'пред придруживњем'.", "startWithPhone": "Започети са телефонском везом.", "videoOnlyError": "Грешка видеа:", "videoTrackError": "Креирање видео траке није успјело.", @@ -692,16 +691,7 @@ "tr": "" }, "userMedia": { - "androidGrantPermissions": "", - "chromeGrantPermissions": "", - "edgeGrantPermissions": "", - "electronGrantPermissions": "Молим дозволитe употрeбу камeрe и микрофона", - "firefoxGrantPermissions": "Одабeритe Дијeљeњe одабраног урeђаја када прeглeдач затражи дозволе.", - "iexplorerGrantPermissions": "", - "nwjsGrantPermissions": "Молим дозволитe употрeбу камeрe и микрофона", - "operaGrantPermissions": "", - "react-nativeGrantPermissions": "", - "safariGrantPermissions": "" + "grantPermissions": "Молим дозволитe употрeбу камeрe и микрофона." }, "videoSIPGW": { "busy": "", diff --git a/lang/main-sv.json b/lang/main-sv.json index f5d2f1b783e7..9f4026c62563 100644 --- a/lang/main-sv.json +++ b/lang/main-sv.json @@ -1,5 +1,8 @@ { "addPeople": { + "accessibilityLabel": { + "meetingLink": "Mötes länk: {{url}}" + }, "add": "Bjud in", "addContacts": "Bjud in dina kontakter", "contacts": "Kontakter", @@ -19,7 +22,7 @@ "noResults": "Inga sökträffar", "outlookEmail": "Outlook email", "phoneNumbers": "Telefonnummer", - "searching": "Söker....", + "searching": "Söker….", "shareInvite": "Dela mötesinbjudan", "shareLink": "Dela mötesinbjudan för att bjuda in fler", "shareStream": "Dela livestreamlänken", @@ -39,6 +42,18 @@ "audioOnly": { "audioOnly": "Enbart ljud" }, + "bandwidthSettings": { + "assumedBandwidthBps": "t.ex. 10000000 för 10 Mbps", + "assumedBandwidthBpsWarning": "Högre värden kan skapa nätverksproblem.", + "customValue": "anpassat värde", + "customValueEffect": "för att ställa in det faktiska bps-värdet", + "leaveEmpty": "lämna tomt", + "leaveEmptyEffect": "för att uppskattningar ska äga rum", + "possibleValues": "Möjliga värden", + "setAssumedBandwidthBps": "Uppskattat värde (bps)", + "title": "Bandbreddsinställningar", + "zeroEffect": "för att slå av video" + }, "breakoutRooms": { "actions": { "add": "Lägg till grupprum", @@ -48,15 +63,22 @@ "leaveBreakoutRoom": "Lämna grupprum", "more": "Mer", "remove": "Ta bort", + "rename": "Döp om", + "renameBreakoutRoom": "Döp om grupprum", "sendToBreakoutRoom": "Skicka deltagare till grupprum:" }, + "breakoutList": "Grupprums lista", + "buttonLabel": "Grupprum", "defaultName": "Grupprum #{{index}}", + "hideParticipantList": "Dölj deltagarlista", "mainRoom": "Huvudrum", "notifications": { - "joined": "Gick med i \"{{name}}\"", + "joined": "Gick med i grupprum \"{{name}}\"", "joinedMainRoom": "Gick med i huvudrummet", "joinedTitle": "Grupprum" - } + }, + "showParticipantList": "Visa deltagarlista", + "title": "Grupprum" }, "calendarSync": { "addMeetingURL": "Lägg till en möteslänk", @@ -87,9 +109,12 @@ } }, "chat": { + "disabled": "Skicka chattmeddelande är inaktiverat", "enter": "Delta i mötet", "error": "Fel: ditt meddelande skickades inte. Orsak: {{error}}", + "everyone": "Alla", "fieldPlaceHolder": "Skriv ditt meddelande här", + "guestsChatIndicator": "(gäst)", "lobbyChatMessageTo": "Skicka meddelande", "message": "Meddelande", "messageAccessibleTitle": "{{user}} Säger:", @@ -100,19 +125,28 @@ "nickname": { "popover": "Välj ett namn", "title": "Skriv in ett namn för att börja använda chatten", - "titleWithPolls": "Skriv in ett namn för att börja använda chatten" + "titleWithCC": "Skriv in ett namn för att börja använda chatten och för undertexter", + "titleWithPolls": "Skriv in ett namn för att börja använda chatten och omröstningar", + "titleWithPollsAndCC": "Skriv in ett namn för att börja använda chatten, omröstningar och undertexter", + "titleWithPollsAndCCAndFileSharing": "Skriv in ett namn för att börja använda chatten, omröstningar, undertexter och fildelning" }, "noMessagesMessage": "Det finns ännu inga meddelanden i mötet. Påbörja en konversation!", "privateNotice": "Privat meddelande till {{recipient}}", "sendButton": "Skicka", "smileysPanel": "Emoji panel", + "systemDisplayName": "", "tabs": { "chat": "Chatt", + "closedCaptions": "Undertexter", + "fileSharing": "Fildelning", "polls": "Omröstningar" }, "title": "Chatt", - "titleWithPolls": "Chatt", - "you": "du" + "titleWithCC": "Undertexter", + "titleWithFeatures": "Chatt och", + "titleWithFileSharing": "Filer", + "titleWithPolls": "Omröstningar", + "you": "dig" }, "chromeExtensionBanner": { "buttonText": "Installera Chrome-tillägg", @@ -121,8 +155,12 @@ "dontShowAgain": "Visa inte det här igen", "installExtensionText": "Installera tillägget för integration med Google Kalender och Office 365" }, + "closedCaptionsTab": { + "emptyState": "Undertexter kommer vara tillgängliga när en moderator startar de", + "startClosedCaptionsButton": "Starta undertexter" + }, "connectingOverlay": { - "joiningRoom": "Ansluter till mötet..." + "joiningRoom": "Ansluter till mötet…" }, "connection": { "ATTACHED": "Ansluten", @@ -134,9 +172,9 @@ "DISCONNECTED": "Frånkopplad", "DISCONNECTING": "Kopplar från", "ERROR": "Fel", - "FETCH_SESSION_ID": "Hämtar sessions-id ...", + "FETCH_SESSION_ID": "Hämtar sessions-id…", "GET_SESSION_ID_ERROR": "Hämta sessions-id-fel: {{code}}", - "GOT_SESSION_ID": "Hämta sessions-id ... Klart", + "GOT_SESSION_ID": "Hämta sessions-id… Klart", "LOW_BANDWIDTH": "Video för {{displayName}} har stängts av för att spara bandbredd" }, "connectionindicator": { @@ -197,10 +235,12 @@ "joinInBrowser": "Delta på webben", "launchMeetingLabel": "Hur vill du delta i detta möte?", "launchWebButton": "Starta på webben", + "noDesktopApp": "", "noMobileApp": "Har du inte appen?", + "or": "", "termsAndConditions": "Genom att fortsätta godkänner du våra villkor.", - "title": "Startar ditt möte i {{app}} ...", - "titleNew": "Startar ditt möte...", + "title": "Startar ditt möte i {{app}}…", + "titleNew": "Startar ditt möte…", "tryAgainButton": "Försök igen på skrivbordet", "unsupportedBrowser": "Det verkar som att du använder en webbläsare som vi inte stöder." }, @@ -238,10 +278,15 @@ "Remove": "Ta bort", "Share": "Dela", "Submit": "Skicka", - "WaitForHostMsg": "Konferensen har inte börjat än. Autentisera konferensen om du är värd. Vänta annars på att värden startar konferensen.", - "WaitingForHostTitle": "Väntar på värden ...", + "Understand": "Jag förstår, låt min mikrofon vara avstängd tillsvidare", + "UnderstandAndUnmute": "Jag förstår, starta min mikrofon", + "WaitForHostNoAuthMsg": "Konferensen har ännu inte startat eftersom ingen värd har anlänt ännu. Vänligen vänta.", + "WaitingForHostButton": "Vänta på värd", + "WaitingForHostTitle": "Väntar på värden…", "Yes": "Ja", "accessibilityLabel": { + "Cancel": "Avbryt", + "Ok": "Ok", "close": "Stäng", "liveStreaming": "Livesändning", "sharingTabs": "Delningsalternativ" @@ -250,10 +295,18 @@ "addMeetingNote": "Mötesinformation", "addOptionalNote": "Ytterligare information", "allow": "Tillåt", + "allowToggleCameraDialog": "Tillåter du att {{initiatorName}} får växla kamera till ansiktsläge?", + "allowToggleCameraTitle": "Tillåt att växla kamera", "alreadySharedVideoMsg": "En annan deltagare delar redan en video. Konferensen tillåter bara en video-delning åt gången.", "alreadySharedVideoTitle": "Endast en delad video åt gången tillåts", "applicationWindow": "Applikationsfönster", "authenticationRequired": "Autentisering krävs", + "cameraCaptureDialog": { + "description": "Ta ett foto och skicka de via din mobila enhet", + "ok": "Starta kamera", + "reject": "Inte nu", + "title": "Ta ett foto" + }, "cameraConstraintFailedError": "Din kamera uppfyller inte kraven för användning.", "cameraNotFoundError": "Hittar ingen kamera.", "cameraNotSendingData": "Vi saknar åtkomst till kameran. Kontrollera om ett annat program använder enheten, välj en annan enhet från inställningsmenyn eller försök att starta om programmet.", @@ -263,11 +316,12 @@ "cameraUnknownError": "Av okänd anledning kan din kamera inte användas.", "cameraUnsupportedResolutionError": "Din kamera stöder inte den krävda videoupplösningen.", "close": "Stäng", - "conferenceDisconnectMsg": "Kolla din internetanslutning. Återansluter om {{seconds}} sekunder...", + "conferenceDisconnectMsg": "Kolla din internetanslutning. Återansluter om {{seconds}} sekunder…", "conferenceDisconnectTitle": "Du har kopplats ner.", - "conferenceReloadMsg": "Vi försöker fixa problemet. Återansluter om {{seconds}} sekunder...", + "conferenceReloadMsg": "Vi försöker fixa problemet. Återansluter om {{seconds}} sekunder…", "conferenceReloadTitle": "Något gick snett.", "confirm": "Bekräfta", + "confirmBack": "Bakåt", "confirmNo": "Nej", "confirmYes": "Ja", "connectError": "Ojdå! Något gick fel och vi kunde inte ansluta till konferensen.", @@ -276,6 +330,8 @@ "contactSupport": "Kontakta kundtjänst", "copied": "Kopierad", "copy": "Kopiera", + "demoteParticipantDialog": "Are you sure you want to move this participant to viewer? Är du säker på att du vill flytta denna deltagaren till tittare", + "demoteParticipantTitle": "Flytta till tittare", "dismiss": "Förkasta", "displayNameRequired": "Hej, vad heter du?", "done": "Klar", @@ -287,6 +343,7 @@ "embedMeeting": "Bädda in möte", "enterDisplayName": "Ange namn", "error": "Fel", + "errorRoomCreationRestriction": "Du försökte gå med för snabbt, kom tillbaka om en stund.", "gracefulShutdown": "Vår tjänst är för tillfället nedstängd för underhåll. Vänligen försök senare.", "grantModeratorDialog": "Är du säker du vill göra denna deltagare till en moderator?", "grantModeratorTitle": "Godkänn moderator", @@ -297,10 +354,12 @@ "internalError": "Ett fel uppstod. Fel: {{error}}", "internalErrorTitle": "Internt fel", "kickMessage": "Du kan kontakta {{participantDisplayName}} för mer information.", - "kickParticipantButton": "Sparka ut", - "kickParticipantDialog": "Vill du sparka ut den här deltagaren?", + "kickParticipantButton": "Ta bort deltagaren från mötet", + "kickParticipantDialog": "Vill du ta bort denna deltagaren från mötet?", "kickParticipantTitle": "Tysta deltagaren?", - "kickTitle": "Aj! {{participantDisplayName}} sparkade ut dig ur mötet", + "kickSystemTitle": "Du har blivit borttagen från mötet", + "kickTitle": "{{participantDisplayName}} tog bort dig från mötet", + "learnMore": "Läs mer", "linkMeeting": "Länka möte", "linkMeetingTitle": "Länka möte till Salesforce", "liveStreaming": "Streama", @@ -310,7 +369,8 @@ "lockRoom": "Lägg till möte $t(lockRoomPasswordUppercase)", "lockTitle": "Låsning misslyckades", "login": "Logga in", - "logoutQuestion": "Är du säker på att du vill logga ut och stoppa konferensen?", + "loginQuestion": "Är du säker på att du vill logga in och lämna mötet", + "logoutQuestion": "Är du säker på att du vill logga ut och lämna konferensen?", "logoutTitle": "Logga ut", "maxUsersLimitReached": "Gränsen för maximalt antal deltagare har nåtts. Konferensen är full. Kontakta mötesägaren eller försök igen senare!", "maxUsersLimitReachedTitle": "Maximal deltagarantal uppnått", @@ -322,22 +382,34 @@ "micTimeoutError": "Time out, kunde ej starta ljud enhet", "micUnknownError": "Av okänd anledning kan inte din mikrofon användas.", "moderationAudioLabel": "Tillåt deltagarna att slå på ljudet för sig själva", + "moderationDesktopLabel": "Tillåt deltagare att skärmdela", "moderationVideoLabel": "Tillåt deltagarna att starta sin video", "muteEveryoneDialog": "Är du säker på att du vill tysta alla? Du kan inte slå på mikrofonen åt dem, men de kan själva slå på sin egen mikrofon när som helst.", "muteEveryoneDialogModerationOn": "Deltagarna kan när som helst begära att få prata.", "muteEveryoneElseDialog": "När någon tystats kan du inte slå på mikrofonen, men de kan själva slå på sin egen mikrofon när som helst.", "muteEveryoneElseTitle": "Tysta alla utom {{whom}}?", + "muteEveryoneElsesDesktopDialog": "När delningen är stoppad kommer du inte kunna starta den igen. Men de kan dela med dig igen.", + "muteEveryoneElsesDesktopTitle": "Stoppa allas skärmdelning utom {{whom}}?", "muteEveryoneElsesVideoDialog": "När kameran är inaktiverad kan den inte aktiveras igen. Däremot kan övriga deltagare aktivera sina kameror.", "muteEveryoneElsesVideoTitle": "Inaktivera allas kameror förutom {{whom}}", "muteEveryoneSelf": "Dig själv", "muteEveryoneStartMuted": "Alla börjar tystade", "muteEveryoneTitle": "Tysta alla?", + "muteEveryonesDesktopDialog": "Deltagarna kan dela sin skärm när som helst. Du kan inte starta deras skärmdelning åt dem.", + "muteEveryonesDesktopDialogModerationOn": "Deltagarna kan skicka en förfrågan om att starta skärmdelningen.", + "muteEveryonesDesktopTitle": "Stoppa alla deltagares skärmdelning?", "muteEveryonesVideoDialog": "Är du säker du vill inaktivera allas kameror. Du kommer inte att kunna aktivera dessa igen. Däremot kommer deltagarna att kunna aktivera sin egen kamera när som.", "muteEveryonesVideoDialogModerationOn": "Deltagarna kan när som helst begära att få aktivera sin kamera.", "muteEveryonesVideoDialogOk": "Inaktivera", "muteEveryonesVideoTitle": "Inaktiveras allas kameror", "muteParticipantBody": "Du kan inte aktivera deras mikrofoner, men de kan göra det själva.", "muteParticipantButton": "Tysta", + "muteParticipantsDesktopBody": "Du kommer inte kunna starta deltagarnas skärmdelning. Men deltagare kan starta skärmdelning.", + "muteParticipantsDesktopBodyModerationOn": "Du kommer inte kunna starta deltagarnas skärmdelning.Deltagare kommer inte kunna starta deras skärmdelning.", + "muteParticipantsDesktopButton": "Stoppa skärmdelning", + "muteParticipantsDesktopDialog": "Är du säker på att du vill stänga av deltagarens skärmdelning? Du kommer inte kunna slå igång den igen, utan deltagaren måste starta de igen.", + "muteParticipantsDesktopDialogModerationOn": "Är du säker på att du vill stänga av deltagarens skärmdelning? Du kommer inte kunna slå igång den igen, deltagaren kommer inte heller kunna starta den igen.", + "muteParticipantsDesktopTitle": "Avaktivera skärmdelning för deltagaren?", "muteParticipantsVideoBody": "Du kommer inte att kunna aktivera kameran igen. Däremot kan deltagaren kunna aktivera sin egen kamera när som.", "muteParticipantsVideoBodyModerationOn": "Du och deltagarna kommer inte att kunna aktivera kameran igen.", "muteParticipantsVideoButton": "Inaktivera kamera", @@ -353,12 +425,14 @@ "permissionCameraRequiredError": "Tillåtelse krävs för att delta med kamera i denna möte. Var god skaffa detta i \"inställningar\".", "permissionErrorTitle": "Tillåtelse krävs", "permissionMicRequiredError": "Tillåtelse krävs för att delta med mikrofon i denna möte. Var god skaffa detta i \"inställningar\".", - "popupError": "Din webbläsare blockerar pop-up-fönster från sajten. Tillåt pop-up-fönster från den här sajten i inställningarna och försök igen.", - "popupErrorTitle": "Pop-up blockerad", "readMore": "Mer", "recentlyUsedObjects": "Dina senaste använda objekt", "recording": "Inspelning", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ej möjligt medan livestreaming pågår.", + "recordingInProgressDescription": "Mötet spelas in och analyseras av AI{{learnMore}}. Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.", + "recordingInProgressDescriptionFirstHalf": "Mötet spelas in och analyseras av AI", + "recordingInProgressDescriptionSecondHalf": "Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.", + "recordingInProgressTitle": "Inspelning pågår", "rejoinNow": "Återanslut nu", "remoteControlAllowedMessage": "{{user}} godkände din begäran om fjärrstyrning.", "remoteControlDeniedMessage": "{{user}} avböjde din begäran om fjärrstyrning.", @@ -371,6 +445,8 @@ "removePassword": "Ta bort $t(lockRoomPassword)", "removeSharedVideoMsg": "Är du säker på att du vill ta bort din delade video?", "removeSharedVideoTitle": "Ta bort den delade videon", + "renameBreakoutRoomLabel": "Rums namn", + "renameBreakoutRoomTitle": "Döp om grupprum", "reservationError": "Fel i reservationssystemet", "reservationErrorMsg": "Felkod: {{code}}, meddelande: {{msg}}", "retry": "Försök igen", @@ -390,8 +466,10 @@ "sendPrivateMessageTitle": "Skicka privat?", "serviceUnavailable": "Tjänsten otillgänglig", "sessTerminated": "Konferensen avslutades", + "sessTerminatedReason": "", "sessionRestarted": "Samtal återstartat av bryggan", "shareAudio": "Fortsätt", + "shareAudioAltText": "För att dela önskat innehåll, navigera till \"Webläsarfliken\", välj innehållet, aktivera \"dela ljud\"-kryssmärket och klicka sedan på \"dela\" knappen", "shareAudioTitle": "Hur man delar ljud", "shareAudioWarningD1": "Du måste avsluta din skärmdelning innan du kan dela ditt ljud", "shareAudioWarningD2": "Du måste starta om din skärmdelning och därefter klicka på \"ljuddelning\"", @@ -402,7 +480,10 @@ "shareScreenWarningD2": "du måste avsluta ljuddelning, starta skärmdelning och sen aktivera \"ljuddelning\"", "shareScreenWarningH1": "Om du bara vill dela din skärm:", "shareScreenWarningTitle": "Du måste avsluta ljuddelning innan du kan dela in skärm", + "shareVideoConfirmPlay": "Du är på väg att öppna en extern webbplats. Vill du fortsätta?", + "shareVideoConfirmPlayTitle": "{{name}} har delat en video med dig.", "shareVideoLinkError": "Skriv in en fungerande länk.", + "shareVideoLinkStopped": "Videon från {{name}} har avslutats.", "shareVideoTitle": "Ta bort en delad video", "shareYourScreen": "Dela din skärm", "shareYourScreenDisabled": "Skärmdelning har inaktiverats.", @@ -421,8 +502,27 @@ "thankYou": "Tack för att du använder {{appName}}!", "token": "token", "tokenAuthFailed": "Du är inte behörig att delta i det här samtalet.", + "tokenAuthFailedReason": { + "audInvalid": "Ogiltigt `aud`-värde. Det ska vara `jitsi`.", + "contextNotFound": "Objektet `context` saknas från payload.", + "expInvalid": "Ogilting `exp` värde.", + "featureInvalid": "Ogiltig feature: {{feature}}, mest troligt inte implementerat än.", + "featureValueInvalid": "Felaktigt värde för feature: {{feature}}.", + "featuresNotFound": "`Features` objektet saknas i payload.", + "headerNotFound": "Saknar header.", + "issInvalid": "Ogiltigt `iss`-värde. Det ska vara `chat`.", + "kidMismatch": "Nyckel ID (kid) matchat inte sub.", + "kidNotFound": "Nyckel ID saknas (kid).", + "nbfFuture": "Värdet i `nbf` är i framtiden.", + "nbfInvalid": "Ogilitigt `nbf`värde.", + "payloadNotFound": "Payload saknas.", + "tokenExpired": "Token har gått ut." + }, "tokenAuthFailedTitle": "Autentisering misslyckades", + "tokenAuthFailedWithReasons": "Förlåt, du har inte tillåtelse att gå med i det här samtalet. Troliga anledingar: {{reason}}", + "tokenAuthUnsupported": "Token URL är inte tillåten", "transcribing": "Transkriberar", + "unauthenticatedAccessDisabled": "Detta samtalet kräver identifiering. Logga in för att fortsätta.", "unlockRoom": "Ta bort möte $t(lockRoomPassword)", "user": "Användare", "userIdentifier": "Användar-ID", @@ -435,6 +535,10 @@ "viewUpgradeOptions": "Se uppgraderings alternativ", "viewUpgradeOptionsContent": "För att få obegränsad tillgång till premiumfunktioner som inspelning, transkriptioner, RTMP-streaming och mer måste du uppgradera din plan.", "viewUpgradeOptionsTitle": "Du upptäckte en premiumfunktion!", + "whiteboardLimitContent": "Förlåt, max antal samtidiga deltagare i whiteboard har uppnåts.", + "whiteboardLimitReference": "För mer information besök", + "whiteboardLimitReferenceUrl": "vår webplats", + "whiteboardLimitTitle": "Användande av whiteboard har begränsats", "yourEntireScreen": "Helskärm" }, "documentSharing": { @@ -447,6 +551,9 @@ "title": "Bädda in möte" }, "feedback": { + "accessibilityLabel": { + "yourChoice": "Ditt val: {{rating}}" + }, "average": "Medel", "bad": "Dåligt", "detailsLabel": "Berätta mer.", @@ -456,6 +563,25 @@ "veryBad": "Mycket dåligt", "veryGood": "Mycket bra" }, + "fileSharing": { + "downloadFailedDescription": "Försök igen.", + "downloadFailedTitle": "Nedladdning misslyckades", + "downloadFile": "Ladda ner", + "downloadStarted": "Nedladdning har startat", + "dragAndDrop": "Dra och släpp filen här eller någonstans på skärmen", + "fileAlreadyUploaded": "Filen har redan laddats upp till mötet.", + "fileRemovedByOther": "Filen vid namn '{{ fileName }}' har tagits bort", + "fileTooLargeDescription": "Se till att filstorleken inte överskrider {{ maxFileSize }}.", + "fileTooLargeTitle": "Den valda filen är för stor", + "fileUploadProgress": "Överföring pågår", + "fileUploadedSuccessfully": "Överföring lyckades", + "newFileNotification": "{{ participantName }} delade '{{ fileName }}'", + "removeFile": "Ta bort", + "removeFileSuccess": "Filen togs bort", + "uploadFailedDescription": "Snälla försök igen.", + "uploadFailedTitle": "Överföring misslyckades", + "uploadFile": "Dela fil" + }, "filmstrip": { "accessibilityLabel": { "heading": "Videominiatyrer" @@ -503,13 +629,16 @@ "noNumbers": "Inga inringningsnummer.", "noPassword": "Inget lösenord", "noRoom": "Inget rum specificerades för inringning.", + "noWhiteboard": "Kan inte ladda whiteboard.", "numbers": "Inringningsnummer", "password": "$t(lockRoomPasswordUppercase):", "reachedLimit": "Du har nått gränsen för din prenumeration.", "sip": "SIP adress", + "sipAudioOnly": "SIP endast ljud address", "title": "Dela", "tooltip": "Dela länk och information om inringning för mötet", - "upgradeOptions": "Vänligen kontrollera om uppgraderingsalternativen är på" + "upgradeOptions": "Vänligen kontrollera om uppgraderingsalternativen är på", + "whiteboardError": "Problem att ladda whiteboard, var god försök senare." }, "inlineDialogFailure": { "msg": "Vi slirade lite.", @@ -542,8 +671,7 @@ "toggleParticipantsPane": "Visa eller dölj deltagarfönstret", "toggleScreensharing": "Växla mellan kamera och skärmdelning", "toggleShortcuts": "Visa eller dölj kortkommandon", - "videoMute": "Aktivera / inaktivera din kamera", - "whiteboard": "Visa / dölj whiteboardtavlan" + "videoMute": "Aktivera / inaktivera din kamera" }, "largeVideo": { "screenIsShared": "Du delar din skärm", @@ -561,7 +689,7 @@ "errorLiveStreamNotEnabled": "Livesändning är otillgänglig för {{email}}. Aktivera livesändning eller logga in på ett konto där det är aktiverat.", "expandedOff": "Livesändningen har avslutats", "expandedOn": "Mötet livesänds just nu på YouTube.", - "expandedPending": "Livesändningen startas ...", + "expandedPending": "Livesändningen startas…", "failedToStart": "Strömningen kunde inte påbörjas", "getStreamKeyManually": "Vi kunde inte hämta några direktströmmar. Försök att få din direktströmningsnyckel från YouTube.", "googlePrivacyPolicy": "Googles sekretesspolicy", @@ -573,7 +701,8 @@ "offBy": "{{name}} stoppade direktströmningen", "on": "Strömma", "onBy": "{{name}} startade direktströmningen", - "pending": "Börja strömma ...", + "pending": "Börja strömma…", + "policyError": "", "serviceName": "Livesändningstjänst", "sessionAlreadyActive": "Den här sessionen spelas redan in eller livestreamas.", "signIn": "Logga in med Google", @@ -603,25 +732,26 @@ "joinRejectedMessage": "Din anslutningsbegäran avvisades av en moderator.", "joinRejectedTitle": "Anslutningsbegäran avvisades.", "joinTitle": "Anslut till mötet", - "joinWithPasswordMessage": "Försöker ansluta med lösenord, vänta...", + "joinWithPasswordMessage": "Försöker ansluta med lösenord, vänta…", "joiningMessage": "Du kommer anslutas till mötet så snart någon accepterat din begäran", - "joiningTitle": "Begär att få delta i mötet...", - "joiningWithPasswordTitle": "Ansluter med lösenord...", + "joiningTitle": "Begär att få delta i mötet…", + "joiningWithPasswordTitle": "Ansluter med lösenord…", "knockButton": "Anslut till mötet", "knockTitle": "Någon önskar delta i mötet", "knockingParticipantList": "Väntande deltagare", "lobbyChatStartedNotification": "{{moderator}} startade en lobbychatt med {{attendee}}", "lobbyChatStartedTitle": "{{moderator}} har startat en lobbychatt med dig.", + "lobbyClosed": "Lobbyn har stängts.", "nameField": "Ange ditt namn", "notificationLobbyAccessDenied": "{{targetParticipantName}} har nekats att delta av {{originParticipantName}}", "notificationLobbyAccessGranted": "{{targetParticipantName}} har godkänts att delta av {{originParticipantName}}", "notificationLobbyDisabled": "Väntrumsläge har inaktiverats av {{originParticipantName}}", "notificationLobbyEnabled": "Väntrumsläge har aktiverats av {{originParticipantName}}", "notificationTitle": "Väntrum", - "passwordField": "Ange möteslösenord", "passwordJoinButton": "Anslut", "title": "Lobby", - "toggleLabel": "Aktivera väntrum" + "toggleLabel": "Aktivera väntrum", + "waitForModerator": "Konferensen har annu inte startat för ingen moderator anslutit. Om du vill bli moderator var vänlig logga in. Annars, var god dröj." }, "localRecording": { "clientState": { @@ -651,6 +781,8 @@ "sessionToken": "Sessionstoken", "start": "Starta inspelning", "stop": "Avsluta inspelning", + "stopping": "Avslutar inspelning", + "wait": "Var god vänta medans vi sparar din inspelning", "yes": "Ja" }, "lockRoomPassword": "lösenord", @@ -662,7 +794,10 @@ "me": "jag", "notify": { "OldElectronAPPTitle": "Säkerhetsproblem!", - "allowAction": "Tillåt", + "allowAll": "Tillåt", + "allowAudio": "Tillåt ljud", + "allowDesktop": "Tillåt skärmdelning", + "allowVideo": "Tillåt kamera", "allowedUnmute": "Du kan slå på mikrofonen, starta kameran eller dela din skärm.", "audioUnmuteBlockedDescription": "Aktivering av mikrofonen har tillfälligt blockerats på grund av systembegränsningar.", "audioUnmuteBlockedTitle": "Mikrofonen har blockerats!", @@ -670,9 +805,15 @@ "connectedOneMember": "{{name}} har gått med i mötet", "connectedThreePlusMembers": "{{name}} och {{count}} andra har gått med i mötet", "connectedTwoMembers": "{{first}} och {{second}} har gått med i mötet", + "connectionFailed": "Anslutning misslyckades. Var god försök senare!", "dataChannelClosed": "Försämrad videokvalitet", "dataChannelClosedDescription": "Bryggkanalen har kopplats bort och därmed är videokvaliteten begränsad till sin lägsta inställning", + "dataChannelClosedDescriptionWithAudio": "Bryggkanalen har kopplats bort och därmed kan abvrott i ljud och bild uppstå.", + "dataChannelClosedWithAudio": "Ljud och bild kvalite kan vara försämrad.", + "desktopMutedRemotelyTitle": "Din skärmdelning har avslutats av {{participantDisplayName}}", "disabledIframe": "Inbäddning är endast avsedd för demonstrationsändamål, så det här samtalet kommer att kopplas ner om {{timeout}} minuter.", + "disabledIframeSecondaryNative": "Inbäddning {{domain}} är endast avsedd för demonstrationsändamål, så det här samtalet kommer att kopplas ner om {{timeout}} minuter.", + "disabledIframeSecondaryWeb": "Bädda in {{domain}} är bara till för demo, så detta samtal kommer att kopplas bort inom {{timeout}} minuter. Var god använd Jitsi som tjänst för att bädda in i produktion.", "disconnected": "frånkopplad", "displayNotifications": "Visa aviseringar för", "dontRemindMe": "Påminn mig inte", @@ -681,11 +822,14 @@ "gifsMenu": "GIPHY", "groupTitle": "Notifieringar", "hostAskedUnmute": "Värden vill att du ska stänga av ljudet", + "invalidTenant": "Ogiltig tenant", + "invalidTenantHyphenDescription": "Tenant du använder har ogiltiga tecken (startar eller slutar med '-').", + "invalidTenantLengthDescription": "Tenant du använder är för lång", "invitedOneMember": "{{name}} har bjudits in", "invitedThreePlusMembers": "{{name}} och {{count}} andra har bjudits in", "invitedTwoMembers": "{{first}} och {{second}} har bjudits in", "joinMeeting": "Delta", - "kickParticipant": "{{kicked}} sparkades ut av {{kicker}}", + "kickParticipant": "{{kicked}} togs bort av {{kicker}}", "leftOneMember": "{{name}} lämnade mötet", "leftThreePlusMembers": "{{name}} och många andra lämnade mötet", "leftTwoMembers": "{{first}} och {{second}} lämnade mötet", @@ -693,7 +837,7 @@ "linkToSalesforceDescription": "Du kan länka mötessammanfattningen till ett Salesforce-objekt.", "linkToSalesforceError": "Det gick inte att länka mötet till Salesforce", "linkToSalesforceKey": "Länka detta möte", - "linkToSalesforceProgress": "Länkar möte till Salesforce...", + "linkToSalesforceProgress": "Länkar möte till Salesforce…", "linkToSalesforceSuccess": "Mötet länkades till Salesforce", "localRecordingStarted": "{{name}} har påbörjat en lokal inspelning.", "localRecordingStopped": "{{name}} har stoppat en lokal inspelning.", @@ -717,13 +861,14 @@ "newDeviceAction": "Använd", "newDeviceAudioTitle": "Ny ljudenhet hittad", "newDeviceCameraTitle": "Ny kamera hittad", + "nextToSpeak": "Du är näst i kö för att prata", "noiseSuppressionDesktopAudioDescription": "Brusreducering kan inte aktiveras när du delar skrivbordsljud, vänligen inaktivera det och försök igen.", "noiseSuppressionFailedTitle": "Det gick inte att starta brusreducering", - "noiseSuppressionNoTrackDescription": "Slå på mikrofonen först.", "noiseSuppressionStereoDescription": "Brusreducering i stereoljud stöds för närvarande inte.", "oldElectronClientDescription1": "Den version av Jitsi meet som används är gammal och har säkerhetsluckor. Var god uppdatera till den senaste versionen.", "oldElectronClientDescription2": "senast build", "oldElectronClientDescription3": "nu!", + "openChat": "Öppna chatt", "participantWantsToJoin": "Vill vara med på mötet", "participantsWantToJoin": "Vill vara med på mötet", "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) togs bort av en annan deltagare", @@ -743,24 +888,42 @@ "startSilentTitle": "Du gick med utan ljud aktiverat!", "suboptimalBrowserWarning": "Din mötesupplevelse kommer tyvärr inte att bli så bra. Vi letar efter sätt att förbättra detta, men fram till dess kan du försöka använda en av de fullt stödda webbläsarna .", "suboptimalExperienceTitle": "Webbläsarvarning", + "suggestRecordingAction": "Starta", + "suggestRecordingDescription": "Vill du starta en inspelning?", + "suggestRecordingTitle": "Spela in detta mötet", "unmute": "Slå på mikrofonen", + "unmuteScreen": "Starta skärmdelning", + "unmuteVideo": "Starta kamera", "videoMutedRemotelyDescription": "Du kan alltid slå på den igen.", "videoMutedRemotelyTitle": "Din kamera har inaktiverats av {{participantDisplayName}}!", "videoUnmuteBlockedDescription": "Aktivering av kameran och delning av skrivbord har tillfälligt blockerats på grund av systembegränsningar.", "videoUnmuteBlockedTitle": "Aktivering av kameran och skrivbordsdelning blockerad!", "viewLobby": "Visa lobby", - "waitingParticipants": "{{waitingParticipants}} personer" + "viewParticipants": "Visa deltagare", + "viewVisitors": "Visa besökare", + "waitingParticipants": "{{waitingParticipants}} personer", + "waitingVisitors": "Väntande besökare i kö: {{waitingVisitors}}", + "waitingVisitorsTitle": "Mötet är inte live än!", + "whiteboardLimitDescription": "Var god spara, max antal användare har snart uppnåtts och whiteboard kommer att stängas av.", + "whiteboardLimitTitle": "Användande whiteboard" }, "participantsPane": { "actions": { "admit": "Godkänn", "admitAll": "Godkänn alla", "allow": "Låt deltagarna:", + "allowDesktop": "Tillåt skärmdelning", "allowVideo": "Tillåt kamera", + "askDesktop": "Skicka skärmdelningsförfrågan", "askUnmute": "Be om att aktivera ljud", "audioModeration": "Slå på ljudet för sig själva", "blockEveryoneMicCamera": "Inaktivera allas mikrofon och kamera", + "breakoutRooms": "Grupprum", + "desktopModeration": "Starta skärmdelning", + "goLive": "Gå live", "invite": "Bjud in någon", + "lowerAllHands": "Ta ner allas händer", + "lowerHand": "Ta ner handen", "moreModerationActions": "Fler modereringsalternativ", "moreModerationControls": "Fler modereringskontroller", "moreParticipantOptions": "Fler deltagaralternativ", @@ -768,6 +931,8 @@ "muteAll": "Stäng av allt ljud", "muteEveryoneElse": "Inaktivera ljud för alla deltagare", "reject": "Avvisa", + "stopDesktop": "Stoppa skärmdelning", + "stopEveryonesDesktop": "Stoppa allas skärmdelning", "stopEveryonesVideo": "Inaktivera allas video", "stopVideo": "Inaktivera video", "unblockEveryoneMicCamera": "Aktivera allas mikrofon och kamera", @@ -777,10 +942,15 @@ "headings": { "lobby": "Väntrum ({{count}})", "participantsList": "Mötesdeltagare ({{count}})", + "viewerRequests": "Deltagar förfrågningar {{count}}", + "visitorInQueue": "(väntande {{count}})", + "visitorRequests": "(förfrågningar {{count}})", "visitors": "Gäster ({{count}})", + "visitorsList": "Gäster ({{count}})", "waitingLobby": "Väntar i väntrum ({{count}})" }, "search": "Sök efter deltagare", + "searchDescription": "Börja skriv för att filtrera bland deltagare", "title": "Deltagare" }, "passwordDigitsOnly": "Ange max {{number}} siffror", @@ -789,11 +959,17 @@ "pinnedParticipant": "Deltagaren är fäst", "polls": { "answer": { + "edit": "Redigera", + "send": "Skicka", "skip": "Avstå", "submit": "Skicka" }, "by": "Av {{ name }}", + "closeButton": "Stäng omröstning", "create": { + "accessibilityLabel": { + "send": "Skicka omröstning" + }, "addOption": "Lägg till alternativ", "answerPlaceholder": "Alternativ", "cancel": "Avbryt", @@ -802,7 +978,7 @@ "pollQuestion": "Fråga för omröstning", "questionPlaceholder": "Ställ en fråga", "removeOption": "Ta bort alternativ", - "send": "Skicka" + "save": "Spara" }, "errors": { "notUniqueOption": "Alternativ måste vara unika" @@ -828,12 +1004,14 @@ "callMe": "Ring mig", "callMeAtNumber": "Ring mig på det här numret:", "calling": "Ringer", - "configuringDevices": "Konfigurerar enheter...", + "configuringDevices": "Konfigurerar enheter…", "connectedWithAudioQ": "Är din mikrofon ansluten?", "connection": { + "failed": "Anslutningstest misslyckades!", "good": "Din internetanslutning fungerar bra!", "nonOptimal": "Din internetanslutning är inte optimal", - "poor": "Din internetanslutning fungerar dåligt" + "poor": "Din internetanslutning fungerar dåligt", + "running": "Kör anslutningstest..." }, "connectionDetails": { "audioClipping": "Ditt ljud kan upplevas hackigt.", @@ -842,6 +1020,7 @@ "goodQuality": "Grymt bra! Din mediekvalitet kommer att bli bra.", "noMediaConnectivity": "Vi kunde inte hitta ett sätt att upprätta mediaanslutning för detta test. Detta orsakas vanligtvis av en brandvägg eller NAT.", "noVideo": "Vi förväntar oss att din video kommer ha låg kvalitet eller inte fungera.", + "testFailed": "Anslutningstestet stötte på oväntade problem, men det behöver inte påverka din upplevelse.", "undetectable": "Om du fortfarande inte kan ringa i webbläsaren rekommenderar vi att du ser till att dina högtalare, mikrofon och kamera är korrekt inställda, att du har beviljat din webbläsare rättigheter att använda din mikrofon och kamera och att din webbläsarversion är uppdaterad.", "veryPoorConnection": "Vi förväntar oss att din samtalskvalitet är riktigt dålig.", "videoFreezing": "Vi förväntar oss att din video fryser, blir svart och pixeleras.", @@ -874,8 +1053,8 @@ "or": "eller", "premeeting": "Förmöte", "proceedAnyway": "Fortsätt ändå", + "recordingWarning": "", "screenSharingError": "Skärmdelningsfel:", - "showScreen": "Aktivera skärmen före mötet", "startWithPhone": "Börja med telefonljud", "unsafeRoomConsent": "Jag förstår riskerna, jag vill vara med på mötet", "videoOnlyError": "Videofel:", @@ -884,17 +1063,17 @@ }, "presenceStatus": { "busy": "Upptagen", - "calling": "Ringer...", + "calling": "Ringer…", "connected": "Ansluten", - "connecting": "Ansluter...", - "connecting2": "Ansluter*...", + "connecting": "Ansluter…", + "connecting2": "Ansluter*…", "disconnected": "Frånkopplad", "expired": "Utgången", "ignored": "Ignorerad", - "initializingCall": "Startar samtal...", + "initializingCall": "Startar samtal…", "invited": "Inbjuden", "rejected": "Avvisad", - "ringing": "Ringer..." + "ringing": "Ringer…" }, "profile": { "avatar": "avatar", @@ -928,7 +1107,7 @@ "errorFetchingLink": "Fel vid hämtning av inspelningslänk.", "expandedOff": "Inspelningen har avslutats", "expandedOn": "Mötet spelas nu in.", - "expandedPending": "Inspelningen påbörjas...", + "expandedPending": "Inspelningen påbörjas…", "failedToStart": "Inspelningen kunde inte påbörjas", "fileSharingdescription": "Dela inspelningen med mötesdeltagare", "highlight": "Framhäva", @@ -940,14 +1119,13 @@ "limitNotificationDescriptionNative": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, försök <3>{{app}}.", "limitNotificationDescriptionWeb": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, prova {{app}}.", "linkGenerated": "Vi har genererat en länk till din inspelning.", - "live": "LIVE", "localRecordingNoNotificationWarning": "Inspelningen kommer inte att meddelas till andra deltagare. Du måste meddela dem att mötet inspelas.", "localRecordingNoVideo": "Video spelas inte in", "localRecordingStartWarning": "Se till att du stoppar inspelningen innan du avslutar mötet för att spara det.", "localRecordingStartWarningTitle": "Stoppa inspelningen för att spara den", "localRecordingVideoStop": "Om du stoppar din video stoppas även den lokala inspelningen. Är du säker på att du vill fortsätta?", "localRecordingVideoWarning": "För att spela in din video måste du ha den på när du startar inspelningen", - "localRecordingWarning": "Se till att du väljer den aktuella fliken för att kunna använda rätt video och ljud. Inspelningen är för närvarande begränsad till 1 GB, vilket är cirka 100 minuter.", + "localRecordingWarning": "Se till att du väljer den aktuella fliken för att kunna använda rätt video och ljud.", "loggedIn": "Inloggad som {{userName}}", "noMicPermission": "Mikrofonspåret kunde inte skapas. Vänligen ge tillstånd att använda mikrofonen.", "noStreams": "Ingen ljud- eller videoström upptäcktes.", @@ -956,14 +1134,17 @@ "on": "Inspelning", "onBy": "{{name}} påbörjade inspelningen", "onlyRecordSelf": "Spela bara in mina ljud- och videoströmmar", - "pending": "Förbereder inspelning av mötet...", - "rec": "REC", + "pending": "Förbereder inspelning av mötet…", + "policyError": "Du försökte starta inspelningen för fort. Var god försök senare!", + "recordAudioAndVideo": "Spela in ljud och bild", + "recordTranscription": "Spela in transkribiering", "saveLocalRecording": "Spara inspelningsfil lokalt (beta)", "serviceDescription": "Din inspelning kommer att sparas av inspelningstjänsten", "serviceDescriptionCloud": "Molninspelning", "serviceDescriptionCloudInfo": "Inspelade möten rensas automatiskt 24 timmar efter inspelningstiden.", "serviceName": "Inspelningstjänst", "sessionAlreadyActive": "Den här sessionen spelas redan in eller livestreamas.", + "showAdvancedOptions": "Visa avancerade inställningar", "signIn": "Logga in", "signOut": "Logga ut", "surfaceError": "Välj aktuell flik.", @@ -998,11 +1179,13 @@ "signedIn": "Hämtar kalenderhändelser från {{email}}. Tryck på knappen nedan för att sluta hämta kalenderhändelser.", "title": "Kalender" }, + "chatWithPermissions": "Chatt kräver högre rättigheter", "desktopShareFramerate": "Bildfrekvens för skrivbordsdelning", "desktopShareHighFpsWarning": "En högre bildhastighet för skrivbordsdelning kan påverka din bandbredd. Du måste starta om skärmdelningen för att de nya inställningarna ska träda i kraft.", "desktopShareWarning": "Du måste starta om skärmdelningen för att de nya inställningarna ska träda i kraft.", "devices": "Enheter", "followMe": "Alla följer mig", + "followMeRecorder": "Den som spelar in följer mig", "framesPerSecond": "bildrutor per sekund", "incomingMessage": "Inkommande meddelande", "language": "Språk", @@ -1026,6 +1209,7 @@ "selectMic": "Mikrofon", "selfView": "Självvy", "shortcuts": "Genvägar", + "showSubtitlesOnStage": "Vissa undertexter på scenen", "speakers": "Högtalare", "startAudioMuted": "Alla börjar tystade", "startReactionsMuted": "Stäng av reaktionsljud för alla", @@ -1040,6 +1224,7 @@ "alertOk": "OK", "alertTitle": "Varning", "alertURLText": "Den angivna serverlänken är felaktig", + "apply": "Tillämpa", "buildInfoSection": "Versionsinformation", "conferenceSection": "Konferens", "disableCallIntegration": "Tillåt inte deltagande via telefon", @@ -1050,12 +1235,14 @@ "displayNamePlaceholderText": "Exempel: John Doe", "email": "E-post", "emailPlaceholderText": "mejl@exempel.se", + "gavatarMessage": "Om din e-post är associerad med ett Gravatar konto, så kommer vi använda det för att visa din profilbild.", "goTo": "Gå till", "header": "Inställningar", "help": "Hjälp", "links": "Länkar", "privacy": "Sekretess", "profileSection": "Profil", + "sdkVersion": "", "serverURL": "Serverlänk", "showAdvanced": "Visa avancerade inställningar", "startCarModeInLowBandwidthMode": "Starta billäget i lågbandbreddsläge", @@ -1076,11 +1263,13 @@ "fearful": "Rädd", "happy": "Glad", "hours": "{{count}} h", + "labelTooltip": "", "minutes": "{{count}} m", "name": "Namn", "neutral": "Neutral", "sad": "Ledsen", "search": "Sök", + "searchDescription": "Börja skriv för att filtrera bland deltagare", "searchHint": "Sök deltagare", "seconds": "{{count}} s", "speakerStats": "Talarstatistik", @@ -1108,7 +1297,7 @@ "audioOnly": "Slå av eller på ljudet", "audioRoute": "Välj ljudenhet", "boo": "Bua", - "breakoutRoom": "Anslut eller lämna grupprum", + "breakoutRooms": "Grupprum", "callQuality": "Hantera videokvalitet", "carmode": "Billäge", "cc": "Slå av eller på undertexter", @@ -1117,6 +1306,7 @@ "closeChat": "Stäng chatten", "closeMoreActions": "Stäng menyn för fler åtgärder", "closeParticipantsPane": "Stäng deltagarfönstret", + "closedCaptions": "Undertexter", "collapse": "Minimera", "document": "Växla delat dokument", "documentClose": "Stäng delat dokument", @@ -1138,7 +1328,7 @@ "help": "Hjälp", "hideWhiteboard": "Dölj whiteboard", "invite": "Bjud in personer", - "kick": "Sparka ut deltagare", + "kick": "Ta bort deltagare från möte", "laugh": "Skratta", "leaveConference": "Lämna mötet", "like": "Tummen upp", @@ -1146,6 +1336,7 @@ "lobbyButton": "Aktivera / inaktivera lobbyläge", "localRecording": "Växla lokala inspelningskontroller", "lockRoom": "Växla möteslösenord", + "love": "Kärlek", "lowerHand": "Sänk din hand", "moreActions": "Fler åtgärder", "moreActionsMenu": "Menyn Fler åtgärder", @@ -1155,6 +1346,7 @@ "muteEveryoneElse": "Stäng av ljudet för alla andra", "muteEveryoneElsesVideoStream": "Stoppa alla andras video", "muteEveryonesVideoStream": "Stoppa allas video", + "muteGUMPending": "Ansluter din mikrofon", "noiseSuppression": "Brusdämpning", "openChat": "Öppna chatt", "participants": "Öppna deltagarfönstret", @@ -1162,6 +1354,7 @@ "privateMessage": "Skicka privat meddelande", "profile": "Redigera din profil", "raiseHand": "Räck upp handen", + "react": "Reaktioner på meddelanden", "reactions": "Reaktioner", "reactionsMenu": "Reaktionsmeny", "recording": "Växla inspelning", @@ -1188,9 +1381,24 @@ "unmute": "Slå på ljudet", "videoblur": "Växla videooskärpa", "videomute": "Stoppa kamera", + "videomuteGUMPending": "Ansluter din kamera", "videounmute": "Starta kameran" }, "addPeople": "Lägg till personer i samtal", + "advancedAudioSettings": { + "aec": { + "label": "Akustisk eko hantering" + }, + "agc": { + "label": "Automatisk gain kontroll" + }, + "ns": { + "label": "Brusreducering" + }, + "stereo": { + "label": "Stereo" + } + }, "audioOnlyOff": "Avsluta ljudläget", "audioOnlyOn": "Starta ljudläget", "audioRoute": "Välj ljudenhet", @@ -1203,6 +1411,7 @@ "closeChat": "Stäng chatt", "closeParticipantsPane": "Stäng deltagarrutan", "closeReactionsMenu": "Stäng meny för reaktioner", + "closedCaptions": "Undertexter", "disableNoiseSuppression": "Inaktivera brusreducering", "disableReactionSounds": "Du kan inaktivera reaktionsljud för det här mötet", "documentClose": "Stäng delat dokument", @@ -1232,12 +1441,14 @@ "lobbyButtonEnable": "Aktivera väntrumsläge", "login": "Logga in", "logout": "Logga ut", + "love": "Kärlek", "lowerYourHand": "Ta ner handen", "moreActions": "Fler handlingar", "moreOptions": "Visa fler alternativ", "mute": "Slå av/på ljud", "muteEveryone": "Tysta alla", "muteEveryonesVideo": "Inaktivera allas kamera", + "muteGUMPending": "Ansluter din mikrofon", "noAudioSignalDesc": "Om du inte avsiktligt stängde av det från systeminställningar eller hårdvara, överväg att byta enhet.", "noAudioSignalDescSuggestion": "Om du inte avsiktligt tystade det från systeminställningar eller hårdvara, överväg att byta till den föreslagna enheten.", "noAudioSignalDialInDesc": "Du kan också ringa in med:", @@ -1254,10 +1465,12 @@ "profile": "Redigera din profil", "raiseHand": "Räck upp / ta ner din hand", "raiseYourHand": "Räck upp handen", - "reactionBoo": "Bua", - "reactionClap": "Klappa", + "reactionBoo": "Skicka Bu", + "reactionClap": "Klappa i händerna", + "reactionHeart": "Skicka kärlek", "reactionLaugh": "Skratta", "reactionLike": "Skicka tummen upp", + "reactionLove": "Skicka kärleksreaktion", "reactionSilence": "Skicka tyst reaktion", "reactionSurprised": "Skicka reaktionen överaskad", "reactions": "Reaktioner", @@ -1283,36 +1496,29 @@ "unmute": "Slå på ljud", "videoSettings": "Videoinställningar", "videomute": "Inaktivera kameran", + "videomuteGUMPending": "Ansluter din kamera", "videounmute": "Aktivera kameran" }, "transcribing": { "ccButtonTooltip": "Aktivera / Inaktivera undertexter", - "error": "Transkriberingen misslyckades. Försök igen.", "expandedLabel": "Transkribering är aktiverad", - "failedToStart": "Det gick inte att starta transkribering", - "labelToolTip": "Mötet transkriberas", - "off": "Transkribering avslutades", - "pending": "Förbereder transkribering av mötet ...", + "failed": "Transkribiering misslyckades", + "labelTooltip": "Mötet transkriberas", + "labelTooltipExtra": "Transkriberingen kommer finnas tillgänglig senare.", + "openClosedCaptions": "Öppna undertexter", + "original": "Original", "sourceLanguageDesc": "För närvarande är mötesspråket inställt på {{sourceLanguage}}.
Du kan ändra det från ", "sourceLanguageHere": "här", "start": "Börja visa undertexter", "stop": "Sluta visa undertexter", "subtitles": "Undertexter", "subtitlesOff": "Av", - "tr": "TR" + "tr": "TR", + "translateTo": "Översätt till" }, "unpinParticipant": "Lossa deltagare", "userMedia": { - "androidGrantPermissions": "Välj Tillåt när din webbläsare begär åtkomst.", - "chromeGrantPermissions": "Välj Tillåt när din webbläsare begär åtkomst.", - "edgeGrantPermissions": "Välj Ja när din webbläsare begär åtkomst.", - "electronGrantPermissions": "Tillåt användning av din kamera och mikrofon", - "firefoxGrantPermissions": "Välj Dela vald enhet när din webbläsare begär åtkomst.", - "iexplorerGrantPermissions": "Välj OK när din webbläsare begär åtkomst.", - "nwjsGrantPermissions": "Tillåt användning av din kamera och mikrofon", - "operaGrantPermissions": "Välj Tillåt när din webbläsare begär åtkomst.", - "react-nativeGrantPermissions": "Välj Tillåt när din webbläsare begär åtkomst.", - "safariGrantPermissions": "Välj OK när din webbläsare begär åtkomst." + "grantPermissions": "Tillåt användning av din kamera och mikrofon." }, "videoSIPGW": { "busy": "Vi arbetar med att frigöra resurser. Försök igen om några minuter.", @@ -1348,14 +1554,17 @@ }, "videothumbnail": { "connectionInfo": "Anslutningsinformation", + "demote": "Gör till besökare", "domute": "Tysta", + "domuteDesktop": "Stoppa skärmdelning", + "domuteDesktopOfOthers": "Stoppa skärmdelning för alla andra", "domuteOthers": "Inaktivera ljud för alla andra", "domuteVideo": "Inaktivera kamera", "domuteVideoOfOthers": "Inaktivera kamera för alla andra", "flip": "Vänd", "grantModerator": "Godkänn moderator", "hideSelfView": "Dölj självvyn", - "kick": "Sparka ut", + "kick": "Ta bort", "mirrorVideo": "Spegelvänd video", "moderator": "Moderator", "mute": "Deltagaren har avstängd mikrofon", @@ -1371,6 +1580,10 @@ "videomute": "Deltagaren har stängt av kameran" }, "virtualBackground": { + "accessibilityLabel": { + "currentBackground": "Nuvarande bakgrund: {{background}}", + "selectBackground": "Välj bakgrund" + }, "addBackground": "Lägg till bakgrund", "apply": "Tillämpa", "backgroundEffectError": "Det gick inte att tillämpa bakgrundseffekt.", @@ -1386,7 +1599,7 @@ "image6": "Skog", "image7": "Soluppgång", "none": "Ingen", - "pleaseWait": "Vänligen vänta...", + "pleaseWait": "Vänligen vänta…", "removeBackground": "Ta bort bakgrunden", "slightBlur": "Lätt oskärpa", "title": "Virtuella bakgrunder", @@ -1396,11 +1609,24 @@ }, "visitors": { "chatIndicator": "(besökare)", + "joinMeeting": { + "description": "Du är just nu en beskökare i konferensen", + "raiseHand": "Räck upp handen", + "title": "Gå med i mötet", + "wishToSpeak": "Om du vill prata, räck upp handen och vänta på att en moderator ska godkänna." + }, "labelTooltip": "Antal besökare: {{count}}", "notification": { - "description": "Räck upp handen för att delta", + "demoteDescription": "Skickad hit av {{actor}}, räck upphanden för att delta", + "noMainParticipantsDescription": "En deltagare behöver starta mötet. Var god försök igen senare.", + "noMainParticipantsTitle": "Det är mötet har inte startat än", + "noVisitorLobby": "Du kan inte gå med medans lobby är påslagen för mötet.", + "notAllowedPromotion": "En deltagare behöver godkänna din förfrågan först.", + "requestToJoin": "Håller upp handen", + "requestToJoinDescription": "Din begäran skickades till en moderator. Var god dröj!", "title": "Du är en besökare i mötet" - } + }, + "waitingMessage": "Du kommer att komma in i mötet när det är live!" }, "volumeSlider": "Volymreglage", "welcomepage": { @@ -1458,6 +1684,7 @@ "whiteboard": { "accessibilityLabel": { "heading": "Whiteboard" - } + }, + "screenTitle": "Whiteboard" } } diff --git a/lang/main-te.json b/lang/main-te.json index 1c4da0102b80..d6bc18bb0ec3 100644 --- a/lang/main-te.json +++ b/lang/main-te.json @@ -85,7 +85,7 @@ "installExtensionText": "గూగుల్ క్యాలెండర్, ఆఫీస్ 365 సమన్వయం కోసం పొడగింతను స్థాపించుకోండి" }, "connectingOverlay": { - "joiningRoom": "మిమ్మల్ని సమావేశంలో చేరుస్తోంది..." + "joiningRoom": "మిమ్మల్ని సమావేశంలో చేరుస్తోంది…" }, "connection": { "ATTACHED": "జోడించబడింది", @@ -97,9 +97,9 @@ "DISCONNECTED": "అనుసంధానం కాలేదు", "DISCONNECTING": "అనుసంధానం తెంచుతున్నది", "ERROR": "తప్పిదం", - "FETCH_SESSION_ID": "Session-id తెస్తూన్నది...", + "FETCH_SESSION_ID": "Session-id తెస్తూన్నది…", "GET_SESSION_ID_ERROR": "Session-id పొందడంలో తప్పిదం: {{code}}", - "GOT_SESSION_ID": "Session-id తెస్తూన్నది... పూర్తయింది", + "GOT_SESSION_ID": "Session-id తెస్తూన్నది… పూర్తయింది", "LOW_BANDWIDTH": "బ్యాండ్‌విడ్త్ ఆదా చేయడం కోసం {{displayName}} నుండి వీడియో ఆపివేయబడింది" }, "connectionindicator": { @@ -152,7 +152,7 @@ "ifHaveApp": "మీకు ఇప్పటికే అనువర్తనం ఉంటే:", "joinInApp": "అనువర్తనం ద్వారా సమావేశంలో చేరండి", "launchWebButton": "జాలంలో తెరవండి", - "title": "మీ సమావేశాన్ని {{app}}లో తెరుస్తూన్నది...", + "title": "మీ సమావేశాన్ని {{app}}లో తెరుస్తూన్నది…", "tryAgainButton": "డెస్క్‌టాప్‌లో మళ్ళీ ప్రయత్నించు" }, "defaultLink": "ఉదా॥ {{url}}", @@ -181,7 +181,7 @@ "Share": "పంచుకోండి", "Submit": "దాఖలుచేయి", "WaitForHostMsg": "The conference has not yet started. If you are the host then please authenticate. Otherwise, please wait for the host to arrive.", - "WaitingForHostTitle": "అతిథేయి కోసం వేచివున్నాం ...", + "WaitingForHostTitle": "అతిథేయి కోసం వేచివున్నాం…", "Yes": "అవును", "accessibilityLabel": { "liveStreaming": "తాజా స్ట్రీమింగ్" @@ -201,9 +201,9 @@ "cameraUnknownError": "ఏదో తెలియని కారణం చేత కేమెరాను వాడలేకున్నాం.", "cameraUnsupportedResolutionError": "కావాల్సిన వీడియో రిజల్యూషనుకు మీ కేమెరాలో తోడ్పాటు లేదు.", "close": "మూసివేయి", - "conferenceDisconnectMsg": "మీ నెట్‌వర్క్ అనుసంధానాన్ని ఒకసారి సరిచూసుకోండి. {{seconds}} క్షణాల్లో తిరిగి అనుసంధానమవుతుంది...", + "conferenceDisconnectMsg": "మీ నెట్‌వర్క్ అనుసంధానాన్ని ఒకసారి సరిచూసుకోండి. {{seconds}} క్షణాల్లో తిరిగి అనుసంధానమవుతుంది…", "conferenceDisconnectTitle": "మీ అనుసంధానం తెగిపోయింది.", - "conferenceReloadMsg": "దాన్ని సరిచేయడానికి ప్రయత్నిస్తున్నాం. {{seconds}} క్షణాల్లో తిరిగి అనుసంధానమవుతుంది...", + "conferenceReloadMsg": "దాన్ని సరిచేయడానికి ప్రయత్నిస్తున్నాం. {{seconds}} క్షణాల్లో తిరిగి అనుసంధానమవుతుంది…", "conferenceReloadTitle": "దురదృష్టవశాత్తూ, ఏదో తప్పు జరిగింది.", "confirm": "నిర్ధారించండి", "confirmNo": "కాదు", @@ -431,7 +431,7 @@ "errorLiveStreamNotEnabled": "Live Streaming is not enabled on {{email}}. Please enable live streaming or log into an account with live streaming enabled.", "expandedOff": "The live streaming has stopped", "expandedOn": "The meeting is currently being streamed to YouTube.", - "expandedPending": "The live streaming is being started...", + "expandedPending": "The live streaming is being started…", "failedToStart": "Live Streaming failed to start", "getStreamKeyManually": "We weren’t able to fetch any live streams. Try getting your live stream key from YouTube.", "googlePrivacyPolicy": "గూగుల్ గోప్యతా విధానం", @@ -442,7 +442,7 @@ "offBy": "{{name}} stopped the live streaming", "on": "Live Streaming started", "onBy": "{{name}} started the live streaming", - "pending": "Starting Live Stream...", + "pending": "Starting Live Stream…", "serviceName": "లైవ్ స్ట్రీమింగ్ సేవ", "signIn": "గూగుల్‌తో ప్రవేశించండి", "signInCTA": "Sign in or enter your live stream key from YouTube.", @@ -468,10 +468,10 @@ "invalidPassword": "చెల్లని సంకేతపదం", "joinRejectedMessage": "మీ అభ్యర్థనను ఒక మధ్యవర్తి తిరస్కరించారు.", "joinTitle": "సమావేశంలో చేరండి", - "joinWithPasswordMessage": "సంకేతపదంతో చేరడానికి ప్రయత్నిస్తున్నది, దయచేసి వేచివుండండి...", + "joinWithPasswordMessage": "సంకేతపదంతో చేరడానికి ప్రయత్నిస్తున్నది, దయచేసి వేచివుండండి…", "joiningMessage": "ఎవరైనా మీ అభ్యర్థనను ఆమోదించగానే మీరు సమావేశంలో చేరతారు", - "joiningTitle": "సమావేశంలో చేరడానికి అడుగుతున్నాం...", - "joiningWithPasswordTitle": "సంకేతపదంతో చేరుతున్నారు...", + "joiningTitle": "సమావేశంలో చేరడానికి అడుగుతున్నాం…", + "joiningWithPasswordTitle": "సంకేతపదంతో చేరుతున్నారు…", "knockButton": "చేరడానికి అడుగు", "knockTitle": "ఎవరో సమావేశంలో చేరదామనుకుంటున్నారు", "knockingParticipantList": "Knocking participant list", @@ -591,7 +591,7 @@ "callMe": "Call me", "callMeAtNumber": "Call me at this number:", "calling": "Calling", - "configuringDevices": "Configuring devices...", + "configuringDevices": "Configuring devices…", "connectedWithAudioQ": "You’re connected with audio?", "connection": { "good": "మీ అంతర్జాల అనుసంధానం బానే ఉంది!", @@ -634,7 +634,6 @@ "or": "లేదా", "premeeting": "Pre meeting", "screenSharingError": "Screen sharing error:", - "showScreen": "Enable pre meeting screen", "startWithPhone": "Start with phone audio", "videoOnlyError": "Video error:", "videoTrackError": "Could not create video track.", @@ -642,17 +641,17 @@ }, "presenceStatus": { "busy": "Busy", - "calling": "పిలుస్తూన్నది...", + "calling": "పిలుస్తూన్నది…", "connected": "అనుసంధానమయ్యింది", - "connecting": "అనుసంధానమవుతూన్నది...", - "connecting2": "అనుసంధానమవుతూన్నది*...", + "connecting": "అనుసంధానమవుతూన్నది…", + "connecting2": "అనుసంధానమవుతూన్నది*…", "disconnected": "అనుసంధానం తెగిపోయింది", "expired": "కాలంచెల్లింది", "ignored": "పట్టించుకోలేదు", - "initializingCall": "పిలుపు మొదలవుతూన్నది...", + "initializingCall": "పిలుపు మొదలవుతూన్నది…", "invited": "ఆహ్వానించారు", "rejected": "తిరస్కరించారు", - "ringing": "రింగవుతూన్నది..." + "ringing": "రింగవుతూన్నది…" }, "profile": { "setDisplayNameLabel": "చూపించాల్సిన పేరు అమర్చుకోండి", @@ -670,7 +669,7 @@ "error": "రికార్డింగు విఫలమైంది. దయచేసి మళ్ళీ ప్రయత్నించండి.", "expandedOff": "రికార్డింగు ఆగిపోయింది", "expandedOn": "ఈ సమావేశం ప్రస్తుతం రికార్డు అవుతూన్నది.", - "expandedPending": "రికార్డింగు మొదలవుతూన్నది...", + "expandedPending": "రికార్డింగు మొదలవుతూన్నది…", "failedToStart": "రికార్డింగు మొదలవడం విఫలమైంది", "fileSharingdescription": "రికార్డింగును సదస్యులతో పంచుకోండి", "limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}.", @@ -681,7 +680,7 @@ "offBy": "{{name}} రికార్డింగును ఆపివేసారు", "on": "రికార్డింగు మొదలయింది", "onBy": "{{name}} రికార్డింగును మొదలుపెట్టారు", - "pending": "Preparing to record the meeting...", + "pending": "Preparing to record the meeting…", "rec": "REC", "serviceDescription": "Your recording will be saved by the recording service", "serviceDescriptionCloud": "Cloud recording", @@ -896,22 +895,13 @@ "failedToStart": "Transcribing failed to start", "labelToolTip": "The meeting is being transcribed", "off": "Transcribing stopped", - "pending": "Preparing to transcribe the meeting...", + "pending": "Preparing to transcribe the meeting…", "start": "Start showing subtitles", "stop": "Stop showing subtitles", "tr": "TR" }, "userMedia": { - "androidGrantPermissions": "Select Allow when your browser asks for permissions.", - "chromeGrantPermissions": "Select Allow when your browser asks for permissions.", - "edgeGrantPermissions": "Select Yes when your browser asks for permissions.", - "electronGrantPermissions": "Trying to access your camera and microphone", - "firefoxGrantPermissions": "Select Share Selected Device when your browser asks for permissions.", - "iexplorerGrantPermissions": "Select OK when your browser asks for permissions.", - "nwjsGrantPermissions": "Please grant permissions to use your camera and microphone", - "operaGrantPermissions": "Select Allow when your browser asks for permissions.", - "react-nativeGrantPermissions": "Select Allow when your browser asks for permissions.", - "safariGrantPermissions": "Select OK when your browser asks for permissions." + "grantPermissions": "Please grant permissions to use your camera and microphone." }, "videoSIPGW": { "busy": "We're working on freeing resources. Please try again in a few minutes.", @@ -960,7 +950,7 @@ "addBackground": "వెనుతలం చేర్చు", "blur": "Blur", "none": "ఏమీలేదు", - "pleaseWait": "దయచేసి వేచివుండండి...", + "pleaseWait": "దయచేసి వేచివుండండి…", "removeBackground": "వెనుతలం తీసివేయి", "slightBlur": "Slight Blur", "title": "మిధ్యా వెనుతలాలు" diff --git a/lang/main-tr.json b/lang/main-tr.json index 9e1f2d3afd21..595f555ab269 100644 --- a/lang/main-tr.json +++ b/lang/main-tr.json @@ -5,7 +5,7 @@ }, "add": "Davet et", "addContacts": "Kişilerinizi davet edin", - "contacts": "kişiler", + "contacts": "Kişiler", "copyInvite": "Toplantı davetini kopyala", "copyLink": "Toplantı bağlantısını kopyala", "copyStream": "Canlı akış bağlantısını kopyala", @@ -21,21 +21,21 @@ "linkCopied": "Bağlantı panoya kopyalandı", "noResults": "Eşleşen sonuç bulunamadı", "outlookEmail": "Outlook Email", - "phoneNumbers": "telefon numaraları", - "searching": "Aranıyor...", + "phoneNumbers": "Telefon numaraları", + "searching": "Aranıyor…", "shareInvite": "Toplantı davetini paylaş", "shareLink": "Katılımcıları davet etmek için toplantı bağlantısını paylaşın", "shareStream": "Canlı akış bağlantısını paylaşın", - "sipAddresses": "sip adresleri", + "sipAddresses": "Sip adresleri", "telephone": "Telefon numarası: {{number}}", "title": "Bu toplantıya kişi davet edin", "yahooEmail": "Yahoo Email" }, "audioDevices": { "bluetooth": "Bluetooth", - "car": "", + "car": "Araç sesi", "headphones": "Kulaklık", - "none": "Geçerli Ses cihazı yok", + "none": "Geçerli ses cihazı yok", "phone": "Telefon", "speaker": "Konuşmacı" }, @@ -43,16 +43,16 @@ "audioOnly": "Düşük bant genişliği" }, "bandwidthSettings": { - "assumedBandwidthBps": "örneğin 10 Mbps için 10000000", + "assumedBandwidthBps": "Örneğin 10 Mbps için 10000000", "assumedBandwidthBpsWarning": "Daha yüksek değerler ağ sorunlarına neden olabilir.", "customValue": "özel değer", - "customValueEffect": "gerçek bps değerini ayarlamak için", - "leaveEmpty": "boş bırak", - "leaveEmptyEffect": "tahminlerin gerçekleşmesine izin vermek için", + "customValueEffect": "Gerçek bps değerini ayarlamak için", + "leaveEmpty": "Boş bırak", + "leaveEmptyEffect": "Tahminlerin gerçekleşmesine izin vermek için", "possibleValues": "Olası değerler", "setAssumedBandwidthBps": "Varsayılan bant genişliği (bps)", "title": "Bant genişliği ayarları", - "zeroEffect": "videoyu devre dışı bırakmak için" + "zeroEffect": "Videoyu devre dışı bırakmak için" }, "breakoutRooms": { "actions": { @@ -90,9 +90,9 @@ }, "join": "Katıl", "joinTooltip": "Toplantıya katıl", - "nextMeeting": "sonraki toplantı", + "nextMeeting": "Sonraki toplantı", "noEvents": "Planlanmış bir etkinlik bulunmuyor.", - "ongoingMeeting": "devam eden toplantı", + "ongoingMeeting": "Devam eden toplantı", "permissionButton": "Ayarları aç", "permissionMessage": "Uygulama içinde toplantılarınızı görüntülemek için takvim erişim izni gereklidir.", "refresh": "Takvimi yenile", @@ -115,7 +115,7 @@ "lobbyChatMessageTo": "{{recipient}} adlı kişiye lobi mesajı", "message": "Mesaj", "messageAccessibleTitle": "{{user}} diyor:", - "messageAccessibleTitleMe": "ben diyorum:", + "messageAccessibleTitleMe": "Ben diyorum:", "messageTo": "{{recipient}} adlı kişiye özel mesaj", "messagebox": "Bir mesaj yazın", "newMessages": "Yeni mesajlar", @@ -128,23 +128,24 @@ "privateNotice": "{{recipient}} için özel mesaj", "sendButton": "Gönder", "smileysPanel": "Emoji paneli", + "systemDisplayName": "Sistem", "tabs": { "chat": "Sohbet", "polls": "Anket" }, "title": "Sohbet", "titleWithPolls": "Sohbet", - "you": "sen" + "you": "Sen" }, "chromeExtensionBanner": { "buttonText": "Chrome Eklentisi'ni indirin", - "buttonTextEdge": "", + "buttonTextEdge": "Edge Eklentisi'ni indirin", "close": "Kapat", "dontShowAgain": "Bunu bir daha gösterme", "installExtensionText": "Google Takvim ve Office 365 entegrasyonu için uzantıyı yükleyin" }, "connectingOverlay": { - "joiningRoom": "Toplantıya bağlanılıyor..." + "joiningRoom": "Toplantıya bağlanılıyor…" }, "connection": { "ATTACHED": "Eklenmiş", @@ -176,9 +177,9 @@ "localaddress_plural": "Yerel adresler:", "localport": "Yerel port:", "localport_plural": "Yerel portlar:", - "maxEnabledResolution": "maksimumu gönder", + "maxEnabledResolution": "Maksimumu gönder", "more": "Daha fazla göster", - "no": "hayır", + "no": "Hayır", "packetloss": "Paket kaybı:", "participant_id": "Katılımcı id:", "quality": { @@ -198,7 +199,7 @@ "transport": "Transport:", "transport_plural": "Transportlar:", "video_ssrc": "Video SSRC:", - "yes": "evet" + "yes": "Evet" }, "dateUtils": { "earlier": "Daha eski", @@ -223,13 +224,13 @@ "noMobileApp": "Uygulamanız yok mu?", "or": "VEYA", "termsAndConditions": "Devam ederek şartlar ve koşullarımızı kabul etmiş olursunuz.", - "title": "Toplantınız {{app}} uygulamasında açılıyor...", - "titleNew": "Toplantınız başlatılıyor...", + "title": "Toplantınız {{app}} uygulamasında açılıyor…", + "titleNew": "Toplantınız başlatılıyor…", "tryAgainButton": "Masaüstünde tekrar deneyin", "unsupportedBrowser": "Şu an kullandığınız tarayıcıyı desteklemiyoruz." }, - "defaultLink": "örneğin {{url}}", - "defaultNickname": "örnek Jane Pink", + "defaultLink": "örneğin, {{url}}", + "defaultNickname": "örnek: Jane Pink", "deviceError": { "cameraError": "Kameraya erişilemedi", "cameraPermission": "Kameraya erişim izni alınamadı", @@ -252,7 +253,7 @@ "screenTitle": "Arama özeti" }, "dialOut": { - "statusMessage": "şimdi {{status}}" + "statusMessage": "Şimdi {{status}}" }, "dialog": { "Back": "Geri", @@ -262,9 +263,10 @@ "Remove": "Kaldır", "Share": "Paylaş", "Submit": "Gönder", - "WaitForHostMsg": "Toplantısı henüz başlamadı. Toplantı sahibi sizseniz, lütfen kimlik doğrulaması yapın. Değilseniz lütfen toplantı sahibinin gelmesini bekleyin.", + "WaitForHostMsg": "Toplantı sahibi gelmediğinden toplantı henüz başlamadı. Toplantı sahibi sizseniz, lütfen kimlik doğrulaması yapın. Değilseniz lütfen toplantı sahibinin gelmesini bekleyin.", + "WaitForHostNoAuthMsg": "Toplantı sahibi gelmediğinden toplantı henüz başlamadı. Lütfen bekleyin.", "WaitingForHostButton": "Toplantı sahibini bekle", - "WaitingForHostTitle": "Toplantı sahibi bekleniyor ...", + "WaitingForHostTitle": "Toplantı sahibi bekleniyor…", "Yes": "Evet", "accessibilityLabel": { "Cancel": "İptal et (iletişim kutusundan ayrıl)", @@ -274,8 +276,8 @@ "sharingTabs": "Paylaşım seçenekleri" }, "add": "Ekle", - "addMeetingNote": "", - "addOptionalNote": "", + "addMeetingNote": "Toplantı notu ekle", + "addOptionalNote": "Not ekle (isteğe bağlı)", "allow": "İzin ver", "allowToggleCameraDialog": "{{initiatorName}}'ın kameraya bakma modunu değiştirmesine izin veriyor musunuz?", "allowToggleCameraTitle": "Kamerayı değiştirmeye izin verilsin mi?", @@ -292,9 +294,9 @@ "cameraUnknownError": "Bilinmeyen bir nedenden dolayı kamera kullanılamıyor.", "cameraUnsupportedResolutionError": "Kameranız gerekli video çözünürlüğünü desteklemiyor.", "close": "Kapat", - "conferenceDisconnectMsg": "Ağ bağlantınızı kontrol etmek isteyebilirsiniz. {{seconds}} saniye içinde yeniden bağlanıyor...", + "conferenceDisconnectMsg": "Ağ bağlantınızı kontrol etmek isteyebilirsiniz. {{seconds}} saniye içinde yeniden bağlanıyor…", "conferenceDisconnectTitle": "Bağlantınız kesildi.", - "conferenceReloadMsg": "Bunu düzeltmeye çalışıyoruz. {{seconds}} saniye içinde yeniden bağlanıyor...", + "conferenceReloadMsg": "Bunu düzeltmeye çalışıyoruz. {{seconds}} saniye içinde yeniden bağlanıyor…", "conferenceReloadTitle": "Ne yazık ki bir şeyler ters gitti.", "confirm": "Onayla", "confirmNo": "Hayır", @@ -316,8 +318,9 @@ "e2eeWarning": "UYARI: Bu toplantıdaki kullanıcıların bazıları uçtan-uca şifrelemeyi desteklemiyor gibi görünüyor. Eğer etkinleştirirseniz sizi duyamaz ve göremezler.", "e2eeWillDisableDueToMaxModeDescription": "UYARI: Konferansa daha fazla katılımcı katılırsa Uçtan-Uca Şifreleme otomatik olarak devre dışı bırakılır.", "embedMeeting": "Toplantıyı yerleştir", - "enterDisplayName": "Lütfen adınızı buraya girin...", + "enterDisplayName": "Lütfen adınızı buraya girin…", "error": "Hata", + "errorRoomCreationRestriction": "Çok hızlı katılmaya çalıştınız, lütfen biraz sonra tekrar gelin.", "gracefulShutdown": "Hizmetimiz şu anda bakım için devre dışı. Lütfen daha sonra tekrar deneyiniz.", "grantModeratorDialog": "{{participantName}} için moderatör hakları vermek istediğinize emin misiniz?", "grantModeratorTitle": "Moderatör hakları ver", @@ -366,15 +369,15 @@ "muteEveryoneTitle": "Herkesi sessize al?", "muteEveryonesVideoDialog": "Herkesin kamerasını devre dışı bırakmak istediğinizden emin misiniz? Kameralar devre dışı bırakıldığında geri açamayacaksınız, ancak onlar kameralarını her zaman açabilirler.", "muteEveryonesVideoDialogModerationOn": "Katılımcılar istedikleri zaman videolarını açmak için istek gönderebilirler.", - "muteEveryonesVideoDialogOk": "Kameraları Kapat", + "muteEveryonesVideoDialogOk": "Kameraları kapat", "muteEveryonesVideoTitle": "Herkesin kamerasını devre dışı bırak?", "muteParticipantBody": "Sesi açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.", "muteParticipantButton": "Sessize al", "muteParticipantsVideoBody": "Kamerayı tekrar açamazsınız ancak istedikleri zaman tekrar açabilirler.", - "muteParticipantsVideoBodyModerationOn": "", + "muteParticipantsVideoBodyModerationOn": "Ne sen kamerayı tekrar açabileceksin, ne de onlar.", "muteParticipantsVideoButton": "Kamerayı durdur", "muteParticipantsVideoDialog": "Bu katılımcının kamerasını kapatmak istediğinize emin misiniz? Kamerayı tekrar açamazsınız ancak istedikleri zaman tekrar açabilirler.", - "muteParticipantsVideoDialogModerationOn": "", + "muteParticipantsVideoDialogModerationOn": "Bu katılımcının kamerasını kapatmak istediğinizden emin misiniz? Kamerayı tekrar açamayacaksınız ve onlar da açamayacak.", "muteParticipantsVideoTitle": "Bu katılımcı için kamerayı durdur?", "noDropboxToken": "Dropbox anahtarı geçerli değil", "password": "Parola", @@ -385,10 +388,10 @@ "permissionCameraRequiredError": "Videolu konferanslara katılmak için kamera izni gereklidir. Lütfen ayarlardan izin verin", "permissionErrorTitle": "İzin gerekli", "permissionMicRequiredError": "Konferanslara sesli olarak katılmak için lütfen mikrofon izni gereklidir. Lütfen ayarlardan izin verin", - "readMore": "daha fazla", + "readMore": "Daha fazla", "recentlyUsedObjects": "Son zamanlarda kullandığınız objeler", "recording": "Kaydediliyor", - "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Canlı akış etkinken mümkün değil...", + "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Canlı akış etkinken mümkün değil…", "rejoinNow": "Tekrar katıl", "remoteControlAllowedMessage": "{{user}} uzaktan kontrol isteğinizi kabul etti!", "remoteControlDeniedMessage": "{{user}} uzaktan kontrol isteğinizi reddetti!", @@ -424,23 +427,26 @@ "sessTerminated": "Arama sonlandırıldı", "sessTerminatedReason": "Toplantı sonlandırıldı", "sessionRestarted": "Çağrı köprü tarafından yeniden başlatıldı", - "shareAudio": "Devam", - "shareAudioAltText": "istediğiniz içeriği paylaşmak için \"Tarayıcı Sekmesi\"ne gidin, içeriği seçin, \"sesi paylaş\" onay işaretini etkinleştirin ve ardından \"paylaş\" düğmesini tıklayın", + "shareAudio": "Sesi paylaş", + "shareAudioAltText": "İstediğiniz içeriği paylaşmak için \"Tarayıcı Sekmesi\"ne gidin, içeriği seçin, \"sesi paylaş\" onay işaretini etkinleştirin ve ardından \"paylaş\" düğmesini tıklayın", "shareAudioTitle": "Ses nasıl paylaşılır", - "shareAudioWarningD1": "sesinizi paylaşmadan önce ekran paylaşımını durdurmanız gerekiyor.", - "shareAudioWarningD2": "ekran paylaşımınızı yeniden başlatmanız ve \"sesi paylaş\" seçeneğini işaretlemeniz gerekiyor.", + "shareAudioWarningD1": "Sesinizi paylaşmadan önce ekran paylaşımını durdurmanız gerekiyor.", + "shareAudioWarningD2": "Ekran paylaşımınızı yeniden başlatmanız ve \"sesi paylaş\" seçeneğini işaretlemeniz gerekiyor.", "shareAudioWarningH1": "Eğer sadece ses paylaşmak istiyorsanız:", "shareAudioWarningTitle": "Ses paylaşımından önce ekran paylaşımını kapatmanız gerekmektedir", "shareMediaWarningGenericH2": "Ekranınızı ve sesinizi paylaşmak istiyorsanız", - "shareScreenWarningD1": "ekranınızı paylaşmadan önce ses paylaşımını durdurmanız gerekiyor.", - "shareScreenWarningD2": "ses paylaşımını durdurmanız, ekran paylaşımını başlatmanız ve \"sesi paylaş\" seçeneğini işaretlemeniz gerekiyor.", + "shareScreenWarningD1": "Ekranınızı paylaşmadan önce ses paylaşımını durdurmanız gerekiyor.", + "shareScreenWarningD2": "Ses paylaşımını durdurmanız, ekran paylaşımını başlatmanız ve \"sesi paylaş\" seçeneğini işaretlemeniz gerekiyor.", "shareScreenWarningH1": "Sadece ekranınızı paylaşmak istiyorsanız:", "shareScreenWarningTitle": "Ekranınızı paylaşmadan önce ses paylaşımını durdurmanız gerekiyor", + "shareVideoConfirmPlay": "Harici bir web sitesi açmak üzeresiniz. Devam etmek istiyor musunuz?", + "shareVideoConfirmPlayTitle": "{{name}} sizinle bir video paylaştı.", "shareVideoLinkError": "Lütfen doğru bir bağlantısı sağlayın.", + "shareVideoLinkStopped": "{{name}} adlı kişinin videosu durduruldu.", "shareVideoTitle": "Bir video paylaş", "shareYourScreen": "Ekranınızı paylaşın", "shareYourScreenDisabled": "Ekran paylaşımı devre dışı.", - "sharedVideoDialogError": "", + "sharedVideoDialogError": "Hata: Geçersiz veya yasak URL", "sharedVideoLinkPlaceholder": "YouTube bağlantısı veya doğrudan video bağlantısı", "show": "Göster", "start": "Başlat", @@ -489,7 +495,7 @@ "viewUpgradeOptionsTitle": "Premium bir özellik keşfettiniz!", "whiteboardLimitContent": "Üzgünüz, eşzamanlı beyaz tahta kullanıcılarının sınırına ulaşıldı.", "whiteboardLimitReference": "Daha fazla bilgi için lütfen şu adresi ziyaret edin", - "whiteboardLimitReferenceUrl": "web sitemiz", + "whiteboardLimitReferenceUrl": "Web Sitemiz", "whiteboardLimitTitle": "Beyaz tahta kullanımı kısıtlandı", "yourEntireScreen": "Tüm ekranınız" }, @@ -547,7 +553,7 @@ "genericError": "Ah! Bir şeyler ters gitti.", "inviteLiveStream": "Bu toplantının canlı akışını görüntülemek için şu bağlantıyı tıklayın: {{url}}", "invitePhone": "Tek dokunuşla sesli arama: {{number}},,{{conferenceID}}#", - "invitePhoneAlternatives": "", + "invitePhoneAlternatives": "Farklı bir arama numarası mı arıyorsunuz?\nToplantı arama numaralarına bakın: {{url}}\n\n\nAyrıca bir oda telefonundan arama yapıyorsanız, sese bağlanmadan katılın: {{silentUrl}}", "inviteSipEndpoint": "SIP adresine katılmak için lütfen bunu girin: {{sipUri}}", "inviteTextiOSInviteUrl": "Katılmak için linke tıklayınız: {{inviteUrl}}.", "inviteTextiOSJoinSilent": "Oda telefonundan bağlanıyorsanız, sese bağlanmadan katılmak için şu bağlantıyı kullanın: {{silentUrl}}.", @@ -622,7 +628,7 @@ "errorLiveStreamNotEnabled": "{{email}} için Canlı Akış etkin değil. Lütfen canlı akışı etkinleştirin veya canlı akışın etkin olduğu bir hesaba giriş yapın.", "expandedOff": "Canlı akış durdu", "expandedOn": "Toplantı şu anda Youtube'da yayınlanıyor.", - "expandedPending": "Canlı akış başlatılıyor...", + "expandedPending": "Canlı akış başlatılıyor…", "failedToStart": "Canlı Akış başlatılamadı", "getStreamKeyManually": "Canlı akış alınamadı. Canlı akış anahtarınızı Youtube'dan almayı deneyin.", "googlePrivacyPolicy": "Google Gizlilik Politikası", @@ -634,9 +640,9 @@ "offBy": "{{name}} canlı akışı durdurdu", "on": "Canlı Akış başlatıldı", "onBy": "{{name}} canlı akışı başlattı", - "pending": "Canlı Akış başlatılıyor...", + "pending": "Canlı Akış başlatılıyor…", "serviceName": "Canlı Akış hizmeti", - "sessionAlreadyActive": "", + "sessionAlreadyActive": "Bu oturum halihazırda kaydediliyor veya canlı yayınlanıyor.", "signIn": "Google ile giriş yap", "signInCTA": "Oturum açın veya Youtube'dan canlı akış anahtarınızı girin.", "signOut": "Çıkış yap", @@ -664,10 +670,10 @@ "joinRejectedMessage": "Katılma isteğiniz bir moderatör tarafından reddedildi.", "joinRejectedTitle": "Katılma isteğiniz reddedildi", "joinTitle": "Toplantıya katıl", - "joinWithPasswordMessage": "Parola ile katılmaya çalışıyorsunuz lütfen bekleyin...", + "joinWithPasswordMessage": "Parola ile katılmaya çalışıyorsunuz lütfen bekleyin…", "joiningMessage": "Birisi isteğinizi kabul eder etmez toplantıya katılacaksınız", - "joiningTitle": "Toplantıya katılma isteniyor...", - "joiningWithPasswordTitle": "Parola ile katılıyor...", + "joiningTitle": "Toplantıya katılma isteniyor…", + "joiningWithPasswordTitle": "Parola ile katılıyor…", "knockButton": "Katılmak için sor", "knockTitle": "Birisi toplantıya katılmak istiyor", "knockingParticipantList": "Kapıyı çalan katılımcı listesi", @@ -716,13 +722,13 @@ "wait": "Kaydınız kaydedilirken lütfen bekleyin", "yes": "Evet" }, - "lockRoomPassword": "parola", + "lockRoomPassword": "Parola", "lockRoomPasswordUppercase": "Parola", "lonelyMeetingExperience": { "button": "Birilerini davet et", "youAreAlone": "Toplantıdaki tek kişisiniz" }, - "me": "ben", + "me": "Ben", "notify": { "OldElectronAPPTitle": "Güvenlik açığı!", "allowAction": "İzin ver", @@ -735,9 +741,11 @@ "connectedTwoMembers": "{{first}} ve {{second}} toplantıya katıldı", "dataChannelClosed": "Video kalitesi bozuldu", "dataChannelClosedDescription": "Köprü kanalının bağlantısı kesildi ve bu nedenle video kalitesi en düşük ayarla sınırlandı.", + "dataChannelClosedDescriptionWithAudio": "Köprü kanalı kapalı olduğu için ses ve video kesintileri yaşanabilir.", + "dataChannelClosedWithAudio": "Ses ve video kalitesi etkilenebilir.", "disabledIframe": "Yerleştirme yalnızca demo amaçlı olduğundan bu çağrının bağlantısı {{timeout}} dakika içinde kesilecek.", "disabledIframeSecondary": "{{domain}} alanının yerleştirilmesi yalnızca demo amaçlı olduğundan bu çağrının bağlantısı {{timeout}} dakika içinde kesilecektir. Üretim yerleştirme için lütfen Hizmet olarak Jitsi'yi kullanın!", - "disconnected": "bağlantı kesildi", + "disconnected": "Bağlantı kesildi", "displayNotifications": "Bildirimleri görüntüle", "dontRemindMe": "Bana hatırlatma", "focus": "Toplantı odağı", @@ -757,7 +765,7 @@ "linkToSalesforceDescription": "Toplantı özetini bir Salesforce nesnesine bağlayabilirsiniz", "linkToSalesforceError": "Toplantı Salesforce'a bağlanamadı", "linkToSalesforceKey": "Bu toplantıyı bağla", - "linkToSalesforceProgress": "Toplantı Salesforce'a bağlanıyor...", + "linkToSalesforceProgress": "Toplantı Salesforce'a bağlanıyor…", "linkToSalesforceSuccess": "Toplantı Salesforce'a bağlandı", "localRecordingStarted": "{{name}} lokal kayıt başlattı", "localRecordingStopped": "{{name}} lokal kaydı durdurdu", @@ -781,12 +789,13 @@ "newDeviceAction": "Kullan", "newDeviceAudioTitle": "Yeni ses aygıtı algılandı", "newDeviceCameraTitle": "Yeni kamera algılandı", + "nextToSpeak": "Sırada konuşacak kişi sizsiniz", "noiseSuppressionDesktopAudioDescription": "Masaüstü sesi paylaşılırken gürültü bastırma etkinleştirilemez, lütfen devre dışı bırakın ve tekrar deneyin.", "noiseSuppressionFailedTitle": "Gürültü bastırma başlatılamadı", "noiseSuppressionStereoDescription": "Stereo ses gürültü bastırma şu anda desteklenmemektedir.", "oldElectronClientDescription1": "Güvenlik açıkları bilinen Jitsi Meet istemcisinin eski bir sürümünü kullanıyor görünüyorsunuz. Lütfen güncellediğinizden emin olun.", - "oldElectronClientDescription2": "son yapı", - "oldElectronClientDescription3": " şimdi!", + "oldElectronClientDescription2": "Son yapı", + "oldElectronClientDescription3": " Şimdi!", "participantWantsToJoin": "toplantıya katılmak istiyor", "participantsWantToJoin": "toplantıya katılmak istiyor", "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) başka bir katılımcı tarafından kaldırıldı", @@ -815,8 +824,11 @@ "videoUnmuteBlockedDescription": "Sistem sınırları nedeniyle kamera sesini açma ve masaüstü paylaşım işlemi geçici olarak engellendi.", "videoUnmuteBlockedTitle": "Kameranın sesini açma ve masaüstü paylaşımı engellendi!", "viewLobby": "Lobiyi göster", + "viewParticipants": "Katılımcıları görüntüle", "viewVisitors": "Ziyaretçileri görüntüle", "waitingParticipants": "{{waitingParticipants}} kişi", + "waitingVisitors": "Sırada bekleyen ziyaretçiler: {{waitingVisitors}}", + "waitingVisitorsTitle": "Toplantı henüz canlı değil!", "whiteboardLimitDescription": "Kullanıcı sınırına yakında ulaşılacağından ve beyaz tahta kapanacağından lütfen ilerlemenizi kaydedin.", "whiteboardLimitTitle": "Beyaz tahta kullanımı" }, @@ -830,7 +842,10 @@ "audioModeration": "Seslerini aç", "blockEveryoneMicCamera": "Herkesin mikrofonunu ve kamerasını blokla", "breakoutRooms": "Alt odalar", + "goLive": "Canlı yayına geç", "invite": "Birini davet et", + "lowerAllHands": "Tüm elleri indir", + "lowerHand": "Elini indir", "moreModerationActions": "Daha fazla denetleme seçeneği", "moreModerationControls": "Daha fazla denetleme kontrolü", "moreParticipantOptions": "Daha fazla katılımcı seçeneği", @@ -847,6 +862,7 @@ "headings": { "lobby": "Lobi ({{count}})", "participantsList": "Toplantı Katılımcıları ({{count}})", + "visitorInQueue": "(waiting {{count}})", "visitorRequests": "(requests {{count}})", "visitors": "Ziyaretçiler {{count}}", "waitingLobby": "Lobide bekleyen ({{count}})" @@ -860,10 +876,13 @@ "pinnedParticipant": "Katılımcı sabitlendi", "polls": { "answer": { + "edit": "Düzenle", + "send": "Gönder", "skip": "Geç", "submit": "Gönder" }, "by": "{{ name }} tarafından", + "closeButton": "Close poll", "create": { "addOption": "Seçenek Ekle", "answerPlaceholder": "Seçenek {{index}}", @@ -873,6 +892,7 @@ "pollQuestion": "Anket Sorusu", "questionPlaceholder": "Soru sor", "removeOption": "Seçeneği sil", + "save": "Kaydet", "send": "Gönder" }, "errors": { @@ -899,12 +919,14 @@ "callMe": "Beni ara", "callMeAtNumber": "Beni şu numaradan arayın:", "calling": "Arama", - "configuringDevices": "Cihazlar yapılandırılıyor...", + "configuringDevices": "Cihazlar yapılandırılıyor…", "connectedWithAudioQ": "Sese bağlı mısınız?", "connection": { + "failed": "Bağlantı testi başarısız!", "good": "İnternet bağlantınız iyi görünüyor!", "nonOptimal": "İnternet bağlantınız uygun değil", - "poor": "İnternet bağlantınız zayıf" + "poor": "İnternet bağlantınız zayıf", + "running": "Bağlantı testi çalıştırılıyor…" }, "connectionDetails": { "audioClipping": "Sesinizin kırpılmasını bekliyoruz.", @@ -913,6 +935,7 @@ "goodQuality": "Mükemmel! Medya kaliteniz harika olacak.", "noMediaConnectivity": "Bu test için medya bağlantısı kurmanın bir yolunu bulamadık. Buna genellikle bir güvenlik duvarı veya NAT neden olur.", "noVideo": "Videonuzun korkunç olmasını bekliyoruz.", + "testFailed": "Bağlantı testinde beklenmeyen sorunlarla karşılaşıldı, ancak bu durum deneyiminizi etkilemeyebilir.", "undetectable": "Tarayıcıda hala arama yapamıyorsanız, hoparlörlerinizin, mikrofonunuzun ve kameranızın doğru şekilde kurulduğundan, tarayıcınıza mikrofon ve kameranızı kullanma haklarını verdiğinizden ve tarayıcı sürümünüzün güncel olduğundan emin olmanızı öneririz. Arama konusunda hala sorun yaşıyorsanız, web uygulaması geliştiricisi ile iletişime geçmelisiniz.", "veryPoorConnection": "Çağrı kalitenizin gerçekten korkunç olmasını bekliyoruz.", "videoFreezing": "Videonuzun donmasını, kararmasını ve piksellenmesini bekliyoruz.", @@ -935,7 +958,7 @@ "errorValidation": "Numara doğrulanamadı", "iWantToDialIn": "İçeri arama yapmak istiyorum", "initiated": "Çağrı başlatıldı", - "joinAudioByPhone": "Join with phone audio", + "joinAudioByPhone": "Telefonla sesli katıl", "joinMeeting": "Toplantıya katıl", "joinMeetingInLowBandwidthMode": "Düşük bant genişliği modunda katılın", "joinWithoutAudio": "Ses olmadan katıl", @@ -947,26 +970,25 @@ "proceedAnyway": "Yine de devam et", "recordingWarning": "Diğer katılımcılar bu çağrıyı kaydediyor olabilir", "screenSharingError": "Ekran paylaşma hatası:", - "showScreen": "Toplantı öncesi ekranını etkinleştir", "startWithPhone": "Telefon sesiyle başlayın", "unsafeRoomConsent": "Riskleri anlıyorum, toplantıya katılmak istiyorum", "videoOnlyError": "Video hatası:", "videoTrackError": "Video izleme oluşturulamadı.", - "viewAllNumbers": "tüm numaraları görüntüle" + "viewAllNumbers": "Tüm numaraları görüntüle" }, "presenceStatus": { "busy": "Meşgul", - "calling": "Arıyor...", + "calling": "Arıyor…", "connected": "Bağlandı", - "connecting": "Bağlanıyor...", - "connecting2": "Bağlanıyor*...", + "connecting": "Bağlanıyor…", + "connecting2": "Bağlanıyor*…", "disconnected": "Bağlantı kesildi", "expired": "Süresi doldu", "ignored": "Yok sayıldı", - "initializingCall": "Arama başlatılıyor...", + "initializingCall": "Arama başlatılıyor…", "invited": "Davet edildi", "rejected": "Reddedildi", - "ringing": "Çalıyor..." + "ringing": "Çalıyor…" }, "profile": { "avatar": "avatar", @@ -1000,7 +1022,7 @@ "errorFetchingLink": "Kayıt bağlantısı getirilirken hata oluştu.", "expandedOff": "Kayıt durdu", "expandedOn": "Toplantı şu anda kaydediliyor.", - "expandedPending": "Kayıt başlatılıyor ...", + "expandedPending": "Kayıt başlatılıyor…", "failedToStart": "Kayıt başlatılamadı", "fileSharingdescription": "Toplantı katılımcılarıyla kaydı paylaş", "highlight": "Önemli Olay", @@ -1018,7 +1040,7 @@ "localRecordingStartWarningTitle": "Kaydetmek için kaydı durdurun", "localRecordingVideoStop": "Videonuzu durdurmak yerel kaydı da durduracaktır. Devam etmek istediğine emin misin?", "localRecordingVideoWarning": "Videonuzu kaydetmek için kayda başlarken açmış olmanız gerekir", - "localRecordingWarning": "Doğru video ve sesi kullanmak için geçerli sekmeyi seçtiğinizden emin olun. Kayıt şu anda yaklaşık 100 dakika olan 1GB ile sınırlıdır.", + "localRecordingWarning": "Doğru video ve sesi kullanmak için geçerli sekmeyi seçtiğinizden emin olun.", "loggedIn": "{{userName}} olarak giriş yapıldı", "noMicPermission": "Mikrofon parçası oluşturulamadı. Lütfen mikrofonu kullanma izni verin.", "noStreams": "Ses veya video akışı algılanmadı", @@ -1027,7 +1049,7 @@ "on": "Kayıt başladı", "onBy": "{{name}} isimli kayıt başlatıldı", "onlyRecordSelf": "Yalnızca ses ve video akışlarımı kaydet", - "pending": "Toplantıyı kaydetmeye hazırlanıyor ...", + "pending": "Toplantıyı kaydetmeye hazırlanıyor…", "recordAudioAndVideo": "Ses ve video kaydedin", "recordTranscription": "Transkripsiyonu kaydet", "saveLocalRecording": "Kayıt dosyasını yerel olarak kaydet (Beta)", @@ -1076,6 +1098,7 @@ "desktopShareWarning": "Yeni ayarların etkili olması için ekran paylaşımını yeniden başlatmanız gerekli.", "devices": "Cihazlar", "followMe": "Beni takip edenler", + "followMeRecorder": "Kaydedici beni takip etsin", "framesPerSecond": "kare/saniye", "incomingMessage": "Gelen mesaj", "language": "Dil", @@ -1089,7 +1112,7 @@ "noDevice": "Yok", "notifications": "Bildirimler", "participantJoined": "Katılımcı katıldı", - "participantKnocking": "", + "participantKnocking": "Katılımcı lobiye girdi", "participantLeft": "Katılımcı ayrıldı", "playSounds": "Sesi çal", "reactions": "Toplantı reaksiyonları", @@ -1176,17 +1199,17 @@ "termsView": { "title": "Şartlar" }, - "toggleTopPanelLabel": "", + "toggleTopPanelLabel": "Üst paneli göster/gizle", "toolbar": { "Settings": "Ayarlar", "accessibilityLabel": { - "Settings": "Ayarları aç/kapat", + "Settings": "Ayarları göster/gizle", "audioOnly": "Yalnızca sesi aç/kapat", "audioRoute": "Ses aygıtını seçin", "boo": "Boo", "breakoutRooms": "Alt odalar", "callQuality": "Armama kalitesini yönetin", - "carmode": "Araba odu", + "carmode": "Araba modu", "cc": "Altyazıları aç/kapat", "chat": "Mesajlaşma penceresini aç/kapat", "clap": "Alkış", @@ -1234,11 +1257,12 @@ "muteGUMPending": "Mikrofonunuz bağlanıyor", "noiseSuppression": "Gürültü azaltma", "openChat": "Sohbeti aç", - "participants": "Katılımcılar", + "participants": "Katılımcılar bölmesini açın. {{participantsCount}} katılımcı", "pip": "Resim içinde Resim modunu aç/kapat", "privateMessage": "Özel mesaj gönder", "profile": "Profilinizi düzenleyin", "raiseHand": "El kaldırmayı aç/kapat", + "react": "Mesaj tepkileri", "reactions": "Tepkiler", "reactionsMenu": "Reaksiyon menüsünü Aç / Kapa", "recording": "Kaydetmeyi aç/kapat", @@ -1319,7 +1343,7 @@ "muteGUMPending": "Mikrofonunuz bağlanıyor", "noAudioSignalDesc": "Sistem ayarlarından veya donanımdan sesi kapatmadıysanız, cihazınızı değiştirin.", "noAudioSignalDescSuggestion": "Sistem ayarlarından veya donanımdan kasıtlı olarak kapatmadıysanız, önerilen aygıta geçmeyi düşünün.", - "noAudioSignalDialInDesc": "", + "noAudioSignalDialInDesc": "Ayrıca şunları kullanarak da arama yapabilirsiniz:", "noAudioSignalDialInLinkDesc": "İçeri arama numaraları", "noAudioSignalTitle": "Mikrofonunuzdan hiçbir giriş gelmiyor!", "noiseSuppression": "Gürültü azaltma", @@ -1380,16 +1404,7 @@ }, "unpinParticipant": "{{participantName}} - Sabitlemeyi kaldır", "userMedia": { - "androidGrantPermissions": "Tarayıcınız izin istediğinde İzin Ver seçeneğini seçin.", - "chromeGrantPermissions": "Tarayıcınız izin istediğinde İzin Ver seçeneğini seçin.", - "edgeGrantPermissions": "Tarayıcınız izin istediğinde Evet seçeneğini seçin.", - "electronGrantPermissions": "Lütfen kameranızı ve mikrofonunuzu kullanmak için izin verin", - "firefoxGrantPermissions": "Tarayıcınız izin istediğinde Seçilen Aygıtı Paylaş seçeneğini seçin.", - "iexplorerGrantPermissions": "Tarayıcınız izin istediğinde Tamam seçeneğini seçin.", - "nwjsGrantPermissions": "Lütfen kameranızı ve mikrofonunuzu kullanmak için izin verin", - "operaGrantPermissions": "Tarayıcınız izin istediğinde İzin Ver seçeneğini seçin.", - "react-nativeGrantPermissions": "Tarayıcınız izin istediğinde İzin Ver seçeneğini seçin.", - "safariGrantPermissions": "Tarayıcınız izin istediğinde Tamam seçeneğini seçin." + "grantPermissions": "Lütfen kameranızı ve mikrofonunuzu kullanmak için izin verin." }, "videoSIPGW": { "busy": "Kaynakları serbest bırakmaya çalışıyoruz. Lütfen birkaç dakika içinde tekrar deneyin.", @@ -1468,7 +1483,7 @@ "image6": "Orman ", "image7": "Gündoğumu", "none": "Hiçbiri", - "pleaseWait": "Lütfen bekleyiniz...", + "pleaseWait": "Lütfen bekleyiniz…", "removeBackground": "Arkaplanı kaldır", "slightBlur": "Hafif Bulanıklık", "title": "Sanal arkaplanlar", @@ -1478,12 +1493,22 @@ }, "visitors": { "chatIndicator": "(ziyaretçi)", + "joinMeeting": { + "description": "Şu anda bu konferansta gözlemcisiniz.", + "raiseHand": "Elinizi kaldırın", + "title": "Toplantıya katılın", + "wishToSpeak": "Konuşmak istiyorsanız lütfen aşağıda elinizi kaldırın ve moderatörün onayını bekleyin." + }, "labelTooltip": "Ziyaretçi sayısı: {{count}}", "notification": { "demoteDescription": "Buraya {{actor}} tarafından gönderildi, katılmak için elinizi kaldırın", - "description": "Katılmak için elinizi kaldırın", + "noMainParticipantsDescription": "Bir katılımcının toplantıyı başlatması gerekiyor. Lütfen biraz sonra tekrar deneyin.", + "noMainParticipantsTitle": "Bu toplantı henüz başlamadı.", + "noVisitorLobby": "Toplantı için etkinleştirilmiş bir lobi varken katılamazsınız.", + "notAllowedPromotion": "Bir katılımcının öncelikle isteğinize izin vermesi gerekiyor.", "title": "Toplantıda ziyaretçisiniz" - } + }, + "waitingMessage": "Toplantı canlı yayınlanır yayınlanmaz katılacaksınız!" }, "volumeSlider": "Ses kaydırıcısı", "welcomepage": { diff --git a/lang/main-uk.json b/lang/main-uk.json index a04f1e1efa16..0ea48fa972c5 100644 --- a/lang/main-uk.json +++ b/lang/main-uk.json @@ -19,7 +19,7 @@ "noResults": "Нічого не знайдено", "outlookEmail": "Електронна пошта Outlook", "phoneNumbers": "номери телефонів", - "searching": "Триває пошук...", + "searching": "Триває пошук…", "shareInvite": "Надіслати запрошення", "shareLink": "Поділитися посиланням на зустріч", "shareStream": "Поділитися посиланням на трансляцію наживо", @@ -122,7 +122,7 @@ "installExtensionText": "Встановити розширення для інтеграції з Календарем Google та Office 365" }, "connectingOverlay": { - "joiningRoom": "Приєднання до зустрічі..." + "joiningRoom": "Приєднання до зустрічі…" }, "connection": { "ATTACHED": "Приєднано", @@ -134,9 +134,9 @@ "DISCONNECTED": "Від'єднано", "DISCONNECTING": "Від'єднання триває", "ERROR": "Помилка", - "FETCH_SESSION_ID": "Отримання session-id...", + "FETCH_SESSION_ID": "Отримання session-id…", "GET_SESSION_ID_ERROR": "Помилка отримання session-id: {{code}}", - "GOT_SESSION_ID": "Отримання session-id... Готово", + "GOT_SESSION_ID": "Отримання session-id… Готово", "LOW_BANDWIDTH": "Відео для {{displayName}} було вимкнено для економії ресурсів з'єднання" }, "connectionindicator": { @@ -197,8 +197,8 @@ "launchWebButton": "Відкрити у веб-браузері", "noMobileApp": "Застосунок не встановлений?", "termsAndConditions": "Продовжуючи, ви погоджуєтесь з нашіми умовами використання.", - "title": "Приєднання до вашої зустрічі у {{app}}...", - "titleNew": "Приєднання до вашої зустрічі ...", + "title": "Приєднання до вашої зустрічі у {{app}}…", + "titleNew": "Приєднання до вашої зустрічі…", "tryAgainButton": "Спробуйте у програмі на ПК", "unsupportedBrowser": "Ви використовуєте веб-браузер, який ми не підтримуємо." }, @@ -237,7 +237,7 @@ "Share": "Поділитися", "Submit": "Гаразд", "WaitForHostMsg": "Зустріч ще не почалася. Авторизуйтеся, якщо ви організатор, або дочекайтеся організатора.", - "WaitingForHostTitle": "В очікуванні організатора...", + "WaitingForHostTitle": "В очікуванні організатора…", "Yes": "Так", "accessibilityLabel": { "close": "Закрити", @@ -261,9 +261,9 @@ "cameraUnknownError": "Невідома помилка доступу до камери.", "cameraUnsupportedResolutionError": "Ваша камера не підтримує потрібну роздільну здатність для передавання відео.", "close": "Закрити", - "conferenceDisconnectMsg": "Перевірте з'єднання з мережею. Повторна спроба приєднання через {{seconds}} с...", + "conferenceDisconnectMsg": "Перевірте з'єднання з мережею. Повторна спроба приєднання через {{seconds}} с…", "conferenceDisconnectTitle": "Вас від'єднано.", - "conferenceReloadMsg": "Ми намагаємося це виправити. Повторна спроба приєднання через {{seconds}} с...", + "conferenceReloadMsg": "Ми намагаємося це виправити. Повторна спроба приєднання через {{seconds}} с…", "conferenceReloadTitle": "На жаль, щось пішло не так.", "confirm": "Підтвердити", "confirmNo": "Ні", @@ -558,7 +558,7 @@ "errorLiveStreamNotEnabled": "Трансляція наживо не ввімкнена для {{email}}. Увімкніть трансляцію наживо або увійдіть в обліковий запис з увімкненою трансляцією наживо.", "expandedOff": "Трансляція наживо зупинилася", "expandedOn": "Наразі зустріч транслюється наживо на YouTube.", - "expandedPending": "Розпочинається трансляція наживо...", + "expandedPending": "Розпочинається трансляція наживо…", "failedToStart": "Не вдалося розпочати трансляцію наживо", "getStreamKeyManually": "Не вдалося отримати жодний канал трансляції наживо. Спробуйте отримати ключ для трансляції наживо з YouTube.", "googlePrivacyPolicy": "Політика конфіденційності Google", @@ -570,7 +570,7 @@ "offBy": "{{name}} зупинив трансляцію наживо", "on": "Трансляція наживо", "onBy": "{{name}} почав трансляцію наживо", - "pending": "Починається трансляція наживо...", + "pending": "Починається трансляція наживо…", "serviceName": "Послуга трансляції наживо", "sessionAlreadyActive": "Ця зустріч вже записується або транслюється наживо.", "signIn": "Увійти до послуг Google", @@ -600,10 +600,10 @@ "joinRejectedMessage": "Модератор відмовив вам у приєднанні до зустрічі.", "joinRejectedTitle": "Відмовлено у приєднанні.", "joinTitle": "Приєднатися до зустрічі", - "joinWithPasswordMessage": "Спроба приєднатися з паролем, зачекайте...", + "joinWithPasswordMessage": "Спроба приєднатися з паролем, зачекайте…", "joiningMessage": "Ви приєднаєтесь до зустрічі, щойно модератор схвалить ваш запит", - "joiningTitle": "Запит на приєднання до зустрічі...", - "joiningWithPasswordTitle": "Приєднання з паролем...", + "joiningTitle": "Запит на приєднання до зустрічі…", + "joiningWithPasswordTitle": "Приєднання з паролем…", "knockButton": "Запитати дозволу", "knockTitle": "Хтось хоче приєднатися до зустрічі", "knockingParticipantList": "Список учасників, які очікують", @@ -689,7 +689,7 @@ "linkToSalesforceDescription": "Ви можете пов'язати підсумок зустрічі з об'єктом Salesforce.", "linkToSalesforceError": "Не вдалося пов'язати зустріч із Salesforce", "linkToSalesforceKey": "Пов'язати зустріч", - "linkToSalesforceProgress": "Пов'язання зустрічі до Salesforce...", + "linkToSalesforceProgress": "Пов'язання зустрічі до Salesforce…", "linkToSalesforceSuccess": "Зустріч пов'язана з Salesforce", "localRecordingStarted": "{{name}} почав локальний відеозапис.", "localRecordingStopped": "{{name}} зупинив локальний відеозапис.", @@ -824,7 +824,7 @@ "callMe": "Зателефонуйте мені", "callMeAtNumber": "Зателефонуйте мені за цим номером:", "calling": "З'єднуємо", - "configuringDevices": "Налаштування пристроїв...", + "configuringDevices": "Налаштування пристроїв…", "connectedWithAudioQ": "Ви приєдналися у режимі зі звуком?", "connection": { "good": "Якість вашого підключення до Інтернету є нормальною!", @@ -870,7 +870,6 @@ "or": "або", "premeeting": "Перед приєднанням", "screenSharingError": "Помилка спільного перегляду екрана:", - "showScreen": "Увімкнути вхідну панель", "startWithPhone": "Почати в режимі телефону", "videoOnlyError": "Помилка відео:", "videoTrackError": "Не вдалося створити трек відео.", @@ -878,17 +877,17 @@ }, "presenceStatus": { "busy": "Зайнятий", - "calling": "Телефонує...", + "calling": "Телефонує…", "connected": "З'єднано", - "connecting": "З'єднується...", - "connecting2": "З'єднується*...", + "connecting": "З'єднується…", + "connecting2": "З'єднується*…", "disconnected": "Від'єднано", "expired": "Недійсний", "ignored": "Пропустив", - "initializingCall": "Ініціалізація виклику...", + "initializingCall": "Ініціалізація виклику…", "invited": "Запрошений", "rejected": "Відмовився", - "ringing": "Дзвінок..." + "ringing": "Дзвінок…" }, "profile": { "avatar": "аватар", @@ -922,7 +921,7 @@ "errorFetchingLink": "Помилка при отриманні посилання на запис.", "expandedOff": "Запис зупинено", "expandedOn": "Ця зустріч записується.", - "expandedPending": "Починаємо запис зустрічі...", + "expandedPending": "Починаємо запис зустрічі…", "failedToStart": "Помилка початку запису", "fileSharingdescription": "Поділіться посиланням на запис з учасниками зустрічі", "highlight": "Виділити", @@ -941,7 +940,7 @@ "localRecordingStartWarningTitle": "Зупиніть запис, щоб зберегти його", "localRecordingVideoStop": "Вимикання камери також припинить локальний запис. Продовжити?", "localRecordingVideoWarning": "Щоб записати ваше відео, камера має бути увімкнена до початку запису", - "localRecordingWarning": "Виберіть поточну вкладку веб-браузера, щоб використовувати правильні налаштування камери та мікрофона. Запис наразі обмежений 1 ГБ, що становить приблизно 100 хв.", + "localRecordingWarning": "Виберіть поточну вкладку веб-браузера, щоб використовувати правильні налаштування камери та мікрофона.", "loggedIn": "Ви ввійшли як {{userName}}", "noMicPermission": "Не вдалося створити мікрофонну доріжку. Надайте дозвіл на доступ до мікрофона.", "noStreams": "Аудіо чи відео потік не виявлено.", @@ -950,7 +949,7 @@ "on": "Запис розпочато", "onBy": "{{name}} увімкнув запис", "onlyRecordSelf": "Записувати лише мої аудіо та відео потоки", - "pending": "Підготовка до запису зустрічі...", + "pending": "Підготовка до запису зустрічі…", "rec": "REC", "saveLocalRecording": "Зберегти файл запису локально (ТЕСТУВАННЯ)", "serviceDescription": "Ваш запис буде збережено послугою запису", @@ -995,7 +994,7 @@ "incomingMessage": "Вхідне повідомлення", "language": "Мова", "loggedIn": "Увійшли як {{name}}", - "maxStageParticipants": "Максимальна кількість учасників, яку можна закріпити на головній сцені (ТЕСТУВАННЯ)", + "maxStageParticipants": "Максимальна кількість учасників, яку можна закріпити на головній сцені", "microphones": "Мікрофони", "moderator": "Модератор", "moderatorOptions": "Параметри модерації", @@ -1278,7 +1277,7 @@ "failedToStart": "Не вдалося почати транскрибування", "labelToolTip": "Зустріч транскрибується", "off": "Транскрибування зупинено", - "pending": "Підготовка до транскрибування зустрічі...", + "pending": "Підготовка до транскрибування зустрічі…", "sourceLanguageDesc": "Поточна мова зустрічі {{sourceLanguage}}.
Ви можете її змінити ", "sourceLanguageHere": "тут", "start": "Показувати субтитри", @@ -1289,16 +1288,7 @@ }, "unpinParticipant": "{{participantName}} - Відкріпити", "userMedia": { - "androidGrantPermissions": "Виберіть «Дозволити», коли ваш веб-браузер запитає дозволи.", - "chromeGrantPermissions": "Виберіть «Дозволити», коли ваш веб-браузер запитає дозволи.", - "edgeGrantPermissions": "Виберіть «Так», коли ваш веб-браузер запитає дозволи.", - "electronGrantPermissions": "Спроба отримати доступ до камери та мікрофона", - "firefoxGrantPermissions": "Виберіть «Поділитися вибраним пристроєм», коли ваш веб-браузер запитає дозволи.", - "iexplorerGrantPermissions": "Виберіть «Гаразд», коли ваш веб-браузер запитає дозволи.", - "nwjsGrantPermissions": "Надайте дозвіл на доступ до камери та мікрофона", - "operaGrantPermissions": "Виберіть «Дозволити», коли ваш веб-браузер запитає дозволи.", - "react-nativeGrantPermissions": "Виберіть «Дозволити», коли ваш веб-браузер запитає дозволи.", - "safariGrantPermissions": "Виберіть «Гаразд», коли ваш веб-браузер запитає дозволи." + "grantPermissions": "Надайте дозвіл на доступ до камери та мікрофона." }, "videoSIPGW": { "busy": "Ми працюємо над вивільненням ресурсів. Спробуйте за декілька хвилин.", @@ -1372,7 +1362,7 @@ "image6": "Ліс ", "image7": "Схід сонця", "none": "Немає", - "pleaseWait": "Будь ласка, зачекайте...", + "pleaseWait": "Будь ласка, зачекайте…", "removeBackground": "Прибрати фон", "slightBlur": "Напіврозмиття", "title": "Віртуальні фони", diff --git a/lang/main-vi.json b/lang/main-vi.json index f7f464559ad7..7a517cf6edb7 100644 --- a/lang/main-vi.json +++ b/lang/main-vi.json @@ -22,7 +22,7 @@ "noResults": "Không tìm được kết quả khớp", "outlookEmail": "Email Outlook", "phoneNumbers": "số điện thoại", - "searching": "Đang tìm kiếm...", + "searching": "Đang tìm kiếm…", "shareInvite": "Chia sẻ lời mời tham dự cuộc họp", "shareLink": "Chia sẻ đường dẫn để mời người khác tham dự cuộc họp", "shareStream": "Chia sẻ liên kết phát trực tiếp", @@ -144,7 +144,7 @@ "installExtensionText": "Cài đặt tiện ích mở rộng để tích hợp Lịch Google và Office 365" }, "connectingOverlay": { - "joiningRoom": "Đang kết nối tới cuộc họp của bạn..." + "joiningRoom": "Đang kết nối tới cuộc họp của bạn…" }, "connection": { "ATTACHED": "Đã đính kèm", @@ -156,9 +156,9 @@ "DISCONNECTED": "Đã ngắt kết nối", "DISCONNECTING": "Đang ngắt kết nối", "ERROR": "Lỗi", - "FETCH_SESSION_ID": "Đang lấy id phiên...", + "FETCH_SESSION_ID": "Đang lấy id phiên…", "GET_SESSION_ID_ERROR": "Nhận lỗi id phiên: {{code}}", - "GOT_SESSION_ID": "Lấy id phiên... Xong", + "GOT_SESSION_ID": "Lấy id phiên… Xong", "LOW_BANDWIDTH": "Video của {{displayName}} đã bị tắt để tiết kiệm băng thông" }, "connectionindicator": { @@ -224,7 +224,7 @@ "or": "VÀ", "termsAndConditions": "Bằng việc tiếp tục, bạn đồng ý với điều khoản và điều kiện của chúng tôi.", "title": "Thực hiện cuộc họp trên {{app}}…", - "titleNew": "Đang khởi động cuộc họp của bạn...", + "titleNew": "Đang khởi động cuộc họp của bạn…", "tryAgainButton": "Thử lại", "unsupportedBrowser": "Có vẻ như bạn đang sử dụng trình duyệt mà chúng tôi không hỗ trợ." }, @@ -263,8 +263,9 @@ "Share": "Chia sẻ", "Submit": "Đăng ký", "WaitForHostMsg": "Cuộc họp chưa được bắt đầu. Nếu bạn là quản trị viên vui lòng xác thực. Nếu không, vui lòng đợi quản trị viên.", + "WaitingForHost": "Đang đợi quản trị viên…", "WaitingForHostButton": "Chờ người điều hành", - "WaitingForHostTitle": "Chờ người điều hành ...", + "WaitingForHostTitle": "Chờ người điều hành…", "Yes": "Có", "accessibilityLabel": { "Cancel": "Hủy (rời khỏi hộp thoại)", @@ -292,9 +293,9 @@ "cameraUnknownError": "Không thể sử dụng camera vì một lý do không xác định.", "cameraUnsupportedResolutionError": "Camera của bạn không hỗ trợ độ phân giải video yêu cầu.", "close": "Đóng", - "conferenceDisconnectMsg": "Bạn có thể cần kiểm tra kết nối mạng của mình. Đang kết nối lại trong {{seconds}} giây...", + "conferenceDisconnectMsg": "Bạn có thể cần kiểm tra kết nối mạng của mình. Đang kết nối lại trong {{seconds}} giây…", "conferenceDisconnectTitle": "Bạn đã bị ngắt kết nối.", - "conferenceReloadMsg": "Chúng tôi đang cố gắng sửa lỗi này. Đang kết nối lại trong {{seconds}} giây...", + "conferenceReloadMsg": "Chúng tôi đang cố gắng sửa lỗi này. Đang kết nối lại trong {{seconds}} giây…", "conferenceReloadTitle": "Thật không may, đã có lỗi xảy ra.", "confirm": "Xác nhận", "confirmNo": "Không", @@ -622,7 +623,7 @@ "errorLiveStreamNotEnabled": "Phát trực tuyến không được bật với email {{email}}. Vui lòng bật phát trực tuyến hoặc truy cập một tài khoản đã bật phát trực tuyến.", "expandedOff": "Phát trực tuyến đã dừng", "expandedOn": "Cuộc họp đang được phát trên Youtube.", - "expandedPending": "Phát trực tuyến đang bắt đầu...", + "expandedPending": "Phát trực tuyến đang bắt đầu…", "failedToStart": "Không thể bắt đầu phát trực tuyến", "getStreamKeyManually": "Không thể thu nhận phát trực tuyến nào. Thử lấy mã phát trực tuyến từ Youtube.", "googlePrivacyPolicy": "Chính sách bảo mật của Google", @@ -634,7 +635,7 @@ "offBy": "{{name}} đã dừng ghi", "on": "Phát trực tuyến", "onBy": "{{name}} đã dừng ghi", - "pending": "Đang bắt đầu phát trực tuyến...", + "pending": "Đang bắt đầu phát trực tuyến…", "serviceName": "Dịch vụ Phát trực tuyến", "sessionAlreadyActive": "Phiên này đã được ghi lại hoặc phát trực tiếp.", "signIn": "Đăng nhập với Google", @@ -664,10 +665,10 @@ "joinRejectedMessage": "Yêu cầu tham gia của bạn đã bị từ chối bởi một người điều hành.", "joinRejectedTitle": "Yêu cầu tham gia bị từ chối.", "joinTitle": "Tham gia cuộc họp", - "joinWithPasswordMessage": "Đang cố gắng tham gia với mật khẩu, vui lòng đợi...", + "joinWithPasswordMessage": "Đang cố gắng tham gia với mật khẩu, vui lòng đợi…", "joiningMessage": "Bạn sẽ tham gia cuộc họp ngay khi có ai đó chấp nhận yêu cầu của bạn", - "joiningTitle": "Yêu cầu tham gia cuộc họp...", - "joiningWithPasswordTitle": "Đang tham gia với mật khẩu...", + "joiningTitle": "Yêu cầu tham gia cuộc họp…", + "joiningWithPasswordTitle": "Đang tham gia với mật khẩu…", "knockButton": "Yêu cầu tham gia", "knockTitle": "Một ai đó muốn tham gia cuộc họp", "knockingParticipantList": "Danh sách người yêu cầu tham gia", @@ -757,7 +758,7 @@ "linkToSalesforceDescription": "Bạn có thể liên kết tóm tắt cuộc họp với một đối tượng Salesforce.", "linkToSalesforceError": "Không thể liên kết cuộc họp với Salesforce", "linkToSalesforceKey": "Liên kết cuộc họp này", - "linkToSalesforceProgress": "Đang liên kết cuộc họp với Salesforce...", + "linkToSalesforceProgress": "Đang liên kết cuộc họp với Salesforce…", "linkToSalesforceSuccess": "Cuộc họp đã được liên kết với Salesforce", "localRecordingStarted": "{{name}} đã bắt đầu ghi âm cục bộ.", "localRecordingStopped": "{{name}} đã dừng ghi âm cục bộ.", @@ -899,7 +900,7 @@ "callMe": "Gọi cho tôi", "callMeAtNumber": "Gọi cho tôi ở số này:", "calling": "Đang gọi", - "configuringDevices": "Đang cấu hình thiết bị...", + "configuringDevices": "Đang cấu hình thiết bị…", "connectedWithAudioQ": "Bạn đã kết nối với âm thanh?", "connection": { "good": "Kết nối internet của bạn trông rất tốt!", @@ -947,7 +948,6 @@ "proceedAnyway": "Tiếp tục dù sao", "recordingWarning": "Có thể có người tham gia khác đang ghi lại cuộc gọi này", "screenSharingError": "Lỗi chia sẻ màn hình:", - "showScreen": "Kích hoạt màn hình trước cuộc họp", "startWithPhone": "Bắt đầu với âm thanh điện thoại", "unsafeRoomConsent": "Tôi hiểu rủi ro, tôi muốn tham gia cuộc họp", "videoOnlyError": "Lỗi video:", @@ -959,7 +959,7 @@ "calling": "Đang gọi…", "connected": "Đã kết nối", "connecting": "Đang kết nối…", - "connecting2": "Đang kết nối*...", + "connecting2": "Đang kết nối*…", "disconnected": "Đã ngắt kết nối", "expired": "Hết hạn", "ignored": "Đã bỏ qua", @@ -1000,7 +1000,7 @@ "errorFetchingLink": "Lỗi khi tìm nạp liên kết ghi âm.", "expandedOff": "Ghi hình đã dừng", "expandedOn": "Cuộc họp đang được ghi hình.", - "expandedPending": "Ghi hình đang khởi động...", + "expandedPending": "Ghi hình đang khởi động…", "failedToStart": "Khởi động ghi hình thất bại", "fileSharingdescription": "Chia sẻ ghi hình với người tham gia họp", "highlight": "Đánh dấu", @@ -1018,7 +1018,7 @@ "localRecordingStartWarningTitle": "Dừng ghi âm để lưu lại", "localRecordingVideoStop": "Dừng video của bạn cũng sẽ dừng ghi âm cục bộ. Bạn có chắc chắn muốn tiếp tục không?", "localRecordingVideoWarning": "Để ghi lại video của bạn, bạn phải bật nó khi bắt đầu ghi âm", - "localRecordingWarning": "Đảm bảo bạn chọn tab hiện tại để sử dụng video và âm thanh đúng cách. Hiện tại, ghi âm bị giới hạn chỉ là 1GB, tương đương với khoảng 100 phút.", + "localRecordingWarning": "Đảm bảo bạn chọn tab hiện tại để sử dụng video và âm thanh đúng cách.", "loggedIn": "Đã đăng nhập dưới tên {{userName}}", "noMicPermission": "Không thể tạo track microphone. Vui lòng cấp quyền sử dụng microphone.", "noStreams": "Không phát hiện luồng âm thanh hoặc video nào.", @@ -1027,7 +1027,7 @@ "on": "Đang ghi hình", "onBy": "{{name}} đã bắt đầu ghi hình", "onlyRecordSelf": "Chỉ ghi lại luồng âm thanh và video của tôi", - "pending": "Đang chuẩn bị để ghi hình cuộc họp...", + "pending": "Đang chuẩn bị để ghi hình cuộc họp…", "recordAudioAndVideo": "Ghi âm và video", "recordTranscription": "Ghi chú giọng nói", "saveLocalRecording": "Lưu tệp ghi âm cục bộ (Beta)", @@ -1080,7 +1080,7 @@ "incomingMessage": "Tin nhắn đang gửi", "language": "Ngôn ngữ", "loggedIn": "Đã đăng nhập dưới tên {{name}}", - "maxStageParticipants": "Số lượng người tham gia tối đa có thể được ghim vào sân khấu chính (THỬ NGHIỆM)", + "maxStageParticipants": "Số lượng người tham gia tối đa có thể được ghim vào sân khấu chính", "microphones": "Micro", "moderator": "Quản trị viên", "moderatorOptions": "Tùy chọn quản trị viên", @@ -1380,16 +1380,7 @@ }, "unpinParticipant": "{{participantName}} - Bỏ ghim", "userMedia": { - "androidGrantPermissions": "Chọn Cho phép khi trình duyệt của bạn yêu cầu cấp phép.", - "chromeGrantPermissions": "Chọn Cho phép khi trình duyệt của bạn yêu cầu cấp phép.", - "edgeGrantPermissions": "Chọn khi trình duyệt của bạn yêu cầu cấp phép.", - "electronGrantPermissions": "Vui lòng cấp quyền sử dụng camera và micro của bạn", - "firefoxGrantPermissions": "Chọn Chia sẻ thiết bị đã chọn khi trình duyệt của bạn yêu cầu cấp phép.", - "iexplorerGrantPermissions": "Chọn khi trình duyệt của bạn yêu cầu cấp phép.", - "nwjsGrantPermissions": "Vui lòng cấp quyền sử dụng camera và micro của bạn", - "operaGrantPermissions": "Chọn Cho phép khi trình duyệt của bạn yêu cầu cấp phép.", - "react-nativeGrantPermissions": "Chọn Cho phép khi trình duyệt của bạn yêu cầu cấp phép.", - "safariGrantPermissions": "Chọn khi trình duyệt của bạn yêu cầu cấp phép." + "grantPermissions": "Vui lòng cấp quyền sử dụng camera và micro của bạn." }, "videoSIPGW": { "busy": "Chúng tôi đang giải phóng tài nguyên. Vui lòng thử lại sau vài phút.", @@ -1468,7 +1459,7 @@ "image6": "Rừng", "image7": "Mặt trời mọc", "none": "Không có", - "pleaseWait": "Vui lòng đợi...", + "pleaseWait": "Vui lòng đợi…", "removeBackground": "Xóa hình nền", "slightBlur": "Làm mờ nhẹ", "title": "Hình nền ảo", diff --git a/lang/main-zhCN.json b/lang/main-zh-CN.json similarity index 77% rename from lang/main-zhCN.json rename to lang/main-zh-CN.json index d6ff4ce894c4..19e370a6f89f 100644 --- a/lang/main-zhCN.json +++ b/lang/main-zh-CN.json @@ -67,13 +67,18 @@ "renameBreakoutRoom": "重命名分组讨论室", "sendToBreakoutRoom": "将参会者移至:" }, - "defaultName": "分组讨论室#{{index}}", + "breakoutList": "分组讨论室列表", + "buttonLabel": "分组讨论室", + "defaultName": "分组讨论室 #{{index}}", + "hideParticipantList": "隐藏成员列表", "mainRoom": "主会议室", "notifications": { "joined": "正在加入“{{name}}”分组讨论室", "joinedMainRoom": "正在加入主会议室", "joinedTitle": "分组讨论室" - } + }, + "showParticipantList": "显示成员列表", + "title": "分组讨论室" }, "calendarSync": { "addMeetingURL": "添加会议链接", @@ -104,10 +109,11 @@ } }, "chat": { + "disabled": "聊天已禁用", "enter": "加入会议室", "error": "错误:你的消息未发送。原因:{{error}}", "fieldPlaceHolder": "在这里输入你的信息", - "lobbyChatMessageTo": "大厅聊天消息发送至{{recipient}}", + "lobbyChatMessageTo": "等候室聊天消息发送至{{recipient}}", "message": "信息", "messageAccessibleTitle": "{{user}}:", "messageAccessibleTitleMe": "我:", @@ -116,19 +122,28 @@ "newMessages": "新信息", "nickname": { "popover": "选择一个昵称", - "title": "输入一个昵称用于聊天", - "titleWithPolls": "输入一个昵称用于聊天和投票" + "title": "输入昵称(用于聊天)", + "titleWithCC": "输入昵称(用于聊天和字幕)", + "titleWithPolls": "输入昵称(用于聊天和投票)", + "titleWithPollsAndCC": "输入昵称(用于聊天、投票和字幕)", + "titleWithPollsAndCCAndFileSharing": "输入昵称(用于聊天、投票、字幕和文件共享)" }, "noMessagesMessage": "会议中还没有消息,在这里开始谈话吧!", "privateNotice": "与{{recipient}}的私聊", "sendButton": "发送", "smileysPanel": "表情符号面板", + "systemDisplayName": "系統", "tabs": { "chat": "聊天", + "closedCaptions": "字幕", + "fileSharing": "文件共享", "polls": "投票" }, "title": "聊天", - "titleWithPolls": "聊天和投票", + "titleWithCC": "字幕", + "titleWithFeatures": "聊天和", + "titleWithFileSharing": "文件", + "titleWithPolls": "投票", "you": "你" }, "chromeExtensionBanner": { @@ -138,6 +153,10 @@ "dontShowAgain": "不要再问我了", "installExtensionText": "安装用于Google日历和Office 365集成的扩展插件" }, + "closedCaptionsTab": { + "emptyState": "字幕将在主持人开启后显示", + "startClosedCaptionsButton": "开启字幕" + }, "connectingOverlay": { "joiningRoom": "连接会议中……" }, @@ -206,7 +225,7 @@ "descriptionNew": "没反应?我们已经尝试在{{app}}的电脑应用程序中加入会议。

你可以重试,或在网页端中启动。", "descriptionWithoutWeb": "没反应?我们已经尝试在{{app}}的电脑应用程序中加入会议。", "downloadApp": "下载APP", - "downloadMobileApp": "从App Store下载", + "downloadMobileApp": "前往App Store下载", "ifDoNotHaveApp": "如果你还没有这个APP:", "ifHaveApp": "如果你已经拥有该APP:", "joinInApp": "使用APP加入此会议", @@ -214,7 +233,9 @@ "joinInBrowser": "在浏览器中加入", "launchMeetingLabel": "你希望如何加入此会议?", "launchWebButton": "在网页中启动", - "noMobileApp": "你还没安装APP?", + "noDesktopApp": "还没有安装桌面客户端?", + "noMobileApp": "还没有安装手机App?", + "or": "或", "termsAndConditions": "继续操作即表示你同意我们的条款和条件。", "title": "正在{{app}}中加入会议……", "titleNew": "正在启动你的会议……", @@ -250,12 +271,16 @@ "dialog": { "Back": "返回", "Cancel": "取消", - "IamHost": "我是主持人", + "IamHost": "登录主持", "Ok": "确定", "Remove": "移除", "Share": "分享", "Submit": "提交", - "WaitForHostMsg": "会议尚未开始。如果你是主持人,请进行身份验证。否则,请等待主持人加入。", + "Understand": "我已知晓,暂时保持静音", + "UnderstandAndUnmute": "我已知晓,请为我解除静音", + "WaitForHostMsg": "会议尚未开始,主持人还未入会。如需成为主持人请先登录,或耐心等待会议开始。", + "WaitForHostNoAuthMsg": "会议尚未开始,暂无主持人入会,请耐心等待", + "WaitingForHostButton": "等待主持人", "WaitingForHostTitle": "正在等待主持人加入……", "Yes": "是", "accessibilityLabel": { @@ -269,6 +294,8 @@ "addMeetingNote": "添加本次会议的备注", "addOptionalNote": "添加备注(可选):", "allow": "允许", + "allowToggleCameraDialog": "你是否允许{{initiatorName}}切换你的摄像头?", + "allowToggleCameraTitle": "允许切换摄像头?", "alreadySharedVideoMsg": "其他参会者正在分享视频,本次会议仅支持同时分享一个视频。", "alreadySharedVideoTitle": "同一时间只允许一个视频分享", "applicationWindow": "应用程序窗口", @@ -287,6 +314,7 @@ "conferenceReloadMsg": "我们正在努力修复此问题,将在{{seconds}}秒后重新连接……", "conferenceReloadTitle": "糟了,好像有什么东西出错了。", "confirm": "确认", + "confirmBack": "返回", "confirmNo": "否", "confirmYes": "是", "connectError": "发生错误,无法连接至会议!", @@ -295,19 +323,22 @@ "contactSupport": "联系支持", "copied": "已复制", "copy": "复制", + "demoteParticipantDialog": "确定将该成员调整为观众吗?", + "demoteParticipantTitle": "调整为观众", "dismiss": "忽略", "displayNameRequired": "嗨!你叫什么名字?", "done": "完成", "e2eeDescription": "请注意,端到端加密目前处于实验阶段,开启端到端加密将禁用部分服务器端提供的服务,例如:通过电话加入会议。另外,通过网页版加入会议还需要使用支持Insertable Stream的浏览器。", "e2eeDisabledDueToMaxModeDescription": "由于会议中的人数过多,无法开启端到端加密。", "e2eeLabel": "开启端到端加密", - "e2eeWarning": "警告:本次会议中并不是所有的参会者都支持端到端加密。如果启用它,他们将无法看到或听到你。", + "e2eeWarning": "警告:本次会议中并不是所有的参会者都支持端到端加密。如果开启它,他们将无法看到或听到你。", "e2eeWillDisableDueToMaxModeDescription": "警告:如果有更多人加入会议,端到端加密将自动禁用。", "embedMeeting": "嵌入会议", - "enterDisplayName": "请在此输入你的名字", + "enterDisplayName": "请输入你的姓名", "error": "错误", + "errorRoomCreationRestriction": "加入过于频繁,请稍后再试。", "gracefulShutdown": "我们的服务目前正在维护中,请稍后再试。", - "grantModeratorDialog": "你确定要授予{{participantName}}主持人权限吗?", + "grantModeratorDialog": "确定将{{participantName}}设为主持人吗?", "grantModeratorTitle": "授予主持人权限", "hide": "隐藏", "hideShareAudioHelper": "不要再显示", @@ -319,9 +350,11 @@ "kickParticipantButton": "移除", "kickParticipantDialog": "你确定你要移除这位参会者吗?", "kickParticipantTitle": "移除这位参会者?", + "kickSystemTitle": "你已被移出会议", "kickTitle": "{{participantDisplayName}}将你从会议中移除", + "learnMore": "了解详情", "linkMeeting": "关联会议", - "linkMeetingTitle": "将会议链接到Salesforce", + "linkMeetingTitle": "议关联到Salesforce", "liveStreaming": "直播中", "liveStreamingDisabledBecauseOfActiveRecordingTooltip": "正在录制中,无法开启", "localUserControls": "本地用户控制", @@ -377,6 +410,10 @@ "recentlyUsedObjects": "你最近使用的对象", "recording": "录制中", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "直播时无法使用", + "recordingInProgressDescription": "本会议正由AI录制并分析{{learnMore}},你已被静音。如需发言,视为同意录制。", + "recordingInProgressDescriptionFirstHalf": "本会议正由AI录制并分析", + "recordingInProgressDescriptionSecondHalf": ",你已被静音。如需发言,视为同意录制。", + "recordingInProgressTitle": "录制中", "rejoinNow": "马上重新加入", "remoteControlAllowedMessage": "{{user}}接受了你的远程控制请求!", "remoteControlDeniedMessage": "{{user}}拒绝了你的远程控制请求!", @@ -410,8 +447,10 @@ "sendPrivateMessageTitle": "私信回复?", "serviceUnavailable": "服务不可用", "sessTerminated": "通话已结束", + "sessTerminatedReason": "会议已经结束", "sessionRestarted": "由于连接问题,呼叫重新启动。", "shareAudio": "继续", + "shareAudioAltText": "如需分享内容,请切换到“浏览器标签页”,勾选“分享音频”并点击“分享”按钮", "shareAudioTitle": "如何分享音频", "shareAudioWarningD1": "你需要在分享你的音频之前停止共享屏幕。", "shareAudioWarningD2": "你需要重新启动你的共享屏幕并勾选“共享音频”。", @@ -422,7 +461,10 @@ "shareScreenWarningD2": "你需要停止音频共享后,重新启动你的共享屏幕并勾选“共享音频”。", "shareScreenWarningH1": "如果你只想共享屏幕:", "shareScreenWarningTitle": "在共享你的屏幕之前,你需要停止共享音频", + "shareVideoConfirmPlay": "即将打开外部网站,是否继续?", + "shareVideoConfirmPlayTitle": "需先停止音频共享才能分享屏幕", "shareVideoLinkError": "请提供正确的视频链接。", + "shareVideoLinkStopped": "{{name}}向你分享了一个视频", "shareVideoTitle": "分享视频", "shareYourScreen": "共享你的屏幕", "shareYourScreenDisabled": "共享屏幕已禁用。", @@ -473,6 +515,10 @@ "viewUpgradeOptions": "查看升级选项", "viewUpgradeOptionsContent": "要获取无限制的高级功能,如录制、转录、RTMP 流等,请升级你的计划。", "viewUpgradeOptionsTitle": "你发现了高级版功能!", + "whiteboardLimitContent": "同时在线白板人数已达上限,暂时无法继续使用", + "whiteboardLimitReference": "详情请访问", + "whiteboardLimitReferenceUrl": "我们的网站", + "whiteboardLimitTitle": "白板人数受限", "yourEntireScreen": "你的整个屏幕" }, "documentSharing": { @@ -497,6 +543,19 @@ "veryBad": "非常差", "veryGood": "非常好" }, + "fileSharing": { + "downloadFailedDescription": "请稍后重试", + "downloadFailedTitle": "下载失败", + "downloadFile": "下载", + "dragAndDrop": "拖拽文件到此处上传", + "fileAlreadyUploaded": "文件已上传至本次会议", + "fileTooLargeDescription": "请确保文件不超过 {{ maxFileSize }}", + "fileTooLargeTitle": "文件太大", + "removeFile": "移除", + "uploadFailedDescription": "请稍后重试", + "uploadFailedTitle": "上传失败", + "uploadFile": "文件共享" + }, "filmstrip": { "accessibilityLabel": { "heading": "视频缩略图" @@ -544,13 +603,16 @@ "noNumbers": "无呼入号码。", "noPassword": "无", "noRoom": "没有指定要呼入的会议室。", + "noWhiteboard": "无法加载白板", "numbers": "拨入号码", "password": "$t(lockRoomPasswordUppercase):", "reachedLimit": "你已达到套餐限制。", "sip": "SIP地址", + "sipAudioOnly": "仅限SIP音频地址", "title": "分享", "tooltip": "分享此会议的链接和拨入信息", - "upgradeOptions": "请查看升级选项于" + "upgradeOptions": "请查看升级选项于", + "whiteboardError": "加载白板出错,请稍后重试" }, "inlineDialogFailure": { "msg": "我们似乎出了点小问题。", @@ -614,6 +676,7 @@ "on": "直播已开始", "onBy": "{{name}}已开始直播", "pending": "直播启动中……", + "policyError": "你尝试开始直播的速度太快,请稍后再试!", "serviceName": "直播服务", "sessionAlreadyActive": "本次会议已经在录制或直播", "signIn": "使用 Google 账号登录", @@ -629,13 +692,13 @@ "lobby": { "backToKnockModeButton": "请求加入", "chat": "聊天", - "dialogTitle": "大厅模式", - "disableDialogContent": "大厅模式已开启,此功能确保未经授权的人士不能加入你的会议,确定要关闭吗?", + "dialogTitle": "等候室模式", + "disableDialogContent": "等候室模式已开启,此功能确保未经授权的人士不能加入你的会议,确定要关闭吗?", "disableDialogSubmit": "关闭", "emailField": "请输入你的邮箱", "enableDialogPasswordField": "设置密码(可选)", "enableDialogSubmit": "开启", - "enableDialogText": "在大厅模式下,参会者只有被主持人同意后才能加入,进而保护你的会议。", + "enableDialogText": "在等候室模式下,参会者只有被主持人同意后才能加入,进而保护你的会议。", "enterPasswordButton": "输入会议密码", "enterPasswordTitle": "输入密码加入会议", "errorMissingPassword": "加入请求被拒绝。", @@ -650,18 +713,18 @@ "knockButton": "请求加入", "knockTitle": "有人想要加入会议", "knockingParticipantList": "请求加入的参会者名单", - "lobbyChatStartedNotification": "{{moderator}}与{{attendee}}开始在大厅聊天", - "lobbyChatStartedTitle": "{{moderator}}已开始与你进行大厅聊天", - "nameField": "输入你的名字", + "lobbyChatStartedNotification": "{{moderator}}与{{attendee}}开始在等候室聊天", + "lobbyChatStartedTitle": "{{moderator}}已开始与你进行等候室聊天", + "lobbyClosed": "等候室已关闭", + "nameField": "输入你的姓名", "notificationLobbyAccessDenied": "{{originParticipantName}}已拒绝{{targetParticipantName}}的加入请求", "notificationLobbyAccessGranted": "{{originParticipantName}}已通过{{targetParticipantName}}的加入请求", - "notificationLobbyDisabled": "{{originParticipantName}}关闭了大厅模式", - "notificationLobbyEnabled": "{{originParticipantName}}开启了大厅模式", - "notificationTitle": "大厅", - "passwordField": "输入会议密码", + "notificationLobbyDisabled": "{{originParticipantName}}关闭了等候室模式", + "notificationLobbyEnabled": "{{originParticipantName}}开启了等候室模式", + "notificationTitle": "等候室", "passwordJoinButton": "加入", - "title": "大厅", - "toggleLabel": "开启大厅模式" + "title": "等候室", + "toggleLabel": "开启等候室模式" }, "localRecording": { "clientState": { @@ -704,7 +767,9 @@ "me": "我", "notify": { "OldElectronAPPTitle": "安全漏洞!", - "allowAction": "允许", + "allowAudio": "允许开启麦克风", + "allowBoth": "允许音视频", + "allowVideo": "允许开启摄像头", "allowedUnmute": "你可以解除麦克风静音、启动摄像头或共享屏幕。", "audioUnmuteBlockedDescription": "由于系统限制,麦克风解除静音操作被暂时阻止。", "audioUnmuteBlockedTitle": "麦克风解除静音被阻止!", @@ -712,9 +777,14 @@ "connectedOneMember": "{{name}}加入了会议", "connectedThreePlusMembers": "{{name}}和其他人加入了会议", "connectedTwoMembers": "{{first}}和{{second}}加入了会议", - "dataChannelClosed": "视频质量受损", - "dataChannelClosedDescription": "桥接通道已断开连接,因此视频质量限制为最低设置。", - "disabledIframe": "嵌入仅用于演示目的,因此此通话将在 {{timeout}} 分钟后断开连接。", + "connectionFailed": "连接失败,请稍后再试", + "dataChannelClosed": "视频质量可能受影响", + "dataChannelClosedDescription": "桥接通道已断开,视频质量可能会被限制为最低设置", + "dataChannelClosedDescriptionWithAudio": "桥接通道已断开,音视频可能会出现卡顿或中断", + "dataChannelClosedWithAudio": "音视频质量可能受影响", + "disabledIframe": "嵌入仅用于演示,本次通话将在{{timeout}}分钟后自动断开", + "disabledIframeSecondaryNative": "嵌入{{domain}}仅用于演示,本次通话将在{{timeout}}分钟后自动断开", + "disabledIframeSecondaryWeb": "嵌入{{domain}}仅用于演示,本次通话将在{{timeout}}分钟后自动断开。如需在正式环境嵌入,请使用Jitsi服务!", "disconnected": "已断开连接", "displayNotifications": "显示通知", "dontRemindMe": "不要提醒我", @@ -722,7 +792,10 @@ "focusFail": "{{component}}不可用 - {{ms}}秒后重试", "gifsMenu": "GIPHY", "groupTitle": "通知", - "hostAskedUnmute": "主持人希望你发言", + "hostAskedUnmute": "主持人请你发言", + "invalidTenant": "无效的组织空间", + "invalidTenantHyphenDescription": "你所使用的组织空间名无效(不能以‘-’开头或结尾)", + "invalidTenantLengthDescription": "你所使用的组织空间名过长", "invitedOneMember": "已邀请{{name}}", "invitedThreePlusMembers": "已邀请{{name}}以及另外{{count}}人", "invitedTwoMembers": "已邀请{{first}}和{{second}}", @@ -759,7 +832,8 @@ "newDeviceAction": "使用", "newDeviceAudioTitle": "检测到新的音频设备", "newDeviceCameraTitle": "检测到新的摄像头", - "noiseSuppressionDesktopAudioDescription": "在共享桌面音频时无法启用降噪功能,请禁用并重试。", + "nextToSpeak": "下一个轮到你发言", + "noiseSuppressionDesktopAudioDescription": "在共享桌面音频时无法开启降噪功能,请禁用并重试。", "noiseSuppressionFailedTitle": "无法启动降噪功能", "noiseSuppressionStereoDescription": "暂不支持立体声音频降噪。", "oldElectronClientDescription1": "你似乎正在使用存在已知安全漏洞的旧版Jitsi Meet客户端,请确保您更新到我们的", @@ -783,45 +857,62 @@ "startSilentDescription": "重新加入会议以开启音频", "startSilentTitle": "你加入时没有开启音频!", "suboptimalBrowserWarning": "我们担心你本次会议体验欠佳,我们正在寻找改进的方法。与此同时,请尝试使用完全支持的浏览器。", - "suboptimalExperienceTitle": "浏览器警告", + "suboptimalExperienceTitle": "浏览器提示", + "suggestRecordingAction": "开始录制", + "suggestRecordingDescription": "是否需要录制本次会议?", + "suggestRecordingTitle": "录制会议", "unmute": "解除静音", - "videoMutedRemotelyDescription": "你随时可以重新打开。", + "unmuteVideo": "开启摄像头", + "videoMutedRemotelyDescription": "你可随时重新开启视频", "videoMutedRemotelyTitle": "{{participantDisplayName}}已关闭你的视频", - "videoUnmuteBlockedDescription": "由于系统限制,开启摄像头和共享屏幕操作已被暂时阻止。", - "videoUnmuteBlockedTitle": "开启摄像头和共享屏幕被阻止!", - "viewLobby": "查看大厅", - "waitingParticipants": "{{waitingParticipants}}人" + "videoUnmuteBlockedDescription": "由于系统限制,暂时无法开启摄像头或共享桌面", + "videoUnmuteBlockedTitle": "摄像头和桌面共享被禁用!", + "viewLobby": "查看等候室", + "viewParticipants": "查看参会者", + "viewVisitors": "查看观众", + "waitingParticipants": "{{waitingParticipants}}人", + "waitingVisitors": "排队等候的观众:{{waitingVisitors}}人", + "waitingVisitorsTitle": "会议尚未开始!", + "whiteboardLimitDescription": "因用户数量已接近上限,白板即将关闭,请及时保存内容。", + "whiteboardLimitTitle": "白板使用限制" }, "participantsPane": { "actions": { - "admit": "同意", - "admitAll": "同意全部", + "admit": "同意加入", + "admitAll": "全部同意加入", "allow": "允许参会者:", - "allowVideo": "允许视频", - "askUnmute": "请求解除静音", - "audioModeration": "自我解除静音", + "allowVideo": "允许开启摄像头", + "askUnmute": "请求取消静音", + "audioModeration": "自行解除静音", "blockEveryoneMicCamera": "禁用所有人的麦克风和摄像头", + "breakoutRooms": "分组讨论室", + "goLive": "开始直播", "invite": "邀请其他人", + "lowerAllHands": "取消全部举手", + "lowerHand": "取消举手", "moreModerationActions": "更多主持人选项", "moreModerationControls": "更多主持人控制", "moreParticipantOptions": "更多参会者选项", "mute": "静音", "muteAll": "全体静音", - "muteEveryoneElse": "全体静音", + "muteEveryoneElse": "静音其他人", "reject": "拒绝", - "stopEveryonesVideo": "禁用所有人视频", - "stopVideo": "禁用视频", - "unblockEveryoneMicCamera": "允许所有人的麦克风和摄像头", - "videoModeration": "开启视频" + "stopEveryonesVideo": "关闭所有人摄像头", + "stopVideo": "关闭摄像头", + "unblockEveryoneMicCamera": "允许所有人开启麦克风和摄像头", + "videoModeration": "允许开启视频" }, "close": "关闭", "headings": { - "lobby": "大厅(({{count}}人)", + "lobby": "等候室(({{count}}人)", "participantsList": "会议参会者({{count}}人)", - "visitors": "访客(({{count}}人)", - "waitingLobby": "在大厅等待({{count}}人)" + "visitorInQueue": "(排队中:{{count}}人)", + "visitorRequests": "(请求加入:{{count}}人)", + "visitors": "观众(({{count}}人)", + "waitingLobby": "在等候室等待({{count}}人)" }, "search": "搜索参会者", + "searchDescription": "输入关键词快速筛选参会者", "title": "参会者" }, "passwordDigitsOnly": "最多{{number}}位数字", @@ -830,20 +921,24 @@ "pinnedParticipant": "参会者已固定", "polls": { "answer": { + "edit": "编辑", + "send": "发送", "skip": "跳过", "submit": "提交" }, - "by": "由{{ name }}", + "by": "由{{ name }}发起", + "closeButton": "结束投票", "create": { "addOption": "添加选项", "answerPlaceholder": "选项{{index}}", "cancel": "取消", - "create": "创建投票", + "create": "新建投票", "pollOption": "投票选项{{index}}", "pollQuestion": "投票内容", - "questionPlaceholder": "提出问题", - "removeOption": "移除选项", - "send": "发送" + "questionPlaceholder": "请输入你的问题", + "removeOption": "删除选项", + "save": "保存", + "send": "发布" }, "errors": { "notUniqueOption": "选项必须是唯一的" @@ -865,62 +960,65 @@ "audioAndVideoError": "音频和视频错误:", "audioDeviceProblem": "你的音频设备存在问题", "audioOnlyError": "音频错误:", - "audioTrackError": "无法创建音轨。", - "callMe": "给我打电话", - "callMeAtNumber": "打电话给我,号码是:", - "calling": "正在拨号", + "audioTrackError": "无无法创建音频轨道", + "callMe": "呼叫我", + "callMeAtNumber": "请拨打我的号码:", + "calling": "正在呼叫", "configuringDevices": "正在配置设备……", "connectedWithAudioQ": "你已连接音频?", "connection": { + "failed": "连接测试失败!", "good": "你的网络连接看起来很好!", "nonOptimal": "你的网络连接不太理想", - "poor": "你的网络连接不太理想" + "poor": "你的网络连接较差", + "running": "正在测试连接……" }, "connectionDetails": { - "audioClipping": "我们预计你的音频会有卡顿现象。", - "audioHighQuality": "我们预计你的音频质量会很好。", - "audioLowNoVideo": "我们预计你的音频质量会很差且没有视频画面。", - "goodQuality": "太棒了!你的媒体质量会很好。", - "noMediaConnectivity": "我们无法建立连接,这通常是防火墙或NAT的问题。", - "noVideo": "我们预计你的视频画质会很糟糕。", - "undetectable": "如果仍无法在浏览器中进行通话,我们建议你检查扬声器、麦克风和摄像头的设置,确定浏览器是否有使用麦克风和摄像头的权限,并将浏览器升级到最新版本。如果仍未解决问题,请与开发人员联系。", - "veryPoorConnection": "我们预计你的通话质量会非常糟糕。", - "videoFreezing": "我们预计你的视频会冻结、变黑并且呈像素化状态。", - "videoHighQuality": "我们预计你的视频质量会很好。", - "videoLowQuality": "我们预计你的视频帧率和分辨率会很低。", - "videoTearing": "我们预计你的视频会呈现像素化或有视觉伪影。" + "audioClipping": "预计你的音频可能会断断续续", + "audioHighQuality": "你的音频质量预计会很清晰", + "audioLowNoVideo": "预计你的音频质量较差且无法显示视频画面", + "goodQuality": "网络和设备状态都很好,体验会很流畅", + "noMediaConnectivity": "无法建立音视频连接,通常是防火墙或NAT设置导致", + "noVideo": "预计你的视频画面可能会很糟糕", + "testFailed": "连接测试遇到异常,但不一定会影响实际体验", + "undetectable": "如果你仍无法正常通话,请检查扬声器、麦克风、摄像头设置,并确保浏览器有相关权限且为最新版本。如仍有问题,建议联系技术支持。", + "veryPoorConnection": "你的通话质量可能会非常差", + "videoFreezing": "预计你的视频会出现卡顿、黑屏或马赛克", + "videoHighQuality": "你的视频质量预计会很清晰", + "videoLowQuality": "预计你的视频帧率和分辨率会很低或画面不流畅", + "videoTearing": "预计你的视频画面会有马赛克或其它异常现象" }, "copyAndShare": "复制并分享会议链接", - "dialInMeeting": "拨打会议电话", - "dialInPin": "拨打会议电话并输入PIN码:", + "dialInMeeting": "拨电话接入会议", + "dialInPin": "电话接入会议并输入PIN码:", "dialing": "正在拨号", - "doNotShow": "不再显示", + "doNotShow": "不再显示此页面", "errorDialOut": "无法拨出", "errorDialOutDisconnected": "无法拨出,已断开连接", - "errorDialOutFailed": "无法拨出,呼叫失败", - "errorDialOutStatus": "获取拨出状态时出错", - "errorMissingName": "请输入你的名字以加入会议", - "errorNoPermissions": "你需要允许访问麦克风和摄像头", - "errorStatusCode": "拨出错误,状态代码:{{status}}", - "errorValidation": "号码验证失败", - "iWantToDialIn": "我想拨打电话加入", - "initiated": "通话已发起", + "errorDialOutFailed": "无法拨出,通话失败", + "errorDialOutStatus": "获取拨出状态出错", + "errorMissingName": "请输入姓名后再加入会议", + "errorNoPermissions": "请开启麦克风和摄像头权限", + "errorStatusCode": "拨号失败,状态码:{{status}}", + "errorValidation": "号码校验失败", + "iWantToDialIn": "我想通过电话加入", + "initiated": "呼叫已发起", "joinAudioByPhone": "使用电话音频加入", "joinMeeting": "加入会议", "joinMeetingInLowBandwidthMode": "以省流模式加入", "joinWithoutAudio": "无音频加入", - "keyboardShortcuts": "开启键盘快捷键", + "keyboardShortcuts": "开启快捷键", "linkCopied": "链接已复制到剪贴板", - "lookGood": "你的麦克风工作正常", + "lookGood": "设备一切正常", "or": "或", - "premeeting": "会前", + "premeeting": "会前设置", "proceedAnyway": "仍然继续", - "screenSharingError": "共享屏幕错误:", - "showScreen": "开启会前屏幕", - "startWithPhone": "以电话音频开始", - "unsafeRoomConsent": "我了解风险,我想加入会议", - "videoOnlyError": "视频错误:", - "videoTrackError": "无法创建视频轨道。", + "recordingWarning": "其他参会者可能正在录制本次会议", + "screenSharingError": "屏幕共享出错:", + "startWithPhone": "用电话音频开始", + "unsafeRoomConsent": "我了解风险,仍然加入会议", + "videoOnlyError": "视频出错:", + "videoTrackError": "无法创建视频轨道", "viewAllNumbers": "查看所有号码" }, "presenceStatus": { @@ -981,14 +1079,13 @@ "limitNotificationDescriptionNative": "由于高需求,您的录制将限制在{{limit}}分钟内。若要无限制录制,请尝试<3>{{app}}。", "limitNotificationDescriptionWeb": "由于高需求,您的录制将限制在{{limit}}分钟内。若要无限制录制,请尝试{{app}}。", "linkGenerated": "我们已生成录制链接。", - "live": "直播中", "localRecordingNoNotificationWarning": "系统不会主动通知参会者录制已开启,主持人需另行提醒。", "localRecordingNoVideo": "视频未被录制", "localRecordingStartWarning": "请确保在退出会议之前停止录制,以便保存录制内容。", "localRecordingStartWarningTitle": "停止录制以保存内容", "localRecordingVideoStop": "停止视频也会停止本地录制,你确定要继续吗?", "localRecordingVideoWarning": "要录制视频,你必须在开始录制时保持视频开启", - "localRecordingWarning": "请确保你选择当前的标签页,以便录制正确的视频和音频。录制目前限制在1GB,大约100分钟。", + "localRecordingWarning": "请确保你选择当前的标签页,以便录制正确的视频和音频。", "loggedIn": "以{{userName}}登录", "noMicPermission": "无法创建麦克风轨道,请允许使用麦克风。", "noStreams": "未检测到音频或视频。", @@ -998,13 +1095,16 @@ "onBy": "{{name}}开启了录制", "onlyRecordSelf": "仅录制我的音频和视频", "pending": "正在准备录制会议……", - "rec": "录制中", + "policyError": "", + "recordAudioAndVideo": "", + "recordTranscription": "", "saveLocalRecording": "本地保存录制文件(测试版)", "serviceDescription": "录制将由录制服务保存", "serviceDescriptionCloud": "云录制", "serviceDescriptionCloudInfo": "录制的会议将在录制后的24小时内自动清除。", "serviceName": "录制服务", "sessionAlreadyActive": "此会议已经在录制或直播中", + "showAdvancedOptions": "高级选项", "signIn": "登录", "signOut": "注销", "surfaceError": "请选择当前选项卡。", @@ -1033,22 +1133,24 @@ "audio": "音频", "buttonLabel": "设置", "calendar": { - "about": "{{appName}}日历集成用于安全访问你的日历,以读取即将到来的活动。", + "about": "{{appName}}日历集成可安全访问你的日历,读取即将开始的会议。", "disconnect": "断开连接", "microsoftSignIn": "使用 Microsoft 登录", - "signedIn": "目前正在读取{{email}}的日历事件,点击下面的断开连接可以停止读取日历事件。", + "signedIn": "正在读取{{email}}的日历事件,点击下方“断开连接”可停止同步日历。", "title": "日历" }, + "chatWithPermissions": "聊天需要相关权限", "desktopShareFramerate": "共享屏幕帧率", "desktopShareHighFpsWarning": "高帧率的共享屏幕的可能会影响你的网速,你需要重新启动共享屏幕以使新设置生效。", "desktopShareWarning": "你需要重新启动共享屏幕以使新设置生效。", "devices": "设备", - "followMe": "所有人跟随", - "framesPerSecond": "帧", - "incomingMessage": "新消息", + "followMe": "全员视角跟随我", + "followMeRecorder": "录制画面跟随我", + "framesPerSecond": "帧率(FPS)", + "incomingMessage": "新消息提醒", "language": "语言", - "loggedIn": "以{{name}}登录", - "maxStageParticipants": "可以固定的最大参会者人数(实验性功能)", + "loggedIn": "已登录:{{name}}", + "maxStageParticipants": "可以固定的最大参会者人数", "microphones": "麦克风", "moderator": "主持人", "moderatorOptions": "主持人选项", @@ -1057,52 +1159,55 @@ "noDevice": "无", "notifications": "通知", "participantJoined": "参会者已加入", - "participantKnocking": "参会者已进入大厅", + "participantKnocking": "参会者已进入等候室", "participantLeft": "参会者已离开", "playSounds": "播放提示音", - "reactions": "会议反应", - "sameAsSystem": "与系统相同({{label}})", - "selectAudioOutput": "音频输出", + "reactions": "会议互动表情", + "sameAsSystem": "与系统一致({{label}})", + "selectAudioOutput": "音频输出设备", "selectCamera": "摄像头", "selectMic": "麦克风", "selfView": "本人视图", "shortcuts": "快捷键", + "showSubtitlesOnStage": "主画面显示字幕", "speakers": "扬声器", - "startAudioMuted": "所有人开始时静音", - "startReactionsMuted": "关闭所有人反应提示音", - "startVideoMuted": "所有人开始时隐藏视频画面", - "talkWhileMuted": "通话时静音", + "startAudioMuted": "所有人加入时静音", + "startReactionsMuted": "关闭所有人互动音效", + "startVideoMuted": "所有人加入时隐藏视频", + "talkWhileMuted": "静音时说话提醒", "title": "设置", "video": "视频" }, "settingsView": { - "advanced": "高级", + "advanced": "高级设置", "alertCancel": "取消", "alertOk": "确认", "alertTitle": "警告", - "alertURLText": "输入的服务器网址无效", - "buildInfoSection": "生成信息", - "conferenceSection": "会议", - "disableCallIntegration": "禁用本地电话", - "disableCrashReporting": "禁用崩溃报告", - "disableCrashReportingWarning": "你确定要禁用崩溃报告吗?重启应用后生效。", - "disableP2P": "禁用点对点模式", + "alertURLText": "输入的服务器地址无效", + "apply": "应用", + "buildInfoSection": "构建信息", + "conferenceSection": "会议设置", + "disableCallIntegration": "禁用系统通话集成", + "disableCrashReporting": "关闭崩溃报告", + "disableCrashReportingWarning": "确定要关闭崩溃报告吗?重启应用后设置才会生效", + "disableP2P": "关闭点对点模式", "displayName": "显示名称", "displayNamePlaceholderText": "例如:张三", "email": "邮箱", "emailPlaceholderText": "email@example.com", + "gavatarMessage": "如果你的邮箱已绑定Gravatar头像,我们将自动为你显示头像", "goTo": "前往", "header": "设置", "help": "帮助", - "links": "链接", + "links": "相关链接", "privacy": "隐私", - "profileSection": "简介", + "profileSection": "个人信息", "sdkVersion": "SDK版本", - "serverURL": "服务器网址", + "serverURL": "服务器地址", "showAdvanced": "显示高级设置", - "startCarModeInLowBandwidthMode": "同时开启驾驶模式和省流模式", - "startWithAudioMuted": "关闭音频并启动", - "startWithVideoMuted": "关闭视频并启动", + "startCarModeInLowBandwidthMode": "省流模式下开启驾驶模式", + "startWithAudioMuted": "进入会议时音频静音", + "startWithVideoMuted": "进入会议时关闭视频", "terms": "条款", "version": "APP版本" }, @@ -1113,20 +1218,22 @@ "speaker": "扬声器", "speakerStats": { "angry": "生气", - "disgusted": "呕吐", + "disgusted": "嫌弃", "displayEmotions": "显示表情", "fearful": "害怕", - "happy": "笑脸", + "happy": "开心", "hours": "{{count}}时", + "labelTooltip": "参会者人数:{{count}}", "minutes": "{{count}}分", "name": "名字", - "neutral": "中立", - "sad": "悲伤", + "neutral": "中性", + "sad": "难过", "search": "搜索", + "searchDescription": "输入关键词筛选参会者", "searchHint": "搜索参会者", "seconds": "{{count}}秒", - "speakerStats": "发言统计", - "speakerTime": "发言时间", + "speakerStats": "参会者统计", + "speakerTime": "发言时长", "surprised": "惊讶" }, "startupoverlay": { @@ -1144,36 +1251,37 @@ }, "toggleTopPanelLabel": "切换顶部面板", "toolbar": { - "Settings": "设置", + "Settings": "打开设置", "accessibilityLabel": { "Settings": "切换设置", "audioOnly": "切换仅音频模式", "audioRoute": "选择音频设备", "boo": "嘘声", - "breakoutRoom": "加入/离开分组讨论室", - "callQuality": "管理视频质量", + "breakoutRooms": "分组讨论室", + "callQuality": "调整视频质量", "carmode": "驾驶模式", "cc": "切换字幕", "chat": "打开/关闭聊天", "clap": "鼓掌", - "closeChat": "关闭聊天", + "closeChat": "关闭聊天窗口", "closeMoreActions": "关闭更多操作菜单", "closeParticipantsPane": "关闭参会者面板", - "collapse": "折叠", + "closedCaptions": "隐藏字幕", + "collapse": "收起", "document": "切换共享文档", "documentClose": "关闭共享文档", "documentOpen": "打开共享文档", "download": "下载我们的APP", "embedMeeting": "嵌入会议", - "endConference": "结束会议", + "endConference": "结束全体会议", "enterFullScreen": "进入全屏模式", - "enterTileView": "进入平铺视图", + "enterTileView": "进入画廊视图", "exitFullScreen": "退出全屏模式", - "exitTileView": "退出平铺视图", + "exitTileView": "退出画廊视图", "expand": "展开", "feedback": "提供反馈", "fullScreen": "切换全屏模式", - "giphy": "切换GIPHY菜单", + "giphy": "切换表情动图菜单", "grantModerator": "授予主持人权限", "hangup": "离开会议", "heading": "工具栏", @@ -1183,30 +1291,32 @@ "kick": "移除参会者", "laugh": "大笑", "leaveConference": "离开会议", - "like": "竖起大拇指", - "linkToSalesforce": "链接到 Salesforce", - "lobbyButton": "开启/关闭大厅模式", - "localRecording": "切换本地录制控件", - "lockRoom": "开启/关闭会议密码", - "lowerHand": "放下手", + "like": "点赞", + "linkToSalesforce": "关联到Salesforce", + "lobbyButton": "开启/关闭等候室", + "localRecording": "切换本地录制", + "lockRoom": "设置/取消会议密码", + "love": "爱心", + "lowerHand": "取消举手", "moreActions": "更多操作", "moreActionsMenu": "更多操作菜单", "moreOptions": "显示更多选项", - "mute": "静音", + "mute": "麦克风静音", "muteEveryone": "将所有人静音", - "muteEveryoneElse": "将其他人静音", - "muteEveryoneElsesVideoStream": "停止其他人的视频", - "muteEveryonesVideoStream": "停止全部人的视频", - "muteGUMPending": "连接你的麦克风", - "noiseSuppression": "降噪", - "openChat": "打开聊天", - "participants": "打开参会者面板", + "muteEveryoneElse": "除自己外全部静音", + "muteEveryoneElsesVideoStream": "停止其他人摄像头", + "muteEveryonesVideoStream": "关闭所有人摄像头", + "muteGUMPending": "正在连接麦克风", + "noiseSuppression": "开启降噪(测试版)", + "openChat": "打开聊天窗口", + "participants": "打开参会者面板,参会者(共{{participantsCount}}人)", "pip": "切换画中画模式", - "privateMessage": "发送私人消息", - "profile": "编辑你的个人资料", + "privateMessage": "发送私聊", + "profile": "编辑个人信息", "raiseHand": "举手", - "reactions": "反应", - "reactionsMenu": "反应菜单", + "react": "消息表情", + "reactions": "互动表情", + "reactionsMenu": "互动表情菜单", "recording": "切换录制", "remoteMute": "静音参会者", "remoteVideoMute": "禁用参会者摄像头", @@ -1223,45 +1333,46 @@ "silence": "沉默", "speakerStats": "切换参会者统计", "stopScreenSharing": "停止屏幕共享", - "stopSharedVideo": "停止视频", + "stopSharedVideo": "停止视频共享", "surprised": "惊讶", "tileView": "切换画廊视图", "toggleCamera": "切换摄像头", - "toggleFilmstrip": "切换幻灯片", - "unmute": "取消静音", - "videoblur": "切换视频模糊", + "toggleFilmstrip": "切换缩略图栏", + "unmute": "取消麦克风静音", + "videoblur": "切换虚化背景", "videomute": "关闭摄像头", - "videomuteGUMPending": "连接你的摄像头", - "videounmute": "启动摄像头" + "videomuteGUMPending": "正在连接摄像头", + "videounmute": "打开摄像头" }, - "addPeople": "添加人员到你的通话中", + "addPeople": "添加成员到通话中", "audioOnlyOff": "关闭省流模式", - "audioOnlyOn": "启用省流模式", + "audioOnlyOn": "开启省流模式", "audioRoute": "选择音频设备", "audioSettings": "音频设置", - "authenticate": "认证", + "authenticate": "身份验证", "boo": "嘘声", - "callQuality": "管理视频质量", + "callQuality": "调整视频质量", "chat": "打开/关闭聊天", "clap": "鼓掌", "closeChat": "关闭聊天", - "closeParticipantsPane": "关闭参会者面板", - "closeReactionsMenu": "关闭反应菜单", - "disableNoiseSuppression": "关闭降噪", - "disableReactionSounds": "你可以禁用此会议的反应声音", + "closeParticipantsPane": "关闭参会者列表", + "closeReactionsMenu": "关闭互动表情菜单", + "closedCaptions": "关闭字幕", + "disableNoiseSuppression": "关闭降噪功能(测试版)", + "disableReactionSounds": "你可以禁用此会议的互动音效", "documentClose": "关闭文件共享", "documentOpen": "开启文件共享", "download": "下载我们的APP", "e2ee": "端到端加密", "embedMeeting": "嵌入会议", - "enableNoiseSuppression": "启用降噪", - "endConference": "结束会议", + "enableNoiseSuppression": "开启降噪功能(测试版)", + "endConference": "结束全体会议", "enterFullScreen": "进入全屏模式", "enterTileView": "进入画廊视图", "exitFullScreen": "退出全屏模式", "exitTileView": "退出画廊视图", - "feedback": "提供反馈", - "giphy": "关闭GIPHY菜单", + "feedback": "意见反馈", + "giphy": "表情动画菜单", "hangup": "离开会议", "help": "帮助", "hideWhiteboard": "隐藏白板", @@ -1270,13 +1381,14 @@ "laugh": "大笑", "leaveBreakoutRoom": "离开分组讨论室", "leaveConference": "离开会议", - "like": "竖起大拇指", + "like": "点赞", "linkToSalesforce": "链接到 Salesforce", - "lobbyButtonDisable": "关闭大厅模式", - "lobbyButtonEnable": "开启大厅模式", + "lobbyButtonDisable": "关闭等候室模式", + "lobbyButtonEnable": "开启等候室模式", "login": "登录", "logout": "注销", - "lowerYourHand": "放下手", + "love": "爱心", + "lowerYourHand": "取消举手", "moreActions": "更多操作", "moreOptions": "显示更多选项", "mute": "静音", @@ -1288,24 +1400,25 @@ "noAudioSignalDialInDesc": "你还可以拨打以下号码加入会议:", "noAudioSignalDialInLinkDesc": "拨打电话号码", "noAudioSignalTitle": "你的麦克风没有声音!", - "noiseSuppression": "降噪", - "noisyAudioInputDesc": "听起来你的麦克风在发出噪音,请考虑将其静音或更换设备。", + "noiseSuppression": "降噪(测试版)", + "noisyAudioInputDesc": "检测到你的麦克风有杂音,请考虑静音或更换设备。", "noisyAudioInputTitle": "你的麦克风似乎很嘈杂!", "openChat": "打开聊天", - "openReactionsMenu": "打开反应菜单", + "openReactionsMenu": "打开互动表情菜单", "participants": "参会者", "pip": "进入画中画模式", - "privateMessage": "发送私人消息", + "privateMessage": "发送私聊", "profile": "编辑你的个人资料", "raiseHand": "举手", "raiseYourHand": "举手", - "reactionBoo": "发送嘘声反应", - "reactionClap": "发送鼓掌反应", - "reactionLaugh": "发送大笑反应", - "reactionLike": "发送竖起大拇指反应", - "reactionSilence": "发送沉默反应", - "reactionSurprised": "发送惊讶反应", - "reactions": "反应", + "reactionBoo": "发送嘘声", + "reactionClap": "发送鼓掌", + "reactionHeart": "发送爱心", + "reactionLaugh": "发送大笑", + "reactionLike": "发送点赞", + "reactionSilence": "发送沉默", + "reactionSurprised": "发送惊讶", + "reactions": "互动表情", "security": "安全选项", "selectBackground": "选择背景", "shareRoom": "邀请他人", @@ -1333,32 +1446,24 @@ }, "transcribing": { "ccButtonTooltip": "开启/关闭字幕", - "error": "转录失败,请重试。", "expandedLabel": "转录已开启", - "failedToStart": "开启转录失败", - "labelToolTip": "会议正在转录中", - "off": "转录已停止", - "pending": "准备转录会议中……", + "failed": "转录失败", + "labelTooltip": "本次会议正在进行转录", + "labelTooltipExtra": "会后将提供转录文本", + "openClosedCaptions": "打开字幕", + "original": "原文", "sourceLanguageDesc": "当前会议语言设置为{{sourceLanguage}}
你可以在这里", "sourceLanguageHere": "更改", "start": "开启显示字幕", "stop": "停止显示字幕", "subtitles": "字幕", - "subtitlesOff": "关", - "tr": "转录" + "subtitlesOff": "关闭", + "tr": "转录", + "translateTo": "翻译为" }, "unpinParticipant": "{{participantName}} - 取消固定", "userMedia": { - "androidGrantPermissions": "当你的浏览器要求权限时,请选择允许", - "chromeGrantPermissions": "当你的浏览器要求权限时,请选择允许", - "edgeGrantPermissions": "当你的浏览器要求权限时,请选择允许", - "electronGrantPermissions": "正在尝试访问你的摄像头和麦克风", - "firefoxGrantPermissions": "当你的浏览器要求权限时,请选择分享的窗口或屏幕 ", - "iexplorerGrantPermissions": "当你的浏览器要求权限时,请选择可以", - "nwjsGrantPermissions": "请授予使用你的摄像头和麦克风的权限", - "operaGrantPermissions": "当你的浏览器要求权限时,请选择允许", - "react-nativeGrantPermissions": "当你的浏览器要求权限时,请选择允许", - "safariGrantPermissions": "当你的浏览器要求权限时,请选择允许" + "grantPermissions": "请授予使用你的摄像头和麦克风的权限." }, "videoSIPGW": { "busy": "我们正在释放资源,请稍后再试。", @@ -1394,15 +1499,16 @@ }, "videothumbnail": { "connectionInfo": "连接信息", + "demote": "设为观众", "domute": "静音", - "domuteOthers": "静音所有人", + "domuteOthers": "静音其他人", "domuteVideo": "关闭摄像头", - "domuteVideoOfOthers": "关闭所有人的摄像头", - "flip": "翻转", + "domuteVideoOfOthers": "关闭其他人摄像头", + "flip": "翻转画面", "grantModerator": "授予主持人权限", "hideSelfView": "隐藏本人视图", - "kick": "移除", - "mirrorVideo": "镜像我的视频", + "kick": "移出会议", + "mirrorVideo": "镜像我的画面", "moderator": "主持人", "mute": "参会者已被静音", "muted": "已静音", @@ -1445,12 +1551,23 @@ "webAssemblyWarningDescription": "此浏览器禁用或不支持WebAssembly" }, "visitors": { - "chatIndicator": "(访客)", - "labelTooltip": "访客人数:{{count}}", + "chatIndicator": "(观众)", + "joinMeeting": { + "description": "你目前是本次会议的观众", + "raiseHand": "举手申请发言", + "title": "正在加入会议", + "wishToSpeak": "如需发言,请点击下方举手,等待主持人同意" + }, + "labelTooltip": "观众人数:{{count}}", "notification": { - "description": "要参与,请举手", - "title": "你是会议中的访客" - } + "demoteDescription": "你已被{{actor}}切换为观众身份,如需参与发言请举手申请", + "noMainParticipantsDescription": "暂无参会者开启会议,请稍后再试", + "noMainParticipantsTitle": "会议尚未开始", + "noVisitorLobby": "当前会议已开启等候室,暂无法加入", + "notAllowedPromotion": "需由会议成员同意才能参与讨论", + "title": "你当前为会议观众" + }, + "waitingMessage": "会议开始后将自动加入" }, "volumeSlider": "音量滑块", "welcomepage": { @@ -1508,6 +1625,7 @@ "whiteboard": { "accessibilityLabel": { "heading": "白板" - } + }, + "screenTitle": "白板" } } diff --git a/lang/main-zhTW.json b/lang/main-zh-TW.json similarity index 89% rename from lang/main-zhTW.json rename to lang/main-zh-TW.json index 4d284b494b05..e3f073b54213 100644 --- a/lang/main-zhTW.json +++ b/lang/main-zh-TW.json @@ -22,7 +22,7 @@ "noResults": "沒有符合的搜尋結果", "outlookEmail": "Outlook Email", "phoneNumbers": "電話號碼", - "searching": "搜尋中...", + "searching": "搜尋中…", "shareInvite": "分享會議邀請", "shareLink": "分享會議連結以邀請他人", "shareStream": "複製分享連結", @@ -109,6 +109,7 @@ } }, "chat": { + "disabled": "聊天訊息已停用", "enter": "加入聊天室", "error": "錯誤:您的訊息未被傳送。原因:{{error}}", "fieldPlaceHolder": "在此輸入您的訊息", @@ -122,17 +123,26 @@ "nickname": { "popover": "選擇名稱", "title": "輸入名稱來使用聊天", - "titleWithPolls": "輸入名稱來使用聊天與投票" + "titleWithCC": "輸入名稱以使用聊天與即時字幕", + "titleWithPolls": "輸入名稱來使用聊天與投票", + "titleWithPollsAndCC": "輸入名稱以使用聊天、投票及即時字幕", + "titleWithPollsAndCCAndFileSharing": "輸入名稱以使用聊天、投票、即時字幕及檔案分享" }, "noMessagesMessage": "此會議尚無訊息,在此開始對話聊天!", "privateNotice": "傳送私人訊息至 {{recipient}}", "sendButton": "傳送", "smileysPanel": "Emoji 面板", + "systemDisplayName": "系統", "tabs": { "chat": "聊天", + "closedCaptions": "即時字幕", + "fileSharing": "檔案", "polls": "投票" }, "title": "聊天", + "titleWithCC": "即時字幕", + "titleWithFeatures": "聊天與", + "titleWithFileSharing": "檔案", "titleWithPolls": "聊天與投票", "you": "您" }, @@ -143,8 +153,12 @@ "dontShowAgain": "不要再問了", "installExtensionText": "安裝適用於 Google 行事曆及 Office 365 整合的擴充功能" }, + "closedCaptionsTab": { + "emptyState": "即時字幕內容將在主持人啟用後顯示", + "startClosedCaptionsButton": "啟動即時字幕" + }, "connectingOverlay": { - "joiningRoom": "正在將您連接至您的會議..." + "joiningRoom": "正在將您連接至您的會議…" }, "connection": { "ATTACHED": "已經附加", @@ -156,9 +170,9 @@ "DISCONNECTED": "已斷線", "DISCONNECTING": "中斷連接中", "ERROR": "錯誤", - "FETCH_SESSION_ID": "正在取得工作階段 ID...", + "FETCH_SESSION_ID": "正在取得工作階段 ID…", "GET_SESSION_ID_ERROR": "取得工作階段 ID 時發生錯誤:{{code}}", - "GOT_SESSION_ID": "正在取得工作階段 ID... 完成", + "GOT_SESSION_ID": "正在取得工作階段 ID… 完成", "LOW_BANDWIDTH": "已關閉 {{displayName}} 的視訊以節省頻寬" }, "connectionindicator": { @@ -219,10 +233,12 @@ "joinInBrowser": "在瀏覽器中加入", "launchMeetingLabel": "您想如何加入此會議?", "launchWebButton": "在瀏覽器開啟", + "noDesktopApp": "您尚未安裝桌面應用程式?", "noMobileApp": "您尚未安裝該應用程式?", + "or": "或", "termsAndConditions": "繼續操作即表示您同意我們的條款與條件。", - "title": "正在 {{app}} 開啟您的會議...", - "titleNew": "正在開啟您的會議...", + "title": "正在 {{app}} 開啟您的會議…", + "titleNew": "正在開啟您的會議…", "tryAgainButton": "在桌面上再試一次", "unsupportedBrowser": "您似乎正在使用我們不支援的瀏覽器。" }, @@ -260,9 +276,12 @@ "Remove": "移除", "Share": "分享", "Submit": "送出", + "Understand": "我了解,暫時保持靜音", + "UnderstandAndUnmute": "我了解,請為我解除靜音", "WaitForHostMsg": "此會議尚未開始,如果您是會議主持人,請進行認證並以主持人身分開始會議。", + "WaitForHostNoAuthMsg": "此會議尚未開始,目前沒有主持人加入,請稍候。", "WaitingForHostButton": "等待主持人", - "WaitingForHostTitle": "正在等候主持人加入...", + "WaitingForHostTitle": "正在等候主持人加入…", "Yes": "是", "accessibilityLabel": { "Cancel": "取消(離開對話框)", @@ -290,11 +309,12 @@ "cameraUnknownError": "由於不明原因,無法存取網路攝影機。", "cameraUnsupportedResolutionError": "您的網路攝影機不支援所需的影像解析度。", "close": "關閉", - "conferenceDisconnectMsg": "請檢查一下網路連線,將在 {{seconds}} 秒後重新連接...", + "conferenceDisconnectMsg": "請檢查一下網路連線,將在 {{seconds}} 秒後重新連接…", "conferenceDisconnectTitle": "您已經被中斷連接。", - "conferenceReloadMsg": "我們正試著修復狀況,將在 {{seconds}} 秒後重新連接...", + "conferenceReloadMsg": "我們正試著修復狀況,將在 {{seconds}} 秒後重新連接…", "conferenceReloadTitle": "喔哦!好像有東西壞掉囉。", "confirm": "確認", + "confirmBack": "返回", "confirmNo": "否", "confirmYes": "是", "connectError": "喔哦!發生錯誤,無法連接至會議。", @@ -303,6 +323,8 @@ "contactSupport": "聯絡支援", "copied": "已複製", "copy": "複製", + "demoteParticipantDialog": "您確定要將此與會者轉為僅檢視模式嗎?", + "demoteParticipantTitle": "切換為檢視者", "dismiss": "取消", "displayNameRequired": "嗨!請問大名?", "done": "完成", @@ -314,6 +336,7 @@ "embedMeeting": "嵌入會議", "enterDisplayName": "請在此輸入您自己的名字", "error": "錯誤", + "errorRoomCreationRestriction": "您加入速度過快,請稍後再試。", "gracefulShutdown": "服務目前正在維護中,請稍後再試。", "grantModeratorDialog": "您確定要授予 {{participantName}} 主持人權限嗎?", "grantModeratorTitle": "授予主持人權限", @@ -327,7 +350,9 @@ "kickParticipantButton": "移除", "kickParticipantDialog": "您確定要將這位與會者移除嗎?", "kickParticipantTitle": "移除這位與會者?", + "kickSystemTitle": "您已被移出會議", "kickTitle": "噢!{{participantDisplayName}} 將您從會議中移除", + "learnMore": "了解詳情", "linkMeeting": "連結會議", "linkMeetingTitle": "將會議連結至 Salesforce", "liveStreaming": "直播串流中", @@ -385,6 +410,10 @@ "recentlyUsedObjects": "您最近使用過的物件", "recording": "錄製中", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "正在直播時無法使用", + "recordingInProgressDescription": "本會議正在錄製並由 AI 分析{{learnMore}},您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。", + "recordingInProgressDescriptionFirstHalf": "本會議正在錄製並由 AI 分析", + "recordingInProgressDescriptionSecondHalf": ",您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。", + "recordingInProgressTitle": "正在錄製", "rejoinNow": "立即重新加入", "remoteControlAllowedMessage": "{{user}} 接受您進行遠端控制的請求!", "remoteControlDeniedMessage": "{{user}} 拒絕您進行遠端控制的請求!", @@ -421,6 +450,7 @@ "sessTerminatedReason": "會議已經終止", "sessionRestarted": "通話因連線問題重新啟動。", "shareAudio": "繼續", + "shareAudioAltText": "如需分享內容,請選擇「瀏覽器分頁」,勾選「分享音訊」後再按「分享」", "shareAudioTitle": "如何分享音訊", "shareAudioWarningD1": "您必須先停用分享螢幕才能分享音訊。", "shareAudioWarningD2": "您必須重新啟動螢幕分享並勾選「分享音訊」選項。", @@ -431,7 +461,10 @@ "shareScreenWarningD2": "您必須先停用分享音訊後,重新啟動螢幕分享並勾選「分享音訊」選項。", "shareScreenWarningH1": "如果您只要分享螢幕:", "shareScreenWarningTitle": "您必須先停用分享音訊才能分享螢幕", + "shareVideoConfirmPlay": "您即將開啟外部網站,是否繼續?", + "shareVideoConfirmPlayTitle": "{{name}} 與您分享了一段影片。", "shareVideoLinkError": "請提供正確的影片網址。", + "shareVideoLinkStopped": "{{name}} 的影片已停止播放", "shareVideoTitle": "分享影像", "shareYourScreen": "分享您的螢幕", "shareYourScreenDisabled": "螢幕分享已停用。", @@ -510,6 +543,19 @@ "veryBad": "極差", "veryGood": "極好" }, + "fileSharing": { + "downloadFailedDescription": "請重試", + "downloadFailedTitle": "下載失敗", + "downloadFile": "下載", + "dragAndDrop": "將檔案拖曳至此或畫面任一處上傳", + "fileAlreadyUploaded": "檔案已上傳至此會議", + "fileTooLargeDescription": "請確認檔案未超過 {{ maxFileSize }}", + "fileTooLargeTitle": "檔案過大", + "removeFile": "移除", + "uploadFailedDescription": "請重試", + "uploadFailedTitle": "上傳失敗", + "uploadFile": "分享檔案" + }, "filmstrip": { "accessibilityLabel": { "heading": "視頻縮略圖" @@ -557,6 +603,7 @@ "noNumbers": "無撥入號碼。", "noPassword": "無", "noRoom": "沒有會議室指定要撥入。", + "noWhiteboard": "無法載入白板", "numbers": "撥入號碼", "password": "$t(lockRoomPasswordUppercase):", "reachedLimit": "您已達到您的方案上限", @@ -564,7 +611,8 @@ "sipAudioOnly": "SIP 僅音訊位址", "title": "分享", "tooltip": "顯示此會議的連結及電話撥入號碼", - "upgradeOptions": "請查看升級選項於" + "upgradeOptions": "請查看升級選項於", + "whiteboardError": "載入白板時發生錯誤,請稍後再試。" }, "inlineDialogFailure": { "msg": "好像有點卡卡不順。", @@ -615,7 +663,7 @@ "errorLiveStreamNotEnabled": "直播在 {{email}} 尚未啟用,請開啟直播串流或登入有啟用直播串流的帳號。", "expandedOff": "直播已停用", "expandedOn": "會議目前正在 YouTube 上直播。", - "expandedPending": "直播串流正被啟動...", + "expandedPending": "直播串流正被啟動…", "failedToStart": "直播串流啟動失敗", "getStreamKeyManually": "我們無法解析任何直播串流,請嘗試從 YouTube 取得您的直播串流金鑰。", "googlePrivacyPolicy": "Google 隱私權政策", @@ -627,7 +675,8 @@ "offBy": "{{name}} 停用了直播串流", "on": "直播串流已啟動", "onBy": "{{name}} 啟動了直播串流", - "pending": "啟動直播串流...", + "pending": "啟動直播串流…", + "policyError": "您啟動直播的過快,請稍後重試!", "serviceName": "直播串流服務", "sessionAlreadyActive": "已在錄製或直播此工作階段。", "signIn": "使用 Google 帳號登入", @@ -657,22 +706,22 @@ "joinRejectedMessage": "您的加入請求遭到主持人拒絕。", "joinRejectedTitle": "加入請求遭拒。", "joinTitle": "加入會議", - "joinWithPasswordMessage": "正在嘗試透過密碼加入,請稍候...", + "joinWithPasswordMessage": "正在嘗試透過密碼加入,請稍候…", "joiningMessage": "主持人接受您的請求後,即可加入會議", - "joiningTitle": "正在請求加入會議...", - "joiningWithPasswordTitle": "正在透過密碼加入...", + "joiningTitle": "正在請求加入會議…", + "joiningWithPasswordTitle": "正在透過密碼加入…", "knockButton": "請求加入", "knockTitle": "有人想要加入會議", "knockingParticipantList": "請求加入的與會者名單", "lobbyChatStartedNotification": "{{moderator}} 與 {{attendee}} 開始在大廳中聊天", "lobbyChatStartedTitle": "{{moderator}} 與您開始在大廳中聊天。", + "lobbyClosed": "大廳已關閉", "nameField": "輸入您的名字", "notificationLobbyAccessDenied": "{{originParticipantName}} 拒絕了 {{targetParticipantName}} 的加入請求", "notificationLobbyAccessGranted": "{{originParticipantName}} 同意了 {{targetParticipantName}} 的加入請求", "notificationLobbyDisabled": "{{originParticipantName}} 已停用大廳模式", "notificationLobbyEnabled": "{{originParticipantName}} 已啟用大廳模式", "notificationTitle": "大廳", - "passwordField": "輸入會議密碼", "passwordJoinButton": "加入", "title": "大廳", "toggleLabel": "啟用大廳模式" @@ -718,7 +767,9 @@ "me": "我", "notify": { "OldElectronAPPTitle": "安全漏洞!", - "allowAction": "允許", + "allowAudio": "允許音訊", + "allowBoth": "允許音訊與視訊", + "allowVideo": "允許視訊", "allowedUnmute": "您可以將麥克風解除靜音、開啟視訊,或是分享您的螢幕。", "audioUnmuteBlockedDescription": "麥克風解除靜音操作由於系統限制而被暫時封鎖。", "audioUnmuteBlockedTitle": "麥克風解除靜音遭封鎖!", @@ -726,10 +777,14 @@ "connectedOneMember": "{{name}} 加入了會議", "connectedThreePlusMembers": "{{name}} 與其他人加入了會議", "connectedTwoMembers": "{{first}} 與{{second}} 加入了會議", + "connectionFailed": "連線失敗,請稍後重試!", "dataChannelClosed": "視訊品質受限", "dataChannelClosedDescription": "橋接通道已斷開,視訊品質降至最低設定。", + "dataChannelClosedDescriptionWithAudio": "橋接通道已斷開,音訊和視訊可能會受到影響。", + "dataChannelClosedWithAudio": "音訊和視訊品質可能會降低。", "disabledIframe": "嵌入僅供示範使用,此通話將於 {{timeout}} 分鐘後中斷連線。", - "disabledIframeSecondary": "內嵌 {{domain}} 僅為展示用途,此通話將在 {{timeout}} 分鐘後中斷連線。請使用在正式環境使用 Jitsi 服務來內嵌!", + "disabledIframeSecondaryNative": "嵌入 {{domain}} 僅供示範,此通話將於 {{timeout}} 分鐘後中斷。", + "disabledIframeSecondaryWeb": "嵌入 {{domain}} 僅供示範,此通話將於 {{timeout}} 分鐘後中斷,請使用 Jitsi 服務 來進行正式嵌入!", "disconnected": "已經中斷連接", "displayNotifications": "顯示通知給", "dontRemindMe": "不要再提醒我", @@ -738,6 +793,9 @@ "gifsMenu": "GIPHY", "groupTitle": "通知", "hostAskedUnmute": "主持人希望您發言", + "invalidTenant": "無效的租用者名稱", + "invalidTenantHyphenDescription": "您使用的租用者名稱無效(開頭或結尾不可為「-」)。", + "invalidTenantLengthDescription": "您使用的租用者名稱過長。", "invitedOneMember": "{{name}} 已受邀請", "invitedThreePlusMembers": "{{name}} 與 {{count}} 位人員已受邀請", "invitedTwoMembers": "{{first}} 與 {{second}} 已受邀請", @@ -750,7 +808,7 @@ "linkToSalesforceDescription": "您可以將會議摘要連結至 Salesforce 物件。", "linkToSalesforceError": "無法將會議連結至 Salesforce", "linkToSalesforceKey": "連結此會議", - "linkToSalesforceProgress": "正在將會議連結至 Salesforce...", + "linkToSalesforceProgress": "正在將會議連結至 Salesforce…", "linkToSalesforceSuccess": "會議已連結至 Salesforce", "localRecordingStarted": "{{name}} 已啟用本機錄製", "localRecordingStopped": "{{name}} 已停用本機錄製", @@ -774,6 +832,7 @@ "newDeviceAction": "使用", "newDeviceAudioTitle": "偵測到新的音效裝置", "newDeviceCameraTitle": "偵測到新的網路攝影機", + "nextToSpeak": "下一位輪到您發言", "noiseSuppressionDesktopAudioDescription": "分享電腦音訊時無法啟用雜訊抑制,請停用後重試。", "noiseSuppressionFailedTitle": "啟用雜訊抑制失敗", "noiseSuppressionStereoDescription": "目前不支援立體聲降噪功能。", @@ -799,13 +858,21 @@ "startSilentTitle": "您以無音訊輸出方式加入了會議!", "suboptimalBrowserWarning": "我們恐怕您本次會議體驗不佳,我們會努力改善。在此期間,請嘗試使用支援的瀏覽器 。", "suboptimalExperienceTitle": "瀏覽器警告", + "suggestRecordingAction": "開始", + "suggestRecordingDescription": "是否要開始錄製這場會議?", + "suggestRecordingTitle": "錄製此會議", "unmute": "取消靜音", + "unmuteVideo": "啟用視訊", "videoMutedRemotelyDescription": "您隨時可以再次啟用。", "videoMutedRemotelyTitle": "您的視訊已被 {{participantDisplayName}} 停用", "videoUnmuteBlockedDescription": "啟用網路攝影機與分享螢幕由於系統限制而被暫時封鎖。", "videoUnmuteBlockedTitle": "啟用網路攝影機與分享螢幕遭封鎖!", "viewLobby": "檢視大廳", + "viewParticipants": "查看與會者", + "viewVisitors": "查看訪客", "waitingParticipants": "{{waitingParticipants}} 人", + "waitingVisitors": "排隊中的訪客: {{waitingVisitors}} 人", + "waitingVisitorsTitle": "會議尚未開始!", "whiteboardLimitDescription": "由於即將超出使用者限制,白板將關閉,請儲存您的進度。", "whiteboardLimitTitle": "白板使用情況" }, @@ -819,7 +886,10 @@ "audioModeration": "自我解除靜音", "blockEveryoneMicCamera": "停用所有人的麥克風和網路攝影機", "breakoutRooms": "分組討論室", + "goLive": "開始直播", "invite": "邀請他人", + "lowerAllHands": "全部取消舉手", + "lowerHand": "取消舉手", "moreModerationActions": "更多主持人選項", "moreModerationControls": "更多主持人操作", "moreParticipantOptions": "更多與會者選項", @@ -836,10 +906,13 @@ "headings": { "lobby": "大廳({{count}} 人)", "participantsList": "會議與會者({{count}} 人)", + "visitorInQueue": "({{count}} 人等候中)", + "visitorRequests": "{{count}} 人申請", "visitors": "訪客({{count}} 人)", "waitingLobby": "於大廳等候({{count}} 人)" }, "search": "搜尋與會者", + "searchDescription": "輸入關鍵字篩選與會者", "title": "與會者" }, "passwordDigitsOnly": "上限為 {{number}} 位數", @@ -848,10 +921,13 @@ "pinnedParticipant": "與會者被釘選", "polls": { "answer": { + "edit": "編輯", + "send": "送出", "skip": "跳過", "submit": "送出" }, "by": "由 {{ name }}", + "closeButton": "結束投票", "create": { "addOption": "新增選項", "answerPlaceholder": "選項 {{index}}", @@ -861,6 +937,7 @@ "pollQuestion": "投票問題", "questionPlaceholder": "詢問問題", "removeOption": "移除選項", + "save": "儲存", "send": "傳送" }, "errors": { @@ -887,12 +964,14 @@ "callMe": "打給我", "callMeAtNumber": "撥打這支號碼:", "calling": "撥打中", - "configuringDevices": "設定裝置中...", + "configuringDevices": "設定裝置中…", "connectedWithAudioQ": "您有連接音訊設備嗎?", "connection": { - "good": "您的連線品質良好", + "failed": "連線測試失敗!", + "good": "您的連線品質良好!", "nonOptimal": "您的連線品質不理想", - "poor": "您的連線品質不佳" + "poor": "您的連線品質不佳", + "running": "正在測試連線中…" }, "connectionDetails": { "audioClipping": "您的音訊將會斷斷續續。", @@ -901,6 +980,7 @@ "goodQuality": "太好了!您的媒體品質良好。", "noMediaConnectivity": "我們無法為此測試建立媒體連線,通常是防火牆或 NAT 的問題。", "noVideo": "您的視訊畫質將會很糟糕。", + "testFailed": "連線測試遇到異常,但不一定會影響會議。", "undetectable": "如果您仍無法在瀏覽器中進行通話,我們建議您檢查喇叭、麥克風、及網路攝影機的設置,確認是否允許瀏覽器存取麥克風及網路攝影機,並將瀏覽器更新到最新版本。如果以上步驟無法解決問題,請聯絡網頁程式的開發者。", "veryPoorConnection": "您的通話品質將會非常糟糕。", "videoFreezing": "您的視訊將會突然黑頻、卡住、或像素化。", @@ -933,8 +1013,8 @@ "or": "或", "premeeting": "會議前", "proceedAnyway": "仍然繼續", + "recordingWarning": "其他與會者可能正在錄製此通話", "screenSharingError": "螢幕分享錯誤:", - "showScreen": "啟用會議前螢幕", "startWithPhone": "使用手機音訊開始", "unsafeRoomConsent": "我了解風險,我想要加入會議", "videoOnlyError": "視訊錯誤:", @@ -943,17 +1023,17 @@ }, "presenceStatus": { "busy": "忙線", - "calling": "來電...", + "calling": "來電…", "connected": "已連線", - "connecting": "連線中...", - "connecting2": "連線中*...", + "connecting": "連線中…", + "connecting2": "連線中*…", "disconnected": "已經中斷連接", "expired": "逾時未接", "ignored": "忽略不接", - "initializingCall": "通話初始化中...", + "initializingCall": "通話初始化中…", "invited": "受邀", "rejected": "拒絕", - "ringing": "鈴鈴鈴..." + "ringing": "鈴鈴鈴…" }, "profile": { "avatar": "頭像", @@ -987,7 +1067,7 @@ "errorFetchingLink": "取得錄製檔案連結時發生錯誤。", "expandedOff": "錄製已停止", "expandedOn": "此會議目前正在錄製。", - "expandedPending": "錄製正在啟動...", + "expandedPending": "錄製正在啟動…", "failedToStart": "錄製啟動失敗", "fileSharingdescription": "分享錄製給會議與會者", "highlight": "精選", @@ -999,14 +1079,13 @@ "limitNotificationDescriptionNative": "由於目前流量過大,您的錄製時間被限制在 {{limit}} 分鐘。若要無限制的錄製,請試試 <3>{{app}}。", "limitNotificationDescriptionWeb": "由於目前流量過大,您的錄製時間被限制在 {{limit}} 分鐘。若要無限制的錄製,請試試 {{app}}。", "linkGenerated": "我們建立了您的錄製檔案的連結。", - "live": "直播", "localRecordingNoNotificationWarning": "系統不會主動知會與會者錄製已開啟,主持人需另行通知。", "localRecordingNoVideo": "沒有錄製的視訊", "localRecordingStartWarning": "請確保在退出會議之前停用錄製以便保存。", "localRecordingStartWarningTitle": "停用錄製以保存", "localRecordingVideoStop": "關閉您的視訊也將停止本機錄製,確定繼續嗎?", "localRecordingVideoWarning": "錄製視訊必須在開始時啟用", - "localRecordingWarning": "確保選擇目前的分頁以錄製正確的視訊和音訊。錄製目前限制為1GB,約可錄製100分鐘。", + "localRecordingWarning": "確保選擇目前的分頁以錄製正確的視訊和音訊。", "loggedIn": "以 {{userName}} 登入", "noMicPermission": "無法建立麥克風軌,請允許使用麥克風的權限。", "noStreams": "未檢測到音訊或視訊。", @@ -1015,14 +1094,17 @@ "on": "正在錄製", "onBy": "{{name}} 開始了錄製", "onlyRecordSelf": "僅錄製我的音訊和影片串流", - "pending": "正在準備錄製會議...", - "rec": "錄製中", + "pending": "正在準備錄製會議…", + "policyError": "您啟動錄製的速度過快,請稍後再試!", + "recordAudioAndVideo": "錄製音訊和視訊", + "recordTranscription": "錄製字幕內容", "saveLocalRecording": "將錄製檔案保存在本機(測試版)", "serviceDescription": "您的錄製會由錄製服務儲存", "serviceDescriptionCloud": "雲端錄製", "serviceDescriptionCloudInfo": "已錄製的會議將在 24 小時後自動清除。", "serviceName": "錄製服務", "sessionAlreadyActive": "已在錄製或直播此工作階段。", + "showAdvancedOptions": "進階選項", "signIn": "登入", "signOut": "登出", "surfaceError": "請選擇目前分頁", @@ -1057,16 +1139,18 @@ "signedIn": "目前正在存取 {{email}} 的行事曆事件,點按下方中斷連接可以停用存取行事曆事件。", "title": "行事曆" }, + "chatWithPermissions": "聊天功能需取得權限", "desktopShareFramerate": "桌面螢幕分享影格率", "desktopShareHighFpsWarning": "較高的桌面螢幕分享影格率可能會影響您的頻寬,您必須重新啟動桌面螢幕分享以套用新的設定。", "desktopShareWarning": "您必須重新啟動桌面螢幕分享以套用新的設定。", "devices": "裝置", "followMe": "全部人跟隨我", + "followMeRecorder": "錄影將跟隨我的視角", "framesPerSecond": "fps", "incomingMessage": "新訊息", "language": "語言", "loggedIn": "以{{name}}登入", - "maxStageParticipants": "可被釘選的最大與會者人數(實驗性功能)", + "maxStageParticipants": "可被釘選的最大與會者人數", "microphones": "麥克風", "moderator": "主持人", "moderatorOptions": "主持人選項", @@ -1085,6 +1169,7 @@ "selectMic": "麥克風", "selfView": "自身螢幕", "shortcuts": "快捷鍵", + "showSubtitlesOnStage": "在主畫面顯示字幕", "speakers": "喇叭", "startAudioMuted": "所有人啟動時處於靜音", "startReactionsMuted": "關閉所有人反應音效", @@ -1138,11 +1223,13 @@ "fearful": "可怕", "happy": "笑臉", "hours": "{{count}} 小時", + "labelTooltip": "與會者人數:{{count}}", "minutes": "{{count}} 分", "name": "名字", "neutral": "中立", "sad": "悲傷", "search": "搜尋", + "searchDescription": "輸入關鍵字篩選與會者", "searchHint": "搜尋與會者", "seconds": "{{count}} 秒", "speakerStats": "發言統計", @@ -1170,7 +1257,7 @@ "audioOnly": "切換僅音訊", "audioRoute": "選擇音訊裝置", "boo": "倒喝彩", - "breakoutRoom": "進入/離開分組討論室", + "breakoutRooms": "分組討論室", "callQuality": "管理視訊品質", "carmode": "行車模式", "cc": "切換字幕", @@ -1179,6 +1266,7 @@ "closeChat": "關閉聊天", "closeMoreActions": "關閉更多操作選單", "closeParticipantsPane": "關閉與會者窗格", + "closedCaptions": "停用即時字幕", "collapse": "收回", "document": "切換檔案分享", "documentClose": "關閉檔案分享", @@ -1208,6 +1296,7 @@ "lobbyButton": "啟用/停用大廳模式", "localRecording": "切換本機錄製控制", "lockRoom": "切換會議密碼", + "love": "愛心", "lowerHand": "放下手", "moreActions": "更多動作", "moreActionsMenu": "更多動作選單", @@ -1218,13 +1307,14 @@ "muteEveryoneElsesVideoStream": "停止其他人的視訊", "muteEveryonesVideoStream": "停止所有人的視訊", "muteGUMPending": "正在連接您的麥克風", - "noiseSuppression": "雜訊抑制", + "noiseSuppression": "雜訊抑制(BETA)", "openChat": "打開聊天", "participants": "打開與會者窗格", "pip": "切換子母螢幕模式", "privateMessage": "傳送私人訊息", "profile": "編輯您的個人檔案", "raiseHand": "舉手", + "react": "訊息反應", "reactions": "反應", "reactionsMenu": "反應選單", "recording": "切換錄製", @@ -1267,14 +1357,15 @@ "closeChat": "關閉聊天", "closeParticipantsPane": "關閉與會者窗格", "closeReactionsMenu": "關閉反應選單", - "disableNoiseSuppression": "停用雜訊抑制", + "closedCaptions": "停用即時字幕", + "disableNoiseSuppression": "停用雜訊抑制(BETA)", "disableReactionSounds": "您可以停用此會議的反應音效", "documentClose": "關閉分享檔案欄", "documentOpen": "開啟分享檔案欄", "download": "下載我們的應用程式", "e2ee": "端對端加密", "embedMeeting": "嵌入會議", - "enableNoiseSuppression": "開啟雜訊抑制", + "enableNoiseSuppression": "開啟雜訊抑制(BETA)", "endConference": "結束會議(所有人)", "enterFullScreen": "放大全螢幕", "enterTileView": "進入畫廊檢視", @@ -1296,6 +1387,7 @@ "lobbyButtonEnable": "啟用大廳模式", "login": "登入", "logout": "登出", + "love": "愛心", "lowerYourHand": "放下您的手", "moreActions": "更多動作", "moreOptions": "更多選項", @@ -1308,7 +1400,7 @@ "noAudioSignalDialInDesc": "您亦可使用下述方式撥入:", "noAudioSignalDialInLinkDesc": "撥入號碼", "noAudioSignalTitle": "您的麥克風沒有訊號!", - "noiseSuppression": "雜訊抑制", + "noiseSuppression": "雜訊抑制(BETA)", "noisyAudioInputDesc": "噪音聽起來是從您的麥克風傳來的,請考慮靜音或更換裝置。", "noisyAudioInputTitle": "您的麥克風疑似有雜音!", "openChat": "開啟聊天", @@ -1321,6 +1413,7 @@ "raiseYourHand": "舉手", "reactionBoo": "傳送倒喝彩反應", "reactionClap": "傳送鼓掌反應", + "reactionHeart": "傳送愛心反應", "reactionLaugh": "傳送大笑反應", "reactionLike": "傳送比讚反應", "reactionSilence": "傳送沉默反應", @@ -1353,32 +1446,24 @@ }, "transcribing": { "ccButtonTooltip": "啟動/停用字幕", - "error": "轉錄失敗,請再試一次。", "expandedLabel": "轉錄已開啟", - "failedToStart": "轉錄啟動失敗", - "labelToolTip": "此會議正在轉錄", - "off": "轉錄已停用", - "pending": "準備轉錄會議...", + "failed": "轉錄失敗", + "labelTooltip": "此會議正在轉錄", + "labelTooltipExtra": "稍後將提供完整轉錄紀錄", + "openClosedCaptions": "開啟字幕", + "original": "原文", "sourceLanguageDesc": "會議語言目前設定為 {{sourceLanguage}}
您可以在這裡", "sourceLanguageHere": "修改", "start": "開始顯示字幕", "stop": "停用顯示字幕", "subtitles": "字幕", "subtitlesOff": "關", - "tr": "轉錄" + "tr": "轉錄", + "translateTo": "翻譯成" }, - "unpinParticipant": "", + "unpinParticipant": "{{participantName}} - 取消釘選", "userMedia": { - "androidGrantPermissions": "當瀏覽器要求權限時,請選擇允許。", - "chromeGrantPermissions": "當瀏覽器要求權限時,請選擇允許。", - "edgeGrantPermissions": "當瀏覽器要求權限時,請選擇是的。", - "electronGrantPermissions": "正在嘗試存取您的網路攝影機及麥克風", - "firefoxGrantPermissions": "當瀏覽器請求權限時,請選擇分享選取裝置。", - "iexplorerGrantPermissions": "當瀏覽器要求權限時,請選擇確定。", - "nwjsGrantPermissions": "請允許使用您的網路攝影機和麥克風的權限", - "operaGrantPermissions": "當瀏覽器要求權限時,請選擇允許。", - "react-nativeGrantPermissions": "當瀏覽器要求權限時,請選擇允許。", - "safariGrantPermissions": "當瀏覽器要求權限時,請選擇確定。" + "grantPermissions": "請允許使用您的網路攝影機和麥克風的權限." }, "videoSIPGW": { "busy": "我們正在釋放資源,請過幾分鐘後再試。", @@ -1414,6 +1499,7 @@ }, "videothumbnail": { "connectionInfo": "連線資訊", + "demote": "轉為訪客", "domute": "靜音", "domuteOthers": "靜音其他人", "domuteVideo": "停用網路攝影機", @@ -1456,7 +1542,7 @@ "image6": "森林", "image7": "日出", "none": "無", - "pleaseWait": "請稍候...", + "pleaseWait": "請稍候…", "removeBackground": "移除背景", "slightBlur": "輕微模糊", "title": "虛擬背景", @@ -1466,11 +1552,22 @@ }, "visitors": { "chatIndicator": "(訪客)", + "joinMeeting": { + "description": "您目前以訪客身分參與本會議", + "raiseHand": "舉手", + "title": "正在加入會議", + "wishToSpeak": "若您想發言,請先舉手並等候主持人同意" + }, "labelTooltip": "訪客數量:{{count}}", "notification": { - "description": "若要參與,請舉手", + "demoteDescription": "由 {{actor}} 調整為訪客,若要參與請舉手", + "noMainParticipantsDescription": "須有主要與會者啟動會議,請稍後再試", + "noMainParticipantsTitle": "會議尚未開始", + "noVisitorLobby": "此會議啟用大廳,暫時無法加入", + "notAllowedPromotion": "需由與會者同意您的申請", "title": "您是會議中的訪客" - } + }, + "waitingMessage": "會議開始後您將自動加入!" }, "volumeSlider": "音量滑桿", "welcomepage": { @@ -1528,6 +1625,7 @@ "whiteboard": { "accessibilityLabel": { "heading": "白板" - } + }, + "screenTitle": "白板" } } diff --git a/lang/main.json b/lang/main.json index 645007c0f653..925be164d320 100644 --- a/lang/main.json +++ b/lang/main.json @@ -22,7 +22,7 @@ "noResults": "No matching search results", "outlookEmail": "Outlook Email", "phoneNumbers": "phone numbers", - "searching": "Searching...", + "searching": "Searching…", "shareInvite": "Share meeting invitation", "shareLink": "Share the meeting link to invite others", "shareStream": "Share the live streaming link", @@ -98,6 +98,10 @@ "refresh": "Refresh calendar", "today": "Today" }, + "loader": { + "reconnecting": "Reconnecting...", + "reloading": "Reloading page..." + }, "carmode": { "actions": { "selectSoundDevice": "Select sound device" @@ -109,21 +113,33 @@ } }, "chat": { + "disabled": "Sending chat messages is disabled.", "enter": "Enter room", "error": "Error: your message was not sent. Reason: {{error}}", + "everyone": "Everyone", "fieldPlaceHolder": "Aa", + "fileAccessibleTitle": "{{user}} uploaded a file", + "fileAccessibleTitleMe": "me uploaded a file", + "fileDeleted": "A file was deleted", + "guestsChatIndicator": "(guest)", "lobbyChatMessageTo": "Lobby chat message to {{recipient}}", "message": "Message", "messageAccessibleTitle": "{{user}} says:", "messageAccessibleTitleMe": "me says:", "messageTo": "Private message to {{recipient}}", "messagebox": "Type a message", + "messagesDissapearWarning": "All messages will disappear when the meeting ends", "newMessages": "New messages", + "privacyTooltip": "For your privacy, this chat will be deleted when the meeting ends", "nickname": { "popover": "Choose a nickname", "title": "Enter a nickname to use chat", - "titleWithPolls": "Enter a nickname to use chat and polls" + "titleWithCC": "Enter a nickname to use chat and closed captions", + "titleWithPolls": "Enter a nickname to use chat and polls", + "titleWithPollsAndCC": "Enter a nickname to use chat, polls and closed captions", + "titleWithPollsAndCCAndFileSharing": "Enter a nickname to use chat, polls, closed captions and files" }, + "noMessages": "There are no messages in the chat.\nBe the first to send one.", "noMessagesMessage": "There are no messages in the meeting yet. Start a conversation here!", "privateNotice": "Private message to {{recipient}}", "sendButton": "Send", @@ -131,21 +147,30 @@ "systemDisplayName": "System", "tabs": { "chat": "Chat", + "closedCaptions": "CC", + "fileSharing": "Files", "polls": "Polls" }, "title": "Chat", - "titleWithPolls": "Chat and Polls", + "titleWithCC": "CC", + "titleWithFeatures": "Chat and", + "titleWithFileSharing": "Files", + "titleWithPolls": "Polls", "you": "you" }, "chromeExtensionBanner": { "buttonText": "Install Chrome Extension", "buttonTextEdge": "Install Edge Extension", "close": "Close", - "dontShowAgain": "Don’t show me this again", + "dontShowAgain": "Don't show me this again", "installExtensionText": "Install the extension for Google Calendar and Office 365 integration" }, + "closedCaptionsTab": { + "emptyState": "The closed captions content will be available once a moderator starts it", + "startClosedCaptionsButton": "Start closed captions" + }, "connectingOverlay": { - "joiningRoom": "Connecting you to your meeting..." + "joiningRoom": "Connecting you to your meeting…" }, "connection": { "ATTACHED": "Attached", @@ -157,9 +182,9 @@ "DISCONNECTED": "Disconnected", "DISCONNECTING": "Disconnecting", "ERROR": "Error", - "FETCH_SESSION_ID": "Obtaining session-id...", + "FETCH_SESSION_ID": "Obtaining session-id…", "GET_SESSION_ID_ERROR": "Get session-id error: {{code}}", - "GOT_SESSION_ID": "Obtaining session-id... Done", + "GOT_SESSION_ID": "Obtaining session-id… Done", "LOW_BANDWIDTH": "Video for {{displayName}} has been turned off to save bandwidth" }, "connectionindicator": { @@ -220,12 +245,12 @@ "joinInBrowser": "Join in browser", "launchMeetingLabel": "How do you want to join this meeting?", "launchWebButton": "Launch in web", - "noDesktopApp": "You don’t have the app?", - "noMobileApp": "You don’t have the app?", + "noDesktopApp": "You don't have the app?", + "noMobileApp": "You don't have the app?", "or": "OR", "termsAndConditions": "By continuing you agree to our terms & conditions.", - "title": "Launching your meeting in {{app}}...", - "titleNew": "Launching your meeting ...", + "title": "Launching your meeting in {{app}}…", + "titleNew": "Launching your meeting…", "tryAgainButton": "Try again in desktop", "unsupportedBrowser": "It looks like you're using a browser we don't support." }, @@ -263,9 +288,11 @@ "Remove": "Remove", "Share": "Share", "Submit": "Submit", - "WaitForHostMsg": "The conference has not yet started because no moderators have yet arrived. If you'd like to become a moderator please log-in. Otherwise, please wait.", + "Understand": "I understand, keep me muted for now", + "UnderstandAndUnmute": "I understand, please unmute me", + "WaitForHostNoAuthMsg": "The conference has not yet started because no moderators have yet arrived. Please wait.", "WaitingForHostButton": "Wait for moderator", - "WaitingForHostTitle": "Waiting for a moderator...", + "WaitingForHostTitle": "Waiting for a moderator…", "Yes": "Yes", "accessibilityLabel": { "Cancel": "Cancel (leave dialog)", @@ -284,6 +311,12 @@ "alreadySharedVideoTitle": "Only one shared video is allowed at a time", "applicationWindow": "Application window", "authenticationRequired": "Authentication required", + "cameraCaptureDialog": { + "description": "Take and send a picture using your mobile camera", + "ok": "Open camera", + "reject": "Not now", + "title": "Take a picture" + }, "cameraConstraintFailedError": "Your camera does not satisfy some of the required constraints.", "cameraNotFoundError": "Camera was not found.", "cameraNotSendingData": "We are unable to access your camera. Please check if another application is using this device, select another device from the settings menu or try to reload the application.", @@ -293,11 +326,13 @@ "cameraUnknownError": "Cannot use camera for an unknown reason.", "cameraUnsupportedResolutionError": "Your camera does not support required video resolution.", "close": "Close", - "conferenceDisconnectMsg": "You may want to check your network connection. Reconnecting in {{seconds}} sec...", + "conferenceDisconnectMsg": "You may want to check your network connection. Reconnecting in {{seconds}} sec…", "conferenceDisconnectTitle": "You have been disconnected.", - "conferenceReloadMsg": "We're trying to fix this. Reconnecting in {{seconds}} sec...", + "conferenceReloadMsg": "We're trying to fix this. Reconnecting in {{seconds}} sec…", "conferenceReloadTitle": "Unfortunately, something went wrong.", + "leaveMeetingConfirmation": "Are you sure you want to leave the meeting?", "confirm": "Confirm", + "confirmBack": "Back", "confirmNo": "No", "confirmYes": "Yes", "connectError": "Oops! Something went wrong and we couldn't connect to the conference.", @@ -306,10 +341,10 @@ "contactSupport": "Contact support", "copied": "Copied", "copy": "Copy", - "demoteParticipantDialog": "Are you sure you want to move this participant to visitor?", - "demoteParticipantTitle": "Move to visitor", + "demoteParticipantDialog": "Are you sure you want to move this participant to viewer?", + "demoteParticipantTitle": "Move to viewer", "dismiss": "Dismiss", - "displayNameRequired": "Hi! What’s your name?", + "displayNameRequired": "Hi! What's your name?", "done": "Done", "e2eeDescription": "End-to-End Encryption is currently EXPERIMENTAL. Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.", "e2eeDisabledDueToMaxModeDescription": "Cannot enable End-to-End Encryption due to large number of participants in the conference.", @@ -319,6 +354,8 @@ "embedMeeting": "Embed meeting", "enterDisplayName": "Enter your name", "error": "Error", + "errorJoiningMeeting": "Error joining meeting", + "errorRoomCreationRestriction": "You tried to join too quickly, please come back in a bit.", "gracefulShutdown": "Our service is currently down for maintenance. Please try again later.", "grantModeratorDialog": "Are you sure you want to grant moderator rights to {{participantName}}?", "grantModeratorTitle": "Grant moderator rights", @@ -332,7 +369,9 @@ "kickParticipantButton": "Kick", "kickParticipantDialog": "Are you sure you want to kick this participant?", "kickParticipantTitle": "Kick this participant?", + "kickSystemTitle": "Ouch! You were kicked out of the meeting", "kickTitle": "Ouch! {{participantDisplayName}} kicked you out of the meeting", + "learnMore": "learn more", "linkMeeting": "Link meeting", "linkMeetingTitle": "Link meeting to Salesforce", "liveStreaming": "Live Streaming", @@ -354,23 +393,35 @@ "micPermissionDeniedError": "You have not granted permission to use your microphone. You can still join the conference but others won't hear you. Use the camera button in the address bar to fix this.", "micTimeoutError": "Could not start audio source. Timeout occurred!", "micUnknownError": "Cannot use microphone for an unknown reason.", - "moderationAudioLabel": "Allow attendees to unmute themselves", - "moderationVideoLabel": "Allow attendees to start their video", + "moderationAudioLabel": "Allow non-moderators to unmute themselves", + "moderationDesktopLabel": "Allow non-moderators to share their screen", + "moderationVideoLabel": "Allow non-moderators to start their video", "muteEveryoneDialog": "The participants can unmute themselves at any time.", "muteEveryoneDialogModerationOn": "The participants can send a request to speak at any time.", "muteEveryoneElseDialog": "Once muted, you won't be able to unmute them, but they can unmute themselves at any time.", "muteEveryoneElseTitle": "Mute everyone except {{whom}}?", + "muteEveryoneElsesDesktopDialog": "Once the share is stopped, you won't be able to restart it, but they can do so at any time.", + "muteEveryoneElsesDesktopTitle": "Stop everyone's screen-share except {{whom}}?", "muteEveryoneElsesVideoDialog": "Once the camera is disabled, you won't be able to turn it back on, but they can turn it back on at any time.", "muteEveryoneElsesVideoTitle": "Stop everyone's video except {{whom}}?", "muteEveryoneSelf": "yourself", "muteEveryoneStartMuted": "Everyone starts muted from now on", "muteEveryoneTitle": "Mute everyone?", + "muteEveryonesDesktopDialog": "The participants can share their screen at any time.", + "muteEveryonesDesktopDialogModerationOn": "The participants can send a request to share their screen at any time.", + "muteEveryonesDesktopTitle": "Stop everyone's screen share?", "muteEveryonesVideoDialog": "The participants can turn on their video at any time.", "muteEveryonesVideoDialogModerationOn": "The participants can send a request to turn on their video at any time.", "muteEveryonesVideoDialogOk": "Disable", "muteEveryonesVideoTitle": "Stop everyone's video?", "muteParticipantBody": "You won't be able to unmute them, but they can unmute themselves at any time.", "muteParticipantButton": "Mute", + "muteParticipantsDesktopBody": "You won't be able to start their screen-share, but they can do so at any time.", + "muteParticipantsDesktopBodyModerationOn": "You won't be able to start their screen-share and neither will they.", + "muteParticipantsDesktopButton": "Stop screen sharing", + "muteParticipantsDesktopDialog": "Are you sure you want to turn off this participant's screen-share? You won't be able to restart it, but they can do so at any time.", + "muteParticipantsDesktopDialogModerationOn": "Are you sure you want to turn off this participant's screen-share? You won't be able to turn the screen back on and neither will they.", + "muteParticipantsDesktopTitle": "Disable screen-share of this participant?", "muteParticipantsVideoBody": "You won't be able to turn the camera back on, but they can turn it back on at any time.", "muteParticipantsVideoBodyModerationOn": "You won't be able to turn the camera back on and neither will they.", "muteParticipantsVideoButton": "Stop video", @@ -390,6 +441,10 @@ "recentlyUsedObjects": "Your recently used objects", "recording": "Recording", "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active", + "recordingInProgressDescription": "This meeting is being recorded and analyzed by AI{{learnMore}}. Your audio and video have been muted. If you choose to unmute, you consent to being recorded.", + "recordingInProgressDescriptionFirstHalf": "This meeting is being recorded and analyzed by AI", + "recordingInProgressDescriptionSecondHalf": ". Your audio and video have been muted. If you choose to unmute, you consent to being recorded.", + "recordingInProgressTitle": "Recording in progress", "rejoinNow": "Rejoin now", "remoteControlAllowedMessage": "{{user}} accepted your remote control request!", "remoteControlDeniedMessage": "{{user}} rejected your remote control request!", @@ -408,7 +463,7 @@ "reservationErrorMsg": "Error code: {{code}}, message: {{msg}}", "retry": "Retry", "screenSharingAudio": "Share audio", - "screenSharingFailed": "Oops! Something went wrong, we weren’t able to start screen sharing!", + "screenSharingFailed": "Oops! Something went wrong, we weren't able to start screen sharing!", "screenSharingFailedTitle": "Screen sharing failed!", "screenSharingPermissionDeniedError": "Oops! Something went wrong with your screen sharing permissions. Please reload and try again.", "searchInSalesforce": "Search in Salesforce", @@ -437,11 +492,14 @@ "shareScreenWarningD2": "you need to stop audio sharing, start screen sharing and check the \"share audio\" option.", "shareScreenWarningH1": "If you want to share just your screen:", "shareScreenWarningTitle": "You need to stop audio sharing before sharing your screen", - "shareVideoLinkError": "Please provide a correct video link.", + "shareVideoConfirmPlay": "You're about to open an external website. Do you want to continue?", + "shareVideoConfirmPlayTitle": "{{name}} has shared a video with you.", + "shareVideoLinkError": "Oops, this video cannot be played.", + "shareVideoLinkStopped": "The video from {{name}} was stopped.", "shareVideoTitle": "Share video", "shareYourScreen": "Share your screen", "shareYourScreenDisabled": "Screen sharing disabled.", - "sharedVideoDialogError": "Error: Invalid URL", + "sharedVideoDialogError": "Error: Invalid or forbidden URL", "sharedVideoLinkPlaceholder": "YouTube link or direct video link", "show": "Show", "start": "Start ", @@ -476,6 +534,7 @@ "tokenAuthFailedWithReasons": "Sorry, you're not allowed to join this call. Possible reasons: {{reason}}", "tokenAuthUnsupported": "Token URL is not supported.", "transcribing": "Transcribing", + "unauthenticatedAccessDisabled": "This call requires authentication. Please login in order to proceed.", "unlockRoom": "Remove meeting $t(lockRoomPassword)", "user": "User", "userIdentifier": "User identifier", @@ -516,6 +575,25 @@ "veryBad": "Very Bad", "veryGood": "Very Good" }, + "fileSharing": { + "downloadFailedDescription": "Please try again.", + "downloadFailedTitle": "Download failed", + "downloadFile": "Download", + "downloadStarted": "File download started", + "dragAndDrop": "Drag and drop files here or anywhere on screen", + "fileAlreadyUploaded": "File has already been uploaded to this meeting.", + "fileRemovedByOther": "Your file '{{ fileName }}' was removed", + "fileTooLargeDescription": "Please make sure the file does not exceed {{ maxFileSize }}.", + "fileTooLargeTitle": "The selected file is too large", + "fileUploadProgress": "File upload progress", + "fileUploadedSuccessfully": "File uploaded successfully", + "newFileNotification": "{{ participantName }} shared '{{ fileName }}'", + "removeFile": "Remove", + "removeFileSuccess": "File removed successfully", + "uploadFailedDescription": "Please try again.", + "uploadFailedTitle": "Upload failed", + "uploadFile": "Share file" + }, "filmstrip": { "accessibilityLabel": { "heading": "Video thumbnails" @@ -623,9 +701,9 @@ "errorLiveStreamNotEnabled": "Live Streaming is not enabled on {{email}}. Please enable live streaming or log into an account with live streaming enabled.", "expandedOff": "The live streaming has stopped", "expandedOn": "The meeting is currently being live streamed", - "expandedPending": "The live streaming is being started...", + "expandedPending": "The live streaming is being started…", "failedToStart": "Live Streaming failed to start", - "getStreamKeyManually": "We weren’t able to fetch any live streams. Try getting your live stream key from YouTube.", + "getStreamKeyManually": "We weren't able to fetch any live streams. Try getting your live stream key from YouTube.", "googlePrivacyPolicy": "Google Privacy Policy", "inProgress": "Recording or live streaming in progress", "invalidStreamKey": "Live stream key may be incorrect.", @@ -635,7 +713,8 @@ "offBy": "{{name}} stopped the live streaming", "on": "Live Streaming started", "onBy": "{{name}} started the live streaming", - "pending": "Starting Live Stream...", + "pending": "Starting Live Stream…", + "policyError": "You tried to start a live stream too quickly. Please try again later!", "serviceName": "Live Streaming service", "sessionAlreadyActive": "This session is already being recorded or live streamed.", "signIn": "Sign in with Google", @@ -665,10 +744,10 @@ "joinRejectedMessage": "Your join request was rejected by a moderator.", "joinRejectedTitle": "Join request rejected.", "joinTitle": "Join Meeting", - "joinWithPasswordMessage": "Trying to join with password, please wait...", + "joinWithPasswordMessage": "Trying to join with password, please wait…", "joiningMessage": "You'll join the meeting as soon as someone accepts your request", - "joiningTitle": "Asking to join meeting...", - "joiningWithPasswordTitle": "Joining with password...", + "joiningTitle": "Asking to join meeting…", + "joiningWithPasswordTitle": "Joining with password…", "knockButton": "Ask to Join", "knockTitle": "Someone wants to join the meeting", "knockingParticipantList": "Knocking participant list", @@ -683,7 +762,8 @@ "notificationTitle": "Lobby", "passwordJoinButton": "Join", "title": "Lobby", - "toggleLabel": "Enable lobby" + "toggleLabel": "Enable lobby", + "waitForModerator": "The conference has not yet started because no moderators have yet arrived. If you'd like to become a moderator please log-in. Otherwise, please wait." }, "localRecording": { "clientState": { @@ -757,6 +837,8 @@ "passwordPlaceholder": "Password", "twoFactorCodePlaceholder": "Two Factor Authentication Code", "loginButton": "Log in", + "signinWithInternxt": "Sign in with Internxt", + "signupWithBrowser": "Create Internxt account", "forgotPassword": "I forgot my password", "noAccount": "Don't have an account?", "createAccount": "Create account", @@ -768,7 +850,10 @@ "twoFactorCodeInvalid": "Enter a valid 6-digit code", "invalidCredentials": "Invalid credentials. Please try again.", "cannotCreateMeetings": "User cannot create meetings", - "genericError": "Unable to log in. Please try again or contact support if the problem persists." + "genericError": "Unable to log in. Please try again or contact support if the problem persists.", + "popupBlocked": "The popup window was blocked. Please allow popups for Internxt Meet.", + "authCancelled": "Authentication cancelled by user.", + "authTimeout": "Authentication timeout. Please try again." }, "signup": { "title": "Sign up", @@ -823,6 +908,11 @@ }, "videoParticipants": { "you": "You" + }, + "screenShare": { + "youAreSharing": "You are now sharing screen", + "viewing": "You are viewing {{name}}'s screen", + "stopSharing": "Stop sharing" } }, "permissionsModal": { @@ -875,7 +965,10 @@ }, "notify": { "OldElectronAPPTitle": "Security vulnerability!", - "allowAction": "Allow", + "allowAll": "Allow All", + "allowAudio": "Allow Audio", + "allowDesktop": "Allow screen sharing", + "allowVideo": "Allow Video", "allowedUnmute": "You can unmute your microphone, start your camera or share your screen.", "audioUnmuteBlockedDescription": "Mic unmute operation has been temporarily blocked because of system limits.", "audioUnmuteBlockedTitle": "Mic unmute blocked!", @@ -883,10 +976,25 @@ "connectedOneMember": "{{name}} joined the meeting", "connectedThreePlusMembers": "{{name}} and many others joined the meeting", "connectedTwoMembers": "{{first}} and {{second}} joined the meeting", - "dataChannelClosed": "Video quality impaired", - "dataChannelClosedDescription": "The bridge channel has been disconnected and thus video quality is limited to its lowest setting.", + "connectionFailed": "Connection failed. Please try again later!", + "connectionLost": "Connection lost", + "connectedTitle": "Connected", + "connectedMessage": "Connection restored successfully", + "reconnecting": "Attempting to reconnect...", + "reconnectingAttempt": "Reconnection attempt {{attempt}} of {{max}}", + "reconnectionFailed": "Unable to reconnect", + "reconnectionFailedReloading": "Reloading page to restore connection...", + "deviceSuspended": "Device suspended, reconnecting...", + "poorConnection": "Poor connection detected", + "poorConnectionDescription": "Your connection may be unstable. Video and audio quality may be affected.", + "dataChannelClosed": "Video quality may be impaired", + "dataChannelClosedDescription": "The bridge channel is down and thus video quality may be limited to its lowest setting.", + "dataChannelClosedDescriptionWithAudio": "The bridge channel is down and thus disruptions to audio and video may occur.", + "dataChannelClosedWithAudio": "Audio and video quality may be impaired", + "desktopMutedRemotelyTitle": "Your screen sharing has been stopped by {{participantDisplayName}}", "disabledIframe": "Embedding is only meant for demo purposes, so this call will disconnect in {{timeout}} minutes.", - "disabledIframeSecondary": "Embedding {{domain}} is only meant for demo purposes, so this call will disconnect in {{timeout}} minutes. Please use Jitsi as a Service for production embedding!", + "disabledIframeSecondaryNative": "Embedding {{domain}} is only meant for demo purposes, so this call will disconnect in {{timeout}} minutes.", + "disabledIframeSecondaryWeb": "Embedding {{domain}} is only meant for demo purposes, so this call will disconnect in {{timeout}} minutes. Please use Jitsi as a Service for production embedding!", "disconnected": "disconnected", "displayNotifications": "Display notifications for", "dontRemindMe": "Do not remind me", @@ -894,7 +1002,10 @@ "focusFail": "{{component}} not available - retry in {{ms}} sec", "gifsMenu": "GIPHY", "groupTitle": "Notifications", - "hostAskedUnmute": "The moderator would like you to speak", + "hostAskedUnmute": "The moderator would like you to participate.", + "invalidTenant": "Invalid tenant", + "invalidTenantHyphenDescription": "The tenant you are using is invalid (starts or ends with '-').", + "invalidTenantLengthDescription": "The tenant you are using is too long.", "invitedOneMember": "{{name}} has been invited", "invitedThreePlusMembers": "{{name}} and {{count}} others have been invited", "invitedTwoMembers": "{{first}} and {{second}} have been invited", @@ -908,7 +1019,7 @@ "linkToSalesforceDescription": "You can link the meeting summary to a Salesforce object.", "linkToSalesforceError": "Failed to link meeting to Salesforce", "linkToSalesforceKey": "Link this meeting", - "linkToSalesforceProgress": "Linking meeting to Salesforce...", + "linkToSalesforceProgress": "Linking meeting to Salesforce…", "linkToSalesforceSuccess": "The meeting was linked to Salesforce", "localRecordingStarted": "{{name}} has started a local recording.", "localRecordingStopped": "{{name}} has stopped a local recording.", @@ -932,18 +1043,20 @@ "newDeviceAction": "Use", "newDeviceAudioTitle": "New audio device detected", "newDeviceCameraTitle": "New camera detected", - "noiseSuppressionDesktopAudioDescription": "Noise suppression can't be enabled while sharing desktop audio, please disable it and try again.", - "noiseSuppressionFailedTitle": "Failed to start noise suppression", - "noiseSuppressionStereoDescription": "Stereo audio noise suppression is not currently supported.", + "nextToSpeak": "You are the next in line to speak", + "noiseSuppressionDesktopAudioDescription": "Extra noise suppression can't be enabled while sharing desktop audio, please disable it and try again.", + "noiseSuppressionFailedTitle": "Failed to start extra noise suppression", + "noiseSuppressionStereoDescription": "Extra noise suppression is not currently supported with stereo audio.", "oldElectronClientDescription1": "You appear to be using an old version of the Jitsi Meet client which has known security vulnerabilities. Please make sure you update to our ", "oldElectronClientDescription2": "latest build", "oldElectronClientDescription3": " now!", + "openChat": "Open chat", "participantWantsToJoin": "Wants to join the meeting", "participantsWantToJoin": "Want to join the meeting", "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removed by another participant", "passwordSetRemotely": "$t(lockRoomPasswordUppercase) set by another participant", "raiseHandAction": "Raise hand", - "raisedHand": "Would like to speak.", + "raisedHand": "Would like to participate.", "raisedHands": "{{participantName}} and {{raisedHands}} more people", "reactionSounds": "Disable sounds", "reactionSoundsForAll": "Disable sounds for all", @@ -960,14 +1073,19 @@ "suggestRecordingAction": "Start", "suggestRecordingDescription": "Would you like to start a recording?", "suggestRecordingTitle": "Record this meeting", - "unmute": "Unmute", + "unmute": "Unmute Audio", + "unmuteScreen": "Start screen sharing", + "unmuteVideo": "Unmute Video", "videoMutedRemotelyDescription": "You can always turn it on again.", "videoMutedRemotelyTitle": "Your video has been turned off by {{participantDisplayName}}", "videoUnmuteBlockedDescription": "Camera unmute and desktop sharing operation have been temporarily blocked because of system limits.", "videoUnmuteBlockedTitle": "Camera unmute and desktop sharing blocked!", "viewLobby": "View lobby", - "viewVisitors": "View visitors", + "viewParticipants": "View participants", + "viewVisitors": "View viewers", "waitingParticipants": "{{waitingParticipants}} people", + "waitingVisitors": "Viewers waiting in queue: {{waitingVisitors}}", + "waitingVisitorsTitle": "The meeting is not live yet!", "whiteboardLimitDescription": "Please save your progress, as the user limit will soon be reached and the whiteboard will close.", "whiteboardLimitTitle": "Whiteboard usage", "encryptionKeySyncFailed": "The encryption key synchronization has failed. It is recommended that you leave the meeting and rejoin to restore secure communication.", @@ -979,13 +1097,19 @@ "actions": { "admit": "Admit", "admitAll": "Admit all", - "allow": "Allow attendees to:", + "allow": "Allow non-moderators to:", + "allowDesktop": "Allow screen sharing", "allowVideo": "Allow video", + "askDesktop": "Ask to share screen", "askUnmute": "Ask to unmute", "audioModeration": "Unmute themselves", "blockEveryoneMicCamera": "Block everyone's mic and camera", "breakoutRooms": "Breakout rooms", - "invite": "Invite Someone", + "desktopModeration": "Start screen sharing", + "goLive": "Go live", + "invite": "Invite someone", + "lowerAllHands": "Lower all hands", + "lowerHand": "Lower the hand", "moreModerationActions": "More moderation options", "moreModerationControls": "More moderation controls", "moreParticipantOptions": "More participant options", @@ -993,6 +1117,8 @@ "muteAll": "Mute all", "muteEveryoneElse": "Mute everyone else", "reject": "Reject", + "stopDesktop": "Stop screen sharing", + "stopEveryonesDesktop": "Stop everyone's screen-share", "stopEveryonesVideo": "Stop everyone's video", "stopVideo": "Stop video", "unblockEveryoneMicCamera": "Unblock everyone's mic and camera", @@ -1002,11 +1128,15 @@ "headings": { "lobby": "Lobby ({{count}})", "participantsList": "Meeting participants ({{count}})", + "viewerRequests": "Viewers requests {{count}}", + "visitorInQueue": " (waiting {{count}})", "visitorRequests": " (requests {{count}})", - "visitors": "Visitors {{count}}", + "visitors": "Viewers {{count}}", + "visitorsList": "Viewers ({{count}})", "waitingLobby": "Waiting in lobby ({{count}})" }, "search": "Search participants", + "searchDescription": "Start typing to filter participants", "title": "Participants" }, "passwordDigitsOnly": "Up to {{number}} digits", @@ -1015,11 +1145,17 @@ "pinnedParticipant": "The participant is pinned", "polls": { "answer": { + "edit": "Edit", + "send": "Send", "skip": "Skip", "submit": "Submit" }, "by": "By {{ name }}", + "closeButton": "Close poll", "create": { + "accessibilityLabel": { + "send": "Send poll" + }, "addOption": "Add option", "answerPlaceholder": "Option {{index}}", "cancel": "Cancel", @@ -1028,7 +1164,7 @@ "pollQuestion": "Poll Question", "questionPlaceholder": "Ask a question", "removeOption": "Remove option", - "send": "Send" + "save": "Save" }, "errors": { "notUniqueOption": "Options must be unique" @@ -1039,7 +1175,7 @@ }, "results": { "changeVote": "Change vote", - "empty": "There are no polls in the meeting yet. Start a poll here!", + "empty": "There are no polls in the meeting yet.", "hideDetailedResults": "Hide details", "showDetailedResults": "Show details", "vote": "Vote" @@ -1054,12 +1190,14 @@ "callMe": "Call me", "callMeAtNumber": "Call me at this number:", "calling": "Calling", - "configuringDevices": "Configuring devices...", - "connectedWithAudioQ": "You’re connected with audio?", + "configuringDevices": "Configuring devices…", + "connectedWithAudioQ": "You're connected with audio?", "connection": { + "failed": "Connection test failed!", "good": "Your internet connection looks good!", "nonOptimal": "Your internet connection is not optimal", - "poor": "You have a poor internet connection" + "poor": "You have a poor internet connection", + "running": "Running connection test…" }, "connectionDetails": { "audioClipping": "We expect your audio to be clipped.", @@ -1068,6 +1206,7 @@ "goodQuality": "Awesome! Your media quality is going to be great.", "noMediaConnectivity": "We could not find a way to establish media connectivity for this test. This is typically caused by a firewall or NAT.", "noVideo": "We expect that your video will be terrible.", + "testFailed": "The connection test encountered unexpected issues, but this might not impact your experience.", "undetectable": "If you still can not make calls in browser, we recommend that you make sure your speakers, microphone and camera are properly set up, that you have granted your browser rights to use your microphone and camera, and that your browser version is up-to-date. If you still have trouble calling, you should contact the web application developer.", "veryPoorConnection": "We expect your call quality to be really terrible.", "videoFreezing": "We expect your video to freeze, turn black, and be pixelated.", @@ -1096,13 +1235,12 @@ "joinWithoutAudio": "Join without audio", "keyboardShortcuts": "Enable Keyboard shortcuts", "linkCopied": "Link copied to clipboard", - "lookGood": "Everything is working properly", + "lookGood": "Your devices are working properly", "or": "or", "premeeting": "Pre meeting", "proceedAnyway": "Proceed anyway", "recordingWarning": "Other participants may be recording this call", "screenSharingError": "Screen sharing error:", - "showScreen": "Enable pre meeting screen", "startWithPhone": "Start with phone audio", "unsafeRoomConsent": "I understand the risks, I want to join the meeting", "videoOnlyError": "Video error:", @@ -1111,17 +1249,17 @@ }, "presenceStatus": { "busy": "Busy", - "calling": "Calling...", + "calling": "Calling…", "connected": "Connected", - "connecting": "Connecting...", - "connecting2": "Connecting*...", + "connecting": "Connecting…", + "connecting2": "Connecting*…", "disconnected": "Disconnected", "expired": "Expired", "ignored": "Ignored", - "initializingCall": "Initializing Call...", + "initializingCall": "Initializing Call…", "invited": "Invited", "rejected": "Rejected", - "ringing": "Ringing..." + "ringing": "Ringing…" }, "profile": { "avatar": "avatar", @@ -1155,7 +1293,7 @@ "errorFetchingLink": "Error fetching recording link.", "expandedOff": "Recording has stopped", "expandedOn": "The meeting is currently being recorded", - "expandedPending": "Recording is being started...", + "expandedPending": "Recording is being started…", "failedToStart": "Recording failed to start", "fileSharingdescription": "Share the recording link with the meeting participants", "highlight": "Highlight", @@ -1173,7 +1311,7 @@ "localRecordingStartWarningTitle": "Stop the recording to save it", "localRecordingVideoStop": "Stopping your video will also stop the local recording. Are you sure you want to continue?", "localRecordingVideoWarning": "To record your video you must have it on when starting the recording", - "localRecordingWarning": "Make sure you select the current tab in order to use the right video and audio. The recording is currently limited to 1GB, which is around 100 minutes.", + "localRecordingWarning": "Make sure you select the current tab in order to use the right video and audio.", "loggedIn": "Logged in as {{userName}}", "noMicPermission": "Microphone track could not be created. Please grant permission to use the microphone.", "noStreams": "No audio or video stream detected.", @@ -1182,7 +1320,8 @@ "on": "Recording started", "onBy": "{{name}} started the recording", "onlyRecordSelf": "Record only my audio and video streams", - "pending": "Preparing to record the meeting...", + "pending": "Preparing to record the meeting…", + "policyError": "You tried to start a recording too quickly. Please try again later!", "recordAudioAndVideo": "Record audio and video", "recordTranscription": "Record transcription", "saveLocalRecording": "Save recording file locally (Beta)", @@ -1208,7 +1347,7 @@ "about": "You can add a $t(lockRoomPassword) to your meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.", "aboutReadOnly": "Moderator participants can add a $t(lockRoomPassword) to the meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.", "insecureRoomNameWarningNative": "The room name is unsafe. Unwanted participants may join your meeting. {{recommendAction}} Learn more about securing your meeting ", - "insecureRoomNameWarningWeb": "The room name is unsafe. Unwanted participants may join your meeting. {{recommendAction}} Learn more about securing you meeting here.", + "insecureRoomNameWarningWeb": "The room name is unsafe. Unwanted participants may join your meeting. {{recommendAction}} Learn more about securing your meeting here.", "title": "Security Options", "unsafeRoomActions": { "meeting": "Consider securing your meeting using the security button.", @@ -1226,16 +1365,18 @@ "signedIn": "Currently accessing calendar events for {{email}}. Click the Disconnect button below to stop accessing calendar events.", "title": "Calendar" }, + "chatWithPermissions": "Chat requires permission", "desktopShareFramerate": "Desktop sharing frame rate", "desktopShareHighFpsWarning": "A higher frame rate for desktop sharing might affect your bandwidth. You need to restart the screen share for the new settings to take effect.", "desktopShareWarning": "You need to restart the screen share for the new settings to take effect.", "devices": "Devices", "followMe": "Everyone follows me", + "followMeRecorder": "Recorder follows me", "framesPerSecond": "frames-per-second", "incomingMessage": "Incoming message", "language": "Language", "loggedIn": "Logged in as {{name}}", - "maxStageParticipants": "Maximum number of participants who can be pinned to the main stage (EXPERIMENTAL)", + "maxStageParticipants": "Maximum number of participants who can be pinned to the main stage", "microphones": "Microphones", "moderator": "Moderator", "moderatorOptions": "Moderator options", @@ -1255,6 +1396,7 @@ "selectMic": "Microphone", "selfView": "Self view", "shortcuts": "Shortcuts", + "showSubtitlesOnStage": "Show subtitles on stage", "speakers": "Speakers", "startAudioMuted": "Everyone starts muted", "startReactionsMuted": "Mute reaction sounds for everyone", @@ -1312,11 +1454,13 @@ "fearful": "Fearful", "happy": "Happy", "hours": "{{count}}h", + "labelTooltip": "Number of participants: {{count}}", "minutes": "{{count}}m", "name": "Name", "neutral": "Neutral", "sad": "Sad", "search": "Search", + "searchDescription": "Start typing to filter participants", "searchHint": "Search participants", "seconds": "{{count}}s", "speakerStats": "Participants Stats", @@ -1353,6 +1497,7 @@ "closeChat": "Close chat", "closeMoreActions": "Close more actions menu", "closeParticipantsPane": "Close participants pane", + "closedCaptions": "Closed captions", "collapse": "Collapse", "document": "Toggle shared document", "documentClose": "Close shared document", @@ -1382,6 +1527,7 @@ "lobbyButton": "Enable/disable lobby mode", "localRecording": "Toggle local recording controls", "lockRoom": "Toggle meeting password", + "love": "Heart", "lowerHand": "Lower your hand", "moreActions": "More actions", "moreActionsMenu": "More actions menu", @@ -1392,13 +1538,14 @@ "muteEveryoneElsesVideoStream": "Stop everyone else's video", "muteEveryonesVideoStream": "Stop everyone's video", "muteGUMPending": "Connecting your microphone", - "noiseSuppression": "Noise suppression", + "noiseSuppression": "Extra noise suppression (BETA)", "openChat": "Open chat", - "participants": "Open participants pane", + "participants": "Open participants panel. {{participantsCount}} participants", "pip": "Toggle Picture-in-Picture mode", "privateMessage": "Send private message", "profile": "Edit your profile", "raiseHand": "Raise your hand", + "react": "Message reactions", "reactions": "Reactions", "reactionsMenu": "Reactions menu", "recording": "Toggle recording", @@ -1429,6 +1576,20 @@ "videounmute": "Start camera" }, "addPeople": "Add people to your call", + "advancedAudioSettings": { + "aec": { + "label": "Acoustic echo cancellation" + }, + "agc": { + "label": "Automatic gain control" + }, + "ns": { + "label": "Noise suppression" + }, + "stereo": { + "label": "Stereo" + } + }, "audioOnlyOff": "Disable low bandwidth mode", "audioOnlyOn": "Enable low bandwidth mode", "audioRoute": "Select the sound device", @@ -1441,14 +1602,15 @@ "closeChat": "Close chat", "closeParticipantsPane": "Close participants pane", "closeReactionsMenu": "Close reactions menu", - "disableNoiseSuppression": "Disable noise suppression", + "closedCaptions": "Closed captions", + "disableNoiseSuppression": "Disable extra noise suppression (BETA)", "disableReactionSounds": "You can disable reaction sounds for this meeting", "documentClose": "Close shared document", "documentOpen": "Open shared document", "download": "Download our apps", "e2ee": "End-to-End Encryption", "embedMeeting": "Embed meeting", - "enableNoiseSuppression": "Enable noise suppression", + "enableNoiseSuppression": "Enable extra noise suppression (BETA)", "endConference": "End meeting for all", "enterFullScreen": "View full screen", "enterTileView": "Enter tile view", @@ -1468,8 +1630,9 @@ "linkToSalesforce": "Link to Salesforce", "lobbyButtonDisable": "Disable lobby mode", "lobbyButtonEnable": "Enable lobby mode", - "login": "Log-in", - "logout": "Log-out", + "login": "Log In", + "logout": "Log Out", + "love": "Heart", "lowerYourHand": "Lower your hand", "moreActions": "More actions", "moreOptions": "More options", @@ -1482,7 +1645,7 @@ "noAudioSignalDialInDesc": "You can also dial-in using:", "noAudioSignalDialInLinkDesc": "Dial-in numbers", "noAudioSignalTitle": "There is no input coming from your mic!", - "noiseSuppression": "Noise suppression", + "noiseSuppression": "Extra noise suppression (BETA)", "noisyAudioInputDesc": "It sounds like your microphone is making noise, please consider muting or changing the device.", "noisyAudioInputTitle": "Your microphone appears to be noisy!", "openChat": "Open chat", @@ -1495,8 +1658,10 @@ "raiseYourHand": "Raise your hand", "reactionBoo": "Send boo reaction", "reactionClap": "Send clap reaction", + "reactionHeart": "Send heart reaction", "reactionLaugh": "Send laugh reaction", "reactionLike": "Send thumbs up reaction", + "reactionLove": "Send love reaction", "reactionSilence": "Send silence reaction", "reactionSurprised": "Send surprised reaction", "reactions": "Reactions", @@ -1528,28 +1693,23 @@ "transcribing": { "ccButtonTooltip": "Start / Stop subtitles", "expandedLabel": "Transcribing is currently on", - "failedToStart": "Transcribing failed to start", - "labelToolTip": "The meeting is being transcribed", + "failed": "Transcribing failed", + "labelTooltip": "This meeting is being transcribed.", + "labelTooltipExtra": "In addition, a transcript will be available later.", + "openClosedCaptions": "Open closed captions", + "original": "Original", "sourceLanguageDesc": "Currently the meeting language is set to {{sourceLanguage}}.
You can change it from ", "sourceLanguageHere": "here", "start": "Start showing subtitles", "stop": "Stop showing subtitles", "subtitles": "Subtitles", "subtitlesOff": "Off", - "tr": "TR" + "tr": "TR", + "translateTo": "Translate to" }, "unpinParticipant": "{{participantName}} - Unpin", "userMedia": { - "androidGrantPermissions": "Select Allow when your browser asks for permissions.", - "chromeGrantPermissions": "Select Allow when your browser asks for permissions.", - "edgeGrantPermissions": "Select Yes when your browser asks for permissions.", - "electronGrantPermissions": "Trying to access your camera and microphone", - "firefoxGrantPermissions": "Select Share Selected Device when your browser asks for permissions.", - "iexplorerGrantPermissions": "Select OK when your browser asks for permissions.", - "nwjsGrantPermissions": "Please grant permissions to use your camera and microphone", - "operaGrantPermissions": "Select Allow when your browser asks for permissions.", - "react-nativeGrantPermissions": "Select Allow when your browser asks for permissions.", - "safariGrantPermissions": "Select OK when your browser asks for permissions." + "grantPermissions": "Please grant permissions to use your camera and microphone." }, "videoSIPGW": { "busy": "We're working on freeing resources. Please try again in a few minutes.", @@ -1577,7 +1737,7 @@ "ldTooltip": "Viewing low definition video", "lowDefinition": "Low definition", "performanceSettings": "Performance settings", - "recording": "Recording in progress", + "recording": "This meeting is being recorded.", "sd": "SD", "sdTooltip": "Viewing standard definition video", "standardDefinition": "Standard definition", @@ -1585,8 +1745,10 @@ }, "videothumbnail": { "connectionInfo": "Connection Info", - "demote": "Move to visitor", + "demote": "Move to viewer", "domute": "Mute", + "domuteDesktop": "Stop screen-sharing", + "domuteDesktopOfOthers": "Stop screen-sharing for everyone else", "domuteOthers": "Mute everyone else", "domuteVideo": "Disable camera", "domuteVideoOfOthers": "Disable camera of everyone else", @@ -1628,7 +1790,7 @@ "image6": "Forest ", "image7": "Sunrise", "none": "None", - "pleaseWait": "Please wait...", + "pleaseWait": "Please wait…", "removeBackground": "Remove background", "slightBlur": "Half Blur", "title": "Virtual backgrounds", @@ -1637,13 +1799,25 @@ "webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser" }, "visitors": { - "chatIndicator": "(visitor)", - "labelTooltip": "Number of visitors: {{count}}", + "chatIndicator": "(viewer)", + "joinMeeting": { + "description": "You're currently a viewer in this conference.", + "raiseHand": "Raise your hand", + "title": "Joining meeting", + "wishToSpeak": "If you wish to speak, please raise your hand below and wait for the moderator's approval." + }, + "labelTooltip": "Number of viewers: {{count}}", "notification": { "demoteDescription": "Sent here by {{actor}}, raise your hand to participate", - "description": "To participate raise your hand", - "title": "You are a visitor in the meeting" - } + "noMainParticipantsDescription": "A participant needs to start the meeting. Please try again in a bit.", + "noMainParticipantsTitle": "This meeting hasn't started yet.", + "noVisitorLobby": "You cannot join while there is a lobby enabled for the meeting.", + "notAllowedPromotion": "A participant needs to allow your request first.", + "requestToJoin": "Hand Raised", + "requestToJoinDescription": "Your request was sent to the moderators. Hang tight!", + "title": "You are a viewer in the meeting" + }, + "waitingMessage": "You'll join the meeting as soon as it is live!" }, "volumeSlider": "Volume slider", "welcomepage": { diff --git a/lang/translation-languages.json b/lang/translation-languages.json index f4a4a9f48561..e8e505e473eb 100644 --- a/lang/translation-languages.json +++ b/lang/translation-languages.json @@ -34,6 +34,7 @@ "hi": "Hindi", "hmn": "Hmong", "hr": "Croatian", + "hsb": "Upper Sorbian", "ht": "Haitian Creole", "hu": "Hungarian", "hy": "Armenian", diff --git a/lang/update-translation.js b/lang/update-translation.js index 4c4de048c6a0..1e5ba5b037b6 100644 --- a/lang/update-translation.js +++ b/lang/update-translation.js @@ -35,4 +35,4 @@ for (const path of paths) { const data = JSON.stringify(result, undefined, 4); -fs.writeFileSync(`./${targetLangFile}`, data); +fs.writeFileSync(`./${targetLangFile}`, data + "\n"); diff --git a/metadata/ru/full_description.txt b/metadata/ru/full_description.txt new file mode 100644 index 000000000000..33a2da05c7ee --- /dev/null +++ b/metadata/ru/full_description.txt @@ -0,0 +1,10 @@ +Jitsi Meet позволяет вам оставаться на связи со всеми вашими командами, будь то семья, друзья или коллеги. Мгновенные видеоконференции, эффективно адаптируемые к вашим нуждам. + +* Неограниченные пользователи: нет искусственных ограничений на количество пользователей или участников конференции. Мощность сервера и пропускная способность являются единственными ограничивающими факторами. +* Учетная запись не требуется. +* Закрытые комнаты: управляйте доступом к вашим конференциям с помощью пароля. +* Зашифровано по умолчанию. +* Высокое качество: аудио и видео доставляются с чёткостью и возможностями кодеков Opus и VP8. +* Работает в веб браузере: вашим друзьям не требуются загрузка чтобы присоединиться к разговору. Jitsi Meet работает непосредственно в их браузерах. Чтобы начать просто поделитесь своей ссылкой на конференцию с другими. +* 100% открытый исходный код: поддерживается удивительными сообществами со всего мира. И вашими друзьями из 8x8. +* Приглашение по красивому адресу ссылки: вы можете встретиться с легко запоминаемым https://MySite.com/OurConf по своему выбору вместо случайных цифр. \ No newline at end of file diff --git a/metadata/ru/short_description.txt b/metadata/ru/short_description.txt new file mode 100644 index 000000000000..323322a2f7fd --- /dev/null +++ b/metadata/ru/short_description.txt @@ -0,0 +1 @@ +Защищённые, простые и масштабируемые видеоконференции с качественным видео \ No newline at end of file diff --git a/modules/API/API.js b/modules/API/API.js old mode 100644 new mode 100755 index 6999e99aed41..dfea86900dda --- a/modules/API/API.js +++ b/modules/API/API.js @@ -13,12 +13,12 @@ import { requestEnableAudioModeration, requestEnableVideoModeration } from '../../react/features/av-moderation/actions'; -import { isEnabledFromState } from '../../react/features/av-moderation/functions'; +import { isEnabledFromState, isForceMuted } from '../../react/features/av-moderation/functions'; +import { setAudioOnly } from '../../react/features/base/audio-only/actions'; import { endConference, sendTones, setAssumedBandwidthBps, - setFollowMe, setLocalSubject, setPassword, setSubject @@ -28,9 +28,11 @@ import { overwriteConfig } from '../../react/features/base/config/actions'; import { getWhitelistedJSON } from '../../react/features/base/config/functions.any'; import { toggleDialog } from '../../react/features/base/dialog/actions'; import { isSupportedBrowser } from '../../react/features/base/environment/environment'; +import { isMobileBrowser } from '../../react/features/base/environment/utils'; import { parseJWTFromURLParams } from '../../react/features/base/jwt/functions'; import JitsiMeetJS, { JitsiRecordingConstants } from '../../react/features/base/lib-jitsi-meet'; import { MEDIA_TYPE, VIDEO_TYPE } from '../../react/features/base/media/constants'; +import { isVideoMutedByUser } from '../../react/features/base/media/functions'; import { grantModerator, kickParticipant, @@ -41,6 +43,7 @@ import { import { LOCAL_PARTICIPANT_DEFAULT_ID } from '../../react/features/base/participants/constants'; import { getLocalParticipant, + getNormalizedDisplayName, getParticipantById, getScreenshareParticipantIds, getVirtualScreenshareParticipantByOwnerId, @@ -52,6 +55,10 @@ import { updateSettings } from '../../react/features/base/settings/actions'; import { getDisplayName } from '../../react/features/base/settings/functions.web'; import { setCameraFacingMode } from '../../react/features/base/tracks/actions.web'; import { CAMERA_FACING_MODE_MESSAGE } from '../../react/features/base/tracks/constants'; +import { + getLocalVideoTrack, + isLocalTrackMuted +} from '../../react/features/base/tracks/functions'; import { autoAssignToBreakoutRooms, closeBreakoutRoom, @@ -67,6 +74,7 @@ import { toggleChat } from '../../react/features/chat/actions'; import { openChat } from '../../react/features/chat/actions.web'; +import { showDesktopPicker } from '../../react/features/desktop-picker/actions'; import { processExternalDeviceRequest } from '../../react/features/device-selection/functions'; @@ -76,10 +84,12 @@ import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/act import { addStageParticipant, resizeFilmStrip, + setFilmstripVisible, setVolume, togglePinStageParticipant } from '../../react/features/filmstrip/actions.web'; import { getPinnedActiveParticipants, isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web'; +import { setFollowMe, setFollowMeRecorder } from '../../react/features/follow-me/actions'; import { invite } from '../../react/features/invite/actions.any'; import { selectParticipantInLargeVideo @@ -96,23 +106,29 @@ import { close as closeParticipantsPane, open as openParticipantsPane } from '../../react/features/participants-pane/actions'; -import { getParticipantsPaneOpen, isForceMuted } from '../../react/features/participants-pane/functions'; +import { getParticipantsPaneOpen } from '../../react/features/participants-pane/functions'; import { startLocalVideoRecording, stopLocalVideoRecording } from '../../react/features/recording/actions.any'; -import { RECORDING_TYPES } from '../../react/features/recording/constants'; +import { grantRecordingConsent, grantRecordingConsentAndUnmute } from '../../react/features/recording/actions.web'; +import { RECORDING_METADATA_ID, RECORDING_TYPES } from '../../react/features/recording/constants'; import { getActiveSession, supportsLocalRecording } from '../../react/features/recording/functions'; import { startAudioScreenShareFlow, startScreenShareFlow } from '../../react/features/screen-share/actions'; import { isScreenAudioSupported } from '../../react/features/screen-share/functions'; -import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture/actions'; +import { + openCameraCaptureDialog, + toggleScreenshotCaptureSummary +} from '../../react/features/screenshot-capture/actions'; import { isScreenshotCaptureEnabled } from '../../react/features/screenshot-capture/functions'; import SettingsDialog from '../../react/features/settings/components/web/SettingsDialog'; import { SETTINGS_TABS } from '../../react/features/settings/constants'; -import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any'; +import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions'; import { extractYoutubeIdOrURL } from '../../react/features/shared-video/functions'; import { setRequestingSubtitles, toggleRequestingSubtitles } from '../../react/features/subtitles/actions'; import { isAudioMuteButtonDisabled } from '../../react/features/toolbox/functions'; import { setTileView, toggleTileView } from '../../react/features/video-layout/actions.any'; import { muteAllParticipants } from '../../react/features/video-menu/actions'; import { setVideoQuality } from '../../react/features/video-quality/actions'; +import { toggleBackgroundEffect, toggleBlurredBackgroundEffect } from '../../react/features/virtual-background/actions'; +import { VIRTUAL_BACKGROUND_TYPE } from '../../react/features/virtual-background/constants'; import { toggleWhiteboard } from '../../react/features/whiteboard/actions.web'; import { getJitsiMeetTransport } from '../transport'; @@ -121,7 +137,7 @@ import { ENDPOINT_TEXT_MESSAGE_NAME } from './constants'; -const logger = Logger.getLogger(__filename); +const logger = Logger.getLogger('api:core'); /** * List of the available commands. @@ -197,9 +213,13 @@ function initCommands() { } APP.store.dispatch(grantModerator(participantId)); }, + 'grant-recording-consent': unmute => { + unmute ? APP.store.dispatch(grantRecordingConsentAndUnmute()) + : APP.store.dispatch(grantRecordingConsent()); + }, 'display-name': displayName => { sendAnalytics(createApiEvent('display.name.changed')); - APP.conference.changeLocalDisplayName(displayName); + APP.store.dispatch(updateSettings({ displayName: getNormalizedDisplayName(displayName) })); }, 'local-subject': localSubject => { sendAnalytics(createApiEvent('local.subject.changed')); @@ -320,15 +340,26 @@ function initCommands() { APP.store.dispatch(setAssumedBandwidthBps(value)); }, - 'set-follow-me': value => { + 'set-blurred-background': blurType => { + const tracks = APP.store.getState()['features/base/tracks']; + const videoTrack = getLocalVideoTrack(tracks)?.jitsiTrack; + const muted = tracks ? isLocalTrackMuted(tracks, MEDIA_TYPE.VIDEO) : isVideoMutedByUser(APP.store); + + APP.store.dispatch(toggleBlurredBackgroundEffect(videoTrack, blurType, muted)); + }, + 'set-follow-me': (value, recorderOnly) => { if (value) { - sendAnalytics(createApiEvent('follow.me.set')); + sendAnalytics(createApiEvent('follow.me.set', { + recorderOnly + })); } else { - sendAnalytics(createApiEvent('follow.me.unset')); + sendAnalytics(createApiEvent('follow.me.unset', { + recorderOnly + })); } - APP.store.dispatch(setFollowMe(value)); + APP.store.dispatch(recorderOnly ? setFollowMeRecorder(value) : setFollowMe(value)); }, 'set-large-video-participant': (participantId, videoType) => { const { getState, dispatch } = APP.store; @@ -376,7 +407,9 @@ function initCommands() { }, 'toggle-film-strip': () => { sendAnalytics(createApiEvent('film.strip.toggled')); - APP.UI.toggleFilmstrip(); + const { visible } = APP.store.getState()['features/filmstrip']; + + APP.store.dispatch(setFilmstripVisible(!visible)); }, /* @@ -467,7 +500,8 @@ function initCommands() { APP.store.dispatch(toggleRequestingSubtitles()); }, 'set-subtitles': (enabled, displaySubtitles, language) => { - APP.store.dispatch(setRequestingSubtitles(enabled, displaySubtitles, language)); + APP.store.dispatch(setRequestingSubtitles( + enabled, displaySubtitles, language ? `translation-languages:${language}` : null)); }, 'toggle-tile-view': () => { sendAnalytics(createApiEvent('tile-view.toggled')); @@ -485,7 +519,9 @@ function initCommands() { sendAnalytics(createApiEvent('email.changed')); APP.conference.changeLocalEmail(email); }, - 'avatar-url': avatarUrl => { + 'avatar-url': avatarUrl => { // @deprecated + console.warn('Using command avatarUrl is deprecated. Use context.user.avatar in the jwt.'); + sendAnalytics(createApiEvent('avatar.url.changed')); APP.conference.changeLocalAvatarUrl(avatarUrl); }, @@ -541,6 +577,10 @@ function initCommands() { sendAnalytics(createApiEvent('set.video.quality')); APP.store.dispatch(setVideoQuality(frameHeight)); }, + 'set-audio-only': enable => { + sendAnalytics(createApiEvent('set.audio.only')); + APP.store.dispatch(setAudioOnly(enable)); + }, 'start-share-video': url => { sendAnalytics(createApiEvent('share.video.start')); const id = extractYoutubeIdOrURL(url); @@ -560,13 +600,17 @@ function initCommands() { * @param { string } arg.title - Notification title. * @param { string } arg.description - Notification description. * @param { string } arg.uid - Optional unique identifier for the notification. - * @param { string } arg.type - Notification type, either `error`, `info`, `normal`, `success` or `warning`. + * @param { string } arg.type - Notification type, either `error`, `normal`, `success` or `warning`. * Defaults to "normal" if not provided. * @param { string } arg.timeout - Timeout type, either `short`, `medium`, `long` or `sticky`. * Defaults to "short" if not provided. + * @param { Array } arg.customActions - An array of custom actions to be displayed in the notification. + * Each object should have a `label` and a `uuid` property. It should be used along a listener + * for the `customNotificationActionTriggered` event to handle the custom action. * @returns {void} */ 'show-notification': ({ + customActions = [], title, description, uid, @@ -588,7 +632,15 @@ function initCommands() { return; } + const handlers = customActions.map(({ uuid }) => () => { + APP.API.notifyCustomNotificationActionTriggered(uuid); + }); + + const keys = customActions.map(({ label }) => label); + APP.store.dispatch(showNotification({ + customActionHandler: handlers, + customActionNameKey: keys, uid, title, description, @@ -625,6 +677,7 @@ function initCommands() { * @param { string } arg.youtubeStreamKey - The youtube stream key. * @param { string } arg.youtubeBroadcastID - The youtube broadcast ID. * @param { Object } arg.extraMetadata - Any extra metadata params for file recording. + * @param { boolean } arg.transcription - Whether a transcription should be started or not. * @returns {void} */ 'start-recording': ({ @@ -636,7 +689,8 @@ function initCommands() { rtmpBroadcastID, youtubeStreamKey, youtubeBroadcastID, - extraMetadata = {} + extraMetadata = {}, + transcription }) => { const state = APP.store.getState(); const conference = getCurrentConference(state); @@ -711,25 +765,33 @@ function initCommands() { mode: JitsiRecordingConstants.mode.STREAM, streamId: youtubeStreamKey || rtmpStreamKey }; - } else { - logger.error('Invalid recording mode provided'); - - return; } if (isScreenshotCaptureEnabled(state, true, false)) { APP.store.dispatch(toggleScreenshotCaptureSummary(true)); } - conference.startRecording(recordingConfig); + + // Start audio / video recording, if requested. + if (typeof recordingConfig !== 'undefined') { + conference.startRecording(recordingConfig); + } + + if (transcription) { + APP.store.dispatch(setRequestingSubtitles(true, false, null, true)); + conference.getMetadataHandler().setMetadata(RECORDING_METADATA_ID, { + isTranscribingEnabled: true + }); + } }, /** * Stops a recording or streaming in progress. * * @param {string} mode - `local`, `file` or `stream`. + * @param {boolean} transcription - Whether the transcription needs to be stopped. * @returns {void} */ - 'stop-recording': mode => { + 'stop-recording': (mode, transcription) => { const state = APP.store.getState(); const conference = getCurrentConference(state); @@ -739,6 +801,13 @@ function initCommands() { return; } + if (transcription) { + APP.store.dispatch(setRequestingSubtitles(false, false, null)); + conference.getMetadataHandler().setMetadata(RECORDING_METADATA_ID, { + isTranscribingEnabled: false + }); + } + if (mode === 'local') { APP.store.dispatch(stopLocalVideoRecording()); @@ -804,6 +873,8 @@ function initCommands() { 'overwrite-config': config => { const whitelistedConfig = getWhitelistedJSON('config', config); + logger.info(`Overwriting config with: ${JSON.stringify(whitelistedConfig)}`); + APP.store.dispatch(overwriteConfig(whitelistedConfig)); }, 'toggle-virtual-background': () => { @@ -825,6 +896,16 @@ function initCommands() { }, 'toggle-whiteboard': () => { APP.store.dispatch(toggleWhiteboard()); + }, + 'set-virtual-background': (enabled, backgroundImage) => { + const tracks = APP.store.getState()['features/base/tracks']; + const jitsiTrack = getLocalVideoTrack(tracks)?.jitsiTrack; + + APP.store.dispatch(toggleBackgroundEffect({ + backgroundEffectEnabled: enabled, + backgroundType: VIRTUAL_BACKGROUND_TYPE.IMAGE, + virtualSource: backgroundImage + }, jitsiTrack)); } }; transport.on('event', ({ data, name }) => { @@ -862,6 +943,20 @@ function initCommands() { }); }); break; + case 'capture-camera-picture' : { + const { cameraFacingMode, descriptionText, titleText } = request; + + if (!isMobileBrowser()) { + logger.error('This feature is only supported on mobile'); + + return; + } + + APP.store.dispatch(openCameraCaptureDialog(callback, { cameraFacingMode, + descriptionText, + titleText })); + break; + } case 'deployment-info': callback(APP.store.getState()['features/base/config'].deploymentInfo); break; @@ -977,6 +1072,12 @@ function initCommands() { callback(getRoomsInfo(APP.store.getState())); break; } + case 'get-shared-document-url': { + const { etherpad } = APP.store.getState()['features/etherpad']; + + callback(etherpad?.documentUrl || ''); + break; + } case 'get-p2p-status': { callback(isP2pActive(APP.store.getState())); break; @@ -989,6 +1090,23 @@ function initCommands() { } case '_new_electron_screensharing_supported': { callback(true); + + break; + } + case 'open-desktop-picker': { + const { desktopSharingSources } = APP.store.getState()['features/base/config']; + const options = { + desktopSharingSources: desktopSharingSources ?? [ 'screen', 'window' ] + }; + const onSourceChoose = (_streamId, _type, screenShareAudio, source) => { + callback({ + screenShareAudio, + source + }); + }; + + dispatch(showDesktopPicker(options, onSourceChoose)); + break; } default: @@ -1317,14 +1435,14 @@ class API { * @returns {void} */ notifyReceivedChatMessage( - { body, id, nick, privateMessage, ts } = {}) { - if (APP.conference.isLocalId(id)) { + { body, from, nick, privateMessage, ts } = {}) { + if (APP.conference.isLocalId(from)) { return; } this._sendEvent({ name: 'incoming-message', - from: id, + from, message: body, nick, privateMessage, @@ -1423,6 +1541,21 @@ class API { }); } + /** + * Notify external application (if API is enabled) that a custom notification action has been triggered. + * + * @param {string} actionUuid - The UUID of the action that has been triggered. + * @returns {void} + */ + notifyCustomNotificationActionTriggered(actionUuid) { + this._sendEvent({ + name: 'custom-notification-action-triggered', + data: { + id: actionUuid + } + }); + } + /** * Notify external application (if API is enabled) that the list of sharing participants changed. * @@ -1514,8 +1647,8 @@ class API { formattedArgument += `${arg.toString()}: ${arg.stack}`; } else if (typeof arg === 'object') { // NOTE: The non-enumerable properties of the objects wouldn't be included in the string after - // JSON.strigify. For example Map instance will be translated to '{}'. So I think we have to eventually - // do something better for parsing the arguments. But since this option for strigify is part of the + // JSON.stringify. For example Map instance will be translated to '{}'. So I think we have to eventually + // do something better for parsing the arguments. But since this option for stringify is part of the // public interface and I think it could be useful in some cases I will it for now. try { formattedArgument += JSON.stringify(arg); @@ -1793,9 +1926,9 @@ class API { * Notify external application of a participant, remote or local, being * removed from the conference by another participant. * - * @param {string} kicked - The ID of the participant removed from the + * @param {Object} kicked - The participant removed from the * conference. - * @param {string} kicker - The ID of the participant that removed the + * @param {Object} kicker - The participant that removed the * other participant. * @returns {void} */ @@ -1807,6 +1940,19 @@ class API { }); } + /** + * Notify external application (if API is enabled) that the recording consent dialog open state has changed. + * + * @param {boolean} open - True if the dialog is open, false otherwise. + * @returns {void} + */ + notifyRecordingConsentDialogOpen(open) { + this._sendEvent({ + name: 'recording-consent-dialog-open', + open + }); + } + /** * Notify external application of the current meeting requiring a password * to join. @@ -1913,14 +2059,16 @@ class API { * @param {boolean} on - True if recording is on, false otherwise. * @param {string} mode - Stream or file or local. * @param {string} error - Error type or null if success. + * @param {boolean} transcription - True if a transcription is being recorded, false otherwise. * @returns {void} */ - notifyRecordingStatusChanged(on, mode, error) { + notifyRecordingStatusChanged(on, mode, error, transcription) { this._sendEvent({ name: 'recording-status-changed', on, mode, - error + error, + transcription }); } @@ -2134,6 +2282,21 @@ class API { } + /** + * Notify external application (if API is enabled) the conference + * start time. + * + * @param {number} timestamp - Timestamp conference was created. + * @returns {void} + */ + notifyConferenceCreatedTimestamp(timestamp) { + this._sendEvent({ + name: 'conference-created-timestamp', + timestamp + }); + } + + /** * Notify the external application (if API is enabled) if the connection type changed. * @@ -2160,6 +2323,19 @@ class API { }); } + /** + * Notify the external application (if API is enabled) when the audio only enabled status changed. + * + * @param {boolean} enabled - Whether the audio only is enabled or not. + * @returns {void} + */ + notifyAudioOnlyChanged(enabled) { + this._sendEvent({ + name: 'audio-only-changed', + enabled + }); + } + /** * Disposes the allocated resources. * diff --git a/modules/API/external/external_api.js b/modules/API/external/external_api.js index 0938cf9d2454..4c2e01a5b512 100644 --- a/modules/API/external/external_api.js +++ b/modules/API/external/external_api.js @@ -11,7 +11,6 @@ import { getAvailableDevices, getCurrentDevices, isDeviceChangeAvailable, - isDeviceListAvailable, isMultipleAudioInputSupported, setAudioInputDevice, setAudioOutputDevice, @@ -39,6 +38,7 @@ const commands = { endConference: 'end-conference', email: 'email', grantModerator: 'grant-moderator', + grantRecordingConsent: 'grant-recording-consent', hangup: 'video-hangup', hideNotification: 'hide-notification', initiatePrivateChat: 'initiate-private-chat', @@ -59,7 +59,9 @@ const commands = { sendEndpointTextMessage: 'send-endpoint-text-message', sendParticipantToRoom: 'send-participant-to-room', sendTones: 'send-tones', + setAudioOnly: 'set-audio-only', setAssumedBandwidthBps: 'set-assumed-bandwidth-bps', + setBlurredBackground: 'set-blurred-background', setFollowMe: 'set-follow-me', setLargeVideoParticipant: 'set-large-video-participant', setMediaEncryptionKey: 'set-media-encryption-key', @@ -68,6 +70,7 @@ const commands = { setSubtitles: 'set-subtitles', setTileView: 'set-tile-view', setVideoQuality: 'set-video-quality', + setVirtualBackground: 'set-virtual-background', showNotification: 'show-notification', startRecording: 'start-recording', startShareVideo: 'start-share-video', @@ -102,13 +105,16 @@ const events = { 'avatar-changed': 'avatarChanged', 'audio-availability-changed': 'audioAvailabilityChanged', 'audio-mute-status-changed': 'audioMuteStatusChanged', + 'audio-only-changed': 'audioOnlyChanged', 'audio-or-video-sharing-toggled': 'audioOrVideoSharingToggled', 'breakout-rooms-updated': 'breakoutRoomsUpdated', 'browser-support': 'browserSupport', 'camera-error': 'cameraError', 'chat-updated': 'chatUpdated', 'compute-pressure-changed': 'computePressureChanged', + 'conference-created-timestamp': 'conferenceCreatedTimestamp', 'content-sharing-participants-changed': 'contentSharingParticipantsChanged', + 'custom-notification-action-triggered': 'customNotificationActionTriggered', 'data-channel-closed': 'dataChannelClosed', 'data-channel-opened': 'dataChannelOpened', 'device-list-changed': 'deviceListChanged', @@ -146,6 +152,7 @@ const events = { 'proxy-connection-event': 'proxyConnectionEvent', 'raise-hand-updated': 'raiseHandUpdated', 'ready': 'ready', + 'recording-consent-dialog-open': 'recordingConsentDialogOpen', 'recording-link-available': 'recordingLinkAvailable', 'recording-status-changed': 'recordingStatusChanged', 'participant-menu-button-clicked': 'participantMenuButtonClick', @@ -189,80 +196,6 @@ function changeParticipantNumber(APIInstance, number) { APIInstance._numberOfParticipants += number; } -/** - * Generates the URL for the iframe. - * - * @param {string} domain - The domain name of the server that hosts the - * conference. - * @param {string} [options] - Another optional parameters. - * @param {Object} [options.configOverwrite] - Object containing configuration - * options defined in config.js to be overridden. - * @param {Object} [options.interfaceConfigOverwrite] - Object containing - * configuration options defined in interface_config.js to be overridden. - * @param {string} [options.jwt] - The JWT token if needed by jitsi-meet for - * authentication. - * @param {string} [options.lang] - The meeting's default language. - * @param {string} [options.roomName] - The name of the room to join. - * @returns {string} The URL. - */ -function generateURL(domain, options = {}) { - return urlObjectToString({ - ...options, - url: `https://${domain}/#jitsi_meet_external_api_id=${id}` - }); -} - -/** - * Parses the arguments passed to the constructor. If the old format is used - * the function translates the arguments to the new format. - * - * @param {Array} args - The arguments to be parsed. - * @returns {Object} JS object with properties. - */ -function parseArguments(args) { - if (!args.length) { - return {}; - } - - const firstArg = args[0]; - - switch (typeof firstArg) { - case 'string': // old arguments format - case 'undefined': { - // Not sure which format but we are trying to parse the old - // format because if the new format is used everything will be undefined - // anyway. - const [ - roomName, - width, - height, - parentNode, - configOverwrite, - interfaceConfigOverwrite, - jwt, - onload, - lang - ] = args; - - return { - roomName, - width, - height, - parentNode, - configOverwrite, - interfaceConfigOverwrite, - jwt, - onload, - lang - }; - } - case 'object': // new arguments format - return args[0]; - default: - throw new Error('Can\'t parse the arguments!'); - } -} - /** * Compute valid values for height and width. If a number is specified it's * treated as pixel units. If the value is expressed in px, em, pt or @@ -331,7 +264,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * @param {string} [options.release] - The key used for specifying release if enabled on the backend. * @param {string} [options.sandbox] - Sandbox directive for the created iframe, if desired. */ - constructor(domain, ...args) { + constructor(domain, options = {}) { super(); const { roomName = '', @@ -340,21 +273,22 @@ export default class JitsiMeetExternalAPI extends EventEmitter { parentNode = document.body, configOverwrite = {}, interfaceConfigOverwrite = {}, - jwt = undefined, - lang = undefined, - onload = undefined, + jwt, + lang, + onload, invitees, iceServers, devices, userInfo, e2eeKey, release, - sandbox = '' - } = parseArguments(args); + sandbox + } = options; const localStorageContent = jitsiLocalStorage.getItem('jitsiLocalStorage'); this._parentNode = parentNode; - this._url = generateURL(domain, { + + this._url = urlObjectToString({ configOverwrite, iceServers, interfaceConfigOverwrite, @@ -366,7 +300,8 @@ export default class JitsiMeetExternalAPI extends EventEmitter { appData: { localStorageContent }, - release + release, + url: `https://${domain}/#jitsi_meet_external_api_id=${id}` }); this._createIFrame(height, width, sandbox); @@ -393,6 +328,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { this._participants = {}; this._myUserID = undefined; this._onStageParticipant = undefined; + this._iAmvisitor = undefined; this._setupListeners(); id++; } @@ -614,6 +550,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { email: data.email, avatarURL: data.avatarURL }; + this._iAmvisitor = data.visitor; } // eslint-disable-next-line no-fallthrough @@ -740,12 +677,23 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * * @returns {Object} Rooms info. */ - async getRoomsInfo() { + getRoomsInfo() { return this._transport.sendRequest({ name: 'rooms-info' }); } + /** + * Returns the Shared Document Url of the conference. + * + * @returns {Object} Rooms info. + */ + getSharedDocumentUrl() { + return this._transport.sendRequest({ + name: 'get-shared-document-url' + }); + } + /** * Returns whether the conference is P2P. * @@ -872,6 +820,27 @@ export default class JitsiMeetExternalAPI extends EventEmitter { }); } + /** + * Captures a picture through OS camera. + * + * @param {string} cameraFacingMode - The OS camera facing mode (environment/user). + * @param {string} descriptionText - The OS camera facing mode (environment/user). + * @param {string} titleText - The OS camera facing mode (environment/user). + * @returns {Promise} - Resolves with a base64 encoded image data of the screenshot. + */ + captureCameraPicture( + cameraFacingMode, + descriptionText, + titleText + ) { + return this._transport.sendRequest({ + name: 'capture-camera-picture', + cameraFacingMode, + descriptionText, + titleText + }); + } + /** * Removes the listeners and removes the Jitsi Meet frame. * @@ -1042,10 +1011,15 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * Returns Promise that resolves with true if the device list is available * and with false if not. * + * @deprecated + * * @returns {Promise} */ isDeviceListAvailable() { - return isDeviceListAvailable(this._transport); + console.warn('isDeviceListAvailable is deprecated and will be removed in the future. ' + + 'It always returns true'); + + return Promise.resolve(true); } /** @@ -1163,6 +1137,15 @@ export default class JitsiMeetExternalAPI extends EventEmitter { }); } + /** + * Returns whether we have joined as visitor in a meeting. + * + * @returns {boolean} - Returns true if we have joined as visitor. + */ + isVisitor() { + return this._iAmvisitor; + } + /** * Returns the avatar URL of a participant. * @@ -1297,6 +1280,10 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * Returns the state of availability electron share screen via external api. * * @returns {Promise} + * + * TODO: should be removed after we make sure that all Electron clients use only versions + * after with the legacy SS support was removed from the electron SDK. If we remove it now the SS for Electron + * clients with older versions wont work. */ _isNewElectronScreensharingSupported() { return this._transport.sendRequest({ @@ -1445,6 +1432,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * @param { string } options.youtubeStreamKey - The youtube stream key. * @param { string } options.youtubeBroadcastID - The youtube broadcast ID. * @param {Object } options.extraMetadata - Any extra metadata params for file recording. + * @param { boolean } arg.transcription - Whether a transcription should be started or not. * @returns {void} */ startRecording(options) { @@ -1455,10 +1443,11 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * Stops a recording or streaming session that is in progress. * * @param {string} mode - `file` or `stream`. + * @param {boolean} transcription - Whether the transcription needs to be stopped. * @returns {void} */ - stopRecording(mode) { - this.executeCommand('stopRecording', mode); + stopRecording(mode, transcription) { + this.executeCommand('stopRecording', mode, transcription); } /** @@ -1494,4 +1483,26 @@ export default class JitsiMeetExternalAPI extends EventEmitter { index })); } } + + /** + * Enable or disable the virtual background with a custom base64 image. + * + * @param {boolean} enabled - The boolean value to enable or disable. + * @param {string} backgroundImage - The base64 image. + * @returns {void} + */ + setVirtualBackground(enabled, backgroundImage) { + this.executeCommand('setVirtualBackground', enabled, backgroundImage); + } + + /** + * Opens the desktop picker. This is invoked by the Electron SDK when gDM is used. + * + * @returns {Promise} + */ + _openDesktopPicker() { + return this._transport.sendRequest({ + name: 'open-desktop-picker' + }); + } } diff --git a/modules/API/external/functions.js b/modules/API/external/functions.js index d0cc474f8757..252c0f1acdd9 100644 --- a/modules/API/external/functions.js +++ b/modules/API/external/functions.js @@ -1,6 +1,6 @@ import Logger from '@jitsi/logger'; -const logger = Logger.getLogger(__filename); +const logger = Logger.getLogger('api:external'); /** * Returns Promise that resolves with result an list of available devices. @@ -56,21 +56,6 @@ export function isDeviceChangeAvailable(transport, deviceType) { }); } -/** - * Returns Promise that resolves with true if the device list is available - * and with false if not. - * - * @param {Transport} transport - The @code{Transport} instance responsible for - * the external communication. - * @returns {Promise} - */ -export function isDeviceListAvailable(transport) { - return transport.sendRequest({ - type: 'devices', - name: 'isDeviceListAvailable' - }); -} - /** * Returns Promise that resolves with true if multiple audio input is supported * and with false if not. diff --git a/modules/API/index.js b/modules/API/index.js index 198a53aca1f0..a82d686eb8ac 100644 --- a/modules/API/index.js +++ b/modules/API/index.js @@ -1,2 +1,2 @@ -export default from './API'; +export { default } from './API'; export * from './constants'; diff --git a/modules/UI/UI.js b/modules/UI/UI.js index 35d583524aa6..eaa26b8b6d47 100644 --- a/modules/UI/UI.js +++ b/modules/UI/UI.js @@ -4,7 +4,6 @@ const UI = {}; import Logger from '@jitsi/logger'; -import EventEmitter from 'events'; import { conferenceWillInit @@ -13,7 +12,6 @@ import { isMobileBrowser } from '../../react/features/base/environment/utils'; import { setColorAlpha } from '../../react/features/base/util/helpers'; import { sanitizeUrl } from '../../react/features/base/util/uri'; import { setDocumentUrl } from '../../react/features/etherpad/actions'; -import { setFilmstripVisible } from '../../react/features/filmstrip/actions.any'; import { setNotificationsEnabled, showNotification @@ -25,30 +23,15 @@ import { setToolboxEnabled, showToolbox } from '../../react/features/toolbox/actions.web'; -import UIEvents from '../../service/UI/UIEvents'; import EtherpadManager from './etherpad/Etherpad'; import UIUtil from './util/UIUtil'; import VideoLayout from './videolayout/VideoLayout'; -const logger = Logger.getLogger(__filename); - -const eventEmitter = new EventEmitter(); - -UI.eventEmitter = eventEmitter; +const logger = Logger.getLogger('ui:core'); let etherpadManager; -const UIListeners = new Map([ - [ - UIEvents.ETHERPAD_CLICKED, - () => etherpadManager && etherpadManager.toggleEtherpad() - ], [ - UIEvents.TOGGLE_FILMSTRIP, - () => UI.toggleFilmstrip() - ] -]); - /** * Indicates if we're currently in full screen mode. * @@ -96,10 +79,11 @@ UI.start = function() { }; /** - * Setup some UI event listeners. + * Handles etherpad click. */ -UI.registerListeners - = () => UIListeners.forEach((value, key) => UI.addListener(key, value)); +UI.onEtherpadClicked = function() { + etherpadManager && etherpadManager.toggleEtherpad(); +}; /** * @@ -136,20 +120,22 @@ UI.unbindEvents = () => { * @param {string} name etherpad id */ UI.initEtherpad = name => { - const etherpadBaseUrl = sanitizeUrl(config.etherpad_base); + const { getState, dispatch } = APP.store; + const configState = getState()['features/base/config']; + const etherpadBaseUrl = sanitizeUrl(configState.etherpad_base); if (etherpadManager || !etherpadBaseUrl || !name) { return; } logger.log('Etherpad is enabled'); - etherpadManager = new EtherpadManager(eventEmitter); + etherpadManager = new EtherpadManager(); const url = new URL(name, etherpadBaseUrl); - APP.store.dispatch(setDocumentUrl(url.toString())); + dispatch(setDocumentUrl(url.toString())); - if (config.openSharedDocumentOnJoin) { + if (configState.openSharedDocumentOnJoin) { etherpadManager.toggleEtherpad(); } }; @@ -197,15 +183,6 @@ UI.updateUserStatus = (user, status) => { }, NOTIFICATION_TIMEOUT_TYPE.SHORT)); }; -/** - * Toggles filmstrip. - */ -UI.toggleFilmstrip = function() { - const { visible } = APP.store.getState()['features/filmstrip']; - - APP.store.dispatch(setFilmstripVisible(!visible)); -}; - /** * Sets muted video state for participant */ @@ -219,33 +196,6 @@ UI.setVideoMuted = function(id) { UI.updateLargeVideo = (id, forceUpdate) => VideoLayout.updateLargeVideo(id, forceUpdate); -/** - * Adds a listener that would be notified on the given type of event. - * - * @param type the type of the event we're listening for - * @param listener a function that would be called when notified - */ -UI.addListener = function(type, listener) { - eventEmitter.on(type, listener); -}; - -/** - * Removes the all listeners for all events. - * - * @returns {void} - */ -UI.removeAllListeners = function() { - eventEmitter.removeAllListeners(); -}; - -/** - * Emits the event of given type by specifying the parameters in options. - * - * @param type the type of the event we're emitting - * @param options the parameters for the event - */ -UI.emitEvent = (type, ...options) => eventEmitter.emit(type, ...options); - // Used by torture. UI.showToolbar = timeout => APP.store.dispatch(showToolbox(timeout)); @@ -263,14 +213,6 @@ UI.handleLastNEndpoints = function(leavingIds, enteringIds) { */ UI.setAudioLevel = (id, lvl) => VideoLayout.setAudioLevel(id, lvl); -/** - * Update list of available physical devices. - */ -UI.onAvailableDevicesChanged = function() { - APP.conference.updateAudioIconEnabled(); - APP.conference.updateVideoIconEnabled(); -}; - /** * Returns the id of the current video shown on large. * Currently used by tests (torture). diff --git a/modules/UI/etherpad/Etherpad.js b/modules/UI/etherpad/Etherpad.js index a11014d5362c..9031bcdebaf2 100644 --- a/modules/UI/etherpad/Etherpad.js +++ b/modules/UI/etherpad/Etherpad.js @@ -138,8 +138,7 @@ export default class EtherpadManager { /** * */ - constructor(eventEmitter) { - this.eventEmitter = eventEmitter; + constructor() { this.etherpad = null; } diff --git a/modules/UI/videolayout/LargeVideoManager.js b/modules/UI/videolayout/LargeVideoManager.js index e24008842e23..7c10c40f911c 100644 --- a/modules/UI/videolayout/LargeVideoManager.js +++ b/modules/UI/videolayout/LargeVideoManager.js @@ -44,7 +44,7 @@ import AudioLevels from '../audio_levels/AudioLevels'; import { VIDEO_CONTAINER_TYPE, VideoContainer } from './VideoContainer'; -const logger = Logger.getLogger(__filename); +const logger = Logger.getLogger('ui:videolayout'); const DESKTOP_CONTAINER_TYPE = 'desktop'; @@ -129,10 +129,21 @@ export default class LargeVideoManager { this.container = document.getElementById('largeVideoContainer'); - this.container.style.display = 'inline-block'; - - this.container.addEventListener('mouseenter', e => this.onHoverIn(e)); - this.container.addEventListener('mouseleave', e => this.onHoverOut(e)); + if (this.container) { + this.container.style.display = 'inline-block'; + this.container.addEventListener('mouseenter', e => this.onHoverIn(e)); + this.container.addEventListener('mouseleave', e => this.onHoverOut(e)); + } else { + logger.warn('Large video container element not found in DOM'); + setTimeout(() => { + this.container = document.getElementById('largeVideoContainer'); + if (this.container) { + this.container.style.display = 'inline-block'; + this.container.addEventListener('mouseenter', e => this.onHoverIn(e)); + this.container.addEventListener('mouseleave', e => this.onHoverOut(e)); + } + }, 100); + } // Bind event handler so it is only bound once for every instance. this._onVideoResolutionUpdate @@ -165,9 +176,13 @@ export default class LargeVideoManager { this.removePresenceLabel(); - ReactDOM.unmountComponentAtNode(this._dominantSpeakerAvatarContainer); + if (this._dominantSpeakerAvatarContainer) { + ReactDOM.unmountComponentAtNode(this._dominantSpeakerAvatarContainer); + } - this.container.style.display = 'none'; + if (this.container) { + this.container.style.display = 'none'; + } } /** @@ -221,10 +236,10 @@ export default class LargeVideoManager { this.updateInProcess = true; - // Include hide()/fadeOut only if we're switching between users - // eslint-disable-next-line eqeqeq + // Include hide()/fadeOut if we're switching between users or between different sources of the same user. const container = this.getCurrentContainer(); - const isUserSwitch = this.newStreamData.id !== container.id; + const isUserSwitch = container.id !== this.newStreamData.id + || container.stream?.getSourceName() !== this.newStreamData.stream?.getSourceName(); const preUpdate = isUserSwitch ? container.hide() : Promise.resolve(); preUpdate.then(() => { @@ -266,13 +281,13 @@ export default class LargeVideoManager { // use a custom hook to update a local track streaming status. if (this.videoTrack?.jitsiTrack?.getSourceName() !== videoTrack?.jitsiTrack?.getSourceName() || this.videoTrack?.jitsiTrack?.isP2P !== videoTrack?.jitsiTrack?.isP2P) { - // In the case where we switch from jvb to p2p when we need to switch the p2p and jvb track, they will be - // with the same source name. In order to add the streaming status listener we need to check if the isP2P - // flag is different. Without this check we won't have the correct stream status listener for the track. - // Normally the Thumbnail and ConnectionIndicator components will update the streaming status the same way - // and this may mask the problem. But if for some reason the update from the Thumbnail and - // ConnectionIndicator components don't happen this may lead to showing the avatar instead of - // the video because of the old track inactive streaming status. + // In the case where we switch from jvb to p2p when we need to switch the p2p and jvb track, they will be + // with the same source name. In order to add the streaming status listener we need to check if the isP2P + // flag is different. Without this check we won't have the correct stream status listener for the track. + // Normally the Thumbnail and ConnectionIndicator components will update the streaming status the same way + // and this may mask the problem. But if for some reason the update from the Thumbnail and + // ConnectionIndicator components don't happen this may lead to showing the avatar instead of + // the video because of the old track inactive streaming status. if (this.videoTrack && !this.videoTrack.local) { this.videoTrack.jitsiTrack.off(JitsiTrackEvents.TRACK_STREAMING_STATUS_CHANGED, this.handleTrackStreamingStatusChanged); @@ -306,11 +321,9 @@ export default class LargeVideoManager { const showAvatar = isVideoContainer - && ((isAudioOnly && videoType !== VIDEO_TYPE.DESKTOP) || !isVideoRenderable || legacyScreenshare); + && ((isAudioOnly && videoType !== VIDEO_TYPE.DESKTOP) || !isVideoRenderable || legacyScreenshare); - logger.debug(`scheduleLargeVideoUpdate: Remote track ${videoTrack?.jitsiTrack}, isVideoMuted=${ - isVideoMuted}, streamingStatusActive=${streamingStatusActive}, isVideoRenderable=${ - isVideoRenderable}, showAvatar=${showAvatar}`); + logger.debug(`scheduleLargeVideoUpdate: Remote track ${videoTrack?.jitsiTrack}, isVideoMuted=${isVideoMuted}, streamingStatusActive=${streamingStatusActive}, isVideoRenderable=${isVideoRenderable}, showAvatar=${showAvatar}`); let promise; @@ -324,9 +337,9 @@ export default class LargeVideoManager { promise = container.hide(); if ((!shouldDisplayTileView(state) || participant?.pinned) // In theory the tile view may not be - // enabled yet when we auto pin the participant. + // enabled yet when we auto pin the participant. - && participant && !participant.local && !participant.fakeParticipant) { + && participant && !participant.local && !participant.fakeParticipant) { // remote participant only const track = getVideoTrackByParticipant(state, participant); @@ -364,8 +377,8 @@ export default class LargeVideoManager { const overrideAndHide = APP.conference.isAudioOnly(); this.updateParticipantConnStatusIndication( - id, - !overrideAndHide && messageKey); + id, + !overrideAndHide && messageKey); // Change the participant id the presence label is listening to. this.updatePresenceLabel(id); @@ -477,9 +490,11 @@ export default class LargeVideoManager { if (isOpen && window.innerWidth > 580) { /** * If chat state is open, we re-compute the container width - * by subtracting the default width of the chat. + * by subtracting the chat width, which may be resized by the user. */ - widthToUse -= CHAT_SIZE; + const chatWidth = state['features/chat'].width?.current ?? CHAT_SIZE; + + widthToUse -= chatWidth; } if (resizableFilmstrip && visible && filmstripWidth.current >= FILMSTRIP_BREAKPOINT) { @@ -516,12 +531,11 @@ export default class LargeVideoManager { */ updateAvatar() { ReactDOM.render( - - - , + React.createElement( + Provider, + { store: APP.store }, + React.createElement(Avatar, { id: "dominantSpeakerAvatar", participantId: this.id, size: 200 }) + ), this._dominantSpeakerAvatarContainer ); } @@ -557,14 +571,20 @@ export default class LargeVideoManager { if (presenceLabelContainer) { ReactDOM.render( - - - - - , - presenceLabelContainer); + React.createElement( + Provider, + { store: APP.store }, + React.createElement( + I18nextProvider, + { i18n: i18next }, + React.createElement(PresenceLabel, { + participantID: id, + className: "presence-label" + }) + ) + ), + presenceLabelContainer + ); } } diff --git a/modules/UI/videolayout/VideoContainer.js b/modules/UI/videolayout/VideoContainer.js index e526a3ad00cc..d9f31bb5a24c 100644 --- a/modules/UI/videolayout/VideoContainer.js +++ b/modules/UI/videolayout/VideoContainer.js @@ -24,14 +24,14 @@ export const VIDEO_CONTAINER_TYPE = 'camera'; // Corresponds to animation duration from the animatedFadeIn and animatedFadeOut CSS classes. const FADE_DURATION_MS = 300; -const logger = Logger.getLogger(__filename); +const logger = Logger.getLogger('ui:VideoContainer'); /** * List of container events that we are going to process for the large video. * * NOTE: Currently used only for logging for debug purposes. */ -const containerEvents = [ 'abort', 'canplaythrough', 'ended', 'error', 'stalled', 'suspend', 'waiting' ]; +const containerEvents = ['abort', 'canplaythrough', 'ended', 'error', 'stalled', 'suspend', 'waiting']; /** * Returns an array of the video dimensions, so that it keeps it's aspect @@ -46,14 +46,14 @@ const containerEvents = [ 'abort', 'canplaythrough', 'ended', 'error', 'stalled' * @return an array with 2 elements, the video width and the video height */ function computeDesktopVideoSize( // eslint-disable-line max-params - videoWidth, - videoHeight, - videoSpaceWidth, - videoSpaceHeight, - subtractFilmstrip) { + videoWidth, + videoHeight, + videoSpaceWidth, + videoSpaceHeight, + subtractFilmstrip) { if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) { // Avoid NaN values caused by division by 0. - return [ 0, 0 ]; + return [0, 0]; } const aspectRatio = videoWidth / videoHeight; @@ -80,7 +80,7 @@ function computeDesktopVideoSize( // eslint-disable-line max-params availableHeight = availableWidth / aspectRatio; } - return [ availableWidth, availableHeight ]; + return [availableWidth, availableHeight]; } @@ -96,60 +96,60 @@ function computeDesktopVideoSize( // eslint-disable-line max-params * @return an array with 2 elements, the video width and the video height */ function computeCameraVideoSize( // eslint-disable-line max-params - videoWidth, - videoHeight, - videoSpaceWidth, - videoSpaceHeight, - videoLayoutFit) { + videoWidth, + videoHeight, + videoSpaceWidth, + videoSpaceHeight, + videoLayoutFit) { if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) { // Avoid NaN values caused by division by 0. - return [ 0, 0 ]; + return [0, 0]; } const aspectRatio = videoWidth / videoHeight; const videoSpaceRatio = videoSpaceWidth / videoSpaceHeight; switch (videoLayoutFit) { - case 'height': - return [ videoSpaceHeight * aspectRatio, videoSpaceHeight ]; - case 'width': - return [ videoSpaceWidth, videoSpaceWidth / aspectRatio ]; - case 'nocrop': - return computeCameraVideoSize( - videoWidth, - videoHeight, - videoSpaceWidth, - videoSpaceHeight, - videoSpaceRatio < aspectRatio ? 'width' : 'height'); - case 'both': { - const maxZoomCoefficient = interfaceConfig.MAXIMUM_ZOOMING_COEFFICIENT - || Infinity; - - if (videoSpaceRatio === aspectRatio) { - return [ videoSpaceWidth, videoSpaceHeight ]; - } + case 'height': + return [videoSpaceHeight * aspectRatio, videoSpaceHeight]; + case 'width': + return [videoSpaceWidth, videoSpaceWidth / aspectRatio]; + case 'nocrop': + return computeCameraVideoSize( + videoWidth, + videoHeight, + videoSpaceWidth, + videoSpaceHeight, + videoSpaceRatio < aspectRatio ? 'width' : 'height'); + case 'both': { + const maxZoomCoefficient = interfaceConfig.MAXIMUM_ZOOMING_COEFFICIENT + || Infinity; + + if (videoSpaceRatio === aspectRatio) { + return [videoSpaceWidth, videoSpaceHeight]; + } - let [ width, height ] = computeCameraVideoSize( - videoWidth, - videoHeight, - videoSpaceWidth, - videoSpaceHeight, - videoSpaceRatio < aspectRatio ? 'height' : 'width'); - const maxWidth = videoSpaceWidth * maxZoomCoefficient; - const maxHeight = videoSpaceHeight * maxZoomCoefficient; - - if (width > maxWidth) { - width = maxWidth; - height = width / aspectRatio; - } else if (height > maxHeight) { - height = maxHeight; - width = height * aspectRatio; - } + let [width, height] = computeCameraVideoSize( + videoWidth, + videoHeight, + videoSpaceWidth, + videoSpaceHeight, + videoSpaceRatio < aspectRatio ? 'height' : 'width'); + const maxWidth = videoSpaceWidth * maxZoomCoefficient; + const maxHeight = videoSpaceHeight * maxZoomCoefficient; + + if (width > maxWidth) { + width = maxWidth; + height = width / aspectRatio; + } else if (height > maxHeight) { + height = maxHeight; + width = height * aspectRatio; + } - return [ width, height ]; - } - default: - return [ videoWidth, videoHeight ]; + return [width, height]; + } + default: + return [videoWidth, videoHeight]; } } @@ -161,10 +161,10 @@ function computeCameraVideoSize( // eslint-disable-line max-params * indent */ function getCameraVideoPosition( // eslint-disable-line max-params - videoWidth, - videoHeight, - videoSpaceWidth, - videoSpaceHeight) { + videoWidth, + videoHeight, + videoSpaceWidth, + videoSpaceHeight) { // Parent height isn't completely calculated when we position the video in // full screen mode and this is why we use the screen height in this case. // Need to think it further at some point and implement it properly. @@ -176,8 +176,10 @@ function getCameraVideoPosition( // eslint-disable-line max-params const horizontalIndent = (videoSpaceWidth - videoWidth) / 2; const verticalIndent = (videoSpaceHeight - videoHeight) / 2; - return { horizontalIndent, - verticalIndent }; + return { + horizontalIndent, + verticalIndent + }; } /** @@ -188,7 +190,11 @@ export class VideoContainer extends LargeContainer { * */ get video() { - return document.getElementById('largeVideo'); + const video = document.getElementById('largeVideo'); + if (!video) { + logger.warn('Large video element not found in DOM'); + } + return video; } /** @@ -247,19 +253,24 @@ export class VideoContainer extends LargeContainer { this.$wrapper = $('#largeVideoWrapper'); this.wrapperParent = document.getElementById('largeVideoElementsContainer'); - this.avatarHeight = document.getElementById('dominantSpeakerAvatarContainer').getBoundingClientRect().height; - this.video.onplaying = function(event) { - logger.debug('Large video is playing!'); - if (typeof resizeContainer === 'function') { - resizeContainer(event); - } - }; + const avatarContainer = document.getElementById('dominantSpeakerAvatarContainer'); + + this.avatarHeight = avatarContainer ? avatarContainer.getBoundingClientRect()?.height : 0; - containerEvents.forEach(event => { - this.video.addEventListener(event, () => { - logger.debug(`${event} handler was called for the large video.`); + if (this.video) { + this.video.onplaying = function (event) { + logger.debug('Large video is playing!'); + if (typeof resizeContainer === 'function') { + resizeContainer(event); + } + }; + + containerEvents.forEach(event => { + this.video.addEventListener(event, () => { + logger.debug(`${event} handler was called for the large video.`); + }); }); - }); + } /** * A Set of functions to invoke when the video element resizes. @@ -268,10 +279,27 @@ export class VideoContainer extends LargeContainer { */ this._resizeListeners = new Set(); - this.video.onresize = this._onResize.bind(this); + this._initializeVideoElement(); this._play = this._play.bind(this); } + /** + * Initializes video element event listeners when the element is available. + * @private + */ + _initializeVideoElement() { + if (this.video) { + this.video.onresize = this._onResize.bind(this); + } else { + // Retry after a short delay if video element is not ready + setTimeout(() => { + if (this.video) { + this.video.onresize = this._onResize.bind(this); + } + }, 100); + } + } + /** * Adds a function to the known subscribers of video element resize * events. @@ -358,9 +386,9 @@ export class VideoContainer extends LargeContainer { } return getCameraVideoPosition(width, - height, - containerWidthToUse, - containerHeight); + height, + containerWidthToUse, + containerHeight); } @@ -385,12 +413,14 @@ export class VideoContainer extends LargeContainer { */ _positionParticipantStatus(element) { if (this.avatarDisplayed) { - const avatarImage = document.getElementById('dominantSpeakerAvatarContainer').getBoundingClientRect(); - - element.style.top = avatarImage.top + avatarImage.height + 10; + const avatarContainer = document.getElementById('dominantSpeakerAvatarContainer'); + if (avatarContainer) { + const avatarImage = avatarContainer.getBoundingClientRect(); + element.style.top = avatarImage.top + avatarImage.height + 10; + } } else { const height = element.getBoundingClientRect().height; - const parentHeight = element.parentElement.getBoundingClientRect().height; + const parentHeight = element.parentElement.getBoundingClientRect()?.height; element.style.top = (parentHeight / 2) - (height / 2); } @@ -418,7 +448,7 @@ export class VideoContainer extends LargeContainer { this.positionRemoteStatusMessages(); - const [ width, height ] = this._getVideoSize(containerWidth, containerHeight, verticalFilmstripWidth); + const [width, height] = this._getVideoSize(containerWidth, containerHeight, verticalFilmstripWidth); if (width === 0 || height === 0) { // We don't need to set 0 for width or height since the visibility is controlled by the visibility css prop @@ -477,14 +507,18 @@ export class VideoContainer extends LargeContainer { * @returns {void} */ _play(retries = 0) { + if (!this.video) { + logger.warn('Cannot play large video: video element not found'); + return; + } + this.video.play() .then(() => { logger.debug(`Successfully played large video after ${retries + 1} retries!`); }) .catch(e => { if (retries < 3) { - logger.debug(`Error while trying to playing the large video. Will retry after 1s. Retries: ${ - retries}. Error: ${e}`); + logger.debug(`Error while trying to playing the large video. Will retry after 1s. Retries: ${retries}. Error: ${e}`); window.setTimeout(() => { this._play(retries + 1); }, 1000); @@ -501,8 +535,7 @@ export class VideoContainer extends LargeContainer { * @param {string} videoType video type */ setStream(userID, stream, videoType) { - this.userId = userID; - if (this.stream === stream && !stream?.forceStreamToReattach) { + if (this.userId === userID && this.stream === stream && !stream?.forceStreamToReattach) { logger.debug(`SetStream on the large video for user ${userID} ignored: the stream is not changed!`); // Handles the use case for the remote participants when the @@ -516,6 +549,8 @@ export class VideoContainer extends LargeContainer { return; } + this.userId = userID; + if (stream?.forceStreamToReattach) { delete stream.forceStreamToReattach; } @@ -540,17 +575,15 @@ export class VideoContainer extends LargeContainer { logger.error(`Attaching the remote track ${stream} to large video has failed with `, error); }); - // Ensure large video gets play() called on it when a new stream is attached to it. This is necessary in the - // case of Safari as autoplay doesn't kick-in automatically on Safari 15 and newer versions. - browser.isWebKitBased() && this._play(); + // Ensure large video gets play() called on it when a new stream is attached to it. + this._play(); const flipX = stream.isLocal() && this.localFlipX && !this.isScreenSharing(); this.video.style.transform = flipX ? 'scaleX(-1)' : 'none'; this._updateBackground(); } else { - logger.debug(`SetStream on the large video won't attach a track for ${ - userID} because no large video element was found!`); + logger.debug(`SetStream on the large video won't attach a track for ${userID} because no large video element was found!`); } } @@ -654,22 +687,19 @@ export class VideoContainer extends LargeContainer { // performance issues from the presence of the background or if // explicitly disabled. if (interfaceConfig.DISABLE_VIDEO_BACKGROUND - || browser.isFirefox() - || browser.isWebKitBased()) { + || browser.isFirefox() + || browser.isWebKitBased()) { return; } ReactDOM.render( -