diff --git a/.github/ISSUE_TEMPLATE/test_report.md b/.github/ISSUE_TEMPLATE/test_report.md index 9a7ed702..fb97739b 100644 --- a/.github/ISSUE_TEMPLATE/test_report.md +++ b/.github/ISSUE_TEMPLATE/test_report.md @@ -39,3 +39,6 @@ labels: test 10. Drag&Drop to send a file into a chat still works: - [ ] Web - [ ] Linux +11. Deeplinks are still working? https://matrix.to/#/@krille:janian.de + - [ ] Android + - [ ] iOS \ No newline at end of file diff --git a/.github/workflows/check_duplicates.yaml b/.github/workflows/check_duplicates.yaml deleted file mode 100644 index c0fa5313..00000000 --- a/.github/workflows/check_duplicates.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: Check duplicates - -on: - issues: - types: [opened] - -jobs: - check_duplicates: - runs-on: ubuntu-latest - env: - title: ${{ github.event.issue.title }} - author: ${{ github.event.issue.user.login }} - number: ${{ github.event.issue.number }} - GH_TOKEN: ${{ github.token }} - steps: - - uses: actions/checkout@v6 - - name: Check duplicates - run: | - title=$(printf %q "${{ env.title }}") - issues=$(gh issue list --search '${{ title }}' --json number,title,url) - number=${{ env.number }} - issues_filtered=$(echo "$issues" | jq --arg num "$number" 'map(select(.number != ($num | tonumber)))') - if [ "$(echo "$issues_filtered" | jq length)" -eq 0 ]; then - echo "No duplicates found." - else - issues_markdown=$(echo "$issues_filtered" | jq -r '.[] | "- [" + .title + "](" + .url + ")"') - formatted_body=$(echo -e "@${{ env.author }}\nPossible duplication of:\n$issues_markdown") - gh issue comment ${{ github.event.issue.number }} --body "$formatted_body" - fi \ No newline at end of file diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 9c8cbbb6..cf57ba7a 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -9,53 +9,80 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 + - uses: webiny/action-conventional-commits@v1.3.1 - run: ./scripts/generate-locale-config.sh - run: git diff --exit-code - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true + - name: Check for unused translations + run: flutter pub run translations_cleaner list-unused-terms -a - run: flutter pub get - - run: flutter gen-l10n + - name: Check if pubspec.lock is up to date + run: git diff --exit-code pubspec.lock - name: Check formatting run: dart format lib/ test/ --set-exit-if-changed - - name: Check import formatting - run: dart run import_sorter:main --no-comments --exit-if-changed - name: Check license compliance run: dart run license_checker check-licenses -c licenses.yaml --problematic - run: flutter analyze + - name: Search unused dependencies + run: | + dart pub global activate dependency_validator + dart pub global run dependency_validator + - run: dart run dart_code_linter:metrics analyze lib --reporter=github + - run: dart run dart_code_linter:metrics check-unused-code lib + - run: dart run dart_code_linter:metrics check-unused-files lib + - run: dart run dart_code_linter:metrics check-unused-l10n lib + - name: Check for commented-out Dart code with semicolons + run: | + if grep -R --include="*.dart" -nE '^[[:space:]]*//[^/<].*;[[:space:]]*$' lib/; then + echo "" + echo "❌ Found commented-out Dart code ending with semicolon." + exit 1 + fi - name: Add Firebase Messaging run: ./scripts/add-firebase-messaging.sh - run: flutter analyze - run: flutter test build_debug_apk: + needs: [ code_tests ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: "zulu" + - uses: ./.github/actions/free_up_space - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - - uses: ./.github/actions/free_up_space - uses: moonrepo/setup-rust@v1 - - run: flutter pub get - - run: flutter build apk --debug --target-platform android-arm64 + with: + cache: true + - name: Cache Gradle + uses: actions/cache@v5 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: gradle-${{ runner.os }}- + - run: ./scripts/add-firebase-messaging.sh + - run: flutter build apk --debug --target-platform android-x64 + - name: Upload Debug APK + uses: actions/upload-artifact@v7 + with: + name: debug-apk-x64 + path: build/app/outputs/flutter-apk/app-debug.apk build_debug_web: + needs: [ code_tests ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - uses: moonrepo/setup-rust@v1 - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu @@ -63,17 +90,23 @@ jobs: - name: Prepare web run: ./scripts/prepare-web.sh - run: flutter build web + - name: Upload Web Build + uses: actions/upload-artifact@v7 + with: + name: Web Build + path: build/web build_debug_linux: + needs: [ code_tests ] strategy: matrix: arch: [ x64, arm64 ] runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest'}} steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - name: Install dependencies run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y + - run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV - name: Install Flutter run: | git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git @@ -83,21 +116,107 @@ jobs: - run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }} build_debug_ios: + needs: [ code_tests ] runs-on: macos-15 steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - name: Use Xcode 16.4 run: sudo xcode-select --switch /Applications/Xcode_16.4.app - run: brew install sqlcipher - uses: moonrepo/setup-rust@v1 - - name: Add Firebase Messaging - run: | - flutter pub add fcm_shared_isolate:0.1.0 - sed -i '' 's,//,,g' lib/utils/background_push.dart + - run: ./scripts/add-firebase-messaging.sh - run: flutter pub get - run: flutter build ios --no-codesign + + integration_test: + runs-on: ubuntu-latest + timeout-minutes: 60 + needs: [ code_tests ] + strategy: + matrix: + api-level: [34] + env: + ANDROID_USER_HOME: /home/runner/.android + ANDROID_EMULATOR_HOME: /home/runner/.android + ANDROID_AVD_HOME: /home/runner/.android/avd + AVD_CONFIG_PATH: "~/.android/avd/test.avd/config.ini" + steps: + - uses: actions/checkout@v6 + - uses: ./.github/actions/free_up_space + # https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/ + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + - name: AVD cache + uses: actions/cache@v5 + id: avd-cache + with: + path: ~/.android/* + key: avd-${{ matrix.api-level }}-integration_docker + - name: create AVD and generate snapshot for caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b + with: + api-level: ${{ matrix.api-level }} + target: google_apis + arch: x86_64 + cores: 16 + ndk: 28.2.13676358 + force-avd-creation: false + disk-size: 4096M + ram-size: 4096M + sdcard-path-or-size: 4096M + emulator-options: -no-window -wipe-data -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + script: | + cat ${{ env.AVD_CONFIG_PATH }} + + sed -i.bak 's/hw.lcd.density = .*/hw.lcd.density=420/' ${{ env.AVD_CONFIG_PATH }} + sed -i.bak 's/hw.lcd.height = .*/hw.lcd.height=1920/' ${{ env.AVD_CONFIG_PATH }} + sed -i.bak 's/hw.lcd.width = .*/hw.lcd.width=1080/' ${{ env.AVD_CONFIG_PATH }} + + if ! grep -q "hw.lcd.density" ${{ env.AVD_CONFIG_PATH }} && echo "hw.lcd.density = 420" >> ${{ env.AVD_CONFIG_PATH }}; then :; fi + if ! grep -q "hw.lcd.height" ${{ env.AVD_CONFIG_PATH }} && echo "hw.lcd.height = 1920" >> ${{ env.AVD_CONFIG_PATH }}; then :; fi + if ! grep -q "hw.lcd.width" ${{ env.AVD_CONFIG_PATH }} && echo "hw.lcd.width = 1080" >> ${{ env.AVD_CONFIG_PATH }}; then :; fi + + echo "Emulator settings (${{ env.AVD_CONFIG_PATH }})" + cat ${{ env.AVD_CONFIG_PATH }} + echo "Generated AVD snapshot for caching." + - uses: subosito/flutter-action@v2 + with: + flutter-version-file: .tool_versions.yaml + cache: true + - uses: moonrepo/setup-rust@v1 + with: + cache: true + - name: Cache Gradle + uses: actions/cache@v5 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: gradle-${{ runner.os }}- + - run: ./scripts/add-firebase-messaging.sh + - name: Prepare Homeserver + run: ./scripts/prepare_integration_test.sh + - name: Integration tests + id: integration_tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: google_apis + arch: x86_64 + cores: 16 + ndk: 28.2.13676358 + force-avd-creation: false + disk-size: 4096M + ram-size: 4096M + sdcard-path-or-size: 4096M + emulator-options: -no-snapshot-save -no-window -wipe-data -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + script: flutter test integration_test/mobile_test.dart \ No newline at end of file diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 4636ce7f..a6ccda28 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -15,10 +15,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml - uses: moonrepo/setup-rust@v1 - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu - name: Prepare web @@ -40,14 +39,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: 'zulu' - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/matrix_notify.yaml b/.github/workflows/matrix_notify.yaml new file mode 100644 index 00000000..f1583f11 --- /dev/null +++ b/.github/workflows/matrix_notify.yaml @@ -0,0 +1,60 @@ +name: Matrix Notification + +on: + issues: + types: [opened] + pull_request_target: + types: [opened] + +jobs: + notify: + if: ${{ (github.event_name == 'issues' && github.event.issue.user.login != 'krille-chan') || (github.event_name == 'pull_request_target' && github.event.pull_request.user.login != 'krille-chan') }} + runs-on: ubuntu-latest + steps: + - name: Send notification to Matrix room + env: + HOMESERVER: ${{ secrets.MATRIX_HOMESERVER }} + ACCESS_TOKEN: ${{ secrets.MATRIX_ACCESS_TOKEN }} + ROOM_ID: ${{ secrets.MATRIX_ROOM_ID }} + EVENT_NAME: ${{ github.event_name }} + ISSUE_TITLE: ${{ github.event.issue.title }} + ISSUE_URL: ${{ github.event.issue.html_url }} + ISSUE_LABELS: ${{ join(github.event.issue.labels.*.name, ', ') }} + ISSUE_AUTHOR: ${{ github.event.issue.user.login }} + PR_TITLE: ${{ github.event.pull_request.title }} + PR_URL: ${{ github.event.pull_request.html_url }} + PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ', ') }} + PR_AUTHOR: ${{ github.event.pull_request.user.login }} + run: | + if [ "${EVENT_NAME}" = "issues" ]; then + EMOJI="📝" + PREFIX="New Issue" + TITLE="${ISSUE_TITLE}" + URL="${ISSUE_URL}" + LABELS="${ISSUE_LABELS}" + AUTHOR="${ISSUE_AUTHOR}" + else + EMOJI="🔀" + PREFIX="New Pull Request" + TITLE="${PR_TITLE}" + URL="${PR_URL}" + LABELS="${PR_LABELS}" + AUTHOR="${PR_AUTHOR}" + fi + + AUTHOR_URL="https://github.com/${AUTHOR}" + PLAIN="${EMOJI} ${PREFIX} by ${AUTHOR}: ${TITLE} - ${URL}" + HTML="

${EMOJI} ${PREFIX}

" + HTML="${HTML}${TITLE}
" + HTML="${HTML}👤 ${AUTHOR}" + if [ -n "${LABELS}" ]; then + HTML="${HTML}
🏷️ ${LABELS}" + fi + TXN_ID=$(date +%s%N) + + curl -s -o /dev/null -w "%{http_code}" -X PUT \ + "${HOMESERVER}/_matrix/client/v3/rooms/${ROOM_ID}/send/m.room.message/${TXN_ID}" \ + -H "Authorization: Bearer ${ACCESS_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$(jq -n --arg body "$PLAIN" --arg html "$HTML" \ + '{"msgtype":"m.notice","body":$body,"format":"org.matrix.custom.html","formatted_body":$html}')" \ No newline at end of file diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 25dab37e..133f099c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -18,13 +18,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install nodejs -y - uses: moonrepo/setup-rust@v1 - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu - run: flutter pub get @@ -36,7 +33,7 @@ jobs: - name: Create archive run: tar -czf fluffychat-web.tar.gz build/web/ - name: Upload Web Build - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Web Build path: fluffychat-web.tar.gz @@ -49,17 +46,25 @@ jobs: asset_path: fluffychat-web.tar.gz asset_name: fluffychat-web.tar.gz asset_content_type: application/gzip - - name: Install and build tailwindcss - working-directory: docs + - name: Clone fluffychat website + run: | + git clone https://github.com/krille-chan/fluffychat-website.git + cat CHANGELOG.md >> fluffychat-website/src/changelog.md + cat PRIVACY.md >> fluffychat-website/src/privacy.md + - name: Build website + working-directory: fluffychat-website run: | npm install tailwindcss @tailwindcss/cli - npx tailwindcss -o ./tailwind.css - - name: Build Website + npx tailwindcss -i ./src/styles.css -o ./src/assets/tailwind.css --minify + npx @11ty/eleventy + mv public ../ + - name: Copy FluffyChat web into it run: | - mv docs public - mv repo public || true - mv build/web/ public/web - cp public/web -r public/nightly + mkdir public/web + mkdir public/nightly + cp -r build/web/* public/web/ + cp -r build/web/* public/nightly/ + echo "fluffychat.im" >> public/CNAME - name: Deploy to GitHub Pages if: startsWith(github.ref, 'refs/tags/v') uses: peaceiris/actions-gh-pages@v4 @@ -73,14 +78,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: 'zulu' - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - name: Add Firebase Messaging run: | @@ -113,9 +113,9 @@ jobs: runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest'}} steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - name: Install dependencies run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y + - run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV - name: Install Flutter run: | git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git @@ -139,14 +139,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: 'zulu' - uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + flutter-version-file: .tool_versions.yaml cache: true - name: Set up Ruby uses: ruby/setup-ruby@v1 @@ -197,18 +192,18 @@ jobs: - name: Check out Git repository uses: actions/checkout@v6 - name: Log in to the Container registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - name: Build and push Docker image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . push: true diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml new file mode 100644 index 00000000..4d7ecce8 --- /dev/null +++ b/.github/workflows/stale.yaml @@ -0,0 +1,21 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v10 + with: + stale-issue-message: 'This issue is stale because it has been open 365 days with no activity. Remove stale label or comment or this will be closed in 30 days.' + stale-pr-message: 'This PR is stale because it has been open 365 days with no activity. Remove stale label or comment or this will be closed in 30 days.' + close-issue-message: 'This issue was closed because it has been stalled for 30 days with no activity.' + close-pr-message: 'This PR was closed because it has been stalled for 30 days with no activity.' + days-before-issue-stale: 365 + days-before-pr-stale: 365 + days-before-issue-close: 30 + days-before-pr-close: 30 + exempt-all-assignees: true + operations-per-run: 1000 \ No newline at end of file diff --git a/.github/workflows/versions.env b/.github/workflows/versions.env deleted file mode 100644 index 6d4ca00e..00000000 --- a/.github/workflows/versions.env +++ /dev/null @@ -1,2 +0,0 @@ -FLUTTER_VERSION=3.38.8 -JAVA_VERSION=17 diff --git a/.tool_versions.yaml b/.tool_versions.yaml new file mode 100644 index 00000000..a06ba450 --- /dev/null +++ b/.tool_versions.yaml @@ -0,0 +1,2 @@ +environment: + flutter: 3.41.5 # Keep in sync with snap/snapcraft.yaml \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..79ce38d3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "[dart]": { + "editor.codeActionsOnSave": [ + "source.organizeImports" + ] + } +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 989fe36f..3a4177da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,165 @@ +## v2.5.1 +Update to latest version of fcm_shared_isolate to fix push on iOS. + +## v2.5.0 +FluffyChat 2.5.0 introduces a new homeserver picker for onboarding, better image compression performance and several smaller new features, design adjustments and bug fixes. + +- feat: Add mute notification action (Christian Kußowski) +- feat: Add presetHomeserver config to enforce a homeserver for web (Christian Kußowski) +- feat: Display particle animation on login page (Christian Kußowski) +- feat: Display read receipts for every event (Christian Kußowski) +- feat: Enable audio recording on web (Christian Kußowski) +- feat: Implement low priority for rooms (Christian Kußowski) +- feat: Implement matrix native oidc (Christian Kußowski) +- feat: Implement new sign in flow (Christian Kußowski) +- feat: OIDC Login on same page (Christian Kußowski) +- feat: Reenable native imaging for all platforms (Christian Kußowski) +- feat: Remember last successful logged in homeserver (Christian Kußowski) +- Add lld to install custom dependency for Linux in README (Stephen) +- build: Add llvm-18 to packages for snap (krille-chan) +- build: Add maestro based integration tests (Christian Kußowski) +- chore(translations): Added translation using Weblate (Albanian) (Besnik Bleta) +- chore(translations): Added translation using Weblate (Kabyle) (Amadɣas) +- chore(translations): Translated using Weblate (Basque) (xabirequejo) +- chore(translations): Translated using Weblate (Catalan) (fadelkon) +- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山) +- chore(translations): Translated using Weblate (Croatian) (Milo Ivir) +- chore(translations): Translated using Weblate (Czech) (Matyáš Caras) +- chore(translations): Translated using Weblate (Danish) (Øjvind Fritjof Arnfred) +- chore(translations): Translated using Weblate (Dutch) (Jelv) +- chore(translations): Translated using Weblate (English) (Christian) +- chore(translations): Translated using Weblate (English) (SpikyBee) +- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt) +- chore(translations): Translated using Weblate (Galician) (josé m.) +- chore(translations): Translated using Weblate (Georgian) (Dimitri Tabatadze) +- chore(translations): Translated using Weblate (Georgian) (Temuri Doghonadze) +- chore(translations): Translated using Weblate (German) (Christian) +- chore(translations): Translated using Weblate (German) (Ettore Atalan) +- chore(translations): Translated using Weblate (German) (nautilusx) +- chore(translations): Translated using Weblate (Hindi) (Vishal Singh) +- chore(translations): Translated using Weblate (Indonesian) (Arif Budiman) +- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin) +- chore(translations): Translated using Weblate (Japanese) (NPL) +- chore(translations): Translated using Weblate (Japanese) (Sayaka Halton) +- chore(translations): Translated using Weblate (Kabyle) (Amadɣas) +- chore(translations): Translated using Weblate (Kabyle) (ButterflyOfFire) +- chore(translations): Translated using Weblate (Kabyle) (Christian) +- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons) +- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye) +- chore(translations): Translated using Weblate (Norwegian Bokmål) (sunniva) +- chore(translations): Translated using Weblate (Persian) (saok91) +- chore(translations): Translated using Weblate (Polish) (gredzikk) +- chore(translations): Translated using Weblate (Portuguese (Brazil)) (Logaritmica) +- chore(translations): Translated using Weblate (Russian) (-) +- chore(translations): Translated using Weblate (Russian) (Artem Pereverzev) +- chore(translations): Translated using Weblate (Russian) (mikinol) +- chore(translations): Translated using Weblate (Spanish) (Kimby) +- chore(translations): Translated using Weblate (Spanish) (SpikyBee) +- chore(translations): Translated using Weblate (Swedish) (Malva Jakobsson) +- chore(translations): Translated using Weblate (Swedish) (spinningpaprika) +- chore(translations): Translated using Weblate (Tamil) (தமிழ்நேரம்) +- chore(translations): Translated using Weblate (Ukrainian) (Andriy Kushnir) +- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk) +- chore(translations): Translated using Weblate (Uzbek) (BeMeritus) +- chore: Add config search textfield (Christian Kußowski) +- chore: Add matrix notify workflow (Christian Kußowski) +- chore: Add recommended homeservers (Christian Kußowski) +- chore: Add reset button for config viewer (Christian Kußowski) +- chore: Add support button everywhere (Christian Kußowski) +- chore: Added deeplinks to test protocol (Christian Kußowski) +- chore: Adjust avatar size and chat list item design (krille-chan) +- chore: Adjust chat input row design (Christian Kußowski) +- chore: Adjust design (Christian Kußowski) +- chore: Adjust design of navrail (Christian Kußowski) +- chore: Adjust design of space avatars and more (Christian Kußowski) +- chore: Adjust design of user viewer and popup buttons (Christian Kußowski) +- chore: Adjust join space child UX (Christian Kußowski) +- chore: Adjust paddings (krille-chan) +- chore: Adjust power level UX (Christian Kußowski) +- chore: Adjust search field design (Christian Kußowski) +- chore: Adjust status header design (Christian Kußowski) +- chore: Adjust styles and animations (Christian Kußowski) +- chore: Adjust support button design (Christian Kußowski) +- chore: Always show filter for messages (Christian Kußowski) +- chore: Avoid unnecessary lambdas (Christian Kußowski) +- chore: Better context menu for space children (Christian Kußowski) +- chore: bump ios version (ShootingStarDragons) +- chore: Check conventional commits in CI (krille-chan) +- chore: Check if pubspec.lock is up to date in CI (Christian Kußowski) +- chore: Check of unused localizations (Christian Kußowski) +- chore: Clean up pages build (Christian Kußowski) +- chore: Display spaces filter chip when spaces present even without children (Christian Kußowski) +- chore: Execute dart code linter in CI (Christian Kußowski) +- chore: Exempt assignees from stale (Christian Kußowski) +- chore: Fix oidc login on web (Christian Kußowski) +- chore: Give issues and PRs more time for stale (Christian Kußowski) +- chore: Hide homepage button if not preset (Christian Kußowski) +- chore: Hide status list by default (Christian Kußowski) +- chore: Implement pick SSO provider from dialog and add tchncs.de (Christian Kußowski) +- chore: Introduce tool versions file (Christian Kußowski) +- chore: Login with localhost (Christian Kußowski) +- chore: Make banner light red (Christian Kußowski) +- chore: Make key fingerprints in chat encryption page selectable (Christian Kußowski) +- chore: make sendTimelineEventTimeout configurable (Christian Kußowski) +- chore: Make unread bubble full round (Christian Kußowski) +- chore: Move file cache to subdirectory (Christian Kußowski) +- chore: Move show image viewer one step up (Christian Kußowski) +- chore: Move website back to fluffychat.im (Christian Kußowski) +- chore: Only show confirm dialog once (Christian Kußowski) +- chore: Put oidc behind a feature flag until fixed (Christian Kußowski) +- chore: Remove converser from recommended homeservers as it doesn't have open registration (Christian Kußowski) +- chore: Remove frei.chat from homeserver list (Christian Kußowski) +- chore: Remove web notification custom sound (Christian Kußowski) +- chore: Replace duplicate check for stale bot (Christian Kußowski) +- chore: Retry sign in tap in tests (Christian Kußowski) +- chore: Run matrix notification in pull request target (Christian Kußowski) +- chore: Sanitize hash param for oidc (Christian Kußowski) +- chore: Set erase flag true on account deactivation (krille-chan) +- chore: Set operations per run to 1000 (krille-chan) +- chore: Skip matrix notify for events from myself (Christian Kußowski) +- chore: Update locale config (Christian Kußowski) +- chore: Update matrix ID localization (Christian Kußowski) +- chore: Update recommended homeservers (Christian Kußowski) +- chore: Update redirect android scheme (Christian Kußowski) +- chore: Use fixed version of fcm shared isolate (Christian Kußowski) +- fix: Add app id to TileLayer user agent (Vespe-r) +- fix: Add missing @@locale (Krille-chan) +- fix: Audioplayer on web buggy (Christian Kußowski) +- fix: build failed on archlinux (ShootingStarDragons) +- fix: Do not cancel notification on reply (Christian Kußowski) +- fix: Do not display formatted body if body is just filename (Christian Kußowski) +- fix: Do not route to backup on soft logout (Christian Kußowski) +- fix: Edit space child button opens space details page and not space child details page (Christian Kußowski) +- fix: Fix formatting of messages with newlines (Philip Fritzsche) +- fix: get correct aspect ratio from VideoPlayerController (Matias) +- fix: Join room by alias even if not found (Christian Kußowski) +- fix: Open deep links (Christian Kußowski) +- fix: Receipt row not auto updating (Christian Kußowski) +- fix: Receipts disappear after reaction (Christian Kußowski) +- fix: Reply voice message displays a broken html body (Christian Kußowski) +- fix: Send reply to voice messages (Christian Kußowski) +- fix: Set mimetype for video player on web (Christian Kußowski) +- fix: Use correct own person for android notification replies (Christian Kußowski) +- fix: Wrong placeholder in kab (Christian Kußowski) +- refactor: Add Flutter lints (Christian Kußowski) +- refactor: Add more linter rules (Christian Kußowski) +- refactor: Add more stricter lints (Christian Kußowski) +- refactor: Avoid redundant async (Christian Kußowski) +- refactor: Avoid unnecessary bool comparison (Christian Kußowski) +- refactor: Better UX for create space children (Christian Kußowski) +- refactor: Disable custom image resizer for macOS and windows (Christian Kußowski) +- refactor: Do show message bubble even for big emotes (Christian Kußowski) +- refactor: Enable avoid-returning-widgets lint (Christian Kußowski) +- refactor: Enable more strict lints (Christian Kußowski) +- refactor: Enable rule avoid dynamic (Christian Kußowski) +- refactor: Make file events more fail safe for failed to send (Christian Kußowski) +- refactor: Remove animation dependency (Christian Kußowski) +- refactor: Remove unused localizations (Christian Kußowski) +- refactor: Remove unused translations (Christian Kußowski) +- refactor: Use getCryptoIdentityState to check backup state (krille-chan) +- refactor: Use more robust and performant way to detect single emoji messages (Christian Kußowski) +- refactor: Use native uri data from bytes instead of html (Christian Kußowski) + ## v2.4.0 FluffyChat 2.4.0 adds a new improved GUI for managing stickers with tutorials how to easily add your own sticker packs. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c192cc4..b1321195 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,9 +11,8 @@ To improve the process please make sure that you read the following guidelines c 4. Every Pull Request should change only one thing. For bigger changes it is often better to split them up in multiple Pull Requests. 5. [Sign your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits). 6. Format the commit message as [Conventional Commits](https://www.conventionalcommits.org). -7. Format (`flutter format lib`) and sort impots (`dart run import_sorter:main --no-comments`) in all code files. -8. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined. -9. Prefer simple and easy to maintain solutions over complexity and fancy ones. +7. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined. +8. Prefer simple and easy to maintain solutions over complexity and fancy ones. # Code Style diff --git a/README.md b/README.md index c45db560..50fccbfc 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ flutter build web --release #### Install custom dependencies (Linux) ```bash -sudo apt install libjsoncpp1 libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.0-dev +sudo apt install libjsoncpp1 libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.0-dev lld ``` * Build with one of these: @@ -106,6 +106,20 @@ flutter build windows --release flutter build macos --release ``` +## How to run integration tests + +You need to have docker installed locally! Run the preparation script before every test run: + +```sh +./scripts/prepare_integration_test.sh +``` + +Then run all tests with: + +```sh +flutter test integration_test/mobile_test.dart +``` + # Special thanks diff --git a/analysis_options.yaml b/analysis_options.yaml index 835b6a61..a2bf618f 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -2,7 +2,7 @@ include: package:flutter_lints/flutter.yaml linter: rules: - - camel_case_types + - directives_ordering - avoid_print - constant_identifier_names - prefer_final_locals @@ -10,10 +10,67 @@ linter: - sort_pub_dependencies - require_trailing_commas - omit_local_variable_types + - cancel_subscriptions + - always_declare_return_types + - avoid_void_async + - no_adjacent_strings_in_list + - test_types_in_equals + - throw_in_finally + - unnecessary_statements + - avoid_bool_literals_in_conditional_expressions + - prefer_single_quotes + - prefer_const_declarations + - unnecessary_lambdas + - combinators_ordering + - noop_primitive_operations + - unnecessary_null_checks + - unnecessary_null_in_if_null_operators + - unnecessary_to_list_in_spreads + - use_is_even_rather_than_modulo + - use_super_parameters + # Flutter specific: + - use_colored_box analyzer: + plugins: + - dart_code_linter errors: todo: ignore - use_build_context_synchronously: ignore exclude: - lib/l10n/*.dart + +dart_code_linter: + rules: + # Dart specific: + - avoid-dynamic + - avoid-redundant-async + - avoid-unnecessary-type-assertions + - avoid-unnecessary-type-casts + - avoid-unrelated-type-assertions + - no-equal-then-else + - prefer-first + - prefer-last + - prefer-immediate-return + - prefer-enums-by-name + - avoid-unnecessary-conditionals + # TODO: + # - member-ordering + # - avoid-global-state + # - prefer-match-file-name + # - avoid-banned-imports: + # entries: + # - paths: ['some/folder/.*\.dart', 'another/folder/.*\.dart'] + # deny: ['package:flutter/material.dart'] + # message: 'Do not import Flutter Material Design library, we should not depend on it!' + # - no-magic-number: + # allowed: [-1, 0, 1,2,4,6,8,12,16,32,40,56,64] + # allow-only-once: true + # Flutter specific: + - prefer-media-query-direct-access + - avoid-wrapping-in-padding + - prefer-correct-edge-insets-constructor + - avoid-returning-widgets + # TODO: + # - prefer-single-widget-per-file: + # ignore-private-widgets: true + # - prefer-extracting-callbacks diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 1b3f5182..81733047 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -106,7 +106,7 @@ - + diff --git a/android/app/src/main/res/xml/locale_config.xml b/android/app/src/main/res/xml/locale_config.xml index 130debff..03c69a69 100644 --- a/android/app/src/main/res/xml/locale_config.xml +++ b/android/app/src/main/res/xml/locale_config.xml @@ -30,6 +30,7 @@ + diff --git a/android/fastlane/metadata/android/en-US/changelogs/default.txt b/android/fastlane/metadata/android/en-US/changelogs/default.txt index 5eed864e..82538b07 100644 --- a/android/fastlane/metadata/android/en-US/changelogs/default.txt +++ b/android/fastlane/metadata/android/en-US/changelogs/default.txt @@ -1,4 +1,3 @@ -FluffyChat 2.4.0 adds a new improved GUI for managing stickers with tutorials how to -easily add your own sticker packs. -It also improves the search and image gallery in chats, especially encrypted chats. -Besides that this update comes with a lot of fixes and improvements under the hood. \ No newline at end of file +FluffyChat 2.5.0 introduces a new homeserver picker for onboarding, +better image compression performance and several smaller new features, +design adjustments and bug fixes. \ No newline at end of file diff --git a/config.sample.json b/config.sample.json index 5aa0a4bb..a1ea6f6f 100644 --- a/config.sample.json +++ b/config.sample.json @@ -1,6 +1,8 @@ { "applicationName": "FluffyChat", "defaultHomeserver": "matrix.org", + "presetHomeserver": "", + "welcomeText": "", "privacyUrl": "https://github.com/krille-chan/fluffychat/blob/main/PRIVACY.md", "audioRecordingNumChannels": 1, "audioRecordingAutoGain": true, diff --git a/dart_dependency_validator.yaml b/dart_dependency_validator.yaml new file mode 100644 index 00000000..3655d235 --- /dev/null +++ b/dart_dependency_validator.yaml @@ -0,0 +1,3 @@ +ignore: + - handy_window + - sqlcipher_flutter_libs \ No newline at end of file diff --git a/docs/.well-known/org.flathub.VerifiedApps.txt b/docs/.well-known/org.flathub.VerifiedApps.txt deleted file mode 100644 index a9a5eb47..00000000 --- a/docs/.well-known/org.flathub.VerifiedApps.txt +++ /dev/null @@ -1,2 +0,0 @@ -# im.fluffychat.Fluffychat -8b25b37b-f160-4350-b4f6-9a04554e8f9e \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index e5974b53..00000000 --- a/docs/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Redirecting to fluffy.chat - - - - - -

- Redirecting... -

-

Note: If your browser does not redirect you, please use this link: -

- https://fluffy.chat - - - \ No newline at end of file diff --git a/integration_test/app_test.dart b/integration_test/app_test.dart deleted file mode 100644 index 3a013936..00000000 --- a/integration_test/app_test.dart +++ /dev/null @@ -1,187 +0,0 @@ -import 'package:fluffychat/pages/chat/chat_view.dart'; -import 'package:fluffychat/pages/chat_list/chat_list_body.dart'; -import 'package:fluffychat/pages/chat_list/search_title.dart'; -import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart'; - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; - -import 'package:fluffychat/main.dart' as app; -import 'package:shared_preferences/shared_preferences.dart'; - -import 'extensions/default_flows.dart'; -import 'extensions/wait_for.dart'; -import 'users.dart'; - -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - - group( - 'Integration Test', - () { - setUpAll( - () async { - // this random dialog popping up is super hard to cover in tests - SharedPreferences.setMockInitialValues({ - 'chat.fluffy.show_no_google': false, - }); - }, - ); - - testWidgets( - 'Start app, login and logout', - (WidgetTester tester) async { - app.main(); - await tester.ensureAppStartedHomescreen(); - await tester.ensureLoggedOut(); - }, - ); - - testWidgets( - 'Login again', - (WidgetTester tester) async { - app.main(); - await tester.ensureAppStartedHomescreen(); - }, - ); - - testWidgets( - 'Start chat and send message', - (WidgetTester tester) async { - app.main(); - await tester.ensureAppStartedHomescreen(); - await tester.waitFor(find.byType(TextField)); - await tester.enterText(find.byType(TextField), Users.user2.name); - await tester.pumpAndSettle(); - - await tester.scrollUntilVisible( - find.text('Chats').first, - 500, - scrollable: find - .descendant( - of: find.byType(ChatListViewBody), - matching: find.byType(Scrollable), - ) - .first, - ); - await tester.pumpAndSettle(); - await tester.tap(find.text('Chats')); - await tester.pumpAndSettle(); - await tester.waitFor(find.byType(SearchTitle)); - await tester.pumpAndSettle(); - - await tester.scrollUntilVisible( - find.text(Users.user2.name).first, - 500, - scrollable: find - .descendant( - of: find.byType(ChatListViewBody), - matching: find.byType(Scrollable), - ) - .first, - ); - await tester.pumpAndSettle(); - await tester.tap(find.text(Users.user2.name).first); - - try { - await tester.waitFor( - find.byType(ChatView), - timeout: const Duration(seconds: 5), - ); - } catch (_) { - // in case the homeserver sends the username as search result - if (find.byIcon(Icons.send_outlined).evaluate().isNotEmpty) { - await tester.tap(find.byIcon(Icons.send_outlined)); - await tester.pumpAndSettle(); - } - } - - await tester.waitFor(find.byType(ChatView)); - await tester.enterText(find.byType(TextField).last, 'Test'); - await tester.pumpAndSettle(); - try { - await tester.waitFor(find.byIcon(Icons.send_outlined)); - await tester.tap(find.byIcon(Icons.send_outlined)); - } catch (_) { - await tester.testTextInput.receiveAction(TextInputAction.done); - } - await tester.pumpAndSettle(); - await tester.waitFor(find.text('Test')); - await tester.pumpAndSettle(); - }, - ); - - testWidgets('Spaces', (tester) async { - app.main(); - await tester.ensureAppStartedHomescreen(); - - await tester.waitFor(find.byTooltip('Show menu')); - await tester.tap(find.byTooltip('Show menu')); - await tester.pumpAndSettle(); - - await tester.waitFor(find.byIcon(Icons.workspaces_outlined)); - await tester.tap(find.byIcon(Icons.workspaces_outlined)); - await tester.pumpAndSettle(); - - await tester.waitFor(find.byType(TextField)); - await tester.enterText(find.byType(TextField).last, 'Test Space'); - await tester.pumpAndSettle(); - - await tester.testTextInput.receiveAction(TextInputAction.done); - await tester.pumpAndSettle(); - - await tester.waitFor(find.text('Invite contact')); - - await tester.tap(find.text('Invite contact')); - await tester.pumpAndSettle(); - - await tester.waitFor( - find.descendant( - of: find.byType(InvitationSelectionView), - matching: find.byType(TextField), - ), - ); - await tester.enterText( - find.descendant( - of: find.byType(InvitationSelectionView), - matching: find.byType(TextField), - ), - Users.user2.name, - ); - - await Future.delayed(const Duration(milliseconds: 250)); - await tester.testTextInput.receiveAction(TextInputAction.done); - - await Future.delayed(const Duration(milliseconds: 1000)); - await tester.pumpAndSettle(); - - await tester.tap( - find - .descendant( - of: find.descendant( - of: find.byType(InvitationSelectionView), - matching: find.byType(ListTile), - ), - matching: find.text(Users.user2.name), - ) - .last, - ); - await tester.pumpAndSettle(); - - await tester.waitFor(find.maybeUppercaseText('Yes')); - await tester.tap(find.maybeUppercaseText('Yes')); - await tester.pumpAndSettle(); - - await tester.tap(find.byTooltip('Back')); - await tester.pumpAndSettle(); - - await tester.waitFor(find.text('Load 2 more participants')); - await tester.tap(find.text('Load 2 more participants')); - await tester.pumpAndSettle(); - - expect(find.text(Users.user2.name), findsOneWidget); - }); - }, - ); -} diff --git a/integration_test/data/environment_constants.dart b/integration_test/data/environment_constants.dart new file mode 100644 index 00000000..57e8f20a --- /dev/null +++ b/integration_test/data/environment_constants.dart @@ -0,0 +1,14 @@ +const homeserver = String.fromEnvironment( + 'HOMESERVER', + defaultValue: '10.0.2.2', +); +const user1Name = String.fromEnvironment('USER1_NAME', defaultValue: 'alice'); +const user1Pw = String.fromEnvironment( + 'USER1_PW', + defaultValue: 'AliceInWonderland', +); +const user2Name = String.fromEnvironment('USER2_NAME', defaultValue: 'bob'); +const user2Pw = String.fromEnvironment( + 'USER2_PW', + defaultValue: 'JoWirSchaffenDas', +); diff --git a/integration_test/data/integration_users.env b/integration_test/data/integration_users.env new file mode 100644 index 00000000..455ce847 --- /dev/null +++ b/integration_test/data/integration_users.env @@ -0,0 +1,5 @@ +HOMESERVER=localhost +USER1_NAME=alice +USER1_PW=AliceInWonderland +USER2_NAME=bob +USER2_PW=JoWirSchaffenDas \ No newline at end of file diff --git a/integration_test/dendrite/data/dendrite.yaml b/integration_test/dendrite/data/dendrite.yaml deleted file mode 100644 index f1e95fd4..00000000 --- a/integration_test/dendrite/data/dendrite.yaml +++ /dev/null @@ -1,327 +0,0 @@ -# This is the Dendrite configuration file. -# -# The configuration is split up into sections - each Dendrite component has a -# configuration section, in addition to the "global" section which applies to -# all components. - -# The version of the configuration file. -version: 2 - -# Global Matrix configuration. This configuration applies to all components. -global: - # The domain name of this homeserver. - server_name: localhost - - # The path to the signing private key file, used to sign requests and events. - # Note that this is NOT the same private key as used for TLS! To generate a - # signing key, use "./bin/generate-keys --private-key matrix_key.pem". - private_key: matrix_key.pem - - # The paths and expiry timestamps (as a UNIX timestamp in millisecond precision) - # to old signing private keys that were formerly in use on this domain. These - # keys will not be used for federation request or event signing, but will be - # provided to any other homeserver that asks when trying to verify old events. - old_private_keys: - # - private_key: old_matrix_key.pem - # expired_at: 1601024554498 - - # How long a remote server can cache our server signing key before requesting it - # again. Increasing this number will reduce the number of requests made by other - # servers for our key but increases the period that a compromised key will be - # considered valid by other homeservers. - key_validity_period: 168h0m0s - - # Global database connection pool, for PostgreSQL monolith deployments only. If - # this section is populated then you can omit the "database" blocks in all other - # sections. For polylith deployments, or monolith deployments using SQLite databases, - # you must configure the "database" block for each component instead. - database: - connection_string: - max_open_conns: - max_idle_conns: - conn_max_lifetime: - - # Configuration for in-memory caches. Caches can often improve performance by - # keeping frequently accessed items (like events, identifiers etc.) in memory - # rather than having to read them from the database. - cache: - # The estimated maximum size for the global cache in bytes, or in terabytes, - # gigabytes, megabytes or kilobytes when the appropriate 'tb', 'gb', 'mb' or - # 'kb' suffix is specified. Note that this is not a hard limit, nor is it a - # memory limit for the entire process. A cache that is too small may ultimately - # provide little or no benefit. - max_size_estimated: 1gb - - # The maximum amount of time that a cache entry can live for in memory before - # it will be evicted and/or refreshed from the database. Lower values result in - # easier admission of new cache entries but may also increase database load in - # comparison to higher values, so adjust conservatively. Higher values may make - # it harder for new items to make it into the cache, e.g. if new rooms suddenly - # become popular. - max_age: 1h - - # The server name to delegate server-server communications to, with optional port - # e.g. localhost:443 - well_known_server_name: "" - - # Lists of domains that the server will trust as identity servers to verify third - # party identifiers such as phone numbers and email addresses. - trusted_third_party_id_servers: - - matrix.org - - vector.im - - # Disables federation. Dendrite will not be able to communicate with other servers - # in the Matrix federation and the federation API will not be exposed. - disable_federation: false - - # Configures the handling of presence events. Inbound controls whether we receive - # presence events from other servers, outbound controls whether we send presence - # events for our local users to other servers. - presence: - enable_inbound: false - enable_outbound: false - - # Configures phone-home statistics reporting. These statistics contain the server - # name, number of active users and some information on your deployment config. - # We use this information to understand how Dendrite is being used in the wild. - report_stats: - enabled: false - endpoint: https://matrix.org/report-usage-stats/push - - # Server notices allows server admins to send messages to all users on the server. - server_notices: - enabled: false - # The local part, display name and avatar URL (as a mxc:// URL) for the user that - # will send the server notices. These are visible to all users on the deployment. - local_part: "_server" - display_name: "Server Alerts" - avatar_url: "" - # The room name to be used when sending server notices. This room name will - # appear in user clients. - room_name: "Server Alerts" - - # Configuration for NATS JetStream - jetstream: - # A list of NATS Server addresses to connect to. If none are specified, an - # internal NATS server will be started automatically when running Dendrite in - # monolith mode. For polylith deployments, it is required to specify the address - # of at least one NATS Server node. - addresses: - # - localhost:4222 - - # Persistent directory to store JetStream streams in. This directory should be - # preserved across Dendrite restarts. - storage_path: ./ - - # The prefix to use for stream names for this homeserver - really only useful - # if you are running more than one Dendrite server on the same NATS deployment. - topic_prefix: Dendrite - - # Configuration for Prometheus metric collection. - metrics: - enabled: false - basic_auth: - username: metrics - password: metrics - - # Optional DNS cache. The DNS cache may reduce the load on DNS servers if there - # is no local caching resolver available for use. - dns_cache: - enabled: false - cache_size: 256 - cache_lifetime: "5m" # 5 minutes; https://pkg.go.dev/time@master#ParseDuration - -# Configuration for the Appservice API. -app_service_api: - database: - connection_string: file:app_service_api.db - - # Disable the validation of TLS certificates of appservices. This is - # not recommended in production since it may allow appservice traffic - # to be sent to an insecure endpoint. - disable_tls_validation: true - - # Appservice configuration files to load into this homeserver. - config_files: - # - /path/to/appservice_registration.yaml - -# Configuration for the Client API. -client_api: - # Prevents new users from being able to register on this homeserver, except when - # using the registration shared secret below. - registration_disabled: false - - # Prevents new guest accounts from being created. Guest registration is also - # disabled implicitly by setting 'registration_disabled' above. - guests_disabled: true - - # If set, allows registration by anyone who knows the shared secret, regardless - # of whether registration is otherwise disabled. - registration_shared_secret: "" - - # Whether to require reCAPTCHA for registration. If you have enabled registration - # then this is HIGHLY RECOMMENDED to reduce the risk of your homeserver being used - # for coordinated spam attacks. - enable_registration_captcha: false - - # Settings for ReCAPTCHA. - recaptcha_public_key: "" - recaptcha_private_key: "" - recaptcha_bypass_secret: "" - recaptcha_siteverify_api: "" - - # TURN server information that this homeserver should send to clients. - turn: - turn_user_lifetime: "" - turn_uris: - # - turn:turn.server.org?transport=udp - # - turn:turn.server.org?transport=tcp - turn_shared_secret: "" - turn_username: "" - turn_password: "" - - # Settings for rate-limited endpoints. Rate limiting kicks in after the threshold - # number of "slots" have been taken by requests from a specific host. Each "slot" - # will be released after the cooloff time in milliseconds. Server administrators - # and appservice users are exempt from rate limiting by default. - rate_limiting: - enabled: true - threshold: 5 - cooloff_ms: 500 - exempt_user_ids: - # - "@user:domain.com" - -# Configuration for the Federation API. -federation_api: - database: - connection_string: file:federation_api.db - - # How many times we will try to resend a failed transaction to a specific server. The - # backoff is 2**x seconds, so 1 = 2 seconds, 2 = 4 seconds, 3 = 8 seconds etc. Once - # the max retries are exceeded, Dendrite will no longer try to send transactions to - # that server until it comes back to life and connects to us again. - send_max_retries: 16 - - # Disable the validation of TLS certificates of remote federated homeservers. Do not - # enable this option in production as it presents a security risk! - disable_tls_validation: false - - # Perspective keyservers to use as a backup when direct key fetches fail. This may - # be required to satisfy key requests for servers that are no longer online when - # joining some rooms. - key_perspectives: - - server_name: matrix.org - keys: - - key_id: ed25519:auto - public_key: Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw - - key_id: ed25519:a_RXGa - public_key: l8Hft5qXKn1vfHrg3p4+W8gELQVo8N13JkluMfmn2sQ - - # This option will control whether Dendrite will prefer to look up keys directly - # or whether it should try perspective servers first, using direct fetches as a - # last resort. - prefer_direct_fetch: false - -# Configuration for the Media API. -media_api: - database: - connection_string: file:media_api.db - - # Storage path for uploaded media. May be relative or absolute. - base_path: ./media_store - - # The maximum allowed file size (in bytes) for media uploads to this homeserver - # (0 = unlimited). If using a reverse proxy, ensure it allows requests at least - #this large (e.g. the client_max_body_size setting in nginx). - max_file_size_bytes: 10485760 - - # Whether to dynamically generate thumbnails if needed. - dynamic_thumbnails: false - - # The maximum number of simultaneous thumbnail generators to run. - max_thumbnail_generators: 10 - - # A list of thumbnail sizes to be generated for media content. - thumbnail_sizes: - - width: 32 - height: 32 - method: crop - - width: 96 - height: 96 - method: crop - - width: 640 - height: 480 - method: scale - -# Configuration for enabling experimental MSCs on this homeserver. -mscs: - database: - connection_string: file:mscs.db - mscs: - # - msc2836 # (Threading, see https://github.com/matrix-org/matrix-doc/pull/2836) - # - msc2946 # (Spaces Summary, see https://github.com/matrix-org/matrix-doc/pull/2946) - -# Configuration for the Sync API. -sync_api: - # This option controls which HTTP header to inspect to find the real remote IP - # address of the client. This is likely required if Dendrite is running behind - # a reverse proxy server. - # real_ip_header: X-Real-IP - database: - connection_string: file:sync_api.db - -key_server: - database: - connection_string: file:key_server.db - -room_server: - database: - connection_string: file:room_server.db - - -# Configuration for the User API. -user_api: - account_database: - connection_string: file:user_api.db - - # The cost when hashing passwords on registration/login. Default: 10. Min: 4, Max: 31 - # See https://pkg.go.dev/golang.org/x/crypto/bcrypt for more information. - # Setting this lower makes registration/login consume less CPU resources at the cost - # of security should the database be compromised. Setting this higher makes registration/login - # consume more CPU resources but makes it harder to brute force password hashes. This value - # can be lowered if performing tests or on embedded Dendrite instances (e.g WASM builds). - bcrypt_cost: 10 - - # The length of time that a token issued for a relying party from - # /_matrix/client/r0/user/{userId}/openid/request_token endpoint - # is considered to be valid in milliseconds. - # The default lifetime is 3600000ms (60 minutes). - # openid_token_lifetime_ms: 3600000 - -# Configuration for Opentracing. -# See https://github.com/matrix-org/dendrite/tree/master/docs/tracing for information on -# how this works and how to set it up. -tracing: - enabled: false - jaeger: - serviceName: "" - disabled: false - rpc_metrics: false - tags: [] - sampler: null - reporter: null - headers: null - baggage_restrictions: null - throttler: null - -# Logging configuration. The "std" logging type controls the logs being sent to -# stdout. The "file" logging type controls logs being written to a log folder on -# the disk. Supported log levels are "debug", "info", "warn", "error". -logging: - - type: std - level: info - - type: file - level: info - params: - path: ./logs - diff --git a/integration_test/extensions/default_flows.dart b/integration_test/extensions/default_flows.dart deleted file mode 100644 index 051d14b8..00000000 --- a/integration_test/extensions/default_flows.dart +++ /dev/null @@ -1,165 +0,0 @@ -import 'dart:developer'; - -import 'package:fluffychat/pages/chat_list/chat_list_body.dart'; -import 'package:fluffychat/pages/intro/intro_page.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../users.dart'; -import 'wait_for.dart'; - -extension DefaultFlowExtensions on WidgetTester { - Future login() async { - final tester = this; - - await tester.pumpAndSettle(); - - await tester.waitFor(find.text('Let\'s start')); - - expect(find.text('Let\'s start'), findsOneWidget); - - final input = find.byType(TextField); - - expect(input, findsOneWidget); - - // getting the placeholder in place - await tester.tap(find.byIcon(Icons.search)); - await tester.pumpAndSettle(); - await tester.enterText(input, homeserver); - await tester.pumpAndSettle(); - await tester.testTextInput.receiveAction(TextInputAction.done); - await tester.pumpAndSettle(); - - // in case registration is allowed - // try { - await Future.delayed(const Duration(milliseconds: 50)); - - await tester.scrollUntilVisible( - find.text('Login'), - 500, - scrollable: find.descendant( - of: find.byKey(const Key('ConnectPageListView')), - matching: find.byType(Scrollable).first, - ), - ); - await tester.pumpAndSettle(); - - await tester.tap(find.text('Login')); - await tester.pumpAndSettle(); - /*} catch (e) { - log('Registration is not allowed. Proceeding with login...'); - }*/ - await tester.pumpAndSettle(); - - await Future.delayed(const Duration(milliseconds: 50)); - - final inputs = find.byType(TextField); - - await tester.enterText(inputs.first, Users.user1.name); - await tester.enterText(inputs.last, Users.user1.password); - await tester.pumpAndSettle(); - await tester.testTextInput.receiveAction(TextInputAction.done); - - try { - // pumpAndSettle does not work in here as setState is called - // asynchronously - await tester.waitFor( - find.byType(LinearProgressIndicator), - timeout: const Duration(milliseconds: 1500), - skipPumpAndSettle: true, - ); - } catch (_) { - // in case the input action does not work on the desired platform - if (find.text('Login').evaluate().isNotEmpty) { - await tester.tap(find.text('Login')); - } - } - - try { - await tester.pumpAndSettle(); - } catch (_) { - // may fail because of ongoing animation below dialog - } - - await tester.waitFor( - find.byType(ChatListViewBody), - skipPumpAndSettle: true, - ); - } - - /// ensure PushProvider check passes - Future acceptPushWarning() async { - final tester = this; - - final matcher = find.maybeUppercaseText('Do not show again'); - - try { - await tester.waitFor(matcher, timeout: const Duration(seconds: 5)); - - // the FCM push error dialog to be handled... - await tester.tap(matcher); - await tester.pumpAndSettle(); - } catch (_) {} - } - - Future ensureLoggedOut() async { - final tester = this; - await tester.pumpAndSettle(); - if (find.byType(ChatListViewBody).evaluate().isNotEmpty) { - await tester.tap(find.byTooltip('Show menu')); - await tester.pumpAndSettle(); - await tester.tap(find.text('Settings')); - await tester.pumpAndSettle(); - await tester.scrollUntilVisible( - find.text('Account'), - 500, - scrollable: find.descendant( - of: find.byKey(const Key('SettingsListViewContent')), - matching: find.byType(Scrollable), - ), - ); - await tester.pumpAndSettle(); - await tester.tap(find.text('Logout')); - await tester.pumpAndSettle(); - await tester.tap(find.maybeUppercaseText('Yes')); - await tester.pumpAndSettle(); - } - } - - Future ensureAppStartedHomescreen({ - Duration timeout = const Duration(seconds: 20), - }) async { - final tester = this; - await tester.pumpAndSettle(); - - final homeserverPickerFinder = find.byType(IntroPage); - final chatListFinder = find.byType(ChatListViewBody); - - final end = DateTime.now().add(timeout); - - log( - 'Waiting for HomeserverPicker or ChatListViewBody...', - name: 'Test Runner', - ); - do { - if (DateTime.now().isAfter(end)) { - throw Exception( - 'Timed out waiting for HomeserverPicker or ChatListViewBody', - ); - } - - await pumpAndSettle(); - await Future.delayed(const Duration(milliseconds: 100)); - } while (homeserverPickerFinder.evaluate().isEmpty && - chatListFinder.evaluate().isEmpty); - - if (homeserverPickerFinder.evaluate().isNotEmpty) { - log('Found HomeserverPicker, performing login.', name: 'Test Runner'); - await tester.login(); - } else { - log('Found ChatListViewBody, skipping login.', name: 'Test Runner'); - } - - await tester.acceptPushWarning(); - } -} diff --git a/integration_test/extensions/wait_for.dart b/integration_test/extensions/wait_for.dart deleted file mode 100644 index cfd9d649..00000000 --- a/integration_test/extensions/wait_for.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; - -/// Workaround for https://github.com/flutter/flutter/issues/88765 -extension WaitForExtension on WidgetTester { - Future waitFor( - Finder finder, { - Duration timeout = const Duration(seconds: 20), - bool skipPumpAndSettle = false, - }) async { - final end = DateTime.now().add(timeout); - - do { - if (DateTime.now().isAfter(end)) { - throw Exception('Timed out waiting for $finder'); - } - - if (!skipPumpAndSettle) { - await pumpAndSettle(); - } - await Future.delayed(const Duration(milliseconds: 100)); - } while (finder.evaluate().isEmpty); - } -} - -extension MaybeUppercaseFinder on CommonFinders { - /// On Android some button labels are in uppercase while on iOS they - /// are not. This method tries both. - Finder maybeUppercaseText( - String text, { - bool findRichText = false, - bool skipOffstage = true, - }) { - try { - final finder = find.text( - text.toUpperCase(), - findRichText: findRichText, - skipOffstage: skipOffstage, - ); - expect(finder, findsOneWidget); - return finder; - } catch (_) { - return find.text( - text, - findRichText: findRichText, - skipOffstage: skipOffstage, - ); - } - } -} diff --git a/integration_test/flows/auth_flows.dart b/integration_test/flows/auth_flows.dart new file mode 100644 index 00000000..d5aebf91 --- /dev/null +++ b/integration_test/flows/auth_flows.dart @@ -0,0 +1,49 @@ +import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../data/environment_constants.dart'; +import '../utils/fluffy_chat_tester.dart'; + +Future finalLogout(WidgetTester widgetTester) => + widgetTester.startFluffyChatTest().then((tester) => tester.logout()); + +extension AuthFlows on FluffyChatTester { + Future login() async { + await waitFor('Sign in'); + await tapOn('Sign in'); + await enterText(TextField, 'http://$homeserver', index: 0); + await tapOn(RadioListTile, index: 0); + await tapOn('Continue'); + await waitFor('Log in to http://$homeserver'); + await enterText(TextField, user1Name, index: 0); + await enterText(TextField, user1Pw, index: 1); + await tapOn('Login'); + } + + Future logout() async { + await ensureLoggedIn(); + await tapOn(Key('accounts_and_settings_buttons')); + await tapOn('Settings'); + await scrollUntilVisible('Logout'); + await tapOn('Logout'); + await tapOn(Key('ok_cancel_alert_dialog_ok_button')); + await waitFor('Sign in'); + } + + Future skipNoNotificationsDialog() async { + if (await isVisible('Push notifications not available')) { + await tapOn('Do not show again'); + } + } + + Future ensureLoggedIn() async { + if (await isVisible('Sign in') == false) return false; + + await login(); + await tapOn(CloseButton); + await tapOn('Skip'); + await skipNoNotificationsDialog(); + return true; + } +} diff --git a/integration_test/flows/basic_messaging.dart b/integration_test/flows/basic_messaging.dart new file mode 100644 index 00000000..c0c2547c --- /dev/null +++ b/integration_test/flows/basic_messaging.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../utils/fluffy_chat_tester.dart'; +import 'auth_flows.dart'; +import 'chat_flows.dart'; + +Future basicMessaging(WidgetTester widgetTester) => widgetTester + .startFluffyChatTest() + .then((tester) => tester._basicMessaging()); + +extension on FluffyChatTester { + Future _basicMessaging() async { + await ensureLoggedIn(); + await ensureGroupChatCreated(); + + await tapOn(ChatFlows.groupChatName); + const testMessage = 'Hello from integration test!'; + await enterText(Key('chat_input_field'), testMessage); + await tapOn(Key('send_button')); + await waitFor(testMessage); + } +} diff --git a/integration_test/flows/chat_flows.dart b/integration_test/flows/chat_flows.dart new file mode 100644 index 00000000..512a6af2 --- /dev/null +++ b/integration_test/flows/chat_flows.dart @@ -0,0 +1,35 @@ +import 'package:fluffychat/pages/chat_list/chat_list.dart'; +import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../utils/fluffy_chat_tester.dart'; +import 'auth_flows.dart'; + +Future archiveChats(WidgetTester widgetTester) => + widgetTester.startFluffyChatTest().then((tester) => tester._archiveChats()); + +extension ChatFlows on FluffyChatTester { + static const String groupChatName = 'Test Group 01'; + + Future ensureGroupChatCreated() async { + if (await isVisible(groupChatName)) return; + await tapOn(FloatingActionButton); + await tapOn('Create group'); + await enterText(TextField, groupChatName); + await tapOn('Create a group and invite users'); + await waitFor('Invite contact'); + await goBack(); + await goBack(); + } + + Future _archiveChats() async { + await ensureLoggedIn(); + await ensureGroupChatCreated(); + await tapOn(ChatSettingsPopupMenu); + await tapOn('Leave'); + await waitFor('Are you sure?'); + await tapOn('Leave'); + await waitFor(ChatList); + } +} diff --git a/integration_test/flows/login_and_chat_backup.dart b/integration_test/flows/login_and_chat_backup.dart new file mode 100644 index 00000000..b588c444 --- /dev/null +++ b/integration_test/flows/login_and_chat_backup.dart @@ -0,0 +1,23 @@ +import 'package:flutter_test/flutter_test.dart'; + +import '../utils/fluffy_chat_tester.dart'; +import 'auth_flows.dart'; + +Future loginAndChatBackup(WidgetTester widgetTester) => widgetTester + .startFluffyChatTest() + .then((tester) => tester._loginAndChatBackup()); + +extension on FluffyChatTester { + Future _loginAndChatBackup() async { + await login(); + + // Skip bootstrap + await tapOn('Copy to clipboard'); + await tapOn('Next'); + await tapOn('Close'); + + await skipNoNotificationsDialog(); + + await logout(); + } +} diff --git a/integration_test/mobile_test.dart b/integration_test/mobile_test.dart new file mode 100644 index 00000000..8da68b0a --- /dev/null +++ b/integration_test/mobile_test.dart @@ -0,0 +1,18 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +import 'flows/auth_flows.dart'; +import 'flows/basic_messaging.dart'; +import 'flows/chat_flows.dart'; +import 'flows/login_and_chat_backup.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + group('FluffyChat Integration Tests', () { + testWidgets('Login and logout flow', loginAndChatBackup); + testWidgets('Basic Messaging', basicMessaging); + testWidgets('Archive chats', archiveChats); + testWidgets('Final logout', finalLogout); + }); +} diff --git a/integration_test/users.dart b/integration_test/users.dart deleted file mode 100644 index 617bcb09..00000000 --- a/integration_test/users.dart +++ /dev/null @@ -1,36 +0,0 @@ -abstract class Users { - const Users._(); - - static const user1 = User( - String.fromEnvironment( - 'USER1_NAME', - defaultValue: 'alice', - ), - String.fromEnvironment( - 'USER1_PW', - defaultValue: 'AliceInWonderland', - ), - ); - static const user2 = User( - String.fromEnvironment( - 'USER2_NAME', - defaultValue: 'bob', - ), - String.fromEnvironment( - 'USER2_PW', - defaultValue: 'JoWirSchaffenDas', - ), - ); -} - -class User { - final String name; - final String password; - - const User(this.name, this.password); -} - -const homeserver = 'http://${String.fromEnvironment( - 'HOMESERVER', - defaultValue: 'localhost', -)}'; diff --git a/integration_test/utils/fluffy_chat_tester.dart b/integration_test/utils/fluffy_chat_tester.dart new file mode 100644 index 00000000..03fa7da7 --- /dev/null +++ b/integration_test/utils/fluffy_chat_tester.dart @@ -0,0 +1,114 @@ +import 'package:fluffychat/main.dart' as app; +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; + +extension type FluffyChatTester(WidgetTester tester) { + static int _printCounter = 1; + + void _print(String message) { + debugPrint( + '[INTEGRATION TEST] ${DateTime.now().toIso8601String()} | Step ${_printCounter++} - $message', + ); + } + + Future isVisible( + Object object, { + Duration timeout = const Duration(seconds: 3), + }) async { + final end = DateTime.now().add(timeout); + while (object.toFinder().evaluate().isEmpty) { + if (DateTime.now().isAfter(end)) { + return false; + } + await tester.pump(const Duration(milliseconds: 500)); + } + return true; + } + + Future waitFor( + Object object, { + Duration timeout = const Duration(seconds: 30), + }) async { + _print('👀 Waiting for "$object" (${timeout.inSeconds}s)'); + final end = DateTime.now().add(timeout); + while (object.toFinder().evaluate().isEmpty) { + if (DateTime.now().isAfter(end)) { + throw Exception('⏱️ Timed out waiting for "$object"!'); + } + await tester.pump(const Duration(milliseconds: 500)); + } + } + + Future _ensureVisible(Object object, {int? index}) async { + var finder = object.toFinder(); + if (finder.evaluate().isEmpty) await waitFor(object); + + if (finder.evaluate().length > 1) { + if (index == null) { + throw Exception( + '⚠️ Found ${finder.evaluate().length} "$object" objects. Please specify an index!', + ); + } + if (finder.evaluate().length <= index) { + throw Exception( + '⚠️ Found ${finder.evaluate().length} "$object" objects. So index $index does not exist!', + ); + } + finder = finder.at(index); + } + return finder; + } + + Future tapOn(Object object, {int? index}) async { + final finder = await _ensureVisible(object, index: index); + + _print('👆 Tapping on "$object"'); + await tester.tap(finder); + await tester.pumpAndSettle(); + } + + Future goBack() => tapOn(find.byTooltip('Back')); + + Future enterText(Object object, String text, {int? index}) async { + final finder = await _ensureVisible(object, index: index); + + _print('⌨️ Enter "$text" into "$object"'); + await tester.enterText(finder, text); + FocusManager.instance.primaryFocus?.unfocus(); + await tester.pumpAndSettle(); + } + + Future scrollUntilVisible( + Object object, { + int? index, + Object? scrollable, + }) async { + _print('📜 Scrolling to "$object"'); + await tester.scrollUntilVisible( + object.toFinder(), + 500.0, + scrollable: scrollable?.toFinder() ?? find.byType(Scrollable).last, + ); + await tester.pumpAndSettle(); + } +} + +extension on Object { + Finder toFinder() => switch (this) { + final Finder finder => finder, + final String string => find.text(string), + final Key key => find.byKey(key), + final IconData icon => find.byIcon(icon), + final Type type => find.byType(type), + final Widget widget => find.byWidget(widget), + _ => throw Exception('Unsupported finder type: $runtimeType'), + }; +} + +extension StartTest on WidgetTester { + Future startFluffyChatTest() async { + app.main(); + + return FluffyChatTester(this); + } +} diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index d57061dd..ab8e063f 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -20,7 +20,5 @@ ???? CFBundleVersion 1.0 - MinimumOSVersion - 13.0 diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 005265cb..d7d0fcce 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -7,23 +7,28 @@ GEM public_suffix (>= 2.0.2, < 6.0) artifactory (3.0.15) atomos (0.1.3) - aws-eventstream (1.1.1) - aws-partitions (1.469.0) - aws-sdk-core (3.114.3) - aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.239.0) - aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.44.0) - aws-sdk-core (~> 3, >= 3.112.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.96.1) - aws-sdk-core (~> 3, >= 3.112.0) + aws-eventstream (1.4.0) + aws-partitions (1.1213.0) + aws-sdk-core (3.242.0) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + bigdecimal + jmespath (~> 1, >= 1.6.1) + logger + aws-sdk-kms (1.121.0) + aws-sdk-core (~> 3, >= 3.241.4) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.208.0) + aws-sdk-core (~> 3, >= 3.234.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.3) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) + base64 (0.3.0) + bigdecimal (4.0.1) claide (1.0.3) colored (1.2) colored2 (3.1.2) @@ -37,22 +42,32 @@ GEM dotenv (2.7.6) emoji_regex (3.2.2) excon (0.82.0) - faraday (1.4.2) + faraday (1.10.5) 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.1) - multipart-post (>= 1.2, < 3) + 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-em_synchrony (1.0.1) faraday-excon (1.1.0) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.2.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.0.0) faraday (~> 1.0) fastimage (2.2.4) @@ -141,6 +156,7 @@ GEM jmespath (1.6.2) json (2.5.1) jwt (2.2.3) + logger (1.7.0) memoist (0.16.2) mini_magick (4.11.0) mini_mime (1.1.0) @@ -161,7 +177,7 @@ GEM retriable (3.1.2) rexml (3.4.2) rouge (2.0.7) - ruby2_keywords (0.0.4) + ruby2_keywords (0.0.5) rubyzip (2.3.0) security (0.1.3) signet (0.15.0) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 7f38bb25..6fc5538a 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -2,15 +2,17 @@ import UIKit import Flutter @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - if #available(iOS 10.0, *) { - UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate - } return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + + // From https://pub.dev/packages/flutter_local_notifications#-ios-setup + UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate } } diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index c94401f4..51765d1c 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -112,5 +112,26 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index c5a332a0..ad595036 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -17,27 +17,27 @@ abstract class AppConfig { static const String schemePrefix = 'matrix:'; static const String pushNotificationsChannelId = 'fluffychat_push'; static const String pushNotificationsAppId = 'chat.fluffy.fluffychat'; - static const double borderRadius = 18.0; + static const double borderRadius = 16.0; + static const double spaceBorderRadius = 11.0; static const double columnWidth = 360.0; - static const String website = 'https://fluffy.chat'; static const String enablePushTutorial = - 'https://fluffy.chat/faq/#push_without_google_services'; + 'https://fluffychat.im/faq/#push_without_google_services'; static const String encryptionTutorial = - 'https://fluffy.chat/faq/#how_to_use_end_to_end_encryption'; + 'https://fluffychat.im/faq/#how_to_use_end_to_end_encryption'; static const String startChatTutorial = - 'https://fluffy.chat/faq/#how_do_i_find_other_users'; + 'https://fluffychat.im/faq/#how_do_i_find_other_users'; static const String howDoIGetStickersTutorial = - 'https://fluffy.chat/faq/#how_do_i_get_stickers'; + 'https://fluffychat.im/faq/#how_do_i_get_stickers'; static const String appId = 'im.fluffychat.FluffyChat'; static const String appOpenUrlScheme = 'im.fluffychat'; + static const String appSsoUrlScheme = 'im.fluffychat.auth'; static const String sourceCodeUrl = 'https://github.com/krille-chan/fluffychat'; static const String supportUrl = 'https://github.com/krille-chan/fluffychat/issues'; static const String changelogUrl = 'https://fluffy.chat/en/changelog/'; - static const String donationUrl = 'https://ko-fi.com/krille'; static const Set defaultReactions = {'👍', '❤️', '😂', '😮', '😢'}; @@ -49,14 +49,8 @@ abstract class AppConfig { static final Uri homeserverList = Uri( scheme: 'https', - host: 'servers.joinmatrix.org', - path: 'servers.json', - ); - - static final Uri privacyUrl = Uri( - scheme: 'https', - host: 'fluffy.chat', - path: '/en/privacy', + host: 'raw.githubusercontent.com', + path: 'krille-chan/fluffychat/refs/heads/main/recommended_homeservers.json', ); static const String mainIsolatePortName = 'main_isolate'; diff --git a/lib/config/app_emojis.dart b/lib/config/app_emojis.dart deleted file mode 100644 index 3c38e2fa..00000000 --- a/lib/config/app_emojis.dart +++ /dev/null @@ -1,30 +0,0 @@ -abstract class AppEmojis { - static const List emojis = [ - '👍', - '😊', - '😀', - '❤️', - '😍', - '😘', - '😇', - '😅', - '😭', - '😜', - '😱', - '😆', - '😉', - '😡', - '👋', - '🤔', - '🙁', - '🥳', - '😟', - '😄', - '😁', - '🙄', - '😂', - '🤣', - '😌', - '😬', - ]; -} diff --git a/lib/config/isrg_x1.dart b/lib/config/isrg_x1.dart index 6a6d0ac2..c7b50323 100644 --- a/lib/config/isrg_x1.dart +++ b/lib/config/isrg_x1.dart @@ -1,5 +1,5 @@ // ignore: constant_identifier_names -const String ISRG_X1 = """-----BEGIN CERTIFICATE----- +const String ISRG_X1 = '''-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 @@ -29,4 +29,4 @@ oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE-----"""; +-----END CERTIFICATE-----'''; diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 83431003..c6c683eb 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,10 +1,5 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/archive/archive.dart'; import 'package:fluffychat/pages/bootstrap/bootstrap_dialog.dart'; @@ -17,7 +12,7 @@ import 'package:fluffychat/pages/chat_members/chat_members.dart'; import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings.dart'; import 'package:fluffychat/pages/chat_search/chat_search_page.dart'; import 'package:fluffychat/pages/device_settings/device_settings.dart'; -import 'package:fluffychat/pages/intro/intro_page.dart'; +import 'package:fluffychat/pages/intro/intro_page_presenter.dart'; import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/pages/new_group/new_group.dart'; @@ -39,6 +34,9 @@ import 'package:fluffychat/widgets/layouts/two_column_layout.dart'; import 'package:fluffychat/widgets/log_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/share_scaffold_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; abstract class AppRoutes { static FutureOr loggedInRedirect( @@ -68,7 +66,7 @@ abstract class AppRoutes { GoRoute( path: '/home', pageBuilder: (context, state) => - defaultPageBuilder(context, state, const IntroPage()), + defaultPageBuilder(context, state, const IntroPagePresenter()), redirect: loggedInRedirect, routes: [ GoRoute( @@ -170,14 +168,23 @@ abstract class AppRoutes { ), GoRoute( path: 'newprivatechat', - pageBuilder: (context, state) => - defaultPageBuilder(context, state, const NewPrivateChat()), + pageBuilder: (context, state) => defaultPageBuilder( + context, + state, + NewPrivateChat( + key: ValueKey('new_chat_${state.uri.query}'), + deeplink: state.uri.queryParameters['deeplink'], + ), + ), redirect: loggedOutRedirect, ), GoRoute( path: 'newgroup', - pageBuilder: (context, state) => - defaultPageBuilder(context, state, const NewGroup()), + pageBuilder: (context, state) => defaultPageBuilder( + context, + state, + NewGroup(spaceId: state.uri.queryParameters['space_id']), + ), redirect: loggedOutRedirect, ), GoRoute( @@ -185,7 +192,10 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - const NewGroup(createGroupType: CreateGroupType.space), + NewGroup( + createGroupType: CreateGroupType.space, + spaceId: state.uri.queryParameters['space_id'], + ), ), redirect: loggedOutRedirect, ), @@ -197,6 +207,7 @@ abstract class AppRoutes { ? TwoColumnLayout( mainView: Settings(key: state.pageKey), sideView: child, + hasNavigationRail: false, ) : child, ), @@ -262,8 +273,11 @@ abstract class AppRoutes { GoRoute( path: 'addaccount', redirect: loggedOutRedirect, - pageBuilder: (context, state) => - defaultPageBuilder(context, state, const IntroPage()), + pageBuilder: (context, state) => defaultPageBuilder( + context, + state, + const IntroPagePresenter(), + ), routes: [ GoRoute( path: 'sign_in', diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index b7269f64..ea4d66f5 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -1,14 +1,12 @@ import 'dart:convert'; -import 'package:flutter/foundation.dart'; - import 'package:async/async.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; import 'package:matrix/matrix_api_lite/utils/logs.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; - enum AppSettings { textMessageMaxLength('textMessageMaxLength', 16384), audioRecordingNumChannels('audioRecordingNumChannels', 1), @@ -37,9 +35,11 @@ enum AppSettings { sendPublicReadReceipts('chat.fluffy.send_public_read_receipts', true), swipeRightToLeftToReply('chat.fluffy.swipeRightToLeftToReply', true), sendOnEnter('chat.fluffy.send_on_enter', false), - showPresences('chat.fluffy.show_presences', false), + showPresences('chat.fluffy.show_presences', true), displayNavigationRail('chat.fluffy.display_navigation_rail', false), experimentalVoip('chat.fluffy.experimental_voip', false), + jitsiFeature('chat.fluffy.enable_jitsi', false), + jitsiDomain('chat.fluffy.jitsi_domain', 'meet.jit.si'), shareKeysWith('chat.fluffy.share_keys_with_2', 'all'), noEncryptionWarningShown( 'chat.fluffy.no_encryption_warning_shown', @@ -52,7 +52,23 @@ enum AppSettings { // colorSchemeSeed stored as ARGB int colorSchemeSeedInt('chat.fluffy.color_scheme_seed', 0xFF5625BA), emojiSuggestionLocale('emoji_suggestion_locale', ''), - enableSoftLogout('chat.fluffy.enable_soft_logout', false); + enableSoftLogout('chat.fluffy.enable_soft_logout', false), + enableMatrixNativeOIDC('chat.fluffy.enable_matrix_native_oidc', false), + presetHomeserver('chat.fluffy.preset_homeserver', ''), + welcomeText('chat.fluffy.welcome_text', ''), + website('chat.fluffy.website_url', 'https://fluffychat.im'), + logoUrl( + 'chat.fluffy.logo_url', + 'https://fluffychat.im/assets/favicon.png', + ), + privacyPolicy( + 'chat.fluffy.privacy_policy_url', + 'https://fluffychat.im/en/privacy', + ), + tos('chat.fluffy.tos_url', 'https://fluffychat.im/en/tos'), + sendTimelineEventTimeout('chat.fluffy.send_timeline_event_timeout', 15), + lastSeenSupportBanner('chat.fluffy.last_seen_support_banner', 0), + supportBannerOptOut('chat.fluffy.support_banner_opt_out', false); final String key; final T defaultValue; @@ -62,6 +78,11 @@ enum AppSettings { static SharedPreferences get store => _store!; static SharedPreferences? _store; + static Future reset({bool loadWebConfigFile = true}) async { + await AppSettings._store!.clear(); + await init(loadWebConfigFile: loadWebConfigFile); + } + static Future init({bool loadWebConfigFile = true}) async { if (AppSettings._store != null) return AppSettings.store; diff --git a/lib/config/themes.dart b/lib/config/themes.dart index 122eef91..a84d8219 100644 --- a/lib/config/themes.dart +++ b/lib/config/themes.dart @@ -1,9 +1,8 @@ +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/setting_keys.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:fluffychat/config/setting_keys.dart'; -import 'app_config.dart'; - abstract class FluffyThemes { static const double columnWidth = 380.0; @@ -74,7 +73,7 @@ abstract class FluffyThemes { ), inputDecorationTheme: InputDecorationTheme( border: OutlineInputBorder( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), + borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), ), contentPadding: const EdgeInsets.all(12), ), diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index 8bcfa71e..1a28b672 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -313,16 +313,6 @@ "type": "String", "placeholders": {} }, - "confirm": "أكّد", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "اتصل", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "دعيَ المراسل للمجموعة", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -392,33 +382,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "لا مجال للعودة، أتأكد تعطيل حسابك؟", "@deactivateAccountWarning": { "type": "String", @@ -484,11 +447,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "اختر صورة ورمزا للانفعالة!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "محادثة فارغة", "@emptyChat": { "type": "String", @@ -518,11 +476,6 @@ } } }, - "enterYourHomeserver": "أدخل الخادم", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "fileName": "اسم الملف", "@fileName": { "type": "String", @@ -599,11 +552,6 @@ "type": "String", "placeholders": {} }, - "identity": "المُعرّف", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignoredUsers": "المستخدمون المتجاهلون", "@ignoredUsers": { "type": "String", @@ -729,11 +677,6 @@ "type": "String", "placeholders": {} }, - "license": "الرخصة", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "فاتح", "@lightTheme": { "type": "String", @@ -939,11 +882,6 @@ } } }, - "rejoin": "أعد الانضمام", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "أزِل", "@remove": { "type": "String", @@ -963,11 +901,6 @@ } } }, - "removeDevice": "أزل جهازا", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "فك حجبه من المحادثة", "@unbanFromChat": { "type": "String", @@ -988,15 +921,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "رآه {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "أرسل", "@send": { "type": "String", @@ -1022,11 +946,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "أرسل الملف الأصلي", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "أرسل فيديو", "@sendVideo": { "type": "String", @@ -1086,11 +1005,6 @@ } } }, - "setInvitationLink": "عيّن رابط الدعوة", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "عيّن الحالة", "@setStatus": { "type": "String", @@ -1216,15 +1130,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 محادثة غير مقروءة} other{{unreadCount} محادثات غير مقروءة}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} و {count} أخرون يكتبون…", "@userAndOthersAreTyping": { "type": "String", @@ -1344,11 +1249,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "الخلفية:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "تحذير!", "@warning": { "type": "String", @@ -1384,11 +1284,6 @@ "type": "String", "placeholders": {} }, - "people": "أشخاص", - "@people": { - "type": "String", - "placeholders": {} - }, "scanQrCode": "امسح رمز الاستجابة السريعة", "@scanQrCode": {}, "noMatrixServer": "{server1} ليس خادم ماتريكس، بدلًا منه أتريد استخدام {server2}؟", @@ -1428,11 +1323,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "تغييرات تخص الأعضاء", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "inoffensive": "غير مسيء", "@inoffensive": { "type": "String", @@ -1463,11 +1353,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "انتقل للغرفة الجديدة", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "fontSize": "حجم الخط", "@fontSize": { "type": "String", @@ -1545,16 +1430,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "يحوي اسم المستخدم", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "يحوي الاسم العلني", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "commandMissing": "{command} ليس بأمر.", "@commandMissing": { "type": "String", @@ -1641,8 +1516,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "أُضيفت المحادثة الى هذا المساحة", - "@chatHasBeenAddedToThisSpace": {}, "chatBackup": "النسخ الاحتياطي للمحادثات", "@chatBackup": { "type": "String", @@ -1770,11 +1643,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "اختر رجاء", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "passwordRecovery": "استعادة كلمة السر", "@passwordRecovery": { "type": "String", @@ -1835,26 +1703,11 @@ } } }, - "notificationsEnabledForThisAccount": "الإشعارات مفعلة لهذا الحساب", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "spaceIsPublic": "عام في المساحة", "@spaceIsPublic": { "type": "String", "placeholders": {} }, - "toggleFavorite": "بدّل حالة التفضيل", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "علّمه كمقروء/غير مقروء", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "unavailable": "غير متوفر", "@unavailable": { "type": "String", @@ -1870,16 +1723,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "تسجيل دخول أحادي", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "بدّل حالة الكتم", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "showPassword": "أظهر كلمة السر", "@showPassword": { "type": "String", @@ -1945,11 +1788,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "رسائل البوت", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "sendAsText": "أرسل نصًا", "@sendAsText": { "type": "String" @@ -1959,11 +1797,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "دعوات لي", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "replaceRoomWithNewerVersion": "استبدل الغرفة باصدار أحدث", "@replaceRoomWithNewerVersion": { "type": "String", @@ -1979,26 +1812,11 @@ "type": "String", "placeholders": {} }, - "sendSticker": "أرسل ملصقًا", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "defaultPermissionLevel": "مستوى الأذونات الافتراضية للمستخدمين الجدد", "@defaultPermissionLevel": { "type": "String", "placeholders": {} }, - "setPermissionsLevel": "تعيين مستوى الأذونات", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "عيّن وجوهًا تعبيرية مخصصة", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "oneClientLoggedOut": "أُ خرج أحد العملاء الذي تسختدمها", "@oneClientLoggedOut": {}, "pleaseEnter4Digits": "أدخل 4 أرقام أو أتركه فارغ لتعطيل القفل.", @@ -2079,18 +1897,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "يدعم الخادم الرئيسي المستخدم إصدارات المواصفات:\n{serverVersions}\nلكن هذا التطبيق يدعم فقط:\n{supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "offensive": "عدواني", "@offensive": { "type": "String", @@ -2142,17 +1948,6 @@ "@videoCallsBetaWarning": {}, "placeCall": "إجراء مكالمة", "@placeCall": {}, - "videoWithSize": "فيديو ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "emailOrUsername": "البريد الإلكتروني أو اسم المستخدم", - "@emailOrUsername": {}, "dismiss": "رفض", "@dismiss": {}, "setAsCanonicalAlias": "تعيين كاسم مستعار رئيسي", @@ -2189,17 +1984,8 @@ }, "markAsRead": "حدد كمقروء", "@markAsRead": {}, - "openVideoCamera": "افتح الكاميرا لمقطع فيديو", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "start": "إبدأ", "@start": {}, - "publish": "انشر", - "@publish": {}, - "addToSpaceDescription": "إختر مساحة لإضافة هذه المحادثة إليها.", - "@addToSpaceDescription": {}, "reportUser": "التبيلغ عن المستخدم", "@reportUser": {}, "openChat": "فتح المحادثة", @@ -2230,8 +2016,6 @@ } } }, - "widgetVideo": "فيديو", - "@widgetVideo": {}, "recoveryKeyLost": "هل فقدت مفتاح الاسترداد؟", "@recoveryKeyLost": {}, "pleaseEnterRecoveryKeyDescription": "لإلغاء قفل رسائلك القديمة ، يرجى إدخال مفتاح الاسترداد الذي تم إنشاؤه في جلسة سابقة. مفتاح الاسترداد ليس كلمة المرور الخاصة بك.", @@ -2247,8 +2031,6 @@ } } }, - "hydrateTor": "مستخدمو تور: استيراد تصدير الجلسة", - "@hydrateTor": {}, "commandHint_googly": "أرسل بعض عيون googly", "@commandHint_googly": {}, "commandHint_cuddle": "أرسل عناق", @@ -2268,33 +2050,14 @@ "@unlockOldMessages": {}, "commandHint_markasdm": "وضع علامة على أنها غرفة رسائل مباشرة لمعرف المصفوفة", "@commandHint_markasdm": {}, - "allRooms": "جميع الدردشات الجماعية", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "dehydrate": "تصدير الجلسة ومسح الجهاز", "@dehydrate": {}, "dehydrateWarning": "لا يمكن التراجع عن هذا الإجراء. تأكد من تخزين ملف النسخ الاحتياطي بأمان.", "@dehydrateWarning": {}, - "dehydrateTorLong": "بالنسبة لمستخدمي تور ، يوصى بتصدير الجلسة قبل إغلاق النافذة.", - "@dehydrateTorLong": {}, - "dehydrateTor": "مستخدمو تور: تصدير الجلسة", - "@dehydrateTor": {}, "hydrate": "استعادة من ملف النسخ الاحتياطي", "@hydrate": {}, - "pleaseEnterRecoveryKey": "الرجاء إدخال مفتاح الاسترداد:", - "@pleaseEnterRecoveryKey": {}, "recoveryKey": "مفتاح الاسترداد", "@recoveryKey": {}, - "startFirstChat": "ابدأ محادثتك الأولى", - "@startFirstChat": {}, - "widgetCustom": "مُخصّص", - "@widgetCustom": {}, - "widgetNameError": "يرجى تقديم اسم العرض.", - "@widgetNameError": {}, - "errorAddingWidget": "خطأ في إضافة الأداة.", - "@errorAddingWidget": {}, "youRejectedTheInvitation": "لقد رفضت الدعوة", "@youRejectedTheInvitation": {}, "youJoinedTheChat": "لقد انضممت إلى المحادثة", @@ -2343,28 +2106,14 @@ "@foregroundServiceRunning": {}, "screenSharingTitle": "مشاركة الشاشة", "@screenSharingTitle": {}, - "appearOnTop": "يظهر في الأعلى", - "@appearOnTop": {}, - "otherCallingPermissions": "الميكروفون والكاميرا وأذونات FluffyChat الأخرى", - "@otherCallingPermissions": {}, - "enterSpace": "أدخل المساحة", - "@enterSpace": {}, - "enterRoom": "أدخل الغرفة", - "@enterRoom": {}, "deviceKeys": "مفاتيح الجهاز:", "@deviceKeys": {}, "whyIsThisMessageEncrypted": "لماذا هذه الرسالة غير قابلة للقراءة؟", "@whyIsThisMessageEncrypted": {}, - "nextAccount": "الحساب التالي", - "@nextAccount": {}, - "previousAccount": "الحساب السابق", - "@previousAccount": {}, "encryptThisChat": "تشفير هذه المحادثة", "@encryptThisChat": {}, "screenSharingDetail": "أنت تشارك شاشتك في FuffyChat", "@screenSharingDetail": {}, - "hideUnimportantStateEvents": "إخفاء أحداث الحالة غير المهمة", - "@hideUnimportantStateEvents": {}, "newGroup": "مجموعة جديدة", "@newGroup": {}, "youKicked": "👞 لقد ركلت {user}", @@ -2379,11 +2128,6 @@ "@newSpace": {}, "commandHint_markasgroup": "وضع علامة كمجموعة", "@commandHint_markasgroup": {}, - "separateChatTypes": "الدردشات المباشرة والمجموعات المنفصلة", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "hugContent": "{senderName} يعانقك", "@hugContent": { "type": "String", @@ -2393,27 +2137,6 @@ } } }, - "hydrateTorLong": "هل قمت بتصدير جلستك الأخيرة على تور؟ قم باستيرادها بسرعة واستمر في المحادثة.", - "@hydrateTorLong": {}, - "widgetUrlError": "هذا ليس عنوان URL صالحًا.", - "@widgetUrlError": {}, - "indexedDbErrorTitle": "مشاكل الوضع الخاص", - "@indexedDbErrorTitle": {}, - "indexedDbErrorLong": "للأسف ، لم يتم تمكين تخزين الرسائل في الوضع الخاص افتراضيا.\nيرجى زيارة\n - حول:التكوين\n - تعيين dom.indexedDB.privateBrowsing.enabled إلى true\nخلاف ذلك ، لا يمكن تشغيل FluffyChat.", - "@indexedDbErrorLong": {}, - "switchToAccount": "التبديل إلى الحساب {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "addWidget": "إضافة اداة", - "@addWidget": {}, - "widgetEtherpad": "ملاحظة نصية", - "@widgetEtherpad": {}, "youKickedAndBanned": "🙅 لقد ركلت وحظرت {user}", "@youKickedAndBanned": { "placeholders": { @@ -2432,8 +2155,6 @@ }, "saveKeyManuallyDescription": "احفظ هذا المفتاح يدويا عن طريق تشغيل مربع حوار مشاركة النظام أو الحافظة.", "@saveKeyManuallyDescription": {}, - "widgetJitsi": "اجتماعات جيتسي", - "@widgetJitsi": {}, "youInvitedUser": "📩 قمت بدعوة {user}", "@youInvitedUser": { "placeholders": { @@ -2444,27 +2165,8 @@ }, "storeInSecureStorageDescription": "قم بتخزين مفتاح الاسترداد في التخزين الآمن لهذا الجهاز.", "@storeInSecureStorageDescription": {}, - "widgetName": "الاسم", - "@widgetName": {}, "users": "المستخدمون", "@users": {}, - "callingPermissions": "أذونات الاتصال", - "@callingPermissions": {}, - "callingAccount": "الاتصال بالحساب", - "@callingAccount": {}, - "callingAccountDetails": "يسمح لـ FluffyChat باستخدام تطبيق android Dialer الأصلي.", - "@callingAccountDetails": {}, - "appearOnTopDetails": "يسمح للتطبيق بالظهور في الأعلى (ليست هناك حاجة إذا قمت بالفعل بإعداد Fluffychat كحساب اتصال)", - "@appearOnTopDetails": {}, - "numChats": "{number} الدردشات", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "jump": "قفز", "@jump": {}, "report": "الإبلاغ", @@ -2506,19 +2208,6 @@ "@jumpToLastReadMessage": {}, "readUpToHere": "اقرأ حتى هنا", "@readUpToHere": {}, - "signInWithPassword": "سجل الدخول بكلمة السر", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "رجاء حاول مجددا أو اختر خادما مختلفا.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "تسجيل الدخول باستخدام {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "importNow": "استيراد الآن", "@importNow": {}, "importEmojis": "استيراد الرموز التعبيرية", @@ -2539,14 +2228,8 @@ "@messagesStyle": {}, "shareInviteLink": "شارك رابط الدعوة", "@shareInviteLink": {}, - "profileNotFound": "لا يمكن العثور على المستخدم على الخادم. ربما هناك مشكلة في الاتصال أو المستخدم غير موجود.", - "@profileNotFound": {}, - "setTheme": "تعيين السمة:", - "@setTheme": {}, "setColorTheme": "تعيين لون السمة:", "@setColorTheme": {}, - "inviteContactToGroupQuestion": "هل تريد دعوة {contact} إلى المحادثة \"{groupName}\"؟?", - "@inviteContactToGroupQuestion": {}, "tryAgain": "أعد المحاولة", "@tryAgain": {}, "redactMessageDescription": "سيتم تنقيح الرسالة لجميع المشاركين في هذه المحادثة. هذا لا يمكن التراجع عنها.", @@ -2576,8 +2259,6 @@ }, "invite": "دعوة", "@invite": {}, - "addChatDescription": "أضف وصفًا للدردشة...", - "@addChatDescription": {}, "chatPermissions": "صلاحيات المحادثة", "@chatPermissions": {}, "chatDescription": "وصف المحادثة", @@ -2594,8 +2275,6 @@ "@directChat": {}, "inviteGroupChat": "📨 دعوة للمحادثة الجماعية", "@inviteGroupChat": {}, - "invitePrivateChat": "📨 دعوة دردشة خاصة", - "@invitePrivateChat": {}, "emoteKeyboardNoRecents": "التعبيرات المستخدمة مؤخرًا ستظهر هنا ...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2659,8 +2338,6 @@ "@groupName": {}, "searchChatsRooms": "ابحث عن #الدردشات، @المستخدمين...", "@searchChatsRooms": {}, - "startConversation": "بدء محادثة", - "@startConversation": {}, "commandHint_sendraw": "إرسال جيسون الخام", "@commandHint_sendraw": {}, "wrongRecoveryKey": "عذرًا... لا يبدو أن هذا هو مفتاح الاسترداد الصحيح.", @@ -2685,18 +2362,12 @@ "@passwordIsWrong": {}, "pleaseEnterYourCurrentPassword": "من فضلك أدخل كلمة السر الحالية", "@pleaseEnterYourCurrentPassword": {}, - "publicLink": "رابط عام", - "@publicLink": {}, "nothingFound": "لم نجد شيئاً.", "@nothingFound": {}, - "decline": "رفض", - "@decline": {}, "newPassword": "كلمة المرور الجديدة", "@newPassword": {}, "passwordsDoNotMatch": "كلمات المرور لا تتطابق", "@passwordsDoNotMatch": {}, - "subspace": "مساحة فرعية", - "@subspace": {}, "select": "اختر", "@select": {}, "pleaseChooseAStrongPassword": "الرجاء اختيار كلمة مرور قوية", @@ -2709,18 +2380,6 @@ "@joinSpace": {}, "searchForUsers": "ابحث عن @users...", "@searchForUsers": {}, - "databaseBuildErrorBody": "غير قادر على بناء قاعدة بيانات SQlite. يحاول التطبيق استخدام قاعدة بيانات قديمة في الوقت الحالي. الرجاء الإبلاغ عن هذا الخطأ للمطورين على {url}. رسالة الخطأ هي: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "حدث خطأ بداخل التطبيق", "@initAppError": {}, "sessionLostBody": "جلستك مفقودة يرجى إبلاغ المطورين بهذا الخطأ في {url}. رسالة الخطأ هي: {error}", @@ -2767,14 +2426,6 @@ }, "transparent": "شفّاف", "@transparent": {}, - "youInvitedToBy": "📩 تمت دعوتك عبر الرابط إلى:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "formattedMessagesDescription": "عرض محتوى الرسالة الغنية مثل النص الغامق باستخدام الماركداون.", "@formattedMessagesDescription": {}, "verifyOtherUserDescription": "إذا قمت بالتحقق من مستخدم آخر، فيمكنك التأكد من أنك تعرف من تكتب إليه حقًا. 💪\n\nعند بدء عملية التحقق، سترى أنت والمستخدم الآخر نافذة منبثقة في التطبيق. هناك سترى بعد ذلك سلسلة من الرموز التعبيرية أو الأرقام التي يتعين عليك مقارنتها مع بعضها البعض.\n\nأفضل طريقة للقيام بذلك هي الالتقاء أو بدء مكالمة فيديو. 👭", @@ -2787,15 +2438,6 @@ "@sendReadReceipts": {}, "verifyOtherDevice": "🔐 التحقق من الجهاز الآخر", "@verifyOtherDevice": {}, - "forwardMessageTo": "هل تريد إعادة توجيه الرسالة إلى {roomName}؟", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "يستطيع المشاركون الآخرون في المحادثة رؤيتك عند كتابة رسالة جديدة.", "@sendTypingNotificationsDescription": {}, "sendReadReceiptsDescription": "يمكن للمشاركين الآخرين في المحادثة معرفة متى قرأت الرسالة.", @@ -2842,11 +2484,6 @@ "@hidePresences": {}, "incomingMessages": "الرسائل الواردة", "@incomingMessages": {}, - "presenceStyle": "الحضور:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "إظهار رسائل الحالة من المستخدمين الآخرين", "@presencesToggle": { "type": "String", @@ -2888,8 +2525,6 @@ "@hideInvalidOrUnknownMessageFormats": {}, "overview": "نظرة عامة", "@overview": {}, - "notifyMeFor": "أعلمني بـ", - "@notifyMeFor": {}, "passwordRecoverySettings": "إعدادات استعادة كلمة المرور", "@passwordRecoverySettings": {}, "globalChatId": "معرف المحادثة العامة", @@ -2900,10 +2535,6 @@ "@customEmojisAndStickersBody": {}, "hideRedactedMessages": "إخفاء الرسائل المكررة", "@hideRedactedMessages": {}, - "hideMemberChangesInPublicChats": "إخفاء تغييرات الأعضاء في الدردشات العامة", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "لا تظهر في المخطط الزمني للدردشة إذا انضم شخص ما إلى محادثة عامة أو غادرها لتحسين إمكانية القراءة.", - "@hideMemberChangesInPublicChatsBody": {}, "usersMustKnock": "المستخدم يجب أن يطرق الباب", "@usersMustKnock": {}, "chatCanBeDiscoveredViaSearchOnServer": "يمكن اكتشاف الشات عن طريق البحث في {server}", @@ -2919,16 +2550,6 @@ "@noOneCanJoin": {}, "knocking": "طرق", "@knocking": {}, - "userWouldLikeToChangeTheChat": "{user} يرغب في الانضمام إلى المحادثة.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "لم يتم بعد إنشاء أي رابط عام", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "دق", "@knock": {}, "thereAreCountUsersBlocked": "يوجد حاليًا {count} من المستخدمين المحظورين.", @@ -2940,17 +2561,6 @@ "@publicChatAddresses": {}, "createNewAddress": "إنشاء عنوان جديد", "@createNewAddress": {}, - "userRole": "دور المستخدم", - "@userRole": {}, - "minimumPowerLevel": "{level} هو الحد الأدنى من مستوى الطاقة.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchIn": "بحث في {chat}...", "@searchIn": { "type": "String", @@ -2976,22 +2586,8 @@ "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, - "countChatsAndCountParticipants": "{chats} دردشات و {participants} مشاركين", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "لم يتم العثور على دردشات...", "@noMoreChatsFound": {}, - "joinedChats": "انضم إلى الدردشة", - "@joinedChats": {}, "unread": "غير المقروءة", "@unread": {}, "space": "المساحة", @@ -3073,12 +2669,6 @@ "@noChatsFoundHere": {}, "loginWithMatrixId": "تسجيل الدخول باستخدام معرف ماتريكس", "@loginWithMatrixId": {}, - "discoverHomeservers": "اكتشف الخوادم المنزلية", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "ما هو خادم المنزل ؟", - "@whatIsAHomeserver": {}, - "homeserverDescription": "يتم تخزين جميع بياناتك على خادم المنزل، تمامًا مثل مزود خدمة البريد الإلكتروني. يمكنك اختيار خادم البيت الذي تريد استخدامه، بينما لا يزال بإمكانك التواصل مع الجميع. اعرف المزيد على https://matrix.org.", - "@homeserverDescription": {}, "doesNotSeemToBeAValidHomeserver": "لا يبدو أنه خادم منزلي متوافق. عنوان URL غير صحيح ؟", "@doesNotSeemToBeAValidHomeserver": {}, "calculatingFileSize": "جارٍ حساب حجم الملف...", @@ -3181,7 +2771,5 @@ "previous": "السابق", "@previous": {}, "otherPartyNotLoggedIn": "لم يقم الطرف الآخر بتسجيل الدخول حالياً وبالتالي لا يمكنه تلقي الرسائل!", - "@otherPartyNotLoggedIn": {}, - "setCustomPermissionLevel": "حدد مستوى صلاحية مخصص", - "@setCustomPermissionLevel": {} -} + "@otherPartyNotLoggedIn": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 0ae7d887..021578d1 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -4,34 +4,19 @@ "description": "Set to true to always display time of day in 24 hour format." }, "repeatPassword": "Паўтарыце пароль", - "@repeatPassword": {}, "notAnImage": "Не файл выявы.", - "@notAnImage": {}, - "setCustomPermissionLevel": "Задаць карыстальніцкі ўзровень дазволу", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Калі ласка, выберыце ролю ніжэй ці ўвядзіце карыстальніцкі ўзровень дазволу паміж 0 і 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Ігнараваць карыстальніка", - "@ignoreUser": {}, - "normalUser": "Звычайны карыстальнік", - "@normalUser": {}, "remove": "Прыбраць", "@remove": { "type": "String", "placeholders": {} }, "importNow": "Імпартаваць зараз", - "@importNow": {}, "importEmojis": "Імпартаваць эмодзі", - "@importEmojis": {}, "importFromZipFile": "Імпартаваць з файла .zip", - "@importFromZipFile": {}, "exportEmotePack": "Экспартаваць пак эмодзі як .zip", - "@exportEmotePack": {}, "replace": "Замяніць", - "@replace": {}, "about": "Пра праграму", - "@about": {}, "aboutHomeserver": "Пра {homeserver}", "@aboutHomeserver": { "type": "String", @@ -75,7 +60,6 @@ "placeholders": {} }, "confirmMatrixId": "Калі ласка, спраўдзіце свой Matrix ID перад выдаленнем свайго ўліковага запісу.", - "@confirmMatrixId": {}, "supposedMxid": "Гэта павінна быць накшталт {mxid}", "@supposedMxid": { "type": "String", @@ -85,10 +69,7 @@ } } }, - "addChatDescription": "Дадайце апісанне чату...", - "@addChatDescription": {}, "addToSpace": "Дадаць у прастору", - "@addToSpace": {}, "admin": "Адмін", "@admin": { "type": "String", @@ -110,13 +91,9 @@ "placeholders": {} }, "commandHint_roomupgrade": "Абнавіце гэты пакой да згаданай версіі", - "@commandHint_roomupgrade": {}, "commandHint_googly": "Даслаць смешныя вочы", - "@commandHint_googly": {}, "commandHint_cuddle": "Даслаць усмешку", - "@commandHint_cuddle": {}, "commandHint_hug": "Даслаць абдымашкі", - "@commandHint_hug": {}, "googlyEyesContent": "{senderName} даслаў(-ла) вам смешныя вочы", "@googlyEyesContent": { "type": "String", @@ -164,13 +141,12 @@ "placeholders": {} }, "appLockDescription": "Блакіруе праграму, пакуль вы не ўвядзіце пін-код", - "@appLockDescription": {}, "archive": "Архіў", "@archive": { "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Ці дазволена карыстальнікам-гасцям далучыцца", + "areGuestsAllowedToJoin": "Ці дазволена карыстальнікам-гасцям далучыцца?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -217,47 +193,13 @@ } }, "sendTypingNotifications": "Дасылаць паведамленне пра друк", - "@sendTypingNotifications": {}, "swipeRightToLeftToReply": "Змахніце ўлева, каб адказаць", - "@swipeRightToLeftToReply": {}, "sendOnEnter": "Дасылаць на enter", - "@sendOnEnter": {}, - "badServerVersionsException": "Хатні сервер падтрымлівае наступныя версіі спецыфікацыі:\n{serverVersions}\nАле гэта праграма падтрымлівае толькі:{supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "countChatsAndCountParticipants": "{chats} чатаў і {participants} удзельнікаў", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Болей чатаў не знойдзена...", - "@noMoreChatsFound": {}, "noChatsFoundHere": "Здаецца, тут пуста. Пачніце новы чат з кімсьці праз кнопку ніжэй. ⤵️", - "@noChatsFoundHere": {}, - "joinedChats": "Чаты, да якіх вы далучыліся", - "@joinedChats": {}, "unread": "Непрачытаные", - "@unread": {}, "space": "Прастора", - "@space": {}, "spaces": "Прасторы", - "@spaces": {}, "banFromChat": "Заблакіраваць ў чаце", "@banFromChat": { "type": "String", @@ -290,11 +232,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Паведамленні ботаў", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Скасаваць", "@cancel": { "type": "String", @@ -441,7 +378,6 @@ } }, "noMessagesYet": "Паведамленняў пакуль што няма", - "@noMessagesYet": {}, "changedTheRoomAliases": "{username} змяніў псеўданімы пакою", "@changedTheRoomAliases": { "type": "String", @@ -496,7 +432,6 @@ "placeholders": {} }, "yourChatBackupHasBeenSetUp": "Рэзервовае капіраванне чатаў было наладжана.", - "@yourChatBackupHasBeenSetUp": {}, "chatBackup": "Рэзервовае капіраванне чатаў", "@chatBackup": { "type": "String", @@ -512,8 +447,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Чат быў дададзены ў гэту прастору", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Чаты", "@chats": { "type": "String", @@ -525,16 +458,13 @@ "placeholders": {} }, "clearArchive": "Ачысціць архіў", - "@clearArchive": {}, "close": "Закрыць", "@close": { "type": "String", "placeholders": {} }, "commandHint_markasdm": "Пазначыць як пакой асабоных паведамленняў для дадання Matrix ID", - "@commandHint_markasdm": {}, "commandHint_markasgroup": "Пазначыць як групу", - "@commandHint_markasgroup": {}, "commandHint_ban": "Заблакіраваць карыстальніка у гэтым пакое", "@commandHint_ban": { "type": "String", @@ -654,31 +584,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Пацвердзіць", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Далучыцца", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Кантакт быў запрошаны ў групу", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Мае адлюстроўваемае імя", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Мае імя карыстальніка", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Пра кантэнт было паведамлена адміністратарам сервера", "@contentHasBeenReported": { "type": "String", @@ -709,7 +619,6 @@ } }, "checkList": "Кантрольны спіс", - "@checkList": {}, "countParticipants": "{count} удзельніка(-ў)", "@countParticipants": { "type": "String", @@ -743,7 +652,6 @@ } }, "createGroup": "Стварыць групу", - "@createGroup": {}, "createNewSpace": "Новая прастора", "@createNewSpace": { "type": "String", @@ -771,33 +679,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Гэта дэактывіруе ваш уліковы запіс. Гэта дзеянне не можа быць адменена! Вы ўпэўнены?", "@deactivateAccountWarning": { "type": "String", @@ -843,11 +724,6 @@ "type": "String", "placeholders": {} }, - "allRooms": "Усе групавыя чаты", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "displaynameHasBeenChanged": "Адлюстроўваемае імя было зменена", "@displaynameHasBeenChanged": { "type": "String", @@ -869,7 +745,6 @@ "placeholders": {} }, "chatPermissions": "Дазволы чату", - "@chatPermissions": {}, "editDisplayname": "Змяніць адлюстроўваемае імя", "@editDisplayname": { "type": "String", @@ -911,27 +786,16 @@ "placeholders": {} }, "globalChatId": "ID габальнага чату", - "@globalChatId": {}, "accessAndVisibility": "Даступнасць і бачнасць", - "@accessAndVisibility": {}, "accessAndVisibilityDescription": "Каму дазволена далучацца да гэтага чату і як ён можа быць знойдзены.", - "@accessAndVisibilityDescription": {}, "calls": "Выклікі", - "@calls": {}, "customEmojisAndStickers": "Карыстальніцкія эмодзі і стыкеры", - "@customEmojisAndStickers": {}, "customEmojisAndStickersBody": "Дадаць ці падзяліцца карыстальніцкімі эмодзі ці стыкерамі, што могуць быць ужыты ў любым чаце.", - "@customEmojisAndStickersBody": {}, "emoteShortcode": "Скарачэнне эмодзі", "@emoteShortcode": { "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Вы павінны задаць скарачэнне эмодзі і выяву!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Пусты чат", "@emptyChat": { "type": "String", @@ -977,19 +841,12 @@ } }, "enableMultiAccounts": "(БЭТА) Уключыць некалькі ўліковых запісаў на гэтай прыладзе", - "@enableMultiAccounts": {}, "enterAnEmailAddress": "Увядзіце электроную пошту (email)", "@enterAnEmailAddress": { "type": "String", "placeholders": {} }, "homeserver": "Дамашні сервер", - "@homeserver": {}, - "enterYourHomeserver": "Увядзіце адрас дамашняга сервера", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Памылка атрымання месцазнаходжання: {error}", "@errorObtainingLocation": { "type": "String", @@ -1039,20 +896,13 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Перайсці ў новы пакой", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Група", "@group": { "type": "String", "placeholders": {} }, "chatDescription": "Апісанне чату", - "@chatDescription": {}, "chatDescriptionHasBeenChanged": "Апісанне чату зменена", - "@chatDescriptionHasBeenChanged": {}, "groupIsPublic": "Група публічная", "@groupIsPublic": { "type": "String", @@ -1105,11 +955,8 @@ "placeholders": {} }, "hideRedactedMessages": "Схаваць адрэдагаваныя паведамленні", - "@hideRedactedMessages": {}, "hideRedactedMessagesBody": "Калі хтосьці рэдагуе паведамленне, яно будзе схавана ў чаце.", - "@hideRedactedMessagesBody": {}, "hideInvalidOrUnknownMessageFormats": "Хаваць памылковыя ці невядомыя фарматы паведамленняў", - "@hideInvalidOrUnknownMessageFormats": {}, "howOffensiveIsThisContent": "Наколькі абражальны гэты кантэнт?", "@howOffensiveIsThisContent": { "type": "String", @@ -1120,19 +967,10 @@ "type": "String", "placeholders": {} }, - "identity": "Ідэнтыфікацыя", - "@identity": { - "type": "String", - "placeholders": {} - }, "block": "Заблакіраваць", - "@block": {}, "blockedUsers": "Заблакіраваныя карыстальнікі", - "@blockedUsers": {}, "blockListDescription": "Вы можаце заблакіраваць карыстальнікаў, якія вам перашкаджаюць. Вы не атрымаеце ад іх ні паведамленняў, ні запрашэнняў.", - "@blockListDescription": {}, "blockUsername": "Ігнараваць імя карыстальніка", - "@blockUsername": {}, "iHaveClickedOnLink": "Я перайшоў па спасылцы", "@iHaveClickedOnLink": { "type": "String", @@ -1153,8 +991,6 @@ "type": "String", "placeholders": {} }, - "inviteContactToGroupQuestion": "Вы хаціце запрасіць {contact} да чату \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, "inviteContactToGroup": "Запрасіць кантакт да {groupName}", "@inviteContactToGroup": { "type": "String", @@ -1165,20 +1001,15 @@ } }, "noChatDescriptionYet": "Апісанне чату яшчэ няма.", - "@noChatDescriptionYet": {}, "tryAgain": "Паспрабуйце зноў", - "@tryAgain": {}, "invalidServerName": "Недапушчальная назва сервера", - "@invalidServerName": {}, "invited": "Запрошаны", "@invited": { "type": "String", "placeholders": {} }, "redactMessageDescription": "Гэта паведамленне будзе адрэдагавана для усіх карыстальнікаў. Вы не зможаце яго адмяніць.", - "@redactMessageDescription": {}, "optionalRedactReason": "(Неабавязкова) Прычына рэдагавання паведамлення...", - "@optionalRedactReason": {}, "invitedUser": "📩 {username} запрасіў(-ла) {targetName}", "@invitedUser": { "type": "String", @@ -1196,11 +1027,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Запрашэнне для мяне", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} запрасіў вас у FluffyChat.\n1. Перайдзіце на fluffychat.im і ўстанавіце праграму\n2. Зарэгестрыруйцесь альбо ўвайдзіце\n3. Перайдзіце па запрашальнай спасылцы:\n{link}", "@inviteText": { "type": "String", @@ -1280,11 +1106,6 @@ "type": "String", "placeholders": {} }, - "license": "Ліцэнзія", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Светлая", "@lightTheme": { "type": "String", @@ -1300,19 +1121,8 @@ } }, "dehydrate": "Экспарт сеансу і ачыстка прылады", - "@dehydrate": {}, "dehydrateWarning": "Гэта дзеянне не можа быць адменена. Пераканайцеся, што вы бяспечна захавалі файл рэзервовай копіі.", - "@dehydrateWarning": {}, - "dehydrateTor": "Карыстальнікі TOR: Экспарт сесіі", - "@dehydrateTor": {}, - "dehydrateTorLong": "Для карыстальнікаў TOR прапануем экспартаваць сесію перад тым, як закрыць акно.", - "@dehydrateTorLong": {}, - "hydrateTor": "Карыстальнікі TOR: Імпарт экспарту сесіі", - "@hydrateTor": {}, - "hydrateTorLong": "Вы экспартавалі сесію ў мінулы раз праз TOR? Хутка імпартуйце яе і працягніце размовы.", - "@hydrateTorLong": {}, "hydrate": "Аднавіць з рэзервовай копіі", - "@hydrate": {}, "loadingPleaseWait": "Загрузка... Калі ласка, пачакайце.", "@loadingPleaseWait": { "type": "String", @@ -1352,11 +1162,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Змяненні ўдзельнікаў", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Згадаць", "@mention": { "type": "String", @@ -1368,7 +1173,6 @@ "placeholders": {} }, "messagesStyle": "Паведамленні:", - "@messagesStyle": {}, "moderator": "Мадэратар", "@moderator": { "type": "String", @@ -1442,9 +1246,7 @@ } }, "shareInviteLink": "Падзяліцца запрашальнай спасылкай", - "@shareInviteLink": {}, "scanQrCode": "Сканіраваць QR-код", - "@scanQrCode": {}, "none": "Нічога", "@none": { "type": "String", @@ -1471,17 +1273,6 @@ "placeholders": {} }, "setChatDescription": "Задаць апісанне чату", - "@setChatDescription": {}, - "setInvitationLink": "Задаць запрашальную спасылку", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Задаць ўзровееь дазволаў", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Задаць статус", "@setStatus": { "type": "String", @@ -1516,21 +1307,11 @@ "type": "String", "placeholders": {} }, - "presenceStyle": "Прысутнасць:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Паказваць паведасленні статусаў іншых карыстальнікаў", "@presencesToggle": { "type": "String", "placeholders": {} }, - "singlesignon": "Адзіны ўваход", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Прапусціць", "@skip": { "type": "String", @@ -1560,8 +1341,6 @@ } } }, - "startFirstChat": "Пачніце ваш першы чат", - "@startFirstChat": {}, "status": "Статус", "@status": { "type": "String", @@ -1612,16 +1391,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Пераключыць Захаванае", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Пераключыць гук", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "visibleForEveryone": "Бачна ўсім", "@visibleForEveryone": { "type": "String", @@ -1647,11 +1416,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Шпалеры:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Увага!", "@warning": { "type": "String", @@ -1718,42 +1482,17 @@ "placeholders": {} }, "messageInfo": "Інфармацыя пра паведамленне", - "@messageInfo": {}, "time": "Час", - "@time": {}, "messageType": "Тып паведамлення", - "@messageType": {}, "sender": "Адпраўшчык", - "@sender": {}, "openGallery": "Адкрыць галерэю", - "@openGallery": {}, "removeFromSpace": "Выдаліць з прасторы", - "@removeFromSpace": {}, - "addToSpaceDescription": "Выберыце прастору, да якой дадаць гэты чат.", - "@addToSpaceDescription": {}, "start": "Пачаць", - "@start": {}, "pleaseEnterRecoveryKeyDescription": "Каб разблакіраваць вашы мінулыя паведамленні, калі ласка, увядзіце ключ аднаўлення, што быў згенерыраваны ў мінулай сесіі. Ключ аднаўлення гэта НЕ ваш пароль.", - "@pleaseEnterRecoveryKeyDescription": {}, - "publish": "Апублікаваць", - "@publish": {}, - "videoWithSize": "Відэа ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "openChat": "Адкрыць чат", - "@openChat": {}, "markAsRead": "Адзначыць як прачытанае", - "@markAsRead": {}, "reportUser": "Паскардзіцца на карыстальніка", - "@reportUser": {}, "dismiss": "Адхіліць", - "@dismiss": {}, "reactedWith": "{sender} рэагуе з {reaction}", "@reactedWith": { "type": "String", @@ -1767,66 +1506,17 @@ } }, "pinMessage": "Прымацаваць да пакою", - "@pinMessage": {}, "confirmEventUnpin": "Вы ўпэўнены ў тым, што хаціце назаўсёды адмацаваць гэту падзею?", - "@confirmEventUnpin": {}, "emojis": "Эмодзі", - "@emojis": {}, "placeCall": "Здзейсніць выклік", - "@placeCall": {}, "voiceCall": "Галасавы выклік", - "@voiceCall": {}, "unsupportedAndroidVersion": "Непадтрымліваемая версія Android", - "@unsupportedAndroidVersion": {}, "unsupportedAndroidVersionLong": "Гэта функцыя патрабуе навейшай версіі Android. Калі ласка, праверце наяўнасць абнаўленняў ці падтрымку Linage OS.", - "@unsupportedAndroidVersionLong": {}, "videoCallsBetaWarning": "Звярніце ўвагу, што відэа выклікі знаходзяцца ў бэце. Яны могуць працаваць некарэктна ці не на ўсіх платформах.", - "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Эксперыментальныя відэа выклікі", - "@experimentalVideoCalls": {}, - "emailOrUsername": "Email ці імя карыстальніка", - "@emailOrUsername": {}, - "indexedDbErrorTitle": "Праблемы з прыватным рэжымам", - "@indexedDbErrorTitle": {}, - "indexedDbErrorLong": "Сховішча паведамленняў, на жаль, не ўключана ў прыватным рэжыме па змаўчанні.\nКалі ласка, наведайце\n - about:config\n - што dom.indexedDB.privateBrowsing.enabled уключаны\nІнакш, FluffyChat будзе немагчыма запусціць.", - "@indexedDbErrorLong": {}, - "switchToAccount": "Пераключыцца на ўліковы запіс {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Наступны ўліковы запіс", - "@nextAccount": {}, - "previousAccount": "Мінулы ўліковы запіс", - "@previousAccount": {}, - "addWidget": "Дадаць віджэт", - "@addWidget": {}, - "widgetVideo": "Відэа", - "@widgetVideo": {}, - "widgetEtherpad": "Тэкставая нататка", - "@widgetEtherpad": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Карыстальніцкі", - "@widgetCustom": {}, - "widgetName": "Імя", - "@widgetName": {}, - "widgetUrlError": "Гэта хібны URL.", - "@widgetUrlError": {}, - "widgetNameError": "Калі ласка, укажыце адлюстроўваемаем імя.", - "@widgetNameError": {}, - "errorAddingWidget": "Памылка дадання віджэту.", - "@errorAddingWidget": {}, "youRejectedTheInvitation": "Вы скасавалі запрашэнне", - "@youRejectedTheInvitation": {}, "youJoinedTheChat": "Вы далучыліся да чату", - "@youJoinedTheChat": {}, "youAcceptedTheInvitation": "👍 Вы прынялі запрашэнне", - "@youAcceptedTheInvitation": {}, "youBannedUser": "Вы заблакіравалі {user}", "@youBannedUser": { "placeholders": { @@ -1843,14 +1533,6 @@ } } }, - "youInvitedToBy": "📩 Вы былі запрошаны па спасылцы на:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "youInvitedBy": "📩 Вы былі запрошаны карыстальнікам {user}", "@youInvitedBy": { "placeholders": { @@ -1908,35 +1590,15 @@ } }, "usersMustKnock": "Карыстальнікі абавязаны пагрукацца", - "@usersMustKnock": {}, "noOneCanJoin": "Ніхто не можа далучыцца", - "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} хоча далучыцца да чату.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Публічны ключ яшчэ не створаны", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "Пагрукацца", - "@knock": {}, "users": "Карыстальнікі", - "@users": {}, "unlockOldMessages": "Адкрыць старыя паведамленні", - "@unlockOldMessages": {}, "storeInSecureStorageDescription": "Захаваць код аднаўлення ў бяспечным месцы на прыладзе.", - "@storeInSecureStorageDescription": {}, "saveKeyManuallyDescription": "Захаваць гэты ключ самастойна, выклікам сістэмнага акна Падзяліцца ці праз буфер.", - "@saveKeyManuallyDescription": {}, "storeInAndroidKeystore": "Захаваць у Android KeyStore", - "@storeInAndroidKeystore": {}, "storeInAppleKeyChain": "Захаваць у Apple KeyChain", - "@storeInAppleKeyChain": {}, "storeSecurlyOnThisDevice": "Захаваць на гэтай прыладзе", - "@storeSecurlyOnThisDevice": {}, "countFiles": "{count} файлаў", "@countFiles": { "placeholders": { @@ -1946,56 +1608,17 @@ } }, "user": "Карыстальнік", - "@user": {}, "custom": "Карыстальніцкае", - "@custom": {}, "foregroundServiceRunning": "Гэта паведамленне з'явіцца, калі асноўныя службы запрацуюць.", - "@foregroundServiceRunning": {}, "screenSharingTitle": "падзяліцца экранам", - "@screenSharingTitle": {}, "screenSharingDetail": "Вы дзеліцеся экранам у FluffyChat", - "@screenSharingDetail": {}, - "callingPermissions": "Дазволы на выклікі", - "@callingPermissions": {}, - "callingAccount": "Уліковы запіс для выклікаў", - "@callingAccount": {}, - "callingAccountDetails": "Дазваляе FluffyChat выкарыстоўваць сістэмную праграму для выклікаў.", - "@callingAccountDetails": {}, - "appearOnTop": "З'яўляцца зверху", - "@appearOnTop": {}, - "appearOnTopDetails": "Дазваляе праграму з'яўляцца наверсе (не патрэбна, калі FluffyChat наладжаны як уліковы запіс для выклікаў)", - "@appearOnTopDetails": {}, - "otherCallingPermissions": "Мікрафон, камера і іншыя дазволы FluffyChat", - "@otherCallingPermissions": {}, "whyIsThisMessageEncrypted": "Чаму гэта паведамленне нельга прачытаць?", - "@whyIsThisMessageEncrypted": {}, "noKeyForThisMessage": "Гэта можа здарыцца з-за таго, што паведамленне было даслана да таго, як вы увайшлі ў уліковы запіс на гэтай прыладзе.\n\nТаксама верагодна, што адпраўшчык заблакіраваў вашу прыладу ці ў вас хібы з інтэрнэтам.\n\nВы можаце чытаць гэта паведамленне з іншага сеансу? Тад дашліце паведамленне адтуль! Перайдзіце ў Налады > Прылады і пераканайцеся ў тым, што вашы прылады верыфікавалі адна адну. Калі вы адкрыеце пакой наступны раз і абодве сэсіі будуць запушчаны, ключы павінны сінхранізавацца аўтаматычна.\n\nВы не хаціце згубіць клбчы, калі будзеце выходзіць ці змяняць прылады? Пераканайцеся ў тым, што вы уключылі рэзервовае капіраванне чатаў у наладах.", - "@noKeyForThisMessage": {}, "newGroup": "Новая група", - "@newGroup": {}, "newSpace": "Новая прастора", - "@newSpace": {}, - "enterSpace": "Увайсці ў прастору", - "@enterSpace": {}, - "enterRoom": "Увайсці ў пакой", - "@enterRoom": {}, "allSpaces": "Усе прасторы", - "@allSpaces": {}, - "numChats": "{number} чатаў", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Хаваць неабавязковыя падзеі статусу", - "@hideUnimportantStateEvents": {}, "hidePresences": "Хаваць спіс статусаў?", - "@hidePresences": {}, "doNotShowAgain": "Не паказваць зноў", - "@doNotShowAgain": {}, "wasDirectChatDisplayName": "Пусты чат (быў {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2006,21 +1629,13 @@ } }, "newSpaceDescription": "Прасторы дазваляюць аб'ядноўваць вашы чаты і ствараць агульныя ці асобныя супольнасці.", - "@newSpaceDescription": {}, "encryptThisChat": "Шыфраваць гэты чат", - "@encryptThisChat": {}, "disableEncryptionWarning": "У мэтах бяспекі, вы не можаце адклбчауь шыфраванне ў гэтым чаце, дзе яно было ўключана.", - "@disableEncryptionWarning": {}, "sorryThatsNotPossible": "Прабачце... Гэта немагчыма", - "@sorryThatsNotPossible": {}, "deviceKeys": "Ключы прылад:", - "@deviceKeys": {}, "reopenChat": "Адкрыць чат зноў", - "@reopenChat": {}, "noBackupWarning": "Увага! Без уключэння рэзервовага капіравання чатаў, вы страціце доступ да вашых зашыфраваных паведамленняў. Настойліва рэкамендуецца уключыць фукнцыю да таго, як выйсці.", - "@noBackupWarning": {}, "noOtherDevicesFound": "Іншыя прылады не знойдзены", - "@noOtherDevicesFound": {}, "fileIsTooBigForServer": "Немагчыма даслаць! Сервер падтрымлівае файлы да {max}.", "@fileIsTooBigForServer": { "type": "String", @@ -2040,57 +1655,30 @@ } }, "jumpToLastReadMessage": "Перайсці да апошняга паведамлення", - "@jumpToLastReadMessage": {}, "readUpToHere": "Чытаць тут", - "@readUpToHere": {}, "jump": "Перайсці", - "@jump": {}, "openLinkInBrowser": "Адкрыць спасылку ў браўзеры", - "@openLinkInBrowser": {}, "reportErrorDescription": "😭 О не, штосьці пайшло не так. Калі жадаеце, можаце падаць справаздачу аб памылке распрауоўшчыкам.", - "@reportErrorDescription": {}, "report": "паскардзіцца", - "@report": {}, - "signInWithPassword": "Увайсці з паролем", - "@signInWithPassword": {}, "manageAccount": "Кіраванне ўліковым запісам", - "@manageAccount": {}, "noContactInformationProvided": "Сервер не мае ніякай вернай кантактнай інфармацыі", - "@noContactInformationProvided": {}, "contactServerAdmin": "Звязацца з адміністратарам сервера", - "@contactServerAdmin": {}, "contactServerSecurity": "Звязацца з сервернай бяспекай", - "@contactServerSecurity": {}, "supportPage": "Падтрымка", - "@supportPage": {}, "serverInformation": "Серверная інфармацыя:", - "@serverInformation": {}, "name": "Імя", - "@name": {}, "version": "Версія", - "@version": {}, "website": "Сайт", - "@website": {}, "compress": "Сцісканне", - "@compress": {}, "boldText": "Цёмны", - "@boldText": {}, "italicText": "Курсіў", - "@italicText": {}, "strikeThrough": "Перакрэслены", - "@strikeThrough": {}, "pleaseFillOut": "Калі ласка, запоўніце", - "@pleaseFillOut": {}, "invalidUrl": "Няслушны url", - "@invalidUrl": {}, "addLink": "Дадаць спасылку", - "@addLink": {}, "unableToJoinChat": "Немагчыма далучыцца да чату. Магчыма, іншы бок ужо скончыў размову.", - "@unableToJoinChat": {}, "previous": "Мінулы", - "@previous": {}, "otherPartyNotLoggedIn": "Іншы бок зараз не увайшоў, таму не можа атрымліваць паведамленні!", - "@otherPartyNotLoggedIn": {}, "appWantsToUseForLogin": "Выкарыстоўваць '{server}' для ўвахода", "@appWantsToUseForLogin": { "type": "String", @@ -2101,82 +1689,40 @@ } }, "appWantsToUseForLoginDescription": "Тым самым, вы дазваляеце праграме і сайту дзяліцца інфармацыяй пра вас.", - "@appWantsToUseForLoginDescription": {}, "open": "Адкрыць", - "@open": {}, "waitingForServer": "Чаканне сервера...", - "@waitingForServer": {}, - "appIntroduction": "FluffyChat дазваляе вам і вашым сябрам размаўляць скрозь розныя мэсэнджары. Даведайцеся болей на https://matrix.org ці націсніце *Працягнуць*.", - "@appIntroduction": {}, "newChatRequest": "📩 Запыт новага чату", - "@newChatRequest": {}, "contentNotificationSettings": "Налады паведамленняў кантэнту", - "@contentNotificationSettings": {}, "generalNotificationSettings": "Агульныя налады паведамленняў", - "@generalNotificationSettings": {}, "roomNotificationSettings": "Налады паведамленняў пакою", - "@roomNotificationSettings": {}, "userSpecificNotificationSettings": "Налады паведамленняў карыстальніка", - "@userSpecificNotificationSettings": {}, "otherNotificationSettings": "Іншыя налады паведамленняў", - "@otherNotificationSettings": {}, "notificationRuleContainsUserName": "Змяшчае імя карыстальніка", - "@notificationRuleContainsUserName": {}, "notificationRuleContainsUserNameDescription": "Паведамляе пра тое, што паведамленне мае імя карыстальніка.", - "@notificationRuleContainsUserNameDescription": {}, "notificationRuleMaster": "Заглушыць усе паведамленні", - "@notificationRuleMaster": {}, "notificationRuleMasterDescription": "Перазапісвае ўсе іншыя правілы і адключае паведамленні.", - "@notificationRuleMasterDescription": {}, "notificationRuleSuppressNotices": "Адключыць аўтаматычныя паведамленні", - "@notificationRuleSuppressNotices": {}, "notificationRuleSuppressNoticesDescription": "Адключыць паведамленні ад аўтаматызаваных кліентаў, накшталт ботаў.", - "@notificationRuleSuppressNoticesDescription": {}, "notificationRuleInviteForMe": "Запрашэнне мяне", - "@notificationRuleInviteForMe": {}, "notificationRuleInviteForMeDescription": "Паведамляе карыстальніка, калі яго запрашаюць у пакой.", - "@notificationRuleInviteForMeDescription": {}, "allDevices": "Усе прылады", - "@allDevices": {}, "crossVerifiedDevicesIfEnabled": "З перакрыжаваным спраўджваннем прылад, калі ўключана", - "@crossVerifiedDevicesIfEnabled": {}, "crossVerifiedDevices": "Перакрыжавана спраўджаныя прылады", - "@crossVerifiedDevices": {}, "verifiedDevicesOnly": "Толькі спраўджаныя прылады", - "@verifiedDevicesOnly": {}, "takeAPhoto": "Зрабіць здымак", - "@takeAPhoto": {}, "recordAVideo": "Запісаць відэа", - "@recordAVideo": {}, "optionalMessage": "(Апцыянальна) паведамленне...", - "@optionalMessage": {}, "notSupportedOnThisDevice": "Не падтрымліваецца на гэтай прыладзе", - "@notSupportedOnThisDevice": {}, "enterNewChat": "Увядзіце новы чат", - "@enterNewChat": {}, "approve": "Пацвердзіць", - "@approve": {}, "youHaveKnocked": "Вы былі выгнаны", - "@youHaveKnocked": {}, "pleaseWaitUntilInvited": "Калі ласка, пачакайце, пакуль хтосьці з пакою вас не запрасіць.", - "@pleaseWaitUntilInvited": {}, "commandHint_logout": "Выйсці з бягуяай прылады", - "@commandHint_logout": {}, "commandHint_logoutall": "Выйсці на ўсіх актыўных прыладах", - "@commandHint_logoutall": {}, "displayNavigationRail": "Паказваць навігацыйны след на тэлефоне", - "@displayNavigationRail": {}, "customReaction": "Карыстальніцкая рэакцыя", - "@customReaction": {}, "moreEvents": "Больш падзей", - "@moreEvents": {}, "declineInvitation": "Скасаваць запрашэнне", - "@declineInvitation": {}, - "notificationsEnabledForThisAccount": "Паведамленні ўклбчаны для гжтага ўліковага запісу", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} карыстальнікаў пішуць…", "@numUsersTyping": { "type": "String", @@ -2236,32 +1782,19 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Адкрыць камеру для відэа", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "oneClientLoggedOut": "Адзін з вашых кліентаў выйшаў", - "@oneClientLoggedOut": {}, "addAccount": "Дадаць уліковы запіс", - "@addAccount": {}, "editBundlesForAccount": "Змяніць пакеты для гэтага ўліковага запісу", - "@editBundlesForAccount": {}, "addToBundle": "Дадаць у пакет", - "@addToBundle": {}, "removeFromBundle": "Выдаліць з пакета", - "@removeFromBundle": {}, "bundleName": "Назва пакета", - "@bundleName": {}, "openInMaps": "Адкрыць на картах", "@openInMaps": { "type": "String", "placeholders": {} }, "link": "Спасылка", - "@link": {}, "serverRequiresEmail": "Гэты сервер павінен спраўдзіць ваш email для рэгістрацыі.", - "@serverRequiresEmail": {}, "or": "Ці", "@or": { "type": "String", @@ -2292,26 +1825,13 @@ "type": "String", "placeholders": {} }, - "hideMemberChangesInPublicChats": "Хаваць змяненні ўдзельнікаў у публічных чатах", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Не паказваць далучэнні і выхады з чату ў шкале часу для лепшай чытальнасці.", - "@hideMemberChangesInPublicChatsBody": {}, "overview": "Агляд", - "@overview": {}, - "notifyMeFor": "Паведамляць мяне пра", - "@notifyMeFor": {}, "passwordRecoverySettings": "Налады скіду пароля", - "@passwordRecoverySettings": {}, "passwordRecovery": "Аднаўленне пароля", "@passwordRecovery": { "type": "String", "placeholders": {} }, - "people": "Людзі", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Абраць выяву", "@pickImage": { "type": "String", @@ -2331,11 +1851,6 @@ } } }, - "pleaseChoose": "Калі ласка, выберыце", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Калі ласка, выберыце код доступу", "@pleaseChooseAPasscode": { "type": "String", @@ -2351,8 +1866,6 @@ "type": "String", "placeholders": {} }, - "pleaseEnterRecoveryKey": "Увядзіце ключ аднаўлення:", - "@pleaseEnterRecoveryKey": {}, "pleaseEnterYourPassword": "Калі ласка, увядзіце ваш пароль", "@pleaseEnterYourPassword": { "type": "String", @@ -2408,7 +1921,6 @@ } }, "directChat": "Асобны чат", - "@directChat": {}, "redactedByBecause": "Адрэдагавана {username}, прычына: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2454,11 +1966,6 @@ } } }, - "rejoin": "Далучыцца зноў", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "removeAllOtherDevices": "Выдаліць усе іншыя прылады", "@removeAllOtherDevices": { "type": "String", @@ -2473,11 +1980,6 @@ } } }, - "removeDevice": "Выдаліць прыладу", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Разблакіраваць у чаце", "@unbanFromChat": { "type": "String", @@ -2534,18 +2036,7 @@ "placeholders": {} }, "recoveryKey": "Ключ аднаўлення", - "@recoveryKey": {}, "recoveryKeyLost": "Ключ абнаўлення страчаны?", - "@recoveryKeyLost": {}, - "seenByUser": "Прагледжана {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Даслаць", "@send": { "type": "String", @@ -2589,16 +2080,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Даслаць арыгінал", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Даслаць стыкер", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Даслаць відэа", "@sendVideo": { "type": "String", @@ -2658,26 +2139,11 @@ } } }, - "separateChatTypes": "Падзяляць асобныя чаты і групы", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Задаць як асноўны псеўданім", "@setAsCanonicalAlias": { "type": "String", "placeholders": {} }, - "setCustomEmotes": "Задаць карыстальніцкі эмодзі", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Пазначыць прачытаным/непрачытаным", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Занадта шмат запытаў. Паспрабуйце пазней!", "@tooManyRequestsWarning": { "type": "String", @@ -2744,15 +2210,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 непрачытаны чат} other{{unreadCount} непрачытаных чатаў}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} і {count} іншых удзельнікаў пішуць…", "@userAndOthersAreTyping": { "type": "String", @@ -2813,7 +2270,6 @@ } }, "unverified": "Не спраўджана", - "@unverified": {}, "verified": "Спраўджана", "@verified": { "type": "String", @@ -2845,19 +2301,12 @@ "placeholders": {} }, "verifyOtherUserDescription": "Калі вы спраўдзілі іншага карыстальніка, вы можаце быць упэўненым з кім вы сапраўды перапісваецеся.💪\n\nКалі вы пачнеце спраўджванне, вы і іншы карыстальнік, убачыце ўсплывальнае акно ў праграме. У ім вы ўбачыце некалькі эмодзі ці лічб, якія вы павінны параўнаць адзін з адным.\n\nЛепшы метад зрабіць гэта - пачаць відэа выклік. 👭", - "@verifyOtherUserDescription": {}, "pleaseEnterANumber": "Калі ласка, увядзіце лічбу большую за 0", - "@pleaseEnterANumber": {}, "verifyOtherDeviceDescription": "Калі вы спраўдзіце другую прыладу, яны абмяняюцца ключамі, якія ўзмоцняць вашу бяспеку. 💪 Калі вы пачнеце спраўджванне, у праграмах прылад з'явіцца ўсплывальнае паведамленне. Потым, вы ўбачыце некалькі эмодзі ці лічбаў, якія вы павінны параўнаць паміж сабой. Прасцей за ўсё гэта зрабіць, маючы дзве прылады побач. 🤳", - "@verifyOtherDeviceDescription": {}, "verifyOtherUser": "🔐 Спраўдзіць іншага карыстальніка", - "@verifyOtherUser": {}, "verifyOtherDevice": "🔐 Спраўдзіць іншую прыладу", - "@verifyOtherDevice": {}, "changeTheCanonicalRoomAlias": "Змяніць публічны адрас чату", - "@changeTheCanonicalRoomAlias": {}, "wrongRecoveryKey": "Прабачце... гэта не выглядае як ключ аднаўлення.", - "@wrongRecoveryKey": {}, "restoreSessionBody": "Праграма спрабуе аднавіць вашу сесію з рэзервовай копіі. Калі ласка, паведаміце пра памылку распрацоўшчыкам па спасылцы {url}. Паведамленне памылкі: {error}", "@restoreSessionBody": { "type": "String", @@ -2870,10 +2319,7 @@ } } }, - "homeserverDescription": "Вашыя даныя захоўваюцца на дамашнім серверы, як у правайдара электронай пошты. Вы можаце самастойна абраць дамашні сервер, захоўвая пры тым магчымасць размаўляць. Даведайцеся болей на https://matrix.org.", - "@homeserverDescription": {}, "longPressToRecordVoiceMessage": "Доўга цісніце, каб запісаць галасавое паведамленне.", - "@longPressToRecordVoiceMessage": {}, "visibilityOfTheChatHistory": "Бачнасць гісторыі чату", "@visibilityOfTheChatHistory": { "type": "String", @@ -2884,31 +2330,10 @@ "type": "String", "placeholders": {} }, - "pleaseTryAgainLaterOrChooseDifferentServer": "Калі ласка, паспрабуйце пазней ці абярыце іншы сервер.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "Увайсці з {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "profileNotFound": "Карыстальнік не знойдзены на гэтым серверы. Гэта можа быць памылка сеткі ці карыстальніка не існуе.", - "@profileNotFound": {}, - "setTheme": "Тэма:", - "@setTheme": {}, "setColorTheme": "Каляровая схема:", - "@setColorTheme": {}, "invite": "Запрасіць", - "@invite": {}, "inviteGroupChat": "📨 Запрашэнне ў групавы чат", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Запрашэнне ў асобны чат", - "@invitePrivateChat": {}, "invalidInput": "Недапушчальны ўвод!", - "@invalidInput": {}, "wrongPinEntered": "Няверны пін-код! Паспрабуйце праз {seconds} секунд...", "@wrongPinEntered": { "type": "String", @@ -2919,29 +2344,17 @@ } }, "archiveRoomDescription": "Чат перамясціцца ў архіў. Іншыя карыстальнікі будуць бачыць гэта так, быццам вы выйшлі з чату.", - "@archiveRoomDescription": {}, "roomUpgradeDescription": "Чат будзе пераствораны з новай версіяй пакою. Усе ўдзельнікі будуць паведамлены пра неабходнасць перайсці ў новы чат. Вы можаце даведацца пра версіі пакояў тут: https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, "removeDevicesDescription": "Вы выйдзеце з гэтай прылады і больш не будзеце атрымліваць паведамленні.", - "@removeDevicesDescription": {}, "sendTypingNotificationsDescription": "Іншыя ўдзельнікі чату могуць бачыць, калі вы пішаце новае паведамленне.", - "@sendTypingNotificationsDescription": {}, "continueText": "Працягнуць", - "@continueText": {}, "banUserDescription": "Карыстальнік будзе заблакіраваны з чату і больш не зможа ўвайсці, пакуль вы яго не разблакіруеце.", - "@banUserDescription": {}, "unbanUserDescription": "Карыстальнік зможа зноў далучыцца да чату.", - "@unbanUserDescription": {}, "kickUserDescription": "Карыстальнік будзе выгнаны, але не заблакіраваны. У публічных чатах, ён зможа далучыцца зноў у любы час.", - "@kickUserDescription": {}, "makeAdminDescription": "Калі вы зробіце карыстальніка адміністратарам, вы не зможаце адмяніць гэта дзеянне, бо ён будзе мець такія ж правы, як і вы.", - "@makeAdminDescription": {}, "pushNotificationsNotAvailable": "Пуш-паведамленні недаступны", - "@pushNotificationsNotAvailable": {}, "learnMore": "Даведацца больш", - "@learnMore": {}, "yourGlobalUserIdIs": "Ваш глабальны ID-карыстальніка: ", - "@yourGlobalUserIdIs": {}, "noUsersFoundWithQuery": "На жаль, мы не змаглі знайсці карыстальніка з імём \"{query}\". Калі ласка, праверце наяўнасць памылак.", "@noUsersFoundWithQuery": { "type": "String", @@ -2952,9 +2365,7 @@ } }, "knocking": "Грукацца", - "@knocking": {}, "knockRestricted": "Грук абмежаваны", - "@knockRestricted": {}, "spaceMemberOfCanKnock": "Удзельнікі прасторы з {spaces} могуць грукацца", "@spaceMemberOfCanKnock": { "type": "String", @@ -2974,70 +2385,28 @@ } }, "searchChatsRooms": "Пошук #чатаў, @карыстальнікаў...", - "@searchChatsRooms": {}, "nothingFound": "Нічога не знойдзена...", - "@nothingFound": {}, "groupName": "Назва групы", - "@groupName": {}, "createGroupAndInviteUsers": "Стварыць групу і запрасіць карыстальнікаў", - "@createGroupAndInviteUsers": {}, "groupCanBeFoundViaSearch": "Група можа быць знойдзена праз пошук", - "@groupCanBeFoundViaSearch": {}, - "startConversation": "Пачаць размову", - "@startConversation": {}, "commandHint_sendraw": "Даслаць толькі json", - "@commandHint_sendraw": {}, "databaseMigrationTitle": "База даных аптымізавана", - "@databaseMigrationTitle": {}, "databaseMigrationBody": "Калі ласка, пачакайце. Гэта можа заняць некаторы час.", - "@databaseMigrationBody": {}, "leaveEmptyToClearStatus": "Пакіньце пустым, каб ачысціць свой статус.", - "@leaveEmptyToClearStatus": {}, "select": "Выбраць", - "@select": {}, "searchForUsers": "Пошук @карыстальнікаў...", - "@searchForUsers": {}, "pleaseEnterYourCurrentPassword": "Калі ласка, увядзіце свой бягучы пароль", - "@pleaseEnterYourCurrentPassword": {}, "newPassword": "Новы пароль", - "@newPassword": {}, "pleaseChooseAStrongPassword": "Калі ласка, падбярыце больш надзейны пароль", - "@pleaseChooseAStrongPassword": {}, "passwordsDoNotMatch": "Паролі не супадаюць", - "@passwordsDoNotMatch": {}, "passwordIsWrong": "Вы ўвялі няверны пароль", - "@passwordIsWrong": {}, - "publicLink": "Публічная спасылка", - "@publicLink": {}, "publicChatAddresses": "Публічныя адрасы чату", - "@publicChatAddresses": {}, "createNewAddress": "Стварыць новы адрас", - "@createNewAddress": {}, "joinSpace": "Далучыцца да прасторы", - "@joinSpace": {}, "publicSpaces": "Публічныя прасторы", - "@publicSpaces": {}, "addChatOrSubSpace": "Дадаць чат ці пад-прастору", - "@addChatOrSubSpace": {}, - "subspace": "Пад-прастора", - "@subspace": {}, - "decline": "Адхіліць", - "@decline": {}, "thisDevice": "Гэта прылада:", - "@thisDevice": {}, "initAppError": "Адбылася памылка пры ініцыялізацыі праграмы", - "@initAppError": {}, - "userRole": "Роль карыстальніка", - "@userRole": {}, - "minimumPowerLevel": "{level} - мінімальны ўзровень дазволаў.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchIn": "Пошук у чаце \"{chat}\"...", "@searchIn": { "type": "String", @@ -3048,23 +2417,8 @@ } }, "searchMore": "Шукаць яшчэ...", - "@searchMore": {}, "gallery": "Галерэя", - "@gallery": {}, "files": "Файлы", - "@files": {}, - "databaseBuildErrorBody": "Немагчыма стварыць базу даных SQlite. Праграма спрабуе выкарыстоўваць састарэлую базу. Калі ласка, паведаміце распрацоўшчыкам пра гэта: {url}. Паведамленне памылкі: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Ваш сеанс страчаны. Калі ласка, паведаміце пра гэта распрацоўшчыкам: {url}. Паведамленне памылкі: {error}", "@sessionLostBody": { "type": "String", @@ -3077,23 +2431,10 @@ } } }, - "forwardMessageTo": "Пераслаць паведамленне ў {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Дасылаць адзнаку аб чытанні", - "@sendReadReceipts": {}, "sendReadReceiptsDescription": "Іншыя карыстальнікі чатаў будуць бачыць, калі вы прачыталі паведамленні.", - "@sendReadReceiptsDescription": {}, "formattedMessages": "Фармаціраваныя паведамленні", - "@formattedMessages": {}, "formattedMessagesDescription": "Адлюстроўваць пашыраныя паведамленні разметкай markdown.", - "@formattedMessagesDescription": {}, "acceptedKeyVerification": "{sender} прыняў(-ла) спраўджванне ключэй", "@acceptedKeyVerification": { "type": "String", @@ -3149,17 +2490,11 @@ } }, "transparent": "Празрысты", - "@transparent": {}, "incomingMessages": "Уваходныя паведамленні", - "@incomingMessages": {}, "stickers": "Стыкеры", - "@stickers": {}, "discover": "Даследаваць", - "@discover": {}, "commandHint_ignore": "Ігнараваць дадзены matrix ID", - "@commandHint_ignore": {}, "commandHint_unignore": "Перастаць ігнараваць дадзены matrix ID", - "@commandHint_unignore": {}, "unreadChatsInApp": "{appname}: {unread} непрачытаных чатаў", "@unreadChatsInApp": { "type": "String", @@ -3173,21 +2508,18 @@ } }, "noDatabaseEncryption": "Шыфраванне базы даных не падтрымліваецца гэтай платформай", - "@noDatabaseEncryption": {}, "thereAreCountUsersBlocked": "На гэты момант, {count} карыстальнікаў заблакіравана.", "@thereAreCountUsersBlocked": { "type": "String", "count": {} }, "restricted": "Абмежавана", - "@restricted": {}, "goToSpace": "Перайсці да прасторы: {space}", "@goToSpace": { "type": "String", "space": {} }, "markAsUnread": "Адзначыць як непрачытанае", - "@markAsUnread": {}, "userLevel": "{level} - Карыстальнік", "@userLevel": { "type": "String", @@ -3216,19 +2548,12 @@ } }, "changeGeneralChatSettings": "Змяніць агульныя налады чату", - "@changeGeneralChatSettings": {}, "inviteOtherUsers": "Запрасіць іншых карыстальнікаў у гэты чат", - "@inviteOtherUsers": {}, "changeTheChatPermissions": "Змяніць дазволы чату", - "@changeTheChatPermissions": {}, "changeTheVisibilityOfChatHistory": "Змяніць бачнасць гісторыі чату", - "@changeTheVisibilityOfChatHistory": {}, "sendRoomNotifications": "Дасылаць паведамленні @room", - "@sendRoomNotifications": {}, "changeTheDescriptionOfTheGroup": "Змяніць апісанне чату", - "@changeTheDescriptionOfTheGroup": {}, "chatPermissionsDescription": "Задаць узровень дазволаў, які неабходны для некаторых дзеянняў у чаце. Узроўні 0, 50 і 100 звычайна адлюстроўваюць карыстальнікаў, мадэратараў і адміністратараў, але любая градацыя магчыма.", - "@chatPermissionsDescription": {}, "updateInstalled": "🎉 Абнаўленне {version} усталявана!", "@updateInstalled": { "type": "String", @@ -3239,27 +2564,14 @@ } }, "changelog": "Спіс змен", - "@changelog": {}, "sendCanceled": "Адпраўка скасавана", - "@sendCanceled": {}, "loginWithMatrixId": "Увайсці з Matrix-ID", - "@loginWithMatrixId": {}, - "discoverHomeservers": "Даследаваць дамашнія сервера", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "Што такое дамашні сервер?", - "@whatIsAHomeserver": {}, "doesNotSeemToBeAValidHomeserver": "Гэта не выглядае як дамашні сервер. Няслушны URL?", - "@doesNotSeemToBeAValidHomeserver": {}, "calculatingFileSize": "Вылічэнне памеру файла...", - "@calculatingFileSize": {}, "prepareSendingAttachment": "Падрыхтоўка адпраўкі прыкладання...", - "@prepareSendingAttachment": {}, "sendingAttachment": "Адпраўка прыкладання...", - "@sendingAttachment": {}, "generatingVideoThumbnail": "Стварэнне вокладкі відэа...", - "@generatingVideoThumbnail": {}, "compressVideo": "Сцісканне відэа...", - "@compressVideo": {}, "sendingAttachmentCountOfCount": "Адпраўляецца прыкладанне {index} з {length}...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3282,81 +2594,43 @@ } }, "oneOfYourDevicesIsNotVerified": "Адна з вашых прылад не спраўджана", - "@oneOfYourDevicesIsNotVerified": {}, "noticeChatBackupDeviceVerification": "Заўвага: Калі вы падключыце ўсе свае прылады да рэзервовага капіравання, яны аўтаматычна спраўдзяцца.", - "@noticeChatBackupDeviceVerification": {}, "welcomeText": "Вітаначкі 👋 Гэта FluffyChat. Вы можаце ўвайсці на любы дамашні сервер, што сумяшчальны з https://matrix.org, а потым паразмаўляць з кім-небудзь. Гэта вялізная дэцэнтралізаваная сетка абмену паведамленнямі!", - "@welcomeText": {}, "blur": "Размыццё:", - "@blur": {}, "opacity": "Празрыстасць:", - "@opacity": {}, "setWallpaper": "Задаць шпалеры", - "@setWallpaper": {}, "notificationRuleMemberEvent": "Падзеі ўдзельніцтва", - "@notificationRuleMemberEvent": {}, "notificationRuleMemberEventDescription": "Спыніць усе паведамленні пра ўдзельніцтва.", - "@notificationRuleMemberEventDescription": {}, "notificationRuleIsUserMention": "Згадванні карыстальніка", - "@notificationRuleIsUserMention": {}, "notificationRuleIsUserMentionDescription": "Паведамляе, калі карыстальніка згадалі ў паведамленні.", - "@notificationRuleIsUserMentionDescription": {}, "notificationRuleContainsDisplayName": "Мае адлюстроўваемае імя", - "@notificationRuleContainsDisplayName": {}, "notificationRuleContainsDisplayNameDescription": "Паведамляе, калі паведамленне мае іх адлюстроўваемае імя.", - "@notificationRuleContainsDisplayNameDescription": {}, "notificationRuleIsRoomMention": "Згадванні пакою", - "@notificationRuleIsRoomMention": {}, "notificationRuleIsRoomMentionDescription": "Паведамляе карыстальніка, калі згадваюць пакой.", - "@notificationRuleIsRoomMentionDescription": {}, "notificationRuleRoomnotif": "Паведамленні пакою", - "@notificationRuleRoomnotif": {}, "notificationRuleRoomnotifDescription": "Паведамляе пра згадванні '@room'.", - "@notificationRuleRoomnotifDescription": {}, "notificationRuleTombstone": "Помнік", - "@notificationRuleTombstone": {}, "notificationRuleTombstoneDescription": "Паведамляе пра дэактывацыю пакою.", - "@notificationRuleTombstoneDescription": {}, "notificationRuleReaction": "Рэакцыя", - "@notificationRuleReaction": {}, "notificationRuleReactionDescription": "Адключыць усе паведамленні пра рэакцыі.", - "@notificationRuleReactionDescription": {}, "notificationRuleRoomServerAcl": "ACL сервера пакою", - "@notificationRuleRoomServerAcl": {}, "notificationRuleRoomServerAclDescription": "Адключыць паведамленні пра серверныя спісы кантролю пакою (ACL).", - "@notificationRuleRoomServerAclDescription": {}, "notificationRuleSuppressEdits": "Заглушыць змены", - "@notificationRuleSuppressEdits": {}, "notificationRuleSuppressEditsDescription": "Заглушыць паведамленні пра адрэдагаваныя паведамленні.", - "@notificationRuleSuppressEditsDescription": {}, "notificationRuleCall": "Выклік", - "@notificationRuleCall": {}, "notificationRuleCallDescription": "Паведамляе пра выклікі.", - "@notificationRuleCallDescription": {}, "notificationRuleEncryptedRoomOneToOne": "Шыфраваны пакой One-to-One", - "@notificationRuleEncryptedRoomOneToOne": {}, "notificationRuleEncryptedRoomOneToOneDescription": "Паведамляе пра паведамленні ў шыфраваных one-to-one пакоях.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, "notificationRuleRoomOneToOne": "Пакой One-to-One", - "@notificationRuleRoomOneToOne": {}, "notificationRuleRoomOneToOneDescription": "Паведамляе пра паведамленні ў пакоях one-to-one.", - "@notificationRuleRoomOneToOneDescription": {}, "notificationRuleMessage": "Паведамленне", - "@notificationRuleMessage": {}, "notificationRuleMessageDescription": "Паведамляе пра звычайныя паведамленні.", - "@notificationRuleMessageDescription": {}, "notificationRuleEncrypted": "Зашыфравана", - "@notificationRuleEncrypted": {}, "notificationRuleEncryptedDescription": "Паведамляе пра паведамленні ў зашыфраваных пакоях.", - "@notificationRuleEncryptedDescription": {}, "notificationRuleJitsi": "Jitsi", - "@notificationRuleJitsi": {}, "notificationRuleJitsiDescription": "Паведамляе пра падзеі віджэту Jitsi.", - "@notificationRuleJitsiDescription": {}, "notificationRuleServerAcl": "Заглушыць серверныя падзеі ACL", - "@notificationRuleServerAcl": {}, "notificationRuleServerAclDescription": "Заглушыць паведамленні пра серверныя падзеі ACL.", - "@notificationRuleServerAclDescription": {}, "unknownPushRule": "Невядомае правіла пуша '{rule}'", "@unknownPushRule": { "type": "String", @@ -3379,27 +2653,12 @@ } }, "deletePushRuleCanNotBeUndone": "Калі вы выдаліце гэтыя налады паведамленняў, гэта не можа быць адменена.", - "@deletePushRuleCanNotBeUndone": {}, "more": "Больш", - "@more": {}, "shareKeysWith": "Падзяліцца ключамі з...", - "@shareKeysWith": {}, "shareKeysWithDescription": "Якім прыладам вы давяраеце настолькі, каб яны маглі чытаць вашыя зашыфраваныя паведамленні?", - "@shareKeysWithDescription": {}, "pause": "Паўза", - "@pause": {}, "resume": "Працягнуць", - "@resume": {}, - "newSubSpace": "Новая пад-прастора", - "@newSubSpace": {}, - "moveToDifferentSpace": "Перамясціцца ў іншую прастору", - "@moveToDifferentSpace": {}, - "moveUp": "Перамясціць вышэй", - "@moveUp": {}, - "moveDown": "Перамясціць ніжэй", - "@moveDown": {}, "removeFromSpaceDescription": "Гэты чат будзе выдалены з прасторы, але з'явіцца ў вашым спісе чатаў.", - "@removeFromSpaceDescription": {}, "countChats": "{chats} чатаў", "@countChats": { "type": "String", @@ -3418,8 +2677,6 @@ } } }, - "donate": "Даць грошы", - "@donate": {}, "startedAPoll": "{username} пачаў апытанне.", "@startedAPoll": { "type": "String", @@ -3430,25 +2687,14 @@ } }, "poll": "Апытанне", - "@poll": {}, "startPoll": "Пачаць апытанне", - "@startPoll": {}, "endPoll": "Скончыць апытанне", - "@endPoll": {}, "answersVisible": "Адказы бачны", - "@answersVisible": {}, - "answersHidden": "Адказы схаваны", - "@answersHidden": {}, "pollQuestion": "Пытанне апытання", - "@pollQuestion": {}, "answerOption": "Варыянт адказу", - "@answerOption": {}, "addAnswerOption": "Дадаць варыянт адказу", - "@addAnswerOption": {}, "allowMultipleAnswers": "Дазволіць некалькі адказаў", - "@allowMultipleAnswers": {}, "pollHasBeenEnded": "Апытанне было скончана", - "@pollHasBeenEnded": {}, "countVotes": "{count, plural, =1{Адзін голас} other{{count} галасы(-оў)}}", "@countVotes": { "type": "int", @@ -3459,9 +2705,7 @@ } }, "answersWillBeVisibleWhenPollHasEnded": "Вынікі будуць бачны, калі апытанне скончыцца", - "@answersWillBeVisibleWhenPollHasEnded": {}, "replyInThread": "Адказаць у гутарку", - "@replyInThread": {}, "countReplies": "{count, plural, =1{Адзін адказ} other{{count} адказа(-ў)}}", "@countReplies": { "type": "int", @@ -3472,31 +2716,84 @@ } }, "thread": "Гутарка", - "@thread": {}, "backToMainChat": "Вярнуцца ў галоўны чат", - "@backToMainChat": {}, "saveChanges": "Захаваць змены", - "@saveChanges": {}, "createSticker": "Стварыць стыкер ці эмадзі", - "@createSticker": {}, "useAsSticker": "Ужыць як стыкер", - "@useAsSticker": {}, "useAsEmoji": "Ужыць як эмадзі", - "@useAsEmoji": {}, "stickerPackNameAlreadyExists": "Назва набору стыкераў ужо існуе", - "@stickerPackNameAlreadyExists": {}, "newStickerPack": "Новы набор стыкераў", - "@newStickerPack": {}, "stickerPackName": "Назва набору стыкераў", - "@stickerPackName": {}, "attribution": "Атрыбуцыя", - "@attribution": {}, "skipChatBackup": "Прапусціць рэзервовае капіраванне чатаў", - "@skipChatBackup": {}, "skipChatBackupWarning": "Вы ўпэўнены? Без наладжвання рэзервовага капіравання чатаў, вы можаце згубіць доступ да ўсіх вашых чатаў, калі вы зменіце прыладу.", - "@skipChatBackupWarning": {}, "loadingMessages": "Загрузка паведамленняў", - "@loadingMessages": {}, "setupChatBackup": "Наладзіць рэзервовае капіраванне чатаў", - "@setupChatBackup": {} + "changedTheChatDescription": "{username} змяніў апісанне чата", + "changedTheChatName": "{username} змяніў назву чата", + "noMoreResultsFound": "Нічога не знойдзена", + "chatSearchedUntil": "Пошук у чаце да {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "Асноўны URL федэрацыі", + "clientWellKnownInformation": "Client-Well-Known інфармацыя:", + "baseUrl": "Базавы URL", + "identityServer": "Сервер профілей:", + "versionWithNumber": "Версія: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Логі", + "advancedConfigs": "Пашыраныя налады", + "advancedConfigurations": "Пашыраная канфігурацыя", + "signIn": "Увайсці", + "createNewAccount": "Стварыць новы ўліковы запіс", + "signUpGreeting": "FluffyChat дэцэнтралізаваны! Выберыце свой сервер, дзе вы хаціце стварыць уліковы запіс і прайягвайце!", + "signInGreeting": "Вы ўжо маеце ўліковы запіс у Matrix? З вяртаннем! Выберыце свой хатні сервер і аўтарызуйцеся.", + "appIntro": "З дапамогай FluffyChat вы можаце размаўляць з вашымі сябрамі. Гэта бяспечны дэцэнтралізаваны [matrix] мэнэджэр! Даведайцеся больш на https://matrix.org, калі хаціце ці проста ўвайдзіце.", + "theProcessWasCanceled": "Працэс быў скасаваны.", + "join": "Далучыцца", + "searchOrEnterHomeserverAddress": "Пашукайце ці ўвядзіце адрас хатняга сервера", + "matrixId": "Matrix ID", + "setPowerLevel": "Прызначыць узровень магчымасцей", + "makeModerator": "Прызначыць мадэратарам", + "makeAdmin": "Прызначыць адміністратарам", + "removeModeratorRights": "Адабраць правы мадэратара", + "removeAdminRights": "Прыбраць адміністратарскія правы", + "powerLevel": "Узровень дазволаў", + "setPowerLevelDescription": "Узровень дазволаў вызначае, што ўдзельнік можа рабіць у пакое і звычайна знаходзіцца паміж 0 і 100.", + "owner": "Уладальнік", + "mute": "Сцішыць", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Стварыць новы чат", + "reset": "Скінуць", + "supportFluffyChat": "Падтрымаць FluffyChat", + "support": "Падтрымаць", + "fluffyChatSupportBannerMessage": "FluffyChat патрэбна ВАША дапамога!\n❤️❤️❤️\nFluffyChat будзе заўсёды бясплатным, bале распрацоўка і арэнда сервероў мае свой кошт.\nБудучыня праекту залежыць ад падтрымкі людзей як вы.", + "skipSupportingFluffyChat": "Прапусціць падтрымку FluffyChat", + "iDoNotWantToSupport": "Я не хачу падтрымаць", + "iAlreadySupportFluffyChat": "Я ўжо падтрымаў FluffyChat", + "setLowPriority": "Прызначыць нізкі прыярытэт", + "unsetLowPriority": "Скасаваць нізкі прыярытэт", + "removeCallFromChat": "Прыбраць выклік з чату", + "removeCallFromChatDescription": "Вы хаціце прыбраць выклік з чату для ўсіх удзельнікаў?", + "removeCallForEveryone": "Прыбраць выклікі для ўсіх", + "startVoiceCall": "Пачаць галасавы выклік", + "startVideoCall": "Пачаць відэа-выклік", + "joinVoiceCall": "Далучыцца да галасавога выкліка", + "joinVideoCall": "Далучыцца да відэа-выкліка", + "live": "Трансляцыя" } diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index fa010fdf..df16f69a 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -32,8 +32,6 @@ "@repeatPassword": {}, "notAnImage": "ইমেজ ফাইল না।", "@notAnImage": {}, - "setCustomPermissionLevel": "কাস্টম অনুমতি লেভেল ঠিক করো", - "@setCustomPermissionLevel": {}, "admin": "অ্যাডমিস", "@admin": { "type": "String", @@ -69,16 +67,6 @@ "type": "String", "placeholders": {} }, - "confirm": "নিশ্চিত করো", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "কানেক্ট", - "@connect": { - "type": "String", - "placeholders": {} - }, "copy": "অনুলিপি", "@copy": { "type": "String", @@ -89,18 +77,6 @@ "type": "String", "placeholders": {} }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "delete": "অপসারণ", "@delete": { "type": "String", @@ -161,11 +137,6 @@ "type": "String", "placeholders": {} }, - "identity": "পরিচয়", - "@identity": { - "type": "String", - "placeholders": {} - }, "invited": "আমন্ত্রিত", "@invited": { "type": "String", @@ -181,14 +152,9 @@ "type": "String", "placeholders": {} }, - "license": "অনুমতিপত্র (লাইসেন্স)", - "@license": { - "type": "String", - "placeholders": {} - }, "login": "প্রবেশ", "@login": { "type": "String", "placeholders": {} } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index f6b08666..8335f1c3 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -27,15 +27,7 @@ "type": "String", "placeholders": {} }, - "@connect": { - "type": "String", - "placeholders": {} - }, "@jumpToLastReadMessage": {}, - "@allRooms": { - "type": "String", - "placeholders": {} - }, "@obtainingLocation": { "type": "String", "placeholders": {} @@ -45,7 +37,6 @@ "type": "String", "placeholders": {} }, - "@widgetVideo": {}, "@dismiss": {}, "@unknownDevice": { "type": "String", @@ -68,10 +59,6 @@ "type": "String", "placeholders": {} }, - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "@inviteContactToGroup": { "type": "String", "placeholders": { @@ -89,7 +76,6 @@ "type": "String", "placeholders": {} }, - "@chatHasBeenAddedToThisSpace": {}, "@reply": { "type": "String", "placeholders": {} @@ -115,7 +101,6 @@ "type": "String", "description": "Usage hint for the command /html" }, - "@widgetJitsi": {}, "@youAreNoLongerParticipatingInThisChat": { "type": "String", "placeholders": {} @@ -125,12 +110,7 @@ "placeholders": {} }, "@messageType": {}, - "@indexedDbErrorLong": {}, "@oneClientLoggedOut": {}, - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "@unsupportedAndroidVersionLong": {}, "@kicked": { "type": "String", @@ -172,8 +152,6 @@ "type": "String", "placeholders": {} }, - "@startFirstChat": {}, - "@callingAccount": {}, "@requestPermission": { "type": "String", "placeholders": {} @@ -202,15 +180,10 @@ } }, "@setColorTheme": {}, - "@nextAccount": {}, "@commandHint_create": { "type": "String", "description": "Usage hint for the command /create" }, - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "@warning": { "type": "String", "placeholders": {} @@ -312,7 +285,6 @@ "type": "String", "placeholders": {} }, - "@widgetEtherpad": {}, "@waitingPartnerAcceptRequest": { "type": "String", "placeholders": {} @@ -353,10 +325,6 @@ } } }, - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "@tryAgain": {}, "@areGuestsAllowedToJoin": { "type": "String", @@ -373,21 +341,6 @@ } } }, - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "@unbanUserDescription": {}, "@userAndUserAreTyping": { "type": "String", @@ -422,7 +375,6 @@ } }, "@youRejectedTheInvitation": {}, - "@otherCallingPermissions": {}, "@messagesStyle": {}, "@couldNotDecryptMessage": { "type": "String", @@ -437,11 +389,8 @@ "placeholders": {} }, "@link": {}, - "@widgetUrlError": {}, - "@emailOrUsername": {}, "@newSpaceDescription": {}, "@chatDescription": {}, - "@callingAccountDetails": {}, "@next": { "type": "String", "placeholders": {} @@ -458,25 +407,10 @@ } } }, - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "@editRoomAliases": { "type": "String", "placeholders": {} }, - "@enterSpace": {}, "@encryptThisChat": {}, "@fileName": { "type": "String", @@ -486,7 +420,6 @@ "type": "String", "placeholders": {} }, - "@previousAccount": {}, "@publicRooms": { "type": "String", "placeholders": {} @@ -503,20 +436,11 @@ "type": "String", "placeholders": {} }, - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "@reopenChat": {}, - "@pleaseEnterRecoveryKey": {}, "@create": { "type": "String", "placeholders": {} }, - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "@no": { "type": "String", "placeholders": {} @@ -525,7 +449,6 @@ "type": "String", "placeholders": {} }, - "@widgetNameError": {}, "@inoffensive": { "type": "String", "placeholders": {} @@ -543,7 +466,6 @@ "type": "String", "placeholders": {} }, - "@addWidget": {}, "@all": { "type": "String", "placeholders": {} @@ -596,7 +518,6 @@ } } }, - "@hydrateTor": {}, "@pushNotificationsNotAvailable": {}, "@passwordRecovery": { "type": "String", @@ -647,7 +568,6 @@ "type": "String", "placeholders": {} }, - "@signInWithPassword": {}, "@ignoredUsers": { "type": "String", "placeholders": {} @@ -712,10 +632,6 @@ "type": "String", "placeholders": {} }, - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "@commandHint_clearcache": { "type": "String", "description": "Usage hint for the command /clearcache" @@ -739,14 +655,6 @@ "placeholders": {} }, "@whyIsThisMessageEncrypted": {}, - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "@rejectedTheInvitation": { "type": "String", "placeholders": { @@ -769,19 +677,11 @@ "placeholders": {} }, "@importFromZipFile": {}, - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "@or": { "type": "String", "placeholders": {} }, "@dehydrateWarning": {}, - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "@noOtherDevicesFound": {}, "@whoIsAllowedToJoinThisGroup": { "type": "String", @@ -791,14 +691,6 @@ "type": "String", "placeholders": {} }, - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "@storeSecurlyOnThisDevice": {}, "@yourChatBackupHasBeenSetUp": {}, "@chatBackup": { @@ -862,18 +754,6 @@ "type": "String", "placeholders": {} }, - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "@username": { "type": "String", "placeholders": {} @@ -896,10 +776,6 @@ "type": "String", "placeholders": {} }, - "@people": { - "type": "String", - "placeholders": {} - }, "@changedTheHistoryVisibilityTo": { "type": "String", "placeholders": { @@ -932,7 +808,6 @@ } } }, - "@callingPermissions": {}, "@delete": { "type": "String", "placeholders": {} @@ -956,18 +831,6 @@ "placeholders": {} }, "@unlockOldMessages": {}, - "@identity": { - "type": "String", - "placeholders": {} - }, - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "@changedTheJoinRulesTo": { "type": "String", "placeholders": { @@ -1067,10 +930,6 @@ "@sendAsText": { "type": "String" }, - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "@archiveRoomDescription": {}, "@exportEmotePack": {}, "@changedTheChatNameTo": { @@ -1084,22 +943,10 @@ } } }, - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "@account": { "type": "String", "placeholders": {} }, - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "@commandInvalid": { "type": "String" }, @@ -1170,7 +1017,6 @@ "type": "String", "placeholders": {} }, - "@inviteContactToGroupQuestion": {}, "@emoteExists": { "type": "String", "placeholders": {} @@ -1213,12 +1059,10 @@ "type": "String", "placeholders": {} }, - "@appearOnTopDetails": {}, "@roomHasBeenUpgraded": { "type": "String", "placeholders": {} }, - "@enterRoom": {}, "@enableEmotesGlobally": { "type": "String", "placeholders": {} @@ -1276,17 +1120,6 @@ } }, "@confirmEventUnpin": {}, - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "@youInvitedUser": { "placeholders": { "user": { @@ -1317,10 +1150,6 @@ } } }, - "@license": { - "type": "String", - "placeholders": {} - }, "@addToSpace": {}, "@unbanFromChat": { "type": "String", @@ -1336,10 +1165,6 @@ "description": "State that {command} is not a valid /command." }, "@redactMessageDescription": {}, - "@rejoin": { - "type": "String", - "placeholders": {} - }, "@recoveryKey": {}, "@redactMessage": { "type": "String", @@ -1366,7 +1191,6 @@ "type": "String", "placeholders": {} }, - "@dehydrateTorLong": {}, "@yourPublicKey": { "type": "String", "placeholders": {} @@ -1428,10 +1252,6 @@ "type": "String", "placeholders": {} }, - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "@joinRoom": { "type": "String", "placeholders": {} @@ -1446,9 +1266,7 @@ "placeholders": {} }, "@serverRequiresEmail": {}, - "@hideUnimportantStateEvents": {}, "@screenSharingTitle": {}, - "@widgetCustom": {}, "@sentCallInformations": { "type": "String", "placeholders": { @@ -1457,7 +1275,6 @@ } } }, - "@addToSpaceDescription": {}, "@googlyEyesContent": { "type": "String", "placeholders": { @@ -1485,7 +1302,6 @@ "type": "String", "placeholders": {} }, - "@addChatDescription": {}, "@sentAnAudio": { "type": "String", "placeholders": { @@ -1521,7 +1337,6 @@ } } }, - "@publish": {}, "@openLinkInBrowser": {}, "@clearArchive": {}, "@appLock": { @@ -1569,8 +1384,6 @@ "placeholders": {} }, "@inviteGroupChat": {}, - "@appearOnTop": {}, - "@invitePrivateChat": {}, "@verifyTitle": { "type": "String", "placeholders": {} @@ -1606,10 +1419,6 @@ "description": "Usage hint for the command /ban" }, "@importEmojis": {}, - "@confirm": { - "type": "String", - "placeholders": {} - }, "@wasDirectChatDisplayName": { "type": "String", "placeholders": { @@ -1660,7 +1469,6 @@ }, "@newGroup": {}, "@bundleName": {}, - "@dehydrateTor": {}, "@removeFromSpace": {}, "@dateAndTimeOfDay": { "type": "String", @@ -1730,7 +1538,6 @@ } } }, - "@profileNotFound": {}, "@jump": {}, "@groups": { "type": "String", @@ -1759,14 +1566,6 @@ } }, "@sorryThatsNotPossible": {}, - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "@oopsSomethingWentWrong": { "type": "String", "placeholders": {} @@ -1798,10 +1597,6 @@ } } }, - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "@messages": { "type": "String", "placeholders": {} @@ -1831,10 +1626,6 @@ "type": "String", "placeholders": {} }, - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "@startedACall": { "type": "String", "placeholders": { @@ -1851,10 +1642,6 @@ "type": "String", "placeholders": {} }, - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "@deleteMessage": { "type": "String", "placeholders": {} @@ -1867,20 +1654,11 @@ "type": "String", "placeholders": {} }, - "@setTheme": {}, "@changeTheHomeserver": { "type": "String", "placeholders": {} }, "@youJoinedTheChat": {}, - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "@play": { "type": "String", "placeholders": { @@ -1914,7 +1692,6 @@ "type": "String", "placeholders": {} }, - "@widgetName": {}, "@sentASticker": { "type": "String", "placeholders": { @@ -1923,7 +1700,6 @@ } } }, - "@errorAddingWidget": {}, "@commandHint_dm": { "type": "String", "description": "Usage hint for the command /dm" @@ -2003,16 +1779,11 @@ "type": "String", "placeholders": {} }, - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "@share": { "type": "String", "placeholders": {} }, "@commandHint_googly": {}, - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "@createGroup": {}, "@privacy": { "type": "String", @@ -2026,16 +1797,7 @@ "type": "String", "placeholders": {} }, - "@hydrateTorLong": {}, "@time": {}, - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "@botMessages": { - "type": "String", - "placeholders": {} - }, "@contentHasBeenReported": { "type": "String", "placeholders": {} @@ -2070,10 +1832,6 @@ "type": "String", "placeholders": {} }, - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "@pinMessage": {}, "@screenSharingDetail": {}, "@muteChat": { @@ -2090,7 +1848,6 @@ "type": "String", "placeholders": {} }, - "@indexedDbErrorTitle": {}, "@endedTheCall": { "type": "String", "placeholders": { @@ -2099,4 +1856,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index 80646eee..e2535014 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -1,3339 +1,2778 @@ { - "@@last_modified": "2021-08-14 12:41:10.145728", - "about": "Quant a", - "@about": { - "type": "String", - "placeholders": {} - }, - "accept": "Accepta", - "@accept": { - "type": "String", - "placeholders": {} - }, - "acceptedTheInvitation": "👍 {username} ha acceptat la invitació", - "@acceptedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "account": "Compte", - "@account": { - "type": "String", - "placeholders": {} - }, - "activatedEndToEndEncryption": "🔐 {username} ha activat el xifratge d’extrem a extrem", - "@activatedEndToEndEncryption": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "admin": "Administració", - "@admin": { - "type": "String", - "placeholders": {} - }, - "alias": "àlies", - "@alias": { - "type": "String", - "placeholders": {} - }, - "allChats": "Tots els xats", - "@allChats": { - "type": "String", - "placeholders": {} - }, - "answeredTheCall": "{senderName} ha respost a la trucada", - "@answeredTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "anyoneCanJoin": "Qualsevol pot unir-se", - "@anyoneCanJoin": { - "type": "String", - "placeholders": {} - }, - "appLock": "Blocatge de l’aplicació", - "@appLock": { - "type": "String", - "placeholders": {} - }, - "archive": "Arxiu", - "@archive": { - "type": "String", - "placeholders": {} - }, - "areGuestsAllowedToJoin": "Es pot entrar al xat com a convidadi", - "@areGuestsAllowedToJoin": { - "type": "String", - "placeholders": {} - }, - "areYouSure": "N’esteu seguri?", - "@areYouSure": { - "type": "String", - "placeholders": {} - }, - "askSSSSSign": "Per a poder donar accés a l’altra persona, introduïu la frase de seguretat o clau de recuperació.", - "@askSSSSSign": { - "type": "String", - "placeholders": {} - }, - "askVerificationRequest": "Voleu acceptar aquesta sol·licitud de verificació de: {username}?", - "@askVerificationRequest": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "banFromChat": "Veta del xat", - "@banFromChat": { - "type": "String", - "placeholders": {} - }, - "banned": "Vetadi", - "@banned": { - "type": "String", - "placeholders": {} - }, - "bannedUser": "{username} ha vetat a {targetName}", - "@bannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "blockDevice": "Bloca el dispositiu", - "@blockDevice": { - "type": "String", - "placeholders": {} - }, - "botMessages": "Missatges del bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, - "cancel": "Cancel·la", - "@cancel": { - "type": "String", - "placeholders": {} - }, - "cantOpenUri": "No es pot obrir l’URI {uri}", - "@cantOpenUri": { - "type": "String", - "placeholders": { - "uri": { - "type": "String" - } - } - }, - "changeDeviceName": "Canvia el nom del dispositiu", - "@changeDeviceName": { - "type": "String", - "placeholders": {} - }, - "changedTheChatAvatar": "{username} ha canviat la imatge del xat", - "@changedTheChatAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheChatDescriptionTo": "{username} ha canviat la descripció del xat a: '{description}'", - "@changedTheChatDescriptionTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "description": { - "type": "String" - } - } - }, - "changedTheChatNameTo": "{username} ha canviat el nom del xat a: '{chatname}'", - "@changedTheChatNameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "chatname": { - "type": "String" - } - } - }, - "changedTheChatPermissions": "{username} ha canviat els permisos del xat", - "@changedTheChatPermissions": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRules": "{username} ha canviat les normes d’accés dels convidats", - "@changedTheGuestAccessRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRulesTo": "{username} ha canviat les normes d’accés dels convidats a: {rules}", - "@changedTheGuestAccessRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheHistoryVisibility": "{username} ha canviat la visibilitat de l’historial", - "@changedTheHistoryVisibility": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheHistoryVisibilityTo": "{username} ha canviat la visibilitat de l’historial a: {rules}", - "@changedTheHistoryVisibilityTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheJoinRules": "{username} ha canviat les normes d’unió", - "@changedTheJoinRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheJoinRulesTo": "{username} ha canviat les normes d’unió a: {joinRules}", - "@changedTheJoinRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "joinRules": { - "type": "String" - } - } - }, - "changedTheProfileAvatar": "{username} ha canviat la seva imatge de perfil", - "@changedTheProfileAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomAliases": "{username} ha canviat l’àlies de la sala", - "@changedTheRoomAliases": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomInvitationLink": "{username} ha canviat l’enllaç per a convidar", - "@changedTheRoomInvitationLink": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changePassword": "Canvia la contrasenya", - "@changePassword": { - "type": "String", - "placeholders": {} - }, - "changeTheHomeserver": "Canvia el servidor", - "@changeTheHomeserver": { - "type": "String", - "placeholders": {} - }, - "changeTheme": "Canvia l’estil", - "@changeTheme": { - "type": "String", - "placeholders": {} - }, - "changeTheNameOfTheGroup": "Canvia el nom del grup", - "@changeTheNameOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "channelCorruptedDecryptError": "El xifratge s’ha corromput", - "@channelCorruptedDecryptError": { - "type": "String", - "placeholders": {} - }, - "chat": "Xat", - "@chat": { - "type": "String", - "placeholders": {} - }, - "chatDetails": "Detalls del xat", - "@chatDetails": { - "type": "String", - "placeholders": {} - }, - "chats": "Xats", - "@chats": { - "type": "String", - "placeholders": {} - }, - "chooseAStrongPassword": "Trieu una contrasenya forta", - "@chooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "close": "Tanca", - "@close": { - "type": "String", - "placeholders": {} - }, - "commandHint_html": "Envia text en format HTML", - "@commandHint_html": { - "type": "String", - "description": "Usage hint for the command /html" - }, - "commandHint_leave": "Abandona aquesta sala", - "@commandHint_leave": { - "type": "String", - "description": "Usage hint for the command /leave" - }, - "commandHint_op": "Estableix el nivell d'autoritat d'uni usuàriï (per defecte: 50)", - "@commandHint_op": { - "type": "String", - "description": "Usage hint for the command /op" - }, - "commandHint_plain": "Envia text sense format", - "@commandHint_plain": { - "type": "String", - "description": "Usage hint for the command /plain" - }, - "commandHint_send": "Envia text", - "@commandHint_send": { - "type": "String", - "description": "Usage hint for the command /send" - }, - "compareEmojiMatch": "Compareu aquests emojis", - "@compareEmojiMatch": { - "type": "String", - "placeholders": {} - }, - "compareNumbersMatch": "Compareu aquests números", - "@compareNumbersMatch": { - "type": "String", - "placeholders": {} - }, - "confirm": "Confirma", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Connecta", - "@connect": { - "type": "String", - "placeholders": {} - }, - "contactHasBeenInvitedToTheGroup": "El contacte ha estat convidat al grup", - "@contactHasBeenInvitedToTheGroup": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Conté l'àlies", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Inclou nom d'usuàriï", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "copiedToClipboard": "S’ha copiat al porta-retalls", - "@copiedToClipboard": { - "type": "String", - "placeholders": {} - }, - "copy": "Copia", - "@copy": { - "type": "String", - "placeholders": {} - }, - "couldNotDecryptMessage": "No s'ha pogut desxifrar el missatge: {error}", - "@couldNotDecryptMessage": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "countParticipants": "{count} participants", - "@countParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "create": "Crea", - "@create": { - "type": "String", - "placeholders": {} - }, - "createdTheChat": "💬 {username} ha creat el xat", - "@createdTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "currentlyActive": "Actiu actualment", - "@currentlyActive": { - "type": "String", - "placeholders": {} - }, - "darkTheme": "Fosc", - "@darkTheme": { - "type": "String", - "placeholders": {} - }, - "dateAndTimeOfDay": "{date}, {timeOfDay}", - "@dateAndTimeOfDay": { - "type": "String", - "placeholders": { - "date": { - "type": "String" - }, - "timeOfDay": { - "type": "String" - } - } - }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "deactivateAccountWarning": "Es desactivarà el vostre compte d’usuàriï. És irreversible! Voleu fer-ho igualment?", - "@deactivateAccountWarning": { - "type": "String", - "placeholders": {} - }, - "delete": "Suprimeix", - "@delete": { - "type": "String", - "placeholders": {} - }, - "deleteAccount": "Suprimeix el compte", - "@deleteAccount": { - "type": "String", - "placeholders": {} - }, - "deleteMessage": "Suprimeix el missatge", - "@deleteMessage": { - "type": "String", - "placeholders": {} - }, - "device": "Dispositiu", - "@device": { - "type": "String", - "placeholders": {} - }, - "deviceId": "Id. de dispositiu", - "@deviceId": { - "type": "String", - "placeholders": {} - }, - "devices": "Dispositius", - "@devices": { - "type": "String", - "placeholders": {} - }, - "directChats": "Xats directes", - "@directChats": { - "type": "String", - "placeholders": {} - }, - "displaynameHasBeenChanged": "Ha canviat l'àlies", - "@displaynameHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "downloadFile": "Baixa el fitxer", - "@downloadFile": { - "type": "String", - "placeholders": {} - }, - "edit": "Edita", - "@edit": { - "type": "String", - "placeholders": {} - }, - "editDisplayname": "Edita l'àlies", - "@editDisplayname": { - "type": "String", - "placeholders": {} - }, - "emoteExists": "L'emoticona ja existeix!", - "@emoteExists": { - "type": "String", - "placeholders": {} - }, - "emoteInvalid": "Codi d'emoticona invàlid!", - "@emoteInvalid": { - "type": "String", - "placeholders": {} - }, - "emotePacks": "Paquet d'emoticones de la sala", - "@emotePacks": { - "type": "String", - "placeholders": {} - }, - "emoteSettings": "Paràmetres de les emoticones", - "@emoteSettings": { - "type": "String", - "placeholders": {} - }, - "emoteShortcode": "Codi d'emoticona", - "@emoteShortcode": { - "type": "String", - "placeholders": {} - }, - "emoteWarnNeedToPick": "Has de seleccionar un codi d'emoticona i una imatge!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, - "emptyChat": "Xat buit", - "@emptyChat": { - "type": "String", - "placeholders": {} - }, - "enableEmotesGlobally": "Activa el paquet d'emoticones global", - "@enableEmotesGlobally": { - "type": "String", - "placeholders": {} - }, - "enableEncryptionWarning": "No podreu desactivar el xifratge mai més. N’esteu segur?", - "@enableEncryptionWarning": { - "type": "String", - "placeholders": {} - }, - "encrypted": "Xifrat", - "@encrypted": { - "type": "String", - "placeholders": {} - }, - "encryption": "Xifratge", - "@encryption": { - "type": "String", - "placeholders": {} - }, - "encryptionNotEnabled": "El xifratge no s’ha activat", - "@encryptionNotEnabled": { - "type": "String", - "placeholders": {} - }, - "endedTheCall": "{senderName} ha finalitzat la trucada", - "@endedTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "enterAnEmailAddress": "Introduïu una adreça electrònica", - "@enterAnEmailAddress": { - "type": "String", - "placeholders": {} - }, - "enterYourHomeserver": "Introdueix el teu servidor", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "fileName": "Nom del fitxer", - "@fileName": { - "type": "String", - "placeholders": {} - }, - "fluffychat": "FluffyChat", - "@fluffychat": { - "type": "String", - "placeholders": {} - }, - "forward": "Reenvia", - "@forward": { - "type": "String", - "placeholders": {} - }, - "fromJoining": "Des de la unió", - "@fromJoining": { - "type": "String", - "placeholders": {} - }, - "fromTheInvitation": "Des de la invitació", - "@fromTheInvitation": { - "type": "String", - "placeholders": {} - }, - "group": "Grup", - "@group": { - "type": "String", - "placeholders": {} - }, - "groupIsPublic": "El grup és públic", - "@groupIsPublic": { - "type": "String", - "placeholders": {} - }, - "groupWith": "Grup amb {displayname}", - "@groupWith": { - "type": "String", - "placeholders": { - "displayname": { - "type": "String" - } - } - }, - "guestsAreForbidden": "Els convidats no poden unir-se", - "@guestsAreForbidden": { - "type": "String", - "placeholders": {} - }, - "guestsCanJoin": "Els convidats es poden unir", - "@guestsCanJoin": { - "type": "String", - "placeholders": {} - }, - "hasWithdrawnTheInvitationFor": "{username} ha retirat la invitació de {targetName}", - "@hasWithdrawnTheInvitationFor": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "help": "Ajuda", - "@help": { - "type": "String", - "placeholders": {} - }, - "hideRedactedEvents": "Amaga els esdeveniments estripats", - "@hideRedactedEvents": { - "type": "String", - "placeholders": {} - }, - "hideUnknownEvents": "Amaga els esdeveniments desconeguts", - "@hideUnknownEvents": { - "type": "String", - "placeholders": {} - }, - "id": "Id.", - "@id": { - "type": "String", - "placeholders": {} - }, - "identity": "Identitat", - "@identity": { - "type": "String", - "placeholders": {} - }, - "ignoredUsers": "Usuaris ignorats", - "@ignoredUsers": { - "type": "String", - "placeholders": {} - }, - "iHaveClickedOnLink": "He fet clic a l'enllaç", - "@iHaveClickedOnLink": { - "type": "String", - "placeholders": {} - }, - "incorrectPassphraseOrKey": "Frase de seguretat o clau de recuperació incorrecta", - "@incorrectPassphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "inviteContact": "Convida contacte", - "@inviteContact": { - "type": "String", - "placeholders": {} - }, - "inviteContactToGroup": "Convida contacte a {groupName}", - "@inviteContactToGroup": { - "type": "String", - "placeholders": { - "groupName": { - "type": "String" - } - } - }, - "invited": "Convidat", - "@invited": { - "type": "String", - "placeholders": {} - }, - "invitedUser": "📩 {username} ha convidat a {targetName}", - "@invitedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "invitedUsersOnly": "Només usuàriïs convidadis", - "@invitedUsersOnly": { - "type": "String", - "placeholders": {} - }, - "inviteForMe": "Invitació per a mi", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "inviteText": "{username} t'ha convidat a FluffyChat.\n1. Visita fluffychat.im i instaŀla l'app\n2. Registra't o inicia sessió\n3. Obre l'enllaç d'invitació:\n{link}", - "@inviteText": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "link": { - "type": "String" - } - } - }, - "isTyping": "escrivint…", - "@isTyping": { - "type": "String", - "placeholders": {} - }, - "joinedTheChat": "👋 {username} s'ha unit al xat", - "@joinedTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "joinRoom": "Uneix-te a la sala", - "@joinRoom": { - "type": "String", - "placeholders": {} - }, - "kicked": "👞 {username} ha expulsat a {targetName}", - "@kicked": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickedAndBanned": "🙅 {username} ha expulsat i vetat a {targetName}", - "@kickedAndBanned": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickFromChat": "Expulsa del xat", - "@kickFromChat": { - "type": "String", - "placeholders": {} - }, - "lastActiveAgo": "Actiu per última vegada: {localizedTimeShort}", - "@lastActiveAgo": { - "type": "String", - "placeholders": { - "localizedTimeShort": { - "type": "String" - } - } - }, - "leave": "Abandona", - "@leave": { - "type": "String", - "placeholders": {} - }, - "leftTheChat": "Ha marxat del xat", - "@leftTheChat": { - "type": "String", - "placeholders": {} - }, - "license": "Llicència", - "@license": { - "type": "String", - "placeholders": {} - }, - "lightTheme": "Clar", - "@lightTheme": { - "type": "String", - "placeholders": {} - }, - "loadCountMoreParticipants": "Carrega {count} participants més", - "@loadCountMoreParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "loadingPleaseWait": "S’està carregant… Espereu.", - "@loadingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "loadMore": "Carrega’n més…", - "@loadMore": { - "type": "String", - "placeholders": {} - }, - "locationDisabledNotice": "S’han desactivat els serveis d’ubicació. Activeu-los per a compartir la vostra ubicació.", - "@locationDisabledNotice": { - "type": "String", - "placeholders": {} - }, - "locationPermissionDeniedNotice": "S’ha rebutjat el permís d’ubicació. Atorgueu-lo per a poder compartir la vostra ubicació.", - "@locationPermissionDeniedNotice": { - "type": "String", - "placeholders": {} - }, - "login": "Inicia la sessió", - "@login": { - "type": "String", - "placeholders": {} - }, - "logInTo": "Inicia sessió a {homeserver}", - "@logInTo": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "logout": "Finalitza la sessió", - "@logout": { - "type": "String", - "placeholders": {} - }, - "memberChanges": "Canvis de participants", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "mention": "Menciona", - "@mention": { - "type": "String", - "placeholders": {} - }, - "moderator": "Moderador", - "@moderator": { - "type": "String", - "placeholders": {} - }, - "muteChat": "Silencia el xat", - "@muteChat": { - "type": "String", - "placeholders": {} - }, - "needPantalaimonWarning": "Tingueu en compte que, ara per ara, us cal el Pantalaimon per a poder utilitzar el xifratge d’extrem a extrem.", - "@needPantalaimonWarning": { - "type": "String", - "placeholders": {} - }, - "newMessageInFluffyChat": "💬 Missatge nou al FluffyChat", - "@newMessageInFluffyChat": { - "type": "String", - "placeholders": {} - }, - "newVerificationRequest": "Nova sol·licitud de verificació!", - "@newVerificationRequest": { - "type": "String", - "placeholders": {} - }, - "no": "No", - "@no": { - "type": "String", - "placeholders": {} - }, - "noConnectionToTheServer": "Sense connexió al servidor", - "@noConnectionToTheServer": { - "type": "String", - "placeholders": {} - }, - "noEmotesFound": "No s’ha trobat cap emoticona. 😕", - "@noEmotesFound": { - "type": "String", - "placeholders": {} - }, - "noGoogleServicesWarning": "Sembla que no teniu els Serveis de Google al telèfon. Això és una bona decisió respecte a la vostra privadesa! Per a rebre notificacions automàtiques del FluffyChat, us recomanem instaŀlar ntfy. Amb ntfy o qualsevol altre proveïdor de Unified Push, pots rebre notificacions de forma segura i lliure. Pots instaŀlar ntfy des de la PlayStore o des de F-Droid.", - "@noGoogleServicesWarning": { - "type": "String", - "placeholders": {} - }, - "none": "Cap", - "@none": { - "type": "String", - "placeholders": {} - }, - "noPasswordRecoveryDescription": "Encara no heu afegit cap mètode per a poder recuperar la contrasenya.", - "@noPasswordRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "noPermission": "Sense permís", - "@noPermission": { - "type": "String", - "placeholders": {} - }, - "noRoomsFound": "No s’ha trobat cap sala…", - "@noRoomsFound": { - "type": "String", - "placeholders": {} - }, - "notifications": "Notificacions", - "@notifications": { - "type": "String", - "placeholders": {} - }, - "notificationsEnabledForThisAccount": "Notificacions activades per a aquest compte", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, - "numUsersTyping": "{count} usuàriïs escrivint…", - "@numUsersTyping": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "offline": "Fora de línia", - "@offline": { - "type": "String", - "placeholders": {} - }, - "ok": "D'acord", - "@ok": { - "type": "String", - "placeholders": {} - }, - "online": "En línia", - "@online": { - "type": "String", - "placeholders": {} - }, - "onlineKeyBackupEnabled": "La còpia de seguretat de claus en línia està activada", - "@onlineKeyBackupEnabled": { - "type": "String", - "placeholders": {} - }, - "oopsSomethingWentWrong": "Alguna cosa ha anat malament…", - "@oopsSomethingWentWrong": { - "type": "String", - "placeholders": {} - }, - "openAppToReadMessages": "Obre l'aplicació per llegir els missatges", - "@openAppToReadMessages": { - "type": "String", - "placeholders": {} - }, - "openCamera": "Obre la càmera", - "@openCamera": { - "type": "String", - "placeholders": {} - }, - "or": "O", - "@or": { - "type": "String", - "placeholders": {} - }, - "passphraseOrKey": "contrasenya o clau de recuperació", - "@passphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "password": "Contrasenya", - "@password": { - "type": "String", - "placeholders": {} - }, - "passwordForgotten": "Contrasenya oblidada", - "@passwordForgotten": { - "type": "String", - "placeholders": {} - }, - "passwordHasBeenChanged": "La contrasenya ha canviat", - "@passwordHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "passwordRecovery": "Recuperació de contrassenya", - "@passwordRecovery": { - "type": "String", - "placeholders": {} - }, - "pickImage": "Selecciona una imatge", - "@pickImage": { - "type": "String", - "placeholders": {} - }, - "pin": "Fixa", - "@pin": { - "type": "String", - "placeholders": {} - }, - "play": "Reproduir {fileName}", - "@play": { - "type": "String", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "pleaseChooseAPasscode": "Tria un codi d'accés", - "@pleaseChooseAPasscode": { - "type": "String", - "placeholders": {} - }, - "pleaseClickOnLink": "Fes clic a l'enllaç del correu i, després, segueix.", - "@pleaseClickOnLink": { - "type": "String", - "placeholders": {} - }, - "pleaseEnter4Digits": "Introdueix 4 dígits o deixa-ho buit per desactivar el bloqueig.", - "@pleaseEnter4Digits": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPassword": "Introdueix la teva contrasenya", - "@pleaseEnterYourPassword": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourUsername": "Introdueix el teu nom d'usuàriï", - "@pleaseEnterYourUsername": { - "type": "String", - "placeholders": {} - }, - "privacy": "Privadesa", - "@privacy": { - "type": "String", - "placeholders": {} - }, - "publicRooms": "Sales públiques", - "@publicRooms": { - "type": "String", - "placeholders": {} - }, - "pushRules": "Regles push", - "@pushRules": { - "type": "String", - "placeholders": {} - }, - "recording": "Enregistrant", - "@recording": { - "type": "String", - "placeholders": {} - }, - "redactedAnEvent": "{username} ha estripat un esdeveniment", - "@redactedAnEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "reject": "Rebutja", - "@reject": { - "type": "String", - "placeholders": {} - }, - "rejectedTheInvitation": "{username} ha rebutjat la invitació", - "@rejectedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "rejoin": "Torna-t'hi a unir", - "@rejoin": { - "type": "String", - "placeholders": {} - }, - "remove": "Elimina", - "@remove": { - "type": "String", - "placeholders": {} - }, - "removeAllOtherDevices": "Elimina tots els altres dispositius", - "@removeAllOtherDevices": { - "type": "String", - "placeholders": {} - }, - "removedBy": "Eliminat per {username}", - "@removedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "removeDevice": "Elimina dispositiu", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, - "unbanFromChat": "Aixeca el veto", - "@unbanFromChat": { - "type": "String", - "placeholders": {} - }, - "reply": "Respon", - "@reply": { - "type": "String", - "placeholders": {} - }, - "requestPermission": "Sol·licita permís", - "@requestPermission": { - "type": "String", - "placeholders": {} - }, - "roomHasBeenUpgraded": "La sala s'ha actualitzat", - "@roomHasBeenUpgraded": { - "type": "String", - "placeholders": {} - }, - "security": "Seguretat", - "@security": { - "type": "String", - "placeholders": {} - }, - "seenByUser": "Vist per {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "send": "Envia", - "@send": { - "type": "String", - "placeholders": {} - }, - "sendAMessage": "Envia un missatge", - "@sendAMessage": { - "type": "String", - "placeholders": {} - }, - "sendAsText": "Envia com a text", - "@sendAsText": { - "type": "String" - }, - "sendAudio": "Envia un àudio", - "@sendAudio": { - "type": "String", - "placeholders": {} - }, - "sendFile": "Envia un fitxer", - "@sendFile": { - "type": "String", - "placeholders": {} - }, - "sendImage": "Envia una imatge", - "@sendImage": { - "type": "String", - "placeholders": {} - }, - "sendOriginal": "Envia l’original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Envia adhesiu", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendVideo": "Envia un vídeo", - "@sendVideo": { - "type": "String", - "placeholders": {} - }, - "sentAFile": "📁 {username} ha enviat un fitxer", - "@sentAFile": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAnAudio": "🎤 {username} ha enviat un àudio", - "@sentAnAudio": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAPicture": "🖼️ {username} ha enviat una imatge", - "@sentAPicture": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentASticker": "😊 {username} ha enviat un adhesiu", - "@sentASticker": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAVideo": "🎥 {username} ha enviat un vídeo", - "@sentAVideo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentCallInformations": "{senderName} ha enviat informació de trucada", - "@sentCallInformations": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "setInvitationLink": "Defineix l’enllaç per a convidar", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Defineix el nivell de permisos", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setStatus": "Defineix l’estat", - "@setStatus": { - "type": "String", - "placeholders": {} - }, - "settings": "Paràmetres", - "@settings": { - "type": "String", - "placeholders": {} - }, - "share": "Comparteix", - "@share": { - "type": "String", - "placeholders": {} - }, - "sharedTheLocation": "{username} n’ha compartit la ubicació", - "@sharedTheLocation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "singlesignon": "Autenticació única", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "skip": "Omet", - "@skip": { - "type": "String", - "placeholders": {} - }, - "sourceCode": "Codi font", - "@sourceCode": { - "type": "String", - "placeholders": {} - }, - "startedACall": "{senderName} ha iniciat una trucada", - "@startedACall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "statusExampleMessage": "Com us sentiu avui?", - "@statusExampleMessage": { - "type": "String", - "placeholders": {} - }, - "submit": "Envia", - "@submit": { - "type": "String", - "placeholders": {} - }, - "systemTheme": "Sistema", - "@systemTheme": { - "type": "String", - "placeholders": {} - }, - "theyDontMatch": "No coincideixen", - "@theyDontMatch": { - "type": "String", - "placeholders": {} - }, - "theyMatch": "Coincideixen", - "@theyMatch": { - "type": "String", - "placeholders": {} - }, - "title": "FluffyChat", - "@title": { - "description": "Title for the application", - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Marca com a llegit/sense llegir", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "tooManyRequestsWarning": "Massa sol·licituds. Torna-ho a provar més tard!", - "@tooManyRequestsWarning": { - "type": "String", - "placeholders": {} - }, - "tryToSendAgain": "Intenta tornar a enviar", - "@tryToSendAgain": { - "type": "String", - "placeholders": {} - }, - "unavailable": "No disponible", - "@unavailable": { - "type": "String", - "placeholders": {} - }, - "unbannedUser": "{username} ha aixecat el veto a {targetName}", - "@unbannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "unblockDevice": "Desbloqueja dispositiu", - "@unblockDevice": { - "type": "String", - "placeholders": {} - }, - "unknownDevice": "Dispositiu desconegut", - "@unknownDevice": { - "type": "String", - "placeholders": {} - }, - "unknownEncryptionAlgorithm": "L’algorisme de xifratge és desconegut", - "@unknownEncryptionAlgorithm": { - "type": "String", - "placeholders": {} - }, - "unknownEvent": "Esdeveniment desconegut '{type}'", - "@unknownEvent": { - "type": "String", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "unmuteChat": "Deixa de silenciar el xat", - "@unmuteChat": { - "type": "String", - "placeholders": {} - }, - "unpin": "Deixa de fixar", - "@unpin": { - "type": "String", - "placeholders": {} - }, - "unreadChats": "{unreadCount, plural, =1{1 xat no llegit} other{{unreadCount} xats no llegits}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "userAndOthersAreTyping": "{username} i {count} més estan escrivint…", - "@userAndOthersAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "userAndUserAreTyping": "{username} i {username2} estan escrivint…", - "@userAndUserAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "username2": { - "type": "String" - } - } - }, - "userIsTyping": "{username} està escrivint…", - "@userIsTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "userLeftTheChat": "🚪 {username} ha marxat del xat", - "@userLeftTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "username": "Nom d’usuàriï", - "@username": { - "type": "String", - "placeholders": {} - }, - "userSentUnknownEvent": "{username} ha enviat un esdeveniment {type}", - "@userSentUnknownEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "type": { - "type": "String" - } - } - }, - "verify": "Verifica", - "@verify": { - "type": "String", - "placeholders": {} - }, - "verifyStart": "Inicia la verificació", - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "verifySuccess": "T'has verificat correctament!", - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "verifyTitle": "Verificant un altre compte", - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "videoCall": "Videotrucada", - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "visibilityOfTheChatHistory": "Visibilitat de l’historial del xat", - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "visibleForAllParticipants": "Visible per a tots els participants", - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "visibleForEveryone": "Visible per a tothom", - "@visibleForEveryone": { - "type": "String", - "placeholders": {} - }, - "voiceMessage": "Missatge de veu", - "@voiceMessage": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerEmoji": "S’està esperant que l’altre accepti l’emoji…", - "@waitingPartnerEmoji": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerNumbers": "S’està esperant que l’altre accepti els nombres…", - "@waitingPartnerNumbers": { - "type": "String", - "placeholders": {} - }, - "wallpaper": "Fons:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "warning": "Atenció!", - "@warning": { - "type": "String", - "placeholders": {} - }, - "weSentYouAnEmail": "Us hem enviat un missatge de correu electrònic", - "@weSentYouAnEmail": { - "type": "String", - "placeholders": {} - }, - "whoIsAllowedToJoinThisGroup": "Qui pot unir-se a aquest grup", - "@whoIsAllowedToJoinThisGroup": { - "type": "String", - "placeholders": {} - }, - "withTheseAddressesRecoveryDescription": "Amb aquestes adreces, si ho necessiteu, podeu recuperar la vostra contrasenya.", - "@withTheseAddressesRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "writeAMessage": "Escriviu un missatge…", - "@writeAMessage": { - "type": "String", - "placeholders": {} - }, - "yes": "Sí", - "@yes": { - "type": "String", - "placeholders": {} - }, - "you": "Vós", - "@you": { - "type": "String", - "placeholders": {} - }, - "youAreNoLongerParticipatingInThisChat": "Ja no participeu en aquest xat", - "@youAreNoLongerParticipatingInThisChat": { - "type": "String", - "placeholders": {} - }, - "youHaveBeenBannedFromThisChat": "T'han vetat en aquest xat", - "@youHaveBeenBannedFromThisChat": { - "type": "String", - "placeholders": {} - }, - "yourPublicKey": "La vostra clau pública", - "@yourPublicKey": { - "type": "String", - "placeholders": {} - }, - "all": "Tot", - "@all": { - "type": "String", - "placeholders": {} - }, - "addToSpace": "Afegeix a un espai", - "@addToSpace": {}, - "areYouSureYouWantToLogout": "Segur que voleu finalitzar la sessió?", - "@areYouSureYouWantToLogout": { - "type": "String", - "placeholders": {} - }, - "addEmail": "Afegeix una adreça electrònica", - "@addEmail": { - "type": "String", - "placeholders": {} - }, - "commandInvalid": "L’ordre no és vàlida", - "@commandInvalid": { - "type": "String" - }, - "fontSize": "Mida de la lletra", - "@fontSize": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "Ves a la sala nova", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "next": "Següent", - "@next": { - "type": "String", - "placeholders": {} - }, - "link": "Enllaç", - "@link": {}, - "people": "Gent", - "@people": { - "type": "String", - "placeholders": {} - }, - "redactMessage": "Estripa el missatge", - "@redactMessage": { - "type": "String", - "placeholders": {} - }, - "sendOnEnter": "Envia en prémer Retorn", - "@sendOnEnter": {}, - "clearArchive": "Neteja l’arxiu", - "@clearArchive": {}, - "chatBackupDescription": "Els teus xats antics estan protegits amb una clau de recuperació. Assegureu-vos de no perdre-la.", - "@chatBackupDescription": { - "type": "String", - "placeholders": {} - }, - "chatHasBeenAddedToThisSpace": "El xat s’ha afegit a aquest espai", - "@chatHasBeenAddedToThisSpace": {}, - "autoplayImages": "Reprodueix automàticament enganxines i emoticones animades", - "@autoplayImages": { - "type": "String", - "placeholder": {} - }, - "chatBackup": "Còpia de seguretat del xat", - "@chatBackup": { - "type": "String", - "placeholders": {} - }, - "blocked": "Blocat", - "@blocked": { - "type": "String", - "placeholders": {} - }, - "everythingReady": "Tot és a punt!", - "@everythingReady": { - "type": "String", - "placeholders": {} - }, - "spaceName": "Nom de l’espai", - "@spaceName": { - "type": "String", - "placeholders": {} - }, - "search": "Cerca", - "@search": { - "type": "String", - "placeholders": {} - }, - "verified": "Verificat", - "@verified": { - "type": "String", - "placeholders": {} - }, - "newChat": "Xat nou", - "@newChat": { - "type": "String", - "placeholders": {} - }, - "changeYourAvatar": "Canvia l’avatar", - "@changeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "ignore": "Ignora", - "@ignore": { - "type": "String", - "placeholders": {} - }, - "commandHint_react": "Envia una resposta com a reacció", - "@commandHint_react": { - "type": "String", - "description": "Usage hint for the command /react" - }, - "defaultPermissionLevel": "Nivell de permisos per defecte per nous membres", - "@defaultPermissionLevel": { - "type": "String", - "placeholders": {} - }, - "extremeOffensive": "Extremadament ofensiu", - "@extremeOffensive": { - "type": "String", - "placeholders": {} - }, - "yourChatBackupHasBeenSetUp": "S’ha configurat la còpia de seguretat del xat.", - "@yourChatBackupHasBeenSetUp": {}, - "contentHasBeenReported": "El contingut s’ha denunciat als administradors del servidor", - "@contentHasBeenReported": { - "type": "String", - "placeholders": {} - }, - "enableEncryption": "Activa el xifratge", - "@enableEncryption": { - "type": "String", - "placeholders": {} - }, - "addAccount": "Afegeix un compte", - "@addAccount": {}, - "noEncryptionForPublicRooms": "Només podreu activar el xifratge quan la sala ja no sigui accessible públicament.", - "@noEncryptionForPublicRooms": { - "type": "String", - "placeholders": {} - }, - "roomVersion": "Versió de la sala", - "@roomVersion": { - "type": "String", - "placeholders": {} - }, - "sendMessages": "Envia missatges", - "@sendMessages": { - "type": "String", - "placeholders": {} - }, - "saveFile": "Desa el fitxer", - "@saveFile": { - "type": "String", - "placeholders": {} - }, - "pleaseFollowInstructionsOnWeb": "Seguiu les instruccions al lloc web i toqueu «Següent».", - "@pleaseFollowInstructionsOnWeb": { - "type": "String", - "placeholders": {} - }, - "reportMessage": "Denuncia el missatge", - "@reportMessage": { - "type": "String", - "placeholders": {} - }, - "setAsCanonicalAlias": "Defineix com a àlies principal", - "@setAsCanonicalAlias": { - "type": "String", - "placeholders": {} - }, - "status": "Estat", - "@status": { - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "Commuta l’estat «preferit»", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Commuta l’estat «silenci»", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "transferFromAnotherDevice": "Transfereix des d’un altre dispositiu", - "@transferFromAnotherDevice": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "Defineix emoticones personalitzades", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "whoCanPerformWhichAction": "Qui pot efectuar quina acció", - "@whoCanPerformWhichAction": { - "type": "String", - "placeholders": {} - }, - "whyDoYouWantToReportThis": "Per què voleu denunciar això?", - "@whyDoYouWantToReportThis": { - "type": "String", - "placeholders": {} - }, - "wipeChatBackup": "Voleu suprimir la còpia de seguretat dels xats per a crear una clau de recuperació nova?", - "@wipeChatBackup": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerAcceptRequest": "S’està esperant que l’altre accepti la sol·licitud…", - "@waitingPartnerAcceptRequest": { - "type": "String", - "placeholders": {} - }, - "unverified": "No verificat", - "@unverified": {}, - "commandHint_me": "Descriviu-vos", - "@commandHint_me": { - "type": "String", - "description": "Usage hint for the command /me" - }, - "commandMissing": "{command} no és una ordre.", - "@commandMissing": { - "type": "String", - "placeholders": { - "command": { - "type": "String" - } + "@@last_modified": "2021-08-14 12:41:10.145728", + "about": "Quant a", + "@about": { + "type": "String", + "placeholders": {} }, - "description": "State that {command} is not a valid /command." - }, - "configureChat": "Configura el xat", - "@configureChat": { - "type": "String", - "placeholders": {} - }, - "copyToClipboard": "Copia al porta-retalls", - "@copyToClipboard": { - "type": "String", - "placeholders": {} - }, - "createNewSpace": "Espai nou", - "@createNewSpace": { - "type": "String", - "placeholders": {} - }, - "errorObtainingLocation": "S’ha produït un error en obtenir la ubicació: {error}", - "@errorObtainingLocation": { - "type": "String", - "placeholders": { - "error": { + "accept": "Accepta", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} ha acceptat la invitació", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "Compte", + "@account": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} ha activat el xifratge d’extrem a extrem", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "admin": "Administració", + "@admin": { + "type": "String", + "placeholders": {} + }, + "alias": "àlies", + "@alias": { + "type": "String", + "placeholders": {} + }, + "allChats": "Tots els xats", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "answeredTheCall": "{senderName} ha respost a la trucada", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "anyoneCanJoin": "Qualsevol pot unir-se", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + }, + "appLock": "Blocatge de l’aplicació", + "@appLock": { + "type": "String", + "placeholders": {} + }, + "archive": "Arxiu", + "@archive": { + "type": "String", + "placeholders": {} + }, + "areGuestsAllowedToJoin": "Es pot entrar al xat com a convidadi", + "@areGuestsAllowedToJoin": { + "type": "String", + "placeholders": {} + }, + "areYouSure": "N’esteu seguri?", + "@areYouSure": { + "type": "String", + "placeholders": {} + }, + "askSSSSSign": "Per a poder donar accés a l’altra persona, introduïu la frase de seguretat o clau de recuperació.", + "@askSSSSSign": { + "type": "String", + "placeholders": {} + }, + "askVerificationRequest": "Voleu acceptar aquesta sol·licitud de verificació de: {username}?", + "@askVerificationRequest": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "banFromChat": "Veta del xat", + "@banFromChat": { + "type": "String", + "placeholders": {} + }, + "banned": "Vetadi", + "@banned": { + "type": "String", + "placeholders": {} + }, + "bannedUser": "{username} ha vetat a {targetName}", + "@bannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "blockDevice": "Bloca el dispositiu", + "@blockDevice": { + "type": "String", + "placeholders": {} + }, + "cancel": "Cancel·la", + "@cancel": { + "type": "String", + "placeholders": {} + }, + "cantOpenUri": "No es pot obrir l’URI {uri}", + "@cantOpenUri": { + "type": "String", + "placeholders": { + "uri": { + "type": "String" + } + } + }, + "changeDeviceName": "Canvia el nom del dispositiu", + "@changeDeviceName": { + "type": "String", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} ha canviat la imatge del xat", + "@changedTheChatAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheChatDescriptionTo": "{username} ha canviat la descripció del xat a: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "description": { + "type": "String" + } + } + }, + "changedTheChatNameTo": "{username} ha canviat el nom del xat a: '{chatname}'", + "@changedTheChatNameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "chatname": { + "type": "String" + } + } + }, + "changedTheChatPermissions": "{username} ha canviat els permisos del xat", + "@changedTheChatPermissions": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRules": "{username} ha canviat les normes d’accés dels convidats", + "@changedTheGuestAccessRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRulesTo": "{username} ha canviat les normes d’accés dels convidats a: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheHistoryVisibility": "{username} ha canviat la visibilitat de l’historial", + "@changedTheHistoryVisibility": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheHistoryVisibilityTo": "{username} ha canviat la visibilitat de l’historial a: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheJoinRules": "{username} ha canviat les normes d’unió", + "@changedTheJoinRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheJoinRulesTo": "{username} ha canviat les normes d’unió a: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "joinRules": { + "type": "String" + } + } + }, + "changedTheProfileAvatar": "{username} ha canviat la seva imatge de perfil", + "@changedTheProfileAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomAliases": "{username} ha canviat l’àlies de la sala", + "@changedTheRoomAliases": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomInvitationLink": "{username} ha canviat l’enllaç per a convidar", + "@changedTheRoomInvitationLink": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changePassword": "Canvia la contrasenya", + "@changePassword": { + "type": "String", + "placeholders": {} + }, + "changeTheHomeserver": "Canvia el servidor", + "@changeTheHomeserver": { + "type": "String", + "placeholders": {} + }, + "changeTheme": "Canvia l’estil", + "@changeTheme": { + "type": "String", + "placeholders": {} + }, + "changeTheNameOfTheGroup": "Canvia el nom del grup", + "@changeTheNameOfTheGroup": { + "type": "String", + "placeholders": {} + }, + "channelCorruptedDecryptError": "El xifratge s’ha corromput", + "@channelCorruptedDecryptError": { + "type": "String", + "placeholders": {} + }, + "chat": "Xat", + "@chat": { + "type": "String", + "placeholders": {} + }, + "chatDetails": "Detalls del xat", + "@chatDetails": { + "type": "String", + "placeholders": {} + }, + "chats": "Xats", + "@chats": { + "type": "String", + "placeholders": {} + }, + "chooseAStrongPassword": "Trieu una contrasenya forta", + "@chooseAStrongPassword": { + "type": "String", + "placeholders": {} + }, + "close": "Tanca", + "@close": { + "type": "String", + "placeholders": {} + }, + "commandHint_html": "Envia text en format HTML", + "@commandHint_html": { + "type": "String", + "description": "Usage hint for the command /html" + }, + "commandHint_leave": "Abandona aquesta sala", + "@commandHint_leave": { + "type": "String", + "description": "Usage hint for the command /leave" + }, + "commandHint_op": "Estableix el nivell d'autoritat d'uni usuàriï (per defecte: 50)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "commandHint_plain": "Envia text sense format", + "@commandHint_plain": { + "type": "String", + "description": "Usage hint for the command /plain" + }, + "commandHint_send": "Envia text", + "@commandHint_send": { + "type": "String", + "description": "Usage hint for the command /send" + }, + "compareEmojiMatch": "Compareu aquests emojis", + "@compareEmojiMatch": { + "type": "String", + "placeholders": {} + }, + "compareNumbersMatch": "Compareu aquests números", + "@compareNumbersMatch": { + "type": "String", + "placeholders": {} + }, + "contactHasBeenInvitedToTheGroup": "El contacte ha estat convidat al grup", + "@contactHasBeenInvitedToTheGroup": { + "type": "String", + "placeholders": {} + }, + "copiedToClipboard": "S’ha copiat al porta-retalls", + "@copiedToClipboard": { + "type": "String", + "placeholders": {} + }, + "copy": "Copia", + "@copy": { + "type": "String", + "placeholders": {} + }, + "couldNotDecryptMessage": "No s'ha pogut desxifrar el missatge: {error}", + "@couldNotDecryptMessage": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "countParticipants": "{count} participants", + "@countParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "create": "Crea", + "@create": { + "type": "String", + "placeholders": {} + }, + "createdTheChat": "💬 {username} ha creat el xat", + "@createdTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "currentlyActive": "Actiu actualment", + "@currentlyActive": { + "type": "String", + "placeholders": {} + }, + "darkTheme": "Fosc", + "@darkTheme": { + "type": "String", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "String", + "placeholders": { + "date": { + "type": "String" + }, + "timeOfDay": { + "type": "String" + } + } + }, + "deactivateAccountWarning": "Es desactivarà el vostre compte d’usuàriï. És irreversible! Voleu fer-ho igualment?", + "@deactivateAccountWarning": { + "type": "String", + "placeholders": {} + }, + "delete": "Suprimeix", + "@delete": { + "type": "String", + "placeholders": {} + }, + "deleteAccount": "Suprimeix el compte", + "@deleteAccount": { + "type": "String", + "placeholders": {} + }, + "deleteMessage": "Suprimeix el missatge", + "@deleteMessage": { + "type": "String", + "placeholders": {} + }, + "device": "Dispositiu", + "@device": { + "type": "String", + "placeholders": {} + }, + "deviceId": "Id. de dispositiu", + "@deviceId": { + "type": "String", + "placeholders": {} + }, + "devices": "Dispositius", + "@devices": { + "type": "String", + "placeholders": {} + }, + "directChats": "Xats directes", + "@directChats": { + "type": "String", + "placeholders": {} + }, + "displaynameHasBeenChanged": "Ha canviat l'àlies", + "@displaynameHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "downloadFile": "Baixa el fitxer", + "@downloadFile": { + "type": "String", + "placeholders": {} + }, + "edit": "Edita", + "@edit": { + "type": "String", + "placeholders": {} + }, + "editDisplayname": "Edita l'àlies", + "@editDisplayname": { + "type": "String", + "placeholders": {} + }, + "emoteExists": "L'emoticona ja existeix!", + "@emoteExists": { + "type": "String", + "placeholders": {} + }, + "emoteInvalid": "Codi d'emoticona invàlid!", + "@emoteInvalid": { + "type": "String", + "placeholders": {} + }, + "emotePacks": "Paquet d'emoticones de la sala", + "@emotePacks": { + "type": "String", + "placeholders": {} + }, + "emoteSettings": "Paràmetres de les emoticones", + "@emoteSettings": { + "type": "String", + "placeholders": {} + }, + "emoteShortcode": "Codi d'emoticona", + "@emoteShortcode": { + "type": "String", + "placeholders": {} + }, + "emptyChat": "Xat buit", + "@emptyChat": { + "type": "String", + "placeholders": {} + }, + "enableEmotesGlobally": "Activa el paquet d'emoticones global", + "@enableEmotesGlobally": { + "type": "String", + "placeholders": {} + }, + "enableEncryptionWarning": "No podreu desactivar el xifratge mai més. N’esteu segur?", + "@enableEncryptionWarning": { + "type": "String", + "placeholders": {} + }, + "encrypted": "Xifrat", + "@encrypted": { + "type": "String", + "placeholders": {} + }, + "encryption": "Xifratge", + "@encryption": { + "type": "String", + "placeholders": {} + }, + "encryptionNotEnabled": "El xifratge no s’ha activat", + "@encryptionNotEnabled": { + "type": "String", + "placeholders": {} + }, + "endedTheCall": "{senderName} ha finalitzat la trucada", + "@endedTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "enterAnEmailAddress": "Introduïu una adreça electrònica", + "@enterAnEmailAddress": { + "type": "String", + "placeholders": {} + }, + "fileName": "Nom del fitxer", + "@fileName": { + "type": "String", + "placeholders": {} + }, + "fluffychat": "FluffyChat", + "@fluffychat": { + "type": "String", + "placeholders": {} + }, + "forward": "Reenvia", + "@forward": { + "type": "String", + "placeholders": {} + }, + "fromJoining": "Des de la unió", + "@fromJoining": { + "type": "String", + "placeholders": {} + }, + "fromTheInvitation": "Des de la invitació", + "@fromTheInvitation": { + "type": "String", + "placeholders": {} + }, + "group": "Grup", + "@group": { + "type": "String", + "placeholders": {} + }, + "groupIsPublic": "El grup és públic", + "@groupIsPublic": { + "type": "String", + "placeholders": {} + }, + "groupWith": "Grup amb {displayname}", + "@groupWith": { + "type": "String", + "placeholders": { + "displayname": { + "type": "String" + } + } + }, + "guestsAreForbidden": "Els convidats no poden unir-se", + "@guestsAreForbidden": { + "type": "String", + "placeholders": {} + }, + "guestsCanJoin": "Els convidats es poden unir", + "@guestsCanJoin": { + "type": "String", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} ha retirat la invitació de {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "help": "Ajuda", + "@help": { + "type": "String", + "placeholders": {} + }, + "hideRedactedEvents": "Amaga els esdeveniments estripats", + "@hideRedactedEvents": { + "type": "String", + "placeholders": {} + }, + "hideUnknownEvents": "Amaga els esdeveniments desconeguts", + "@hideUnknownEvents": { + "type": "String", + "placeholders": {} + }, + "id": "Id.", + "@id": { + "type": "String", + "placeholders": {} + }, + "ignoredUsers": "Usuaris ignorats", + "@ignoredUsers": { + "type": "String", + "placeholders": {} + }, + "iHaveClickedOnLink": "He fet clic a l'enllaç", + "@iHaveClickedOnLink": { + "type": "String", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Frase de seguretat o clau de recuperació incorrecta", + "@incorrectPassphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "inviteContact": "Convida contacte", + "@inviteContact": { + "type": "String", + "placeholders": {} + }, + "inviteContactToGroup": "Convida contacte a {groupName}", + "@inviteContactToGroup": { + "type": "String", + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "invited": "Convidat", + "@invited": { + "type": "String", + "placeholders": {} + }, + "invitedUser": "📩 {username} ha convidat a {targetName}", + "@invitedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "invitedUsersOnly": "Només usuàriïs convidadis", + "@invitedUsersOnly": { + "type": "String", + "placeholders": {} + }, + "inviteText": "{username} t'ha convidat a FluffyChat.\n1. Visita fluffychat.im i instaŀla l'app\n2. Registra't o inicia sessió\n3. Obre l'enllaç d'invitació:\n{link}", + "@inviteText": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "link": { + "type": "String" + } + } + }, + "isTyping": "escrivint…", + "@isTyping": { + "type": "String", + "placeholders": {} + }, + "joinedTheChat": "👋 {username} s'ha unit al xat", + "@joinedTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "joinRoom": "Uneix-te a la sala", + "@joinRoom": { + "type": "String", + "placeholders": {} + }, + "kicked": "👞 {username} ha expulsat a {targetName}", + "@kicked": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickedAndBanned": "🙅 {username} ha expulsat i vetat a {targetName}", + "@kickedAndBanned": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickFromChat": "Expulsa del xat", + "@kickFromChat": { + "type": "String", + "placeholders": {} + }, + "lastActiveAgo": "Actiu per última vegada: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "String", + "placeholders": { + "localizedTimeShort": { + "type": "String" + } + } + }, + "leave": "Abandona", + "@leave": { + "type": "String", + "placeholders": {} + }, + "leftTheChat": "Ha marxat del xat", + "@leftTheChat": { + "type": "String", + "placeholders": {} + }, + "lightTheme": "Clar", + "@lightTheme": { + "type": "String", + "placeholders": {} + }, + "loadCountMoreParticipants": "Carrega {count} participants més", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "loadingPleaseWait": "S’està carregant… Espereu.", + "@loadingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "loadMore": "Carrega’n més…", + "@loadMore": { + "type": "String", + "placeholders": {} + }, + "locationDisabledNotice": "S’han desactivat els serveis d’ubicació. Activeu-los per a compartir la vostra ubicació.", + "@locationDisabledNotice": { + "type": "String", + "placeholders": {} + }, + "locationPermissionDeniedNotice": "S’ha rebutjat el permís d’ubicació. Atorgueu-lo per a poder compartir la vostra ubicació.", + "@locationPermissionDeniedNotice": { + "type": "String", + "placeholders": {} + }, + "login": "Inicia la sessió", + "@login": { + "type": "String", + "placeholders": {} + }, + "logInTo": "Inicia sessió a {homeserver}", + "@logInTo": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "logout": "Finalitza la sessió", + "@logout": { + "type": "String", + "placeholders": {} + }, + "mention": "Menciona", + "@mention": { + "type": "String", + "placeholders": {} + }, + "moderator": "Moderador", + "@moderator": { + "type": "String", + "placeholders": {} + }, + "muteChat": "Silencia el xat", + "@muteChat": { + "type": "String", + "placeholders": {} + }, + "needPantalaimonWarning": "Tingueu en compte que, ara per ara, us cal el Pantalaimon per a poder utilitzar el xifratge d’extrem a extrem.", + "@needPantalaimonWarning": { + "type": "String", + "placeholders": {} + }, + "newMessageInFluffyChat": "💬 Missatge nou al FluffyChat", + "@newMessageInFluffyChat": { + "type": "String", + "placeholders": {} + }, + "newVerificationRequest": "Nova sol·licitud de verificació!", + "@newVerificationRequest": { + "type": "String", + "placeholders": {} + }, + "no": "No", + "@no": { + "type": "String", + "placeholders": {} + }, + "noConnectionToTheServer": "Sense connexió al servidor", + "@noConnectionToTheServer": { + "type": "String", + "placeholders": {} + }, + "noEmotesFound": "No s’ha trobat cap emoticona. 😕", + "@noEmotesFound": { + "type": "String", + "placeholders": {} + }, + "noGoogleServicesWarning": "Sembla que no teniu els Serveis de Google al telèfon. Això és una bona decisió respecte a la vostra privadesa! Per a rebre notificacions automàtiques del FluffyChat, us recomanem instaŀlar ntfy. Amb ntfy o qualsevol altre proveïdor de Unified Push, pots rebre notificacions de forma segura i lliure. Pots instaŀlar ntfy des de la PlayStore o des de F-Droid.", + "@noGoogleServicesWarning": { + "type": "String", + "placeholders": {} + }, + "none": "Cap", + "@none": { + "type": "String", + "placeholders": {} + }, + "noPasswordRecoveryDescription": "Encara no heu afegit cap mètode per a poder recuperar la contrasenya.", + "@noPasswordRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "noPermission": "Sense permís", + "@noPermission": { + "type": "String", + "placeholders": {} + }, + "noRoomsFound": "No s’ha trobat cap sala…", + "@noRoomsFound": { + "type": "String", + "placeholders": {} + }, + "notifications": "Notificacions", + "@notifications": { + "type": "String", + "placeholders": {} + }, + "numUsersTyping": "{count} usuàriïs escrivint…", + "@numUsersTyping": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "offline": "Fora de línia", + "@offline": { + "type": "String", + "placeholders": {} + }, + "ok": "D'acord", + "@ok": { + "type": "String", + "placeholders": {} + }, + "online": "En línia", + "@online": { + "type": "String", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "La còpia de seguretat de claus en línia està activada", + "@onlineKeyBackupEnabled": { + "type": "String", + "placeholders": {} + }, + "oopsSomethingWentWrong": "Alguna cosa ha anat malament…", + "@oopsSomethingWentWrong": { + "type": "String", + "placeholders": {} + }, + "openAppToReadMessages": "Obre l'aplicació per llegir els missatges", + "@openAppToReadMessages": { + "type": "String", + "placeholders": {} + }, + "openCamera": "Obre la càmera", + "@openCamera": { + "type": "String", + "placeholders": {} + }, + "or": "O", + "@or": { + "type": "String", + "placeholders": {} + }, + "passphraseOrKey": "contrasenya o clau de recuperació", + "@passphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "password": "Contrasenya", + "@password": { + "type": "String", + "placeholders": {} + }, + "passwordForgotten": "Contrasenya oblidada", + "@passwordForgotten": { + "type": "String", + "placeholders": {} + }, + "passwordHasBeenChanged": "La contrasenya ha canviat", + "@passwordHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "passwordRecovery": "Recuperació de contrassenya", + "@passwordRecovery": { + "type": "String", + "placeholders": {} + }, + "pickImage": "Selecciona una imatge", + "@pickImage": { + "type": "String", + "placeholders": {} + }, + "pin": "Fixa", + "@pin": { + "type": "String", + "placeholders": {} + }, + "play": "Reproduir {fileName}", + "@play": { + "type": "String", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pleaseChooseAPasscode": "Tria un codi d'accés", + "@pleaseChooseAPasscode": { + "type": "String", + "placeholders": {} + }, + "pleaseClickOnLink": "Fes clic a l'enllaç del correu i, després, segueix.", + "@pleaseClickOnLink": { + "type": "String", + "placeholders": {} + }, + "pleaseEnter4Digits": "Introdueix 4 dígits o deixa-ho buit per desactivar el bloqueig.", + "@pleaseEnter4Digits": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPassword": "Introdueix la teva contrasenya", + "@pleaseEnterYourPassword": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourUsername": "Introdueix el teu nom d'usuàriï", + "@pleaseEnterYourUsername": { + "type": "String", + "placeholders": {} + }, + "privacy": "Privadesa", + "@privacy": { + "type": "String", + "placeholders": {} + }, + "publicRooms": "Sales públiques", + "@publicRooms": { + "type": "String", + "placeholders": {} + }, + "pushRules": "Regles push", + "@pushRules": { + "type": "String", + "placeholders": {} + }, + "recording": "Enregistrant", + "@recording": { + "type": "String", + "placeholders": {} + }, + "redactedAnEvent": "{username} ha estripat un esdeveniment", + "@redactedAnEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "reject": "Rebutja", + "@reject": { + "type": "String", + "placeholders": {} + }, + "rejectedTheInvitation": "{username} ha rebutjat la invitació", + "@rejectedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "remove": "Elimina", + "@remove": { + "type": "String", + "placeholders": {} + }, + "removeAllOtherDevices": "Elimina tots els altres dispositius", + "@removeAllOtherDevices": { + "type": "String", + "placeholders": {} + }, + "removedBy": "Eliminat per {username}", + "@removedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "unbanFromChat": "Aixeca el veto", + "@unbanFromChat": { + "type": "String", + "placeholders": {} + }, + "reply": "Respon", + "@reply": { + "type": "String", + "placeholders": {} + }, + "requestPermission": "Sol·licita permís", + "@requestPermission": { + "type": "String", + "placeholders": {} + }, + "roomHasBeenUpgraded": "La sala s'ha actualitzat", + "@roomHasBeenUpgraded": { + "type": "String", + "placeholders": {} + }, + "security": "Seguretat", + "@security": { + "type": "String", + "placeholders": {} + }, + "send": "Envia", + "@send": { + "type": "String", + "placeholders": {} + }, + "sendAMessage": "Envia un missatge", + "@sendAMessage": { + "type": "String", + "placeholders": {} + }, + "sendAsText": "Envia com a text", + "@sendAsText": { "type": "String" - } - } - }, - "groups": "Grups", - "@groups": { - "type": "String", - "placeholders": {} - }, - "messages": "Missatges", - "@messages": { - "type": "String", - "placeholders": {} - }, - "showPassword": "Mostra la contrasenya", - "@showPassword": { - "type": "String", - "placeholders": {} - }, - "spaceIsPublic": "L’espai és públic", - "@spaceIsPublic": { - "type": "String", - "placeholders": {} - }, - "scanQrCode": "Escaneja un codi QR", - "@scanQrCode": {}, - "obtainingLocation": "S’està obtenint la ubicació…", - "@obtainingLocation": { - "type": "String", - "placeholders": {} - }, - "shareLocation": "Comparteix la ubicació", - "@shareLocation": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWait": "S’està sincronitzant… Espereu.", - "@synchronizingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "reason": "Raó", - "@reason": { - "type": "String", - "placeholders": {} - }, - "changedTheDisplaynameTo": "{username} ha canviat el seu àlies a: '{displayname}'", - "@changedTheDisplaynameTo": { - "type": "String", - "placeholders": { - "username": { + }, + "sendAudio": "Envia un àudio", + "@sendAudio": { + "type": "String", + "placeholders": {} + }, + "sendFile": "Envia un fitxer", + "@sendFile": { + "type": "String", + "placeholders": {} + }, + "sendImage": "Envia una imatge", + "@sendImage": { + "type": "String", + "placeholders": {} + }, + "sendVideo": "Envia un vídeo", + "@sendVideo": { + "type": "String", + "placeholders": {} + }, + "sentAFile": "📁 {username} ha enviat un fitxer", + "@sentAFile": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAnAudio": "🎤 {username} ha enviat un àudio", + "@sentAnAudio": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAPicture": "🖼️ {username} ha enviat una imatge", + "@sentAPicture": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentASticker": "😊 {username} ha enviat un adhesiu", + "@sentASticker": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAVideo": "🎥 {username} ha enviat un vídeo", + "@sentAVideo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentCallInformations": "{senderName} ha enviat informació de trucada", + "@sentCallInformations": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "setStatus": "Defineix l’estat", + "@setStatus": { + "type": "String", + "placeholders": {} + }, + "settings": "Paràmetres", + "@settings": { + "type": "String", + "placeholders": {} + }, + "share": "Comparteix", + "@share": { + "type": "String", + "placeholders": {} + }, + "sharedTheLocation": "{username} n’ha compartit la ubicació", + "@sharedTheLocation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "skip": "Omet", + "@skip": { + "type": "String", + "placeholders": {} + }, + "sourceCode": "Codi font", + "@sourceCode": { + "type": "String", + "placeholders": {} + }, + "startedACall": "{senderName} ha iniciat una trucada", + "@startedACall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "statusExampleMessage": "Com us sentiu avui?", + "@statusExampleMessage": { + "type": "String", + "placeholders": {} + }, + "submit": "Envia", + "@submit": { + "type": "String", + "placeholders": {} + }, + "systemTheme": "Sistema", + "@systemTheme": { + "type": "String", + "placeholders": {} + }, + "theyDontMatch": "No coincideixen", + "@theyDontMatch": { + "type": "String", + "placeholders": {} + }, + "theyMatch": "Coincideixen", + "@theyMatch": { + "type": "String", + "placeholders": {} + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "String", + "placeholders": {} + }, + "tooManyRequestsWarning": "Massa sol·licituds. Torna-ho a provar més tard!", + "@tooManyRequestsWarning": { + "type": "String", + "placeholders": {} + }, + "tryToSendAgain": "Intenta tornar a enviar", + "@tryToSendAgain": { + "type": "String", + "placeholders": {} + }, + "unavailable": "No disponible", + "@unavailable": { + "type": "String", + "placeholders": {} + }, + "unbannedUser": "{username} ha aixecat el veto a {targetName}", + "@unbannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "unblockDevice": "Desbloqueja dispositiu", + "@unblockDevice": { + "type": "String", + "placeholders": {} + }, + "unknownDevice": "Dispositiu desconegut", + "@unknownDevice": { + "type": "String", + "placeholders": {} + }, + "unknownEncryptionAlgorithm": "L’algorisme de xifratge és desconegut", + "@unknownEncryptionAlgorithm": { + "type": "String", + "placeholders": {} + }, + "unknownEvent": "Esdeveniment desconegut '{type}'", + "@unknownEvent": { + "type": "String", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "unmuteChat": "Deixa de silenciar el xat", + "@unmuteChat": { + "type": "String", + "placeholders": {} + }, + "unpin": "Deixa de fixar", + "@unpin": { + "type": "String", + "placeholders": {} + }, + "userAndOthersAreTyping": "{username} i {count} més estan escrivint…", + "@userAndOthersAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "userAndUserAreTyping": "{username} i {username2} estan escrivint…", + "@userAndUserAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "username2": { + "type": "String" + } + } + }, + "userIsTyping": "{username} està escrivint…", + "@userIsTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "userLeftTheChat": "🚪 {username} ha marxat del xat", + "@userLeftTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "username": "Nom d’usuàriï", + "@username": { + "type": "String", + "placeholders": {} + }, + "userSentUnknownEvent": "{username} ha enviat un esdeveniment {type}", + "@userSentUnknownEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "type": { + "type": "String" + } + } + }, + "verify": "Verifica", + "@verify": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "Inicia la verificació", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "T'has verificat correctament!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "verifyTitle": "Verificant un altre compte", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "videoCall": "Videotrucada", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "visibilityOfTheChatHistory": "Visibilitat de l’historial del xat", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "Visible per a tots els participants", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "visibleForEveryone": "Visible per a tothom", + "@visibleForEveryone": { + "type": "String", + "placeholders": {} + }, + "voiceMessage": "Missatge de veu", + "@voiceMessage": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerEmoji": "S’està esperant que l’altre accepti l’emoji…", + "@waitingPartnerEmoji": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerNumbers": "S’està esperant que l’altre accepti els nombres…", + "@waitingPartnerNumbers": { + "type": "String", + "placeholders": {} + }, + "warning": "Atenció!", + "@warning": { + "type": "String", + "placeholders": {} + }, + "weSentYouAnEmail": "Us hem enviat un missatge de correu electrònic", + "@weSentYouAnEmail": { + "type": "String", + "placeholders": {} + }, + "whoIsAllowedToJoinThisGroup": "Qui pot unir-se a aquest grup", + "@whoIsAllowedToJoinThisGroup": { + "type": "String", + "placeholders": {} + }, + "withTheseAddressesRecoveryDescription": "Amb aquestes adreces, si ho necessiteu, podeu recuperar la vostra contrasenya.", + "@withTheseAddressesRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "writeAMessage": "Escriviu un missatge…", + "@writeAMessage": { + "type": "String", + "placeholders": {} + }, + "yes": "Sí", + "@yes": { + "type": "String", + "placeholders": {} + }, + "you": "Vós", + "@you": { + "type": "String", + "placeholders": {} + }, + "youAreNoLongerParticipatingInThisChat": "Ja no participeu en aquest xat", + "@youAreNoLongerParticipatingInThisChat": { + "type": "String", + "placeholders": {} + }, + "youHaveBeenBannedFromThisChat": "T'han vetat en aquest xat", + "@youHaveBeenBannedFromThisChat": { + "type": "String", + "placeholders": {} + }, + "yourPublicKey": "La vostra clau pública", + "@yourPublicKey": { + "type": "String", + "placeholders": {} + }, + "all": "Tot", + "@all": { + "type": "String", + "placeholders": {} + }, + "addToSpace": "Afegeix a un espai", + "areYouSureYouWantToLogout": "Segur que voleu finalitzar la sessió?", + "@areYouSureYouWantToLogout": { + "type": "String", + "placeholders": {} + }, + "addEmail": "Afegeix una adreça electrònica", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "commandInvalid": "L’ordre no és vàlida", + "@commandInvalid": { "type": "String" - }, - "displayname": { - "type": "String" - } - } - }, - "howOffensiveIsThisContent": "Com d’ofensiu és aquest contingut?", - "@howOffensiveIsThisContent": { - "type": "String", - "placeholders": {} - }, - "commandHint_clearcache": "Neteja la memòria cau", - "@commandHint_clearcache": { - "type": "String", - "description": "Usage hint for the command /clearcache" - }, - "commandHint_join": "Uneix-te a la sala", - "@commandHint_join": { - "type": "String", - "description": "Usage hint for the command /join" - }, - "commandHint_kick": "Expulsa uni usuàriï d'aquesta sala", - "@commandHint_kick": { - "type": "String", - "description": "Usage hint for the command /kick" - }, - "commandHint_myroomavatar": "Establiu la imatge per a aquesta sala (per mxc-uri)", - "@commandHint_myroomavatar": { - "type": "String", - "description": "Usage hint for the command /myroomavatar" - }, - "commandHint_dm": "Inicia un xat directe\nUsa --no-encryption per desactivar l'encriptatge", - "@commandHint_dm": { - "type": "String", - "description": "Usage hint for the command /dm" - }, - "commandHint_invite": "Convida uni usuàriï a aquesta sala", - "@commandHint_invite": { - "type": "String", - "description": "Usage hint for the command /invite" - }, - "commandHint_ban": "Veta uni usuàriï d'aquesta sala", - "@commandHint_ban": { - "type": "String", - "description": "Usage hint for the command /ban" - }, - "commandHint_create": "Crea un xat de grup buit\nUsa --no-encryption per desactivar l'encriptatge", - "@commandHint_create": { - "type": "String", - "description": "Usage hint for the command /create" - }, - "commandHint_discardsession": "Descarta la sessió", - "@commandHint_discardsession": { - "type": "String", - "description": "Usage hint for the command /discardsession" - }, - "repeatPassword": "Repetiu la contrasenya", - "@repeatPassword": {}, - "commandHint_myroomnick": "Estableix el teu àlies per a aquesta sala", - "@commandHint_myroomnick": { - "type": "String", - "description": "Usage hint for the command /myroomnick" - }, - "editBlockedServers": "Edita els servidors bloquejats", - "@editBlockedServers": { - "type": "String", - "placeholders": {} - }, - "badServerLoginTypesException": "El servidor admet els inicis de sessió:\n{serverVersions}\nPerò l'aplicació només admet:\n{supportedVersions}", - "@badServerLoginTypesException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "hugContent": "{senderName} t'abraça", - "@hugContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "jumpToLastReadMessage": "Salta a l'últim missatge llegit", - "@jumpToLastReadMessage": {}, - "allRooms": "Tots els xats de grup", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "commandHint_cuddle": "Envia una carícia", - "@commandHint_cuddle": {}, - "widgetVideo": "Vídeo", - "@widgetVideo": {}, - "dismiss": "Ignora-ho", - "@dismiss": {}, - "reportErrorDescription": "😭 Oh no. Hi ha hagut algun error. Si vols, pots informar d'aquest bug a l'equip de desenvolupament.", - "@reportErrorDescription": {}, - "removeYourAvatar": "Esborra el teu avatar", - "@removeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "unsupportedAndroidVersion": "Aquesta versió d'Android és incompatible", - "@unsupportedAndroidVersion": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "messageType": "Tipus de missatge", - "@messageType": {}, - "indexedDbErrorLong": "L'emmagatzematge de missatges no està disponible per defecte en el mode privat.\nVisita\n - about:config\n - posa a true l'opció dom.indexedDB.privateBrowsing.enabled\nSi no ho fas, no podràs fer servir FluffyChat en mode privat.", - "@indexedDbErrorLong": {}, - "oneClientLoggedOut": "Una de les teves aplicacions ha tancat la sessió", - "@oneClientLoggedOut": {}, - "startFirstChat": "Comença el teu primer xat", - "@startFirstChat": {}, - "callingAccount": "Compte de la trucada", - "@callingAccount": {}, - "setColorTheme": "Tria el color del tema:", - "@setColorTheme": {}, - "nextAccount": "Compte següent", - "@nextAccount": {}, - "allSpaces": "Tots els espais", - "@allSpaces": {}, - "supposedMxid": "Això hauria de ser {mxid}", - "@supposedMxid": { - "type": "String", - "placeholders": { - "mxid": { - "type": "String" - } - } - }, - "user": "Usuàrïi", - "@user": {}, - "youAcceptedTheInvitation": "👍 Has acceptat la invitació", - "@youAcceptedTheInvitation": {}, - "noMatrixServer": "{server1} no és un servidor de matrix, vols fer servir {server2} ?", - "@noMatrixServer": { - "type": "String", - "placeholders": { - "server1": { - "type": "String" - }, - "server2": { - "type": "String" - } - } - }, - "youInvitedBy": "📩 {user} t'ha convidat", - "@youInvitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "banUserDescription": "Es vetarà li usuàriï al xat i no podrà tornar-hi a entrar fins que se li aixequi el veto.", - "@banUserDescription": {}, - "widgetEtherpad": "Nota de text", - "@widgetEtherpad": {}, - "removeDevicesDescription": "Tancaràs la sessió d'aquest dispositiu i no hi podràs rebre més missatges.", - "@removeDevicesDescription": {}, - "separateChatTypes": "Separa xats directes i grups", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "tryAgain": "Torna-ho a provar", - "@tryAgain": {}, - "youKickedAndBanned": "🙅 Has expulsat i vetat a {user}", - "@youKickedAndBanned": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "unbanUserDescription": "L'usuàrïi ja pot tornar a entrar al xat.", - "@unbanUserDescription": {}, - "youRejectedTheInvitation": "Has rebutjat la invitació", - "@youRejectedTheInvitation": {}, - "otherCallingPermissions": "Micròfon, càmera i altres permisos del FluffyChat", - "@otherCallingPermissions": {}, - "messagesStyle": "Missatges:", - "@messagesStyle": {}, - "widgetUrlError": "La URL no és vàlida.", - "@widgetUrlError": {}, - "emailOrUsername": "Email o nom d'usuàrïi", - "@emailOrUsername": {}, - "newSpaceDescription": "Els espais et permeten consolidar els teus xats i construir comunitats públiques o privades.", - "@newSpaceDescription": {}, - "chatDescription": "Descripció del xat", - "@chatDescription": {}, - "callingAccountDetails": "Permet al FluffyChat de fer servir l'app de trucades nativa de l'Android.", - "@callingAccountDetails": {}, - "editRoomAliases": "Canvia els àlies de la sala", - "@editRoomAliases": { - "type": "String", - "placeholders": {} - }, - "enterSpace": "Obre l'espai", - "@enterSpace": {}, - "encryptThisChat": "Xifra aquest xat", - "@encryptThisChat": {}, - "previousAccount": "Compte anterior", - "@previousAccount": {}, - "reopenChat": "Reobre el xat", - "@reopenChat": {}, - "pleaseEnterRecoveryKey": "Introdueix la teva clau de recuperació:", - "@pleaseEnterRecoveryKey": {}, - "widgetNameError": "Posa el nom públic.", - "@widgetNameError": {}, - "inoffensive": "Inofensiu", - "@inoffensive": { - "type": "String", - "placeholders": {} - }, - "addToBundle": "Afegeix al pquet", - "@addToBundle": {}, - "addWidget": "Afegeix un giny", - "@addWidget": {}, - "countFiles": "{count} arxius", - "@countFiles": { - "placeholders": { - "count": { - "type": "int" - } - } - }, - "noKeyForThisMessage": "Això pot passar si el missatge es va enviar abans que haguessis iniciat sessió al teu compte des d'aquest dispositiu.\n\nTambé pot ser que l'emissor hagi bloquejat el teu dispositiu o que la connexió a internet anés malament.\n\nQue pots llegir el missatge des d'una altra sessió? Si és així, llavors pots transferir-lo! Ves a Paràmetres → Dispositius i assegura't que els teus dispositius s'ha verificat mútuament. Quan obris la sala la propera vegada i totes dues sessions estiguin executant-se, en primer pla, llavors les claus es trasnsmetran automàticament.\n\nVols evitar perdre les claus en tancar la sessió o en canviar de dispositiu? Llavors assegura't que has activat la còpia de seguretat del xat als paràmetres.", - "@noKeyForThisMessage": {}, - "commandHint_markasgroup": "Marca com un grup", - "@commandHint_markasgroup": {}, - "hydrateTor": "Usuàrïis de Tor: Importa una sessió anterior", - "@hydrateTor": {}, - "pushNotificationsNotAvailable": "Les notificacions push no estan disponibles", - "@pushNotificationsNotAvailable": {}, - "storeInAppleKeyChain": "Desa en la Apple KeyChain", - "@storeInAppleKeyChain": {}, - "replaceRoomWithNewerVersion": "Substitueix la sala amb la versió més recent", - "@replaceRoomWithNewerVersion": { - "type": "String", - "placeholders": {} - }, - "hydrate": "Restaura un arxiu de recuperació", - "@hydrate": {}, - "invalidServerName": "El nom del servidor és invàlid", - "@invalidServerName": {}, - "chatPermissions": "Permisos del xat", - "@chatPermissions": {}, - "sender": "Remitent", - "@sender": {}, - "storeInAndroidKeystore": "Desa en la Android KeyStore", - "@storeInAndroidKeystore": {}, - "signInWithPassword": "Inicia sessió amb contrasenya", - "@signInWithPassword": {}, - "offensive": "Ofensiu", - "@offensive": { - "type": "String", - "placeholders": {} - }, - "makeAdminDescription": "Un cop hagis fet admin aquesta persona ja no podràs desfer-ho, ja que llavors tindrà els mateixos permisos que tu.", - "@makeAdminDescription": {}, - "saveKeyManuallyDescription": "Per desar aquesta clau manualment, pica l'eina de compartir o copia-la al porta-retalls.", - "@saveKeyManuallyDescription": {}, - "editBundlesForAccount": "Edita paquets per aquest compte", - "@editBundlesForAccount": {}, - "whyIsThisMessageEncrypted": "Per què no es pot llegir aquest missatge?", - "@whyIsThisMessageEncrypted": {}, - "setChatDescription": "Posa una descripció de xat", - "@setChatDescription": {}, - "importFromZipFile": "Importa des d'un arxiu zip", - "@importFromZipFile": {}, - "dehydrateWarning": "Aquesta acció és irreversible. Assegura't que deses l'arxiu de recuperació en un lloc segur.", - "@dehydrateWarning": {}, - "noOtherDevicesFound": "No s'han trobat més dispositius", - "@noOtherDevicesFound": {}, - "redactedBy": "Estripat per {username}", - "@redactedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "videoCallsBetaWarning": "Tingues en compte que les trucades de vídeo estan encara en beta. Pot ser que no funcioni bé o que falli en alguna plataforma.", - "@videoCallsBetaWarning": {}, - "participant": "Participant", - "@participant": { - "type": "String", - "placeholders": {} - }, - "signInWith": "Inicia sessió amb {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "fileIsTooBigForServer": "No s'ha pogut enviar! El servidor només accepta adjunts de fins a {max}.", - "@fileIsTooBigForServer": {}, - "homeserver": "Servidor", - "@homeserver": {}, - "callingPermissions": "Permisos de trucada", - "@callingPermissions": {}, - "readUpToHere": "Llegit fins aquí", - "@readUpToHere": {}, - "start": "Comença", - "@start": {}, - "register": "Registra't", - "@register": { - "type": "String", - "placeholders": {} - }, - "unlockOldMessages": "Desbloqueja els missatges antics", - "@unlockOldMessages": {}, - "numChats": "{number} xats", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "optionalRedactReason": "(Opcional) El motiu per estripar el missatge...", - "@optionalRedactReason": {}, - "dehydrate": "Exporta la sessió i neteja el dispositiu", - "@dehydrate": {}, - "archiveRoomDescription": "Aquest xat serà arxivat. Els altres contactes del grup ho veuran com si haguessis abandonat el xat.", - "@archiveRoomDescription": {}, - "exportEmotePack": "Exporta com un pack Emote en .zip", - "@exportEmotePack": {}, - "switchToAccount": "Canvia al compte {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "experimentalVideoCalls": "Trucades de vídeo experimentals", - "@experimentalVideoCalls": {}, - "pleaseEnterRecoveryKeyDescription": "Per desbloquejar els missatges antics, introdueix la clau de recuperació que vas generar en una sessió anterior. La clau de recuperació NO és la teva contrasenya.", - "@pleaseEnterRecoveryKeyDescription": {}, - "openInMaps": "Obre als mapes", - "@openInMaps": { - "type": "String", - "placeholders": {} - }, - "inviteContactToGroupQuestion": "Vols convidar {contact} al xat \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, - "redactedByBecause": "Estripat per {username} per: \"{reason}\"", - "@redactedByBecause": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "reason": { - "type": "String" - } - } - }, - "youHaveWithdrawnTheInvitationFor": "Has rebutjat la invitació de {user}", - "@youHaveWithdrawnTheInvitationFor": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "appearOnTopDetails": "Permet a l'app que aparegui sobre d'altres apps. No cal si ja has afegit FluffyChat com a compte de trucades", - "@appearOnTopDetails": {}, - "enterRoom": "Entra a la sala", - "@enterRoom": {}, - "reportUser": "Denuncia l'usuàrïi", - "@reportUser": {}, - "confirmEventUnpin": "Vols desfixar l'esdeveniment permanentment?", - "@confirmEventUnpin": {}, - "badServerVersionsException": "Aquest servidor suporta aquestes versions de Matrix:\n{serverVersions}\nPerò aquesta aplicación només és compatible amb {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "youInvitedUser": "📩 Has convidat a {user}", - "@youInvitedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "fileHasBeenSavedAt": "S'ha desat l'arxiu a {path}", - "@fileHasBeenSavedAt": { - "type": "String", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "redactMessageDescription": "S'estriparà el missatge per a totser d'aquesta conversa. Aquesta acció és irreversible.", - "@redactMessageDescription": {}, - "recoveryKey": "Clau de recuperació", - "@recoveryKey": {}, - "invalidInput": "L'entrada no és vàlida!", - "@invalidInput": {}, - "dehydrateTorLong": "Per a lis usuàrïis de Tor, es recomana exportar la sessió abans de tancar la finestra.", - "@dehydrateTorLong": {}, - "doNotShowAgain": "No ho tornis a mostrar", - "@doNotShowAgain": {}, - "report": "informa", - "@report": {}, - "serverRequiresEmail": "Aquest servidor necessita validar la teva adreça per registrar-t'hi.", - "@serverRequiresEmail": {}, - "hideUnimportantStateEvents": "Amaga canvis d'estat poc importants", - "@hideUnimportantStateEvents": {}, - "screenSharingTitle": "compartició de pantalla", - "@screenSharingTitle": {}, - "widgetCustom": "Personalització", - "@widgetCustom": {}, - "addToSpaceDescription": "Tria un espai per afegir-hi el xat.", - "@addToSpaceDescription": {}, - "googlyEyesContent": "{senderName} t'ha enviat un parell d'ulls", - "@googlyEyesContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "youBannedUser": "Has vetat a {user}", - "@youBannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "addChatDescription": "Afegeix una descripció al xat...", - "@addChatDescription": {}, - "editRoomAvatar": "Canvia la imatge de la sala", - "@editRoomAvatar": { - "type": "String", - "placeholders": {} - }, - "hasKnocked": "🚪 {user} pica a la porta", - "@hasKnocked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "publish": "Publica", - "@publish": {}, - "openLinkInBrowser": "Obre l'enllaç en un navegador", - "@openLinkInBrowser": {}, - "messageInfo": "Informació del missatge", - "@messageInfo": {}, - "disableEncryptionWarning": "Per motius de seguretat, un cop activat, no es pot desactivar el xifratge.", - "@disableEncryptionWarning": {}, - "directChat": "Xat directe", - "@directChat": {}, - "wrongPinEntered": "Pin incorrecte! Torna-ho a provar en {seconds} segons...", - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "sendTypingNotifications": "Envia notificacions d'escriptura", - "@sendTypingNotifications": {}, - "inviteGroupChat": "📨 Convida al grup", - "@inviteGroupChat": {}, - "appearOnTop": "Mostra per sobre", - "@appearOnTop": {}, - "invitePrivateChat": "📨 Convida a un xat privat", - "@invitePrivateChat": {}, - "foregroundServiceRunning": "Aquesta notificació apareix quan el servei de primer pla està corrent.", - "@foregroundServiceRunning": {}, - "voiceCall": "Videotrucada", - "@voiceCall": {}, - "commandHint_unban": "Aixeca el veto a aquesti usuàriï per aquesta sala", - "@commandHint_unban": { - "type": "String", - "description": "Usage hint for the command /unban" - }, - "importEmojis": "Importa emojis", - "@importEmojis": {}, - "wasDirectChatDisplayName": "Xat buit ( era {oldDisplayName})", - "@wasDirectChatDisplayName": { - "type": "String", - "placeholders": { - "oldDisplayName": { - "type": "String" - } - } - }, - "noChatDescriptionYet": "No s'ha afegit una descripció de xat.", - "@noChatDescriptionYet": {}, - "removeFromBundle": "Esborra del paquet", - "@removeFromBundle": {}, - "confirmMatrixId": "Confirma la teva ID de Matrix per poder esborrar el compte.", - "@confirmMatrixId": {}, - "learnMore": "Llegeix-ne més", - "@learnMore": {}, - "notAnImage": "No és un arxiu d'image.", - "@notAnImage": {}, - "users": "Usuàrïis", - "@users": {}, - "openGallery": "Obre la galeria", - "@openGallery": {}, - "chatDescriptionHasBeenChanged": "Ha canviat la descripció del xat", - "@chatDescriptionHasBeenChanged": {}, - "newGroup": "Grup nou", - "@newGroup": {}, - "bundleName": "Nom del paquet", - "@bundleName": {}, - "dehydrateTor": "Usuàrïis de Tor: Exporta la sessió", - "@dehydrateTor": {}, - "removeFromSpace": "Esborra de l'espai", - "@removeFromSpace": {}, - "roomUpgradeDescription": "El xat serà recreat amb una versió de sala nova. Totis lis participants seran notificadis que han de canviar al nou xat. Pots llegir més sobre les versions de sala a https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, - "pleaseEnterANumber": "Introdueix un número major que 0", - "@pleaseEnterANumber": {}, - "youKicked": "👞 Has expulsat a {user}", - "@youKicked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "profileNotFound": "No s'ha trobat el compte en aquest servidor. Pot ser un error de connexió, o que realment no existeixi.", - "@profileNotFound": {}, - "jump": "Salta", - "@jump": {}, - "reactedWith": "{sender} ha reaccionat amb {reaction}", - "@reactedWith": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "reaction": { - "type": "String" - } - } - }, - "sorryThatsNotPossible": "Aquesta acció no és possible", - "@sorryThatsNotPossible": {}, - "videoWithSize": "Vídeo {size}", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "shareInviteLink": "Comparteix un enllaç d'invitació", - "@shareInviteLink": {}, - "commandHint_markasdm": "Marca com a conversa directa la sala amb aquesta ID de Matrix", - "@commandHint_markasdm": {}, - "recoveryKeyLost": "Que has perdut la clau de recuperació?", - "@recoveryKeyLost": {}, - "cuddleContent": "{senderName} et fa una carícia", - "@cuddleContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "deviceKeys": "Claus del dispositiu:", - "@deviceKeys": {}, - "emoteKeyboardNoRecents": "Els últims emotes usats apareixeran aquí...", - "@emoteKeyboardNoRecents": { - "type": "String", - "placeholders": {} - }, - "setTheme": "Tria el tema:", - "@setTheme": {}, - "youJoinedTheChat": "T'has afegit al xat", - "@youJoinedTheChat": {}, - "openVideoCamera": "Obre la càmera per a fer un vídeo", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "markAsRead": "Marca com a llegit", - "@markAsRead": {}, - "widgetName": "Nom", - "@widgetName": {}, - "errorAddingWidget": "S'ha produït un error en afegir el giny.", - "@errorAddingWidget": {}, - "commandHint_hug": "Envia una abraçada", - "@commandHint_hug": {}, - "replace": "Reemplaça", - "@replace": {}, - "oopsPushError": "Ep! Sembla que s'ha produït un error en configurar les notificacions.", - "@oopsPushError": { - "type": "String", - "placeholders": {} - }, - "youUnbannedUser": "Has aixecat el veto a {user}", - "@youUnbannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "newSpace": "Espai nou", - "@newSpace": {}, - "emojis": "Emojis", - "@emojis": {}, - "pleaseEnterYourPin": "Introdueix el teu pin", - "@pleaseEnterYourPin": { - "type": "String", - "placeholders": {} - }, - "pleaseChoose": "Escull", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, - "commandHint_googly": "Envia uns ulls curiosos", - "@commandHint_googly": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Torna-ho a provar més tard o tria un servidor diferent.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "createGroup": "Crea un grup", - "@createGroup": {}, - "hydrateTorLong": "Que vas exportar la teva última sessió a Tor? La pots importar ara i continuar xatejant.", - "@hydrateTorLong": {}, - "time": "Temps", - "@time": {}, - "custom": "Personalitzat", - "@custom": {}, - "noBackupWarning": "Compte! Si no actives la còpia de seguretat dels xats, perdràs accés als teus missatges xifrats. És molt recomanable activar-ho abans de tancar la sessió.", - "@noBackupWarning": {}, - "storeInSecureStorageDescription": "Desa la clau de recuperació en l'emmagatzematge segur d'aquest dispositiu.", - "@storeInSecureStorageDescription": {}, - "openChat": "Obre el xat", - "@openChat": {}, - "kickUserDescription": "Li usuàrïi ha estat expulsadi però no vetadi. Als xats públics, pot tornar-hi a entrar en qualsevol moment.", - "@kickUserDescription": {}, - "importNow": "Importa-ho ara", - "@importNow": {}, - "pinMessage": "Fixa a la sala", - "@pinMessage": {}, - "invite": "Convida", - "@invite": {}, - "enableMultiAccounts": "(Beta) Activa multi-compte en aquest dispositiu", - "@enableMultiAccounts": {}, - "indexedDbErrorTitle": "Problemes amb el mode privat", - "@indexedDbErrorTitle": {}, - "unsupportedAndroidVersionLong": "Aquesta funcionalitat només funciona amb versions d'Android més noves.", - "@unsupportedAndroidVersionLong": {}, - "storeSecurlyOnThisDevice": "Desa de forma segura en aquest dispositiu", - "@storeSecurlyOnThisDevice": {}, - "screenSharingDetail": "Estàs compartint la teva pantalla a FluffyChat", - "@screenSharingDetail": {}, - "placeCall": "Truca", - "@placeCall": {}, - "block": "Bloca", - "@block": {}, - "blockUsername": "Ignora aquesti usuàrïi", - "@blockUsername": {}, - "blockedUsers": "Usuàrïis blocadis", - "@blockedUsers": {}, - "blockListDescription": "Pots bloquejar usuàrïis que et molestin. No rebràs missatges seus ni invitacions de part seva a cap sala.", - "@blockListDescription": {}, - "pleaseChooseAStrongPassword": "Tria una contrasenya forta", - "@pleaseChooseAStrongPassword": {}, - "youInvitedToBy": "📩 T'han enviat un enllaç d'invitació per:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "groupName": "Nom del grup", - "@groupName": {}, - "createGroupAndInviteUsers": "Crea un grup i convida-hi usuàrïis", - "@createGroupAndInviteUsers": {}, - "wrongRecoveryKey": "Malauradament, aquesta clau de recuperació no és la correcta.", - "@wrongRecoveryKey": {}, - "publicLink": "Enllaç públic", - "@publicLink": {}, - "transparent": "Transparent", - "@transparent": {}, - "sendReadReceiptsDescription": "Lis altris participants d'un xat poden veure quan has llegit un missatge.", - "@sendReadReceiptsDescription": {}, - "yourGlobalUserIdIs": "La teva ID global és: ", - "@yourGlobalUserIdIs": {}, - "startConversation": "Comença una conversa", - "@startConversation": {}, - "commandHint_sendraw": "Envia un json pelat", - "@commandHint_sendraw": {}, - "databaseMigrationTitle": "La base de dades ha estat optimitzada", - "@databaseMigrationTitle": {}, - "pleaseEnterYourCurrentPassword": "Fica la teva contrasenya actual", - "@pleaseEnterYourCurrentPassword": {}, - "newPassword": "Contrasenya nova", - "@newPassword": {}, - "restoreSessionBody": "L'aplicació provarà de restaurar la teva sessió des de la còpia de seguretat. Si us plau, comunica aquest error a l'equi pde desenvolupament a {url}. El missatge d'error és {error}", - "@restoreSessionBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "formattedMessages": "Missatges amb format", - "@formattedMessages": {}, - "formattedMessagesDescription": "Mostra contingut amb format enriquit com text en cursiva, fent servir markdown.", - "@formattedMessagesDescription": {}, - "verifyOtherUser": "🔐 Verifica uni altri usuàrïi", - "@verifyOtherUser": {}, - "verifyOtherDevice": "🔐 Verifica un altre dispositiu", - "@verifyOtherDevice": {}, - "databaseBuildErrorBody": "No s'ha pogut construir la base de dades SQLite. L'aplicació provarà de fer servir un format de base de dades antiquat. Si us plau, comunica aquesta situació a la comunitat de desenvolupament a {url}. El missatge d'error és: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "initAppError": "S'ha produït un error mentre s'inicialitzava l'aplicació", - "@initAppError": {}, - "hidePresences": "Amagar la llista de Status?", - "@hidePresences": {}, - "noUsersFoundWithQuery": "No s'ha trobat cap usuàrïi amb \"{query}\". Revisa si ho has escrit malament.", - "@noUsersFoundWithQuery": { - "type": "String", - "placeholders": { - "query": { - "type": "String" - } - } - }, - "leaveEmptyToClearStatus": "Per esborrar el teu estat, deixa-ho en blanc.", - "@leaveEmptyToClearStatus": {}, - "select": "Tria", - "@select": {}, - "searchForUsers": "Cerca @usuariïs...", - "@searchForUsers": {}, - "subspace": "Subespai", - "@subspace": {}, - "addChatOrSubSpace": "Afegeix un xat o un subespai", - "@addChatOrSubSpace": {}, - "decline": "Denega", - "@decline": {}, - "sendReadReceipts": "Envia informes de tecleig", - "@sendReadReceipts": {}, - "sendTypingNotificationsDescription": "Lis altris participants d'un xat poden veure quan estàs teclejant un missatge nou.", - "@sendTypingNotificationsDescription": {}, - "incomingMessages": "Missatge d'entrada", - "@incomingMessages": {}, - "presenceStyle": "Presència:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "acceptedKeyVerification": "{sender} ha acceptat la verificació de claus", - "@acceptedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "canceledKeyVerification": "{sender} ha canceŀlat la verificació de claus", - "@canceledKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "completedKeyVerification": "{sender} ha comletat la verificació de claus", - "@completedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "isReadyForKeyVerification": "{sender} està a punt per verificar les claus", - "@isReadyForKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "nothingFound": "No s'ha trobat res...", - "@nothingFound": {}, - "searchChatsRooms": "Cerca #sales, @usuariïs...", - "@searchChatsRooms": {}, - "groupCanBeFoundViaSearch": "El grup es pot trobar per la cerca general", - "@groupCanBeFoundViaSearch": {}, - "databaseMigrationBody": "Espereu un moment, si us plau.", - "@databaseMigrationBody": {}, - "passwordsDoNotMatch": "Les contrasenyes no coincideixen", - "@passwordsDoNotMatch": {}, - "passwordIsWrong": "La contrasenya introduïda és incorrecta", - "@passwordIsWrong": {}, - "joinSpace": "Fica't a l'espai", - "@joinSpace": {}, - "publicSpaces": "Espais públics", - "@publicSpaces": {}, - "thisDevice": "Aquest dispositiu:", - "@thisDevice": {}, - "sessionLostBody": "S'ha perdut la teva sessió. Si us plau, comunica aquest error a l'equip de desenvolupament a {url}. El missatge d'error és: {error}", - "@sessionLostBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "forwardMessageTo": "Vols reenviar el missatge a {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "verifyOtherUserDescription": "Si verifiques aquesti usuàrïi, podràs estar seguri de a qui estàs escrivint. . 💪\n\nQuan inicies una verificació, l'altra persona i tu veureu un missatge emergent a l'app. Us sortiran un seguit d'emojis o números a cada pantalla, que haureu de comparar.\n\nLa millor manera de fer-ho és quedar en persona o fer una vídeo-trucada. 👭", - "@verifyOtherUserDescription": {}, - "verifyOtherDeviceDescription": "Quan verifiques un altre dispositiu, aquests poden intercanviar claus, així que es millora la seguretat total. 💪 Quan comences una verificació, apareixerà un missatge emergent a tots dos dispositius. A cadascun hi apareixerà un seguit d'emojis o de números que hauràs de comparar. El millor és tenir tots dos dispositius a mà abans d'iniciar la verificació. 🤳", - "@verifyOtherDeviceDescription": {}, - "requestedKeyVerification": "{sender} ha soŀlicitat verificar claus", - "@requestedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "startedKeyVerification": "{sender} ha iniciat la verificació de claus", - "@startedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "presencesToggle": "Mostra els missatges d'estat d'altres usuàrïis", - "@presencesToggle": { - "type": "String", - "placeholders": {} - }, - "stickers": "Enganxines", - "@stickers": {}, - "discover": "Descobreix", - "@discover": {}, - "commandHint_ignore": "Ignora el compte de matrix especificat", - "@commandHint_ignore": {}, - "commandHint_unignore": "Deixa d'ignorar el compt de matrix especificat", - "@commandHint_unignore": {}, - "sendCanceled": "S'ha canceŀlat l'enviament", - "@sendCanceled": {}, - "noChatsFoundHere": "Encara no hi ha xats. Obre una conversa amb algú picant al botó de sota. ⤵️", - "@noChatsFoundHere": {}, - "hideMemberChangesInPublicChatsBody": "No mostres a l'històric de conversa de les sales públiques quan algú hi entra o surt. Això facilita la lectura.", - "@hideMemberChangesInPublicChatsBody": {}, - "invitedBy": "📩 Convidadi per {user}", - "@invitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "knock": "Pica", - "@knock": {}, - "knocking": "S'està picant", - "@knocking": {}, - "restricted": "Restringit", - "@restricted": {}, - "knockRestricted": "No es pot picar a la porta", - "@knockRestricted": {}, - "goToSpace": "Ves a l'espai {space}", - "@goToSpace": { - "type": "String", - "space": {} - }, - "adminLevel": "{level} - Admin", - "@adminLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "changeGeneralChatSettings": "Canvia les opcions generals de xat", - "@changeGeneralChatSettings": {}, - "sendRoomNotifications": "Envia notificacions @room", - "@sendRoomNotifications": {}, - "changeTheDescriptionOfTheGroup": "Canvia la descripció del xat", - "@changeTheDescriptionOfTheGroup": {}, - "changelog": "Registre de canvis", - "@changelog": {}, - "userLevel": "{level} - Usuàriï", - "@userLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "moderatorLevel": "{level} - Moderadori", - "@moderatorLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "inviteOtherUsers": "Convida més gent a la conversa", - "@inviteOtherUsers": {}, - "changeTheChatPermissions": "Canvia els permisos del xat", - "@changeTheChatPermissions": {}, - "changeTheVisibilityOfChatHistory": "Canvia la visibilitat de l'historial de conversa", - "@changeTheVisibilityOfChatHistory": {}, - "changeTheCanonicalRoomAlias": "Canvia l'adreça principal del xat", - "@changeTheCanonicalRoomAlias": {}, - "accessAndVisibilityDescription": "Qui pot entrar a aquesta conversa i com pot ser descoberta.", - "@accessAndVisibilityDescription": {}, - "customEmojisAndStickers": "Emojis i stickers propis", - "@customEmojisAndStickers": {}, - "accessAndVisibility": "Accés i visibilitat", - "@accessAndVisibility": {}, - "calls": "Trucades", - "@calls": {}, - "hideRedactedMessages": "Amaga els missatges estripats", - "@hideRedactedMessages": {}, - "hideInvalidOrUnknownMessageFormats": "Amaga els missatges que tinguin un format desconegut", - "@hideInvalidOrUnknownMessageFormats": {}, - "hideMemberChangesInPublicChats": "Amaga els canvis d'estat de lis membres a les sales públiques", - "@hideMemberChangesInPublicChats": {}, - "notifyMeFor": "Nofica'm que", - "@notifyMeFor": {}, - "overview": "Resum", - "@overview": {}, - "passwordRecoverySettings": "Recuperació de contrasenya", - "@passwordRecoverySettings": {}, - "userRole": "Rol d'usuàriï", - "@userRole": {}, - "minimumPowerLevel": "El nivell mínim de permisos és {level}.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, - "gallery": "Galeria", - "@gallery": {}, - "noDatabaseEncryption": "No es pot xifrar la base de dades en aquesta plataforma", - "@noDatabaseEncryption": {}, - "usersMustKnock": "Lis membres han de picar a la porta", - "@usersMustKnock": {}, - "noOneCanJoin": "Ningú s'hi pot ficar", - "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} vol entrar al xat.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "customEmojisAndStickersBody": "Afegeix o comparteix emojis o stickers. Els podràs fer servir en qualsevol conversa.", - "@customEmojisAndStickersBody": {}, - "hideRedactedMessagesBody": "Si algú estripa un missatge, ja no apareixerà a l'historial de la conversa.", - "@hideRedactedMessagesBody": {}, - "searchIn": "Cerca al xat \"{chat}\"...", - "@searchIn": { - "type": "String", - "placeholders": { - "chat": { - "type": "String" - } - } - }, - "markAsUnread": "Marca com a no llegit", - "@markAsUnread": {}, - "chatPermissionsDescription": "Defineix quin nivell de permisos cal per cada acció en aquest xat. Els nivells 0, 50 i 100 normalment representen usuàriïs, mods i admins, però es pot canviar.", - "@chatPermissionsDescription": {}, - "updateInstalled": "🎉 S'ha actualitzat a la versió {version}!", - "@updateInstalled": { - "type": "String", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "alwaysUse24HourFormat": "true", - "@alwaysUse24HourFormat": { - "description": "Set to true to always display time of day in 24 hour format." - }, - "appLockDescription": "Bloca l'app amb un pin quan no la facis servir", - "@appLockDescription": {}, - "swipeRightToLeftToReply": "Llisca de dreta esquerra per respondre", - "@swipeRightToLeftToReply": {}, - "globalChatId": "Identificador global de xat", - "@globalChatId": {}, - "createNewAddress": "Crea una adreça nova", - "@createNewAddress": {}, - "searchMore": "Cerca més...", - "@searchMore": {}, - "files": "Arxius", - "@files": {}, - "publicChatAddresses": "Adreces públiques del xat", - "@publicChatAddresses": {}, - "unreadChatsInApp": "{appname}: {unread} converses pendents", - "@unreadChatsInApp": { - "type": "String", - "placeholders": { - "appname": { - "type": "String" - }, - "unread": { - "type": "String" - } - } - }, - "thereAreCountUsersBlocked": "Ara mateix hi ha {count} usuàriïs bloquejadis.", - "@thereAreCountUsersBlocked": { - "type": "String", - "count": {} - }, - "loginWithMatrixId": "Entra amb l'id de Matrix", - "@loginWithMatrixId": {}, - "discoverHomeservers": "Descobreix servidors", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "Què és un servidor de Matrix?", - "@whatIsAHomeserver": {}, - "homeserverDescription": "Totes les teves dades s'emmagatzemen al servidor, com passa amb el e-mail. Pots triar quin servidor vols fer servir sense témer a no poder comunicar gent d'altres servidors. Llegeix-ne més a https://matrix.org.", - "@homeserverDescription": {}, - "doesNotSeemToBeAValidHomeserver": "No sembla un servidor compatible. Pot ser que la URL estigui malament?", - "@doesNotSeemToBeAValidHomeserver": {}, - "countChatsAndCountParticipants": "{chats} xats i {participants} participants", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "noMoreChatsFound": "No hi ha més xats...", - "@noMoreChatsFound": {}, - "space": "Espai", - "@space": {}, - "joinedChats": "Xats on has entrat", - "@joinedChats": {}, - "unread": "Sense llegir", - "@unread": {}, - "spaces": "Espais", - "@spaces": {}, - "noPublicLinkHasBeenCreatedYet": "No s'ha creat cap enllaç públic", - "@noPublicLinkHasBeenCreatedYet": {}, - "chatCanBeDiscoveredViaSearchOnServer": "El xat es pot descobrir amb la cerca de {server}", - "@chatCanBeDiscoveredViaSearchOnServer": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "calculatingFileSize": "S'està calculant la mida de l'arxiu...", - "@calculatingFileSize": {}, - "prepareSendingAttachment": "S'està preparant per enviar l'adjunt...", - "@prepareSendingAttachment": {}, - "generatingVideoThumbnail": "S'està generant la miniatura del vídeo...", - "@generatingVideoThumbnail": {}, - "noticeChatBackupDeviceVerification": "Nota: quan connectes tots els dispositius al backup del xat, es verifiquen automàticament.", - "@noticeChatBackupDeviceVerification": {}, - "continueText": "Continua", - "@continueText": {}, - "strikeThrough": "Text ratllat", - "@strikeThrough": {}, - "addLink": "Afegeix un enllaç", - "@addLink": {}, - "noContactInformationProvided": "El servidor no ofereix cap informació de contacte vàlida", - "@noContactInformationProvided": {}, - "setWallpaper": "Tria imatge de fons", - "@setWallpaper": {}, - "sendImages": "Envia {count} imatge", - "@sendImages": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "sendingAttachment": "S'està enviant l'adjunt...", - "@sendingAttachment": {}, - "compressVideo": "S'està comprimint el vídeo...", - "@compressVideo": {}, - "sendingAttachmentCountOfCount": "S'està enviant l'adjunt {index} de {length}...", - "@sendingAttachmentCountOfCount": { - "type": "integer", - "placeholders": { - "index": { - "type": "int" - }, - "length": { - "type": "int" - } - } - }, - "serverLimitReached": "S'ha arribat al límit del servidor! Esperant {seconds} segons...", - "@serverLimitReached": { - "type": "integer", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "oneOfYourDevicesIsNotVerified": "Un dels teus dispositius no està verificat", - "@oneOfYourDevicesIsNotVerified": {}, - "welcomeText": "Hola hola! 👋 Això és FluffyChat. Pots iniciar sessió en qualsevol servidor compatible amb https://matrix.org. I llavors xatejar amb qualsevol. És una xarxa enorme de missatgeria descentralitzada !", - "@welcomeText": {}, - "blur": "Difumina:", - "@blur": {}, - "opacity": "Opacitat:", - "@opacity": {}, - "manageAccount": "Gestiona el compte", - "@manageAccount": {}, - "contactServerAdmin": "Contacta l'admin del servidor", - "@contactServerAdmin": {}, - "contactServerSecurity": "Contacta l'equip de seguretat del servidor", - "@contactServerSecurity": {}, - "version": "Versió", - "@version": {}, - "website": "Lloc web", - "@website": {}, - "compress": "Comprimeix", - "@compress": {}, - "pleaseFillOut": "Emplena", - "@pleaseFillOut": {}, - "invalidUrl": "URL invàlida", - "@invalidUrl": {}, - "unableToJoinChat": "No s'ha pogut entrar al xat. Pot ser que l'altri participant hagi tancat la conversa.", - "@unableToJoinChat": {}, - "aboutHomeserver": "Quant a {homeserver}", - "@aboutHomeserver": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "supportPage": "Pàgina de suport", - "@supportPage": {}, - "serverInformation": "Informació del servidor:", - "@serverInformation": {}, - "name": "Nom", - "@name": {}, - "boldText": "Text en negreta", - "@boldText": {}, - "italicText": "Text en cursiva", - "@italicText": {}, - "contentNotificationSettings": "Opcions de notificació de continguts", - "@contentNotificationSettings": {}, - "roomNotificationSettings": "Opcions de notificacions de sales", - "@roomNotificationSettings": {}, - "notificationRuleContainsUserName": "Conté el nom d'usuàriï", - "@notificationRuleContainsUserName": {}, - "notificationRuleContainsUserNameDescription": "Notifica l'usuàriï quan un missatge contingui el seu nom.", - "@notificationRuleContainsUserNameDescription": {}, - "notificationRuleMaster": "Silencia totes les notificacions", - "@notificationRuleMaster": {}, - "notificationRuleSuppressNotices": "Elimina els missatges automàtics", - "@notificationRuleSuppressNotices": {}, - "notificationRuleInviteForMe": "Invitació per a mi", - "@notificationRuleInviteForMe": {}, - "notificationRuleInviteForMeDescription": "Notifica l'usuàriï quan és convidadi a una sala.", - "@notificationRuleInviteForMeDescription": {}, - "notificationRuleMemberEventDescription": "Ignora les notificacions quan entra o surt algú d'una sala.", - "@notificationRuleMemberEventDescription": {}, - "notificationRuleIsUserMention": "Mencions", - "@notificationRuleIsUserMention": {}, - "notificationRuleContainsDisplayName": "Conté el nom visible", - "@notificationRuleContainsDisplayName": {}, - "notificationRuleIsRoomMention": "Menció de sala", - "@notificationRuleIsRoomMention": {}, - "notificationRuleIsRoomMentionDescription": "Notifica l'usuàriï quan es s'esmenti la sala.", - "@notificationRuleIsRoomMentionDescription": {}, - "notificationRuleRoomnotifDescription": "Notifica l'usuàriï quan un missatge contingui '@room'.", - "@notificationRuleRoomnotifDescription": {}, - "notificationRuleTombstone": "Làpida", - "@notificationRuleTombstone": {}, - "notificationRuleTombstoneDescription": "Notifica l'usuàriï dels missatges de desactivació de sales.", - "@notificationRuleTombstoneDescription": {}, - "notificationRuleReaction": "Reacció", - "@notificationRuleReaction": {}, - "notificationRuleReactionDescription": "Ignora les notificacions sobre reaccions.", - "@notificationRuleReactionDescription": {}, - "notificationRuleRoomServerAcl": "Regles ACL del servidor d'una sala", - "@notificationRuleRoomServerAcl": {}, - "notificationRuleRoomServerAclDescription": "Ignora les notificacions sobre les regles d'accés (ACL) del servidor d'una sala.", - "@notificationRuleRoomServerAclDescription": {}, - "notificationRuleSuppressEdits": "Elimina les edicions", - "@notificationRuleSuppressEdits": {}, - "notificationRuleSuppressEditsDescription": "Ignora les notificacions per missatges editats.", - "@notificationRuleSuppressEditsDescription": {}, - "notificationRuleCall": "Trucada", - "@notificationRuleCall": {}, - "notificationRuleCallDescription": "Notifica l'usuàriï de trucades.", - "@notificationRuleCallDescription": {}, - "notificationRuleEncryptedRoomOneToOneDescription": "Notifica l'usuàriï de missatges en sales xifrades un a un, converses de dues persones.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, - "notificationRuleEncryptedRoomOneToOne": "Converses xifrades", - "@notificationRuleEncryptedRoomOneToOne": {}, - "notificationRuleRoomOneToOne": "Converses", - "@notificationRuleRoomOneToOne": {}, - "notificationRuleMessageDescription": "Notifica l'usuàriï sobre missatges generals.", - "@notificationRuleMessageDescription": {}, - "notificationRuleEncrypted": "Xifrat", - "@notificationRuleEncrypted": {}, - "notificationRuleEncryptedDescription": "Notifica l'usuàriï de missatges en sales xifrades.", - "@notificationRuleEncryptedDescription": {}, - "notificationRuleJitsi": "Jitsi", - "@notificationRuleJitsi": {}, - "notificationRuleServerAcl": "Ignora canvis en ACL de servidor", - "@notificationRuleServerAcl": {}, - "unknownPushRule": "No es coneix la regla push '{rule}'", - "@unknownPushRule": { - "type": "String", - "placeholders": { - "rule": { - "type": "String" - } - } - }, - "more": "Més", - "@more": {}, - "notificationRuleSuppressNoticesDescription": "No envia notificacions relacionades amb usuàriïs automàtics com els bots.", - "@notificationRuleSuppressNoticesDescription": {}, - "otherNotificationSettings": "Altres opcions de notificacions", - "@otherNotificationSettings": {}, - "notificationRuleIsUserMentionDescription": "Notifica quan mencionin l'usuàriï en un missatge.", - "@notificationRuleIsUserMentionDescription": {}, - "notificationRuleContainsDisplayNameDescription": "Notifica l'usuàriï quan un missatge contingui el seu nom per mostrar.", - "@notificationRuleContainsDisplayNameDescription": {}, - "notificationRuleJitsiDescription": "Notifica l'usuàriï sobre activitat del giny de Jitsi.", - "@notificationRuleJitsiDescription": {}, - "notificationRuleRoomnotif": "Notificació de sala", - "@notificationRuleRoomnotif": {}, - "deletePushRuleCanNotBeUndone": "Si esborres aquesta opció de notificació no ho podràs tornar a canviar.", - "@deletePushRuleCanNotBeUndone": {}, - "notificationRuleRoomOneToOneDescription": "Notifica l'usuàriï de missatges en converses de dues persones, sales un a un.", - "@notificationRuleRoomOneToOneDescription": {}, - "notificationRuleMemberEvent": "Canvis de membres", - "@notificationRuleMemberEvent": {}, - "otherPartyNotLoggedIn": "L'altra persona no està en línia ara mateix i per tant no pot rebre missatges!", - "@otherPartyNotLoggedIn": {}, - "userSpecificNotificationSettings": "Opcions de notificacions d'usuàriï", - "@userSpecificNotificationSettings": {}, - "generalNotificationSettings": "Opcions de notificacions generals", - "@generalNotificationSettings": {}, - "notificationRuleMessage": "Missatge", - "@notificationRuleMessage": {}, - "notificationRuleServerAclDescription": "Ignora les notificacions per canvis en les regles d'accés (ACL) de servidor.", - "@notificationRuleServerAclDescription": {}, - "shareKeysWithDescription": "Quins dispositius vols que puguin llegir els teus missatges xifrats?", - "@shareKeysWithDescription": {}, - "previous": "Anterior", - "@previous": {}, - "notificationRuleMasterDescription": "Ignora totes les altres regles i deshabilita totes les notificacions.", - "@notificationRuleMasterDescription": {}, - "newChatRequest": "📩 Soŀlicitud de missatge", - "@newChatRequest": {}, - "allDevices": "Tots els dispositius", - "@allDevices": {}, - "crossVerifiedDevices": "Els dispositius verificats mútuament", - "@crossVerifiedDevices": {}, - "verifiedDevicesOnly": "Només els dispositius verificats", - "@verifiedDevicesOnly": {}, - "synchronizingPleaseWaitCounter": " S'està sincronitzant... ({percentage}%)", - "@synchronizingPleaseWaitCounter": { - "type": "String", - "placeholders": { - "percentage": { - "type": "String" - } - } - }, - "appWantsToUseForLogin": "Fes servir '{server}' per iniciar sessió", - "@appWantsToUseForLogin": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "appWantsToUseForLoginDescription": "Consenteixes que l'app i la web comparteixen informació sobre tu.", - "@appWantsToUseForLoginDescription": {}, - "open": "Obre", - "@open": {}, - "appIntroduction": "El FluffyChat et permet xatejar amb amiguis entre diverses aplicacions. Llegeix-ne més a https://matrix.org o pica \"Continua\".", - "@appIntroduction": {}, - "waitingForServer": "S'està esperant el servidor...", - "@waitingForServer": {}, - "shareKeysWith": "Comparteix les claus amb...", - "@shareKeysWith": {}, - "crossVerifiedDevicesIfEnabled": "Els dispositius verificats mútuament, si està activat", - "@crossVerifiedDevicesIfEnabled": {}, - "commandHint_roomupgrade": "Actualitza aquesta sala a la versió indicada", - "@commandHint_roomupgrade": {}, - "takeAPhoto": "Fes una foto", - "@takeAPhoto": {}, - "recordAVideo": "Grava un vídeo", - "@recordAVideo": {}, - "optionalMessage": "(Opcional) missatge...", - "@optionalMessage": {}, - "enterNewChat": "Entra al nou xat", - "@enterNewChat": {}, - "notSupportedOnThisDevice": "No suportat en aquest dispositiu", - "@notSupportedOnThisDevice": {} -} + }, + "fontSize": "Mida de la lletra", + "@fontSize": { + "type": "String", + "placeholders": {} + }, + "next": "Següent", + "@next": { + "type": "String", + "placeholders": {} + }, + "link": "Enllaç", + "redactMessage": "Estripa el missatge", + "@redactMessage": { + "type": "String", + "placeholders": {} + }, + "sendOnEnter": "Envia en prémer Retorn", + "clearArchive": "Neteja l’arxiu", + "chatBackupDescription": "Els teus xats estan protegits amb una clau de recuperació. Assegura't de no perdre-la.", + "@chatBackupDescription": { + "type": "String", + "placeholders": {} + }, + "autoplayImages": "Reprodueix automàticament enganxines i emoticones animades", + "@autoplayImages": { + "type": "String", + "placeholder": {} + }, + "chatBackup": "Còpia de seguretat del xat", + "@chatBackup": { + "type": "String", + "placeholders": {} + }, + "blocked": "Blocat", + "@blocked": { + "type": "String", + "placeholders": {} + }, + "everythingReady": "Tot és a punt!", + "@everythingReady": { + "type": "String", + "placeholders": {} + }, + "spaceName": "Nom de l’espai", + "@spaceName": { + "type": "String", + "placeholders": {} + }, + "search": "Cerca", + "@search": { + "type": "String", + "placeholders": {} + }, + "verified": "Verificat", + "@verified": { + "type": "String", + "placeholders": {} + }, + "newChat": "Xat nou", + "@newChat": { + "type": "String", + "placeholders": {} + }, + "changeYourAvatar": "Canvia l’avatar", + "@changeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "ignore": "Ignora", + "@ignore": { + "type": "String", + "placeholders": {} + }, + "commandHint_react": "Envia una resposta com a reacció", + "@commandHint_react": { + "type": "String", + "description": "Usage hint for the command /react" + }, + "defaultPermissionLevel": "Nivell de permisos per defecte per nous membres", + "@defaultPermissionLevel": { + "type": "String", + "placeholders": {} + }, + "extremeOffensive": "Extremadament ofensiu", + "@extremeOffensive": { + "type": "String", + "placeholders": {} + }, + "yourChatBackupHasBeenSetUp": "S’ha configurat la còpia de seguretat del xat.", + "contentHasBeenReported": "El contingut s’ha denunciat als administradors del servidor", + "@contentHasBeenReported": { + "type": "String", + "placeholders": {} + }, + "enableEncryption": "Activa el xifratge", + "@enableEncryption": { + "type": "String", + "placeholders": {} + }, + "addAccount": "Afegeix un compte", + "noEncryptionForPublicRooms": "Només podreu activar el xifratge quan la sala ja no sigui accessible públicament.", + "@noEncryptionForPublicRooms": { + "type": "String", + "placeholders": {} + }, + "roomVersion": "Versió de la sala", + "@roomVersion": { + "type": "String", + "placeholders": {} + }, + "sendMessages": "Envia missatges", + "@sendMessages": { + "type": "String", + "placeholders": {} + }, + "saveFile": "Desa el fitxer", + "@saveFile": { + "type": "String", + "placeholders": {} + }, + "pleaseFollowInstructionsOnWeb": "Seguiu les instruccions al lloc web i toqueu «Següent».", + "@pleaseFollowInstructionsOnWeb": { + "type": "String", + "placeholders": {} + }, + "reportMessage": "Denuncia el missatge", + "@reportMessage": { + "type": "String", + "placeholders": {} + }, + "setAsCanonicalAlias": "Defineix com a àlies principal", + "@setAsCanonicalAlias": { + "type": "String", + "placeholders": {} + }, + "status": "Estat", + "@status": { + "type": "String", + "placeholders": {} + }, + "transferFromAnotherDevice": "Transfereix des d’un altre dispositiu", + "@transferFromAnotherDevice": { + "type": "String", + "placeholders": {} + }, + "whoCanPerformWhichAction": "Qui pot efectuar quina acció", + "@whoCanPerformWhichAction": { + "type": "String", + "placeholders": {} + }, + "whyDoYouWantToReportThis": "Per què voleu denunciar això?", + "@whyDoYouWantToReportThis": { + "type": "String", + "placeholders": {} + }, + "wipeChatBackup": "Voleu suprimir la còpia de seguretat dels xats per a crear una clau de recuperació nova?", + "@wipeChatBackup": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "S’està esperant que l’altre accepti la sol·licitud…", + "@waitingPartnerAcceptRequest": { + "type": "String", + "placeholders": {} + }, + "unverified": "No verificat", + "commandHint_me": "Descriviu-vos", + "@commandHint_me": { + "type": "String", + "description": "Usage hint for the command /me" + }, + "commandMissing": "{command} no és una ordre.", + "@commandMissing": { + "type": "String", + "placeholders": { + "command": { + "type": "String" + } + }, + "description": "State that {command} is not a valid /command." + }, + "configureChat": "Configura el xat", + "@configureChat": { + "type": "String", + "placeholders": {} + }, + "copyToClipboard": "Copia al porta-retalls", + "@copyToClipboard": { + "type": "String", + "placeholders": {} + }, + "createNewSpace": "Espai nou", + "@createNewSpace": { + "type": "String", + "placeholders": {} + }, + "errorObtainingLocation": "S’ha produït un error en obtenir la ubicació: {error}", + "@errorObtainingLocation": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "groups": "Grups", + "@groups": { + "type": "String", + "placeholders": {} + }, + "messages": "Missatges", + "@messages": { + "type": "String", + "placeholders": {} + }, + "showPassword": "Mostra la contrasenya", + "@showPassword": { + "type": "String", + "placeholders": {} + }, + "spaceIsPublic": "L’espai és públic", + "@spaceIsPublic": { + "type": "String", + "placeholders": {} + }, + "scanQrCode": "Escaneja un codi QR", + "obtainingLocation": "S’està obtenint la ubicació…", + "@obtainingLocation": { + "type": "String", + "placeholders": {} + }, + "shareLocation": "Comparteix la ubicació", + "@shareLocation": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWait": "S’està sincronitzant… Espereu.", + "@synchronizingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "reason": "Raó", + "@reason": { + "type": "String", + "placeholders": {} + }, + "changedTheDisplaynameTo": "{username} ha canviat el seu àlies a: '{displayname}'", + "@changedTheDisplaynameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "displayname": { + "type": "String" + } + } + }, + "howOffensiveIsThisContent": "Com d’ofensiu és aquest contingut?", + "@howOffensiveIsThisContent": { + "type": "String", + "placeholders": {} + }, + "commandHint_clearcache": "Neteja la memòria cau", + "@commandHint_clearcache": { + "type": "String", + "description": "Usage hint for the command /clearcache" + }, + "commandHint_join": "Uneix-te a la sala", + "@commandHint_join": { + "type": "String", + "description": "Usage hint for the command /join" + }, + "commandHint_kick": "Expulsa uni usuàriï d'aquesta sala", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "commandHint_myroomavatar": "Establiu la imatge per a aquesta sala (per mxc-uri)", + "@commandHint_myroomavatar": { + "type": "String", + "description": "Usage hint for the command /myroomavatar" + }, + "commandHint_dm": "Inicia un xat directe\nUsa --no-encryption per desactivar l'encriptatge", + "@commandHint_dm": { + "type": "String", + "description": "Usage hint for the command /dm" + }, + "commandHint_invite": "Convida uni usuàriï a aquesta sala", + "@commandHint_invite": { + "type": "String", + "description": "Usage hint for the command /invite" + }, + "commandHint_ban": "Veta uni usuàriï d'aquesta sala", + "@commandHint_ban": { + "type": "String", + "description": "Usage hint for the command /ban" + }, + "commandHint_create": "Crea un xat de grup buit\nUsa --no-encryption per desactivar l'encriptatge", + "@commandHint_create": { + "type": "String", + "description": "Usage hint for the command /create" + }, + "commandHint_discardsession": "Descarta la sessió", + "@commandHint_discardsession": { + "type": "String", + "description": "Usage hint for the command /discardsession" + }, + "repeatPassword": "Repetiu la contrasenya", + "commandHint_myroomnick": "Estableix el teu àlies per a aquesta sala", + "@commandHint_myroomnick": { + "type": "String", + "description": "Usage hint for the command /myroomnick" + }, + "editBlockedServers": "Edita els servidors bloquejats", + "@editBlockedServers": { + "type": "String", + "placeholders": {} + }, + "badServerLoginTypesException": "El servidor admet els inicis de sessió:\n{serverVersions}\nPerò l'aplicació només admet:\n{supportedVersions}", + "@badServerLoginTypesException": { + "type": "String", + "placeholders": { + "serverVersions": { + "type": "String" + }, + "supportedVersions": { + "type": "String" + } + } + }, + "hugContent": "{senderName} t'abraça", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "jumpToLastReadMessage": "Salta a l'últim missatge llegit", + "commandHint_cuddle": "Envia una carícia", + "dismiss": "Ignora-ho", + "reportErrorDescription": "😭 Oh no. Hi ha hagut algun error. Si vols, pots informar d'aquest bug a l'equip de desenvolupament.", + "removeYourAvatar": "Esborra el teu avatar", + "@removeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "unsupportedAndroidVersion": "Aquesta versió d'Android és incompatible", + "messageType": "Tipus de missatge", + "oneClientLoggedOut": "Una de les teves aplicacions ha tancat la sessió", + "setColorTheme": "Tria el color del tema:", + "allSpaces": "Tots els espais", + "supposedMxid": "Això hauria de ser {mxid}", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "user": "Usuàrïi", + "youAcceptedTheInvitation": "👍 Has acceptat la invitació", + "noMatrixServer": "{server1} no és un servidor de matrix, vols fer servir {server2} ?", + "@noMatrixServer": { + "type": "String", + "placeholders": { + "server1": { + "type": "String" + }, + "server2": { + "type": "String" + } + } + }, + "youInvitedBy": "📩 {user} t'ha convidat", + "@youInvitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "banUserDescription": "Es vetarà li usuàriï al xat i no podrà tornar-hi a entrar fins que se li aixequi el veto.", + "removeDevicesDescription": "Tancaràs la sessió d'aquest dispositiu i no hi podràs rebre més missatges.", + "tryAgain": "Torna-ho a provar", + "youKickedAndBanned": "🙅 Has expulsat i vetat a {user}", + "@youKickedAndBanned": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "unbanUserDescription": "L'usuàrïi ja pot tornar a entrar al xat.", + "youRejectedTheInvitation": "Has rebutjat la invitació", + "messagesStyle": "Missatges:", + "newSpaceDescription": "Els espais et permeten consolidar els teus xats i construir comunitats públiques o privades.", + "chatDescription": "Descripció del xat", + "editRoomAliases": "Canvia els àlies de la sala", + "@editRoomAliases": { + "type": "String", + "placeholders": {} + }, + "encryptThisChat": "Xifra aquest xat", + "reopenChat": "Reobre el xat", + "inoffensive": "Inofensiu", + "@inoffensive": { + "type": "String", + "placeholders": {} + }, + "addToBundle": "Afegeix al pquet", + "countFiles": "{count} arxius", + "@countFiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noKeyForThisMessage": "Això pot passar si el missatge es va enviar abans que haguessis iniciat sessió al teu compte des d'aquest dispositiu.\n\nTambé pot ser que l'emissor hagi bloquejat el teu dispositiu o que la connexió a internet anés malament.\n\nQue pots llegir el missatge des d'una altra sessió? Si és així, llavors pots transferir-lo! Ves a Paràmetres → Dispositius i assegura't que els teus dispositius s'ha verificat mútuament. Quan obris la sala la propera vegada i totes dues sessions estiguin executant-se, en primer pla, llavors les claus es trasnsmetran automàticament.\n\nVols evitar perdre les claus en tancar la sessió o en canviar de dispositiu? Llavors assegura't que has activat la còpia de seguretat del xat als paràmetres.", + "commandHint_markasgroup": "Marca com un grup", + "pushNotificationsNotAvailable": "Les notificacions push no estan disponibles", + "storeInAppleKeyChain": "Desa en la Apple KeyChain", + "replaceRoomWithNewerVersion": "Substitueix la sala amb la versió més recent", + "@replaceRoomWithNewerVersion": { + "type": "String", + "placeholders": {} + }, + "hydrate": "Restaura un arxiu de recuperació", + "invalidServerName": "El nom del servidor és invàlid", + "chatPermissions": "Permisos del xat", + "sender": "Remitent", + "storeInAndroidKeystore": "Desa en la Android KeyStore", + "offensive": "Ofensiu", + "@offensive": { + "type": "String", + "placeholders": {} + }, + "makeAdminDescription": "Un cop hagis fet admin aquesta persona ja no podràs desfer-ho, ja que llavors tindrà els mateixos permisos que tu.", + "saveKeyManuallyDescription": "Per desar aquesta clau manualment, pica l'eina de compartir o copia-la al porta-retalls.", + "editBundlesForAccount": "Edita paquets per aquest compte", + "whyIsThisMessageEncrypted": "Per què no es pot llegir aquest missatge?", + "setChatDescription": "Posa una descripció de xat", + "importFromZipFile": "Importa des d'un arxiu zip", + "dehydrateWarning": "Aquesta acció és irreversible. Assegura't que deses l'arxiu de recuperació en un lloc segur.", + "noOtherDevicesFound": "No s'han trobat més dispositius", + "redactedBy": "Estripat per {username}", + "@redactedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "videoCallsBetaWarning": "Tingues en compte que les trucades de vídeo estan encara en beta. Pot ser que no funcioni bé o que falli en alguna plataforma.", + "participant": "Participant", + "@participant": { + "type": "String", + "placeholders": {} + }, + "fileIsTooBigForServer": "No s'ha pogut enviar! El servidor només accepta adjunts de fins a {max}.", + "homeserver": "Servidor", + "readUpToHere": "Llegit fins aquí", + "start": "Comença", + "register": "Registra't", + "@register": { + "type": "String", + "placeholders": {} + }, + "unlockOldMessages": "Desbloqueja els missatges antics", + "optionalRedactReason": "(Opcional) El motiu per estripar el missatge...", + "dehydrate": "Exporta la sessió i neteja el dispositiu", + "archiveRoomDescription": "Aquest xat serà arxivat. Els altres contactes del grup ho veuran com si haguessis abandonat el xat.", + "exportEmotePack": "Exporta com un pack Emote en .zip", + "experimentalVideoCalls": "Trucades de vídeo experimentals", + "pleaseEnterRecoveryKeyDescription": "Per desbloquejar els missatges antics, introdueix la clau de recuperació que vas generar en una sessió anterior. La clau de recuperació NO és la teva contrasenya.", + "openInMaps": "Obre als mapes", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "redactedByBecause": "Estripat per {username} per: \"{reason}\"", + "@redactedByBecause": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "reason": { + "type": "String" + } + } + }, + "youHaveWithdrawnTheInvitationFor": "Has rebutjat la invitació de {user}", + "@youHaveWithdrawnTheInvitationFor": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "reportUser": "Denuncia l'usuàrïi", + "confirmEventUnpin": "Vols desfixar l'esdeveniment permanentment?", + "youInvitedUser": "📩 Has convidat a {user}", + "@youInvitedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "fileHasBeenSavedAt": "S'ha desat l'arxiu a {path}", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "redactMessageDescription": "S'estriparà el missatge per a totser d'aquesta conversa. Aquesta acció és irreversible.", + "recoveryKey": "Clau de recuperació", + "invalidInput": "L'entrada no és vàlida!", + "doNotShowAgain": "No ho tornis a mostrar", + "report": "informa", + "serverRequiresEmail": "Aquest servidor necessita validar la teva adreça per registrar-t'hi.", + "screenSharingTitle": "compartició de pantalla", + "googlyEyesContent": "{senderName} t'ha enviat un parell d'ulls", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "youBannedUser": "Has vetat a {user}", + "@youBannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "editRoomAvatar": "Canvia la imatge de la sala", + "@editRoomAvatar": { + "type": "String", + "placeholders": {} + }, + "hasKnocked": "🚪 {user} pica a la porta", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "openLinkInBrowser": "Obre l'enllaç en un navegador", + "messageInfo": "Informació del missatge", + "disableEncryptionWarning": "Per motius de seguretat, un cop activat, no es pot desactivar el xifratge.", + "directChat": "Xat directe", + "wrongPinEntered": "Pin incorrecte! Torna-ho a provar en {seconds} segons...", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "sendTypingNotifications": "Envia notificacions d'escriptura", + "inviteGroupChat": "📨 Invitació de grup", + "foregroundServiceRunning": "Aquesta notificació apareix quan el servei de primer pla està corrent.", + "voiceCall": "Videotrucada", + "commandHint_unban": "Aixeca el veto a aquesti usuàriï per aquesta sala", + "@commandHint_unban": { + "type": "String", + "description": "Usage hint for the command /unban" + }, + "importEmojis": "Importa emojis", + "wasDirectChatDisplayName": "Xat buit ( era {oldDisplayName})", + "@wasDirectChatDisplayName": { + "type": "String", + "placeholders": { + "oldDisplayName": { + "type": "String" + } + } + }, + "noChatDescriptionYet": "No s'ha afegit una descripció de xat.", + "removeFromBundle": "Esborra del paquet", + "confirmMatrixId": "Confirma la teva ID de Matrix per poder esborrar el compte.", + "learnMore": "Llegeix-ne més", + "notAnImage": "No és un arxiu d'image.", + "users": "Usuàrïis", + "openGallery": "Obre la galeria", + "chatDescriptionHasBeenChanged": "Ha canviat la descripció del xat", + "newGroup": "Grup nou", + "bundleName": "Nom del paquet", + "removeFromSpace": "Esborra de l'espai", + "roomUpgradeDescription": "El xat serà recreat amb una versió de sala nova. Totis lis participants seran notificadis que han de canviar al nou xat. Pots llegir més sobre les versions de sala a https://spec.matrix.org/latest/rooms/", + "pleaseEnterANumber": "Introdueix un número major que 0", + "youKicked": "👞 Has expulsat a {user}", + "@youKicked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "jump": "Salta", + "reactedWith": "{sender} ha reaccionat amb {reaction}", + "@reactedWith": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "reaction": { + "type": "String" + } + } + }, + "sorryThatsNotPossible": "Aquesta acció no és possible", + "shareInviteLink": "Comparteix un enllaç d'invitació", + "commandHint_markasdm": "Marca com a conversa directa la sala amb aquesta ID de Matrix", + "recoveryKeyLost": "Que has perdut la clau de recuperació?", + "cuddleContent": "{senderName} et fa una carícia", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "deviceKeys": "Claus del dispositiu:", + "emoteKeyboardNoRecents": "Els últims emotes usats apareixeran aquí...", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "youJoinedTheChat": "T'has afegit al xat", + "markAsRead": "Marca com a llegit", + "commandHint_hug": "Envia una abraçada", + "replace": "Reemplaça", + "oopsPushError": "Ep! Sembla que s'ha produït un error en configurar les notificacions.", + "@oopsPushError": { + "type": "String", + "placeholders": {} + }, + "youUnbannedUser": "Has aixecat el veto a {user}", + "@youUnbannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "newSpace": "Espai nou", + "emojis": "Emojis", + "pleaseEnterYourPin": "Introdueix el teu pin", + "@pleaseEnterYourPin": { + "type": "String", + "placeholders": {} + }, + "commandHint_googly": "Envia uns ulls curiosos", + "createGroup": "Crea un grup", + "time": "Temps", + "custom": "Personalitzat", + "noBackupWarning": "Compte! Si no actives la còpia de seguretat dels xats, perdràs accés als teus missatges xifrats. És molt recomanable activar-ho abans de tancar la sessió.", + "storeInSecureStorageDescription": "Desa la clau de recuperació en l'emmagatzematge segur d'aquest dispositiu.", + "openChat": "Obre el xat", + "kickUserDescription": "Li usuàrïi ha estat expulsadi però no vetadi. Als xats públics, pot tornar-hi a entrar en qualsevol moment.", + "importNow": "Importa-ho ara", + "pinMessage": "Fixa a la sala", + "invite": "Convida", + "enableMultiAccounts": "(Beta) Activa multi-compte en aquest dispositiu", + "unsupportedAndroidVersionLong": "Aquesta funcionalitat només funciona amb versions d'Android més noves.", + "storeSecurlyOnThisDevice": "Desa de forma segura en aquest dispositiu", + "screenSharingDetail": "Estàs compartint la teva pantalla a FluffyChat", + "placeCall": "Truca", + "block": "Bloca", + "blockUsername": "Ignora aquesti usuàrïi", + "blockedUsers": "Usuàrïis blocadis", + "blockListDescription": "Pots bloquejar usuàrïis que et molestin. No rebràs missatges seus ni invitacions de part seva a cap sala.", + "pleaseChooseAStrongPassword": "Tria una contrasenya forta", + "groupName": "Nom del grup", + "createGroupAndInviteUsers": "Crea un grup i convida-hi usuàrïis", + "wrongRecoveryKey": "Malauradament, aquesta clau de recuperació no és la correcta.", + "transparent": "Transparent", + "sendReadReceiptsDescription": "Lis altris participants d'un xat poden veure quan has llegit un missatge.", + "yourGlobalUserIdIs": "La teva ID global és: ", + "commandHint_sendraw": "Envia un json pelat", + "databaseMigrationTitle": "La base de dades ha estat optimitzada", + "pleaseEnterYourCurrentPassword": "Fica la teva contrasenya actual", + "newPassword": "Contrasenya nova", + "restoreSessionBody": "L'aplicació provarà de restaurar la teva sessió des de la còpia de seguretat. Si us plau, comunica aquest error a l'equi pde desenvolupament a {url}. El missatge d'error és {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "formattedMessages": "Missatges amb format", + "formattedMessagesDescription": "Mostra contingut amb format enriquit com text en cursiva, fent servir markdown.", + "verifyOtherUser": "🔐 Verifica uni altri usuàrïi", + "verifyOtherDevice": "🔐 Verifica un altre dispositiu", + "initAppError": "S'ha produït un error mentre s'inicialitzava l'aplicació", + "hidePresences": "Amagar la llista de Status?", + "noUsersFoundWithQuery": "No s'ha trobat cap usuàrïi amb \"{query}\". Revisa si ho has escrit malament.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "leaveEmptyToClearStatus": "Per esborrar el teu estat, deixa-ho en blanc.", + "select": "Tria", + "searchForUsers": "Cerca @usuariïs...", + "addChatOrSubSpace": "Afegeix un xat o un subespai", + "sendReadReceipts": "Envia informes de tecleig", + "sendTypingNotificationsDescription": "Lis altris participants d'un xat poden veure quan estàs teclejant un missatge nou.", + "incomingMessages": "Missatge d'entrada", + "acceptedKeyVerification": "{sender} ha acceptat la verificació de claus", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "canceledKeyVerification": "{sender} ha canceŀlat la verificació de claus", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "completedKeyVerification": "{sender} ha comletat la verificació de claus", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "isReadyForKeyVerification": "{sender} està a punt per verificar les claus", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "nothingFound": "No s'ha trobat res...", + "searchChatsRooms": "Cerca #sales, @usuariïs...", + "groupCanBeFoundViaSearch": "El grup es pot trobar per la cerca general", + "databaseMigrationBody": "Espereu un moment, si us plau.", + "passwordsDoNotMatch": "Les contrasenyes no coincideixen", + "passwordIsWrong": "La contrasenya introduïda és incorrecta", + "joinSpace": "Fica't a l'espai", + "publicSpaces": "Espais públics", + "thisDevice": "Aquest dispositiu:", + "sessionLostBody": "S'ha perdut la teva sessió. Si us plau, comunica aquest error a l'equip de desenvolupament a {url}. El missatge d'error és: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "verifyOtherUserDescription": "Si verifiques aquesti usuàrïi, podràs estar seguri de a qui estàs escrivint. . 💪\n\nQuan inicies una verificació, l'altra persona i tu veureu un missatge emergent a l'app. Us sortiran un seguit d'emojis o números a cada pantalla, que haureu de comparar.\n\nLa millor manera de fer-ho és quedar en persona o fer una vídeo-trucada. 👭", + "verifyOtherDeviceDescription": "Quan verifiques un altre dispositiu, aquests poden intercanviar claus, així que es millora la seguretat total. 💪 Quan comences una verificació, apareixerà un missatge emergent a tots dos dispositius. A cadascun hi apareixerà un seguit d'emojis o de números que hauràs de comparar. El millor és tenir tots dos dispositius a mà abans d'iniciar la verificació. 🤳", + "requestedKeyVerification": "{sender} ha soŀlicitat verificar claus", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "startedKeyVerification": "{sender} ha iniciat la verificació de claus", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "presencesToggle": "Mostra els missatges d'estat d'altres usuàrïis", + "@presencesToggle": { + "type": "String", + "placeholders": {} + }, + "stickers": "Enganxines", + "discover": "Descobreix", + "commandHint_ignore": "Ignora el compte de matrix especificat", + "commandHint_unignore": "Deixa d'ignorar el compt de matrix especificat", + "sendCanceled": "S'ha canceŀlat l'enviament", + "noChatsFoundHere": "Encara no hi ha xats. Obre una conversa amb algú picant al botó de sota. ⤵️", + "invitedBy": "📩 Convidadi per {user}", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "knock": "Pica", + "knocking": "S'està picant", + "restricted": "Restringit", + "knockRestricted": "No es pot picar a la porta", + "goToSpace": "Ves a l'espai {space}", + "@goToSpace": { + "type": "String", + "space": {} + }, + "adminLevel": "{level} - Admin", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "Canvia les opcions generals de xat", + "sendRoomNotifications": "Envia notificacions @room", + "changeTheDescriptionOfTheGroup": "Canvia la descripció del xat", + "changelog": "Registre de canvis", + "userLevel": "{level} - Usuàriï", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "moderatorLevel": "{level} - Moderadori", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "inviteOtherUsers": "Convida més gent a la conversa", + "changeTheChatPermissions": "Canvia els permisos del xat", + "changeTheVisibilityOfChatHistory": "Canvia la visibilitat de l'historial de conversa", + "changeTheCanonicalRoomAlias": "Canvia l'adreça principal del xat", + "accessAndVisibilityDescription": "Qui pot entrar a aquesta conversa i com pot ser descoberta.", + "customEmojisAndStickers": "Emojis i stickers propis", + "accessAndVisibility": "Accés i visibilitat", + "calls": "Trucades", + "hideRedactedMessages": "Amaga els missatges estripats", + "hideInvalidOrUnknownMessageFormats": "Amaga els missatges que tinguin un format desconegut", + "overview": "Resum", + "passwordRecoverySettings": "Recuperació de contrasenya", + "gallery": "Galeria", + "noDatabaseEncryption": "No es pot xifrar la base de dades en aquesta plataforma", + "usersMustKnock": "Lis membres han de picar a la porta", + "noOneCanJoin": "Ningú s'hi pot ficar", + "customEmojisAndStickersBody": "Afegeix o comparteix emojis o stickers. Els podràs fer servir en qualsevol conversa.", + "hideRedactedMessagesBody": "Si algú estripa un missatge, ja no apareixerà a l'historial de la conversa.", + "searchIn": "Cerca al xat \"{chat}\"...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "markAsUnread": "Marca com a no llegit", + "chatPermissionsDescription": "Defineix quin nivell de permisos cal per cada acció en aquest xat. Els nivells 0, 50 i 100 normalment representen usuàriïs, mods i admins, però es pot canviar.", + "updateInstalled": "🎉 S'ha actualitzat a la versió {version}!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "alwaysUse24HourFormat": "true", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." + }, + "appLockDescription": "Bloca l'app amb un pin quan no la facis servir", + "swipeRightToLeftToReply": "Llisca de dreta esquerra per respondre", + "globalChatId": "Identificador global de xat", + "createNewAddress": "Crea una adreça nova", + "searchMore": "Cerca més...", + "files": "Arxius", + "publicChatAddresses": "Adreces públiques del xat", + "unreadChatsInApp": "{appname}: {unread} converses pendents", + "@unreadChatsInApp": { + "type": "String", + "placeholders": { + "appname": { + "type": "String" + }, + "unread": { + "type": "String" + } + } + }, + "thereAreCountUsersBlocked": "Ara mateix hi ha {count} usuàriïs bloquejadis.", + "@thereAreCountUsersBlocked": { + "type": "String", + "count": {} + }, + "loginWithMatrixId": "Entra amb l'id de Matrix", + "doesNotSeemToBeAValidHomeserver": "No sembla un servidor compatible. Pot ser que la URL estigui malament?", + "noMoreChatsFound": "No hi ha més xats...", + "space": "Espai", + "unread": "Sense llegir", + "spaces": "Espais", + "chatCanBeDiscoveredViaSearchOnServer": "El xat es pot descobrir amb la cerca de {server}", + "@chatCanBeDiscoveredViaSearchOnServer": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "calculatingFileSize": "S'està calculant la mida de l'arxiu...", + "prepareSendingAttachment": "S'està preparant per enviar l'adjunt...", + "generatingVideoThumbnail": "S'està generant la miniatura del vídeo...", + "noticeChatBackupDeviceVerification": "Nota: quan connectes tots els dispositius al backup del xat, es verifiquen automàticament.", + "continueText": "Continua", + "strikeThrough": "Text ratllat", + "addLink": "Afegeix un enllaç", + "noContactInformationProvided": "El servidor no ofereix cap informació de contacte vàlida", + "setWallpaper": "Tria imatge de fons", + "sendImages": "Envia {count} imatge", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sendingAttachment": "S'està enviant l'adjunt...", + "compressVideo": "S'està comprimint el vídeo...", + "sendingAttachmentCountOfCount": "S'està enviant l'adjunt {index} de {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "S'ha arribat al límit del servidor! Esperant {seconds} segons...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "Un dels teus dispositius no està verificat", + "welcomeText": "Hola hola! 👋 Això és FluffyChat. Pots iniciar sessió en qualsevol servidor compatible amb https://matrix.org. I llavors xatejar amb qualsevol. És una xarxa enorme de missatgeria descentralitzada !", + "blur": "Difumina:", + "opacity": "Opacitat:", + "manageAccount": "Gestiona el compte", + "contactServerAdmin": "Contacta l'admin del servidor", + "contactServerSecurity": "Contacta l'equip de seguretat del servidor", + "version": "Versió", + "website": "Lloc web", + "compress": "Comprimeix", + "pleaseFillOut": "Emplena", + "invalidUrl": "URL invàlida", + "unableToJoinChat": "No s'ha pogut entrar al xat. Pot ser que l'altri participant hagi tancat la conversa.", + "aboutHomeserver": "Quant a {homeserver}", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "supportPage": "Pàgina de suport", + "serverInformation": "Informació del servidor:", + "name": "Nom", + "boldText": "Text en negreta", + "italicText": "Text en cursiva", + "contentNotificationSettings": "Opcions de notificació de continguts", + "roomNotificationSettings": "Opcions de notificacions de sales", + "notificationRuleContainsUserName": "Conté el nom d'usuàriï", + "notificationRuleContainsUserNameDescription": "Notifica l'usuàriï quan un missatge contingui el seu nom.", + "notificationRuleMaster": "Silencia totes les notificacions", + "notificationRuleSuppressNotices": "Elimina els missatges automàtics", + "notificationRuleInviteForMe": "Invitació per a mi", + "notificationRuleInviteForMeDescription": "Notifica l'usuàriï quan és convidadi a una sala.", + "notificationRuleMemberEventDescription": "Ignora les notificacions quan entra o surt algú d'una sala.", + "notificationRuleIsUserMention": "Mencions", + "notificationRuleContainsDisplayName": "Conté el nom visible", + "notificationRuleIsRoomMention": "Menció de sala", + "notificationRuleIsRoomMentionDescription": "Notifica l'usuàriï quan es s'esmenti la sala.", + "notificationRuleRoomnotifDescription": "Notifica l'usuàriï quan un missatge contingui '@room'.", + "notificationRuleTombstone": "Làpida", + "notificationRuleTombstoneDescription": "Notifica l'usuàriï dels missatges de desactivació de sales.", + "notificationRuleReaction": "Reacció", + "notificationRuleReactionDescription": "Ignora les notificacions sobre reaccions.", + "notificationRuleRoomServerAcl": "Regles ACL del servidor d'una sala", + "notificationRuleRoomServerAclDescription": "Ignora les notificacions sobre les regles d'accés (ACL) del servidor d'una sala.", + "notificationRuleSuppressEdits": "Elimina les edicions", + "notificationRuleSuppressEditsDescription": "Ignora les notificacions per missatges editats.", + "notificationRuleCall": "Trucada", + "notificationRuleCallDescription": "Notifica l'usuàriï de trucades.", + "notificationRuleEncryptedRoomOneToOneDescription": "Notifica l'usuàriï de missatges en sales xifrades un a un, converses de dues persones.", + "notificationRuleEncryptedRoomOneToOne": "Converses xifrades", + "notificationRuleRoomOneToOne": "Converses", + "notificationRuleMessageDescription": "Notifica l'usuàriï sobre missatges generals.", + "notificationRuleEncrypted": "Xifrat", + "notificationRuleEncryptedDescription": "Notifica l'usuàriï de missatges en sales xifrades.", + "notificationRuleJitsi": "Jitsi", + "notificationRuleServerAcl": "Ignora canvis en ACL de servidor", + "unknownPushRule": "No es coneix la regla push '{rule}'", + "@unknownPushRule": { + "type": "String", + "placeholders": { + "rule": { + "type": "String" + } + } + }, + "more": "Més", + "notificationRuleSuppressNoticesDescription": "No envia notificacions relacionades amb usuàriïs automàtics com els bots.", + "otherNotificationSettings": "Altres opcions de notificacions", + "notificationRuleIsUserMentionDescription": "Notifica quan mencionin l'usuàriï en un missatge.", + "notificationRuleContainsDisplayNameDescription": "Notifica l'usuàriï quan un missatge contingui el seu nom per mostrar.", + "notificationRuleJitsiDescription": "Notifica l'usuàriï sobre activitat del giny de Jitsi.", + "notificationRuleRoomnotif": "Notificació de sala", + "deletePushRuleCanNotBeUndone": "Si esborres aquesta opció de notificació no ho podràs tornar a canviar.", + "notificationRuleRoomOneToOneDescription": "Notifica l'usuàriï de missatges en converses de dues persones, sales un a un.", + "notificationRuleMemberEvent": "Canvis de membres", + "otherPartyNotLoggedIn": "L'altra persona no està en línia ara mateix i per tant no pot rebre missatges!", + "userSpecificNotificationSettings": "Opcions de notificacions d'usuàriï", + "generalNotificationSettings": "Opcions de notificacions generals", + "notificationRuleMessage": "Missatge", + "notificationRuleServerAclDescription": "Ignora les notificacions per canvis en les regles d'accés (ACL) de servidor.", + "shareKeysWithDescription": "Quins dispositius vols que puguin llegir els teus missatges xifrats?", + "previous": "Anterior", + "notificationRuleMasterDescription": "Ignora totes les altres regles i deshabilita totes les notificacions.", + "newChatRequest": "📩 Soŀlicitud de missatge", + "allDevices": "Tots els dispositius", + "crossVerifiedDevices": "Els dispositius verificats mútuament", + "verifiedDevicesOnly": "Només els dispositius verificats", + "synchronizingPleaseWaitCounter": " S'està sincronitzant... ({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "appWantsToUseForLogin": "Fes servir '{server}' per iniciar sessió", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "appWantsToUseForLoginDescription": "Consenteixes que l'app i la web comparteixen informació sobre tu.", + "open": "Obre", + "waitingForServer": "S'està esperant el servidor...", + "shareKeysWith": "Comparteix les claus amb...", + "crossVerifiedDevicesIfEnabled": "Els dispositius verificats mútuament, si està activat", + "commandHint_roomupgrade": "Actualitza aquesta sala a la versió indicada", + "takeAPhoto": "Fes una foto", + "recordAVideo": "Grava un vídeo", + "optionalMessage": "(Opcional) missatge...", + "enterNewChat": "Entra al nou xat", + "notSupportedOnThisDevice": "No suportat en aquest dispositiu", + "ignoreUser": "Ignora l'usuàriï", + "changedTheChatDescription": "{username} ha canviat la descripció del xat", + "changedTheChatName": "{username} ha canviat el nom del xat", + "checkList": "Llista de tasques", + "countInvited": "{count} convidadis", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sentVoiceMessage": "🎙️ {duration} - Missatge de veu de {sender}", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "approve": "Aprova", + "youHaveKnocked": "T'han picat a la porta", + "pleaseWaitUntilInvited": "Ara espera fins que algú de la sala t'hi deixi entrar.", + "commandHint_logout": "Tanca la sessió per aquest dispositiu", + "commandHint_logoutall": "Tanca totes les sessions actives", + "displayNavigationRail": "Mostra la barra de navegació al mòbil", + "customReaction": "Reacció personalitzada", + "moreEvents": "Altres esdeveniments", + "declineInvitation": "Rebutja la invitació", + "noMessagesYet": "No hi ha cap missatge", + "longPressToRecordVoiceMessage": "Deixa picat per gravar un missatge de veu.", + "pause": "Pausa", + "resume": "Continua", + "removeFromSpaceDescription": "S'esborrarà de l'espai el xat, però encara apareixerà a la llista de xats.", + "countChats": "{chats} xats", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Membre dels espais {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "Membre dels espais {spaces} poden picar a porta", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username} ha creat una enquesta.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "Enquesta", + "startPoll": "Comença una enquesta", + "endPoll": "Acaba l'enquesta", + "answersVisible": "Respostes visibles", + "pollQuestion": "Pregunta de l'enquesta", + "answerOption": "Opció de resposta", + "addAnswerOption": "Afegeix una opció", + "allowMultipleAnswers": "Permet múltiples respostes", + "pollHasBeenEnded": "Ha acabat l'enquesta", + "countVotes": "{count, plural, =1{Un vot} other{{count} vots}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "answersWillBeVisibleWhenPollHasEnded": "Les respostes seran visibles quan s'acabi l'enquesta", + "replyInThread": "Respon en un fil", + "countReplies": "{count, plural, =1{Una resposta} other{{count} respostes}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "thread": "Fil", + "backToMainChat": "Torna al xat principal", + "saveChanges": "Desa els canvis", + "createSticker": "Crea un sticker o un emoji", + "useAsSticker": "Agafa com a sticker", + "useAsEmoji": "Agafa com a emoji", + "stickerPackNameAlreadyExists": "Ja existeix aquest nom per un pack de stickers", + "newStickerPack": "Nou pack de stickers", + "stickerPackName": "Nom del pack de stickers", + "attribution": "Atribució", + "skipChatBackup": "Omet la còpia de seguretat del xat", + "skipChatBackupWarning": "N'estàs seguri? Si no actives la còpia de seguretat pots perdre accés als teus missatges si canvies de dispositiu.", + "loadingMessages": "S'estan carregant més missatges", + "setupChatBackup": "Activa la còpia de seguretat del xat", + "noMoreResultsFound": "No s'han trobat més resultats", + "chatSearchedUntil": "S'ha cercat fins a {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "URL base de federació", + "clientWellKnownInformation": "Informació de", + "baseUrl": "URL base", + "identityServer": "Servidor d'identitats:", + "versionWithNumber": "Versió: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Registres", + "advancedConfigs": "Avançat", + "advancedConfigurations": "Configuracions avançades", + "signIn": "Obre sessió", + "createNewAccount": "Crea un compte nou", + "signUpGreeting": "El FluffyChat és descentralitzat! Tria un servidor on vulguis crear-t'hi un compte, i som-hi!", + "signInGreeting": "Si ja tens un compte a Matrix, benvingudi! Tria el teu servidor i inicia-hi sessió.", + "appIntro": "Pots xatejar amb lis tevis amiguis amb Fluffychat. És una app de missatgeria [matrix] descentralitzada! Llegeix-ne més a https://matrix.org si vols, o inicia sessió.", + "theProcessWasCanceled": "S'ha canceŀlat el procés." +} \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index 946e3cd3..ead46d2d 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -129,18 +129,6 @@ } } }, - "badServerVersionsException": "Homeserver podporuje specifikaci verzí:\n{serverVersions}\nAle tato aplikace podporuje pouze verze {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Zakázat chat", "@banFromChat": { "type": "String", @@ -173,11 +161,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Zprávy od bota", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Zrušit", "@cancel": { "type": "String", @@ -402,7 +385,6 @@ "placeholders": {} }, "clearArchive": "Vymazat archiv", - "@clearArchive": {}, "close": "Zavřít", "@close": { "type": "String", @@ -492,12 +474,12 @@ }, "description": "State that {command} is not a valid /command." }, - "compareEmojiMatch": "Porovnejte a přesvědčete se, že následující emotikony se shodují na obou zařízeních:", + "compareEmojiMatch": "Porovnejte a přesvědčete se, že následující emotikony se shodují na obou zařízeních", "@compareEmojiMatch": { "type": "String", "placeholders": {} }, - "compareNumbersMatch": "Porovnejte a přesvědčete se, že následující čísla se shodují na obou zařízeních:", + "compareNumbersMatch": "Porovnejte a přesvědčete se, že následující čísla se shodují na obou zařízeních", "@compareNumbersMatch": { "type": "String", "placeholders": {} @@ -507,31 +489,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Potvrdit", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Připojit", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt byl pozván do skupiny", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Obsahuje zobrazovaný název", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Obsahuje uživatelské jméno", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Obsah byl nahlášen správcům serveru", "@contentHasBeenReported": { "type": "String", @@ -611,33 +573,6 @@ } } }, - "dateWithoutYear": "{day}.{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}. {month}. {year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Tímto krokem se deaktivuje váš uživatelský účet. Akci nelze vrátit zpět! Jste si jistí?", "@deactivateAccountWarning": { "type": "String", @@ -743,11 +678,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Musíte si vybrat klávesovou zkratku emotikonu a obrázek!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Prázdný chat", "@emptyChat": { "type": "String", @@ -797,11 +727,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Zadejte svůj domovský server", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Chyba při získávání polohy: {error}", "@errorObtainingLocation": { "type": "String", @@ -851,11 +776,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Přejít do nové místnost", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Skupina", "@group": { "type": "String", @@ -927,11 +847,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identita", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorovat", "@ignore": { "type": "String", @@ -993,12 +908,7 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Pozvěte mě", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "inviteText": "{username} vás pozvali na FluffyChat.\n1. Navštivte fluffychat.im a nainstalujte si aplikaci.\n2. Zaregistrujte se anebo se přihlašte.\n3. Otevřete pozvánku: \n {link}", + "inviteText": "{username} vás pozval/a na FluffyChat.\n1. Navštivte fluffychat.im a nainstalujte si aplikaci.\n2. Zaregistrujte se nebo se přihlaste.\n3. Otevřte pozvánku: \n {link}", "@inviteText": { "type": "String", "placeholders": { @@ -1015,7 +925,7 @@ "type": "String", "placeholders": {} }, - "joinedTheChat": "👋 {username} se připojil/a k chatu", + "joinedTheChat": "👋 {username} se připojil/a do konverzace", "@joinedTheChat": { "type": "String", "placeholders": { @@ -1041,7 +951,7 @@ } } }, - "kickedAndBanned": "{username} vyhodili a zakázali {targetName}", + "kickedAndBanned": "{username} vyhodil/a a zabanoval/a {targetName}", "@kickedAndBanned": { "type": "String", "placeholders": { @@ -1077,11 +987,6 @@ "type": "String", "placeholders": {} }, - "license": "Licence", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Světlé", "@lightTheme": { "type": "String", @@ -1135,11 +1040,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Změny členů", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Zmínit se", "@mention": { "type": "String", @@ -1170,7 +1070,7 @@ "type": "String", "placeholders": {} }, - "newMessageInFluffyChat": "Nová zpráva ve FluffyChatu", + "newMessageInFluffyChat": "💬 Nová zpráva ve FluffyChatu", "@newMessageInFluffyChat": { "type": "String", "placeholders": {} @@ -1247,11 +1147,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Oznámení povolena pro tento účet", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} uživatelé píší…", "@numUsersTyping": { "type": "String", @@ -1351,11 +1246,6 @@ "type": "String", "placeholders": {} }, - "people": "Lidé", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Zvolit obrázek", "@pickImage": { "type": "String", @@ -1375,11 +1265,6 @@ } } }, - "pleaseChoose": "Prosím vyberte si", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Vyberte přístupový kód", "@pleaseChooseAPasscode": { "type": "String", @@ -1473,11 +1358,6 @@ } } }, - "rejoin": "Znovu se připojte", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Odstranit", "@remove": { "type": "String", @@ -1497,11 +1377,6 @@ } } }, - "removeDevice": "Odstraňit zařízení", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Zrušit zákaz chatu", "@unbanFromChat": { "type": "String", @@ -1557,15 +1432,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Viděno uživatelem {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Odeslat", "@send": { "type": "String", @@ -1600,16 +1466,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Odeslat originál", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Odeslat nálepku", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Odeslat video", "@sendVideo": { "type": "String", @@ -1674,21 +1530,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Nastavit vlastní emotikony", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Nastavit zvací odkaz", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Nastavit úroveň oprávnění", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Nastavit stav", "@setStatus": { "type": "String", @@ -1723,11 +1564,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Jedinečné přihlášení", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Přeskočit", "@skip": { "type": "String", @@ -1798,21 +1634,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Přepnout Oblíbené", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Přepnout ztlumené", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Označit jako přečtené/nepřečtené", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Příliš mnoho požadavků. Prosím zkuste to znovu později!", "@tooManyRequestsWarning": { "type": "String", @@ -1879,15 +1700,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 nepřečtený chat} other{{unreadCount} nepřečtené chaty}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} a {count} dalších píší…", "@userAndOthersAreTyping": { "type": "String", @@ -2012,11 +1824,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Pozadí:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Varování!", "@warning": { "type": "String", @@ -2082,56 +1889,29 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Do tohoto prostoru byl přidán chat", - "@chatHasBeenAddedToThisSpace": {}, "addToSpace": "Přidat do prostoru", - "@addToSpace": {}, "scanQrCode": "Naskenujte QR kód", - "@scanQrCode": {}, "sendOnEnter": "Odeslat při vstupu", - "@sendOnEnter": {}, "homeserver": "Domácí server", - "@homeserver": {}, "serverRequiresEmail": "Tento server potřebuje k registraci ověřit vaši e -mailovou adresu.", - "@serverRequiresEmail": {}, "addToBundle": "Přidat do balíčku", - "@addToBundle": {}, "addAccount": "Přidat účet", - "@addAccount": {}, "bundleName": "Název balíčku", - "@bundleName": {}, "link": "Odkaz", - "@link": {}, "yourChatBackupHasBeenSetUp": "Vaše záloha chatu byla nastavena.", - "@yourChatBackupHasBeenSetUp": {}, "editBundlesForAccount": "Upravit balíčky pro tento účet", - "@editBundlesForAccount": {}, "enableMultiAccounts": "(BETA) Na tomto zařízení povolte více účtů", - "@enableMultiAccounts": {}, "oneClientLoggedOut": "Jeden z vašich klientů byl odhlášen", - "@oneClientLoggedOut": {}, "removeFromBundle": "Odstranit z tohoto balíčku", - "@removeFromBundle": {}, "unverified": "Neověřeno", - "@unverified": {}, "messageInfo": "Informace o zprávě", - "@messageInfo": {}, "time": "Čas", - "@time": {}, "messageType": "Typ zprávy", - "@messageType": {}, "sender": "Odesílatel", - "@sender": {}, "repeatPassword": "Zopakujte heslo", - "@repeatPassword": {}, "openGallery": "Otevřít galerii", - "@openGallery": {}, - "addToSpaceDescription": "Vyberte umístění, do kterého chcete tento chat přidat.", - "@addToSpaceDescription": {}, "start": "Start", - "@start": {}, "removeFromSpace": "Odstranit z tohoto místa", - "@removeFromSpace": {}, "commandHint_clearcache": "Vymazat mezipamět", "@commandHint_clearcache": { "type": "String", @@ -2152,30 +1932,10 @@ "type": "String", "description": "Usage hint for the command /create" }, - "openVideoCamera": "Otevřete fotoaparát pro video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "Uveřejnit", - "@publish": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "markAsRead": "Označit jako přečtené", - "@markAsRead": {}, "reportUser": "Nahlásit uživatele", - "@reportUser": {}, "openChat": "Otevřete chat", - "@openChat": {}, "dismiss": "Zavrhnout", - "@dismiss": {}, "reactedWith": "{sender} reagoval s {reaction}", "@reactedWith": { "type": "String", @@ -2189,30 +1949,14 @@ } }, "emojis": "Emojis", - "@emojis": {}, "voiceCall": "Hlasový hovor", - "@voiceCall": {}, "unsupportedAndroidVersion": "Nepodporovaná verze Androidu", - "@unsupportedAndroidVersion": {}, "videoCallsBetaWarning": "Upozorňujeme, že videohovory jsou aktuálně ve verzi beta. Nemusí fungovat podle očekávání nebo fungovat vůbec na všech platformách.", - "@videoCallsBetaWarning": {}, "placeCall": "Zavolejte", - "@placeCall": {}, - "emailOrUsername": "E-mail nebo uživatelské jméno", - "@emailOrUsername": {}, "experimentalVideoCalls": "Experimentální videohovory", - "@experimentalVideoCalls": {}, "unsupportedAndroidVersionLong": "Tato funkce vyžaduje novější verzi Android. Zkontrolujte prosím aktualizace nebo podporu Lineage OS.", - "@unsupportedAndroidVersionLong": {}, "pinMessage": "Připnout zprávu do místnosti", - "@pinMessage": {}, "confirmEventUnpin": "Opravdu chcete událost trvale odepnout?", - "@confirmEventUnpin": {}, - "separateChatTypes": "Odděĺlit přímé chaty, skupiny a prostory", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youKicked": "Vykopli jste uživatele {user}", "@youKicked": { "placeholders": { @@ -2221,23 +1965,8 @@ } } }, - "switchToAccount": "Přepnout na účet {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "previousAccount": "Předchozí účet", - "@previousAccount": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "youAcceptedTheInvitation": "Přijal jsi pozvání", - "@youAcceptedTheInvitation": {}, "youJoinedTheChat": "Připojili jste se k chatu", - "@youJoinedTheChat": {}, "youInvitedBy": "Byli jste pozváni uživatelem {user}", "@youInvitedBy": { "placeholders": { @@ -2246,16 +1975,6 @@ } } }, - "nextAccount": "Další účet", - "@nextAccount": {}, - "addWidget": "Přidat widget", - "@addWidget": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetEtherpad": "Textová poznámka", - "@widgetEtherpad": {}, - "widgetName": "Jméno", - "@widgetName": {}, "youBannedUser": "Zakázali jste uživatele {user}", "@youBannedUser": { "placeholders": { @@ -2288,10 +2007,7 @@ } } }, - "widgetCustom": "Vlastní", - "@widgetCustom": {}, "youRejectedTheInvitation": "Odmítli jste pozvání", - "@youRejectedTheInvitation": {}, "youHaveWithdrawnTheInvitationFor": "Stáhli jste pozvánku pro uživatele {user}", "@youHaveWithdrawnTheInvitationFor": { "placeholders": { @@ -2300,22 +2016,11 @@ } } }, - "widgetUrlError": "Toto není platná adresa URL.", - "@widgetUrlError": {}, - "widgetNameError": "Zadejte jméno pro zobrazení.", - "@widgetNameError": {}, - "errorAddingWidget": "Chyba při přidávání widgetu.", - "@errorAddingWidget": {}, "disableEncryptionWarning": "Z bezpečnostních důvodů nemůžete vypnout šifrování v chatu, kde již bylo dříve zapnuto.", - "@disableEncryptionWarning": {}, - "confirmMatrixId": "Prosím, potvrďte vaše Matrix ID, abyste mohli smazat váš účet.", - "@confirmMatrixId": {}, + "confirmMatrixId": "Pro smazání svého účtu potvrďte, prosím, své Matrix ID.", "commandHint_googly": "Poslat kroutící se očička", - "@commandHint_googly": {}, "commandHint_cuddle": "Poslat mazlení", - "@commandHint_cuddle": {}, "commandHint_hug": "Poslat obejmutí", - "@commandHint_hug": {}, "hugContent": "{senderName} vás objímá", "@hugContent": { "type": "String", @@ -2344,9 +2049,7 @@ } }, "notAnImage": "Není obrázek.", - "@notAnImage": {}, "importNow": "Importovat nyní", - "@importNow": {}, "redactedByBecause": "Smazáno uživatelem {username} s důvodem: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2360,60 +2063,23 @@ } }, "storeInAndroidKeystore": "Uložit v Android KeyStore", - "@storeInAndroidKeystore": {}, - "dehydrateTorLong": "Uživatelům TOR se doporučuje exportovat sezení před zavřením okna.", - "@dehydrateTorLong": {}, - "numChats": "{number} konverzací", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "dehydrate": "Exportovat sezení a promazat zařízení", - "@dehydrate": {}, + "dehydrate": "Exportovat relaci a promazat zařízení", "newGroup": "Nová skupina", - "@newGroup": {}, - "hydrateTor": "TOR uživatelé: Import exportovaného sezení", - "@hydrateTor": {}, "doNotShowAgain": "Nezobrazovat znovu", - "@doNotShowAgain": {}, "commandHint_markasdm": "Označit jako místnost přímé konverzace s daným Matrix ID", - "@commandHint_markasdm": {}, "recoveryKey": "Klíč k obnovení", - "@recoveryKey": {}, - "hydrateTorLong": "Exportovali jste vaše poslední sezení na TOR? Rychle jej importujte a pokračujte v konverzaci.", - "@hydrateTorLong": {}, - "hydrate": "Obnovit ze záložního souboru", - "@hydrate": {}, - "pleaseEnterRecoveryKey": "Prosím vložte váš klíč pro obnovení:", - "@pleaseEnterRecoveryKey": {}, + "hydrate": "Obnovit ze souboru zálohy", "createGroup": "Vytvořit skupinu", - "@createGroup": {}, "shareInviteLink": "Sdílet pozvánku", - "@shareInviteLink": {}, "pleaseEnterRecoveryKeyDescription": "K odemknutí vašich starých zpráv prosím vložte váš klíč k obnovení vygenerovaný v předchozím sezení. Váš klíč k obnovení NENÍ vaše heslo.", - "@pleaseEnterRecoveryKeyDescription": {}, "setColorTheme": "Nastavit barvy:", - "@setColorTheme": {}, - "importEmojis": "Importovat Emoji", - "@importEmojis": {}, + "importEmojis": "Importovat emodži", "importFromZipFile": "Importovat ze .zip souboru", - "@importFromZipFile": {}, - "exportEmotePack": "Exportovat Emoji jako .zip", - "@exportEmotePack": {}, + "exportEmotePack": "Exportovat emodži jako .zip", "replace": "Nahradit", - "@replace": {}, "users": "Uživatelé", - "@users": {}, "storeInAppleKeyChain": "Uložit v Apple KeyChain", - "@storeInAppleKeyChain": {}, "jumpToLastReadMessage": "Skočit na naposledy přečtenou zprávu", - "@jumpToLastReadMessage": {}, - "signInWithPassword": "Přihlásit se pomocí hesla", - "@signInWithPassword": {}, "redactedBy": "Smazáno uživatelem {username}", "@redactedBy": { "type": "String", @@ -2423,44 +2089,20 @@ } } }, - "inviteContactToGroupQuestion": "Chcete pozvat {contact} do konverzace \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, - "dehydrateTor": "TOR uživatelé: Export sezení", - "@dehydrateTor": {}, "tryAgain": "Zkuste to znovu", - "@tryAgain": {}, "redactMessageDescription": "Tato zpráva bude smazána pro všechny účastníky konverzace. Tuto akci nelze vzít zpět.", - "@redactMessageDescription": {}, "optionalRedactReason": "(Nepovinné) Důvod smazání této zprávy…", - "@optionalRedactReason": {}, "messagesStyle": "Zprávy:", - "@messagesStyle": {}, "allSpaces": "Všechny prostory", - "@allSpaces": {}, "noOtherDevicesFound": "Žádná ostatní zařízení nebyla nalezena", - "@noOtherDevicesFound": {}, - "addChatDescription": "Přidat popis konverzace...", - "@addChatDescription": {}, "chatDescription": "Popis konverzace", - "@chatDescription": {}, "chatDescriptionHasBeenChanged": "Popis konverzace byl změněn", - "@chatDescriptionHasBeenChanged": {}, "noChatDescriptionYet": "Zatím nebyl vytvořen žádný popis konverzace.", - "@noChatDescriptionYet": {}, "invalidServerName": "Neplatné jméno serveru", - "@invalidServerName": {}, "chatPermissions": "Oprávnění konverzace", - "@chatPermissions": {}, "directChat": "Přímá konverzace", - "@directChat": {}, "setChatDescription": "Nastavit popis konverzace", - "@setChatDescription": {}, - "startFirstChat": "Začněte svou první konverzaci", - "@startFirstChat": {}, - "callingPermissions": "Oprávnění volání", - "@callingPermissions": {}, "whyIsThisMessageEncrypted": "Proč nelze přečíst tuto zprávu?", - "@whyIsThisMessageEncrypted": {}, "wasDirectChatDisplayName": "Prázdná konverzace (dříve {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2471,59 +2113,19 @@ } }, "newSpaceDescription": "Prostory umožňují organizovat Vaše konverzace a vytvářet soukromé nebo veřejné komunity.", - "@newSpaceDescription": {}, - "profileNotFound": "Uživatel nebyl na serveru nalezen. Možná je problém s připojením nebo uživatel neexistuje.", - "@profileNotFound": {}, - "setTheme": "Nastavit vzhled:", - "@setTheme": {}, "sendTypingNotifications": "Posílat oznámení o psaní", - "@sendTypingNotifications": {}, "commandHint_markasgroup": "Označit jako skupinu", - "@commandHint_markasgroup": {}, - "allRooms": "Všechny skupinové konverzace", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "recoveryKeyLost": "Ztracený klíč k obnovení?", - "@recoveryKeyLost": {}, "unlockOldMessages": "Odemknout staré zprávy", - "@unlockOldMessages": {}, "foregroundServiceRunning": "Toto oznámení se zobrazuje když běží služba na pozadí.", - "@foregroundServiceRunning": {}, "screenSharingDetail": "Sdílíte svou obrazovku přes FluffyChat", - "@screenSharingDetail": {}, - "callingAccountDetails": "Opravňuje FluffyChat používat Android systémovou aplikaci pro vytáčení.", - "@callingAccountDetails": {}, - "appearOnTop": "Zobrazovat nahoře", - "@appearOnTop": {}, - "otherCallingPermissions": "Mikrofon, kamera a ostatní oprávnění FluffyChat", - "@otherCallingPermissions": {}, "encryptThisChat": "Zašifrovat tuto konverzaci", - "@encryptThisChat": {}, "sorryThatsNotPossible": "Omlouváme se… to není možné", - "@sorryThatsNotPossible": {}, "deviceKeys": "Klíče zařízení:", - "@deviceKeys": {}, "reopenChat": "Znovu otevřít konverzaci", - "@reopenChat": {}, "fileIsTooBigForServer": "Neodesláno! Server povoluje maximálně {max} příloh.", - "@fileIsTooBigForServer": {}, "jump": "Skočit", - "@jump": {}, "openLinkInBrowser": "Otevřít odkaz v prohlížeči", - "@openLinkInBrowser": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Prosím zkuste to znovu nebo si vyberte jiný server.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "Přihlásit se pomocí {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "supposedMxid": "Tady by mělo být {mxid}", "@supposedMxid": { "type": "String", @@ -2534,11 +2136,8 @@ } }, "newSpace": "Nový prostor", - "@newSpace": {}, "screenSharingTitle": "sdílení obrazovky", - "@screenSharingTitle": {}, "user": "Uživatel", - "@user": {}, "fileHasBeenSavedAt": "Soubor uložen do {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2549,15 +2148,10 @@ } }, "custom": "Vlastní", - "@custom": {}, - "dehydrateWarning": "Tuto akci nelze vzít zpět. Ujistěte se že záložní soubor máte bezpečně uložen.", - "@dehydrateWarning": {}, + "dehydrateWarning": "Tuto akci nelze vzít zpět. Ujistěte se, že máte bezpečně uložený soubor zálohy.", "storeInSecureStorageDescription": "Klíč k obnovení uložte v zabezpečeném úložišti tohoto zařízení.", - "@storeInSecureStorageDescription": {}, "saveKeyManuallyDescription": "Uložte tento klíč manuálně pomocí systémového dialogu sdílení nebo zkopírováním do schránky.", - "@saveKeyManuallyDescription": {}, "storeSecurlyOnThisDevice": "Uložit bezpečně na tomto zařízení", - "@storeSecurlyOnThisDevice": {}, "countFiles": "{count} souborů", "@countFiles": { "placeholders": { @@ -2566,96 +2160,37 @@ } } }, - "emoteKeyboardNoRecents": "Naposledy použité emoce se zobrazí zde...", + "emoteKeyboardNoRecents": "Naposledy použité emodži se zobrazí zde...", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, "appLockDescription": "Zamknout aplikaci pomocí PIN kódu když není používána", - "@appLockDescription": {}, "globalChatId": "Globální ID chatu", - "@globalChatId": {}, "accessAndVisibility": "Přístup a viditelnost", - "@accessAndVisibility": {}, "calls": "Volání", - "@calls": {}, - "customEmojisAndStickers": "Vlastní emoji a nálepky", - "@customEmojisAndStickers": {}, + "customEmojisAndStickers": "Vlastní emodži a nálepky", "accessAndVisibilityDescription": "Kdo se může připojit a najít tuto konverzaci.", - "@accessAndVisibilityDescription": {}, - "customEmojisAndStickersBody": "Přidat nebo sdílet vlastní emoji nebo nálepky, které mohou být použité v konverzaci.", - "@customEmojisAndStickersBody": {}, - "swipeRightToLeftToReply": "Potáhněte z prava do leva pro odpověď", - "@swipeRightToLeftToReply": {}, - "countChatsAndCountParticipants": "{chats} konverzaci a {participants} účastníci", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, + "customEmojisAndStickersBody": "Přidat nebo sdílet vlastní emodži či nálepky, které lze použít v konverzaci.", + "swipeRightToLeftToReply": "Potáhnutím zprava doleva odpovědět na zprávu", "noMoreChatsFound": "Žádné další konverzace nalezeny...", - "@noMoreChatsFound": {}, "hideRedactedMessages": "Skrýt upravené zprávy", - "@hideRedactedMessages": {}, "hideRedactedMessagesBody": "Pokud někdo zprávu zrediguje, nebude tato zpráva v chatu již viditelná.", - "@hideRedactedMessagesBody": {}, - "hideInvalidOrUnknownMessageFormats": "Skrytí nesprávných nebo neznámých formátů zpráv", - "@hideInvalidOrUnknownMessageFormats": {}, + "hideInvalidOrUnknownMessageFormats": "Skrýt nesprávné nebo neznámé formáty zpráv", "blockUsername": "Ignorovat uživatelské jméno", - "@blockUsername": {}, - "hideMemberChangesInPublicChats": "Skrýt změny členů ve veřejných chatech", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Nezobrazovat na časové ose chatu, pokud se někdo připojí nebo opustí veřejný chat, aby se zlepšila čitelnost.", - "@hideMemberChangesInPublicChatsBody": {}, "overview": "Přehled", - "@overview": {}, - "notifyMeFor": "Upozorněte mě na", - "@notifyMeFor": {}, "passwordRecoverySettings": "Nastavení obnovení hesla", - "@passwordRecoverySettings": {}, - "presenceStyle": "Dostupnost:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "block": "Blokovat", - "@block": {}, - "indexedDbErrorLong": "Ukládání zpráv bohužel není ve výchozím nastavení v soukromém režimu povoleno.\nNavštivte prosím\n - about:config\n - nastavte dom.indexedDB.privateBrowsing.enabled na true\nV opačném případě nebude možné FluffyChat spustit.", - "@indexedDbErrorLong": {}, - "youInvitedToBy": "📩 Prostřednictvím odkazu jste byli pozváni na:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "indexedDbErrorTitle": "Problémy privátního prostředí", - "@indexedDbErrorTitle": {}, + "block": "Zablokovat", "blockListDescription": "Můžete blokovat uživatele, kteří vás obtěžují. Od uživatelů na vašem osobním seznamu blokovaných uživatelů nebudete moci přijímat žádné zprávy ani pozvánky do místnosti.", - "@blockListDescription": {}, "blockedUsers": "Zablokování uživatelé", - "@blockedUsers": {}, "alwaysUse24HourFormat": "Vypnuto", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, - "noChatsFoundHere": "Nejsou zde žádné chaty. Začněte nový chat s někým, použitím níže uvedeného tlačítka. ⤵️", - "@noChatsFoundHere": {}, - "joinedChats": "Připojené chaty", - "@joinedChats": {}, + "noChatsFoundHere": "Nejsou zde žádné konverzace. Začněte novou konverzaci s někým pomocí tlačítka níže. ⤵️", "unread": "Nepřečtené", - "@unread": {}, "space": "Prostor", - "@space": {}, "spaces": "Prostory", - "@spaces": {}, "presencesToggle": "Zobrazení stavových zpráv od jiných uživatelů", "@presencesToggle": { "type": "String", @@ -2671,9 +2206,6 @@ } }, "ignoreUser": "Ignorovat uživatele", - "@ignoreUser": {}, - "normalUser": "Normalní uživatel", - "@normalUser": {}, "countInvited": "{count} pozváno", "@countInvited": { "type": "String", @@ -2700,53 +2232,19 @@ } }, "usersMustKnock": "Uživatelé musí zaklepat", - "@usersMustKnock": {}, - "setCustomPermissionLevel": "Nastavit vlastní úroveň oprávnění", - "@setCustomPermissionLevel": {}, "changedTheChatDescription": "{username} změnil/a popis konverzace", - "@changedTheChatDescription": {}, "changedTheChatName": "{username} změnil/a název konverzace", - "@changedTheChatName": {}, "checkList": "Kontrolní seznam", - "@checkList": {}, "knock": "Zaklepat", - "@knock": {}, - "userWouldLikeToChangeTheChat": "{user} požádal/a o přidání do konverzace.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "enterSpace": "Vstoupit do prostoru", - "@enterSpace": {}, - "enterRoom": "Vstoupit do místnosti", - "@enterRoom": {}, - "hideUnimportantStateEvents": "Skrýt nedůležité stavové události", - "@hideUnimportantStateEvents": {}, "hidePresences": "Skrýt seznam událostí?", - "@hidePresences": {}, "noBackupWarning": "Pozor! Bez povolení zálohování konverzací ztratíte přístup k zašifrovaným zprávám. Důrazně doporučujeme zálohování konverzací před odhlášením povolit.", - "@noBackupWarning": {}, "readUpToHere": "Čtěte až sem", - "@readUpToHere": {}, "reportErrorDescription": "😭 Ale ne, něco se porouchalo. Pokud chcete, můžete tento bug nahlásit vývojářům.", - "@reportErrorDescription": {}, "report": "hlášení", - "@report": {}, "invite": "Pozvánka", - "@invite": {}, "inviteGroupChat": "📨 Skupinová pozvánka", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Soukromá pozvánka", - "@invitePrivateChat": {}, - "appearOnTopDetails": "Umožňuje zobrazit aplikaci nahoře (není nutné, pokud již máte Fluffychat nastaven jako účet volajícího)", - "@appearOnTopDetails": {}, "noKeyForThisMessage": "K tomuto může dojít, pokud byla zpráva odeslána před přihlášením k účtu v tomto zařízení.\n\nJe také možné, že odesílatel zablokoval vaše zařízení nebo se něco pokazilo s internetovým připojením.\n\nJste schopni si zprávu přečíst v jiné relaci? Pak můžete zprávu přenést z něj! Přejděte do Nastavení > Zařízení a zkontrolujte, zda se Vaše zařízení vzájemně ověřila. Při příštím otevření místnosti, kdy budou obě relace v popředí, se klíče přenesou automaticky.\n\nNechcete klíče ztratit při odhlašování nebo přepínání zařízení? Ujistěte se, že jste v nastaveních povolili zálohování konverzací.", - "@noKeyForThisMessage": {}, "invalidInput": "Nevhodný vstup!", - "@invalidInput": {}, "wrongPinEntered": "Nespravný PIN! Zkuste to znovu za {seconds} vteřin...", "@wrongPinEntered": { "type": "String", @@ -2757,27 +2255,16 @@ } }, "pleaseEnterANumber": "Prosím, zadejte číslo větší než 0", - "@pleaseEnterANumber": {}, "archiveRoomDescription": "Konverzace bude přesunuta do archivu. Ostatní uživatelé uvidí, že jste konverzaci opustil/a.", - "@archiveRoomDescription": {}, "roomUpgradeDescription": "Konverzace bude vytvořena znovu s novou verzí místnosti. Všem účastníkům bude oznámeno, že se musí přesunout do nové konverzace. Více o verzích místností se dočtete na https://spec.matrix.org/latest/", - "@roomUpgradeDescription": {}, "removeDevicesDescription": "Budete odhlášen/a z tohoto zařízení a nebudete nadále moci přijímat zprávy.", - "@removeDevicesDescription": {}, "banUserDescription": "Uživatel bude vyhozen z konverzace a nebude se moci znovu připojit dokud nebude odblokován.", - "@banUserDescription": {}, "unbanUserDescription": "Uživatel se bude moci vrátit do konverzace pokud se o to pokusí.", - "@unbanUserDescription": {}, "makeAdminDescription": "Jestliže tohoto uživatele povýšíte na administrátora, nebude tak moci odčinit, protože bude mít stejná oprávnění jako Vy.", - "@makeAdminDescription": {}, "pushNotificationsNotAvailable": "Notifikace nejsou dostupné", - "@pushNotificationsNotAvailable": {}, "learnMore": "Dozvědět se více", - "@learnMore": {}, "yourGlobalUserIdIs": "Vaše globální uživatelské ID (user-ID) je: ", - "@yourGlobalUserIdIs": {}, "knocking": "Klepání", - "@knocking": {}, "chatCanBeDiscoveredViaSearchOnServer": "Konverzaci naleznete vyhledáváním na {server}", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2788,45 +2275,362 @@ } }, "searchChatsRooms": "Vyhledat #konverzace, @uživatele...", - "@searchChatsRooms": {}, "nothingFound": "Nic nenalezeno...", - "@nothingFound": {}, "groupName": "Název skupiny", - "@groupName": {}, "createGroupAndInviteUsers": "Vytvořit skupinu a pozvat uživatele", - "@createGroupAndInviteUsers": {}, "groupCanBeFoundViaSearch": "Skupinu naleznete vyhledávním", - "@groupCanBeFoundViaSearch": {}, - "startConversation": "Začít konverzaci", - "@startConversation": {}, "commandHint_sendraw": "Odeslat soubor json", - "@commandHint_sendraw": {}, "databaseMigrationTitle": "Databáze je optimalizována", - "@databaseMigrationTitle": {}, "databaseMigrationBody": "Vydržte prosím. Bude to chvilku trvat.", - "@databaseMigrationBody": {}, "leaveEmptyToClearStatus": "Zanechte prázdné pro smazání statusu.", - "@leaveEmptyToClearStatus": {}, "select": "Vybrat", - "@select": {}, "searchForUsers": "Vyhledat @uživatele...", - "@searchForUsers": {}, "pleaseEnterYourCurrentPassword": "Prosím, zadejte Vaše současné heslo", - "@pleaseEnterYourCurrentPassword": {}, "newPassword": "Nové heslo", - "@newPassword": {}, "pleaseChooseAStrongPassword": "Prosím, zvolte si silné heslo", - "@pleaseChooseAStrongPassword": {}, "passwordsDoNotMatch": "Hesla se neshodují", - "@passwordsDoNotMatch": {}, "passwordIsWrong": "Zadané heslo je nesprávné", - "@passwordIsWrong": {}, - "publicLink": "Veřejný odkaz", - "@publicLink": {}, "publicChatAddresses": "Adresy veřejných konverzací", - "@publicChatAddresses": {}, "createNewAddress": "Vytvořit novou adresu", - "@createNewAddress": {}, "thisDevice": "Toto zařzení:", - "@thisDevice": {} -} + "synchronizingPleaseWaitCounter": " Synchronizuji… ({percentage} %)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "noOneCanJoin": "Nikdo se nemůže připojit", + "kickUserDescription": "Uživatel bude vyhozen z chatu, ale nikoliv zabanován. V případě veřejných chatů to znamená, že se kdykoliv může znovu připojit.", + "noUsersFoundWithQuery": "Nepodařilo se najít uživatele \"{query}\". Zkontrolujte, prosím, že jste se nepřepsali.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "wrongRecoveryKey": "Jejda... toto nejspíš není správný obnovovací klíč.", + "joinSpace": "Připojit se do prostoru", + "publicSpaces": "Veřejné prostory", + "initAppError": "Při načítání nastala chyba", + "gallery": "Galerie", + "files": "Soubory", + "sessionLostBody": "Vaše relace byla ztracena. Nahlaste, prosím, tuto chybu vývojářům na adrese {url}. Chybová hláška je: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "restoreSessionBody": "Aplikace se pokusí obnovit vaši relaci ze zálohy. Nahlaste, prosím, tuto chybu vývojářům na adrese {url}. Chybová hláška je: {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "sendReadReceipts": "Posílat potvrzení o přečtení", + "sendTypingNotificationsDescription": "Ostatní účastníci konverzace uvidí, že píšete novou zprávu.", + "sendReadReceiptsDescription": "Ostatní účastníci konverzace uvidí, že jste si přečetl/a jejich zprávu.", + "formattedMessages": "Formátované zprávy", + "formattedMessagesDescription": "Zobrazovat formátovaný obsah zpráv, jako například tučný text pomocí markdownu.", + "verifyOtherUser": "🔐 Ověřit jiného uživatele", + "verifyOtherUserDescription": "Když ověříte jiného uživatele, můžete si být jistí, že víte, s kým si píšete. 💪\n\nJakmile začnete s ověřením, vy a druhý uživatel uvidíte v aplikaci vyskakovací okno. V něm uvidíte sérii emodži nebo čísel, které musíte společně porovnat.\n\nNejjednodušší je setkat se osobně nebo si udělat videohovor. 👭", + "verifyOtherDevice": "🔐 Ověřit jiné zařízení", + "verifyOtherDeviceDescription": "Když ověříte jiné zařízení, tato zařízení si mohou vyměnit klíče, čímž zvýšíte vaše zabezpečení. 💪 Jakmile začnete s ověřením, v aplikaci na obou zařízeních se objeví vyskakovací okno. V něm uvidíte sérii emodži nebo čísel, které musíte na zařízeních porovnat mezi sebou. Než začnete s ověřováním, je fajn mít obě zařízení po ruce. 🤳", + "acceptedKeyVerification": "{sender} přijal/a ověření klíče", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "canceledKeyVerification": "{sender} zrušil ověření klíče", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "completedKeyVerification": "{sender} dokončil ověření klíče", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "isReadyForKeyVerification": "{sender} je připraven/a na ověření klíče", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "requestedKeyVerification": "{sender} požádal/a o ověření klíče", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "startedKeyVerification": "{sender} začal/a s ověřením klíče", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "prepareSendingAttachment": "Připravuji odeslání přílohy...", + "sendingAttachment": "Posílám přílohu...", + "generatingVideoThumbnail": "Vytvářím náhledový obrázek videa...", + "compressVideo": "Komprimuji video...", + "sendingAttachmentCountOfCount": "Odesílám přílohu {index} z {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "Dosažen limit serveru! Čekám {seconds} sekund...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "Jedno z vašich zařízení není ověřeno", + "continueText": "Pokračovat", + "welcomeText": "Ahoj, ahoj 👋 Tohle je FluffyChat. Můžete se přihlásit k jakémukoliv domácímu serveru, který je kompatibilní s https://matrix.org, a začít s kýmkoliv chatovat. Je to obří decentralizovaná chatovací síť!", + "setWallpaper": "Nastavit tapetu", + "manageAccount": "Spravovat účet", + "noContactInformationProvided": "Server neposkytl žádné platné kontaktní informace", + "contactServerAdmin": "Kontaktovat administrátora serveru", + "supportPage": "Podpora", + "serverInformation": "Informace o serveru:", + "name": "Název", + "version": "Verze", + "website": "Webová stránka", + "compress": "Komprimovat", + "boldText": "Tučný text", + "italicText": "Kurzíva", + "strikeThrough": "Přeškrtnutý text", + "pleaseFillOut": "Prosím vyplňte", + "invalidUrl": "Neplatná URL adresa", + "addLink": "Přidat odkaz", + "unableToJoinChat": "Nepodařilo se připojit ke konverzaci. Je možné, že druhá strana ji už uzavřela.", + "previous": "Předchozí", + "otherPartyNotLoggedIn": "Druhá strana aktuálně není přihlášená, takže nemůže přijímat zprávy!", + "appWantsToUseForLogin": "Použít '{server}' k přihlášení", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "appWantsToUseForLoginDescription": "Pokračováním povolíte aplikaci a webové stránce sdílet mezi sebou informace o vás.", + "open": "Otevřít", + "waitingForServer": "Čekám na server...", + "newChatRequest": "📩 Nová žádost o konverzaci", + "generalNotificationSettings": "Obecné nastavení oznámení", + "roomNotificationSettings": "Nastavení oznámení pro místnost", + "userSpecificNotificationSettings": "Nastavení oznámení pro uživatele", + "otherNotificationSettings": "Ostatní nastavení oznámení", + "notificationRuleContainsUserName": "Obsahuje uživatelské jméno", + "notificationRuleContainsUserNameDescription": "Pošle uživateli oznámení, když zpráva obsahuje jeho uživatelské jméno.", + "notificationRuleMaster": "Ztlumit veškerá oznámení", + "notificationRuleMasterDescription": "Přepíše veškerá ostatní pravidla a zakáže všechna oznámení.", + "notificationRuleSuppressNotices": "Ztlumit automatizované zprávy", + "notificationRuleSuppressNoticesDescription": "Ztlumí oznámení od automatizovaných klientů, jako jsou např. roboti.", + "notificationRuleInviteForMe": "Pozvánka adresovaná mně", + "notificationRuleInviteForMeDescription": "Pošle uživateli oznámení, když je pozván do místnosti.", + "notificationRuleMemberEvent": "Události týkající se členství", + "notificationRuleMemberEventDescription": "Ztlumí oznámení týkající se veškerých událostí souvisejících s členstvím.", + "notificationRuleIsUserMention": "Zmínka uživatele", + "notificationRuleIsUserMentionDescription": "Pošle uživateli oznámení, když je někdo přímo zmíní ve zprávě.", + "notificationRuleContainsDisplayName": "Obsahuje přezdívku", + "notificationRuleContainsDisplayNameDescription": "Pošle uživateli oznámení, když zpráva obsahuje jejich přezdívku.", + "notificationRuleIsRoomMention": "Označení místnosti", + "notificationRuleIsRoomMentionDescription": "Pošle uživateli oznámení, když je označena celá místnost.", + "notificationRuleRoomnotif": "Označení místnosti", + "notificationRuleRoomnotifDescription": "Pošle uživateli oznámení, když zpráva obsahuje '@room'.", + "notificationRuleTombstone": "Náhrobek", + "notificationRuleTombstoneDescription": "Pošle uživateli oznámení ohledně zpráv o deaktivaci místnosti.", + "notificationRuleReaction": "Reakce", + "notificationRuleReactionDescription": "Ztlumí oznámení o reakcích.", + "notificationRuleSuppressEdits": "Ztlumit úpravy", + "notificationRuleSuppressEditsDescription": "Ztlumí notifikace týkající se upravených zpráv.", + "notificationRuleCall": "Hovor", + "notificationRuleCallDescription": "Pošle uživateli oznámení ohledně hovorů.", + "sentVoiceMessage": "🎙️ {duration} - Hlasová zpráva od {sender}", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "deletePushRuleCanNotBeUndone": "Odstranění tohoto nastavení oznámení nelze vzít zpět.", + "more": "Více", + "shareKeysWith": "Sdílet klíče s...", + "shareKeysWithDescription": "Která zařízení mají být označena jako důvěryhodná, aby mohla současně číst vaše zprávy v šifrovaných konverzacích?", + "allDevices": "Všechna zařízení", + "crossVerifiedDevicesIfEnabled": "Křížově ověřená zařízení, pokud je povoleno", + "crossVerifiedDevices": "Křížově ověřená zařízení", + "verifiedDevicesOnly": "Pouze ověřená zařízení", + "recordAVideo": "Nahrát video", + "optionalMessage": "(Volitelné) zpráva...", + "notSupportedOnThisDevice": "Není na tomto zařízení podporováno", + "approve": "Schválit", + "youHaveKnocked": "Zaklepali jste", + "pleaseWaitUntilInvited": "Nyní musíte počkat, až vás nějaký člen této místnosti pozve dovnitř.", + "commandHint_logout": "Odhlásit se z aktuálního zařízení", + "commandHint_logoutall": "Odhlásit se ze všech aktivních zařízení", + "displayNavigationRail": "Zobrazit navigační lištu na mobilu", + "customReaction": "Vlastní reakce", + "moreEvents": "Více událostí", + "declineInvitation": "Odmítnout pozvánku", + "noMessagesYet": "Zatím tu nejsou žádné zprávy", + "longPressToRecordVoiceMessage": "Podržte pro nahrání hlasové zprávy.", + "pause": "Pozastavit", + "resume": "Pokračovat", + "removeFromSpaceDescription": "Tato konverzace bude odstraněna z tohoto prostoru, stále však bude dostupná ve vašem seznamu konverzací.", + "countChats": "{chats} konverzací", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Členové prostoru {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "Členové prostoru {spaces} mohou zaklepat", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username} spustil/a hlasování.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "Hlasování", + "startPoll": "Spustit hlasování", + "endPoll": "Ukončit hlasování", + "answersVisible": "Odpovědi budou viditelné", + "pollQuestion": "Předmět hlasování", + "answerOption": "Možnost", + "addAnswerOption": "Přidat možnost", + "allowMultipleAnswers": "Povolit více odpovědí", + "pollHasBeenEnded": "Hlasování skončilo", + "answersWillBeVisibleWhenPollHasEnded": "Odpovědi budou viditelné jakmile hlasování skončí", + "replyInThread": "Odpovědět ve vlákně", + "thread": "Vlákno", + "backToMainChat": "Zpátky do hlavního chatu", + "saveChanges": "Uložit změny", + "createSticker": "Vytvořit nálepku nebo emodži", + "useAsSticker": "Použít jako nálepku", + "useAsEmoji": "Použít jako emodži", + "stickerPackNameAlreadyExists": "Balíček nálepek s tímto názvem již existuje", + "newStickerPack": "Nový balíček nálepek", + "stickerPackName": "Název balíčku nálepek", + "attribution": "Zdroj", + "skipChatBackup": "Přeskočit zálohu konverzací", + "skipChatBackupWarning": "Jste si jistí? Pokud nepovolíte zálohu konverzací, můžete ztratit přístup ke svým zprávám v případě změny zařízení.", + "loadingMessages": "Načítám zprávy", + "setupChatBackup": "Nastavit zálohování konverzací", + "noMoreResultsFound": "Žádné další výsledky nenalezeny", + "chatSearchedUntil": "Konverzace prohledána do {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "Základní URL pro federování", + "baseUrl": "Základní URL", + "versionWithNumber": "Verze: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Záznamy", + "advancedConfigs": "Pokročilá nastavení", + "signIn": "Přihlásit se", + "createNewAccount": "Vytvořit nový účet", + "signUpGreeting": "FluffyChat je decentralizovaný! Vyberte server, kde si chcete vytvořit účet, a jdeme na věc!", + "signInGreeting": "Již máte účet na Matrixu? Vítejte zpět! Vyberte svůj domácí server a přihlaste se.", + "appIntro": "S FluffyChatem můžeme chatovat s přáteli. Je to decentralizovaná chatovací aplikace pro [matrix]! Zjistěte více na https://matrix.org nebo se zaregistrujte.", + "theProcessWasCanceled": "Proces byl zrušen.", + "sendImages": "Poslat {count} obrazků", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "commandHint_roomupgrade": "Aktualizovat místnost na danou verzi" +} \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index bad7b028..402faf13 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -1,35 +1,133 @@ { - "repeatPassword": "Gentag password", - "@repeatPassword": {}, - "notAnImage": "Ikke en billedfil.", - "@notAnImage": {}, - "setCustomPermissionLevel": "Indstil særligt tilladelsesniveau", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Vælg en prædefineret rolle herunder eller indtaste et særligt tilladelsesniveau mellem 0 og 100.", - "@setPermissionsLevelDescription": {}, - "ignoreUser": "Ignorér bruger", - "@ignoreUser": {}, - "remove": "Fjern", - "@remove": { - "type": "String", - "placeholders": {} - }, - "importNow": "Importer nu", - "@importNow": {}, - "importEmojis": "Importer emojis", - "@importEmojis": {}, - "normalUser": "Normal bruger", - "@normalUser": {}, - "importFromZipFile": "Importer fra .zip fil", - "@importFromZipFile": {}, - "alwaysUse24HourFormat": "true", - "@alwaysUse24HourFormat": { - "description": "Set to true to always display time of day in 24 hour format." - }, - "exportEmotePack": "Eksportér Emote-pakke som .zip-fil", - "@exportEmotePack": {}, - "replace": "Erstat", - "@replace": {}, - "about": "Om", - "@about": {} -} + "repeatPassword": "Gentag password", + "notAnImage": "Ikke en billedfil.", + "ignoreUser": "Ignorér bruger", + "remove": "Fjern", + "@remove": { + "type": "String", + "placeholders": {} + }, + "importNow": "Importer nu", + "importEmojis": "Importer emojis", + "importFromZipFile": "Importer fra .zip fil", + "alwaysUse24HourFormat": "true", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." + }, + "exportEmotePack": "Eksportér Emote-pakke som .zip-fil", + "replace": "Erstat", + "about": "Om", + "aboutHomeserver": "Om {homeserver}", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "accept": "Acceptér", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} accepterede invitationen", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "Konto", + "@account": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} aktiverede end-to-end kryptering", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "addEmail": "Tilføj e-mail", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "confirmMatrixId": "Bekræft din Matrix-ID for at slette din konto.", + "supposedMxid": "Den burde være {mxid}", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "addToSpace": "Tilføj til gruppe", + "admin": "Admin", + "@admin": { + "type": "String", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "String", + "placeholders": {} + }, + "allChats": "Alle samtaler", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "commandHint_roomupgrade": "Opgrader dette rum til den givne rumversion", + "commandHint_googly": "Send googly-eyes", + "commandHint_cuddle": "Send et varmt smil", + "commandHint_hug": "Send et kram", + "googlyEyesContent": "{senderName} sender dig googly-eyes", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "cuddleContent": "{senderName} sender dig et varmt smil", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "hugContent": "{senderName} krammer dig", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "answeredTheCall": "{senderName} svarer på dit opkald", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "anyoneCanJoin": "Enhver kan deltage", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + } +} \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 22910ecc..1b7af928 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -87,7 +87,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Dürfen Gäste beitreten", + "areGuestsAllowedToJoin": "Dürfen Gäste teilnehmen?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -128,18 +128,6 @@ } } }, - "badServerVersionsException": "Der Homeserver unterstützt die Spec-Versionen:\n{serverVersions}\nAber diese App unterstützt nur:\n{supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Aus dem Chat verbannen", "@banFromChat": { "type": "String", @@ -172,11 +160,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bot-Nachrichten", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Abbrechen", "@cancel": { "type": "String", @@ -505,31 +488,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Bestätigen", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Verbinden", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt wurde in die Gruppe eingeladen", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Enthält Anzeigenamen", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Enthält Benutzernamen", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Der Inhalt wurde den Serveradministratoren gemeldet", "@contentHasBeenReported": { "type": "String", @@ -609,33 +572,6 @@ } } }, - "dateWithoutYear": "{day}.{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}.{month}.{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Dies deaktiviert dein Konto. Es kann nicht rückgängig gemacht werden! Bist du sicher?", "@deactivateAccountWarning": { "type": "String", @@ -741,11 +677,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Wähle ein Emoticon-Kürzel und ein Bild!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Leerer Chat", "@emptyChat": { "type": "String", @@ -795,11 +726,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Gib Deinen Homeserver ein", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Fehler beim Suchen des Standortes: {error}", "@errorObtainingLocation": { "type": "String", @@ -849,11 +775,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Zum neuen Raum wechseln", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Gruppe", "@group": { "type": "String", @@ -925,11 +846,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identität", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorieren", "@ignore": { "type": "String", @@ -991,11 +907,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Einladung für mich", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} hat Dich zu FluffyChat eingeladen. \n1. Gehe auf fluffychat.im und installiere die App \n2. Melde Dich in der App an \n3. Öffne den Einladungslink: \n {link}", "@inviteText": { "type": "String", @@ -1075,11 +986,6 @@ "type": "String", "placeholders": {} }, - "license": "Lizenz", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Hell", "@lightTheme": { "type": "String", @@ -1133,11 +1039,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Änderungen der Mitglieder", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Erwähnen", "@mention": { "type": "String", @@ -1233,11 +1134,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Benachrichtigungen für dieses Konto aktiviert", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} Mitglieder schreiben …", "@numUsersTyping": { "type": "String", @@ -1337,11 +1233,6 @@ "type": "String", "placeholders": {} }, - "people": "Personen", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Bild wählen", "@pickImage": { "type": "String", @@ -1361,11 +1252,6 @@ } } }, - "pleaseChoose": "Bitte wählen", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Bitte einen Code festlegen", "@pleaseChooseAPasscode": { "type": "String", @@ -1459,11 +1345,6 @@ } } }, - "rejoin": "Wieder beitreten", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Entfernen", "@remove": { "type": "String", @@ -1483,11 +1364,6 @@ } } }, - "removeDevice": "Gerät entfernen", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Verbannung aufheben", "@unbanFromChat": { "type": "String", @@ -1543,15 +1419,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Gelesen von {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Senden", "@send": { "type": "String", @@ -1586,16 +1453,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Sende Original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Sticker senden", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Sende Video", "@sendVideo": { "type": "String", @@ -1660,21 +1517,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Eigene Emoticons einstellen", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Einladungslink festlegen", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Berechtigungsstufe einstellen", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Status ändern", "@setStatus": { "type": "String", @@ -1709,12 +1551,7 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Einmalige Anmeldung", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "skip": "Überspringe", + "skip": "Überspringen", "@skip": { "type": "String", "placeholders": {} @@ -1784,21 +1621,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Favorite umschalten", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Stummgeschaltete umschalten", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Markieren als gelesen/ungelesen", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Zu viele Anfragen. Bitte versuche es später noch einmal!", "@tooManyRequestsWarning": { "type": "String", @@ -1865,15 +1687,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 ungelesene Unterhaltung} other{{unreadCount} ungelesene Unterhaltungen}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} und {count} andere schreiben …", "@userAndOthersAreTyping": { "type": "String", @@ -1998,11 +1811,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Hintergrund:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Achtung!", "@warning": { "type": "String", @@ -2081,7 +1889,6 @@ } }, "scanQrCode": "QR-Code scannen", - "chatHasBeenAddedToThisSpace": "Chat wurde zum Space hinzugefügt", "autoplayImages": "Animierte Sticker und Emotes automatisch abspielen", "@autoplayImages": { "type": "String", @@ -2107,7 +1914,6 @@ "sender": "Absender:in", "openGallery": "Galerie öffnen", "removeFromSpace": "Aus dem Space entfernen", - "addToSpaceDescription": "Wähle einen Space aus, um diesen Chat hinzuzufügen.", "start": "Start", "repeatPassword": "Passwort wiederholen", "commandHint_dm": "Starte einen direkten Chat\nBenutze --no-encryption, um die Verschlüsselung auszuschalten", @@ -2130,28 +1936,12 @@ "type": "String", "description": "Usage hint for the command /create" }, - "openVideoCamera": "Video aufnehmen", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Veröffentlichen", "pinMessage": "An Raum anheften", "emojis": "Emojis", "placeCall": "Anruf tätigen", "voiceCall": "Sprachanruf", "unsupportedAndroidVersion": "Nicht unterstützte Android-Version", "videoCallsBetaWarning": "Bitte beachte, dass sich Videoanrufe derzeit in der Beta-Phase befinden. Sie funktionieren möglicherweise nicht wie erwartet oder überhaupt nicht auf allen Plattformen.", - "emailOrUsername": "E-Mail oder Benutzername", "unsupportedAndroidVersionLong": "Diese Funktion erfordert eine neuere Android-Version. Bitte suche nach Updates oder prüfe die Lineage-OS-Unterstützung.", "experimentalVideoCalls": "Experimentelle Videoanrufe", "reactedWith": "{sender} reagierte mit {reaction}", @@ -2171,31 +1961,6 @@ "openChat": "Chat öffnen", "confirmEventUnpin": "Möchtest du das Ereignis wirklich dauerhaft lösen?", "dismiss": "Verwerfen", - "switchToAccount": "Zu Konto {number} wechseln", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Nächstes Konto", - "widgetJitsi": "Jitsi Meet", - "widgetCustom": "Angepasst", - "widgetEtherpad": "Textnotiz", - "addWidget": "Widget hinzufügen", - "widgetVideo": "Video", - "widgetName": "Name", - "widgetUrlError": "Das ist keine gültige URL.", - "errorAddingWidget": "Fehler beim Hinzufügen des Widgets.", - "previousAccount": "Vorheriges Konto", - "separateChatTypes": "Separate Direktchats und Gruppen", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "widgetNameError": "Bitte gib einen Anzeigenamen an.", "youKicked": "👞 Du hast {user} rausgeworfen", "@youKicked": { "placeholders": { @@ -2263,16 +2028,10 @@ "storeSecurlyOnThisDevice": "Auf diesem Gerät sicher speichern", "dehydrate": "Sitzung exportieren und Gerät löschen", "dehydrateWarning": "Diese Aktion kann nicht rückgängig gemacht werden. Stelle sicher, dass du die Sicherungsdatei sicher aufbewahrst.", - "dehydrateTor": "TOR-Benutzer: Sitzung exportieren", - "dehydrateTorLong": "Für TOR-Benutzer wird empfohlen, die Sitzung zu exportieren, bevor das Fenster geschlossen wird.", - "hydrateTor": "TOR-Benutzer: Session-Export importieren", "hydrate": "Aus Sicherungsdatei wiederherstellen", - "indexedDbErrorTitle": "Probleme im Privatmodus", "unlockOldMessages": "Entsperre alte Nachrichten", "pleaseEnterRecoveryKeyDescription": "Um deine alten Nachrichten zu entsperren, gib bitte den Wiederherstellungsschlüssel ein, der in einer früheren Sitzung generiert wurde. Dein Wiederherstellungsschlüssel ist NICHT dein Passwort.", "saveKeyManuallyDescription": "Speicher diesen Schlüssel manuell, indem du den Systemfreigabedialog oder die Zwischenablage auslöst.", - "hydrateTorLong": "Hast du deine Sitzung das letzte Mal auf TOR exportiert? Importiere sie schnell und chatte weiter.", - "pleaseEnterRecoveryKey": "Bitte gib deinen Wiederherstellungsschlüssel ein:", "countFiles": "{count} Dateien", "@countFiles": { "placeholders": { @@ -2284,7 +2043,6 @@ "users": "Benutzer", "storeInSecureStorageDescription": "Speicher den Wiederherstellungsschlüssel im sicheren Speicher dieses Geräts.", "storeInAppleKeyChain": "Im Apple KeyChain speichern", - "indexedDbErrorLong": "Die Nachrichtenspeicherung ist im privaten Modus standardmäßig leider nicht aktiviert.\nBitte besuche\n- about:config\n- Setze dom.indexedDB.privateBrowsing.enabled auf true\nAndernfalls ist es nicht möglich, FluffyChat auszuführen.", "confirmMatrixId": "Bitte bestätigen deine Matrix-ID, um dein Konto zu löschen.", "supposedMxid": "das sollte sein {mxid}", "@supposedMxid": { @@ -2297,33 +2055,15 @@ }, "commandHint_markasdm": "Als Direktnachrichtenraum für die angegebene Matrix-ID markieren", "commandHint_markasgroup": "Als Gruppe markieren", - "hideUnimportantStateEvents": "Blende unwichtige Zustandsereignisse aus", "doNotShowAgain": "Nicht mehr anzeigen", - "appearOnTopDetails": "Ermöglicht, dass die App oben angezeigt wird (nicht erforderlich, wenn du Fluffychat bereits als Anrufkonto eingerichtet haben)", "noKeyForThisMessage": "Dies kann passieren, wenn die Nachricht gesendet wurde, bevor du dich auf diesem Gerät bei deinem Konto angemeldet hast.\n\nEs ist auch möglich, dass der Absender dein Gerät blockiert hat oder etwas mit der Internetverbindung schief gelaufen ist.\n\nKannst du die Nachricht in einer anderen Sitzung lesen? Dann kannst du die Nachricht davon übertragen! Gehe zu den Einstellungen > Geräte und vergewissere dich, dass sich deine Geräte gegenseitig verifiziert haben. Wenn du den Raum das nächste Mal öffnest und beide Sitzungen im Vordergrund sind, werden die Schlüssel automatisch übertragen.\n\nDu möchtest die Schlüssel beim Abmelden oder Gerätewechsel nicht verlieren? Stelle sicher, dass du das Chat-Backup in den Einstellungen aktiviert hast.", "foregroundServiceRunning": "Diese Benachrichtigung wird angezeigt, wenn der Vordergrunddienst ausgeführt wird.", "screenSharingTitle": "Bildschirm teilen", - "callingPermissions": "Anrufberechtigungen", - "callingAccount": "Anrufkonto", - "callingAccountDetails": "Ermöglicht FluffyChat, die native Android-Dialer-App zu verwenden.", - "appearOnTop": "Oben erscheinen", - "otherCallingPermissions": "Mikrofon, Kamera und andere FluffyChat-Berechtigungen", "whyIsThisMessageEncrypted": "Warum ist diese Nachricht nicht lesbar?", "newGroup": "Neue Gruppe", "newSpace": "Neuer Space", - "enterSpace": "Raum betreten", - "enterRoom": "Raum betreten", "allSpaces": "Alle Spaces", "screenSharingDetail": "Du teilst deinen Bildschirm in FuffyChat", - "numChats": "{number} Chats", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "newSpaceDescription": "Mit Spaces kannst du deine Chats zusammenfassen und private oder öffentliche Communities aufbauen.", "wasDirectChatDisplayName": "Leerer Chat (war {oldDisplayName})", "@wasDirectChatDisplayName": { @@ -2344,7 +2084,6 @@ } } }, - "startFirstChat": "Starte deinen ersten Chat", "deviceKeys": "Geräteschlüssel:", "commandHint_cuddle": "Umarmung senden", "commandHint_hug": "Umarmung senden", @@ -2372,11 +2111,6 @@ "reopenChat": "Chat wieder eröffnen", "noBackupWarning": "Achtung! Ohne Aktivierung des Chat-Backups verlierst du den Zugriff auf deine verschlüsselten Nachrichten. Vor dem Ausloggen wird dringend empfohlen, das Chat-Backup zu aktivieren.", "noOtherDevicesFound": "Keine anderen Geräte anwesend", - "allRooms": "Alle Gruppenchats", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "fileHasBeenSavedAt": "Datei wurde gespeichert unter {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2388,13 +2122,10 @@ }, "jumpToLastReadMessage": "Zur letzten ungelesenen Nachricht", "readUpToHere": "Bis hier gelesen", - "pleaseTryAgainLaterOrChooseDifferentServer": "Bitte versuche es später noch einmal oder wähle einen anderen Server.", "jump": "Springen", "openLinkInBrowser": "Link im Browser öffnen", "reportErrorDescription": "😭 Oh nein. Etwas ist schief gelaufen. Wenn du möchtest, kannst du den Bug bei den Entwicklern melden.", "report": "Melden", - "signInWithPassword": "Anmelden mit Passwort", - "signInWithLabel": "Anmelden mit:", "importNow": "Jetzt importieren", "importEmojis": "Emojis importieren", "importFromZipFile": "Aus ZIP-Datei importieren", @@ -2402,10 +2133,8 @@ "notAnImage": "Keine Bilddatei.", "replace": "Ersetzen", "sendTypingNotifications": "Tippbenachrichtigungen senden", - "profileNotFound": "Der Benutzer konnte auf dem Server nicht gefunden werden. Vielleicht gibt es ein Verbindungsproblem oder der Benutzer existiert nicht.", "createGroup": "Gruppe erstellen", "shareInviteLink": "Einladungslink teilen", - "inviteContactToGroupQuestion": "Willst du {contact} zum Chat {groupName} einladen?", "tryAgain": "Neuer Versuch", "redactMessageDescription": "Die Nachricht wird für alle Teilnehmer dieses Gesprächs gelöscht. Dies kann nicht rückgängig gemacht werden.", "redactedBy": "Gelöscht von {username}", @@ -2429,7 +2158,6 @@ } } }, - "setTheme": "Design festlegen:", "setColorTheme": "Farbdesign einstellen:", "invite": "Einladen", "optionalRedactReason": "(Optional) Grund für die Löschung dieser Nachricht...", @@ -2440,10 +2168,8 @@ "noChatDescriptionYet": "Noch keine Chatbeschreibung vorhanden.", "invalidServerName": "Ungültiger Servername", "directChat": "Privater Chat", - "addChatDescription": "Chatbeschreibung hinzufügen ...", "setChatDescription": "Chatbeschreibung festlegen", "inviteGroupChat": "📨 Einladungen zum Gruppenchat", - "invitePrivateChat": "📨 Einladungen zum privaten Chat", "invalidInput": "Ungültige Eingabe!", "hasKnocked": "🚪 {user} hat angeklopft", "@hasKnocked": { @@ -2479,7 +2205,6 @@ "kickUserDescription": "Der Benutzer wird aus dem Chat geworfen, aber nicht gebannt. In öffentlichen Chats kann der Benutzer jederzeit wieder beitreten.", "blockListDescription": "Du kannst Benutzer blockieren, die dich stören. Von Benutzern auf deiner persönlichen Blocklierliste kannst du keine Nachrichten oder Raumeinladungen mehr erhalten.", "createGroupAndInviteUsers": "Gruppe erstellen und Nutzer einladen", - "startConversation": "Unterhaltung starten", "blockedUsers": "Blockierte Benutzer", "groupCanBeFoundViaSearch": "Gruppe kann über die Suche gefunden werden", "noUsersFoundWithQuery": "Leider konnte mit \"{query}\" kein Benutzer gefunden werden. Bitte schau nach, ob dir ein Tippfehler unterlaufen ist.", @@ -2504,12 +2229,9 @@ "publicSpaces": "Öffentliche Spaces", "passwordIsWrong": "Dein eingegebenes Passwort ist falsch", "pleaseEnterYourCurrentPassword": "Bitte dein aktuelles Passwort eingeben", - "publicLink": "Öffentlicher Link", "nothingFound": "Nichts gefunden ...", - "decline": "Ablehnen", "newPassword": "Neues Passwort", "passwordsDoNotMatch": "Passwörter stimmen nicht überein", - "subspace": "Sub-Space", "select": "Auswählen", "pleaseChooseAStrongPassword": "Bitte wähle ein starkes Passwort", "addChatOrSubSpace": "Chat oder Sub-Space hinzufügen", @@ -2517,18 +2239,6 @@ "joinSpace": "Space beitreten", "searchForUsers": "Suche nach @benutzer ...", "initAppError": "Beim Starten der App ist ein Fehler aufgetreten", - "databaseBuildErrorBody": "Die SQlite-Datenbank kann nicht erstellt werden. Die App versucht vorerst, die Legacy-Datenbank zu verwenden. Bitte melde diesen Fehler an die Entwickler unter {url}. Die Fehlermeldung lautet: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Die App versucht nun, deine Sitzung aus der Sicherung wiederherzustellen. Bitte melde diesen Fehler an die Entwickler unter {url}. Die Fehlermeldung lautet: {error}", "@sessionLostBody": { "type": "String", @@ -2553,25 +2263,8 @@ } } }, - "youInvitedToBy": "📩 Du wurdest per Link eingeladen zu:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "sendReadReceipts": "Lesebestätigungen senden", "formattedMessages": "Formatierte Nachrichten", - "forwardMessageTo": "Nachricht weiterleiten an {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "Andere Teilnehmer in einem Chat können sehen, wenn du eine neue Nachricht tippst.", "formattedMessagesDescription": "Formatierte Nachrichteninhalte wie fettgedruckten Text mit Markdown anzeigen.", "verifyOtherUser": "🔐 Anderen Benutzer verifizieren", @@ -2634,11 +2327,6 @@ } }, "verifyOtherDeviceDescription": "Wenn du ein anderes Gerät verifizierst, können diese Geräte Schlüssel austauschen, was die Sicherheit insgesamt erhöht. 💪Sobald du eine Verifizierung startest, erscheint ein Pop-up in der App auf beiden Geräten. Dort siehst du dann eine Reihe von Emojis oder Zahlen, die du miteinander vergleichen musst. Am besten hältst du beide Geräte bereit, bevor du die Verifizierung startest. 🤳", - "presenceStyle": "Statusmeldungen:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Status-Nachrichten anderer Benutzer anzeigen", "@presencesToggle": { "type": "String", @@ -2666,18 +2354,7 @@ "customEmojisAndStickersBody": "Eigene Emojis oder Sticker zur Nutzung im Chat hinzufügen oder teilen.", "globalChatId": "Globale Chat-ID", "accessAndVisibility": "Zugang und Sichtbarkeit", - "hideMemberChangesInPublicChats": "Mitglieder-Änderungen in öffentlichen Chats ausblenden", "accessAndVisibilityDescription": "Wer darf dem Chat beitreten und wie kann der Chat gefunden werden.", - "hideMemberChangesInPublicChatsBody": "Zeige keine Beitritt- oder Verlassen-Ereignisse von Mitgliedern in der Timeline an, um die Lesbarkeit in öffentlichen Chats zu verbessern.", - "userWouldLikeToChangeTheChat": "{user} würde dem Chat gerne beitreten.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Es wurde noch kein öffentlicher Link erstellt", "chatCanBeDiscoveredViaSearchOnServer": "Chat kann über die Suche auf {server} gefunden werden", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2694,7 +2371,6 @@ "hideRedactedMessagesBody": "Wenn jemand eine Nachricht schwärzt/löscht, dann wird diese Nachricht im Chat nicht mehr sichtbar sein.", "hideInvalidOrUnknownMessageFormats": "Ungültige und unbekannte Nachrichten-Formate ausblenden", "overview": "Übersicht", - "notifyMeFor": "Benachrichtige mich für", "passwordRecoverySettings": "Passwort-Wiederherstellungs-Einstellungen", "knock": "Anklopfen", "knocking": "Klopft", @@ -2706,16 +2382,6 @@ "usersMustKnock": "Benutzer müssen anklopfen", "noOneCanJoin": "Niemand kann beitreten", "createNewAddress": "Neue Adresse erstellen", - "userRole": "Benutzerrolle", - "minimumPowerLevel": "{level} is das minimale Power-Level.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "publicChatAddresses": "Öffentliche Chat-Adressen", "gallery": "Galerie", "files": "Dateien", @@ -2733,7 +2399,6 @@ "searchMore": "Weiter suchen ...", "unread": "Ungelesen", "noMoreChatsFound": "Keine weiteren Chats gefunden ...", - "joinedChats": "Beigetretene Chats", "space": "Space", "spaces": "Spaces", "goToSpace": "Geh zum Space: {space}", @@ -2743,18 +2408,6 @@ }, "markAsUnread": "Als ungelesen markieren", "swipeRightToLeftToReply": "Wische von rechts nach links zum Antworten", - "countChatsAndCountParticipants": "{chats} Chats und {participants} Teilnehmer", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "changeGeneralChatSettings": "Allgemeine Chat-Einstellungen ändern", "userLevel": "{level} - Benutzer", "@userLevel": { @@ -2810,11 +2463,8 @@ "changelog": "Änderungsprotokoll", "sendCanceled": "Senden abgebrochen", "noChatsFoundHere": "Hier wurden noch keine Chats gefunden. Starte einen neuen Chat mit jemandem, indem du die Schaltfläche unten verwenden. ⤵️", - "whatIsAHomeserver": "Was ist ein Homeserver?", "doesNotSeemToBeAValidHomeserver": "Scheint kein kompatibler Homeserver zu sein. Falsche URL?", "loginWithMatrixId": "Mit Matrix-ID anmelden", - "discoverHomeservers": "Server suchen", - "homeserverDescription": "Alle deine Daten werden auf einem Homeserver gespeichert, so wie bei einem E-Mail Anbieter. Du kannst aussuchen, welchen Homeserver du benutzen willst und kannst trotzdem mit allen kommunizieren. Erfahre mehr auf https://matrix.org.", "sendingAttachment": "Anhang wird gesendet ...", "generatingVideoThumbnail": "Generiere Video-Vorschaubild ...", "serverLimitReached": "Server-Limit erreicht! Warte {seconds} Sekunden ...", @@ -2892,7 +2542,6 @@ "compress": "Komprimieren", "supportPage": "Support-Seite", "serverInformation": "Server-Informationen:", - "appIntroduction": "Mit FluffyChat kannst du über verschiedene Messenger hinweg mit deinen Freunden chatten. Erfahre mehr dazu auf https://matrix.org oder tippe einfach auf *Fortfahren*.", "newChatRequest": "📩 Neue Chat-Anfrage", "synchronizingPleaseWaitCounter": " Synchronisierung… ({percentage}%)", "@synchronizingPleaseWaitCounter": { @@ -3007,9 +2656,6 @@ } } }, - "normalUser": "Normaler Benutzer", - "setCustomPermissionLevel": "Benutzerdefinierte Berechtigungsstufe festlegen", - "setPermissionsLevelDescription": "Bitte wählen Sie unten eine vordefinierte Rolle aus oder geben Sie eine benutzerdefinierte Berechtigungsstufe zwischen 0 und 100 ein.", "approve": "Genehmigen", "youHaveKnocked": "Du hast geklopft", "pleaseWaitUntilInvited": "Bitte warte nun, bis dich jemand aus dem Raum auffordert.", @@ -3023,10 +2669,6 @@ "noMessagesYet": "Noch keine Nachrichten", "longPressToRecordVoiceMessage": "Lange drücken, um eine Sprachnachricht aufzunehmen.", "pause": "Pause", - "newSubSpace": "Neuer Sub-Space", - "moveToDifferentSpace": "In einen anderen space wechseln", - "moveUp": "Nach oben", - "moveDown": "Nach unten", "removeFromSpaceDescription": "Der Chat wird aus dem Space entfernt, erscheint aber weiterhin in Ihrer Chatliste.", "countChats": "{chats} Chats", "@countChats": { @@ -3055,7 +2697,6 @@ } } }, - "donate": "Spenden", "resume": "Fortsetzen", "startedAPoll": "{username} hat eine Umfrage gestartet.", "@startedAPoll": { @@ -3070,7 +2711,6 @@ "startPoll": "Umfrage starten", "endPoll": "Umfrage beenden", "answersVisible": "Antworten sichtbar", - "answersHidden": "Antworten sind verborgen", "pollQuestion": "Frage", "answerOption": "Antwortmöglichkeit", "addAnswerOption": "Antwortoption hinzufügen", @@ -3135,5 +2775,36 @@ "logs": "Protokolle", "baseUrl": "Basis-URL", "advancedConfigs": "Erweiterte Konfigurationen", - "advancedConfigurations": "Erweiterte Konfigurationen" + "advancedConfigurations": "Erweiterte Konfigurationen", + "signIn": "Anmelden", + "createNewAccount": "Neues Konto erstellen", + "signUpGreeting": "FluffyChat ist dezentral! Wähle einen Server, auf dem du dein Konto erstellen möchtest, und los geht's!", + "signInGreeting": "Du hast bereits ein Konto bei Matrix? Willkommen zurück! Wähle deinen Homeserver aus und melde dich an.", + "appIntro": "Mit FluffyChat kannst du mit deinen Freunden chatten. Es ist ein sicherer, dezentralisierter [Matrix]-Messenger! Erfahre mehr auf https://matrix.org wenn du möchtest, oder melde dich einfach an.", + "theProcessWasCanceled": "Der Vorgang wurde abgebrochen.", + "federationBaseUrl": "Basis-URL der Föderation", + "clientWellKnownInformation": "Bekannte Informationen zum Client:", + "join": "Beitreten", + "searchOrEnterHomeserverAddress": "Homeserver-Adresse suchen oder eingeben", + "matrixId": "Matrix ID", + "reset": "Zurücksetzen", + "setPowerLevel": "Power-Level einstellen", + "makeModerator": "Zum Moderator machen", + "makeAdmin": "Zum Admin machen", + "removeModeratorRights": "Moderatorenrechte entziehen", + "removeAdminRights": "Adminrechte entziehen", + "powerLevel": "Power-Level", + "setPowerLevelDescription": "Die Power-Level legen fest, was ein Mitglied in diesem Raum tun darf und liegen üblicherweise zwischen 0 und 100.", + "owner": "Besitzer", + "mute": "Stumm", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Neuen Chat erstellen", + "supportFluffyChat": "FluffyChat unterstützen", + "support": "Unterstützen", + "fluffyChatSupportBannerMessage": "FluffyChat braucht DEINE Hilfe!\n❤️❤️❤️\nFluffyChat wird immer kostenlos bleiben, aber Entwicklung und Hosting kosten Geld.\nDie Zukunft des Projekts hängt von deiner Unterstützung ab.", + "skipSupportingFluffyChat": "FluffyChat unterstützen überspringen", + "iDoNotWantToSupport": "Ich möchte nicht unterstützen", + "iAlreadySupportFluffyChat": "I unterstütze FluffyChat bereits" } diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index 24b1e2ea..cf2c35e4 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -136,18 +136,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "Ο οικιακός διακομιστής υποστηρίζει τις εκδόσεις Spec:\n{serverVersions}\nΑλλά αυτή η εφαρμογή υποστηρίζει μόνο {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "addToSpace": "Προσθήκη στο χώρο", "@addToSpace": {}, "about": "Σχετικά", @@ -173,8 +161,6 @@ } } }, - "addChatDescription": "Πρόσθεσε μια περιγραφή συνομιλίας...", - "@addChatDescription": {}, "cancel": "Ακύρωση", "@cancel": { "type": "String", @@ -249,11 +235,6 @@ }, "commandHint_googly": "Στείλε αστεία μάτια", "@commandHint_googly": {}, - "botMessages": "Μηνύματα bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "importNow": "Εισαγωγή τώρα", "@importNow": {}, "anyoneCanJoin": "Οποιοσδήποτε μπορεί να συμμετάσχει", @@ -265,14 +246,8 @@ "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, - "setCustomPermissionLevel": "Όρισε προσαρμοσμένο επίπεδο άδειας", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Επέλεξε έναν προκαθορισμένο ρόλο παρακάτω ή εισήγαγε ένα προσαρμοσμένο επίπεδο άδειας μεταξύ 0 και 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Αγνόηση χρήστη", "@ignoreUser": {}, - "normalUser": "Κανονικός χρήστης", - "@normalUser": {}, "aboutHomeserver": "Σχετικά με {homeserver}", "@aboutHomeserver": { "type": "String", @@ -288,18 +263,6 @@ "@appLockDescription": {}, "swipeRightToLeftToReply": "Σύρσιμο δεξιά προς αριστερά για απάντηση", "@swipeRightToLeftToReply": {}, - "countChatsAndCountParticipants": "{chats} συνομιλίες και {participants} συμμετέχοντες", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Δεν βρέθηκαν άλλες συνομιλίες...", "@noMoreChatsFound": {}, "noChatsFoundHere": "Δεν υπάρχουν συνομιλίες ακόμα. Ξεκίνα μια νέα συνομιλία με κάποιον χρησιμοποιώντας το κουμπί παρακάτω. ⤵️", @@ -456,8 +419,6 @@ "type": "String", "placeholders": {} }, - "joinedChats": "Συνδεδεμένες συνομιλίες", - "@joinedChats": {}, "chatBackup": "Αντίγραφο ασφαλείας συνομιλίας", "@chatBackup": { "type": "String", @@ -468,8 +429,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Η συνομιλία προστέθηκε στο δωμάτιο", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Συνομιλίες", "@chats": { "type": "String", @@ -500,4 +459,4 @@ "type": "String", "description": "Usage hint for the command /invite" } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index d90ff8b3..dfc8570f 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -1,3500 +1,2801 @@ { - "@@locale": "en", - "@@last_modified": "2021-08-14 12:38:37.885451", - "alwaysUse24HourFormat": "false", - "@alwaysUse24HourFormat": { - "description": "Set to true to always display time of day in 24 hour format." - }, - "repeatPassword": "Repeat password", - "@repeatPassword": {}, - "notAnImage": "Not an image file.", - "@notAnImage": {}, - "setCustomPermissionLevel": "Set custom permission level", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Please choose a predefined role below or enter a custom permission level between 0 and 100.", - "@setPermissionsLevelDescription": {}, - "ignoreUser": "Ignore user", - "@ignoreUser": {}, - "normalUser": "Normal user", - "@normalUser": {}, - "remove": "Remove", - "@remove": { - "type": "String", - "placeholders": {} - }, - "importNow": "Import now", - "@importNow": {}, - "importEmojis": "Import Emojis", - "@importEmojis": {}, - "importFromZipFile": "Import from .zip file", - "@importFromZipFile": {}, - "exportEmotePack": "Export Emote pack as .zip", - "@exportEmotePack": {}, - "replace": "Replace", - "@replace": {}, - "about": "About", - "@about": {}, - "aboutHomeserver": "About {homeserver}", - "@aboutHomeserver": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "accept": "Accept", - "@accept": { - "type": "String", - "placeholders": {} - }, - "acceptedTheInvitation": "👍 {username} accepted the invitation", - "@acceptedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "account": "Account", - "@account": { - "type": "String", - "placeholders": {} - }, - "activatedEndToEndEncryption": "🔐 {username} activated end to end encryption", - "@activatedEndToEndEncryption": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "addEmail": "Add email", - "@addEmail": { - "type": "String", - "placeholders": {} - }, - "confirmMatrixId": "Please confirm your Matrix ID in order to delete your account.", - "@confirmMatrixId": {}, - "supposedMxid": "This should be {mxid}", - "@supposedMxid": { - "type": "String", - "placeholders": { - "mxid": { - "type": "String" - } - } - }, - "addChatDescription": "Add a chat description...", - "@addChatDescription": {}, - "addToSpace": "Add to space", - "@addToSpace": {}, - "admin": "Admin", - "@admin": { - "type": "String", - "placeholders": {} - }, - "alias": "alias", - "@alias": { - "type": "String", - "placeholders": {} - }, - "all": "All", - "@all": { - "type": "String", - "placeholders": {} - }, - "allChats": "All chats", - "@allChats": { - "type": "String", - "placeholders": {} - }, - "commandHint_roomupgrade": "Upgrade this room to the given room version", - "@commandHint_roomupgrade": {}, - "commandHint_googly": "Send some googly eyes", - "@commandHint_googly": {}, - "commandHint_cuddle": "Send a cuddle", - "@commandHint_cuddle": {}, - "commandHint_hug": "Send a hug", - "@commandHint_hug": {}, - "googlyEyesContent": "{senderName} sends you googly eyes", - "@googlyEyesContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "cuddleContent": "{senderName} cuddles you", - "@cuddleContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "hugContent": "{senderName} hugs you", - "@hugContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "answeredTheCall": "{senderName} answered the call", - "@answeredTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "anyoneCanJoin": "Anyone can join", - "@anyoneCanJoin": { - "type": "String", - "placeholders": {} - }, - "appLock": "App lock", - "@appLock": { - "type": "String", - "placeholders": {} - }, - "appLockDescription": "Lock the app when not using with a pin code", - "@appLockDescription": {}, - "archive": "Archive", - "@archive": { - "type": "String", - "placeholders": {} - }, - "areGuestsAllowedToJoin": "Are guest users allowed to join", - "@areGuestsAllowedToJoin": { - "type": "String", - "placeholders": {} - }, - "areYouSure": "Are you sure?", - "@areYouSure": { - "type": "String", - "placeholders": {} - }, - "areYouSureYouWantToLogout": "Are you sure you want to log out?", - "@areYouSureYouWantToLogout": { - "type": "String", - "placeholders": {} - }, - "askSSSSSign": "To be able to sign the other person, please enter your secure store passphrase or recovery key.", - "@askSSSSSign": { - "type": "String", - "placeholders": {} - }, - "askVerificationRequest": "Accept this verification request from {username}?", - "@askVerificationRequest": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "autoplayImages": "Automatically play animated stickers and emotes", - "@autoplayImages": { - "type": "String", - "placeholder": {} - }, - "badServerLoginTypesException": "The homeserver supports the login types:\n{serverVersions}\nBut this app supports only:\n{supportedVersions}", - "@badServerLoginTypesException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "sendTypingNotifications": "Send typing notifications", - "@sendTypingNotifications": {}, - "swipeRightToLeftToReply": "Swipe right to left to reply", - "@swipeRightToLeftToReply": {}, - "sendOnEnter": "Send on enter", - "@sendOnEnter": {}, - "badServerVersionsException": "The homeserver supports the Spec versions:\n{serverVersions}\nBut this app supports only {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "countChatsAndCountParticipants": "{chats} chats and {participants} participants", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "noMoreChatsFound": "No more chats found...", - "@noMoreChatsFound": {}, - "noChatsFoundHere": "No chats found here yet. Start a new chat with someone by using the button below. ⤵️", - "@noChatsFoundHere": {}, - "joinedChats": "Joined chats", - "@joinedChats": {}, - "unread": "Unread", - "@unread": {}, - "space": "Space", - "@space": {}, - "spaces": "Spaces", - "@spaces": {}, - "banFromChat": "Ban from chat", - "@banFromChat": { - "type": "String", - "placeholders": {} - }, - "banned": "Banned", - "@banned": { - "type": "String", - "placeholders": {} - }, - "bannedUser": "{username} banned {targetName}", - "@bannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "blockDevice": "Block Device", - "@blockDevice": { - "type": "String", - "placeholders": {} - }, - "blocked": "Blocked", - "@blocked": { - "type": "String", - "placeholders": {} - }, - "botMessages": "Bot messages", - "@botMessages": { - "type": "String", - "placeholders": {} - }, - "cancel": "Cancel", - "@cancel": { - "type": "String", - "placeholders": {} - }, - "cantOpenUri": "Can't open the URI {uri}", - "@cantOpenUri": { - "type": "String", - "placeholders": { - "uri": { - "type": "String" - } - } - }, - "changeDeviceName": "Change device name", - "@changeDeviceName": { - "type": "String", - "placeholders": {} - }, - "changedTheChatAvatar": "{username} changed the chat avatar", - "@changedTheChatAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheChatDescription": "{username} changed the chat description", - "changedTheChatDescriptionTo": "{username} changed the chat description to: '{description}'", - "@changedTheChatDescriptionTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "description": { - "type": "String" - } - } - }, - "changedTheChatName": "{username} changed the chat name", - "changedTheChatNameTo": "{username} changed the chat name to: '{chatname}'", - "@changedTheChatNameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "chatname": { - "type": "String" - } - } - }, - "changedTheChatPermissions": "{username} changed the chat permissions", - "@changedTheChatPermissions": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheDisplaynameTo": "{username} changed their displayname to: '{displayname}'", - "@changedTheDisplaynameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "displayname": { - "type": "String" - } - } - }, - "changedTheGuestAccessRules": "{username} changed the guest access rules", - "@changedTheGuestAccessRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRulesTo": "{username} changed the guest access rules to: {rules}", - "@changedTheGuestAccessRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheHistoryVisibility": "{username} changed the history visibility", - "@changedTheHistoryVisibility": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheHistoryVisibilityTo": "{username} changed the history visibility to: {rules}", - "@changedTheHistoryVisibilityTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheJoinRules": "{username} changed the join rules", - "@changedTheJoinRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheJoinRulesTo": "{username} changed the join rules to: {joinRules}", - "@changedTheJoinRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "joinRules": { - "type": "String" - } - } - }, - "changedTheProfileAvatar": "{username} changed their avatar", - "@changedTheProfileAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomAliases": "{username} changed the room aliases", - "@changedTheRoomAliases": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomInvitationLink": "{username} changed the invitation link", - "@changedTheRoomInvitationLink": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changePassword": "Change password", - "@changePassword": { - "type": "String", - "placeholders": {} - }, - "changeTheHomeserver": "Change the homeserver", - "@changeTheHomeserver": { - "type": "String", - "placeholders": {} - }, - "changeTheme": "Change your style", - "@changeTheme": { - "type": "String", - "placeholders": {} - }, - "changeTheNameOfTheGroup": "Change the name of the group", - "@changeTheNameOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "changeYourAvatar": "Change your avatar", - "@changeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "channelCorruptedDecryptError": "The encryption has been corrupted", - "@channelCorruptedDecryptError": { - "type": "String", - "placeholders": {} - }, - "chat": "Chat", - "@chat": { - "type": "String", - "placeholders": {} - }, - "yourChatBackupHasBeenSetUp": "Your chat backup has been set up.", - "@yourChatBackupHasBeenSetUp": {}, - "chatBackup": "Chat backup", - "@chatBackup": { - "type": "String", - "placeholders": {} - }, - "chatBackupDescription": "Your messages are secured with a recovery key. Please make sure you don't lose it.", - "@chatBackupDescription": { - "type": "String", - "placeholders": {} - }, - "chatDetails": "Chat details", - "@chatDetails": { - "type": "String", - "placeholders": {} - }, - "chatHasBeenAddedToThisSpace": "Chat has been added to this space", - "@chatHasBeenAddedToThisSpace": {}, - "chats": "Chats", - "@chats": { - "type": "String", - "placeholders": {} - }, - "chooseAStrongPassword": "Choose a strong password", - "@chooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "clearArchive": "Clear archive", - "@clearArchive": {}, - "close": "Close", - "@close": { - "type": "String", - "placeholders": {} - }, - "commandHint_markasdm": "Mark as direct message room for the giving Matrix ID", - "@commandHint_markasdm": {}, - "commandHint_markasgroup": "Mark as group", - "@commandHint_markasgroup": {}, - "commandHint_ban": "Ban the given user from this room", - "@commandHint_ban": { - "type": "String", - "description": "Usage hint for the command /ban" - }, - "commandHint_clearcache": "Clear cache", - "@commandHint_clearcache": { - "type": "String", - "description": "Usage hint for the command /clearcache" - }, - "commandHint_create": "Create an empty group chat\nUse --no-encryption to disable encryption", - "@commandHint_create": { - "type": "String", - "description": "Usage hint for the command /create" - }, - "commandHint_discardsession": "Discard session", - "@commandHint_discardsession": { - "type": "String", - "description": "Usage hint for the command /discardsession" - }, - "commandHint_dm": "Start a direct chat\nUse --no-encryption to disable encryption", - "@commandHint_dm": { - "type": "String", - "description": "Usage hint for the command /dm" - }, - "commandHint_html": "Send HTML-formatted text", - "@commandHint_html": { - "type": "String", - "description": "Usage hint for the command /html" - }, - "commandHint_invite": "Invite the given user to this room", - "@commandHint_invite": { - "type": "String", - "description": "Usage hint for the command /invite" - }, - "commandHint_join": "Join the given room", - "@commandHint_join": { - "type": "String", - "description": "Usage hint for the command /join" - }, - "commandHint_kick": "Remove the given user from this room", - "@commandHint_kick": { - "type": "String", - "description": "Usage hint for the command /kick" - }, - "commandHint_leave": "Leave this room", - "@commandHint_leave": { - "type": "String", - "description": "Usage hint for the command /leave" - }, - "commandHint_me": "Describe yourself", - "@commandHint_me": { - "type": "String", - "description": "Usage hint for the command /me" - }, - "commandHint_myroomavatar": "Set your picture for this room (by mxc-uri)", - "@commandHint_myroomavatar": { - "type": "String", - "description": "Usage hint for the command /myroomavatar" - }, - "commandHint_myroomnick": "Set your display name for this room", - "@commandHint_myroomnick": { - "type": "String", - "description": "Usage hint for the command /myroomnick" - }, - "commandHint_op": "Set the given user's power level (default: 50)", - "@commandHint_op": { - "type": "String", - "description": "Usage hint for the command /op" - }, - "commandHint_plain": "Send unformatted text", - "@commandHint_plain": { - "type": "String", - "description": "Usage hint for the command /plain" - }, - "commandHint_react": "Send reply as a reaction", - "@commandHint_react": { - "type": "String", - "description": "Usage hint for the command /react" - }, - "commandHint_send": "Send text", - "@commandHint_send": { - "type": "String", - "description": "Usage hint for the command /send" - }, - "commandHint_unban": "Unban the given user from this room", - "@commandHint_unban": { - "type": "String", - "description": "Usage hint for the command /unban" - }, - "commandInvalid": "Command invalid", - "@commandInvalid": { - "type": "String" - }, - "commandMissing": "{command} is not a command.", - "@commandMissing": { - "type": "String", - "placeholders": { - "command": { - "type": "String" - } + "@@locale": "en", + "@@last_modified": "2021-08-14 12:38:37.885451", + "alwaysUse24HourFormat": "false", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." }, - "description": "State that {command} is not a valid /command." - }, - "compareEmojiMatch": "Please compare the emojis", - "@compareEmojiMatch": { - "type": "String", - "placeholders": {} - }, - "compareNumbersMatch": "Please compare the numbers", - "@compareNumbersMatch": { - "type": "String", - "placeholders": {} - }, - "configureChat": "Configure chat", - "@configureChat": { - "type": "String", - "placeholders": {} - }, - "confirm": "Confirm", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Connect", - "@connect": { - "type": "String", - "placeholders": {} - }, - "contactHasBeenInvitedToTheGroup": "Contact has been invited to the group", - "@contactHasBeenInvitedToTheGroup": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Contains display name", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Contains username", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "contentHasBeenReported": "The content has been reported to the server admins", - "@contentHasBeenReported": { - "type": "String", - "placeholders": {} - }, - "copiedToClipboard": "Copied to clipboard", - "@copiedToClipboard": { - "type": "String", - "placeholders": {} - }, - "copy": "Copy", - "@copy": { - "type": "String", - "placeholders": {} - }, - "copyToClipboard": "Copy to clipboard", - "@copyToClipboard": { - "type": "String", - "placeholders": {} - }, - "couldNotDecryptMessage": "Could not decrypt message: {error}", - "@couldNotDecryptMessage": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "checkList": "Check list", - "@checkList": {}, - "countParticipants": "{count} participants", - "@countParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "countInvited": "{count} invited", - "@countInvited": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "create": "Create", - "@create": { - "type": "String", - "placeholders": {} - }, - "createdTheChat": "💬 {username} created the chat", - "@createdTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "createGroup": "Create group", - "@createGroup": {}, - "createNewSpace": "New space", - "@createNewSpace": { - "type": "String", - "placeholders": {} - }, - "currentlyActive": "Currently active", - "@currentlyActive": { - "type": "String", - "placeholders": {} - }, - "darkTheme": "Dark", - "@darkTheme": { - "type": "String", - "placeholders": {} - }, - "dateAndTimeOfDay": "{date}, {timeOfDay}", - "@dateAndTimeOfDay": { - "type": "String", - "placeholders": { - "date": { - "type": "String" - }, - "timeOfDay": { - "type": "String" - } - } - }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "deactivateAccountWarning": "This will deactivate your user account. This can not be undone! Are you sure?", - "@deactivateAccountWarning": { - "type": "String", - "placeholders": {} - }, - "defaultPermissionLevel": "Default permission level for new users", - "@defaultPermissionLevel": { - "type": "String", - "placeholders": {} - }, - "delete": "Delete", - "@delete": { - "type": "String", - "placeholders": {} - }, - "deleteAccount": "Delete account", - "@deleteAccount": { - "type": "String", - "placeholders": {} - }, - "deleteMessage": "Delete message", - "@deleteMessage": { - "type": "String", - "placeholders": {} - }, - "device": "Device", - "@device": { - "type": "String", - "placeholders": {} - }, - "deviceId": "Device ID", - "@deviceId": { - "type": "String", - "placeholders": {} - }, - "devices": "Devices", - "@devices": { - "type": "String", - "placeholders": {} - }, - "directChats": "Direct Chats", - "@directChats": { - "type": "String", - "placeholders": {} - }, - "allRooms": "All Group Chats", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "displaynameHasBeenChanged": "Displayname has been changed", - "@displaynameHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "downloadFile": "Download file", - "@downloadFile": { - "type": "String", - "placeholders": {} - }, - "edit": "Edit", - "@edit": { - "type": "String", - "placeholders": {} - }, - "editBlockedServers": "Edit blocked servers", - "@editBlockedServers": { - "type": "String", - "placeholders": {} - }, - "chatPermissions": "Chat permissions", - "@chatPermissions": {}, - "editDisplayname": "Edit displayname", - "@editDisplayname": { - "type": "String", - "placeholders": {} - }, - "editRoomAliases": "Edit room aliases", - "@editRoomAliases": { - "type": "String", - "placeholders": {} - }, - "editRoomAvatar": "Edit room avatar", - "@editRoomAvatar": { - "type": "String", - "placeholders": {} - }, - "emoteExists": "Emote already exists!", - "@emoteExists": { - "type": "String", - "placeholders": {} - }, - "emoteInvalid": "Invalid emote shortcode!", - "@emoteInvalid": { - "type": "String", - "placeholders": {} - }, - "emoteKeyboardNoRecents": "Recently-used emotes will appear here...", - "@emoteKeyboardNoRecents": { - "type": "String", - "placeholders": {} - }, - "emotePacks": "Emote packs for room", - "@emotePacks": { - "type": "String", - "placeholders": {} - }, - "emoteSettings": "Emote Settings", - "@emoteSettings": { - "type": "String", - "placeholders": {} - }, - "globalChatId": "Global chat ID", - "@globalChatId": {}, - "accessAndVisibility": "Access and visibility", - "@accessAndVisibility": {}, - "accessAndVisibilityDescription": "Who is allowed to join this chat and how the chat can be discovered.", - "@accessAndVisibilityDescription": {}, - "calls": "Calls", - "@calls": {}, - "customEmojisAndStickers": "Custom emojis and stickers", - "@customEmojisAndStickers": {}, - "customEmojisAndStickersBody": "Add or share custom emojis or stickers which can be used in any chat.", - "@customEmojisAndStickersBody": {}, - "emoteShortcode": "Emote shortcode", - "@emoteShortcode": { - "type": "String", - "placeholders": {} - }, - "emoteWarnNeedToPick": "You need to pick an emote shortcode and an image!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, - "emptyChat": "Empty chat", - "@emptyChat": { - "type": "String", - "placeholders": {} - }, - "enableEmotesGlobally": "Enable emote pack globally", - "@enableEmotesGlobally": { - "type": "String", - "placeholders": {} - }, - "enableEncryption": "Enable encryption", - "@enableEncryption": { - "type": "String", - "placeholders": {} - }, - "enableEncryptionWarning": "You won't be able to disable the encryption anymore. Are you sure?", - "@enableEncryptionWarning": { - "type": "String", - "placeholders": {} - }, - "encrypted": "Encrypted", - "@encrypted": { - "type": "String", - "placeholders": {} - }, - "encryption": "Encryption", - "@encryption": { - "type": "String", - "placeholders": {} - }, - "encryptionNotEnabled": "Encryption is not enabled", - "@encryptionNotEnabled": { - "type": "String", - "placeholders": {} - }, - "endedTheCall": "{senderName} ended the call", - "@endedTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "enterAnEmailAddress": "Enter an email address", - "@enterAnEmailAddress": { - "type": "String", - "placeholders": {} - }, - "homeserver": "Homeserver", - "@homeserver": {}, - "enterYourHomeserver": "Enter your homeserver", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "errorObtainingLocation": "Error obtaining location: {error}", - "@errorObtainingLocation": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "everythingReady": "Everything ready!", - "@everythingReady": { - "type": "String", - "placeholders": {} - }, - "extremeOffensive": "Extremely offensive", - "@extremeOffensive": { - "type": "String", - "placeholders": {} - }, - "fileName": "File name", - "@fileName": { - "type": "String", - "placeholders": {} - }, - "fluffychat": "FluffyChat", - "@fluffychat": { - "type": "String", - "placeholders": {} - }, - "fontSize": "Font size", - "@fontSize": { - "type": "String", - "placeholders": {} - }, - "forward": "Forward", - "@forward": { - "type": "String", - "placeholders": {} - }, - "fromJoining": "From joining", - "@fromJoining": { - "type": "String", - "placeholders": {} - }, - "fromTheInvitation": "From the invitation", - "@fromTheInvitation": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "Go to the new room", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "group": "Group", - "@group": { - "type": "String", - "placeholders": {} - }, - "chatDescription": "Chat description", - "@chatDescription": {}, - "chatDescriptionHasBeenChanged": "Chat description changed", - "@chatDescriptionHasBeenChanged": {}, - "groupIsPublic": "Group is public", - "@groupIsPublic": { - "type": "String", - "placeholders": {} - }, - "groups": "Groups", - "@groups": { - "type": "String", - "placeholders": {} - }, - "groupWith": "Group with {displayname}", - "@groupWith": { - "type": "String", - "placeholders": { - "displayname": { - "type": "String" - } - } - }, - "guestsAreForbidden": "Guests are forbidden", - "@guestsAreForbidden": { - "type": "String", - "placeholders": {} - }, - "guestsCanJoin": "Guests can join", - "@guestsCanJoin": { - "type": "String", - "placeholders": {} - }, - "hasWithdrawnTheInvitationFor": "{username} has withdrawn the invitation for {targetName}", - "@hasWithdrawnTheInvitationFor": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "help": "Help", - "@help": { - "type": "String", - "placeholders": {} - }, - "hideRedactedEvents": "Hide redacted events", - "@hideRedactedEvents": { - "type": "String", - "placeholders": {} - }, - "hideRedactedMessages": "Hide redacted messages", - "@hideRedactedMessages": {}, - "hideRedactedMessagesBody": "If someone redacts a message, this message won't be visible in the chat anymore.", - "@hideRedactedMessagesBody": {}, - "hideInvalidOrUnknownMessageFormats": "Hide invalid or unknown message formats", - "@hideInvalidOrUnknownMessageFormats": {}, - "howOffensiveIsThisContent": "How offensive is this content?", - "@howOffensiveIsThisContent": { - "type": "String", - "placeholders": {} - }, - "id": "ID", - "@id": { - "type": "String", - "placeholders": {} - }, - "identity": "Identity", - "@identity": { - "type": "String", - "placeholders": {} - }, - "block": "Block", - "@block": {}, - "blockedUsers": "Blocked users", - "@blockedUsers": {}, - "blockListDescription": "You can block users who are disturbing you. You won't be able to receive any messages or room invites from the users on your personal block list.", - "@blockListDescription": {}, - "blockUsername": "Ignore username", - "@blockUsername": {}, - "iHaveClickedOnLink": "I have clicked on the link", - "@iHaveClickedOnLink": { - "type": "String", - "placeholders": {} - }, - "incorrectPassphraseOrKey": "Incorrect passphrase or recovery key", - "@incorrectPassphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "inoffensive": "Inoffensive", - "@inoffensive": { - "type": "String", - "placeholders": {} - }, - "inviteContact": "Invite contact", - "@inviteContact": { - "type": "String", - "placeholders": {} - }, - "inviteContactToGroupQuestion": "Do you want to invite {contact} to the chat \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, - "inviteContactToGroup": "Invite contact to {groupName}", - "@inviteContactToGroup": { - "type": "String", - "placeholders": { - "groupName": { - "type": "String" - } - } - }, - "noChatDescriptionYet": "No chat description created yet.", - "@noChatDescriptionYet": {}, - "tryAgain": "Try again", - "@tryAgain": {}, - "invalidServerName": "Invalid server name", - "@invalidServerName": {}, - "invited": "Invited", - "@invited": { - "type": "String", - "placeholders": {} - }, - "redactMessageDescription": "The message will be redacted for all participants in this conversation. This cannot be undone.", - "@redactMessageDescription": {}, - "optionalRedactReason": "(Optional) Reason for redacting this message...", - "@optionalRedactReason": {}, - "invitedUser": "📩 {username} invited {targetName}", - "@invitedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "invitedUsersOnly": "Invited users only", - "@invitedUsersOnly": { - "type": "String", - "placeholders": {} - }, - "inviteForMe": "Invite for me", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "inviteText": "{username} invited you to FluffyChat.\n1. Visit fluffychat.im and install the app \n2. Sign up or sign in \n3. Open the invite link: \n {link}", - "@inviteText": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "link": { - "type": "String" - } - } - }, - "isTyping": "is typing…", - "@isTyping": { - "type": "String", - "placeholders": {} - }, - "joinedTheChat": "👋 {username} joined the chat", - "@joinedTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "joinRoom": "Join room", - "@joinRoom": { - "type": "String", - "placeholders": {} - }, - "kicked": "👞 {username} kicked {targetName}", - "@kicked": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickedAndBanned": "🙅 {username} kicked and banned {targetName}", - "@kickedAndBanned": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickFromChat": "Kick from chat", - "@kickFromChat": { - "type": "String", - "placeholders": {} - }, - "lastActiveAgo": "Last active: {localizedTimeShort}", - "@lastActiveAgo": { - "type": "String", - "placeholders": { - "localizedTimeShort": { - "type": "String" - } - } - }, - "leave": "Leave", - "@leave": { - "type": "String", - "placeholders": {} - }, - "leftTheChat": "Left the chat", - "@leftTheChat": { - "type": "String", - "placeholders": {} - }, - "license": "License", - "@license": { - "type": "String", - "placeholders": {} - }, - "lightTheme": "Light", - "@lightTheme": { - "type": "String", - "placeholders": {} - }, - "loadCountMoreParticipants": "Load {count} more participants", - "@loadCountMoreParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "dehydrate": "Export session and wipe device", - "@dehydrate": {}, - "dehydrateWarning": "This action cannot be undone. Ensure you safely store the backup file.", - "@dehydrateWarning": {}, - "dehydrateTor": "TOR Users: Export session", - "@dehydrateTor": {}, - "dehydrateTorLong": "For TOR users, it is recommended to export the session before closing the window.", - "@dehydrateTorLong": {}, - "hydrateTor": "TOR Users: Import session export", - "@hydrateTor": {}, - "hydrateTorLong": "Did you export your session last time on TOR? Quickly import it and continue chatting.", - "@hydrateTorLong": {}, - "hydrate": "Restore from backup file", - "@hydrate": {}, - "loadingPleaseWait": "Loading… Please wait.", - "@loadingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "loadMore": "Load more…", - "@loadMore": { - "type": "String", - "placeholders": {} - }, - "locationDisabledNotice": "Location services are disabled. Please enable them to be able to share your location.", - "@locationDisabledNotice": { - "type": "String", - "placeholders": {} - }, - "locationPermissionDeniedNotice": "Location permission denied. Please grant them to be able to share your location.", - "@locationPermissionDeniedNotice": { - "type": "String", - "placeholders": {} - }, - "login": "Login", - "@login": { - "type": "String", - "placeholders": {} - }, - "logInTo": "Log in to {homeserver}", - "@logInTo": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "logout": "Logout", - "@logout": { - "type": "String", - "placeholders": {} - }, - "memberChanges": "Member changes", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "mention": "Mention", - "@mention": { - "type": "String", - "placeholders": {} - }, - "messages": "Messages", - "@messages": { - "type": "String", - "placeholders": {} - }, - "messagesStyle": "Messages:", - "@messagesStyle": {}, - "moderator": "Moderator", - "@moderator": { - "type": "String", - "placeholders": {} - }, - "muteChat": "Mute chat", - "@muteChat": { - "type": "String", - "placeholders": {} - }, - "needPantalaimonWarning": "Please be aware that you need Pantalaimon to use end-to-end encryption for now.", - "@needPantalaimonWarning": { - "type": "String", - "placeholders": {} - }, - "newChat": "New chat", - "@newChat": { - "type": "String", - "placeholders": {} - }, - "newMessageInFluffyChat": "💬 New message in FluffyChat", - "@newMessageInFluffyChat": { - "type": "String", - "placeholders": {} - }, - "newVerificationRequest": "New verification request!", - "@newVerificationRequest": { - "type": "String", - "placeholders": {} - }, - "next": "Next", - "@next": { - "type": "String", - "placeholders": {} - }, - "no": "No", - "@no": { - "type": "String", - "placeholders": {} - }, - "noConnectionToTheServer": "No connection to the server", - "@noConnectionToTheServer": { - "type": "String", - "placeholders": {} - }, - "noEmotesFound": "No emotes found. 😕", - "@noEmotesFound": { - "type": "String", - "placeholders": {} - }, - "noEncryptionForPublicRooms": "You can only activate encryption as soon as the room is no longer publicly accessible.", - "@noEncryptionForPublicRooms": { - "type": "String", - "placeholders": {} - }, - "noGoogleServicesWarning": "Firebase Cloud Messaging doesn't appear to be available on your device. To still receive push notifications, we recommend installing ntfy. With ntfy or another Unified Push provider you can receive push notifications in a data secure way. You can download ntfy from the PlayStore or from F-Droid.", - "@noGoogleServicesWarning": { - "type": "String", - "placeholders": {} - }, - "noMatrixServer": "{server1} is no matrix server, use {server2} instead?", - "@noMatrixServer": { - "type": "String", - "placeholders": { - "server1": { - "type": "String" - }, - "server2": { - "type": "String" - } - } - }, - "shareInviteLink": "Share invite link", - "@shareInviteLink": {}, - "scanQrCode": "Scan QR code", - "@scanQrCode": {}, - "none": "None", - "@none": { - "type": "String", - "placeholders": {} - }, - "noPasswordRecoveryDescription": "You have not added a way to recover your password yet.", - "@noPasswordRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "noPermission": "No permission", - "@noPermission": { - "type": "String", - "placeholders": {} - }, - "noRoomsFound": "No rooms found…", - "@noRoomsFound": { - "type": "String", - "placeholders": {} - }, - "notifications": "Notifications", - "@notifications": { - "type": "String", - "placeholders": {} - }, - "notificationsEnabledForThisAccount": "Notifications enabled for this account", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, - "numUsersTyping": "{count} users are typing…", - "@numUsersTyping": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "obtainingLocation": "Obtaining location…", - "@obtainingLocation": { - "type": "String", - "placeholders": {} - }, - "offensive": "Offensive", - "@offensive": { - "type": "String", - "placeholders": {} - }, - "offline": "Offline", - "@offline": { - "type": "String", - "placeholders": {} - }, - "ok": "Ok", - "@ok": { - "type": "String", - "placeholders": {} - }, - "online": "Online", - "@online": { - "type": "String", - "placeholders": {} - }, - "onlineKeyBackupEnabled": "Online Key Backup is enabled", - "@onlineKeyBackupEnabled": { - "type": "String", - "placeholders": {} - }, - "oopsPushError": "Oops! Unfortunately, an error occurred when setting up the push notifications.", - "@oopsPushError": { - "type": "String", - "placeholders": {} - }, - "oopsSomethingWentWrong": "Oops, something went wrong…", - "@oopsSomethingWentWrong": { - "type": "String", - "placeholders": {} - }, - "openAppToReadMessages": "Open app to read messages", - "@openAppToReadMessages": { - "type": "String", - "placeholders": {} - }, - "openCamera": "Open camera", - "@openCamera": { - "type": "String", - "placeholders": {} - }, - "openVideoCamera": "Open camera for a video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "oneClientLoggedOut": "One of your clients has been logged out", - "@oneClientLoggedOut": {}, - "addAccount": "Add account", - "@addAccount": {}, - "editBundlesForAccount": "Edit bundles for this account", - "@editBundlesForAccount": {}, - "addToBundle": "Add to bundle", - "@addToBundle": {}, - "removeFromBundle": "Remove from this bundle", - "@removeFromBundle": {}, - "bundleName": "Bundle name", - "@bundleName": {}, - "enableMultiAccounts": "(BETA) Enable multi accounts on this device", - "@enableMultiAccounts": {}, - "openInMaps": "Open in maps", - "@openInMaps": { - "type": "String", - "placeholders": {} - }, - "link": "Link", - "@link": {}, - "serverRequiresEmail": "This server needs to validate your email address for registration.", - "@serverRequiresEmail": {}, - "or": "Or", - "@or": { - "type": "String", - "placeholders": {} - }, - "participant": "Participant", - "@participant": { - "type": "String", - "placeholders": {} - }, - "passphraseOrKey": "passphrase or recovery key", - "@passphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "password": "Password", - "@password": { - "type": "String", - "placeholders": {} - }, - "passwordForgotten": "Password forgotten", - "@passwordForgotten": { - "type": "String", - "placeholders": {} - }, - "passwordHasBeenChanged": "Password has been changed", - "@passwordHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "hideMemberChangesInPublicChats": "Hide member changes in public chats", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Do not show in the chat timeline if someone joins or leaves a public chat to improve readability.", - "@hideMemberChangesInPublicChatsBody": {}, - "overview": "Overview", - "@overview": {}, - "notifyMeFor": "Notify me for", - "@notifyMeFor": {}, - "passwordRecoverySettings": "Password recovery settings", - "@passwordRecoverySettings": {}, - "passwordRecovery": "Password recovery", - "@passwordRecovery": { - "type": "String", - "placeholders": {} - }, - "people": "People", - "@people": { - "type": "String", - "placeholders": {} - }, - "pickImage": "Pick an image", - "@pickImage": { - "type": "String", - "placeholders": {} - }, - "pin": "Pin", - "@pin": { - "type": "String", - "placeholders": {} - }, - "play": "Play {fileName}", - "@play": { - "type": "String", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "pleaseChoose": "Please choose", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, - "pleaseChooseAPasscode": "Please choose a pass code", - "@pleaseChooseAPasscode": { - "type": "String", - "placeholders": {} - }, - "pleaseClickOnLink": "Please click on the link in the email and then proceed.", - "@pleaseClickOnLink": { - "type": "String", - "placeholders": {} - }, - "pleaseEnter4Digits": "Please enter 4 digits or leave empty to disable app lock.", - "@pleaseEnter4Digits": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterRecoveryKey": "Please enter your recovery key:", - "@pleaseEnterRecoveryKey": {}, - "pleaseEnterYourPassword": "Please enter your password", - "@pleaseEnterYourPassword": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPin": "Please enter your pin", - "@pleaseEnterYourPin": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourUsername": "Please enter your username", - "@pleaseEnterYourUsername": { - "type": "String", - "placeholders": {} - }, - "pleaseFollowInstructionsOnWeb": "Please follow the instructions on the website and tap on next.", - "@pleaseFollowInstructionsOnWeb": { - "type": "String", - "placeholders": {} - }, - "privacy": "Privacy", - "@privacy": { - "type": "String", - "placeholders": {} - }, - "publicRooms": "Public Rooms", - "@publicRooms": { - "type": "String", - "placeholders": {} - }, - "pushRules": "Push rules", - "@pushRules": { - "type": "String", - "placeholders": {} - }, - "reason": "Reason", - "@reason": { - "type": "String", - "placeholders": {} - }, - "recording": "Recording", - "@recording": { - "type": "String", - "placeholders": {} - }, - "redactedBy": "Redacted by {username}", - "@redactedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "directChat": "Direct chat", - "@directChat": {}, - "redactedByBecause": "Redacted by {username} because: \"{reason}\"", - "@redactedByBecause": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "reason": { - "type": "String" - } - } - }, - "redactedAnEvent": "{username} redacted an event", - "@redactedAnEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "redactMessage": "Redact message", - "@redactMessage": { - "type": "String", - "placeholders": {} - }, - "register": "Register", - "@register": { - "type": "String", - "placeholders": {} - }, - "reject": "Reject", - "@reject": { - "type": "String", - "placeholders": {} - }, - "rejectedTheInvitation": "{username} rejected the invitation", - "@rejectedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "rejoin": "Rejoin", - "@rejoin": { - "type": "String", - "placeholders": {} - }, - "removeAllOtherDevices": "Remove all other devices", - "@removeAllOtherDevices": { - "type": "String", - "placeholders": {} - }, - "removedBy": "Removed by {username}", - "@removedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "removeDevice": "Remove device", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, - "unbanFromChat": "Unban from chat", - "@unbanFromChat": { - "type": "String", - "placeholders": {} - }, - "removeYourAvatar": "Remove your avatar", - "@removeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "replaceRoomWithNewerVersion": "Replace room with newer version", - "@replaceRoomWithNewerVersion": { - "type": "String", - "placeholders": {} - }, - "reply": "Reply", - "@reply": { - "type": "String", - "placeholders": {} - }, - "reportMessage": "Report message", - "@reportMessage": { - "type": "String", - "placeholders": {} - }, - "requestPermission": "Request permission", - "@requestPermission": { - "type": "String", - "placeholders": {} - }, - "roomHasBeenUpgraded": "Room has been upgraded", - "@roomHasBeenUpgraded": { - "type": "String", - "placeholders": {} - }, - "roomVersion": "Room version", - "@roomVersion": { - "type": "String", - "placeholders": {} - }, - "saveFile": "Save file", - "@saveFile": { - "type": "String", - "placeholders": {} - }, - "search": "Search", - "@search": { - "type": "String", - "placeholders": {} - }, - "security": "Security", - "@security": { - "type": "String", - "placeholders": {} - }, - "recoveryKey": "Recovery key", - "@recoveryKey": {}, - "recoveryKeyLost": "Recovery key lost?", - "@recoveryKeyLost": {}, - "seenByUser": "Seen by {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "send": "Send", - "@send": { - "type": "String", - "placeholders": {} - }, - "sendAMessage": "Send a message", - "@sendAMessage": { - "type": "String", - "placeholders": {} - }, - "sendAsText": "Send as text", - "@sendAsText": { - "type": "String" - }, - "sendAudio": "Send audio", - "@sendAudio": { - "type": "String", - "placeholders": {} - }, - "sendFile": "Send file", - "@sendFile": { - "type": "String", - "placeholders": {} - }, - "sendImage": "Send image", - "@sendImage": { - "type": "String", - "placeholders": {} - }, - "sendImages": "Send {count} image", - "@sendImages": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "sendMessages": "Send messages", - "@sendMessages": { - "type": "String", - "placeholders": {} - }, - "sendOriginal": "Send original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Send sticker", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendVideo": "Send video", - "@sendVideo": { - "type": "String", - "placeholders": {} - }, - "sentAFile": "📁 {username} sent a file", - "@sentAFile": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAnAudio": "🎤 {username} sent an audio", - "@sentAnAudio": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAPicture": "🖼️ {username} sent a picture", - "@sentAPicture": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentASticker": "😊 {username} sent a sticker", - "@sentASticker": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAVideo": "🎥 {username} sent a video", - "@sentAVideo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentCallInformations": "{senderName} sent call information", - "@sentCallInformations": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "separateChatTypes": "Separate Direct Chats and Groups", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "setAsCanonicalAlias": "Set as main alias", - "@setAsCanonicalAlias": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "Set custom emotes", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setChatDescription": "Set chat description", - "@setChatDescription": {}, - "setInvitationLink": "Set invitation link", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Set permissions level", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setStatus": "Set status", - "@setStatus": { - "type": "String", - "placeholders": {} - }, - "settings": "Settings", - "@settings": { - "type": "String", - "placeholders": {} - }, - "share": "Share", - "@share": { - "type": "String", - "placeholders": {} - }, - "sharedTheLocation": "{username} shared their location", - "@sharedTheLocation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "shareLocation": "Share location", - "@shareLocation": { - "type": "String", - "placeholders": {} - }, - "showPassword": "Show password", - "@showPassword": { - "type": "String", - "placeholders": {} - }, - "presenceStyle": "Presence:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "presencesToggle": "Show status messages from other users", - "@presencesToggle": { - "type": "String", - "placeholders": {} - }, - "singlesignon": "Single Sign on", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "skip": "Skip", - "@skip": { - "type": "String", - "placeholders": {} - }, - "sourceCode": "Source code", - "@sourceCode": { - "type": "String", - "placeholders": {} - }, - "spaceIsPublic": "Space is public", - "@spaceIsPublic": { - "type": "String", - "placeholders": {} - }, - "spaceName": "Space name", - "@spaceName": { - "type": "String", - "placeholders": {} - }, - "startedACall": "{senderName} started a call", - "@startedACall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "startFirstChat": "Start your first chat", - "@startFirstChat": {}, - "status": "Status", - "@status": { - "type": "String", - "placeholders": {} - }, - "statusExampleMessage": "How are you today?", - "@statusExampleMessage": { - "type": "String", - "placeholders": {} - }, - "submit": "Submit", - "@submit": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWait": "Synchronizing… Please wait.", - "@synchronizingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWaitCounter": " Synchronizing… ({percentage}%)", - "@synchronizingPleaseWaitCounter": { - "type": "String", - "placeholders": { - "percentage": { - "type": "String" - } - } - }, - "systemTheme": "System", - "@systemTheme": { - "type": "String", - "placeholders": {} - }, - "theyDontMatch": "They Don't Match", - "@theyDontMatch": { - "type": "String", - "placeholders": {} - }, - "theyMatch": "They Match", - "@theyMatch": { - "type": "String", - "placeholders": {} - }, - "title": "FluffyChat", - "@title": { - "description": "Title for the application", - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "Toggle Favorite", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Toggle Muted", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Mark Read/Unread", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "tooManyRequestsWarning": "Too many requests. Please try again later!", - "@tooManyRequestsWarning": { - "type": "String", - "placeholders": {} - }, - "transferFromAnotherDevice": "Transfer from another device", - "@transferFromAnotherDevice": { - "type": "String", - "placeholders": {} - }, - "tryToSendAgain": "Try to send again", - "@tryToSendAgain": { - "type": "String", - "placeholders": {} - }, - "unavailable": "Unavailable", - "@unavailable": { - "type": "String", - "placeholders": {} - }, - "unbannedUser": "{username} unbanned {targetName}", - "@unbannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "unblockDevice": "Unblock Device", - "@unblockDevice": { - "type": "String", - "placeholders": {} - }, - "unknownDevice": "Unknown device", - "@unknownDevice": { - "type": "String", - "placeholders": {} - }, - "unknownEncryptionAlgorithm": "Unknown encryption algorithm", - "@unknownEncryptionAlgorithm": { - "type": "String", - "placeholders": {} - }, - "unknownEvent": "Unknown event '{type}'", - "@unknownEvent": { - "type": "String", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "unmuteChat": "Unmute chat", - "@unmuteChat": { - "type": "String", - "placeholders": {} - }, - "unpin": "Unpin", - "@unpin": { - "type": "String", - "placeholders": {} - }, - "unreadChats": "{unreadCount, plural, =1{1 unread chat} other{{unreadCount} unread chats}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "userAndOthersAreTyping": "{username} and {count} others are typing…", - "@userAndOthersAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "userAndUserAreTyping": "{username} and {username2} are typing…", - "@userAndUserAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "username2": { - "type": "String" - } - } - }, - "userIsTyping": "{username} is typing…", - "@userIsTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "userLeftTheChat": "🚪 {username} left the chat", - "@userLeftTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "username": "Username", - "@username": { - "type": "String", - "placeholders": {} - }, - "userSentUnknownEvent": "{username} sent a {type} event", - "@userSentUnknownEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "type": { - "type": "String" - } - } - }, - "unverified": "Unverified", - "@unverified": {}, - "verified": "Verified", - "@verified": { - "type": "String", - "placeholders": {} - }, - "verify": "Verify", - "@verify": { - "type": "String", - "placeholders": {} - }, - "verifyStart": "Start Verification", - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "verifySuccess": "You successfully verified!", - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "verifyTitle": "Verifying other account", - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "videoCall": "Video call", - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "visibilityOfTheChatHistory": "Visibility of the chat history", - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "visibleForAllParticipants": "Visible for all participants", - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "visibleForEveryone": "Visible for everyone", - "@visibleForEveryone": { - "type": "String", - "placeholders": {} - }, - "voiceMessage": "Voice message", - "@voiceMessage": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerAcceptRequest": "Waiting for partner to accept the request…", - "@waitingPartnerAcceptRequest": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerEmoji": "Waiting for partner to accept the emoji…", - "@waitingPartnerEmoji": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerNumbers": "Waiting for partner to accept the numbers…", - "@waitingPartnerNumbers": { - "type": "String", - "placeholders": {} - }, - "wallpaper": "Wallpaper:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "warning": "Warning!", - "@warning": { - "type": "String", - "placeholders": {} - }, - "weSentYouAnEmail": "We sent you an email", - "@weSentYouAnEmail": { - "type": "String", - "placeholders": {} - }, - "whoCanPerformWhichAction": "Who can perform which action", - "@whoCanPerformWhichAction": { - "type": "String", - "placeholders": {} - }, - "whoIsAllowedToJoinThisGroup": "Who is allowed to join this group", - "@whoIsAllowedToJoinThisGroup": { - "type": "String", - "placeholders": {} - }, - "whyDoYouWantToReportThis": "Why do you want to report this?", - "@whyDoYouWantToReportThis": { - "type": "String", - "placeholders": {} - }, - "wipeChatBackup": "Wipe your chat backup to create a new recovery key?", - "@wipeChatBackup": { - "type": "String", - "placeholders": {} - }, - "withTheseAddressesRecoveryDescription": "With these addresses you can recover your password.", - "@withTheseAddressesRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "writeAMessage": "Write a message…", - "@writeAMessage": { - "type": "String", - "placeholders": {} - }, - "yes": "Yes", - "@yes": { - "type": "String", - "placeholders": {} - }, - "you": "You", - "@you": { - "type": "String", - "placeholders": {} - }, - "youAreNoLongerParticipatingInThisChat": "You are no longer participating in this chat", - "@youAreNoLongerParticipatingInThisChat": { - "type": "String", - "placeholders": {} - }, - "youHaveBeenBannedFromThisChat": "You have been banned from this chat", - "@youHaveBeenBannedFromThisChat": { - "type": "String", - "placeholders": {} - }, - "yourPublicKey": "Your public key", - "@yourPublicKey": { - "type": "String", - "placeholders": {} - }, - "messageInfo": "Message info", - "@messageInfo": {}, - "time": "Time", - "@time": {}, - "messageType": "Message Type", - "@messageType": {}, - "sender": "Sender", - "@sender": {}, - "openGallery": "Open gallery", - "@openGallery": {}, - "removeFromSpace": "Remove from space", - "@removeFromSpace": {}, - "addToSpaceDescription": "Select a space to add this chat to it.", - "@addToSpaceDescription": {}, - "start": "Start", - "@start": {}, - "pleaseEnterRecoveryKeyDescription": "To unlock your old messages, please enter your recovery key that has been generated in a previous session. Your recovery key is NOT your password.", - "@pleaseEnterRecoveryKeyDescription": {}, - "publish": "Publish", - "@publish": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "openChat": "Open Chat", - "@openChat": {}, - "markAsRead": "Mark as read", - "@markAsRead": {}, - "reportUser": "Report user", - "@reportUser": {}, - "dismiss": "Dismiss", - "@dismiss": {}, - "reactedWith": "{sender} reacted with {reaction}", - "@reactedWith": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "reaction": { - "type": "String" - } - } - }, - "pinMessage": "Pin to room", - "@pinMessage": {}, - "confirmEventUnpin": "Are you sure to permanently unpin the event?", - "@confirmEventUnpin": {}, - "emojis": "Emojis", - "@emojis": {}, - "placeCall": "Place call", - "@placeCall": {}, - "voiceCall": "Voice call", - "@voiceCall": {}, - "unsupportedAndroidVersion": "Unsupported Android version", - "@unsupportedAndroidVersion": {}, - "unsupportedAndroidVersionLong": "This feature requires a newer Android version. Please check for updates or Lineage OS support.", - "@unsupportedAndroidVersionLong": {}, - "videoCallsBetaWarning": "Please note that video calls are currently in beta. They might not work as expected or work at all on all platforms.", - "@videoCallsBetaWarning": {}, - "experimentalVideoCalls": "Experimental video calls", - "@experimentalVideoCalls": {}, - "emailOrUsername": "Email or username", - "@emailOrUsername": {}, - "indexedDbErrorTitle": "Private mode issues", - "@indexedDbErrorTitle": {}, - "indexedDbErrorLong": "The message storage is unfortunately not enabled in private mode by default.\nPlease visit\n - about:config\n - set dom.indexedDB.privateBrowsing.enabled to true\nOtherwise, it is not possible to run FluffyChat.", - "@indexedDbErrorLong": {}, - "switchToAccount": "Switch to account {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Next account", - "@nextAccount": {}, - "previousAccount": "Previous account", - "@previousAccount": {}, - "addWidget": "Add widget", - "@addWidget": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetEtherpad": "Text note", - "@widgetEtherpad": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Custom", - "@widgetCustom": {}, - "widgetName": "Name", - "@widgetName": {}, - "widgetUrlError": "This is not a valid URL.", - "@widgetUrlError": {}, - "widgetNameError": "Please provide a display name.", - "@widgetNameError": {}, - "errorAddingWidget": "Error adding the widget.", - "@errorAddingWidget": {}, - "youRejectedTheInvitation": "You rejected the invitation", - "@youRejectedTheInvitation": {}, - "youJoinedTheChat": "You joined the chat", - "@youJoinedTheChat": {}, - "youAcceptedTheInvitation": "👍 You accepted the invitation", - "@youAcceptedTheInvitation": {}, - "youBannedUser": "You banned {user}", - "@youBannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youHaveWithdrawnTheInvitationFor": "You have withdrawn the invitation for {user}", - "@youHaveWithdrawnTheInvitationFor": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedToBy": "📩 You have been invited via link to:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "youInvitedBy": "📩 You have been invited by {user}", - "@youInvitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "invitedBy": "📩 Invited by {user}", - "@invitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedUser": "📩 You invited {user}", - "@youInvitedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youKicked": "👞 You kicked {user}", - "@youKicked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youKickedAndBanned": "🙅 You kicked and banned {user}", - "@youKickedAndBanned": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youUnbannedUser": "You unbanned {user}", - "@youUnbannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "hasKnocked": "🚪 {user} has knocked", - "@hasKnocked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "usersMustKnock": "Users must knock", - "@usersMustKnock": {}, - "noOneCanJoin": "No one can join", - "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} would like to join the chat.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "No public link has been created yet", - "@noPublicLinkHasBeenCreatedYet": {}, - "knock": "Knock", - "@knock": {}, - "users": "Users", - "@users": {}, - "unlockOldMessages": "Unlock old messages", - "@unlockOldMessages": {}, - "storeInSecureStorageDescription": "Store the recovery key in the secure storage of this device.", - "@storeInSecureStorageDescription": {}, - "saveKeyManuallyDescription": "Save this key manually by triggering the system share dialog or clipboard.", - "@saveKeyManuallyDescription": {}, - "storeInAndroidKeystore": "Store in Android KeyStore", - "@storeInAndroidKeystore": {}, - "storeInAppleKeyChain": "Store in Apple KeyChain", - "@storeInAppleKeyChain": {}, - "storeSecurlyOnThisDevice": "Store securely on this device", - "@storeSecurlyOnThisDevice": {}, - "countFiles": "{count} files", - "@countFiles": { - "placeholders": { - "count": { - "type": "int" - } - } - }, - "user": "User", - "@user": {}, - "custom": "Custom", - "@custom": {}, - "foregroundServiceRunning": "This notification appears when the foreground service is running.", - "@foregroundServiceRunning": {}, - "screenSharingTitle": "screen sharing", - "@screenSharingTitle": {}, - "screenSharingDetail": "You are sharing your screen in FuffyChat", - "@screenSharingDetail": {}, - "callingPermissions": "Calling permissions", - "@callingPermissions": {}, - "callingAccount": "Calling account", - "@callingAccount": {}, - "callingAccountDetails": "Allows FluffyChat to use the native android dialer app.", - "@callingAccountDetails": {}, - "appearOnTop": "Appear on top", - "@appearOnTop": {}, - "appearOnTopDetails": "Allows the app to appear on top (not needed if you already have Fluffychat setup as a calling account)", - "@appearOnTopDetails": {}, - "otherCallingPermissions": "Microphone, camera and other FluffyChat permissions", - "@otherCallingPermissions": {}, - "whyIsThisMessageEncrypted": "Why is this message unreadable?", - "@whyIsThisMessageEncrypted": {}, - "noKeyForThisMessage": "This can happen if the message was sent before you have signed in to your account at this device.\n\nIt is also possible that the sender has blocked your device or something went wrong with the internet connection.\n\nAre you able to read the message on another session? Then you can transfer the message from it! Go to Settings > Devices and make sure that your devices have verified each other. When you open the room the next time and both sessions are in the foreground, the keys will be transmitted automatically.\n\nDo you not want to lose the keys when logging out or switching devices? Make sure that you have enabled the chat backup in the settings.", - "@noKeyForThisMessage": {}, - "newGroup": "New group", - "@newGroup": {}, - "newSpace": "New space", - "@newSpace": {}, - "enterSpace": "Enter space", - "@enterSpace": {}, - "enterRoom": "Enter room", - "@enterRoom": {}, - "allSpaces": "All spaces", - "@allSpaces": {}, - "numChats": "{number} chats", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Hide unimportant state events", - "@hideUnimportantStateEvents": {}, - "hidePresences": "Hide Status List?", - "@hidePresences": {}, - "doNotShowAgain": "Do not show again", - "@doNotShowAgain": {}, - "wasDirectChatDisplayName": "Empty chat (was {oldDisplayName})", - "@wasDirectChatDisplayName": { - "type": "String", - "placeholders": { - "oldDisplayName": { - "type": "String" - } - } - }, - "newSpaceDescription": "Spaces allows you to consolidate your chats and build private or public communities.", - "@newSpaceDescription": {}, - "encryptThisChat": "Encrypt this chat", - "@encryptThisChat": {}, - "disableEncryptionWarning": "For security reasons you can not disable encryption in a chat, where it has been enabled before.", - "@disableEncryptionWarning": {}, - "sorryThatsNotPossible": "Sorry... that is not possible", - "@sorryThatsNotPossible": {}, - "deviceKeys": "Device keys:", - "@deviceKeys": {}, - "reopenChat": "Reopen chat", - "@reopenChat": {}, - "noBackupWarning": "Warning! Without enabling chat backup, you will lose access to your encrypted messages. It is highly recommended to enable the chat backup first before logging out.", - "@noBackupWarning": {}, - "noOtherDevicesFound": "No other devices found", - "@noOtherDevicesFound": {}, - "fileIsTooBigForServer": "Unable to send! The server only supports attachments up to {max}.", - "@fileIsTooBigForServer": { - "type": "String", - "placeholders": { - "max": { - "type": "String" - } - } - }, - "fileHasBeenSavedAt": "File has been saved at {path}", - "@fileHasBeenSavedAt": { - "type": "String", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "jumpToLastReadMessage": "Jump to last read message", - "@jumpToLastReadMessage": {}, - "readUpToHere": "Read up to here", - "@readUpToHere": {}, - "jump": "Jump", - "@jump": {}, - "openLinkInBrowser": "Open link in browser", - "@openLinkInBrowser": {}, - "reportErrorDescription": "😭 Oh no. Something went wrong. If you want, you can report this bug to the developers.", - "@reportErrorDescription": {}, - "report": "report", - "@report": {}, - "signInWithPassword": "Sign in with password", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Please try again later or choose a different server.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "profileNotFound": "The user could not be found on the server. Maybe there is a connection problem or the user doesn't exist.", - "@profileNotFound": {}, - "setTheme": "Set theme:", - "@setTheme": {}, - "setColorTheme": "Set color theme:", - "@setColorTheme": {}, - "invite": "Invite", - "@invite": {}, - "inviteGroupChat": "📨 Group chat invite", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Private chat invite", - "@invitePrivateChat": {}, - "invalidInput": "Invalid input!", - "@invalidInput": {}, - "wrongPinEntered": "Wrong pin entered! Try again in {seconds} seconds...", - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "pleaseEnterANumber": "Please enter a number greater than 0", - "@pleaseEnterANumber": {}, - "archiveRoomDescription": "The chat will be moved to the archive. Other users will be able to see that you have left the chat.", - "@archiveRoomDescription": {}, - "roomUpgradeDescription": "The chat will then be recreated with the new room version. All participants will be notified that they need to switch to the new chat. You can find out more about room versions at https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, - "removeDevicesDescription": "You will be logged out of this device and will no longer be able to receive messages.", - "@removeDevicesDescription": {}, - "banUserDescription": "The user will be banned from the chat and will not be able to enter the chat again until they are unbanned.", - "@banUserDescription": {}, - "unbanUserDescription": "The user will be able to enter the chat again if they try.", - "@unbanUserDescription": {}, - "kickUserDescription": "The user is kicked out of the chat but not banned. In public chats, the user can rejoin at any time.", - "@kickUserDescription": {}, - "makeAdminDescription": "Once you make this user admin, you may not be able to undo this as they will then have the same permissions as you.", - "@makeAdminDescription": {}, - "pushNotificationsNotAvailable": "Push notifications not available", - "@pushNotificationsNotAvailable": {}, - "learnMore": "Learn more", - "@learnMore": {}, - "yourGlobalUserIdIs": "Your global user-ID is: ", - "@yourGlobalUserIdIs": {}, - "noUsersFoundWithQuery": "Unfortunately no user could be found with \"{query}\". Please check whether you made a typo.", - "@noUsersFoundWithQuery": { - "type": "String", - "placeholders": { - "query": { - "type": "String" - } - } - }, - "knocking": "Knocking", - "@knocking": {}, - "chatCanBeDiscoveredViaSearchOnServer": "Chat can be discovered via the search on {server}", - "@chatCanBeDiscoveredViaSearchOnServer": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "searchChatsRooms": "Search for #chats, @users...", - "@searchChatsRooms": {}, - "nothingFound": "Nothing found...", - "@nothingFound": {}, - "groupName": "Group name", - "@groupName": {}, - "createGroupAndInviteUsers": "Create a group and invite users", - "@createGroupAndInviteUsers": {}, - "groupCanBeFoundViaSearch": "Group can be found via search", - "@groupCanBeFoundViaSearch": {}, - "wrongRecoveryKey": "Sorry... this does not seem to be the correct recovery key.", - "@wrongRecoveryKey": {}, - "startConversation": "Start conversation", - "@startConversation": {}, - "commandHint_sendraw": "Send raw json", - "@commandHint_sendraw": {}, - "databaseMigrationTitle": "Database is optimized", - "@databaseMigrationTitle": {}, - "databaseMigrationBody": "Please wait. This may take a moment.", - "@databaseMigrationBody": {}, - "leaveEmptyToClearStatus": "Leave empty to clear your status.", - "@leaveEmptyToClearStatus": {}, - "select": "Select", - "@select": {}, - "searchForUsers": "Search for @users...", - "@searchForUsers": {}, - "pleaseEnterYourCurrentPassword": "Please enter your current password", - "@pleaseEnterYourCurrentPassword": {}, - "newPassword": "New password", - "@newPassword": {}, - "pleaseChooseAStrongPassword": "Please choose a strong password", - "@pleaseChooseAStrongPassword": {}, - "passwordsDoNotMatch": "Passwords do not match", - "@passwordsDoNotMatch": {}, - "passwordIsWrong": "Your entered password is wrong", - "@passwordIsWrong": {}, - "publicLink": "Public link", - "@publicLink": {}, - "publicChatAddresses": "Public chat addresses", - "@publicChatAddresses": {}, - "createNewAddress": "Create new address", - "@createNewAddress": {}, - "joinSpace": "Join space", - "@joinSpace": {}, - "publicSpaces": "Public spaces", - "@publicSpaces": {}, - "addChatOrSubSpace": "Add chat or sub space", - "@addChatOrSubSpace": {}, - "subspace": "Subspace", - "@subspace": {}, - "decline": "Decline", - "@decline": {}, - "thisDevice": "This device:", - "@thisDevice": {}, - "initAppError": "An error occured while init the app", - "@initAppError": {}, - "userRole": "User role", - "@userRole": {}, - "minimumPowerLevel": "{level} is the minimum power level.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, - "searchIn": "Search in chat \"{chat}\"...", - "@searchIn": { - "type": "String", - "placeholders": { - "chat": { - "type": "String" - } - } - }, - "searchMore": "Search more...", - "@searchMore": {}, - "gallery": "Gallery", - "@gallery": {}, - "files": "Files", - "@files": {}, - "databaseBuildErrorBody": "Unable to build the SQlite database. The app tries to use the legacy database for now. Please report this error to the developers at {url}. The error message is: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "sessionLostBody": "Your session is lost. Please report this error to the developers at {url}. The error message is: {error}", - "@sessionLostBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "restoreSessionBody": "The app now tries to restore your session from the backup. Please report this error to the developers at {url}. The error message is: {error}", - "@restoreSessionBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "forwardMessageTo": "Forward message to {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "sendReadReceipts": "Send read receipts", - "@sendReadReceipts": {}, - "sendTypingNotificationsDescription": "Other participants in a chat can see when you are typing a new message.", - "@sendTypingNotificationsDescription": {}, - "sendReadReceiptsDescription": "Other participants in a chat can see when you have read a message.", - "@sendReadReceiptsDescription": {}, - "formattedMessages": "Formatted messages", - "@formattedMessages": {}, - "formattedMessagesDescription": "Display rich message content like bold text using markdown.", - "@formattedMessagesDescription": {}, - "verifyOtherUser": "🔐 Verify other user", - "@verifyOtherUser": {}, - "verifyOtherUserDescription": "If you verify another user, you can be sure that you know who you are really writing to. 💪\n\nWhen you start a verification, you and the other user will see a popup in the app. There you will then see a series of emojis or numbers that you have to compare with each other.\n\nThe best way to do this is to meet up or start a video call. 👭", - "@verifyOtherUserDescription": {}, - "verifyOtherDevice": "🔐 Verify other device", - "@verifyOtherDevice": {}, - "verifyOtherDeviceDescription": "When you verify another device, those devices can exchange keys, increasing your overall security. 💪 When you start a verification, a popup will appear in the app on both devices. There you will then see a series of emojis or numbers that you have to compare with each other. It's best to have both devices handy before you start the verification. 🤳", - "@verifyOtherDeviceDescription": {}, - "acceptedKeyVerification": "{sender} accepted key verification", - "@acceptedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "canceledKeyVerification": "{sender} canceled key verification", - "@canceledKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "completedKeyVerification": "{sender} completed key verification", - "@completedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "isReadyForKeyVerification": "{sender} is ready for key verification", - "@isReadyForKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "requestedKeyVerification": "{sender} requested key verification", - "@requestedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "startedKeyVerification": "{sender} started key verification", - "@startedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "transparent": "Transparent", - "@transparent": {}, - "incomingMessages": "Incoming messages", - "@incomingMessages": {}, - "stickers": "Stickers", - "@stickers": {}, - "discover": "Discover", - "@discover": {}, - "commandHint_ignore": "Ignore the given matrix ID", - "@commandHint_ignore": {}, - "commandHint_unignore": "Unignore the given matrix ID", - "@commandHint_unignore": {}, - "unreadChatsInApp": "{appname}: {unread} unread chats", - "@unreadChatsInApp": { - "type": "String", - "placeholders": { - "appname": { - "type": "String" - }, - "unread": { - "type": "String" - } - } - }, - "noDatabaseEncryption": "Database encryption is not supported on this platform", - "@noDatabaseEncryption": {}, - "thereAreCountUsersBlocked": "Right now there are {count} users blocked.", - "@thereAreCountUsersBlocked": { - "type": "String", - "count": {} - }, - "restricted": "Restricted", - "@restricted": {}, - "knockRestricted": "Knock restricted", - "@knockRestricted": {}, - "goToSpace": "Go to space: {space}", - "@goToSpace": { - "type": "String", - "space": {} - }, - "markAsUnread": "Mark as unread", - "@markAsUnread": {}, - "userLevel": "{level} - User", - "@userLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "moderatorLevel": "{level} - Moderator", - "@moderatorLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "adminLevel": "{level} - Admin", - "@adminLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "changeGeneralChatSettings": "Change general chat settings", - "@changeGeneralChatSettings": {}, - "inviteOtherUsers": "Invite other users to this chat", - "@inviteOtherUsers": {}, - "changeTheChatPermissions": "Change the chat permissions", - "@changeTheChatPermissions": {}, - "changeTheVisibilityOfChatHistory": "Change the visibility of the chat history", - "@changeTheVisibilityOfChatHistory": {}, - "changeTheCanonicalRoomAlias": "Change the main public chat address", - "@changeTheCanonicalRoomAlias": {}, - "sendRoomNotifications": "Send a @room notifications", - "@sendRoomNotifications": {}, - "changeTheDescriptionOfTheGroup": "Change the description of the chat", - "@changeTheDescriptionOfTheGroup": {}, - "chatPermissionsDescription": "Define which power level is necessary for certain actions in this chat. The power levels 0, 50 and 100 are usually representing users, moderators and admins, but any gradation is possible.", - "@chatPermissionsDescription": {}, - "updateInstalled": "🎉 Update {version} installed!", - "@updateInstalled": { - "type": "String", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "changelog": "Changelog", - "@changelog": {}, - "sendCanceled": "Sending canceled", - "@sendCanceled": {}, - "loginWithMatrixId": "Login with Matrix-ID", - "@loginWithMatrixId": {}, - "discoverHomeservers": "Discover homeservers", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "What is a homeserver?", - "@whatIsAHomeserver": {}, - "homeserverDescription": "All your data is stored on the homeserver, just like an email provider. You can choose which homeserver you want to use, while you can still communicate with everyone. Learn more at at https://matrix.org.", - "@homeserverDescription": {}, - "doesNotSeemToBeAValidHomeserver": "Doesn't seem to be a compatible homeserver. Wrong URL?", - "@doesNotSeemToBeAValidHomeserver": {}, - "calculatingFileSize": "Calculating file size...", - "@calculatingFileSize": {}, - "prepareSendingAttachment": "Prepare sending attachment...", - "@prepareSendingAttachment": {}, - "sendingAttachment": "Sending attachment...", - "@sendingAttachment": {}, - "generatingVideoThumbnail": "Generating video thumbnail...", - "@generatingVideoThumbnail": {}, - "compressVideo": "Compressing video...", - "@compressVideo": {}, - "sendingAttachmentCountOfCount": "Sending attachment {index} of {length}...", - "@sendingAttachmentCountOfCount": { - "type": "integer", - "placeholders": { - "index": { - "type": "int" - }, - "length": { - "type": "int" - } - } - }, - "serverLimitReached": "Server limit reached! Waiting {seconds} seconds...", - "@serverLimitReached": { - "type": "integer", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "oneOfYourDevicesIsNotVerified": "One of your devices is not verified", - "@oneOfYourDevicesIsNotVerified": {}, - "noticeChatBackupDeviceVerification": "Note: When you connect all your devices to the chat backup, they are automatically verified.", - "@noticeChatBackupDeviceVerification": {}, - "continueText": "Continue", - "@continueText": {}, - "welcomeText": "Hey Hey 👋 This is FluffyChat. You can sign in to any homeserver, which is compatible with https://matrix.org. And then chat with anyone. It's a huge decentralized messaging network!", - "@welcomeText": {}, - "blur": "Blur:", - "@blur": {}, - "opacity": "Opacity:", - "@opacity": {}, - "setWallpaper": "Set wallpaper", - "@setWallpaper": {}, - "manageAccount": "Manage account", - "@manageAccount": {}, - "noContactInformationProvided": "Server does not provide any valid contact information", - "@noContactInformationProvided": {}, - "contactServerAdmin": "Contact server admin", - "@contactServerAdmin": {}, - "contactServerSecurity": "Contact server security", - "@contactServerSecurity": {}, - "supportPage": "Support page", - "@supportPage": {}, - "serverInformation": "Server information:", - "@serverInformation": {}, - "name": "Name", - "@name": {}, - "version": "Version", - "@version": {}, - "website": "Website", - "@website": {}, - "compress": "Compress", - "@compress": {}, - "boldText": "Bold text", - "@boldText": {}, - "italicText": "Italic text", - "@italicText": {}, - "strikeThrough": "Strikethrough", - "@strikeThrough": {}, - "pleaseFillOut": "Please fill out", - "@pleaseFillOut": {}, - "invalidUrl": "Invalid url", - "@invalidUrl": {}, - "addLink": "Add link", - "@addLink": {}, - "unableToJoinChat": "Unable to join chat. Maybe the other party has already closed the conversation.", - "@unableToJoinChat": {}, - "previous": "Previous", - "@previous": {}, - "otherPartyNotLoggedIn": "The other party is currently not logged in and therefore cannot receive messages!", - "@otherPartyNotLoggedIn": {}, - "appWantsToUseForLogin": "Use '{server}' to log in", - "@appWantsToUseForLogin": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "appWantsToUseForLoginDescription": "You hereby allow the app and website to share information about you.", - "@appWantsToUseForLoginDescription": {}, - "open": "Open", - "@open": {}, - "waitingForServer": "Waiting for server...", - "@waitingForServer": {}, - "appIntroduction": "FluffyChat lets you chat with your friends across different messengers. Learn more at https://matrix.org or just tap *Continue*.", - "@appIntroduction": {}, - "newChatRequest": "📩 New chat request", - "@newChatRequest": {}, - "contentNotificationSettings": "Content notification settings", - "@contentNotificationSettings": {}, - "generalNotificationSettings": "General notification settings", - "@generalNotificationSettings": {}, - "roomNotificationSettings": "Room notification settings", - "@roomNotificationSettings": {}, - "userSpecificNotificationSettings": "User specific notification settings", - "@userSpecificNotificationSettings": {}, - "otherNotificationSettings": "Other notification settings", - "@otherNotificationSettings": {}, - "notificationRuleContainsUserName": "Contains User Name", - "@notificationRuleContainsUserName": {}, - "notificationRuleContainsUserNameDescription": "Notifies the user when a message contains their username.", - "@notificationRuleContainsUserNameDescription": {}, - "notificationRuleMaster": "Mute all notifications", - "@notificationRuleMaster": {}, - "notificationRuleMasterDescription": "Overrides all other rules and disables all notifications.", - "@notificationRuleMasterDescription": {}, - "notificationRuleSuppressNotices": "Suppress Automated Messages", - "@notificationRuleSuppressNotices": {}, - "notificationRuleSuppressNoticesDescription": "Suppresses notifications from automated clients like bots.", - "@notificationRuleSuppressNoticesDescription": {}, - "notificationRuleInviteForMe": "Invite for Me", - "@notificationRuleInviteForMe": {}, - "notificationRuleInviteForMeDescription": "Notifies the user when they are invited to a room.", - "@notificationRuleInviteForMeDescription": {}, - "notificationRuleMemberEvent": "Member Event", - "@notificationRuleMemberEvent": {}, - "notificationRuleMemberEventDescription": "Suppresses notifications for membership events.", - "@notificationRuleMemberEventDescription": {}, - "notificationRuleIsUserMention": "User Mention", - "@notificationRuleIsUserMention": {}, - "notificationRuleIsUserMentionDescription": "Notifies the user when they are directly mentioned in a message.", - "@notificationRuleIsUserMentionDescription": {}, - "notificationRuleContainsDisplayName": "Contains Display Name", - "@notificationRuleContainsDisplayName": {}, - "notificationRuleContainsDisplayNameDescription": "Notifies the user when a message contains their display name.", - "@notificationRuleContainsDisplayNameDescription": {}, - "notificationRuleIsRoomMention": "Room Mention", - "@notificationRuleIsRoomMention": {}, - "notificationRuleIsRoomMentionDescription": "Notifies the user when there is a room mention.", - "@notificationRuleIsRoomMentionDescription": {}, - "notificationRuleRoomnotif": "Room Notification", - "@notificationRuleRoomnotif": {}, - "notificationRuleRoomnotifDescription": "Notifies the user when a message contains '@room'.", - "@notificationRuleRoomnotifDescription": {}, - "notificationRuleTombstone": "Tombstone", - "@notificationRuleTombstone": {}, - "notificationRuleTombstoneDescription": "Notifies the user about room deactivation messages.", - "@notificationRuleTombstoneDescription": {}, - "notificationRuleReaction": "Reaction", - "@notificationRuleReaction": {}, - "notificationRuleReactionDescription": "Suppresses notifications for reactions.", - "@notificationRuleReactionDescription": {}, - "notificationRuleRoomServerAcl": "Room Server ACL", - "@notificationRuleRoomServerAcl": {}, - "notificationRuleRoomServerAclDescription": "Suppresses notifications for room server access control lists (ACL).", - "@notificationRuleRoomServerAclDescription": {}, - "notificationRuleSuppressEdits": "Suppress Edits", - "@notificationRuleSuppressEdits": {}, - "notificationRuleSuppressEditsDescription": "Suppresses notifications for edited messages.", - "@notificationRuleSuppressEditsDescription": {}, - "notificationRuleCall": "Call", - "@notificationRuleCall": {}, - "notificationRuleCallDescription": "Notifies the user about calls.", - "@notificationRuleCallDescription": {}, - "notificationRuleEncryptedRoomOneToOne": "Encrypted Room One-to-One", - "@notificationRuleEncryptedRoomOneToOne": {}, - "notificationRuleEncryptedRoomOneToOneDescription": "Notifies the user about messages in encrypted one-to-one rooms.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, - "notificationRuleRoomOneToOne": "Room One-to-One", - "@notificationRuleRoomOneToOne": {}, - "notificationRuleRoomOneToOneDescription": "Notifies the user about messages in one-to-one rooms.", - "@notificationRuleRoomOneToOneDescription": {}, - "notificationRuleMessage": "Message", - "@notificationRuleMessage": {}, - "notificationRuleMessageDescription": "Notifies the user about general messages.", - "@notificationRuleMessageDescription": {}, - "notificationRuleEncrypted": "Encrypted", - "@notificationRuleEncrypted": {}, - "notificationRuleEncryptedDescription": "Notifies the user about messages in encrypted rooms.", - "@notificationRuleEncryptedDescription": {}, - "notificationRuleJitsi": "Jitsi", - "@notificationRuleJitsi": {}, - "notificationRuleJitsiDescription": "Notifies the user about Jitsi widget events.", - "@notificationRuleJitsiDescription": {}, - "notificationRuleServerAcl": "Suppress Server ACL Events", - "@notificationRuleServerAcl": {}, - "notificationRuleServerAclDescription": "Suppresses notifications for Server ACL events.", - "@notificationRuleServerAclDescription": {}, - "unknownPushRule": "Unknown push rule '{rule}'", - "@unknownPushRule": { - "type": "String", - "placeholders": { - "rule": { - "type": "String" - } - } - }, - "sentVoiceMessage": "🎙️ {duration} - Voice message from {sender}", - "@sentVoiceMessage": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "duration": { - "type": "String" - } - } - }, - "deletePushRuleCanNotBeUndone": "If you delete this notification setting, this can not be undone.", - "@deletePushRuleCanNotBeUndone": {}, - "more": "More", - "@more": {}, - "shareKeysWith": "Share keys with...", - "@shareKeysWith": {}, - "shareKeysWithDescription": "Which devices should be trusted so that they can read along your messages in encrypted chats?", - "@shareKeysWithDescription": {}, - "allDevices": "All devices", - "@allDevices": {}, - "crossVerifiedDevicesIfEnabled": "Cross verified devices if enabled", - "@crossVerifiedDevicesIfEnabled": {}, - "crossVerifiedDevices": "Cross verified devices", - "@crossVerifiedDevices": {}, - "verifiedDevicesOnly": "Verified devices only", - "@verifiedDevicesOnly": {}, - "takeAPhoto": "Take a photo", - "@takeAPhoto": {}, - "recordAVideo": "Record a video", - "@recordAVideo": {}, - "optionalMessage": "(Optional) message...", - "@optionalMessage": {}, - "notSupportedOnThisDevice": "Not supported on this device", - "@notSupportedOnThisDevice": {}, - "enterNewChat": "Enter new chat", - "@enterNewChat": {}, - "approve": "Approve", - "@approve": {}, - "youHaveKnocked": "You have knocked", - "@youHaveKnocked": {}, - "pleaseWaitUntilInvited": "Please wait now, until someone from the room invites you.", - "@pleaseWaitUntilInvited": {}, - "commandHint_logout": "Logout your current device", - "@commandHint_logout": {}, - "commandHint_logoutall": "Logout all active devices", - "@commandHint_logoutall": {}, - "displayNavigationRail": "Show navigation rail on mobile", - "@displayNavigationRail": {}, - "customReaction": "Custom reaction", - "@customReaction": {}, - "moreEvents": "More events", - "@moreEvents": {}, - "declineInvitation": "Decline invitation", - "@declineInvitation": {}, - "noMessagesYet": "No messages yet", - "longPressToRecordVoiceMessage": "Long press to record voice message.", - "pause": "Pause", - "resume": "Resume", - "newSubSpace": "New sub space", - "moveToDifferentSpace": "Move to different space", - "moveUp": "Move up", - "moveDown": "Move down", - "removeFromSpaceDescription": "The chat will be removed from the space but still appear in your chat list.", - "countChats": "{chats} chats", - "@countChats": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - } - } - }, - "spaceMemberOf": "Space member of {spaces}", - "@spaceMemberOf": { - "type": "String", - "placeholders": { - "spaces": { - "type": "String" - } - } - }, - "spaceMemberOfCanKnock": "Space member of {spaces} can knock", - "@spaceMemberOfCanKnock": { - "type": "String", - "placeholders": { - "spaces": { - "type": "String" - } - } - }, - "donate": "Donate", - "startedAPoll": "{username} started a poll.", - "@startedAPoll": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "poll": "Poll", - "startPoll": "Start poll", - "endPoll": "End poll", - "answersVisible": "Answers visible", - "answersHidden": "Answers hidden", - "pollQuestion": "Poll question", - "answerOption": "Answer option", - "addAnswerOption": "Add answer option", - "allowMultipleAnswers": "Allow multiple answers", - "pollHasBeenEnded": "Poll has been ended", - "countVotes": "{count, plural, =1{One vote} other{{count} votes}}", - "@countVotes": { - "type": "int", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "answersWillBeVisibleWhenPollHasEnded": "Answers will be visible when poll has ended", - "replyInThread": "Reply in thread", - "countReplies": "{count, plural, =1{One reply} other{{count} replies}}", - "@countReplies": { - "type": "int", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "thread": "Thread", - "backToMainChat": "Back to main chat", - "saveChanges": "Save changes", - "createSticker": "Create sticker or emoji", - "useAsSticker": "Use as sticker", - "useAsEmoji": "Use as emoji", - "stickerPackNameAlreadyExists": "Sticker pack name already exists", - "newStickerPack": "New sticker pack", - "stickerPackName": "Sticker pack name", - "attribution": "Attribution", - "skipChatBackup": "Skip chat backup", - "skipChatBackupWarning": "Are you sure? Without enabling the chat backup you may lose access to your messages if you switch your device.", - "loadingMessages": "Loading messages", - "setupChatBackup": "Set up chat backup", - "noMoreResultsFound": "No more results found", - "chatSearchedUntil": "Chat searched until {time}", - "@chatSearchedUntil": { - "type": "String", - "placeholders": { - "time": { - "type": "String" - } - } - }, - "federationBaseUrl": "Federation Base URL", - "@federationBaseUrl": {}, - "clientWellKnownInformation": "Client-Well-Known Information:", - "@clientWellKnownInformation": {}, - "baseUrl": "Base URL", - "@baseUrl": {}, - "identityServer": "Identity Server:", - "@identityServer": {}, - "versionWithNumber": "Version: {version}", - "@versionWithNumber": { - "type": "String", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "logs": "Logs", - "@logs": {}, - "advancedConfigs": "Advanced Configs", - "@advancedConfigs": {}, - "advancedConfigurations": "Advanced configurations", - "@advancedConfigurations": {}, - "signIn": "Sign in", - "createNewAccount": "Create new account", - "signUpGreeting": "FluffyChat is decentralized! Select a server where you want to create your account and let's go!", - "signInGreeting": "You already have an account in Matrix? Welcome back! Select your homeserver and sign in.", - "appIntro": "With FluffyChat you can chat with your friends. It's a secure decentralized [matrix] messenger! Learn more on https://matrix.org if you like or just sign up.", - "theProcessWasCanceled": "The process was canceled." -} + "repeatPassword": "Repeat password", + "notAnImage": "Not an image file.", + "ignoreUser": "Ignore user", + "remove": "Remove", + "@remove": { + "type": "String", + "placeholders": {} + }, + "importNow": "Import now", + "importEmojis": "Import Emojis", + "importFromZipFile": "Import from .zip file", + "exportEmotePack": "Export Emote pack as .zip", + "replace": "Replace", + "about": "About", + "aboutHomeserver": "About {homeserver}", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "accept": "Accept", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} accepted the invitation", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "Account", + "@account": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} activated end to end encryption", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "addEmail": "Add email", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "confirmMatrixId": "Please confirm your Matrix ID in order to delete your account.", + "supposedMxid": "This should be {mxid}", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "addToSpace": "Add to space", + "admin": "Admin", + "@admin": { + "type": "String", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "String", + "placeholders": {} + }, + "all": "All", + "@all": { + "type": "String", + "placeholders": {} + }, + "allChats": "All chats", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "commandHint_roomupgrade": "Upgrade this room to the given room version", + "commandHint_googly": "Send some googly eyes", + "commandHint_cuddle": "Send a cuddle", + "commandHint_hug": "Send a hug", + "googlyEyesContent": "{senderName} sends you googly eyes", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "cuddleContent": "{senderName} cuddles you", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "hugContent": "{senderName} hugs you", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "answeredTheCall": "{senderName} answered the call", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "anyoneCanJoin": "Anyone can join", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + }, + "appLock": "App lock", + "@appLock": { + "type": "String", + "placeholders": {} + }, + "appLockDescription": "Lock the app when not using with a pin code", + "archive": "Archive", + "@archive": { + "type": "String", + "placeholders": {} + }, + "areGuestsAllowedToJoin": "Are guest users allowed to join?", + "@areGuestsAllowedToJoin": { + "type": "String", + "placeholders": {} + }, + "areYouSure": "Are you sure?", + "@areYouSure": { + "type": "String", + "placeholders": {} + }, + "areYouSureYouWantToLogout": "Are you sure you want to log out?", + "@areYouSureYouWantToLogout": { + "type": "String", + "placeholders": {} + }, + "askSSSSSign": "To be able to sign the other person, please enter your secure store passphrase or recovery key.", + "@askSSSSSign": { + "type": "String", + "placeholders": {} + }, + "askVerificationRequest": "Accept this verification request from {username}?", + "@askVerificationRequest": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "autoplayImages": "Automatically play animated stickers and emotes", + "@autoplayImages": { + "type": "String", + "placeholder": {} + }, + "badServerLoginTypesException": "The homeserver supports the login types:\n{serverVersions}\nBut this app supports only:\n{supportedVersions}", + "@badServerLoginTypesException": { + "type": "String", + "placeholders": { + "serverVersions": { + "type": "String" + }, + "supportedVersions": { + "type": "String" + } + } + }, + "sendTypingNotifications": "Send typing notifications", + "swipeRightToLeftToReply": "Swipe right to left to reply", + "sendOnEnter": "Send on enter", + "noMoreChatsFound": "No more chats found...", + "noChatsFoundHere": "No chats found here yet. Start a new chat with someone by using the button below. ⤵️", + "unread": "Unread", + "space": "Space", + "spaces": "Spaces", + "banFromChat": "Ban from chat", + "@banFromChat": { + "type": "String", + "placeholders": {} + }, + "banned": "Banned", + "@banned": { + "type": "String", + "placeholders": {} + }, + "bannedUser": "{username} banned {targetName}", + "@bannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "blockDevice": "Block Device", + "@blockDevice": { + "type": "String", + "placeholders": {} + }, + "blocked": "Blocked", + "@blocked": { + "type": "String", + "placeholders": {} + }, + "cancel": "Cancel", + "@cancel": { + "type": "String", + "placeholders": {} + }, + "cantOpenUri": "Can't open the URI {uri}", + "@cantOpenUri": { + "type": "String", + "placeholders": { + "uri": { + "type": "String" + } + } + }, + "changeDeviceName": "Change device name", + "@changeDeviceName": { + "type": "String", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} changed the chat avatar", + "@changedTheChatAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheChatDescription": "{username} changed the chat description", + "changedTheChatDescriptionTo": "{username} changed the chat description to: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "description": { + "type": "String" + } + } + }, + "changedTheChatName": "{username} changed the chat name", + "changedTheChatNameTo": "{username} changed the chat name to: '{chatname}'", + "@changedTheChatNameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "chatname": { + "type": "String" + } + } + }, + "changedTheChatPermissions": "{username} changed the chat permissions", + "@changedTheChatPermissions": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheDisplaynameTo": "{username} changed their displayname to: '{displayname}'", + "@changedTheDisplaynameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "displayname": { + "type": "String" + } + } + }, + "changedTheGuestAccessRules": "{username} changed the guest access rules", + "@changedTheGuestAccessRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRulesTo": "{username} changed the guest access rules to: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheHistoryVisibility": "{username} changed the history visibility", + "@changedTheHistoryVisibility": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheHistoryVisibilityTo": "{username} changed the history visibility to: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheJoinRules": "{username} changed the join rules", + "@changedTheJoinRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheJoinRulesTo": "{username} changed the join rules to: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "joinRules": { + "type": "String" + } + } + }, + "changedTheProfileAvatar": "{username} changed their avatar", + "@changedTheProfileAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomAliases": "{username} changed the room aliases", + "@changedTheRoomAliases": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomInvitationLink": "{username} changed the invitation link", + "@changedTheRoomInvitationLink": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changePassword": "Change password", + "@changePassword": { + "type": "String", + "placeholders": {} + }, + "changeTheHomeserver": "Change the homeserver", + "@changeTheHomeserver": { + "type": "String", + "placeholders": {} + }, + "changeTheme": "Change your style", + "@changeTheme": { + "type": "String", + "placeholders": {} + }, + "changeTheNameOfTheGroup": "Change the name of the group", + "@changeTheNameOfTheGroup": { + "type": "String", + "placeholders": {} + }, + "changeYourAvatar": "Change your avatar", + "@changeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "channelCorruptedDecryptError": "The encryption has been corrupted", + "@channelCorruptedDecryptError": { + "type": "String", + "placeholders": {} + }, + "chat": "Chat", + "@chat": { + "type": "String", + "placeholders": {} + }, + "yourChatBackupHasBeenSetUp": "Your chat backup has been set up.", + "chatBackup": "Chat backup", + "@chatBackup": { + "type": "String", + "placeholders": {} + }, + "chatBackupDescription": "Your messages are secured with a recovery key. Please make sure you don't lose it.", + "@chatBackupDescription": { + "type": "String", + "placeholders": {} + }, + "chatDetails": "Chat details", + "@chatDetails": { + "type": "String", + "placeholders": {} + }, + "chats": "Chats", + "@chats": { + "type": "String", + "placeholders": {} + }, + "chooseAStrongPassword": "Choose a strong password", + "@chooseAStrongPassword": { + "type": "String", + "placeholders": {} + }, + "clearArchive": "Clear archive", + "close": "Close", + "@close": { + "type": "String", + "placeholders": {} + }, + "commandHint_markasdm": "Mark as direct message room for the giving Matrix ID", + "commandHint_markasgroup": "Mark as group", + "commandHint_ban": "Ban the given user from this room", + "@commandHint_ban": { + "type": "String", + "description": "Usage hint for the command /ban" + }, + "commandHint_clearcache": "Clear cache", + "@commandHint_clearcache": { + "type": "String", + "description": "Usage hint for the command /clearcache" + }, + "commandHint_create": "Create an empty group chat\nUse --no-encryption to disable encryption", + "@commandHint_create": { + "type": "String", + "description": "Usage hint for the command /create" + }, + "commandHint_discardsession": "Discard session", + "@commandHint_discardsession": { + "type": "String", + "description": "Usage hint for the command /discardsession" + }, + "commandHint_dm": "Start a direct chat\nUse --no-encryption to disable encryption", + "@commandHint_dm": { + "type": "String", + "description": "Usage hint for the command /dm" + }, + "commandHint_html": "Send HTML-formatted text", + "@commandHint_html": { + "type": "String", + "description": "Usage hint for the command /html" + }, + "commandHint_invite": "Invite the given user to this room", + "@commandHint_invite": { + "type": "String", + "description": "Usage hint for the command /invite" + }, + "commandHint_join": "Join the given room", + "@commandHint_join": { + "type": "String", + "description": "Usage hint for the command /join" + }, + "commandHint_kick": "Remove the given user from this room", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "commandHint_leave": "Leave this room", + "@commandHint_leave": { + "type": "String", + "description": "Usage hint for the command /leave" + }, + "commandHint_me": "Describe yourself", + "@commandHint_me": { + "type": "String", + "description": "Usage hint for the command /me" + }, + "commandHint_myroomavatar": "Set your picture for this room (by mxc-uri)", + "@commandHint_myroomavatar": { + "type": "String", + "description": "Usage hint for the command /myroomavatar" + }, + "commandHint_myroomnick": "Set your display name for this room", + "@commandHint_myroomnick": { + "type": "String", + "description": "Usage hint for the command /myroomnick" + }, + "commandHint_op": "Set the given user's power level (default: 50)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "commandHint_plain": "Send unformatted text", + "@commandHint_plain": { + "type": "String", + "description": "Usage hint for the command /plain" + }, + "commandHint_react": "Send reply as a reaction", + "@commandHint_react": { + "type": "String", + "description": "Usage hint for the command /react" + }, + "commandHint_send": "Send text", + "@commandHint_send": { + "type": "String", + "description": "Usage hint for the command /send" + }, + "commandHint_unban": "Unban the given user from this room", + "@commandHint_unban": { + "type": "String", + "description": "Usage hint for the command /unban" + }, + "commandInvalid": "Command invalid", + "@commandInvalid": { + "type": "String" + }, + "commandMissing": "{command} is not a command.", + "@commandMissing": { + "type": "String", + "placeholders": { + "command": { + "type": "String" + } + }, + "description": "State that {command} is not a valid /command." + }, + "compareEmojiMatch": "Please compare the emojis", + "@compareEmojiMatch": { + "type": "String", + "placeholders": {} + }, + "compareNumbersMatch": "Please compare the numbers", + "@compareNumbersMatch": { + "type": "String", + "placeholders": {} + }, + "configureChat": "Configure chat", + "@configureChat": { + "type": "String", + "placeholders": {} + }, + "contactHasBeenInvitedToTheGroup": "Contact has been invited to the group", + "@contactHasBeenInvitedToTheGroup": { + "type": "String", + "placeholders": {} + }, + "contentHasBeenReported": "The content has been reported to the server admins", + "@contentHasBeenReported": { + "type": "String", + "placeholders": {} + }, + "copiedToClipboard": "Copied to clipboard", + "@copiedToClipboard": { + "type": "String", + "placeholders": {} + }, + "copy": "Copy", + "@copy": { + "type": "String", + "placeholders": {} + }, + "copyToClipboard": "Copy to clipboard", + "@copyToClipboard": { + "type": "String", + "placeholders": {} + }, + "couldNotDecryptMessage": "Could not decrypt message: {error}", + "@couldNotDecryptMessage": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "checkList": "Check list", + "countParticipants": "{count} participants", + "@countParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "countInvited": "{count} invited", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "create": "Create", + "@create": { + "type": "String", + "placeholders": {} + }, + "createdTheChat": "💬 {username} created the chat", + "@createdTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "createGroup": "Create group", + "createNewSpace": "New space", + "@createNewSpace": { + "type": "String", + "placeholders": {} + }, + "currentlyActive": "Currently active", + "@currentlyActive": { + "type": "String", + "placeholders": {} + }, + "darkTheme": "Dark", + "@darkTheme": { + "type": "String", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "String", + "placeholders": { + "date": { + "type": "String" + }, + "timeOfDay": { + "type": "String" + } + } + }, + "deactivateAccountWarning": "This will deactivate your user account. This can not be undone! Are you sure?", + "@deactivateAccountWarning": { + "type": "String", + "placeholders": {} + }, + "defaultPermissionLevel": "Default permission level for new users", + "@defaultPermissionLevel": { + "type": "String", + "placeholders": {} + }, + "delete": "Delete", + "@delete": { + "type": "String", + "placeholders": {} + }, + "deleteAccount": "Delete account", + "@deleteAccount": { + "type": "String", + "placeholders": {} + }, + "deleteMessage": "Delete message", + "@deleteMessage": { + "type": "String", + "placeholders": {} + }, + "device": "Device", + "@device": { + "type": "String", + "placeholders": {} + }, + "deviceId": "Device ID", + "@deviceId": { + "type": "String", + "placeholders": {} + }, + "devices": "Devices", + "@devices": { + "type": "String", + "placeholders": {} + }, + "directChats": "Direct Chats", + "@directChats": { + "type": "String", + "placeholders": {} + }, + "displaynameHasBeenChanged": "Displayname has been changed", + "@displaynameHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "downloadFile": "Download file", + "@downloadFile": { + "type": "String", + "placeholders": {} + }, + "edit": "Edit", + "@edit": { + "type": "String", + "placeholders": {} + }, + "editBlockedServers": "Edit blocked servers", + "@editBlockedServers": { + "type": "String", + "placeholders": {} + }, + "chatPermissions": "Chat permissions", + "editDisplayname": "Edit displayname", + "@editDisplayname": { + "type": "String", + "placeholders": {} + }, + "editRoomAliases": "Edit room aliases", + "@editRoomAliases": { + "type": "String", + "placeholders": {} + }, + "editRoomAvatar": "Edit room avatar", + "@editRoomAvatar": { + "type": "String", + "placeholders": {} + }, + "emoteExists": "Emote already exists!", + "@emoteExists": { + "type": "String", + "placeholders": {} + }, + "emoteInvalid": "Invalid emote shortcode!", + "@emoteInvalid": { + "type": "String", + "placeholders": {} + }, + "emoteKeyboardNoRecents": "Recently-used emotes will appear here...", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "emotePacks": "Emote packs for room", + "@emotePacks": { + "type": "String", + "placeholders": {} + }, + "emoteSettings": "Emote Settings", + "@emoteSettings": { + "type": "String", + "placeholders": {} + }, + "globalChatId": "Global chat ID", + "accessAndVisibility": "Access and visibility", + "accessAndVisibilityDescription": "Who is allowed to join this chat and how the chat can be discovered.", + "calls": "Calls", + "customEmojisAndStickers": "Custom emojis and stickers", + "customEmojisAndStickersBody": "Add or share custom emojis or stickers which can be used in any chat.", + "emoteShortcode": "Emote shortcode", + "@emoteShortcode": { + "type": "String", + "placeholders": {} + }, + "emptyChat": "Empty chat", + "@emptyChat": { + "type": "String", + "placeholders": {} + }, + "enableEmotesGlobally": "Enable emote pack globally", + "@enableEmotesGlobally": { + "type": "String", + "placeholders": {} + }, + "enableEncryption": "Enable encryption", + "@enableEncryption": { + "type": "String", + "placeholders": {} + }, + "enableEncryptionWarning": "You won't be able to disable the encryption anymore. Are you sure?", + "@enableEncryptionWarning": { + "type": "String", + "placeholders": {} + }, + "encrypted": "Encrypted", + "@encrypted": { + "type": "String", + "placeholders": {} + }, + "encryption": "Encryption", + "@encryption": { + "type": "String", + "placeholders": {} + }, + "encryptionNotEnabled": "Encryption is not enabled", + "@encryptionNotEnabled": { + "type": "String", + "placeholders": {} + }, + "endedTheCall": "{senderName} ended the call", + "@endedTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "enterAnEmailAddress": "Enter an email address", + "@enterAnEmailAddress": { + "type": "String", + "placeholders": {} + }, + "homeserver": "Homeserver", + "errorObtainingLocation": "Error obtaining location: {error}", + "@errorObtainingLocation": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "everythingReady": "Everything ready!", + "@everythingReady": { + "type": "String", + "placeholders": {} + }, + "extremeOffensive": "Extremely offensive", + "@extremeOffensive": { + "type": "String", + "placeholders": {} + }, + "fileName": "File name", + "@fileName": { + "type": "String", + "placeholders": {} + }, + "fluffychat": "FluffyChat", + "@fluffychat": { + "type": "String", + "placeholders": {} + }, + "fontSize": "Font size", + "@fontSize": { + "type": "String", + "placeholders": {} + }, + "forward": "Forward", + "@forward": { + "type": "String", + "placeholders": {} + }, + "fromJoining": "From joining", + "@fromJoining": { + "type": "String", + "placeholders": {} + }, + "fromTheInvitation": "From the invitation", + "@fromTheInvitation": { + "type": "String", + "placeholders": {} + }, + "group": "Group", + "@group": { + "type": "String", + "placeholders": {} + }, + "chatDescription": "Chat description", + "chatDescriptionHasBeenChanged": "Chat description changed", + "groupIsPublic": "Group is public", + "@groupIsPublic": { + "type": "String", + "placeholders": {} + }, + "groups": "Groups", + "@groups": { + "type": "String", + "placeholders": {} + }, + "groupWith": "Group with {displayname}", + "@groupWith": { + "type": "String", + "placeholders": { + "displayname": { + "type": "String" + } + } + }, + "guestsAreForbidden": "Guests are forbidden", + "@guestsAreForbidden": { + "type": "String", + "placeholders": {} + }, + "guestsCanJoin": "Guests can join", + "@guestsCanJoin": { + "type": "String", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} has withdrawn the invitation for {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "help": "Help", + "@help": { + "type": "String", + "placeholders": {} + }, + "hideRedactedEvents": "Hide redacted events", + "@hideRedactedEvents": { + "type": "String", + "placeholders": {} + }, + "hideRedactedMessages": "Hide redacted messages", + "hideRedactedMessagesBody": "If someone redacts a message, this message won't be visible in the chat anymore.", + "hideInvalidOrUnknownMessageFormats": "Hide invalid or unknown message formats", + "howOffensiveIsThisContent": "How offensive is this content?", + "@howOffensiveIsThisContent": { + "type": "String", + "placeholders": {} + }, + "id": "ID", + "@id": { + "type": "String", + "placeholders": {} + }, + "block": "Block", + "blockedUsers": "Blocked users", + "blockListDescription": "You can block users who are disturbing you. You won't be able to receive any messages or room invites from the users on your personal block list.", + "blockUsername": "Ignore username", + "iHaveClickedOnLink": "I have clicked on the link", + "@iHaveClickedOnLink": { + "type": "String", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Incorrect passphrase or recovery key", + "@incorrectPassphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "inoffensive": "Inoffensive", + "@inoffensive": { + "type": "String", + "placeholders": {} + }, + "inviteContact": "Invite contact", + "@inviteContact": { + "type": "String", + "placeholders": {} + }, + "inviteContactToGroup": "Invite contact to {groupName}", + "@inviteContactToGroup": { + "type": "String", + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "noChatDescriptionYet": "No chat description created yet.", + "tryAgain": "Try again", + "invalidServerName": "Invalid server name", + "invited": "Invited", + "@invited": { + "type": "String", + "placeholders": {} + }, + "redactMessageDescription": "The message will be redacted for all participants in this conversation. This cannot be undone.", + "optionalRedactReason": "(Optional) Reason for redacting this message...", + "invitedUser": "📩 {username} invited {targetName}", + "@invitedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "invitedUsersOnly": "Invited users only", + "@invitedUsersOnly": { + "type": "String", + "placeholders": {} + }, + "inviteText": "{username} invited you to FluffyChat.\n1. Visit fluffychat.im and install the app \n2. Sign up or sign in \n3. Open the invite link: \n {link}", + "@inviteText": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "link": { + "type": "String" + } + } + }, + "isTyping": "is typing…", + "@isTyping": { + "type": "String", + "placeholders": {} + }, + "joinedTheChat": "👋 {username} joined the chat", + "@joinedTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "joinRoom": "Join room", + "@joinRoom": { + "type": "String", + "placeholders": {} + }, + "kicked": "👞 {username} kicked {targetName}", + "@kicked": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickedAndBanned": "🙅 {username} kicked and banned {targetName}", + "@kickedAndBanned": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickFromChat": "Kick from chat", + "@kickFromChat": { + "type": "String", + "placeholders": {} + }, + "lastActiveAgo": "Last active: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "String", + "placeholders": { + "localizedTimeShort": { + "type": "String" + } + } + }, + "leave": "Leave", + "@leave": { + "type": "String", + "placeholders": {} + }, + "leftTheChat": "Left the chat", + "@leftTheChat": { + "type": "String", + "placeholders": {} + }, + "lightTheme": "Light", + "@lightTheme": { + "type": "String", + "placeholders": {} + }, + "loadCountMoreParticipants": "Load {count} more participants", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dehydrate": "Export session and wipe device", + "dehydrateWarning": "This action cannot be undone. Ensure you safely store the backup file.", + "hydrate": "Restore from backup file", + "loadingPleaseWait": "Loading… Please wait.", + "@loadingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "loadMore": "Load more…", + "@loadMore": { + "type": "String", + "placeholders": {} + }, + "locationDisabledNotice": "Location services are disabled. Please enable them to be able to share your location.", + "@locationDisabledNotice": { + "type": "String", + "placeholders": {} + }, + "locationPermissionDeniedNotice": "Location permission denied. Please grant them to be able to share your location.", + "@locationPermissionDeniedNotice": { + "type": "String", + "placeholders": {} + }, + "login": "Login", + "@login": { + "type": "String", + "placeholders": {} + }, + "logInTo": "Log in to {homeserver}", + "@logInTo": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "logout": "Logout", + "@logout": { + "type": "String", + "placeholders": {} + }, + "mention": "Mention", + "@mention": { + "type": "String", + "placeholders": {} + }, + "messages": "Messages", + "@messages": { + "type": "String", + "placeholders": {} + }, + "messagesStyle": "Messages:", + "moderator": "Moderator", + "@moderator": { + "type": "String", + "placeholders": {} + }, + "muteChat": "Mute chat", + "@muteChat": { + "type": "String", + "placeholders": {} + }, + "needPantalaimonWarning": "Please be aware that you need Pantalaimon to use end-to-end encryption for now.", + "@needPantalaimonWarning": { + "type": "String", + "placeholders": {} + }, + "newChat": "New chat", + "@newChat": { + "type": "String", + "placeholders": {} + }, + "newMessageInFluffyChat": "💬 New message in FluffyChat", + "@newMessageInFluffyChat": { + "type": "String", + "placeholders": {} + }, + "newVerificationRequest": "New verification request!", + "@newVerificationRequest": { + "type": "String", + "placeholders": {} + }, + "next": "Next", + "@next": { + "type": "String", + "placeholders": {} + }, + "no": "No", + "@no": { + "type": "String", + "placeholders": {} + }, + "noConnectionToTheServer": "No connection to the server", + "@noConnectionToTheServer": { + "type": "String", + "placeholders": {} + }, + "noEmotesFound": "No emotes found. 😕", + "@noEmotesFound": { + "type": "String", + "placeholders": {} + }, + "noEncryptionForPublicRooms": "You can only activate encryption as soon as the room is no longer publicly accessible.", + "@noEncryptionForPublicRooms": { + "type": "String", + "placeholders": {} + }, + "noGoogleServicesWarning": "Firebase Cloud Messaging doesn't appear to be available on your device. To still receive push notifications, we recommend installing ntfy. With ntfy or another Unified Push provider you can receive push notifications in a data secure way. You can download ntfy from the PlayStore or from F-Droid.", + "@noGoogleServicesWarning": { + "type": "String", + "placeholders": {} + }, + "noMatrixServer": "{server1} is no matrix server, use {server2} instead?", + "@noMatrixServer": { + "type": "String", + "placeholders": { + "server1": { + "type": "String" + }, + "server2": { + "type": "String" + } + } + }, + "shareInviteLink": "Share invite link", + "scanQrCode": "Scan QR code", + "none": "None", + "@none": { + "type": "String", + "placeholders": {} + }, + "noPasswordRecoveryDescription": "You have not added a way to recover your password yet.", + "@noPasswordRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "noPermission": "No permission", + "@noPermission": { + "type": "String", + "placeholders": {} + }, + "noRoomsFound": "No rooms found…", + "@noRoomsFound": { + "type": "String", + "placeholders": {} + }, + "notifications": "Notifications", + "@notifications": { + "type": "String", + "placeholders": {} + }, + "numUsersTyping": "{count} users are typing…", + "@numUsersTyping": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "obtainingLocation": "Obtaining location…", + "@obtainingLocation": { + "type": "String", + "placeholders": {} + }, + "offensive": "Offensive", + "@offensive": { + "type": "String", + "placeholders": {} + }, + "offline": "Offline", + "@offline": { + "type": "String", + "placeholders": {} + }, + "ok": "Ok", + "@ok": { + "type": "String", + "placeholders": {} + }, + "online": "Online", + "@online": { + "type": "String", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online Key Backup is enabled", + "@onlineKeyBackupEnabled": { + "type": "String", + "placeholders": {} + }, + "oopsPushError": "Oops! Unfortunately, an error occurred when setting up the push notifications.", + "@oopsPushError": { + "type": "String", + "placeholders": {} + }, + "oopsSomethingWentWrong": "Oops, something went wrong…", + "@oopsSomethingWentWrong": { + "type": "String", + "placeholders": {} + }, + "openAppToReadMessages": "Open app to read messages", + "@openAppToReadMessages": { + "type": "String", + "placeholders": {} + }, + "openCamera": "Open camera", + "@openCamera": { + "type": "String", + "placeholders": {} + }, + "oneClientLoggedOut": "One of your clients has been logged out", + "addAccount": "Add account", + "editBundlesForAccount": "Edit bundles for this account", + "addToBundle": "Add to bundle", + "removeFromBundle": "Remove from this bundle", + "bundleName": "Bundle name", + "enableMultiAccounts": "(BETA) Enable multi accounts on this device", + "openInMaps": "Open in maps", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "link": "Link", + "serverRequiresEmail": "This server needs to validate your email address for registration.", + "or": "Or", + "@or": { + "type": "String", + "placeholders": {} + }, + "participant": "Participant", + "@participant": { + "type": "String", + "placeholders": {} + }, + "passphraseOrKey": "passphrase or recovery key", + "@passphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "password": "Password", + "@password": { + "type": "String", + "placeholders": {} + }, + "passwordForgotten": "Password forgotten", + "@passwordForgotten": { + "type": "String", + "placeholders": {} + }, + "passwordHasBeenChanged": "Password has been changed", + "@passwordHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "overview": "Overview", + "passwordRecoverySettings": "Password recovery settings", + "passwordRecovery": "Password recovery", + "@passwordRecovery": { + "type": "String", + "placeholders": {} + }, + "pickImage": "Pick an image", + "@pickImage": { + "type": "String", + "placeholders": {} + }, + "pin": "Pin", + "@pin": { + "type": "String", + "placeholders": {} + }, + "play": "Play {fileName}", + "@play": { + "type": "String", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pleaseChooseAPasscode": "Please choose a pass code", + "@pleaseChooseAPasscode": { + "type": "String", + "placeholders": {} + }, + "pleaseClickOnLink": "Please click on the link in the email and then proceed.", + "@pleaseClickOnLink": { + "type": "String", + "placeholders": {} + }, + "pleaseEnter4Digits": "Please enter 4 digits or leave empty to disable app lock.", + "@pleaseEnter4Digits": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPassword": "Please enter your password", + "@pleaseEnterYourPassword": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPin": "Please enter your pin", + "@pleaseEnterYourPin": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourUsername": "Please enter your username", + "@pleaseEnterYourUsername": { + "type": "String", + "placeholders": {} + }, + "pleaseFollowInstructionsOnWeb": "Please follow the instructions on the website and tap on next.", + "@pleaseFollowInstructionsOnWeb": { + "type": "String", + "placeholders": {} + }, + "privacy": "Privacy", + "@privacy": { + "type": "String", + "placeholders": {} + }, + "publicRooms": "Public Rooms", + "@publicRooms": { + "type": "String", + "placeholders": {} + }, + "pushRules": "Push rules", + "@pushRules": { + "type": "String", + "placeholders": {} + }, + "reason": "Reason", + "@reason": { + "type": "String", + "placeholders": {} + }, + "recording": "Recording", + "@recording": { + "type": "String", + "placeholders": {} + }, + "redactedBy": "Redacted by {username}", + "@redactedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "directChat": "Direct chat", + "redactedByBecause": "Redacted by {username} because: \"{reason}\"", + "@redactedByBecause": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "reason": { + "type": "String" + } + } + }, + "redactedAnEvent": "{username} redacted an event", + "@redactedAnEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "redactMessage": "Redact message", + "@redactMessage": { + "type": "String", + "placeholders": {} + }, + "register": "Register", + "@register": { + "type": "String", + "placeholders": {} + }, + "reject": "Reject", + "@reject": { + "type": "String", + "placeholders": {} + }, + "rejectedTheInvitation": "{username} rejected the invitation", + "@rejectedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "removeAllOtherDevices": "Remove all other devices", + "@removeAllOtherDevices": { + "type": "String", + "placeholders": {} + }, + "removedBy": "Removed by {username}", + "@removedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "unbanFromChat": "Unban from chat", + "@unbanFromChat": { + "type": "String", + "placeholders": {} + }, + "removeYourAvatar": "Remove your avatar", + "@removeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "replaceRoomWithNewerVersion": "Replace room with newer version", + "@replaceRoomWithNewerVersion": { + "type": "String", + "placeholders": {} + }, + "reply": "Reply", + "@reply": { + "type": "String", + "placeholders": {} + }, + "reportMessage": "Report message", + "@reportMessage": { + "type": "String", + "placeholders": {} + }, + "requestPermission": "Request permission", + "@requestPermission": { + "type": "String", + "placeholders": {} + }, + "roomHasBeenUpgraded": "Room has been upgraded", + "@roomHasBeenUpgraded": { + "type": "String", + "placeholders": {} + }, + "roomVersion": "Room version", + "@roomVersion": { + "type": "String", + "placeholders": {} + }, + "saveFile": "Save file", + "@saveFile": { + "type": "String", + "placeholders": {} + }, + "search": "Search", + "@search": { + "type": "String", + "placeholders": {} + }, + "security": "Security", + "@security": { + "type": "String", + "placeholders": {} + }, + "recoveryKey": "Recovery key", + "recoveryKeyLost": "Recovery key lost?", + "send": "Send", + "@send": { + "type": "String", + "placeholders": {} + }, + "sendAMessage": "Send a message", + "@sendAMessage": { + "type": "String", + "placeholders": {} + }, + "sendAsText": "Send as text", + "@sendAsText": { + "type": "String" + }, + "sendAudio": "Send audio", + "@sendAudio": { + "type": "String", + "placeholders": {} + }, + "sendFile": "Send file", + "@sendFile": { + "type": "String", + "placeholders": {} + }, + "sendImage": "Send image", + "@sendImage": { + "type": "String", + "placeholders": {} + }, + "sendImages": "Send {count} image", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sendMessages": "Send messages", + "@sendMessages": { + "type": "String", + "placeholders": {} + }, + "sendVideo": "Send video", + "@sendVideo": { + "type": "String", + "placeholders": {} + }, + "sentAFile": "📁 {username} sent a file", + "@sentAFile": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAnAudio": "🎤 {username} sent an audio", + "@sentAnAudio": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAPicture": "🖼️ {username} sent a picture", + "@sentAPicture": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentASticker": "😊 {username} sent a sticker", + "@sentASticker": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAVideo": "🎥 {username} sent a video", + "@sentAVideo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentCallInformations": "{senderName} sent call information", + "@sentCallInformations": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "setAsCanonicalAlias": "Set as main alias", + "@setAsCanonicalAlias": { + "type": "String", + "placeholders": {} + }, + "setChatDescription": "Set chat description", + "setStatus": "Set status", + "@setStatus": { + "type": "String", + "placeholders": {} + }, + "settings": "Settings", + "@settings": { + "type": "String", + "placeholders": {} + }, + "share": "Share", + "@share": { + "type": "String", + "placeholders": {} + }, + "sharedTheLocation": "{username} shared their location", + "@sharedTheLocation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "shareLocation": "Share location", + "@shareLocation": { + "type": "String", + "placeholders": {} + }, + "showPassword": "Show password", + "@showPassword": { + "type": "String", + "placeholders": {} + }, + "presencesToggle": "Show status messages from other users", + "@presencesToggle": { + "type": "String", + "placeholders": {} + }, + "skip": "Skip", + "@skip": { + "type": "String", + "placeholders": {} + }, + "sourceCode": "Source code", + "@sourceCode": { + "type": "String", + "placeholders": {} + }, + "spaceIsPublic": "Space is public", + "@spaceIsPublic": { + "type": "String", + "placeholders": {} + }, + "spaceName": "Space name", + "@spaceName": { + "type": "String", + "placeholders": {} + }, + "startedACall": "{senderName} started a call", + "@startedACall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "status": "Status", + "@status": { + "type": "String", + "placeholders": {} + }, + "statusExampleMessage": "How are you today?", + "@statusExampleMessage": { + "type": "String", + "placeholders": {} + }, + "submit": "Submit", + "@submit": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWait": "Synchronizing… Please wait.", + "@synchronizingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWaitCounter": " Synchronizing… ({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "systemTheme": "System", + "@systemTheme": { + "type": "String", + "placeholders": {} + }, + "theyDontMatch": "They Don't Match", + "@theyDontMatch": { + "type": "String", + "placeholders": {} + }, + "theyMatch": "They Match", + "@theyMatch": { + "type": "String", + "placeholders": {} + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "String", + "placeholders": {} + }, + "tooManyRequestsWarning": "Too many requests. Please try again later!", + "@tooManyRequestsWarning": { + "type": "String", + "placeholders": {} + }, + "transferFromAnotherDevice": "Transfer from another device", + "@transferFromAnotherDevice": { + "type": "String", + "placeholders": {} + }, + "tryToSendAgain": "Try to send again", + "@tryToSendAgain": { + "type": "String", + "placeholders": {} + }, + "unavailable": "Unavailable", + "@unavailable": { + "type": "String", + "placeholders": {} + }, + "unbannedUser": "{username} unbanned {targetName}", + "@unbannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "unblockDevice": "Unblock Device", + "@unblockDevice": { + "type": "String", + "placeholders": {} + }, + "unknownDevice": "Unknown device", + "@unknownDevice": { + "type": "String", + "placeholders": {} + }, + "unknownEncryptionAlgorithm": "Unknown encryption algorithm", + "@unknownEncryptionAlgorithm": { + "type": "String", + "placeholders": {} + }, + "unknownEvent": "Unknown event '{type}'", + "@unknownEvent": { + "type": "String", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "unmuteChat": "Unmute chat", + "@unmuteChat": { + "type": "String", + "placeholders": {} + }, + "unpin": "Unpin", + "@unpin": { + "type": "String", + "placeholders": {} + }, + "userAndOthersAreTyping": "{username} and {count} others are typing…", + "@userAndOthersAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "userAndUserAreTyping": "{username} and {username2} are typing…", + "@userAndUserAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "username2": { + "type": "String" + } + } + }, + "userIsTyping": "{username} is typing…", + "@userIsTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "userLeftTheChat": "🚪 {username} left the chat", + "@userLeftTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "username": "Username", + "@username": { + "type": "String", + "placeholders": {} + }, + "userSentUnknownEvent": "{username} sent a {type} event", + "@userSentUnknownEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "type": { + "type": "String" + } + } + }, + "unverified": "Unverified", + "verified": "Verified", + "@verified": { + "type": "String", + "placeholders": {} + }, + "verify": "Verify", + "@verify": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "Start Verification", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "You successfully verified!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "verifyTitle": "Verifying other account", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "videoCall": "Video call", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "visibilityOfTheChatHistory": "Visibility of the chat history", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "Visible for all participants", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "visibleForEveryone": "Visible for everyone", + "@visibleForEveryone": { + "type": "String", + "placeholders": {} + }, + "voiceMessage": "Voice message", + "@voiceMessage": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Waiting for partner to accept the request…", + "@waitingPartnerAcceptRequest": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerEmoji": "Waiting for partner to accept the emoji…", + "@waitingPartnerEmoji": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerNumbers": "Waiting for partner to accept the numbers…", + "@waitingPartnerNumbers": { + "type": "String", + "placeholders": {} + }, + "warning": "Warning!", + "@warning": { + "type": "String", + "placeholders": {} + }, + "weSentYouAnEmail": "We sent you an email", + "@weSentYouAnEmail": { + "type": "String", + "placeholders": {} + }, + "whoCanPerformWhichAction": "Who can perform which action", + "@whoCanPerformWhichAction": { + "type": "String", + "placeholders": {} + }, + "whoIsAllowedToJoinThisGroup": "Who is allowed to join this group", + "@whoIsAllowedToJoinThisGroup": { + "type": "String", + "placeholders": {} + }, + "whyDoYouWantToReportThis": "Why do you want to report this?", + "@whyDoYouWantToReportThis": { + "type": "String", + "placeholders": {} + }, + "wipeChatBackup": "Wipe your chat backup to create a new recovery key?", + "@wipeChatBackup": { + "type": "String", + "placeholders": {} + }, + "withTheseAddressesRecoveryDescription": "With these addresses you can recover your password.", + "@withTheseAddressesRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "writeAMessage": "Write a message…", + "@writeAMessage": { + "type": "String", + "placeholders": {} + }, + "yes": "Yes", + "@yes": { + "type": "String", + "placeholders": {} + }, + "you": "You", + "@you": { + "type": "String", + "placeholders": {} + }, + "youAreNoLongerParticipatingInThisChat": "You are no longer participating in this chat", + "@youAreNoLongerParticipatingInThisChat": { + "type": "String", + "placeholders": {} + }, + "youHaveBeenBannedFromThisChat": "You have been banned from this chat", + "@youHaveBeenBannedFromThisChat": { + "type": "String", + "placeholders": {} + }, + "yourPublicKey": "Your public key", + "@yourPublicKey": { + "type": "String", + "placeholders": {} + }, + "messageInfo": "Message info", + "time": "Time", + "messageType": "Message Type", + "sender": "Sender", + "openGallery": "Open gallery", + "removeFromSpace": "Remove from space", + "start": "Start", + "pleaseEnterRecoveryKeyDescription": "To unlock your old messages, please enter your recovery key that has been generated in a previous session. Your recovery key is NOT your password.", + "openChat": "Open Chat", + "markAsRead": "Mark as read", + "reportUser": "Report user", + "dismiss": "Dismiss", + "reactedWith": "{sender} reacted with {reaction}", + "@reactedWith": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "reaction": { + "type": "String" + } + } + }, + "pinMessage": "Pin to room", + "confirmEventUnpin": "Are you sure to permanently unpin the event?", + "emojis": "Emojis", + "placeCall": "Place call", + "voiceCall": "Voice call", + "unsupportedAndroidVersion": "Unsupported Android version", + "unsupportedAndroidVersionLong": "This feature requires a newer Android version. Please check for updates or Lineage OS support.", + "videoCallsBetaWarning": "Please note that video calls are currently in beta. They might not work as expected or work at all on all platforms.", + "experimentalVideoCalls": "Experimental video calls", + "youRejectedTheInvitation": "You rejected the invitation", + "youJoinedTheChat": "You joined the chat", + "youAcceptedTheInvitation": "👍 You accepted the invitation", + "youBannedUser": "You banned {user}", + "@youBannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youHaveWithdrawnTheInvitationFor": "You have withdrawn the invitation for {user}", + "@youHaveWithdrawnTheInvitationFor": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedBy": "📩 You have been invited by {user}", + "@youInvitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "invitedBy": "📩 Invited by {user}", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedUser": "📩 You invited {user}", + "@youInvitedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKicked": "👞 You kicked {user}", + "@youKicked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKickedAndBanned": "🙅 You kicked and banned {user}", + "@youKickedAndBanned": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youUnbannedUser": "You unbanned {user}", + "@youUnbannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "hasKnocked": "🚪 {user} has knocked", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "usersMustKnock": "Users must knock", + "noOneCanJoin": "No one can join", + "knock": "Knock", + "users": "Users", + "unlockOldMessages": "Unlock old messages", + "storeInSecureStorageDescription": "Store the recovery key in the secure storage of this device.", + "saveKeyManuallyDescription": "Save this key manually by triggering the system share dialog or clipboard.", + "storeInAndroidKeystore": "Store in Android KeyStore", + "storeInAppleKeyChain": "Store in Apple KeyChain", + "storeSecurlyOnThisDevice": "Store securely on this device", + "countFiles": "{count} files", + "@countFiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "user": "User", + "custom": "Custom", + "foregroundServiceRunning": "This notification appears when the foreground service is running.", + "screenSharingTitle": "screen sharing", + "screenSharingDetail": "You are sharing your screen in FuffyChat", + "whyIsThisMessageEncrypted": "Why is this message unreadable?", + "noKeyForThisMessage": "This can happen if the message was sent before you have signed in to your account at this device.\n\nIt is also possible that the sender has blocked your device or something went wrong with the internet connection.\n\nAre you able to read the message on another session? Then you can transfer the message from it! Go to Settings > Devices and make sure that your devices have verified each other. When you open the room the next time and both sessions are in the foreground, the keys will be transmitted automatically.\n\nDo you not want to lose the keys when logging out or switching devices? Make sure that you have enabled the chat backup in the settings.", + "newGroup": "New group", + "newSpace": "New space", + "allSpaces": "All spaces", + "hidePresences": "Hide Status List?", + "doNotShowAgain": "Do not show again", + "wasDirectChatDisplayName": "Empty chat (was {oldDisplayName})", + "@wasDirectChatDisplayName": { + "type": "String", + "placeholders": { + "oldDisplayName": { + "type": "String" + } + } + }, + "newSpaceDescription": "Spaces allows you to consolidate your chats and build private or public communities.", + "encryptThisChat": "Encrypt this chat", + "disableEncryptionWarning": "For security reasons you can not disable encryption in a chat, where it has been enabled before.", + "sorryThatsNotPossible": "Sorry... that is not possible", + "deviceKeys": "Device keys:", + "reopenChat": "Reopen chat", + "noBackupWarning": "Warning! Without enabling chat backup, you will lose access to your encrypted messages. It is highly recommended to enable the chat backup first before logging out.", + "noOtherDevicesFound": "No other devices found", + "fileIsTooBigForServer": "Unable to send! The server only supports attachments up to {max}.", + "@fileIsTooBigForServer": { + "type": "String", + "placeholders": { + "max": { + "type": "String" + } + } + }, + "fileHasBeenSavedAt": "File has been saved at {path}", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "jumpToLastReadMessage": "Jump to last read message", + "readUpToHere": "Read up to here", + "jump": "Jump", + "openLinkInBrowser": "Open link in browser", + "reportErrorDescription": "😭 Oh no. Something went wrong. If you want, you can report this bug to the developers.", + "report": "report", + "setColorTheme": "Set color theme:", + "invite": "Invite", + "inviteGroupChat": "📨 Group chat invite", + "invalidInput": "Invalid input!", + "wrongPinEntered": "Wrong pin entered! Try again in {seconds} seconds...", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "pleaseEnterANumber": "Please enter a number greater than 0", + "archiveRoomDescription": "The chat will be moved to the archive. Other users will be able to see that you have left the chat.", + "roomUpgradeDescription": "The chat will then be recreated with the new room version. All participants will be notified that they need to switch to the new chat. You can find out more about room versions at https://spec.matrix.org/latest/rooms/", + "removeDevicesDescription": "You will be logged out of this device and will no longer be able to receive messages.", + "banUserDescription": "The user will be banned from the chat and will not be able to enter the chat again until they are unbanned.", + "unbanUserDescription": "The user will be able to enter the chat again if they try.", + "kickUserDescription": "The user is kicked out of the chat but not banned. In public chats, the user can rejoin at any time.", + "makeAdminDescription": "Once you make this user admin, you may not be able to undo this as they will then have the same permissions as you.", + "pushNotificationsNotAvailable": "Push notifications not available", + "learnMore": "Learn more", + "yourGlobalUserIdIs": "Your global user-ID is: ", + "noUsersFoundWithQuery": "Unfortunately no user could be found with \"{query}\". Please check whether you made a typo.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "knocking": "Knocking", + "chatCanBeDiscoveredViaSearchOnServer": "Chat can be discovered via the search on {server}", + "@chatCanBeDiscoveredViaSearchOnServer": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "searchChatsRooms": "Search for #chats, @users...", + "nothingFound": "Nothing found...", + "groupName": "Group name", + "createGroupAndInviteUsers": "Create a group and invite users", + "groupCanBeFoundViaSearch": "Group can be found via search", + "wrongRecoveryKey": "Sorry... this does not seem to be the correct recovery key.", + "commandHint_sendraw": "Send raw json", + "databaseMigrationTitle": "Database is optimized", + "databaseMigrationBody": "Please wait. This may take a moment.", + "leaveEmptyToClearStatus": "Leave empty to clear your status.", + "select": "Select", + "searchForUsers": "Search for @users...", + "pleaseEnterYourCurrentPassword": "Please enter your current password", + "newPassword": "New password", + "pleaseChooseAStrongPassword": "Please choose a strong password", + "passwordsDoNotMatch": "Passwords do not match", + "passwordIsWrong": "Your entered password is wrong", + "publicChatAddresses": "Public chat addresses", + "createNewAddress": "Create new address", + "joinSpace": "Join space", + "publicSpaces": "Public spaces", + "addChatOrSubSpace": "Add chat or sub space", + "thisDevice": "This device:", + "initAppError": "An error occured while init the app", + "searchIn": "Search in chat \"{chat}\"...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "searchMore": "Search more...", + "gallery": "Gallery", + "files": "Files", + "sessionLostBody": "Your session is lost. Please report this error to the developers at {url}. The error message is: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "restoreSessionBody": "The app now tries to restore your session from the backup. Please report this error to the developers at {url}. The error message is: {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "sendReadReceipts": "Send read receipts", + "sendTypingNotificationsDescription": "Other participants in a chat can see when you are typing a new message.", + "sendReadReceiptsDescription": "Other participants in a chat can see when you have read a message.", + "formattedMessages": "Formatted messages", + "formattedMessagesDescription": "Display rich message content like bold text using markdown.", + "verifyOtherUser": "🔐 Verify other user", + "verifyOtherUserDescription": "If you verify another user, you can be sure that you know who you are really writing to. 💪\n\nWhen you start a verification, you and the other user will see a popup in the app. There you will then see a series of emojis or numbers that you have to compare with each other.\n\nThe best way to do this is to meet up or start a video call. 👭", + "verifyOtherDevice": "🔐 Verify other device", + "verifyOtherDeviceDescription": "When you verify another device, those devices can exchange keys, increasing your overall security. 💪 When you start a verification, a popup will appear in the app on both devices. There you will then see a series of emojis or numbers that you have to compare with each other. It's best to have both devices handy before you start the verification. 🤳", + "acceptedKeyVerification": "{sender} accepted key verification", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "canceledKeyVerification": "{sender} canceled key verification", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "completedKeyVerification": "{sender} completed key verification", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "isReadyForKeyVerification": "{sender} is ready for key verification", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "requestedKeyVerification": "{sender} requested key verification", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "startedKeyVerification": "{sender} started key verification", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "transparent": "Transparent", + "incomingMessages": "Incoming messages", + "stickers": "Stickers", + "discover": "Discover", + "commandHint_ignore": "Ignore the given matrix ID", + "commandHint_unignore": "Unignore the given matrix ID", + "unreadChatsInApp": "{appname}: {unread} unread chats", + "@unreadChatsInApp": { + "type": "String", + "placeholders": { + "appname": { + "type": "String" + }, + "unread": { + "type": "String" + } + } + }, + "noDatabaseEncryption": "Database encryption is not supported on this platform", + "thereAreCountUsersBlocked": "Right now there are {count} users blocked.", + "@thereAreCountUsersBlocked": { + "type": "String", + "count": {} + }, + "restricted": "Restricted", + "knockRestricted": "Knock restricted", + "goToSpace": "Go to space: {space}", + "@goToSpace": { + "type": "String", + "space": {} + }, + "markAsUnread": "Mark as unread", + "userLevel": "{level} - User", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "moderatorLevel": "{level} - Moderator", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "adminLevel": "{level} - Admin", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "Change general chat settings", + "inviteOtherUsers": "Invite other users to this chat", + "changeTheChatPermissions": "Change the chat permissions", + "changeTheVisibilityOfChatHistory": "Change the visibility of the chat history", + "changeTheCanonicalRoomAlias": "Change the main public chat address", + "sendRoomNotifications": "Send a @room notifications", + "changeTheDescriptionOfTheGroup": "Change the description of the chat", + "chatPermissionsDescription": "Define which power level is necessary for certain actions in this chat. The power levels 0, 50 and 100 are usually representing users, moderators and admins, but any gradation is possible.", + "updateInstalled": "🎉 Update {version} installed!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "changelog": "Changelog", + "sendCanceled": "Sending canceled", + "loginWithMatrixId": "Login with Matrix-ID", + "doesNotSeemToBeAValidHomeserver": "Doesn't seem to be a compatible homeserver. Wrong URL?", + "calculatingFileSize": "Calculating file size...", + "prepareSendingAttachment": "Prepare sending attachment...", + "sendingAttachment": "Sending attachment...", + "generatingVideoThumbnail": "Generating video thumbnail...", + "compressVideo": "Compressing video...", + "sendingAttachmentCountOfCount": "Sending attachment {index} of {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "Server limit reached! Waiting {seconds} seconds...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "One of your devices is not verified", + "noticeChatBackupDeviceVerification": "Note: When you connect all your devices to the chat backup, they are automatically verified.", + "continueText": "Continue", + "welcomeText": "Hey Hey 👋 This is FluffyChat. You can sign in to any homeserver, which is compatible with https://matrix.org. And then chat with anyone. It's a huge decentralized messaging network!", + "blur": "Blur:", + "opacity": "Opacity:", + "setWallpaper": "Set wallpaper", + "manageAccount": "Manage account", + "noContactInformationProvided": "Server does not provide any valid contact information", + "contactServerAdmin": "Contact server admin", + "contactServerSecurity": "Contact server security", + "supportPage": "Support page", + "serverInformation": "Server information:", + "name": "Name", + "version": "Version", + "website": "Website", + "compress": "Compress", + "boldText": "Bold text", + "italicText": "Italic text", + "strikeThrough": "Strikethrough", + "pleaseFillOut": "Please fill out", + "invalidUrl": "Invalid url", + "addLink": "Add link", + "unableToJoinChat": "Unable to join chat. Maybe the other party has already closed the conversation.", + "previous": "Previous", + "otherPartyNotLoggedIn": "The other party is currently not logged in and therefore cannot receive messages!", + "appWantsToUseForLogin": "Use '{server}' to log in", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "appWantsToUseForLoginDescription": "You hereby allow the app and website to share information about you.", + "open": "Open", + "waitingForServer": "Waiting for server...", + "newChatRequest": "📩 New chat request", + "contentNotificationSettings": "Content notification settings", + "generalNotificationSettings": "General notification settings", + "roomNotificationSettings": "Room notification settings", + "userSpecificNotificationSettings": "User specific notification settings", + "otherNotificationSettings": "Other notification settings", + "notificationRuleContainsUserName": "Contains User Name", + "notificationRuleContainsUserNameDescription": "Notifies the user when a message contains their username.", + "notificationRuleMaster": "Mute all notifications", + "notificationRuleMasterDescription": "Overrides all other rules and disables all notifications.", + "notificationRuleSuppressNotices": "Suppress Automated Messages", + "notificationRuleSuppressNoticesDescription": "Suppresses notifications from automated clients like bots.", + "notificationRuleInviteForMe": "Invite for Me", + "notificationRuleInviteForMeDescription": "Notifies the user when they are invited to a room.", + "notificationRuleMemberEvent": "Member Event", + "notificationRuleMemberEventDescription": "Suppresses notifications for membership events.", + "notificationRuleIsUserMention": "User Mention", + "notificationRuleIsUserMentionDescription": "Notifies the user when they are directly mentioned in a message.", + "notificationRuleContainsDisplayName": "Contains Display Name", + "notificationRuleContainsDisplayNameDescription": "Notifies the user when a message contains their display name.", + "notificationRuleIsRoomMention": "Room Mention", + "notificationRuleIsRoomMentionDescription": "Notifies the user when there is a room mention.", + "notificationRuleRoomnotif": "Room Notification", + "notificationRuleRoomnotifDescription": "Notifies the user when a message contains '@room'.", + "notificationRuleTombstone": "Tombstone", + "notificationRuleTombstoneDescription": "Notifies the user about room deactivation messages.", + "notificationRuleReaction": "Reaction", + "notificationRuleReactionDescription": "Suppresses notifications for reactions.", + "notificationRuleRoomServerAcl": "Room Server ACL", + "notificationRuleRoomServerAclDescription": "Suppresses notifications for room server access control lists (ACL).", + "notificationRuleSuppressEdits": "Suppress Edits", + "notificationRuleSuppressEditsDescription": "Suppresses notifications for edited messages.", + "notificationRuleCall": "Call", + "notificationRuleCallDescription": "Notifies the user about calls.", + "notificationRuleEncryptedRoomOneToOne": "Encrypted Room One-to-One", + "notificationRuleEncryptedRoomOneToOneDescription": "Notifies the user about messages in encrypted one-to-one rooms.", + "notificationRuleRoomOneToOne": "Room One-to-One", + "notificationRuleRoomOneToOneDescription": "Notifies the user about messages in one-to-one rooms.", + "notificationRuleMessage": "Message", + "notificationRuleMessageDescription": "Notifies the user about general messages.", + "notificationRuleEncrypted": "Encrypted", + "notificationRuleEncryptedDescription": "Notifies the user about messages in encrypted rooms.", + "notificationRuleJitsi": "Jitsi", + "notificationRuleJitsiDescription": "Notifies the user about Jitsi widget events.", + "notificationRuleServerAcl": "Suppress Server ACL Events", + "notificationRuleServerAclDescription": "Suppresses notifications for Server ACL events.", + "unknownPushRule": "Unknown push rule '{rule}'", + "@unknownPushRule": { + "type": "String", + "placeholders": { + "rule": { + "type": "String" + } + } + }, + "sentVoiceMessage": "🎙️ {duration} - Voice message from {sender}", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "deletePushRuleCanNotBeUndone": "If you delete this notification setting, this can not be undone.", + "more": "More", + "shareKeysWith": "Share keys with...", + "shareKeysWithDescription": "Which devices should be trusted so that they can read along your messages in encrypted chats?", + "allDevices": "All devices", + "crossVerifiedDevicesIfEnabled": "Cross verified devices if enabled", + "crossVerifiedDevices": "Cross verified devices", + "verifiedDevicesOnly": "Verified devices only", + "takeAPhoto": "Take a photo", + "recordAVideo": "Record a video", + "optionalMessage": "(Optional) message...", + "notSupportedOnThisDevice": "Not supported on this device", + "enterNewChat": "Enter new chat", + "approve": "Approve", + "youHaveKnocked": "You have knocked", + "pleaseWaitUntilInvited": "Please wait now, until someone from the room invites you.", + "commandHint_logout": "Logout your current device", + "commandHint_logoutall": "Logout all active devices", + "displayNavigationRail": "Show navigation rail on mobile", + "customReaction": "Custom reaction", + "moreEvents": "More events", + "declineInvitation": "Decline invitation", + "noMessagesYet": "No messages yet", + "longPressToRecordVoiceMessage": "Long press to record voice message.", + "pause": "Pause", + "resume": "Resume", + "removeFromSpaceDescription": "The chat will be removed from the space but still appear in your chat list.", + "countChats": "{chats} chats", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Space member of {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "Space member of {spaces} can knock", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username} started a poll.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "Poll", + "startPoll": "Start poll", + "endPoll": "End poll", + "answersVisible": "Answers visible", + "pollQuestion": "Poll question", + "answerOption": "Answer option", + "addAnswerOption": "Add answer option", + "allowMultipleAnswers": "Allow multiple answers", + "pollHasBeenEnded": "Poll has been ended", + "countVotes": "{count, plural, =1{One vote} other{{count} votes}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "answersWillBeVisibleWhenPollHasEnded": "Answers will be visible when poll has ended", + "replyInThread": "Reply in thread", + "countReplies": "{count, plural, =1{One reply} other{{count} replies}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "thread": "Thread", + "backToMainChat": "Back to main chat", + "saveChanges": "Save changes", + "createSticker": "Create sticker or emoji", + "useAsSticker": "Use as sticker", + "useAsEmoji": "Use as emoji", + "stickerPackNameAlreadyExists": "Sticker pack name already exists", + "newStickerPack": "New sticker pack", + "stickerPackName": "Sticker pack name", + "attribution": "Attribution", + "skipChatBackup": "Skip chat backup", + "skipChatBackupWarning": "Are you sure? Without enabling the chat backup you may lose access to your messages if you switch your device.", + "loadingMessages": "Loading messages", + "setupChatBackup": "Set up chat backup", + "noMoreResultsFound": "No more results found", + "chatSearchedUntil": "Chat searched until {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "Federation Base URL", + "clientWellKnownInformation": "Client-Well-Known Information:", + "baseUrl": "Base URL", + "identityServer": "Identity Server:", + "versionWithNumber": "Version: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Logs", + "advancedConfigs": "Advanced Configs", + "advancedConfigurations": "Advanced configurations", + "signIn": "Sign in", + "createNewAccount": "Create new account", + "signUpGreeting": "FluffyChat is decentralized! Select a server where you want to create your account and let's go!", + "signInGreeting": "You already have an account in Matrix? Welcome back! Select your homeserver and sign in.", + "appIntro": "With FluffyChat you can chat with your friends. It's a secure decentralized [matrix] messenger! Learn more on https://matrix.org if you like or just sign up.", + "theProcessWasCanceled": "The process was canceled.", + "join": "Join", + "searchOrEnterHomeserverAddress": "Search or enter homeserver address", + "matrixId": "Matrix ID", + "setPowerLevel": "Set power level", + "makeModerator": "Make moderator", + "makeAdmin": "Make admin", + "removeModeratorRights": "Remove moderator rights", + "removeAdminRights": "Remove admin rights", + "powerLevel": "Power level", + "setPowerLevelDescription": "Power levels define what a member is allowed to do in this room and usually range between 0 and 100.", + "owner": "Owner", + "mute": "Mute", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Create new chat", + "reset": "Reset", + "supportFluffyChat": "Support FluffyChat", + "support": "Support", + "fluffyChatSupportBannerMessage": "FluffyChat needs YOUR help!\n❤️❤️❤️\nFluffyChat will always be free, but development and hosting still cost money.\nThe future of the project depends on support from people like you.", + "skipSupportingFluffyChat": "Skip supporting FluffyChat", + "iDoNotWantToSupport": "I do not want to support", + "iAlreadySupportFluffyChat": "I already support FluffyChat", + "setLowPriority": "Set low priority", + "unsetLowPriority": "Unset low priority", + "removeCallFromChat": "Remove call from chat", + "removeCallFromChatDescription": "Do you want to remove the call from the chat for all members?", + "removeCallForEveryone": "Remove call for everyone", + "startVoiceCall": "Start voice call", + "startVideoCall": "Start video call", + "joinVoiceCall": "Join voice call", + "joinVideoCall": "Join video call", + "live": "Live" +} \ No newline at end of file diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index 44b04049..ab05c171 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -123,18 +123,6 @@ } } }, - "badServerVersionsException": "La hejmservilo subtenas la jenajn version de la specifaĵo:\n{serverVersions}\nSed ĉi tiu aplikaĵo subtenas nur {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Forbari de babilo", "@banFromChat": { "type": "String", @@ -167,11 +155,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Mesaĝoj de robotoj", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Nuligi", "@cancel": { "type": "String", @@ -496,31 +479,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Konfirmi", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Konektiĝi", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakto invitiĝis al la grupo", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Enhavas prezentan nomon", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Enhavas uzantonomon", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "La enhavo raportiĝis al la administrantoj de la servilo", "@contentHasBeenReported": { "type": "String", @@ -600,33 +563,6 @@ } } }, - "dateWithoutYear": "{day}a de la {month}a", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}a de la {month}a de {year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Ĉi tio malaktivigos vian konton de uzanto. Ne eblas tion malfari! Ĉu certe vi certas?", "@deactivateAccountWarning": { "type": "String", @@ -732,11 +668,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Vi devas elekti mallongigon de mieneto kaj bildon!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Malplena babilo", "@emptyChat": { "type": "String", @@ -786,11 +717,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Enigu vian hejmservilon", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Eraris akirado de loko: {error}", "@errorObtainingLocation": { "type": "String", @@ -840,11 +766,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Iri al la nova ĉambro", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupo", "@group": { "type": "String", @@ -916,11 +837,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identeco", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Malatenti", "@ignore": { "type": "String", @@ -982,11 +898,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Invito por mi", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} invitis vin al FluffyChat. \n1. Instalu la aplikaĵon FluffyChat: https://fluffychat.im \n2. Registriĝu aŭ salutu \n3. Malfermu la invitan ligilon: {link}", "@inviteText": { "type": "String", @@ -1066,11 +977,6 @@ "type": "String", "placeholders": {} }, - "license": "Permesilo", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Hela", "@lightTheme": { "type": "String", @@ -1114,11 +1020,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Ŝanĝoj de anoj", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Mencii", "@mention": { "type": "String", @@ -1214,11 +1115,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Sciigoj ŝaltiĝis por ĉi tiu konto", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} uzantoj tajpas…", "@numUsersTyping": { "type": "String", @@ -1313,11 +1209,6 @@ "type": "String", "placeholders": {} }, - "people": "Personoj", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Elekti bildon", "@pickImage": { "type": "String", @@ -1337,11 +1228,6 @@ } } }, - "pleaseChoose": "Bonvolu elekti", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Bonvolu elekti paskodon", "@pleaseChooseAPasscode": { "type": "String", @@ -1435,11 +1321,6 @@ } } }, - "rejoin": "Ree aliĝi", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Forigi", "@remove": { "type": "String", @@ -1459,11 +1340,6 @@ } } }, - "removeDevice": "Forigi aparaton", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Malforbari", "@unbanFromChat": { "type": "String", @@ -1519,15 +1395,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Vidita de {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Sendi", "@send": { "type": "String", @@ -1558,16 +1425,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Sendi originalon", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Sendi glumarkon", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Sendi filmon", "@sendVideo": { "type": "String", @@ -1632,21 +1489,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Agordi proprajn mienetojn", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Agordi invitan ligilon", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Agordi nivelon de permesoj", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Agordi staton", "@setStatus": { "type": "String", @@ -1681,11 +1523,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Ununura saluto", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Preterpasi", "@skip": { "type": "String", @@ -1756,21 +1593,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Baskuli elstarigon", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Basklui silentigon", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Baskuli legitecon", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Tro multaj petoj. Bonvolu reprovi poste!", "@tooManyRequestsWarning": { "type": "String", @@ -1837,15 +1659,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 nelegita babilo} other{{unreadCount} nelegitaj babiloj}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} kaj {count} aliaj tajpas…", "@userAndOthersAreTyping": { "type": "String", @@ -1970,11 +1783,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Fonbildo", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Averto!", "@warning": { "type": "String", @@ -2061,8 +1869,6 @@ "type": "String", "description": "Usage hint for the command /send" }, - "chatHasBeenAddedToThisSpace": "Babilo aldoniĝis al ĉi tiu aro", - "@chatHasBeenAddedToThisSpace": {}, "autoplayImages": "Memage ludi movbildajn glumarkojn kaj mienetojn", "@autoplayImages": { "type": "String", @@ -2074,4 +1880,4 @@ "@homeserver": {}, "sendOnEnter": "Sendi per eniga klavo", "@sendOnEnter": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 9ddfaaa4..0ef41aea 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -68,7 +68,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "¿Pueden unirse usuarios de visita?", + "areGuestsAllowedToJoin": "¿Pueden los usuarios invitados unirse?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -109,18 +109,6 @@ } } }, - "badServerVersionsException": "El servidor soporta las siguientes versiones de la especificación:\n{serverVersions}\npero esta aplicación sólo soporta las versiones {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Vetar del chat", "@banFromChat": { "type": "String", @@ -363,7 +351,6 @@ "placeholders": {} }, "clearArchive": "Borrar archivo", - "@clearArchive": {}, "close": "Cerrar", "@close": { "type": "String", @@ -379,16 +366,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Confirmar", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Conectar", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "El contacto ha sido invitado al grupo", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -463,33 +440,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Se desactivará su cuenta de usuario. ¡La operación no se puede cancelar! ¿Está seguro?", "@deactivateAccountWarning": { "type": "String", @@ -565,11 +515,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "¡Debes elegir un atajo de emote y una imagen!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Chat vacío", "@emptyChat": { "type": "String", @@ -609,11 +554,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Ingrese su servidor", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "¡Todo listo!", "@everythingReady": { "type": "String", @@ -705,11 +645,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identidad", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignoredUsers": "Usuarios ignorados", "@ignoredUsers": { "type": "String", @@ -835,11 +770,6 @@ "type": "String", "placeholders": {} }, - "license": "Licencia", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Claro", "@lightTheme": { "type": "String", @@ -1003,11 +933,6 @@ "type": "String", "placeholders": {} }, - "people": "Personas", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Elegir imagen", "@pickImage": { "type": "String", @@ -1085,11 +1010,6 @@ } } }, - "rejoin": "Volver a unirse", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Eliminar", "@remove": { "type": "String", @@ -1109,11 +1029,6 @@ } } }, - "removeDevice": "Eliminar dispositivo", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Eliminar la expulsión", "@unbanFromChat": { "type": "String", @@ -1139,15 +1054,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Visto por {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Enviar", "@send": { "type": "String", @@ -1173,11 +1079,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Enviar el original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Enviar video", "@sendVideo": { "type": "String", @@ -1242,11 +1143,6 @@ "type": "String", "placeholders": {} }, - "setInvitationLink": "Establecer enlace de invitación", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "Establecer estado", "@setStatus": { "type": "String", @@ -1387,15 +1283,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 chat no leído} other{{unreadCount} chats no leídos}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} y {count} más están escribiendo…", "@userAndOthersAreTyping": { "type": "String", @@ -1520,11 +1407,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Fondo de pantalla:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "¡Advertencia!", "@warning": { "type": "String", @@ -1576,7 +1458,6 @@ "placeholders": {} }, "addToSpace": "Agregar al espacio", - "@addToSpace": {}, "cantOpenUri": "No puedo abrir el URI {uri}", "@cantOpenUri": { "type": "String", @@ -1596,46 +1477,21 @@ "type": "String", "placeholders": {} }, - "botMessages": "Mensajes de bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "oneClientLoggedOut": "Se ha cerrado en la sesión de uno de sus clientes", - "@oneClientLoggedOut": {}, "addAccount": "Añadir cuenta", - "@addAccount": {}, "editBundlesForAccount": "Editar paquetes para esta cuenta", - "@editBundlesForAccount": {}, "addToBundle": "Agregar al paquete", - "@addToBundle": {}, "bundleName": "Nombre del paquete", - "@bundleName": {}, "saveFile": "Guardar el archivo", "@saveFile": { "type": "String", "placeholders": {} }, - "sendSticker": "Enviar stickers", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Establecer nivel de permisos", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "shareLocation": "Compartir ubicación", "@shareLocation": { "type": "String", "placeholders": {} }, - "singlesignon": "Inicio de sesión único", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "status": "Estado", "@status": { "type": "String", @@ -1670,11 +1526,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Invitar por mí", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "noPasswordRecoveryDescription": "Aún no ha agregado una forma de recuperar su contraseña.", "@noPasswordRecoveryDescription": { "type": "String", @@ -1699,8 +1550,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "El chat se ha agregado a este espacio", - "@chatHasBeenAddedToThisSpace": {}, "commandInvalid": "Comando inválido", "@commandInvalid": { "type": "String" @@ -1755,11 +1604,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Cambios de miembros", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "createNewSpace": "Nuevo espacio", "@createNewSpace": { "type": "String", @@ -1770,11 +1614,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Establecer emoticonos personalizados", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorar", "@ignore": { "type": "String", @@ -1785,23 +1624,12 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notificaciones habilitadas para esta cuenta", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "offensive": "Ofensiva", "@offensive": { "type": "String", "placeholders": {} }, "serverRequiresEmail": "Este servidor necesita validar su dirección de correo electrónico para registrarse.", - "@serverRequiresEmail": {}, - "pleaseChoose": "Por favor elija", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "replaceRoomWithNewerVersion": "Reemplazar habitación con una versión más nueva", "@replaceRoomWithNewerVersion": { "type": "String", @@ -1861,11 +1689,6 @@ "@sendAsText": { "type": "String" }, - "toggleMuted": "Alternar silenciado", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Demasiadas solicitudes. ¡Por favor inténtelo más tarde!", "@tooManyRequestsWarning": { "type": "String", @@ -1886,11 +1709,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Contiene nombre de usuario", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "oopsPushError": "¡UPS¡ Desafortunadamente, se produjo un error al configurar las notificaciones push.", "@oopsPushError": { "type": "String", @@ -1937,9 +1755,7 @@ "description": "State that {command} is not a valid /command." }, "scanQrCode": "Escanear código QR", - "@scanQrCode": {}, "homeserver": "Servidor inicial", - "@homeserver": {}, "newChat": "Nuevo chat", "@newChat": { "type": "String", @@ -1951,7 +1767,6 @@ "description": "Usage hint for the command /join" }, "sendOnEnter": "Enviar con enter", - "@sendOnEnter": {}, "changeYourAvatar": "Cambiar tu avatar", "@changeYourAvatar": { "type": "String", @@ -2007,11 +1822,6 @@ "type": "String", "description": "Usage hint for the command /react" }, - "containsDisplayName": "Contiene nombre para mostrar", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "editRoomAvatar": "Editar avatar de sala", "@editRoomAvatar": { "type": "String", @@ -2027,11 +1837,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Ir a la nueva sala", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "noMatrixServer": "{server1} no es un servidor matrix, usar {server2} en su lugar?", "@noMatrixServer": { "type": "String", @@ -2050,11 +1855,8 @@ "placeholders": {} }, "removeFromBundle": "Quitar de este paquete", - "@removeFromBundle": {}, "link": "Link", - "@link": {}, "enableMultiAccounts": "(BETA) habilite varias cuenta en este dispositivo", - "@enableMultiAccounts": {}, "pleaseEnter4Digits": "Ingrese 4 dígitos o déjelo en blanco para deshabilitar el bloqueo de la aplicación.", "@pleaseEnter4Digits": { "type": "String", @@ -2085,16 +1887,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Alternar favorito", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Marcar como: leído / no leído", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "whoCanPerformWhichAction": "Quién puede realizar qué acción", "@whoCanPerformWhichAction": { "type": "String", @@ -2111,71 +1903,30 @@ "placeholders": {} }, "yourChatBackupHasBeenSetUp": "Se ha configurado la copia de respaldo del chat.", - "@yourChatBackupHasBeenSetUp": {}, "unverified": "No verificado", - "@unverified": {}, "commandHint_clearcache": "Limpiar cache", "@commandHint_clearcache": { "type": "String", "description": "Usage hint for the command /clearcache" }, "messageInfo": "Información del mensaje", - "@messageInfo": {}, "time": "Tiempo", - "@time": {}, - "openVideoCamera": "Abrir la cámara para un video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "repeatPassword": "Repite la contraseña", - "@repeatPassword": {}, "removeFromSpace": "Eliminar del espacio", - "@removeFromSpace": {}, - "addToSpaceDescription": "Elige un espacio para añadirle este chat.", - "@addToSpaceDescription": {}, "openGallery": "Abrir galería", - "@openGallery": {}, "start": "Iniciar", - "@start": {}, "commandHint_discardsession": "Descartar sesión", "@commandHint_discardsession": { "type": "String", "description": "Usage hint for the command /discardsession" }, "messageType": "Tipo de Mensaje", - "@messageType": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Publicar", - "@publish": {}, "newSpace": "Nuevo espacio", - "@newSpace": {}, "allSpaces": "Todos los espacios", - "@allSpaces": {}, - "widgetUrlError": "Esta no es una URL válida.", - "@widgetUrlError": {}, "commandHint_markasgroup": "Marcar como grupo", - "@commandHint_markasgroup": {}, - "nextAccount": "Siguiente cuenta", - "@nextAccount": {}, "youRejectedTheInvitation": "Rechazaste la invitación", - "@youRejectedTheInvitation": {}, "newGroup": "Nuevo grupo", - "@newGroup": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "previousAccount": "Cuenta anterior", - "@previousAccount": {}, "users": "Usuarios", - "@users": {}, "youInvitedBy": "📩 Has sido invitado por {user}", "@youInvitedBy": { "placeholders": { @@ -2185,11 +1936,7 @@ } }, "youAcceptedTheInvitation": "👍 Aceptaste la invitación", - "@youAcceptedTheInvitation": {}, - "widgetEtherpad": "Nota de texto", - "@widgetEtherpad": {}, "commandHint_cuddle": "Enviar un abrazo", - "@commandHint_cuddle": {}, "supposedMxid": "Esto debería ser {mxid}", "@supposedMxid": { "type": "String", @@ -2200,23 +1947,13 @@ } }, "importFromZipFile": "Importar de un archivo .zip", - "@importFromZipFile": {}, "exportEmotePack": "Exportar paquete de emotes a .zip", - "@exportEmotePack": {}, - "addChatDescription": "Añadir una descripción del chat...", - "@addChatDescription": {}, "sendTypingNotifications": "Enviar notificaciones \"está escribiendo\"", - "@sendTypingNotifications": {}, "importEmojis": "Importar emojis", - "@importEmojis": {}, "confirmMatrixId": "Por favor confirma tu Matrix ID para borrar tu cuenta.", - "@confirmMatrixId": {}, "notAnImage": "El archivo no es una imagen.", - "@notAnImage": {}, "commandHint_hug": "Mandar un abrazo", - "@commandHint_hug": {}, "importNow": "Importar ahora", - "@importNow": {}, "hugContent": "{senderName} te abraza", "@hugContent": { "type": "String", @@ -2226,10 +1963,6 @@ } } }, - "otherCallingPermissions": "Micrófono, cámara y otros permisos de FluffyChat", - "@otherCallingPermissions": {}, - "emailOrUsername": "Correo electrónico o nombre de usuario", - "@emailOrUsername": {}, "countFiles": "{count} archivos", "@countFiles": { "placeholders": { @@ -2239,9 +1972,7 @@ } }, "reportUser": "Reportar usuario", - "@reportUser": {}, "voiceCall": "Llamada de voz", - "@voiceCall": {}, "reactedWith": "{sender} reaccionó con {reaction}", "@reactedWith": { "type": "String", @@ -2255,48 +1986,20 @@ } }, "markAsRead": "Marcar como leído", - "@markAsRead": {}, - "widgetName": "Nombre", - "@widgetName": {}, "replace": "Reemplazar", - "@replace": {}, "unsupportedAndroidVersionLong": "Esta característica requiere una versión más reciente de Android. Por favor, compruebe las actualizaciones o la compatibilidad de LineageOS.", - "@unsupportedAndroidVersionLong": {}, "storeSecurlyOnThisDevice": "Almacenar de forma segura en este dispositivo", - "@storeSecurlyOnThisDevice": {}, "openChat": "Abrir chat", - "@openChat": {}, "screenSharingDetail": "Usted está compartiendo su pantalla en FluffyChat", - "@screenSharingDetail": {}, - "allRooms": "Todos los chats grupales", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "widgetVideo": "Vídeo", - "@widgetVideo": {}, "dismiss": "Descartar", - "@dismiss": {}, "unsupportedAndroidVersion": "Versión de Android no compatible", - "@unsupportedAndroidVersion": {}, - "indexedDbErrorLong": "El almacenamiento de mensajes, por desgracia, no está habilitado en el modo privado por defecto.\nPor favor, visite\n - about:config\n - Establezca dom.indexedDB.privateBrowsing.enabled a true\nDe otra forma, no es posible usar FluffyChat.", - "@indexedDbErrorLong": {}, - "startFirstChat": "Comience su primer chat", - "@startFirstChat": {}, "commandHint_create": "Crear un chat grupal vacío\nUse --no-encryption para deshabilitar el cifrado", "@commandHint_create": { "type": "String", "description": "Usage hint for the command /create" }, "user": "Usuario", - "@user": {}, - "separateChatTypes": "Separar chats directos de grupos", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "tryAgain": "Inténtelo de nuevo", - "@tryAgain": {}, "youKickedAndBanned": "🙅 Usted expulsó y prohibió el acceso a {user}", "@youKickedAndBanned": { "placeholders": { @@ -2306,41 +2009,17 @@ } }, "messagesStyle": "Mensajes:", - "@messagesStyle": {}, "chatDescription": "Descripción del chat", - "@chatDescription": {}, - "callingAccountDetails": "Permite a FluffyChat utilizar la aplicación de llamadas nativa de Android.", - "@callingAccountDetails": {}, - "enterSpace": "Unirse al espacio", - "@enterSpace": {}, - "pleaseEnterRecoveryKey": "Por favor, introduzca su clave de recuperación:", - "@pleaseEnterRecoveryKey": {}, - "widgetNameError": "Por favor, proporciona un nombre para mostrar.", - "@widgetNameError": {}, - "addWidget": "Añadir widget", - "@addWidget": {}, - "hydrateTor": "TOR: Importar sesión exportada", - "@hydrateTor": {}, "storeInAppleKeyChain": "Almacenar en la KeyChain de Apple", - "@storeInAppleKeyChain": {}, "hydrate": "Restaurar desde fichero de copia de seguridad", - "@hydrate": {}, "invalidServerName": "Nombre del servidor no válido", - "@invalidServerName": {}, "chatPermissions": "Permisos del chat", - "@chatPermissions": {}, "sender": "Remitente", - "@sender": {}, "storeInAndroidKeystore": "Almacenar en la KeyStore de Android", - "@storeInAndroidKeystore": {}, "saveKeyManuallyDescription": "Compartir esta clave manualmente usando el diálogo de compartir del sistema o el portapapeles.", - "@saveKeyManuallyDescription": {}, "whyIsThisMessageEncrypted": "¿Por qué no se puede leer este mensaje?", - "@whyIsThisMessageEncrypted": {}, "setChatDescription": "Establecer descripción del chat", - "@setChatDescription": {}, "dehydrateWarning": "Esta acción no se puede deshacer. Asegúrese de que ha almacenado de forma segura el fichero de copia de seguridad.", - "@dehydrateWarning": {}, "redactedBy": "Censurado por {username}", "@redactedBy": { "type": "String", @@ -2351,39 +2030,11 @@ } }, "videoCallsBetaWarning": "Tenga en cuenta que las videollamadas están actualmente en fase beta. Es posible que no funcionen como se espera o que no funcionen de ninguna manera en algunas plataformas.", - "@videoCallsBetaWarning": {}, - "callingPermissions": "Permisos de llamadas", - "@callingPermissions": {}, "unlockOldMessages": "Desbloquear mensajes viejos", - "@unlockOldMessages": {}, - "numChats": "{number} chats", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "optionalRedactReason": "(Opcional) Motivo para censurar este mensaje...", - "@optionalRedactReason": {}, "dehydrate": "Exportar sesión y limpiar dispositivo", - "@dehydrate": {}, - "switchToAccount": "Cambiar a la cuenta {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "experimentalVideoCalls": "Videollamadas experimentales", - "@experimentalVideoCalls": {}, "pleaseEnterRecoveryKeyDescription": "Para desbloquear sus viejos mensajes, introduzca su clave de recuperación que se generó en una sesión anterior. Su clave de recuperación NO es su contraseña.", - "@pleaseEnterRecoveryKeyDescription": {}, - "inviteContactToGroupQuestion": "¿Quieres invitar a {contact} al chat {groupName}?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "Censurado por {username} porque: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2404,10 +2055,7 @@ } } }, - "enterRoom": "Unirse a la sala", - "@enterRoom": {}, "confirmEventUnpin": "¿Seguro que quiere desfijar permanentemente el evento?", - "@confirmEventUnpin": {}, "youInvitedUser": "📩 Usted invitó a {user}", "@youInvitedUser": { "placeholders": { @@ -2417,19 +2065,9 @@ } }, "redactMessageDescription": "El mensaje será censurado para todas las personas participantes en la conversación. Esto no se puede deshacer.", - "@redactMessageDescription": {}, "recoveryKey": "Clave de recuperación", - "@recoveryKey": {}, - "dehydrateTorLong": "Si está usando TOR, es recomendable exportar la sesión antes de cerrar la ventana.", - "@dehydrateTorLong": {}, "doNotShowAgain": "No mostrar de nuevo", - "@doNotShowAgain": {}, - "hideUnimportantStateEvents": "Ocultar eventos de estado no importantes", - "@hideUnimportantStateEvents": {}, "screenSharingTitle": "Compartir la pantalla", - "@screenSharingTitle": {}, - "widgetCustom": "Personalizado", - "@widgetCustom": {}, "youBannedUser": "Usted prohibió el acceso a {user}", "@youBannedUser": { "placeholders": { @@ -2439,11 +2077,7 @@ } }, "directChat": "Chat directo", - "@directChat": {}, - "appearOnTop": "Aparecer en la cima", - "@appearOnTop": {}, "foregroundServiceRunning": "Esta notificación aparece cuando el servicio en segundo plano se está ejecutando.", - "@foregroundServiceRunning": {}, "wasDirectChatDisplayName": "Chat vacío (era {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2454,11 +2088,7 @@ } }, "noChatDescriptionYet": "No se ha creado una descripción del chat aún.", - "@noChatDescriptionYet": {}, "chatDescriptionHasBeenChanged": "Se ha cambiado la descripción del chat", - "@chatDescriptionHasBeenChanged": {}, - "dehydrateTor": "TOR: Exportar sesión", - "@dehydrateTor": {}, "youKicked": "👞 Usted expulsó a {user}", "@youKicked": { "placeholders": { @@ -2468,20 +2098,14 @@ } }, "shareInviteLink": "Compartir enlace de invitación", - "@shareInviteLink": {}, "commandHint_markasdm": "Marcar como sala de mensajes directos para el ID de Matrix", - "@commandHint_markasdm": {}, "recoveryKeyLost": "¿Perdió su clave de recuperación?", - "@recoveryKeyLost": {}, "emoteKeyboardNoRecents": "Los emotes usados recientemente aparecerán aquí...", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, "youJoinedTheChat": "Usted se ha unido al chat", - "@youJoinedTheChat": {}, - "errorAddingWidget": "Fallo al añadir el widget.", - "@errorAddingWidget": {}, "commandHint_dm": "Iniciar un chat directo\nUse --no-encryption para deshabilitar el cifrado", "@commandHint_dm": { "type": "String", @@ -2496,19 +2120,10 @@ } }, "emojis": "Emojis", - "@emojis": {}, "createGroup": "Crear grupo", - "@createGroup": {}, - "hydrateTorLong": "¿Exportó su sesión la última vez que estuvo en TOR? Impórtela rápidamente y continúe chateando.", - "@hydrateTorLong": {}, "custom": "Personalizado", - "@custom": {}, "storeInSecureStorageDescription": "Almacenar la clave de recuperación en el almacenamiento seguro de este dispositivo.", - "@storeInSecureStorageDescription": {}, "pinMessage": "Anclar a la sala", - "@pinMessage": {}, - "indexedDbErrorTitle": "Problemas con el modo privado", - "@indexedDbErrorTitle": {}, "googlyEyesContent": "{senderName} te manda ojos saltones", "@googlyEyesContent": { "type": "String", @@ -2528,19 +2143,11 @@ } }, "commandHint_googly": "Enviar unos ojos saltones", - "@commandHint_googly": {}, "noChatsFoundHere": "No se han encontrado chats. Inicia un nuevo chat usando el botón de abajo. ⤵️", - "@noChatsFoundHere": {}, - "joinedChats": "Chats Unidos", - "@joinedChats": {}, "space": "Espacio", - "@space": {}, "spaces": "Espacios", - "@spaces": {}, "block": "Bloquear", - "@block": {}, "blockListDescription": "Puedes bloquear usuarios que te estén molestando. No podrás recibir mensajes ni invitaciones de chat de los usuarios de tu lista de bloqueo.", - "@blockListDescription": {}, "aboutHomeserver": "Acerca de {homeserver}", "@aboutHomeserver": { "type": "String", @@ -2551,72 +2158,34 @@ } }, "unread": "No leídos", - "@unread": {}, "swipeRightToLeftToReply": "Desliza a la izquierda para responder", - "@swipeRightToLeftToReply": {}, "hideRedactedMessagesBody": "Si alguien elimina un mensaje, este mensaje ya no será visible en el chat.", - "@hideRedactedMessagesBody": {}, "hideInvalidOrUnknownMessageFormats": "Esconde formatos de mensajes inválidos o desconocidos", - "@hideInvalidOrUnknownMessageFormats": {}, "hideRedactedMessages": "Esconde mensajes eliminados", - "@hideRedactedMessages": {}, "appLockDescription": "Bloquear la aplicación cuando no se use con código pin", - "@appLockDescription": {}, "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, "accessAndVisibility": "Acceso y visibilidad", - "@accessAndVisibility": {}, "globalChatId": "ID de chat Global", - "@globalChatId": {}, "accessAndVisibilityDescription": "A quién se le permite unirse a este chat y cómo se puede descubrir el chat.", - "@accessAndVisibilityDescription": {}, "calls": "Llamadas", - "@calls": {}, "customEmojisAndStickers": "Emojis y stickers personalizados", - "@customEmojisAndStickers": {}, "customEmojisAndStickersBody": "Agrega o comparte emojis y stickers personalizados que se pueden utilizar en cualquier chat.", - "@customEmojisAndStickersBody": {}, "blockedUsers": "Usuarios bloqueados", - "@blockedUsers": {}, "blockUsername": "Ignorar nombre de usuario", - "@blockUsername": {}, "noMoreChatsFound": "No se encontraron más chats...", - "@noMoreChatsFound": {}, - "countChatsAndCountParticipants": "{chats} chats y {participants} participantes", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "notifyMeFor": "Notificarme", - "@notifyMeFor": {}, "presencesToggle": "Mostrar mensajes de estado de otros usuarios", "@presencesToggle": { "type": "String", "placeholders": {} }, "placeCall": "Llamar", - "@placeCall": {}, - "callingAccount": "Llamando a cuenta", - "@callingAccount": {}, - "appearOnTopDetails": "Permite que la app aparezca delante (no hace falta si ya tienes Fluffychat configurado como cuenta llamante)", - "@appearOnTopDetails": {}, "disableEncryptionWarning": "Por motivos de seguridad no es posible deshabilitar el cifrado en un chat si ha sido habilitado previamente.", - "@disableEncryptionWarning": {}, "setColorTheme": "Poner tema de color:", - "@setColorTheme": {}, "inviteGroupChat": "📨 Invitar a grupo", - "@inviteGroupChat": {}, "invalidInput": "¡Entrada no válida!", - "@invalidInput": {}, "wrongPinEntered": "¡Pin erróneo! Vuelve a intenrarlo en {seconds} segundos...", "@wrongPinEntered": { "type": "String", @@ -2626,23 +2195,9 @@ } } }, - "decline": "Declinar", - "@decline": {}, "thisDevice": "Este dispositivo:", - "@thisDevice": {}, - "minimumPowerLevel": "{level} es el nivel mínimo.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "verifyOtherDevice": "🔐 Verificar otro dispositivo", - "@verifyOtherDevice": {}, "chatPermissionsDescription": "Definir el nivel necesario para ciertas acciones en este chat. Los niveles 0, 50 y 100 habitualmente representan usuarios, moderadores y administradores, pero se puede establecer cualquier escala.", - "@chatPermissionsDescription": {}, "updateInstalled": "¡🎉 Actualización {version} instalada!", "@updateInstalled": { "type": "String", @@ -2653,11 +2208,8 @@ } }, "changelog": "Cambios", - "@changelog": {}, "sendCanceled": "Envío cancelado", - "@sendCanceled": {}, "invite": "Invitar", - "@invite": {}, "searchIn": "Buscar en chat \"{chat}\"...", "@searchIn": { "type": "String", @@ -2677,143 +2229,60 @@ } }, "appWantsToUseForLoginDescription": "Por la presente permites a la app y web compartir información sobre ti.", - "@appWantsToUseForLoginDescription": {}, "encryptThisChat": "Cifrar este chat", - "@encryptThisChat": {}, - "publicLink": "Enlace público", - "@publicLink": {}, "transparent": "Transparente", - "@transparent": {}, "select": "Elegir", - "@select": {}, "newPassword": "Nueva clave", - "@newPassword": {}, "nothingFound": "No se encontró nada...", - "@nothingFound": {}, - "subspace": "Sub espacio", - "@subspace": {}, "openLinkInBrowser": "Abrir enlace en navegador", - "@openLinkInBrowser": {}, - "presenceStyle": "Presencia:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "youInvitedToBy": "📩 Te han invitado con un enlace a:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "signInWith": "Entrar con {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "setTheme": "Poner tema:", - "@setTheme": {}, "learnMore": "Aprender más", - "@learnMore": {}, "incomingMessages": "Mensajes entrantes", - "@incomingMessages": {}, "noOtherDevicesFound": "No se han encontrado otros dispositivos", - "@noOtherDevicesFound": {}, "generalNotificationSettings": "Ajustes de notificación generales", - "@generalNotificationSettings": {}, "roomNotificationSettings": "Ajustes de notificación de salas", - "@roomNotificationSettings": {}, "userSpecificNotificationSettings": "Ajustes de notificación por usuario", - "@userSpecificNotificationSettings": {}, "contentNotificationSettings": "Ajustes de notificación de contenido", - "@contentNotificationSettings": {}, "otherNotificationSettings": "Otros ajustes de notificación", - "@otherNotificationSettings": {}, "notificationRuleContainsUserName": "Contiene nombre de usuario", - "@notificationRuleContainsUserName": {}, "notificationRuleContainsUserNameDescription": "Notifica al usuario cuando un mensaje contiene su nombre de usuario.", - "@notificationRuleContainsUserNameDescription": {}, "notificationRuleMaster": "Silenciar todas las notificaciones", - "@notificationRuleMaster": {}, "notificationRuleMasterDescription": "Anula todas las demás reglas y desactiva todas las notificaciones.", - "@notificationRuleMasterDescription": {}, "notificationRuleSuppressNotices": "Suprimir los mensajes automáticos", - "@notificationRuleSuppressNotices": {}, "notificationRuleSuppressNoticesDescription": "Suprimir notificaciones de clientes automáticos, como bots.", - "@notificationRuleSuppressNoticesDescription": {}, "notificationRuleInviteForMe": "Invitación para mí", - "@notificationRuleInviteForMe": {}, "notificationRuleInviteForMeDescription": "Notifica al usuario cuando se les invita a una sala.", - "@notificationRuleInviteForMeDescription": {}, "notificationRuleMemberEvent": "Evento para miembros", - "@notificationRuleMemberEvent": {}, "notificationRuleMemberEventDescription": "Suprimir notificaciones de eventos para miembros.", - "@notificationRuleMemberEventDescription": {}, "notificationRuleIsUserMention": "Mención al usuario", - "@notificationRuleIsUserMention": {}, "notificationRuleIsUserMentionDescription": "Notifica al usuario cuando son mencionados directamente en un mensaje.", - "@notificationRuleIsUserMentionDescription": {}, "notificationRuleContainsDisplayName": "Contiene el nombre visible", - "@notificationRuleContainsDisplayName": {}, "notificationRuleContainsDisplayNameDescription": "Notifica al usuario cuando un mensaje contiene su nombre visible.", - "@notificationRuleContainsDisplayNameDescription": {}, "notificationRuleIsRoomMention": "Mención de sala", - "@notificationRuleIsRoomMention": {}, "notificationRuleIsRoomMentionDescription": "Notifica al usuario cuando hay una mención de sala.", - "@notificationRuleIsRoomMentionDescription": {}, "notificationRuleRoomnotif": "Notificación de sala", - "@notificationRuleRoomnotif": {}, "notificationRuleRoomnotifDescription": "Notifica al usuario cuando un mensaje contiene '@sala'.", - "@notificationRuleRoomnotifDescription": {}, "notificationRuleTombstone": "Lápida", - "@notificationRuleTombstone": {}, "notificationRuleTombstoneDescription": "Notifica al usuario sobre mensajes de desactivación de sala.", - "@notificationRuleTombstoneDescription": {}, "notificationRuleReaction": "Reacción", - "@notificationRuleReaction": {}, "notificationRuleReactionDescription": "Suprime notificaciones por reacciones.", - "@notificationRuleReactionDescription": {}, "notificationRuleRoomServerAcl": "ACL de servidor de sala", - "@notificationRuleRoomServerAcl": {}, "notificationRuleRoomServerAclDescription": "Suprime notificaciones de listas de control de acceso de servidores de sala.", - "@notificationRuleRoomServerAclDescription": {}, "notificationRuleSuppressEdits": "Suprimir ediciones", - "@notificationRuleSuppressEdits": {}, "notificationRuleSuppressEditsDescription": "Suprime las notificaciones de mensajes editados.", - "@notificationRuleSuppressEditsDescription": {}, "notificationRuleCall": "Llamar", - "@notificationRuleCall": {}, "notificationRuleCallDescription": "Notifica al usuario de llamadas.", - "@notificationRuleCallDescription": {}, "notificationRuleEncryptedRoomOneToOne": "Sala cifrada uno a uno", - "@notificationRuleEncryptedRoomOneToOne": {}, "notificationRuleEncryptedRoomOneToOneDescription": "Notifica al usuario sobre mensajes en salas cifradas uno a uno.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, "notificationRuleRoomOneToOne": "Sala uno a uno", - "@notificationRuleRoomOneToOne": {}, "notificationRuleRoomOneToOneDescription": "Notifica al usuario sobre mensajes en salas uno a uno.", - "@notificationRuleRoomOneToOneDescription": {}, "notificationRuleMessage": "Mensaje", - "@notificationRuleMessage": {}, "notificationRuleMessageDescription": "Notifica al usuario sobre mensajes generales.", - "@notificationRuleMessageDescription": {}, "notificationRuleEncrypted": "Cifrado", - "@notificationRuleEncrypted": {}, "notificationRuleEncryptedDescription": "Notifica al usuario sobre mensajes en salas cifradas.", - "@notificationRuleEncryptedDescription": {}, "notificationRuleJitsi": "Jitsi", - "@notificationRuleJitsi": {}, "notificationRuleJitsiDescription": "Notifica al usuario sobre eventos del componente de Jitsi.", - "@notificationRuleJitsiDescription": {}, "notificationRuleServerAcl": "Suprimir eventos de ACL del servidor", - "@notificationRuleServerAcl": {}, "notificationRuleServerAclDescription": "Suprime notificaciones de eventos de ACL del servidor.", - "@notificationRuleServerAclDescription": {}, "unknownPushRule": "Regla de notificación desconocida '{rule}'", "@unknownPushRule": { "type": "String", @@ -2824,9 +2293,7 @@ } }, "deletePushRuleCanNotBeUndone": "Si eliminas este ajuste de notificación, esto no se puede deshacer.", - "@deletePushRuleCanNotBeUndone": {}, "more": "Más", - "@more": {}, "serverLimitReached": "¡Alcanzado límite del servidor! Esperando {seconds} segundos...", "@serverLimitReached": { "type": "integer", @@ -2837,15 +2304,10 @@ } }, "groupCanBeFoundViaSearch": "Los grupos se pueden encontrar buscando", - "@groupCanBeFoundViaSearch": {}, "addChatOrSubSpace": "Añadir chat o sub espacio", - "@addChatOrSubSpace": {}, "sendRoomNotifications": "Mandar notificación @sala", - "@sendRoomNotifications": {}, "changeTheChatPermissions": "Cambiar los permisos de chat", - "@changeTheChatPermissions": {}, "setWallpaper": "Poner fondo", - "@setWallpaper": {}, "sendImages": "Envío de la imagen {count}", "@sendImages": { "type": "String", @@ -2864,13 +2326,9 @@ } }, "usersMustKnock": "Los usuarios han de avisar", - "@usersMustKnock": {}, "noOneCanJoin": "Nadie puede unirse", - "@noOneCanJoin": {}, "reopenChat": "Reabrir chat", - "@reopenChat": {}, "hidePresences": "¿Esconder la lista de estado?", - "@hidePresences": {}, "fileIsTooBigForServer": "¡No se pudo mandar! El servidor solamente permite adjuntos de hasta {max}.", "@fileIsTooBigForServer": { "type": "String", @@ -2881,19 +2339,11 @@ } }, "jumpToLastReadMessage": "Saltar al último mensaje leído", - "@jumpToLastReadMessage": {}, "report": "informe", - "@report": {}, "readUpToHere": "Leer hasta aquí", - "@readUpToHere": {}, - "signInWithPassword": "Entrar con clave", - "@signInWithPassword": {}, "formattedMessages": "Mensajes con formato", - "@formattedMessages": {}, "publicSpaces": "Espacios públicos", - "@publicSpaces": {}, "formattedMessagesDescription": "Mostrar contenido de mensaje enriquecido, como texto en negrita, usando markdown.", - "@formattedMessagesDescription": {}, "userLevel": "{level} - Usuario", "@userLevel": { "type": "String", @@ -2913,21 +2363,13 @@ } }, "sendingAttachment": "Enviando adjunto...", - "@sendingAttachment": {}, "compress": "Comprimir", - "@compress": {}, "pleaseFillOut": "Por favor, rellenar", - "@pleaseFillOut": {}, "newChatRequest": "📩 Nueva petición de chat", - "@newChatRequest": {}, "unbanUserDescription": "El usuario podrá entrar al chat de nuevo si lo intenta.", - "@unbanUserDescription": {}, "roomUpgradeDescription": "El chat se volverá a crear con la nueva versión de sala. Todos los participantes serán notificados de que tienen que cambiarse al nuevo chat. Puedes encontrar más información sobre versiones de salas en https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, "makeAdminDescription": "Una vez hagas que este usuario sea admin, puede que no puedas deshacerlo porque tendrá los mismos permisos que tú.", - "@makeAdminDescription": {}, "knocking": "Avisando", - "@knocking": {}, "chatCanBeDiscoveredViaSearchOnServer": "El chat se puede descubrir buscando en {server}", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2938,23 +2380,13 @@ } }, "searchChatsRooms": "Buscar #chats, @usuarios...", - "@searchChatsRooms": {}, "groupName": "Nombre de grupo", - "@groupName": {}, "createGroupAndInviteUsers": "Crear un grupo e invitar usuarios", - "@createGroupAndInviteUsers": {}, "databaseMigrationTitle": "La base de datos está optimizada", - "@databaseMigrationTitle": {}, "searchForUsers": "Buscar @usuarios...", - "@searchForUsers": {}, - "startConversation": "Iniciar conversación", - "@startConversation": {}, "gallery": "Galería", - "@gallery": {}, "files": "Archivos", - "@files": {}, "initAppError": "Hubo un error al arrancar la app", - "@initAppError": {}, "sessionLostBody": "Se perdió tu sesión. Por favor, informa de este error a los desarrolladores en {url}. El mensaje de error es: {error}", "@sessionLostBody": { "type": "String", @@ -2980,7 +2412,6 @@ } }, "restricted": "Restringido", - "@restricted": {}, "requestedKeyVerification": "{sender} ha pedido verificación de clave", "@requestedKeyVerification": { "type": "String", @@ -3000,15 +2431,10 @@ } }, "changeGeneralChatSettings": "Cambiar los ajustes generales de chat", - "@changeGeneralChatSettings": {}, "inviteOtherUsers": "Invitar a otros usuarios a este chat", - "@inviteOtherUsers": {}, "calculatingFileSize": "Calculando tamaño de archivo...", - "@calculatingFileSize": {}, "prepareSendingAttachment": "Prepara envío del adjunto...", - "@prepareSendingAttachment": {}, "generatingVideoThumbnail": "Generando miniatura de vídeo...", - "@generatingVideoThumbnail": {}, "sendingAttachmentCountOfCount": "Enviando adjunto {index} de {length}...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3022,31 +2448,16 @@ } }, "compressVideo": "Comprimiendo vídeo...", - "@compressVideo": {}, "blur": "Difuminar:", - "@blur": {}, "continueText": "Continuar", - "@continueText": {}, "welcomeText": "Eh, eh, 👋 Esto es FluffyChat. Puedes acceder a cualquier homeserver, que sea compatible con https://matrix.org. Y luego chatear con cualquiera. ¡Es una red de mensajería descentralizada enorme!", - "@welcomeText": {}, "opacity": "Opacidad:", - "@opacity": {}, "version": "Versión", - "@version": {}, "serverInformation": "Información del servidor:", - "@serverInformation": {}, "website": "Web", - "@website": {}, "name": "Nombre", - "@name": {}, "knockRestricted": "Aviso restringido", - "@knockRestricted": {}, - "hideMemberChangesInPublicChats": "Ocultar cambios de miembros en salas públicas", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "No mostrar en el chat que alguien entra o sale de una sala pública para mejorar la inteligibilidad.", - "@hideMemberChangesInPublicChatsBody": {}, "passwordRecoverySettings": "Ajustes de recuperación de clave", - "@passwordRecoverySettings": {}, "acceptedKeyVerification": "{sender} aceptó la verificación de clave", "@acceptedKeyVerification": { "type": "String", @@ -3057,49 +2468,21 @@ } }, "stickers": "Pegatinas", - "@stickers": {}, "shareKeysWith": "Compartir claves con...", - "@shareKeysWith": {}, "shareKeysWithDescription": "¿Qué dispositivos deben ser de confianza para que puedan leer tus mensajes en chats cifrados?", - "@shareKeysWithDescription": {}, "crossVerifiedDevicesIfEnabled": "Dispositivos verificados si están habilitados", - "@crossVerifiedDevicesIfEnabled": {}, "allDevices": "Todos los dispositivos", - "@allDevices": {}, "crossVerifiedDevices": "Dispositivos verificados", - "@crossVerifiedDevices": {}, "verifiedDevicesOnly": "Solo dispositivos verificados", - "@verifiedDevicesOnly": {}, "deviceKeys": "Claves de dispositivo:", - "@deviceKeys": {}, "overview": "Vista general", - "@overview": {}, "removeDevicesDescription": "Vas a salir en este dispositivo y ya no podrás recibir mensajes.", - "@removeDevicesDescription": {}, "databaseMigrationBody": "Por favor espera. Esto llevará un momento.", - "@databaseMigrationBody": {}, "pleaseEnterYourCurrentPassword": "Por favor, pon tu clave actual", - "@pleaseEnterYourCurrentPassword": {}, "pleaseChooseAStrongPassword": "Por favor, pon una clave fuerte", - "@pleaseChooseAStrongPassword": {}, "joinSpace": "Unirse al espacio", - "@joinSpace": {}, "wrongRecoveryKey": "Lo siento... esta no parece ser la clave de recuperación correcta.", - "@wrongRecoveryKey": {}, "leaveEmptyToClearStatus": "Deja vacío para limpiar tu estado.", - "@leaveEmptyToClearStatus": {}, - "databaseBuildErrorBody": "No pude crear la base de datos SQlite. La app intenta usar la base de datos heredada por ahora. Por favor, informa de este error a los desarrolladores en {url}. El mensaje de error es: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "restoreSessionBody": "La app ahora trata de recuperar tu sesión de la copia de seguridad. Por favor, informa de este error a los desarrolladores en {url}. El mensaje de error es: {error}", "@restoreSessionBody": { "type": "String", @@ -3113,15 +2496,10 @@ } }, "sendReadReceipts": "Mandar recibos de lectura", - "@sendReadReceipts": {}, "sendTypingNotificationsDescription": "Otros participantes en un chat pueden ver cuándo estás escribiendo un mensaje.", - "@sendTypingNotificationsDescription": {}, "sendReadReceiptsDescription": "Otros participantes en un chat pueden ver cuándo has leído un mensaje.", - "@sendReadReceiptsDescription": {}, "verifyOtherUserDescription": "Si verificas a otro usuario, puedes estar seguro de a quién estás escribiendo realmente. 💪\n\nCuando empiezas una verificación, tú y el otro usuario veréis una ventana emergente en la app. En ella veréis una serie de emojiso números que tenéis que comparar.\n\nLa mejor forma de hacer esto es quedar o una videollamada. 👭", - "@verifyOtherUserDescription": {}, "verifyOtherDeviceDescription": "Cuando verificas otro dispositivo, esos dispositivos pueden intercambiar claves, incrementando tu seguridad global. 💪 Cuando inicias una verificación, aparece una ventana en la app en ambos dispositivos. En ella, verás una serie de emojis o números que tienes que comparar. Es mejor tener ambos dispositivos a mano antes de empezar la verificación. 🤳", - "@verifyOtherDeviceDescription": {}, "canceledKeyVerification": "{sender} canceló la verificación de clave", "@canceledKeyVerification": { "type": "String", @@ -3132,9 +2510,7 @@ } }, "commandHint_unignore": "No ignorar la ID de matrix dada", - "@commandHint_unignore": {}, "noDatabaseEncryption": "En esta plataforma no hay cifrado de base de datos", - "@noDatabaseEncryption": {}, "startedKeyVerification": "{sender} ha comenzado verificación de clave", "@startedKeyVerification": { "type": "String", @@ -3145,20 +2521,15 @@ } }, "discover": "Descubrir", - "@discover": {}, "thereAreCountUsersBlocked": "Ahora mismo, hay {count} usuarios bloqueados.", "@thereAreCountUsersBlocked": { "type": "String", "count": {} }, "commandHint_ignore": "Ignorar la ID de matrix dada", - "@commandHint_ignore": {}, "jump": "Saltar", - "@jump": {}, "commandHint_sendraw": "Mandar json pelado", - "@commandHint_sendraw": {}, "kickUserDescription": "Se expulsa al usuario del chat, pero no se le prohíbe volver a entrar. En chats públicos, el usuario podrá volver a entrar en cualquier momento.", - "@kickUserDescription": {}, "fileHasBeenSavedAt": "Archivo guardado en {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -3169,45 +2540,22 @@ } }, "markAsUnread": "Marcar no leído", - "@markAsUnread": {}, "changeTheDescriptionOfTheGroup": "Cambiar la descripción del chat", - "@changeTheDescriptionOfTheGroup": {}, "sorryThatsNotPossible": "Lo siento... eso no es posible", - "@sorryThatsNotPossible": {}, "publicChatAddresses": "Dirección de chat pública", - "@publicChatAddresses": {}, "createNewAddress": "Crear nueva dirección", - "@createNewAddress": {}, - "userRole": "Rol de usuario", - "@userRole": {}, "boldText": "Texto en negrita", - "@boldText": {}, "italicText": "Texto en cursiva", - "@italicText": {}, "strikeThrough": "Tachado", - "@strikeThrough": {}, "searchMore": "Buscar más...", - "@searchMore": {}, - "noPublicLinkHasBeenCreatedYet": "No se ha creado un enlace público aún", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "Aviso", - "@knock": {}, "newSpaceDescription": "Los espacios permiten consolidar los chats y montar comunidades privadas o públicas.", - "@newSpaceDescription": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Por favor, intente luego o elija un servidor distinto.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "pleaseEnterANumber": "Por favor pon un número mayor que 0", - "@pleaseEnterANumber": {}, "archiveRoomDescription": "El chat se moverá al archivo. Otros usuarios podrán ver que has abandonado el chat.", - "@archiveRoomDescription": {}, "pushNotificationsNotAvailable": "No están disponibles las notificaciones emergentes", - "@pushNotificationsNotAvailable": {}, "passwordsDoNotMatch": "Las claves no coinciden", - "@passwordsDoNotMatch": {}, "passwordIsWrong": "La clave que has puesto es incorrecta", - "@passwordIsWrong": {}, "verifyOtherUser": "🔐 Verificar a otro usuario", - "@verifyOtherUser": {}, "isReadyForKeyVerification": "{sender} está preparado para verificación de clave", "@isReadyForKeyVerification": { "type": "String", @@ -3223,29 +2571,15 @@ "space": {} }, "oneOfYourDevicesIsNotVerified": "Uno de tus dispositivos no está verificado", - "@oneOfYourDevicesIsNotVerified": {}, "noticeChatBackupDeviceVerification": "Nota: Cuando conectas todos tus dispositivos a la copia de seguridad del chat, son verificados automáticamente.", - "@noticeChatBackupDeviceVerification": {}, "manageAccount": "Gestionar cuenta", - "@manageAccount": {}, "contactServerAdmin": "Contactar con el administrador del servidor", - "@contactServerAdmin": {}, "contactServerSecurity": "Contactar con seguridad del servidor", - "@contactServerSecurity": {}, "supportPage": "Página de atención", - "@supportPage": {}, "invalidUrl": "URL incorrecta", - "@invalidUrl": {}, "addLink": "Añadir enlace", - "@addLink": {}, "unableToJoinChat": "No se puede entrar al chat. Puede que la otra parte ya haya cerrado la conversación.", - "@unableToJoinChat": {}, "waitingForServer": "Esperando al servidor...", - "@waitingForServer": {}, - "discoverHomeservers": "Descubrir homeservers", - "@discoverHomeservers": {}, - "profileNotFound": "El usuario no se encontró en el servidor. Puede que haya un problema de conexión o el usuario no exista.", - "@profileNotFound": {}, "synchronizingPleaseWaitCounter": " Sincronizando… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -3256,7 +2590,6 @@ } }, "reportErrorDescription": "😭 Oh, no. Algo ha salido mal. Si quieres, puedes informar de este fallo a los desarrolladores.", - "@reportErrorDescription": {}, "hasKnocked": "🚪 {user} ha avisado", "@hasKnocked": { "placeholders": { @@ -3266,29 +2599,12 @@ } }, "noBackupWarning": "¡Cuidado! Si no se habilita la copia de seguridad del chat, perderás acceso a tus mensajes cifrados. Se recomienda encarecidamente habilitar la copia de seguridad del chat antes de salir.", - "@noBackupWarning": {}, - "userWouldLikeToChangeTheChat": "{user} quiere unirse al chat.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "yourGlobalUserIdIs": "Tu id de usuario global es: ", - "@yourGlobalUserIdIs": {}, "noKeyForThisMessage": "Esto puede ocurrir si el mensaje se envió antes de que entraras en tu cuenta en este dispositivo.\n\nTambién puede que el remitente haya bloqueado tu dispositivo o haya fallado algo en la conexión a Internet.\n\n¿Puedes leer el mensaje en otra sesión? Entonces, ¡puedes transferir el mensaje desde allí! Ve a Ajustes > Dispositivos y asegúrate de que tus dispositivos se han verificado mutuamente. Cuando abras la sala la próxima vez y ambas sesiones estén en primer plano, las claves se transmitirán automáticamente.\n\n¿No quieres perder las claves al salir o al cambiar de dispositivo? Asegúrate de que has habilitado la copia de seguridad del chat en los ajustes.", - "@noKeyForThisMessage": {}, - "invitePrivateChat": "📨 Invitar a grupo privado", - "@invitePrivateChat": {}, "banUserDescription": "Se expulsará al usuario del chat y no podrá volver a entrar hasta que se le permita.", - "@banUserDescription": {}, "loginWithMatrixId": "Entrar con un ID de Matrix", - "@loginWithMatrixId": {}, "changeTheCanonicalRoomAlias": "Cambiar la dirección pública principal de chat", - "@changeTheCanonicalRoomAlias": {}, "noContactInformationProvided": "El servidor no suministra ninguna información de contacto válida", - "@noContactInformationProvided": {}, "noUsersFoundWithQuery": "Desgraciadamente, no se encontró ningún usuario con \"{query}\". Por favor, revisa si cometiste un error.", "@noUsersFoundWithQuery": { "type": "String", @@ -3299,9 +2615,7 @@ } }, "changeTheVisibilityOfChatHistory": "Cambiar la visibilidad de la historia de chat", - "@changeTheVisibilityOfChatHistory": {}, "doesNotSeemToBeAValidHomeserver": "No parece ser un homeserver compatible. ¿URL equivocada?", - "@doesNotSeemToBeAValidHomeserver": {}, "moderatorLevel": "{level} - Moderador", "@moderatorLevel": { "type": "String", @@ -3311,43 +2625,17 @@ } } }, - "homeserverDescription": "Todos tus datos se guardan en el homeserver, como en un proveedor de correo electrónico. Puedes elegir el homeserver que quieres usar, a la par que te puedes comunicar con todos. Más en https://matrix.org.", - "@homeserverDescription": {}, - "whatIsAHomeserver": "¿Qué es un homeserver?", - "@whatIsAHomeserver": {}, "open": "Abrir", - "@open": {}, - "appIntroduction": "FluffyChat te permite chatear con tus amigos con diferentes mensajerías. Aprende más en https://matrix.org o simplemente pincha *Continuar*.", - "@appIntroduction": {}, - "forwardMessageTo": "¿Reenviar mensaje a {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "previous": "Anterior", - "@previous": {}, "otherPartyNotLoggedIn": "La otra parte ahora mismo no está conectada y por tanto ¡no puede recibir mensajes!", - "@otherPartyNotLoggedIn": {}, "takeAPhoto": "Tomar foto", - "@takeAPhoto": {}, "recordAVideo": "Grabar video", - "@recordAVideo": {}, "optionalMessage": "(Opcional) mensaje...", - "@optionalMessage": {}, "notSupportedOnThisDevice": "No es compatible con este dispositivo", - "@notSupportedOnThisDevice": {}, "enterNewChat": "Ingresar a nuevo chat", - "@enterNewChat": {}, "pleaseWaitUntilInvited": "Por favor espera, hasta que alguien del chat te invite.", - "@pleaseWaitUntilInvited": {}, "commandHint_roomupgrade": "Actualizar este chat a la versión de chat asignada", - "@commandHint_roomupgrade": {}, "checkList": "Lista de tareas", - "@checkList": {}, "countInvited": "{count} invitado", "@countInvited": { "type": "String", @@ -3369,52 +2657,22 @@ } } }, - "setCustomPermissionLevel": "Agregar nivel personalizado de permiso", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Por favor elige un rol predeterminado o un nivel de permiso personalizado entre 0 a 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Ignorar usuario", - "@ignoreUser": {}, - "normalUser": "Usuario normal", - "@normalUser": {}, "commandHint_logout": "Salir del dispositivo actual", - "@commandHint_logout": {}, "commandHint_logoutall": "Salir de todos los dispositivos activos", - "@commandHint_logoutall": {}, "displayNavigationRail": "Mostrar carril de navegación en móvil", - "@displayNavigationRail": {}, "approve": "Aprobar", - "@approve": {}, "youHaveKnocked": "Has sido expulsado", - "@youHaveKnocked": {}, "customReaction": "Reacción personalizada", - "@customReaction": {}, "moreEvents": "Más eventos", - "@moreEvents": {}, "declineInvitation": "Rechazar invitación", - "@declineInvitation": {}, "changedTheChatDescription": "{username} ha cambiado la descripción del chat", - "@changedTheChatDescription": {}, "changedTheChatName": "{username} ha cambiado el nombre del chat", - "@changedTheChatName": {}, "noMessagesYet": "Sin mensajes", - "@noMessagesYet": {}, "longPressToRecordVoiceMessage": "Deja presionado para grabar un mensaje.", - "@longPressToRecordVoiceMessage": {}, "pause": "Pausa", - "@pause": {}, "resume": "Continuar", - "@resume": {}, - "newSubSpace": "Nuevo sub espacio", - "@newSubSpace": {}, - "moveToDifferentSpace": "Mover a otro espacio", - "@moveToDifferentSpace": {}, - "moveUp": "Mover arriba", - "@moveUp": {}, - "moveDown": "Mover abajo", - "@moveDown": {}, "removeFromSpaceDescription": "El chat sera removido del espacio pero continuara apareciendo en tu lista de chats.", - "@removeFromSpaceDescription": {}, "countChats": "{chats} chats", "@countChats": { "type": "String", @@ -3434,11 +2692,99 @@ } }, "poll": "Encuesta", - "@poll": {}, "startPoll": "Iniciar encuesta", - "@startPoll": {}, "endPoll": "Finalizar encuesta", - "@endPoll": {}, "answersVisible": "Respuestas visibles", - "@answersVisible": {} -} + "spaceMemberOf": "Espacio miembro de {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "Miembros del espacio de {spaces} pueden llamar", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "pollQuestion": "Pregunta de encuesta", + "answerOption": "Respuesta", + "addAnswerOption": "Añadir respuesta", + "allowMultipleAnswers": "Permitir varias respuestas", + "pollHasBeenEnded": "La encuesta ha terminado", + "countVotes": "{count, plural, =1{One vote} other{{count} votes}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "answersWillBeVisibleWhenPollHasEnded": "Las respuestas serán visibles cuando termine la encuesta", + "replyInThread": "Contestar en el hilo", + "countReplies": "{count, plural, =1{One reply} other{{count} replies}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "thread": "Hilo", + "backToMainChat": "Volver al chat pricipal", + "saveChanges": "Guardar cambios", + "createSticker": "Crear sticker o emoticono", + "useAsSticker": "Usar como sticker", + "useAsEmoji": "Usar como emoticono", + "stickerPackNameAlreadyExists": "El nombre del paquete de stickers ya existe", + "newStickerPack": "Nuevo paquete de stickers", + "stickerPackName": "Nombre del paquete de stickers", + "attribution": "Atribución", + "skipChatBackup": "Omitir copia de seguridad del chat", + "skipChatBackupWarning": "¿Estás seguro? Sin habilitar la copia de seguridad del chat puedes perder el acceso a tus mensajes si cambias de dispositivo.", + "loadingMessages": "Cargando mensajes", + "setupChatBackup": "Configurar la copia de seguridad del chat", + "noMoreResultsFound": "No se han encontrado más resultados", + "chatSearchedUntil": "Chat buscado hasta {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "URL de la Federación Base", + "clientWellKnownInformation": "Información conocida del cliente:", + "baseUrl": "URL Base", + "identityServer": "Identidad del Servidor:", + "versionWithNumber": "Versión: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Registros", + "advancedConfigs": "Configuración avanzada", + "advancedConfigurations": "Configuraciones Avanzadas", + "signIn": "Iniciar sesión", + "createNewAccount": "Crear nueva cuenta", + "signUpGreeting": "¡FluffyChat está descentralizado! ¡Selecciona un servidor donde quieres crear tu cuenta y sigamos!", + "signInGreeting": "¿Ya tienes una cuenta en Matrix? ¡Bienvenido de nuevo! Selecciona tu servidor e inicia sesión.", + "appIntro": "Con FluffyChat puedes hablar con tus amigos ¡Es un sistema de mensajería de [matrix] seguro y descentralizado! Aprende más en https://matrix.org si quieres o simplemente inicia sesión.", + "theProcessWasCanceled": "El proceso se ha cancelado.", + "join": "Unirse", + "searchOrEnterHomeserverAddress": "Buscar o pon la dirección de tu servidor local", + "matrixId": "Matrix ID" +} \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index 14558254..33c9f309 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -83,7 +83,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Kas külalised võivad liituda", + "areGuestsAllowedToJoin": "Kas külalised võivad liituda?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -98,7 +98,7 @@ "type": "String", "placeholders": {} }, - "askSSSSSign": "Selleks, et teist osapoolt identifitseerivat allkirja anda, palun sisesta oma turvahoidla paroolifraas või taastevõti.", + "askSSSSSign": "Selleks, et teist osapoolt identifitseerivat allkirja anda, palun sisesta oma turvahoidla salafraas või taastevõti.", "@askSSSSSign": { "type": "String", "placeholders": {} @@ -129,18 +129,6 @@ } } }, - "badServerVersionsException": "See koduserver toetab Matrixi spetsifikatsioonist järgmisi versioone:\n{serverVersions}\nAga see rakendus toetab vaid järgmisi versioone: {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Keela ligipääs vestlusele", "@banFromChat": { "type": "String", @@ -173,11 +161,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Robotite sõnumid", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Katkesta", "@cancel": { "type": "String", @@ -356,7 +339,7 @@ "type": "String", "placeholders": {} }, - "changeTheNameOfTheGroup": "Muuda vestlusrühma nime", + "changeTheNameOfTheGroup": "Muuda jututoa nime", "@changeTheNameOfTheGroup": { "type": "String", "placeholders": {} @@ -506,31 +489,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Kinnita", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Ühenda", - "@connect": { - "type": "String", - "placeholders": {} - }, - "contactHasBeenInvitedToTheGroup": "Sinu kontakt on kutsutud liituma vestlusrühma", + "contactHasBeenInvitedToTheGroup": "Sinu kontakt on kutsutud liituma jututoaga", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Sisaldab kuvatavat nime", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Sisaldab kasutajanime", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Saatsime selle sisu kohta teate koduserveri haldajate", "@contentHasBeenReported": { "type": "String", @@ -610,33 +573,6 @@ } } }, - "dateWithoutYear": "{day}.{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}.{month}.{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Järgnevaga eemaldatakse sinu konto kasutusest. Seda tegevust ei saa tagasi pöörata! Kas sa ikka oled kindel?", "@deactivateAccountWarning": { "type": "String", @@ -742,11 +678,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Sa pead valima emotsioonitegevuse lühikoodi ja pildi!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Vestlust pole olnud", "@emptyChat": { "type": "String", @@ -796,11 +727,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Sisesta oma koduserveri aadress", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Viga asukoha tuvastamisel: {error}", "@errorObtainingLocation": { "type": "String", @@ -850,27 +776,22 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Hakka kasutama uut jututuba", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "group": "Vestlusrühm", + "group": "Jututuba", "@group": { "type": "String", "placeholders": {} }, - "groupIsPublic": "Vestlusrühm on avalik", + "groupIsPublic": "Jututuba on avalik", "@groupIsPublic": { "type": "String", "placeholders": {} }, - "groups": "Vestlusrühmad", + "groups": "Jututoad", "@groups": { "type": "String", "placeholders": {} }, - "groupWith": "Vestlusrühm {displayname} kasutajanimega", + "groupWith": "Jututuba {displayname} kasutajanimega", "@groupWith": { "type": "String", "placeholders": { @@ -926,11 +847,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identiteet", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Eira", "@ignore": { "type": "String", @@ -946,7 +862,7 @@ "type": "String", "placeholders": {} }, - "incorrectPassphraseOrKey": "Vigane paroolifraas või taastevõti", + "incorrectPassphraseOrKey": "Vigane salafraas või taastevõti", "@incorrectPassphraseOrKey": { "type": "String", "placeholders": {} @@ -961,7 +877,7 @@ "type": "String", "placeholders": {} }, - "inviteContactToGroup": "Kutsu sõpru ja tuttavaid {groupName} liikmeks", + "inviteContactToGroup": "Kutsu sõpru ja tuttavaid {groupName} jututoa liikmeks", "@inviteContactToGroup": { "type": "String", "placeholders": { @@ -992,11 +908,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Kutse minu jaoks", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} kutsus sind kasutama Matrix'i-põhist suhtlusrakendust FluffyChat. \n1. Ava fluffychat.im ja paigalda FluffyChat'i rakendus \n2. Liitu kasutajaks või logi sisse olemasoleva Matrix'i kasutajakontoga\n3. Ava kutse link: \n {link}", "@inviteText": { "type": "String", @@ -1076,11 +987,6 @@ "type": "String", "placeholders": {} }, - "license": "Litsents", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Hele", "@lightTheme": { "type": "String", @@ -1134,11 +1040,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Muudatused liikmeskonnas", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Märgi ära", "@mention": { "type": "String", @@ -1246,11 +1147,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Teavitused on sellel kontol kasutusel", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} kasutajat kirjutavad…", "@numUsersTyping": { "type": "String", @@ -1325,7 +1221,7 @@ "type": "String", "placeholders": {} }, - "passphraseOrKey": "paroolifraas või taastevõti", + "passphraseOrKey": "salafraas või taastevõti", "@passphraseOrKey": { "type": "String", "placeholders": {} @@ -1350,11 +1246,6 @@ "type": "String", "placeholders": {} }, - "people": "Inimesed", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Vali pilt", "@pickImage": { "type": "String", @@ -1374,11 +1265,6 @@ } } }, - "pleaseChoose": "Palun vali", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Palun vali rakenduse PIN-kood", "@pleaseChooseAPasscode": { "type": "String", @@ -1448,7 +1334,7 @@ } } }, - "redactMessage": "Muuda sõnumit", + "redactMessage": "Eemalda sõnum", "@redactMessage": { "type": "String", "placeholders": {} @@ -1472,11 +1358,6 @@ } } }, - "rejoin": "Liitu uuesti", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Eemalda", "@remove": { "type": "String", @@ -1496,11 +1377,6 @@ } } }, - "removeDevice": "Eemalda seade", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Eemalda suhtluskeeld", "@unbanFromChat": { "type": "String", @@ -1556,15 +1432,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Sõnumit nägi {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Saada", "@send": { "type": "String", @@ -1599,16 +1466,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Saada fail muutmata kujul", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Saada kleeps", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Saada videofail", "@sendVideo": { "type": "String", @@ -1673,21 +1530,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Kohanda emotsioonitegevusi", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Tee kutselink", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Seadista õigusi", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Määra olek", "@setStatus": { "type": "String", @@ -1722,11 +1564,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Ühekordne sisselogimine", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Jäta vahele", "@skip": { "type": "String", @@ -1797,21 +1634,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Muuda olekut lemmikuna", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Lülita summutamine sisse või välja", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Märgi loetuks / lugemata", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Liiga palju päringuid. Palun proovi hiljem uuesti!", "@tooManyRequestsWarning": { "type": "String", @@ -1878,15 +1700,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 lugemata vestlus} other{{unreadCount} lugemata vestlust}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} ja {count} muud kirjutavad…", "@userAndOthersAreTyping": { "type": "String", @@ -2011,11 +1824,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Taustapilt:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Hoiatus!", "@warning": { "type": "String", @@ -2031,7 +1839,7 @@ "type": "String", "placeholders": {} }, - "whoIsAllowedToJoinThisGroup": "Kes võivad selle vestlusrühmaga liituda", + "whoIsAllowedToJoinThisGroup": "Kes võivad selle jututoaga liituda", "@whoIsAllowedToJoinThisGroup": { "type": "String", "placeholders": {} @@ -2081,7 +1889,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Lisasime vestluse kogukonda", "addToSpace": "Lisa kogukonda", "scanQrCode": "Skaneeri QR-koodi", "sendOnEnter": "Saada sõnum sisestusklahvi vajutusel", @@ -2103,7 +1910,6 @@ "messageType": "Sõnumi tüüp", "sender": "Saatja", "openGallery": "Ava galerii", - "addToSpaceDescription": "Vali kogukond, kuhu soovid seda vestlust lisada.", "removeFromSpace": "Eemalda kogukonnast", "start": "Alusta", "commandHint_discardsession": "Loobu sessioonist", @@ -2121,16 +1927,11 @@ "type": "String", "description": "Usage hint for the command /dm" }, - "commandHint_create": "Loo tühi vestlusrühm\nKrüptimise keelamiseks kasuta --no-encryption võtit", + "commandHint_create": "Loo tühi jututuba\nKrüptimise keelamiseks kasuta --no-encryption võtit", "@commandHint_create": { "type": "String", "description": "Usage hint for the command /create" }, - "openVideoCamera": "Tee video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "markAsRead": "Märgi loetuks", "reportUser": "Teata kasutajast", "openChat": "Ava vestlus", @@ -2154,34 +1955,8 @@ "confirmEventUnpin": "Kas sa oled kindel, et tahad esiletõstetud sündmuse jäädavalt eemaldada?", "pinMessage": "Tõsta sõnum jututoas esile", "videoCallsBetaWarning": "Palun arvesta, et videokõned on veel beetajärgus. Nad ei pruugi veel toimida kõikidel platvormidel korrektselt.", - "emailOrUsername": "E-posti aadress või kasutajanimi", "experimentalVideoCalls": "Katselised videokõned", "unsupportedAndroidVersionLong": "See funktsionaalsus eeldab uuemat Androidi versiooni. Palun kontrolli, kas sinu nutiseadmele leidub süsteemiuuendusi või saaks seal Lineage OSi kasutada.", - "nextAccount": "Järgmine kasutajakonto", - "separateChatTypes": "Eraldi vestlused ja jututoad", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "errorAddingWidget": "Vidina lisamisel tekkis viga.", - "widgetNameError": "Palun sisesta kuvatav nimi.", - "addWidget": "Lisa vidin", - "previousAccount": "Eelmine kasutajakonto", - "widgetUrlError": "See pole korrektne URL.", - "widgetName": "Nimi", - "widgetCustom": "Kohandatud", - "widgetJitsi": "Jitsi Meet", - "widgetEtherpad": "Märkmed ja tekstid", - "widgetVideo": "Video", - "switchToAccount": "Pruugi kasutajakontot # {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "youAcceptedTheInvitation": "👍 Sa võtsid kutse vastu", "youUnbannedUser": "Sa eemaldasid suhtluskeelu kasutajalt {user}", "@youUnbannedUser": { @@ -2216,15 +1991,6 @@ } } }, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "youRejectedTheInvitation": "Sa lükkasid kutse tagasi", "youKicked": "👞 Sa müksasid kasutaja {user} välja", "@youKicked": { @@ -2250,8 +2016,6 @@ } } }, - "publish": "Avalda", - "pleaseEnterRecoveryKey": "Palun sisesta oma taastevõti:", "recoveryKey": "Taastevõti", "users": "Kasutajad", "storeInSecureStorageDescription": "Salvesta taastevõti selle seadme turvahoidlas.", @@ -2271,17 +2035,11 @@ } }, "dehydrate": "Ekspordi sessiooni teave ja kustuta nutiseadmest rakenduse andmed", - "dehydrateTor": "TOR'i kasutajad: Ekspordi sessioon", - "hydrateTor": "TOR'i kasutajatele: impordi viimati eksporditud sessiooni andmed", - "hydrateTorLong": "Kui viimati TOR'i võrku kasutasid, siis kas sa eksportisid oma sessiooni andmed? Kui jah, siis impordi nad mugavasti ja jätka suhtlemist.", - "indexedDbErrorTitle": "Brauseri privaatse akna kasutamisega seotud asjaolud", "dehydrateWarning": "Seda tegevust ei saa tagasi pöörata. Palun kontrolli, et sa oled varukoopia turvaliselt salvestanud.", - "dehydrateTorLong": "Kui oled TOR'i võrgu kasutaja, siis enne akna sulgemist palun ekspordi viimase sessiooni andmed.", - "indexedDbErrorLong": "Privaatse akna puhul andmete salvestamine vaikimisi pole kasutusel.\nPalun toimi alljärgnevalt:\n- ava about:config\n- määra dom.indexedDB.privateBrowsing.enabled väärtuseks true\nVastasel juhul sa ei saa FluffyChat'i kasutada.", "hydrate": "Taasta varundatud failist", "user": "Kasutaja", "custom": "Kohandatud", - "confirmMatrixId": "Konto kustutamiseks palun kinnitage oma Matrix'i ID.", + "confirmMatrixId": "Konto kustutamiseks palun kinnita oma Matrix'i kasutajatunnus (Matrix ID).", "supposedMxid": "See peaks olema {mxid}", "@supposedMxid": { "type": "String", @@ -2291,34 +2049,16 @@ } } }, - "commandHint_markasgroup": "Märgi vestlusrühmaks", + "commandHint_markasgroup": "Märgi jututoaks", "commandHint_markasdm": "Märgi otsevestusluseks antud Matrixi ID jaoks", "whyIsThisMessageEncrypted": "Miks see sõnum pole loetav?", "noKeyForThisMessage": "See võib juhtuda, kui sõnum oli saadetud enne, kui siin seadmes oma kontoga sisse logisid.\n\nSamuti võib juhtuda siis, kui saatja on lugemises selles seadmes blokeerinud või on tekkinud tõrkeid veebiühenduses.\n\nAga mõnes teises seadmes saad seda sõnumit lugeda? Siis sa võid sõnumi sealt üle tõsta. Ava Seadistused -> Seadmed ning kontrolli, et kõik sinu seadmed on omavahel verifitseeritud. Kui avad selle vestluse või jututoa ning mõlemad sessioonid on avatud, siis vajalikud krüptovõtmed saadetakse automaatset.\n\nKas sa soovid vältida krüptovõtmete kadumist väljalogimisel ja seadmete vahetusel? Siis palun kontrolli, et seadistuses on krüptovõtmete varundus sisse lülitatud.", - "callingPermissions": "Helistamise õigused", - "callingAccountDetails": "Võimaldab FluffyChat'il kasutada Androidi helistamisrakendust.", - "appearOnTop": "Luba pealmise rakendusena", - "otherCallingPermissions": "Mikrofoni, kaamera ja muud FluffyChat'i õigused", "newGroup": "Uus jututuba", "newSpace": "Uus kogukond", - "enterSpace": "Sisene kogukonda", - "enterRoom": "Ava jututuba", - "appearOnTopDetails": "Sellega lubad rakendust avada kõige pealmisena (pole vajalik, kui Fluffychat on juba seadistatud toimima helistamiskontoga)", - "callingAccount": "Helistamiskonto", "screenSharingTitle": "ekraani jagamine", "foregroundServiceRunning": "See teavitus toimib siis, kui esiplaaniteenus töötab.", "allSpaces": "Kõik kogukonnad", "screenSharingDetail": "Sa jagad oma ekraani FuffyChati vahendusel", - "numChats": "{number} vestlust", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Peida väheolulised olekuteated", "doNotShowAgain": "Ära näita uuesti", "commandHint_cuddle": "Saada üks kaisutus", "commandHint_hug": "Saada üks kallistus", @@ -2359,7 +2099,6 @@ } } }, - "startFirstChat": "Alusta oma esimest vestlust", "encryptThisChat": "Krüpti see vestlus", "disableEncryptionWarning": "Kui vestluses on krüptimine kasutusele võetud, siis turvalisuse huvides ei saa seda hiljem välja lülitada.", "sorryThatsNotPossible": "Vabandust... see ei ole võimalik", @@ -2383,23 +2122,7 @@ "jump": "Hüppa", "openLinkInBrowser": "Ava link veebibrauseris", "report": "teata", - "allRooms": "Kõik vestlusrühmad", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "reportErrorDescription": "😭 Oh appike! Midagi läks valesti. Kui soovid, võid sellest veast arendajatele teatada.", - "signInWithPassword": "Logi sisse salasõnaga", - "pleaseTryAgainLaterOrChooseDifferentServer": "Palun proovi hiljem uuesti või muuda serveri nime.", - "signInWith": "Logi sisse kasutades teenusepakkujat:", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "importFromZipFile": "Impordi zip-failist", "exportEmotePack": "Ekspordi emotikonide pakk zip-failina", "replace": "Asenda", @@ -2407,9 +2130,7 @@ "importNow": "Impordi kohe", "importEmojis": "Impordi emojid", "sendTypingNotifications": "Saada kirjutamise teavitusi", - "createGroup": "Loo vestlusrühm", - "setTheme": "Vali teema:", - "inviteContactToGroupQuestion": "Kas sa soovid kutsuda kasutajat {contact} „{groupName}“ jututuppa?", + "createGroup": "Loo jututuba", "tryAgain": "Proovi uuesti", "chatPermissions": "Vestluse õigused", "chatDescription": "Vestluse kirjeldus", @@ -2419,11 +2140,9 @@ "shareInviteLink": "Jaga kutse linki", "directChat": "Otsevestlus", "setChatDescription": "Lisa vestluse kirjeldus", - "profileNotFound": "Sellist kasutajat serveris ei leidu. Tegemist võib olla kas võrguühenduse probleemiga või sellist kasutajat tõesti pole olemas.", "setColorTheme": "Vali värviteema:", "invite": "Kutsu", "invalidServerName": "Vigane serveri nimi", - "addChatDescription": "Lisa vestluse kirjeldus...", "chatDescriptionHasBeenChanged": "Vestluse kirjeldus on muutunud", "redactMessageDescription": "Sõnumi muudatus kehtib kõikidele vestluses osalejatele. Seda muudatust ei saa tagasi pöörata.", "redactedBy": "Muutja: {username}", @@ -2447,8 +2166,7 @@ } } }, - "inviteGroupChat": "📨 Kutse vestlusrühma", - "invitePrivateChat": "📨 Kutsu omavahelisele vestlusele", + "inviteGroupChat": "📨 Kutse jututuppa", "emoteKeyboardNoRecents": "Hiljuti kasutatud emotikonid kuvame siin...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2483,10 +2201,9 @@ "pleaseEnterANumber": "Palun sisesta 0'st suurem number", "kickUserDescription": "See kasutaja on nüüd jutuoast välja müksatud, kuid talle pole seatud suhtluskeeldu. Avaliku jututoa puhul saab ta alati uuesti liituda.", "blockListDescription": "Sul on võimalik blokeerida neid kasutajaid, kes sind segavad. Oma isiklikku blokerimisloendisse lisatud kasutajad ei saa sulle saata sõnumeid ega kutseid.", - "createGroupAndInviteUsers": "Lisavestlusrühm ja kutsu sinna kasutajaid", - "startConversation": "Alusta vestlust", + "createGroupAndInviteUsers": "Lisa jututuba ja kutsu sinna kasutajaid", "blockedUsers": "Blokeeritud kasutajad", - "groupCanBeFoundViaSearch": "Vestlusrühm on leitav otsinguga", + "groupCanBeFoundViaSearch": "Jututuba on leitav otsinguga", "noUsersFoundWithQuery": "Päringuga „{query}“ ei leidunud kahkus ühtegi kasutajat. Palun kontrolli, et päringus poleks vigu.", "@noUsersFoundWithQuery": { "type": "String", @@ -2501,7 +2218,7 @@ "commandHint_sendraw": "Saada json oma algupärasel kujul", "wrongRecoveryKey": "Vabandust..., see ei tundu olema korrektne taastevõti.", "blockUsername": "Eira kasutajanime", - "groupName": "Vestlusrühma nimi", + "groupName": "Jututoa nimi", "databaseMigrationTitle": "Andmebaas on optimeeritud", "searchChatsRooms": "Otsi #vestlusi, @kasutajaid...", "databaseMigrationBody": "Palun oota üks hetk. Natuke võib kuluda aega.", @@ -2509,30 +2226,15 @@ "publicSpaces": "Avalikud kogukonnad", "passwordIsWrong": "Sinu sisestatud salasõna on vale", "pleaseEnterYourCurrentPassword": "Palun sisesta oma praegune salasõna", - "publicLink": "Avalik link", "nothingFound": "Ei leidnud mitte midagi...", - "decline": "Keeldu", "newPassword": "Uus salasõna", "passwordsDoNotMatch": "Salasõnad ei klapi omavahel", - "subspace": "Jututuba või alamkogukond", "select": "Vali", "pleaseChooseAStrongPassword": "Palun sisesta korralik salasõna", "addChatOrSubSpace": "Lisa vestlus või jututuba", "leaveEmptyToClearStatus": "Senise oleku eemaldamiseks jäta väärtus tühjaks.", "joinSpace": "Liitu kogukonnaga", "searchForUsers": "Otsi kasutajat @kasutajanimi ...", - "databaseBuildErrorBody": "SQlite andmebaasi loomine ei õnnestu. Seetõttu üritab rakendus kasutada senist andmehoidlat. Palun teata sellest veast arendajatele siin: {url} märkides veateate: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "Rakenduse käivitamisel tekkis viga", "sessionLostBody": "Sinu sessioon on kadunud. Palun teata sellest veast arendajatele siin: {url} märkides veateate: {error}", "@sessionLostBody": { @@ -2559,25 +2261,8 @@ } }, "transparent": "Läbipaistev", - "youInvitedToBy": "📩 Sa oled lingiga saanud kutse jututuppa:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "sendReadReceipts": "Saada lugemisteatisi", "verifyOtherUserDescription": "Kui sa oled vestluse teise osapoole verifitseerinud, siis saad kindel olla, et tead, kellega suhtled. 💪\n\nKui alustad verifitseerimist, siis sinul ja teisel osapoolel tekib rakenduses hüpikaken. Seal kuvatakse emotikonide või numbrite jada, mida peate omavahel võrdlema.\n\nKõige lihtsam on seda teha kas omavahelise kohtumise ajal või videokõne kestel. 👭", - "forwardMessageTo": "Kas edastame sõnumi jututuppa {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "Muud vestluses osalejad saavad näha, kui sa oled uut sõnumit kirjutamas.", "sendReadReceiptsDescription": "Muud vestluses osalejad näevad, kas oled sõnumit lugenud.", "formattedMessages": "Vormindatud sõnumid", @@ -2639,11 +2324,6 @@ } } }, - "presenceStyle": "Olekuteated:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Näita teiste kasutajate olekuteateid", "@presencesToggle": { "type": "String", @@ -2670,16 +2350,6 @@ "globalChatId": "Üldine vestluse tunnus", "accessAndVisibilityDescription": "Kes võib selle vestlusega liituda ja kuidas on võimalik seda vestlust leida.", "hideRedactedMessagesBody": "Kui keegi muudab sõnumit, siis teda enam ei kuvataks vestluses.", - "userWouldLikeToChangeTheChat": "{user} soovib liituda vestlusega.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "hideMemberChangesInPublicChats": "Peida avalike vestluste liikmelisuse muutused", - "notifyMeFor": "Teavita mind kui", "usersMustKnock": "Kasutajad peavad uksele koputama", "noOneCanJoin": "Mitte keegi ei saa liituda", "knocking": "Koputus uksele", @@ -2693,17 +2363,7 @@ } }, "publicChatAddresses": "Vestluse avalik aadress", - "minimumPowerLevel": "{level} on väikseim võimalik õiguste tase.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "noDatabaseEncryption": "Andmebaasi krüptimine pole sellel platvormil toetatud", - "noPublicLinkHasBeenCreatedYet": "Avalikult kasutatavat linki pole veel olemas", "knock": "Koputa uksele", "appLockDescription": "Kui sa rakendust parasjagu ei kasuta, siis lukusta ta PIN-koodiga", "accessAndVisibility": "Ligipääsetavus ja nähtavus", @@ -2712,11 +2372,9 @@ "customEmojisAndStickersBody": "Lisa või jaga kohandatud emotikone või kleepsupakke, mida võiks kasutada igas vestluses.", "hideRedactedMessages": "Peida muudetud sõnumid", "hideInvalidOrUnknownMessageFormats": "Peida vigase või tundmatu vorminguga sõnumid", - "hideMemberChangesInPublicChatsBody": "Parema loetavuse nimel ära näita vestluse ajajoonel avaliku jututoaga liitumisi ja sealt lahkumisi.", "overview": "Ülevaade", "passwordRecoverySettings": "Salasõna taastamise seadistused", "createNewAddress": "Loo uus aadress", - "userRole": "Kasutaja roll", "thereAreCountUsersBlocked": "Hetkel on {count} blokeeritud kasutajat.", "@thereAreCountUsersBlocked": { "type": "String", @@ -2737,12 +2395,11 @@ "gallery": "Galerii", "files": "Failid", "swipeRightToLeftToReply": "Vastamiseks viipa paremalt vasakule", - "alwaysUse24HourFormat": "false", + "alwaysUse24HourFormat": "väär", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, "noMoreChatsFound": "Rohkem vestlusi ei leidu...", - "joinedChats": "Vestlusi, millega oled liitunud", "unread": "Lugemata", "space": "Kogukond", "spaces": "Kogukonnad", @@ -2752,18 +2409,6 @@ "space": {} }, "markAsUnread": "Märgi mitteloetuks", - "countChatsAndCountParticipants": "{chats} vestlust ja {participants} osalejat", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "userLevel": "{level} - kasutaja", "@userLevel": { "type": "String", @@ -2797,7 +2442,7 @@ "changeGeneralChatSettings": "Muuda vestluse üldiseid seadistusi", "inviteOtherUsers": "Kutsu teisi osalejaid sellesse vestlusesse", "changeTheChatPermissions": "Muuda vestluse õigusi", - "changeTheDescriptionOfTheGroup": "Muuda vestluse kirjeldust", + "changeTheDescriptionOfTheGroup": "Muuda vestluse/jututoa kirjeldust", "chatPermissionsDescription": "Määra erinevatele kasutajatele selles vestluses vajalikud õigused. Tüüpiliselt on need 0, 50 ja 100 (vastavalt kasutajad, moderaatorid ja peakasutajad), kuid igasugused vahepealsed variatsioonid on ka võimalikud.", "invitedBy": "📩 Kutsujaks {user}", "@invitedBy": { @@ -2820,9 +2465,6 @@ "sendCanceled": "Saatmine on katkestatud", "noChatsFoundHere": "Siin ei leidu veel ühtegi vestlust. Alusta uut vestlust klõpsides allpool asuvat nuppu. ⤵️", "loginWithMatrixId": "Logi sisse Matrix-ID alusel", - "discoverHomeservers": "Leia koduservereid", - "whatIsAHomeserver": "Mis on koduserver?", - "homeserverDescription": "Sarnaselt e-postiteenuse pakkujale on kõik sinu sõnumid salvestatud koduserveris. Sa võid valida sellise koduserveri, nagu sulle meeldib ja nad kõik suudavad teiste koduserveritega suhelda. Lisateavet leiad veebisaidist https://matrix.org.", "doesNotSeemToBeAValidHomeserver": "Ei tundu olema ühilduv koduserver. Kas võrguaadress on ikka õige?", "prepareSendingAttachment": "Valmistume manuse saatmiseks...", "generatingVideoThumbnail": "Loome video pisipilti...", @@ -2906,7 +2548,6 @@ } }, "waitingForServer": "Ootame serveri vastust...", - "appIntroduction": "FluffyChat võimaldab sul suhelda sõprade ja tuttavatega, kes kasutavad erinevaid sõnumikliente. Lisateavet leiad https://matrix.org saidist või lihtsalt klõpsi „Jätka“.", "synchronizingPleaseWaitCounter": " Sünkroniseerime… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -2985,10 +2626,7 @@ "notSupportedOnThisDevice": "See pole antud seadmes toetatud", "enterNewChat": "Liitu uue vestlusega", "commandHint_roomupgrade": "Uuenda see jututuba antud jututoa versioonini", - "setCustomPermissionLevel": "Seadista kohandatud õiguste tase", - "setPermissionsLevelDescription": "Palun vali eelvalitud rollide seast või lisa õiguste tase vahemikus 0 kuni 100.", "ignoreUser": "Eira kasutajat", - "normalUser": "Tavakasutaja", "approve": "Kiida heaks", "pleaseWaitUntilInvited": "Palun oota seni, kuni keegi jututoast saadab sulle kutse.", "youHaveKnocked": "Sa oled koputanud", @@ -3024,10 +2662,6 @@ "longPressToRecordVoiceMessage": "Pika vajutusega saad salvestada häälsõnumi.", "pause": "Peata", "resume": "Jätka", - "newSubSpace": "Uus alamkogukond", - "moveToDifferentSpace": "Tõsta teise kogukonda", - "moveUp": "Liiguta ülespoole", - "moveDown": "Liiguta allapoole", "removeFromSpaceDescription": "See vestlus eemaldatakse nüüd kogukonnast, kuid on jätkuvalt nähtav sinu vestluste loendis.", "countChats": "{chats} vestlust", "@countChats": { @@ -3056,7 +2690,6 @@ } } }, - "donate": "Toeta meid rahaliselt", "startedAPoll": "{username} koostas küsitluse.", "@startedAPoll": { "type": "String", @@ -3070,7 +2703,6 @@ "startPoll": "Koosta küsitlus", "endPoll": "Lõpeta küsitlus", "answersVisible": "Vastused on näha", - "answersHidden": "Vastused on peidetud", "pollQuestion": "Küsitluse küsimus", "answerOption": "Valikvastus", "addAnswerOption": "Lisa valikvastus", @@ -3138,5 +2770,43 @@ "logs": "Logid", "advancedConfigs": "Täiendav seadistus", "advancedConfigurations": "Täiendavad seadistused", - "signInWithLabel": "Logi sisse kasutades:" + "signIn": "Logi sisse", + "createNewAccount": "Loo uus kasutajakonto", + "signUpGreeting": "FluffyChat kasutab hajutatud võrku! Vali server, kuhu tahad oma kasutajakonto lisada ning alustame!", + "signInGreeting": "Sul juba on Matrixi kasutajakonto olemas? Tere tulemast tagasi! Vali oma koduserver ja logi sisse.", + "appIntro": "FluffyChati abil saad suhelda oma sõpradega. See on turvaline ja hajutatud sõnumiklient [matrix]-i võrgus! Lisateavet leiad https://matrix.org saidist või lihtsalt liitu.", + "theProcessWasCanceled": "Protsess on katkestatud.", + "join": "Liitu", + "searchOrEnterHomeserverAddress": "Otsi koduserveri aadressi või sisesta see", + "matrixId": "Matrixi kasutajatunnus", + "setPowerLevel": "Seadista õigusi", + "makeModerator": "Määra moderaatoriks", + "makeAdmin": "Määra peakasutajaks", + "removeModeratorRights": "Eemalda moderaatori õigused", + "removeAdminRights": "Eemalda peakasutaja õigused", + "powerLevel": "Õiguste tase", + "setPowerLevelDescription": "Õiguste tase on üks võimalusi kirjeldamaks seda, mida kasutaja saab jututoas teha ning see tavaliselt väljendub numbriga vahemikust 0 kuni 100.", + "owner": "Omanik", + "mute": "Summuta", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Loo uus vestlus", + "reset": "Lähtesta", + "supportFluffyChat": "Toeta FluffyChati", + "support": "Toeta meid", + "iAlreadySupportFluffyChat": "Ma juba toetan FluffyChati arendust", + "fluffyChatSupportBannerMessage": "FluffyChat vajab SINU abi!\n❤️❤️❤️\nFluffyChat jääb alati vabaks ja vabalt saadavaks, aga arendus ja serveriteenused vajavad ikkagi rahastamist.\nMeie projekti tulevik sõltub sinust ja teistest kasutajatest, nagu sina.", + "skipSupportingFluffyChat": "Jäta FluffyChati toetamine vahele", + "iDoNotWantToSupport": "Ma ei soovi toetada", + "setLowPriority": "Märgi vähetähtsaks", + "unsetLowPriority": "Eemalda märkimine vähetähtsaks", + "removeCallFromChat": "Eemalda kõne vestlusest", + "removeCallFromChatDescription": "Kas sa soovid antud kõne selle vestluse kõikidelt kasutajatelt eemaldada?", + "removeCallForEveryone": "Eemalda kõne kõigilt", + "startVoiceCall": "Algata häälkõne", + "startVideoCall": "Algata videokõne", + "joinVoiceCall": "Liitu häälkõnega", + "joinVideoCall": "Liitu videokõnega", + "live": "Reaalajas" } diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 7a36eb28..15766e64 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -313,16 +313,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Baieztatu", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Konektatu", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontaktua taldera gonbidatu da", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -392,33 +382,6 @@ } } }, - "dateWithoutYear": "{month}/{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}/{month}/{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "delete": "Ezabatu", "@delete": { "type": "String", @@ -474,11 +437,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Emote-laburdura eta irudi bat aukeratu behar dituzu!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Txata hutsik dago", "@emptyChat": { "type": "String", @@ -508,11 +466,6 @@ } } }, - "enterYourHomeserver": "Sartu zure zerbitzaria", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "fileName": "Fitxategiaren izena", "@fileName": { "type": "String", @@ -589,11 +542,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identitatea", - "@identity": { - "type": "String", - "placeholders": {} - }, "incorrectPassphraseOrKey": "Pasaesaldi edo berreskuratze-gakoa ez da zuzena", "@incorrectPassphraseOrKey": { "type": "String", @@ -714,11 +662,6 @@ "type": "String", "placeholders": {} }, - "license": "Lizentzia", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Argia", "@lightTheme": { "type": "String", @@ -914,11 +857,6 @@ } } }, - "rejoin": "Batu berriro", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Kendu", "@remove": { "type": "String", @@ -938,11 +876,6 @@ } } }, - "removeDevice": "Kendu gailua", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Kendu txatean duen debekua", "@unbanFromChat": { "type": "String", @@ -963,15 +896,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username}(e)k ikusi du", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Bidali", "@send": { "type": "String", @@ -997,11 +921,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Bidali jatorrizkoa", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Bidali bideoa", "@sendVideo": { "type": "String", @@ -1061,11 +980,6 @@ } } }, - "setInvitationLink": "Gonbidapen-esteka ezarri", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "Ezarri egoera", "@setStatus": { "type": "String", @@ -1310,11 +1224,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Horma-irudia:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "whoIsAllowedToJoinThisGroup": "Nor batu daiteke talde honetara", "@whoIsAllowedToJoinThisGroup": { "type": "String", @@ -1440,11 +1349,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Joan gela berrira", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "groups": "Taldeak", "@groups": { "type": "String", @@ -1460,16 +1364,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Niretzako gonbidapenak", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "notificationsEnabledForThisAccount": "Gaitu kontu honentzako jakinarazpenak", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} erabiltzaile idazten ari dira…", "@numUsersTyping": { "type": "String", @@ -1492,36 +1386,12 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Aukeratu", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "saveFile": "Gorde fitxategia", "@saveFile": { "type": "String", "placeholders": {} }, - "singlesignon": "Single Sign on", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "unreadChats": "{unreadCount, plural, =1{irakurri gabeko txat 1} other {irakurri gabeko {unreadCount} txat}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "videoCallsBetaWarning": "Kontuan izan bideo-deiak beta fasean daudela. Litekeena da behar bezala erabili ezin izatea —erabili ahal badira—.", - "toggleMuted": "Ikusi / Ezkutatu mutututakoak", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "all": "Guztia", "@all": { "type": "String", @@ -1533,13 +1403,7 @@ "placeholders": {} }, "experimentalVideoCalls": "Bideo-dei esperimentalak", - "emailOrUsername": "ePosta edo erabiltzaile-izena", "enableMultiAccounts": "(BETA) Gaitu kontu bat baino gehiago gailu honetan", - "openVideoCamera": "Ireki kamera bideorako", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "removeFromBundle": "Kendu sorta honetatik", "serverRequiresEmail": "Zerbitzari honek zure posta elektronikoa egiaztatu behar du izena eman dezazun.", "or": "Edo", @@ -1591,16 +1455,6 @@ "messageType": "Mezu mota", "time": "Ordua", "dismiss": "Baztertu", - "switchToAccount": "Aldatu {number} kontura", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "previousAccount": "Aurreko kontua", "edit": "Editatu", "@edit": { "type": "String", @@ -1643,23 +1497,6 @@ "placeholder": {} }, "sendOnEnter": "Bidali enter sakatuz", - "badServerVersionsException": "Zerbitzariak ondorengo ezaugarriak onartzen ditu:\n{serverVersions}\nBaina aplikazioak hauek onartzen ditu bakarrik: {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "botMessages": "Boten mezuak", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cantOpenUri": "Ezin da {uri} URIa ireki", "@cantOpenUri": { "type": "String", @@ -1694,7 +1531,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Txata gune honetara gehitu da", "configureChat": "Txata konfiguratu", "@configureChat": { "type": "String", @@ -1705,21 +1541,11 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Kideen aldaketak", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Ezarri alias nagusi bezala", "@setAsCanonicalAlias": { "type": "String", "placeholders": {} }, - "setCustomEmotes": "Ezarri zure emoteak", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "appLock": "Aplikazioa blokeatzea", "@appLock": { "type": "String", @@ -1772,16 +1598,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Erabiltzaile-izena dauka", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Ezizena dauka", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "locationDisabledNotice": "Kokapen zerbitzuak ezgaituta daude. Gaitu zure kokapena partekatu ahal izateko.", "@locationDisabledNotice": { "type": "String", @@ -1842,15 +1658,6 @@ "type": "String", "placeholders": {} }, - "videoWithSize": "Bideoa ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "openGallery": "Ireki bilduma", "pinMessage": "Finkatu gelan", "reactedWith": "{sender}(e)k {reaction}(r)ekin erreakzionatu du", @@ -1866,7 +1673,6 @@ } }, "confirmEventUnpin": "Ziur zaude gertaera finaktzeari utzi nahi diozula?", - "nextAccount": "Hurrengo kontua", "markAsRead": "Markatu irakurritzat", "yourChatBackupHasBeenSetUp": "Txaten babeskopiak ezarri dira.", "clearArchive": "Ezabatu artxiboa", @@ -2045,11 +1851,6 @@ "type": "String", "placeholders": {} }, - "people": "Jendea", - "@people": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Aukeratu sartzeko kode bat", "@pleaseChooseAPasscode": { "type": "String", @@ -2084,16 +1885,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Bidali pegatina", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Ezarri baimen-maila", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "shareLocation": "Partekatu kokapena", "@shareLocation": { "type": "String", @@ -2119,16 +1910,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Ikusi / Ezkutatu gogokoak", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Markatu irakurrita / irakurri gabe", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Eskaera gehiegi. Saiatu berriro geroago!", "@tooManyRequestsWarning": { "type": "String", @@ -2173,17 +1954,9 @@ "messageInfo": "Mezuaren xehetasunak", "sender": "Igorlea", "removeFromSpace": "Kendu gunetik", - "addToSpaceDescription": "Hautatu gune bat txat hau bertara gehitzeko.", "start": "Hasi", - "publish": "Argitaratu", "reportUser": "Salatu erabiltzailea", "openChat": "Ireki txata", - "addWidget": "Gehitu widgeta", - "widgetVideo": "Bideoa", - "widgetEtherpad": "Testu-oharra", - "widgetJitsi": "Jitsi Meet", - "widgetCustom": "Norberak ezarritakoa", - "widgetName": "Izena", "youJoinedTheChat": "Txatera batu zara", "youAcceptedTheInvitation": "👍 Gonbidapena onartu duzu", "youBannedUser": "{user}(r)i debekua ezarri diozu", @@ -2243,15 +2016,6 @@ } }, "youRejectedTheInvitation": "Gonbidapena baztertu duzu", - "separateChatTypes": "Bereizi banakako mezuak eta taldeak", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "widgetUrlError": "Ez da baliozko URLa.", - "widgetNameError": "Zehaztu ezizen bat.", - "errorAddingWidget": "Errorea widgeta gehitzerakoan.", - "pleaseEnterRecoveryKey": "Sartu berreskuratze-gakoa:", "recoveryKey": "Berreskuratze-gakoa", "recoveryKeyLost": "Berreskuratze-gakoa galdu duzu?", "users": "Erabiltzaileak", @@ -2260,7 +2024,6 @@ "dehydrateWarning": "Ekintza hau ezin da desegin. Egiaztatu babeskopia toki seguruan gorde duzula.", "hydrate": "Lehengoratu babeskopia bat erabiliz", "pleaseEnterRecoveryKeyDescription": "Mezu zaharrak ikusi ahal izateko, sartu aurreko saioan sortu zen berreskuratze-gakoa. Berreskuratze-gakoa EZ da zure pasahitza.", - "indexedDbErrorLong": "Mezuen artxibatzea ez dago defektuz gaituta modu pribatua erabiltzean.\nGaitzeko:\n - about:config\n - dom.indexedDB.privateBrowsing.enabled aukerak true erakutsi dezala\nBestela ezin da FluffyChat erabili.", "storeSecurlyOnThisDevice": "Gorde gailu honetan modu seguruan", "countFiles": "{count} fitxategi", "@countFiles": { @@ -2275,37 +2038,14 @@ "storeInSecureStorageDescription": "Gorde berreskuratze-gakoa gailu honetako biltegiratze seguruan.", "storeInAppleKeyChain": "Gorde Apple KeyChain-en", "unlockOldMessages": "Desblokeatu mezu zaharrak", - "dehydrateTorLong": "TOR erabiltzaileentzat gomendioa leihoa itxi baino lehen saioa esportatzea da.", - "hydrateTorLong": "Esportatu al zenuen zure saioa TOR erabili zenuen azken aldian? Inportatu segidan eta jarraitu txateatzen.", - "dehydrateTor": "TOR Erabiltzaileak: Esportatu saioa", - "hydrateTor": "TOR Erabiltzaileak: Inportatu esportatutako saioa", "saveKeyManuallyDescription": "Gorde eskuz gako hau gailuko partekatze-menua edo arbela erabiliz.", - "indexedDbErrorTitle": "Arazoak modu pribatuarekin", "confirmMatrixId": "Baieztatu zure Matrix IDa kontua ezabatu ahal izateko.", "newSpace": "Gune berria", - "enterRoom": "Sartu gelara", "whyIsThisMessageEncrypted": "Zergatik ezin da mezu hau irakurri?", "allSpaces": "Gune guztiak", "newGroup": "Talde berria", - "enterSpace": "Sartu gunera", - "appearOnTopDetails": "Aplikazioa goikaldean agertzea baimentzen du (ez da beharrezkoa FluffyChat deitzeko kontutzat ezarri baduzu)", "screenSharingTitle": "pantaila-partekatzea", "screenSharingDetail": "Pantaila FluffyChaten partekatzen ari zara", - "callingPermissions": "Deitzeko baimenak", - "callingAccount": "Deitzen ari den kontua", - "callingAccountDetails": "Baimendu FluffyChat Android gailuko telefono-markagailua erabiltzea.", - "appearOnTop": "Gainean erakutsi", - "otherCallingPermissions": "Mikrofono, kamera eta FluffyChaten beste baimen batzuk", - "numChats": "{number} txat", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Ezkutatu garrantzirik gabeko gertaerak", "noKeyForThisMessage": "Mezua gailu honetan saioa hasi baino lehen bidali bazen gertatu daiteke.\n\nBeste aukera bat igorleak zure gailua blokeatu izana da, edo zerbaitek huts egin izana interneteko konexioan.\n\nMezua beste saio batean irakur dezakezu? Hala bada, mezua transferitu dezakezu! Zoaz Ezrpenetara > Gailuak eta baieztatu zure gailuek bata bestea egiaztatu dutela. Gela irekiko duzun hurrengo aldian eta bi saioak aurreko planoan irekita daudenean, gakoak automatikoki partekatuko dira.\n\nEz duzu gakorik galdu nahi saioa amaitu edo gailuak aldatzen dituzunean? Baieztatu ezarpenetan txaten babeskopiak gaituta dituzula.", "supposedMxid": "Hau {mxid} izan behar da", "@supposedMxid": { @@ -2333,7 +2073,6 @@ "doNotShowAgain": "Ez erakutsi berriro", "fileIsTooBigForServer": "Ezin da bidali! Zerbitzariak gehienez {max}-ko eranskinak onartzen ditu.", "noOtherDevicesFound": "Ez da beste gailurik aurkitu", - "startFirstChat": "Hasi zure lehen txata", "newSpaceDescription": "Guneek txatak taldekatzea ahalbidetzen dute eta komunitate pribatu edo publikoak osatzea.", "disableEncryptionWarning": "Segurtasun arrazoiak direla-eta, ezin duzu lehendik zifratuta zegoen txat bateko zifratzea ezgaitu.", "encryptThisChat": "Zifratu txata", @@ -2360,11 +2099,6 @@ } } }, - "allRooms": "Talde-txat guztiak", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "jumpToLastReadMessage": "Joan irakurritako azken mezura", "reportErrorDescription": "😭 O ez! Zerbaitek huts egin du. Nahi izanez gero, eman garatzaileei errorearen berri.", "cuddleContent": "{senderName}(e)k samurki besarkatu zaitu", @@ -2389,17 +2123,6 @@ "jump": "Joan", "openLinkInBrowser": "Ireki esteka nabigatzailean", "report": "salatu", - "signInWithPassword": "Hasi saioa pasahitzarekin", - "pleaseTryAgainLaterOrChooseDifferentServer": "Saiatu geroago edo aukeratu beste zerbitzari bat.", - "signInWith": "Hasi saioa {provider}(r)ekin", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Ez da irudi-fitxategia.", "importNow": "Inportatu orain", "importEmojis": "Inportatu emojiak", @@ -2424,7 +2147,6 @@ } }, "optionalRedactReason": "(Aukerakoa) Mezua atzera botatzearen arrazoia…", - "inviteContactToGroupQuestion": "{contact} \"{groupName}\" txatera gonbidatu nahi duzu?", "redactedByBecause": "{username}(e)k atzera bota du \"{reason}\" dela-eta", "@redactedByBecause": { "type": "String", @@ -2438,7 +2160,6 @@ } }, "redactMessageDescription": "Mezua elkarrizketa honetako partaide guztientzat botako da atzera. Ezin da desegin.", - "addChatDescription": "Gehitu txataren deskribapena…", "directChat": "Banakako txata", "wrongPinEntered": "PIN okerra! Saiatu berriro {seconds} segundu barru…", "@wrongPinEntered": { @@ -2451,19 +2172,16 @@ }, "noChatDescriptionYet": "Ez da txaterako deskribapenik sortu oraindik.", "chatDescriptionHasBeenChanged": "Txataren deskribapena aldatu da", - "profileNotFound": "Ezin izan da erabiltzailea zerbitzarian aurkitu. Agian arazo bat dago konexioarekin edo erabiltzailea ez da existitzen.", "shareInviteLink": "Partekatu gonbidapen-esteka", "emoteKeyboardNoRecents": "Oraintsu erabilitako emoteak hemen ageriko dira…", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, - "setTheme": "Ezarri gaia:", "createGroup": "Sortu taldea", "invite": "Gonbidatu", "invalidInput": "Sartu duzunak ez du balio!", "inviteGroupChat": "📨 Taldeko txatera gonbidapena", - "invitePrivateChat": "📨 Txat pribatura gonbidapena", "banUserDescription": "Erabiltzailea txatetik kanporatu eta berriro sartzeko debekua ezarriko zaio; ezingo da berriro sartu debekua kendu arte.", "removeDevicesDescription": "Gailu honetako saioa amaituko da eta ezingo duzu mezurik jaso aurrerantzean.", "unbanUserDescription": "Erabiltzailea txatera berriro sartu ahal izango da berak nahi izanez gero.", @@ -2483,7 +2201,6 @@ "pleaseEnterANumber": "Sartu 0 baino zenbaki handiago bat", "kickUserDescription": "Erabiltzailea txatetik kanporatu da baina ez zaio debekua ezarri. Txat publikoen kasuan, edozein momentutan batu daiteke berriro.", "createGroupAndInviteUsers": "Sortu talde bat eta gonbidatu partaideak", - "startConversation": "Hasi elkarrizketa", "groupCanBeFoundViaSearch": "Bilaketa erabiliz aurkitu daiteke taldea", "noUsersFoundWithQuery": "Zoritxarrez ez da \"{query}\" duen erabiltzailerik aurkitu. Egiaztatu zuzen idatzi duzula.", "@noUsersFoundWithQuery": { @@ -2508,11 +2225,9 @@ "publicSpaces": "Gune publikoak", "passwordIsWrong": "Sartu duzun pasahitza okerra da", "pleaseEnterYourCurrentPassword": "Sartu oraingo pasahitza", - "publicLink": "Esteka publikoa", "nothingFound": "Ez da ezer aurkitu…", "newPassword": "Pasahitz berria", "passwordsDoNotMatch": "Pasahitzak ez datoz bat", - "subspace": "Azpi-gunea", "select": "Hautatu", "pleaseChooseAStrongPassword": "Aukeratu pasahitz sendo bat", "addChatOrSubSpace": "Gehitu txata edo azpi-gunea", @@ -2520,19 +2235,6 @@ "joinSpace": "Batu gunera", "searchForUsers": "Bilatu @erabiltzaileak…", "thisDevice": "Gailu hau:", - "decline": "Baztertu", - "databaseBuildErrorBody": "Ezin da SQlite datu-basea eraiki. Aplikazioa aurreko datu-basea erabiltzen saiatuko da oraingoz. Jakinarazi errorea garatzaileei {url} helbidean. Errorearen mezua ondorengoa da: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "Errorea aplikazioa abiaraztean", "sessionLostBody": "Zure saioa galdu da. Jakinarazi errorea garatzaileei {url} helbidean. Errorearen mezua ondorengoa da: {error}", "@sessionLostBody": { @@ -2558,14 +2260,6 @@ } } }, - "youInvitedToBy": "📩 Esteka baten bidez gonbidatu zaituzte:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "transparent": "Gardena", "sendReadReceipts": "Bidali irakurri izanaren agiria", "formattedMessages": "Formatua duten mezuak", @@ -2598,15 +2292,6 @@ } }, "sendReadReceiptsDescription": "Txateko beste partaideek mezu bat irakurri duzula ikus dezakete.", - "forwardMessageTo": "Birbidali mezua {roomName}(e)ra?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "completedKeyVerification": "{sender}(e)k gakoen egiaztapena osatu du", "@completedKeyVerification": { "type": "String", @@ -2644,11 +2329,6 @@ "type": "String", "placeholders": {} }, - "presenceStyle": "Presentzia:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "incomingMessages": "Jasotako mezuak", "hidePresences": "Ezkutatu Egoeren Zerrenda?", "discover": "Arakatu", @@ -2669,14 +2349,6 @@ }, "noDatabaseEncryption": "Plataforma honetan ezin da datu-basea zifratu", "usersMustKnock": "Erabiltzaileek baimena eskatu behar dute", - "userWouldLikeToChangeTheChat": "{user}(e)k txatera batu nahiko luke.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "knock": "Eskatu baimena", "knocking": "Baimena eskatzen", "chatCanBeDiscoveredViaSearchOnServer": "Txata {server}(e)n bilaketa eginez aurkitu daiteke", @@ -2702,24 +2374,10 @@ "hideRedactedMessagesBody": "Norbaitek mezuren bat atzera botaz gero, mezua txatetik kenduko da, abisurik gabe.", "hideInvalidOrUnknownMessageFormats": "Ezkutatu mezuen formatu ezezagun edo baliogabea", "overview": "Ikuspegi orokorra", - "notifyMeFor": "Jakinarazi…", "passwordRecoverySettings": "Pasahitza berreskuratzeko ezarpenak", - "hideMemberChangesInPublicChats": "Ezkutatu kideen egoera aldaketak txat publikoetan", "globalChatId": "Txat ID orokorra", "calls": "Deiak", - "hideMemberChangesInPublicChatsBody": "Ez erakutsi txataren denbora-lerroan norbait txat publikora batu edo txatetik irteten dela, irakurgaitasuna hobetzeko.", "noOneCanJoin": "Ezin da inor batu", - "noPublicLinkHasBeenCreatedYet": "Oraindik ez da esteka publikorik sortu", - "userRole": "Erabiltzailearen rola", - "minimumPowerLevel": "{level} da gutxieneko botere-maila.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "publicChatAddresses": "Txataren helbide publikoak", "createNewAddress": "Sortu helbide berria", "files": "Fitxategiak", @@ -2744,25 +2402,12 @@ "noMoreChatsFound": "Ez da beste txatik aurkitu...", "unread": "Irakurtzeke", "space": "Gunea", - "joinedChats": "Batu zaren txatak", "goToSpace": "Joan {space} gunera", "@goToSpace": { "type": "String", "space": {} }, "markAsUnread": "Markatu irakurri gabetzat", - "countChatsAndCountParticipants": "{chats} txat eta {participants} partaide", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "spaces": "Guneak", "adminLevel": "{level} - Administratzailea", "@adminLevel": { @@ -2819,10 +2464,7 @@ "chatPermissionsDescription": "Definitu zer botere-maila behar den txat honetako ekintza jakinetarako. 0, 50 eta 100 botere-mailek erabiltzaileak, moderatzaileak eta administratzaileak ordezkatzen dituzte, baina edozein graduazio posible da.", "sendCanceled": "Bidalketa bertan behera utzi da", "noChatsFoundHere": "Ez da txatik aurkitu. Hasi norbaitekin txateatzen beheko botoia erabiliz. ⤵️", - "homeserverDescription": "Zerbitzariak datuak gordetzen ditu, ePosta hornitzaileek mezuak gordetzen dituzten bezala. Nahi duzun zerbitzaria aukeratu dezakezu eta, hala ere, besteetako edonorekin hitz egin. Ikasi gehiago https://matrix.org webgunean.", "loginWithMatrixId": "Hasi saioa Matrix IDarekin", - "discoverHomeservers": "Arakatu zerbitzariak", - "whatIsAHomeserver": "Zer da zerbitzari bat?", "doesNotSeemToBeAValidHomeserver": "Ez dirudi zerbitzaria bateragarria denik. Zuzena da URLa?", "calculatingFileSize": "Fitxategiaren tamaina kalkulatzen…", "prepareSendingAttachment": "Eranskinaren bidalketa prestatzen…", @@ -2917,7 +2559,6 @@ "roomNotificationSettings": "Gelen jakinarazpenen ezarpenak", "otherNotificationSettings": "Beste jakinarazpenen ezarpenak", "waitingForServer": "Zerbitzariaren zain…", - "appIntroduction": "FluffyChatek mezularitza-programa desberdinak erabiltzen dituzten lagunekin txateatzea ahalbidetzen dizu. Ikasi gehiago https://matrix.org estekan edo sakatu *Jarraitu*.", "synchronizingPleaseWaitCounter": " Sinkronizatzen… (%{percentage})", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -2984,11 +2625,8 @@ "notSupportedOnThisDevice": "Ez da gailu honekin bateragarria", "commandHint_roomupgrade": "Bertsio-berritu gela adierazitako gela-bertsiora", "enterNewChat": "Sartu txat berrira", - "normalUser": "Erabiltzaile arrunta", "notificationRuleRoomServerAclDescription": "Gela-zerbitzarirako sarbide-kontroleko zerrenden (ACL) jakinarazpenak ezkutatzen ditu.", "ignoreUser": "Egin muzin erabiltzaileari", - "setCustomPermissionLevel": "Ezarri baimen-maila propioak", - "setPermissionsLevelDescription": "Aukeratu defektuzko rola edo sartu baimen-maila pertsonalizatu bat 0 eta 100 artean.", "approve": "Onetsi", "youHaveKnocked": "Sartzeko baimena eskatu duzu", "pleaseWaitUntilInvited": "Orain itxaron gelako norbaitek gonbidatzen zaituen arte.", @@ -3024,9 +2662,6 @@ "longPressToRecordVoiceMessage": "Sakatuta mantendu ahots-mezua grabatzeko.", "pause": "Gelditu", "resume": "Jarraitu", - "moveToDifferentSpace": "Beste gune batera mugitu", - "moveUp": "Eraman gora", - "moveDown": "Eraman behera", "removeFromSpaceDescription": "Txata gunetik kenduko da, baina txaten zerrendan mantenduko da.", "countChats": "{chats} txat", "@countChats": { @@ -3037,8 +2672,6 @@ } } }, - "donate": "Egin dohaintza", - "newSubSpace": "Azpi-gune berria", "spaceMemberOf": "{spaces} guneko kidea", "@spaceMemberOf": { "type": "String", @@ -3070,7 +2703,6 @@ "startPoll": "Hasi bozketa", "endPoll": "Amaitu bozketa", "answersVisible": "Erakutsi emaitzak", - "answersHidden": "Ezkutatu emaitzak", "pollQuestion": "Bozketako galdera", "answerOption": "Erantzun-aukera", "addAnswerOption": "Gehitu erantzun-aukera", @@ -3135,8 +2767,30 @@ "logs": "Erregistroak", "advancedConfigs": "Konfigurazio aurreratua", "advancedConfigurations": "Konfigurazio aurreratua", - "signInWithLabel": "Hasi saioa honakoarekin:", "federationBaseUrl": "Federatzeko URL oinarria", "baseUrl": "URL oinarria", - "identityServer": "Identitate-zerbitzaria:" -} + "identityServer": "Identitate-zerbitzaria:", + "signIn": "Hasi saioa", + "createNewAccount": "Sortu kontu berria", + "signUpGreeting": "FluffyChat deszentralizatua da! Hautatu zure kontua zein zerbitzaritan sortu nahi duzun, eta hasi erabiltzen!", + "signInGreeting": "Baduzu dagoeneko Matrix kontu bat? Ongi etorri berriro ere! Hautatu zure zerbitzaria eta hasi saioa.", + "appIntro": "FluffyChat-i esker lagunekin txateatu dezakezu. [matrix]-erako mezularitza programa seguru eta deszentralizatua da! Nahi baduzu, irakurri gehiago https://matrix.org gunean, edo hasi saioa.", + "theProcessWasCanceled": "Eragiketa bertan behera utzi da.", + "join": "Batu", + "searchOrEnterHomeserverAddress": "Bilatu edo sartu zerbitzariaren helbidea", + "matrixId": "Matrix IDa", + "setPowerLevel": "Ezarri botere-maila", + "makeModerator": "Izendatu moderatzaile", + "makeAdmin": "Izendatu administrari", + "removeModeratorRights": "Kendu moderatzaile eskubideak", + "removeAdminRights": "Kendu administratzaile eskubideak", + "powerLevel": "Botere-maila", + "setPowerLevelDescription": "Botere-mailek zehazten dute kide batek zer egin dezakeen gela honetan, eta tartea 0tik 100era artekoa izan ohi da.", + "owner": "Jabea", + "mute": "Mututu", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Sortu txat berria", + "reset": "Berrezarri" +} \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index ea9b6928..6639f37c 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -1,3386 +1,2803 @@ { - "@@last_modified": "2021-08-14 12:41:10.061080", - "repeatPassword": "تکرار گذرواژه", - "@repeatPassword": {}, - "about": "درباره", - "@about": { - "type": "String", - "placeholders": {} - }, - "accept": "پذیرش", - "@accept": { - "type": "String", - "placeholders": {} - }, - "acceptedTheInvitation": "👍 {username} دعوت را پذیرفت", - "@acceptedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "account": "حساب", - "@account": { - "type": "String", - "placeholders": {} - }, - "addToSpace": "به فضا افزودن", - "@addToSpace": {}, - "appLock": "قفل برنامه", - "@appLock": { - "type": "String", - "placeholders": {} - }, - "all": "همه", - "@all": { - "type": "String", - "placeholders": {} - }, - "allChats": "همه گپ‌ها", - "@allChats": { - "type": "String", - "placeholders": {} - }, - "addEmail": "افزودن رایانامه", - "@addEmail": { - "type": "String", - "placeholders": {} - }, - "answeredTheCall": "{senderName} به تماس پاسخ داد", - "@answeredTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "anyoneCanJoin": "هرکسی می‌تواند بپیوندد", - "@anyoneCanJoin": { - "type": "String", - "placeholders": {} - }, - "archive": "بایگانی", - "@archive": { - "type": "String", - "placeholders": {} - }, - "areYouSure": "مطمئن هستید؟", - "@areYouSure": { - "type": "String", - "placeholders": {} - }, - "areYouSureYouWantToLogout": "مطمئن هستید می‌خواهید خارج شوید؟", - "@areYouSureYouWantToLogout": { - "type": "String", - "placeholders": {} - }, - "activatedEndToEndEncryption": "🔐 {username} رمزنگاری سراسری را فعال کرد", - "@activatedEndToEndEncryption": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "admin": "مدیر", - "@admin": { - "type": "String", - "placeholders": {} - }, - "supposedMxid": "گمان میرود {mxid} باشد", - "@supposedMxid": { - "type": "String", - "placeholders": { - "mxid": { - "type": "String" - } - } - }, - "botMessages": "پیام‌های ربات", - "@botMessages": { - "type": "String", - "placeholders": {} - }, - "changedTheDisplaynameTo": "{username} نام نمایشی را به '{displayname}' تغییر داد", - "@changedTheDisplaynameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "displayname": { - "type": "String" - } - } - }, - "confirmMatrixId": "برای پاک کردن حساب، لطفاً هویت ماتریکس خود را بپذیرید.", - "@confirmMatrixId": {}, - "changeDeviceName": "تغییر نام دستگاه", - "@changeDeviceName": { - "type": "String", - "placeholders": {} - }, - "alias": "نام مستعار", - "@alias": { - "type": "String", - "placeholders": {} - }, - "banFromChat": "محروم کردن از گپ", - "@banFromChat": { - "type": "String", - "placeholders": {} - }, - "askVerificationRequest": "آیا درخواست بازبینی {username} را می‌پذیرید؟", - "@askVerificationRequest": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "areGuestsAllowedToJoin": "آیا مهمانان اجازه پیوستن دارند", - "@areGuestsAllowedToJoin": { - "type": "String", - "placeholders": {} - }, - "autoplayImages": "پخش خودکار شکلک‌ها و برچسب‌های متحرک", - "@autoplayImages": { - "type": "String", - "placeholder": {} - }, - "sendOnEnter": "فرستادن با کلید Enter", - "@sendOnEnter": {}, - "cancel": "رد کردن", - "@cancel": { - "type": "String", - "placeholders": {} - }, - "changedTheChatDescriptionTo": "{username} توضیح گپ را به '{description}' تغییر داد", - "@changedTheChatDescriptionTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "description": { - "type": "String" - } - } - }, - "changedTheChatPermissions": "{username} دسترسی‌های گپ را تغییر داد", - "@changedTheChatPermissions": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheChatNameTo": "{username} نام گپ را به '{chatname}' تغییر داد", - "@changedTheChatNameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "chatname": { - "type": "String" - } - } - }, - "cantOpenUri": "نمی‌توان پیوند {uri} را باز کرد", - "@cantOpenUri": { - "type": "String", - "placeholders": { - "uri": { - "type": "String" - } - } - }, - "banned": "محروم‌شده", - "@banned": { - "type": "String", - "placeholders": {} - }, - "bannedUser": "{username} کاربر {targetName} را محروم کرد", - "@bannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "blockDevice": "مسدود کردن دستگاه", - "@blockDevice": { - "type": "String", - "placeholders": {} - }, - "blocked": "مسدود‌شده", - "@blocked": { - "type": "String", - "placeholders": {} - }, - "badServerLoginTypesException": "سرور از این نوع ورود پشتیبانی می‌کند:\n{serverVersions}\nاما برنامه تنها از این‌ها پشتیبانی می‌کند:\n{supportedVersions}", - "@badServerLoginTypesException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "badServerVersionsException": "سرور از این نسخه‌های مشخصات پشتیبانی می‌کند:\n{serverVersions}\nاما برنامه تنها از این‌ها پشتیبانی می‌کند:\n{supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "changedTheChatAvatar": "{username} نماد گپ را تغییر داد", - "@changedTheChatAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRules": "{username} قوانین دسترسی مهمان را تغییر داد", - "@changedTheGuestAccessRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheProfileAvatar": "{username} نماد نمایه را تغییر داد", - "@changedTheProfileAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "chats": "گپ‌ها", - "@chats": { - "type": "String", - "placeholders": {} - }, - "messages": "پیام‌ها", - "@messages": { - "type": "String", - "placeholders": {} - }, - "send": "فرستادن", - "@send": { - "type": "String", - "placeholders": {} - }, - "sendAudio": "فرستادن صدا", - "@sendAudio": { - "type": "String", - "placeholders": {} - }, - "sendOriginal": "فرستادن نسخه اصلی", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "changedTheRoomAliases": "{username} نام‌های مستعار اتاق را تغییر داد", - "@changedTheRoomAliases": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomInvitationLink": "{username} پیوند دعوت را تغییر داد", - "@changedTheRoomInvitationLink": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "close": "بستن", - "@close": { - "type": "String", - "placeholders": {} - }, - "sendImage": "فرستادن تصویر", - "@sendImage": { - "type": "String", - "placeholders": {} - }, - "sendMessages": "فرستادن پیام‌ها", - "@sendMessages": { - "type": "String", - "placeholders": {} - }, - "changedTheHistoryVisibility": "{username} ویژگی دیدن تاریخچه را تغییر داد", - "@changedTheHistoryVisibility": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRulesTo": "{username} قوانین دسترسی مهمان را به {rules} تغییر داد", - "@changedTheGuestAccessRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheJoinRulesTo": "{username} قوانین پیوستن را به {joinRules} تغییر داد", - "@changedTheJoinRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "joinRules": { - "type": "String" - } - } - }, - "changedTheHistoryVisibilityTo": "{username} ویژگی دیدن تاریخچه را به {rules} تغییر داد", - "@changedTheHistoryVisibilityTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "chooseAStrongPassword": "یک گذرواژه قوی انتخاب کنید", - "@chooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "yourChatBackupHasBeenSetUp": "پشتیبان گپ شما تنظیم شد.", - "@yourChatBackupHasBeenSetUp": {}, - "changeTheme": "تغییر پوسته", - "@changeTheme": { - "type": "String", - "placeholders": {} - }, - "changeTheNameOfTheGroup": "تغییر نام گروه", - "@changeTheNameOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "changeYourAvatar": "تغییر نماد نمایه", - "@changeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "channelCorruptedDecryptError": "رمزنگاری مخدوش شده است", - "@channelCorruptedDecryptError": { - "type": "String", - "placeholders": {} - }, - "clearArchive": "پاک کردن بایگانی", - "@clearArchive": {}, - "commandHint_create": "ساختن یک گپ گروهی خالی\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید", - "@commandHint_create": { - "type": "String", - "description": "Usage hint for the command /create" - }, - "commandHint_dm": "شروع یک گپ مستقیم\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید", - "@commandHint_dm": { - "type": "String", - "description": "Usage hint for the command /dm" - }, - "sendSticker": "فرستادن برچسب", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendVideo": "فرستادن ویدئو", - "@sendVideo": { - "type": "String", - "placeholders": {} - }, - "sender": "فرستنده", - "@sender": {}, - "changedTheJoinRules": "{username} قوانین پیوستن را تغییر داد", - "@changedTheJoinRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "chatDetails": "جزئیات گپ", - "@chatDetails": { - "type": "String", - "placeholders": {} - }, - "commandHint_markasdm": "علامت‌گذاری به‌عنوان اتاق پیام مستقیم با شناسه ماتریکس", - "@commandHint_markasdm": {}, - "commandHint_markasgroup": "علامت‌گذاری به‌عنوان گروه", - "@commandHint_markasgroup": {}, - "commandHint_clearcache": "پاک کردن حافظه نهان", - "@commandHint_clearcache": { - "type": "String", - "description": "Usage hint for the command /clearcache" - }, - "commandHint_discardsession": "رد کردن نشست", - "@commandHint_discardsession": { - "type": "String", - "description": "Usage hint for the command /discardsession" - }, - "groups": "گروه‌ها", - "@groups": { - "type": "String", - "placeholders": {} - }, - "openAppToReadMessages": "برای خواندن پیام‌ها، برنامه را باز کنید", - "@openAppToReadMessages": { - "type": "String", - "placeholders": {} - }, - "sendAMessage": "فرستادن پیام", - "@sendAMessage": { - "type": "String", - "placeholders": {} - }, - "sentCallInformations": "{senderName} اطلاعات تماس را فرستاد", - "@sentCallInformations": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "sendAsText": "فرستادن به‌عنوان متن", - "@sendAsText": { - "type": "String" - }, - "sendFile": "فرستادن پرونده", - "@sendFile": { - "type": "String", - "placeholders": {} - }, - "startedACall": "{senderName} تماس را آغاز کرد", - "@startedACall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "tryToSendAgain": "تلاش دوباره برای فرستادن", - "@tryToSendAgain": { - "type": "String", - "placeholders": {} - }, - "reactedWith": "{sender} با {reaction} واکنش نشان داد", - "@reactedWith": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "reaction": { - "type": "String" - } - } - }, - "askSSSSSign": "لطفاً عبارت عبور یا کلید بازیابی حافظه امن را وارد کنید تا شخص دیگری را امضا کنید.", - "@askSSSSSign": { - "type": "String", - "placeholders": {} - }, - "chatHasBeenAddedToThisSpace": "گپ به این فضا افزوده شد", - "@chatHasBeenAddedToThisSpace": {}, - "chat": "گپ", - "@chat": { - "type": "String", - "placeholders": {} - }, - "chatBackup": "پشتیبان گپ", - "@chatBackup": { - "type": "String", - "placeholders": {} - }, - "changePassword": "تغییر گذرواژه", - "@changePassword": { - "type": "String", - "placeholders": {} - }, - "changeTheHomeserver": "تغییر سرور خانگی", - "@changeTheHomeserver": { - "type": "String", - "placeholders": {} - }, - "separateChatTypes": "جداسازی گپ‌های مستقیم از گروه‌ها", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "sentAPicture": "🖼️ {username} یک تصویر فرستاد", - "@sentAPicture": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAVideo": "🎥 {username} یک ویدئو فرستاد", - "@sentAVideo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "commandInvalid": "دستور نامعتبر", - "@commandInvalid": { - "type": "String" - }, - "commandMissing": "{command} یک دستور نیست.", - "@commandMissing": { - "type": "String", - "placeholders": { - "command": { - "type": "String" - } + "@@last_modified": "2021-08-14 12:41:10.061080", + "repeatPassword": "تکرار گذرواژه", + "about": "درباره", + "@about": { + "type": "String", + "placeholders": {} }, - "description": "State that {command} is not a valid /command." - }, - "contactHasBeenInvitedToTheGroup": "مخاطب به گروه دعوت شد", - "@contactHasBeenInvitedToTheGroup": { - "type": "String", - "placeholders": {} - }, - "sentAFile": "📁 {username} یک پرونده فرستاد", - "@sentAFile": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAnAudio": "🎤 {username} یک صدا فرستاد", - "@sentAnAudio": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "userSentUnknownEvent": "{username} یک رویداد {type} فرستاد", - "@userSentUnknownEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "type": { - "type": "String" - } - } - }, - "weSentYouAnEmail": "یک رایانامه برای شما فرستادیم", - "@weSentYouAnEmail": { - "type": "String", - "placeholders": {} - }, - "loadCountMoreParticipants": "بارگیری {count} شرکت‌کننده دیگر", - "@loadCountMoreParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "sentASticker": "😊 {username} یک برچسب فرستاد", - "@sentASticker": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "connect": "اتصال", - "@connect": { - "type": "String", - "placeholders": {} - }, - "confirm": "پذیرفتن", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "allSpaces": "همه فضاها", - "@allSpaces": {}, - "commandHint_ban": "محروم کردن کاربر مشخص‌شده از این اتاق", - "@commandHint_ban": { - "type": "String", - "description": "Usage hint for the command /ban" - }, - "commandHint_kick": "بیرون کردن کاربر مشخص‌شده از این اتاق", - "@commandHint_kick": { - "type": "String", - "description": "Usage hint for the command /kick" - }, - "commandHint_plain": "فرستادن متن بدون قالب", - "@commandHint_plain": { - "type": "String", - "description": "Usage hint for the command /plain" - }, - "commandHint_unban": "رد محرومیت کاربر مشخص‌شده از این اتاق", - "@commandHint_unban": { - "type": "String", - "description": "Usage hint for the command /unban" - }, - "containsDisplayName": "دارای نام نمایشی", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "دارای نام کاربری", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "device": "دستگاه", - "@device": { - "type": "String", - "placeholders": {} - }, - "copy": "رونوشت", - "@copy": { - "type": "String", - "placeholders": {} - }, - "defaultPermissionLevel": "سطح دسترسی پیش‌فرض", - "@defaultPermissionLevel": { - "type": "String", - "placeholders": {} - }, - "delete": "پاک کردن", - "@delete": { - "type": "String", - "placeholders": {} - }, - "deleteAccount": "پاک کردن حساب", - "@deleteAccount": { - "type": "String", - "placeholders": {} - }, - "deleteMessage": "پاک کردن پیام", - "@deleteMessage": { - "type": "String", - "placeholders": {} - }, - "commandHint_html": "فرستادن متن با قالب HTML", - "@commandHint_html": { - "type": "String", - "description": "Usage hint for the command /html" - }, - "commandHint_join": "پیوستن به اتاق مشخص‌شده", - "@commandHint_join": { - "type": "String", - "description": "Usage hint for the command /join" - }, - "commandHint_leave": "ترک این اتاق", - "@commandHint_leave": { - "type": "String", - "description": "Usage hint for the command /leave" - }, - "commandHint_myroomnick": "تنظیم نام نمایشی برای این اتاق", - "@commandHint_myroomnick": { - "type": "String", - "description": "Usage hint for the command /myroomnick" - }, - "commandHint_myroomavatar": "تنظیم نماد نمایه برای این اتاق (با mxc-uri)", - "@commandHint_myroomavatar": { - "type": "String", - "description": "Usage hint for the command /myroomavatar" - }, - "commandHint_op": "تنظیم سطح دسترسی کاربر مشخص‌شده (پیش‌فرض: ۵۰)", - "@commandHint_op": { - "type": "String", - "description": "Usage hint for the command /op" - }, - "commandHint_react": "فرستادن پاسخ به‌عنوان واکنش", - "@commandHint_react": { - "type": "String", - "description": "Usage hint for the command /react" - }, - "compareEmojiMatch": "لطفاً شکلک‌ها را مقایسه کنید", - "@compareEmojiMatch": { - "type": "String", - "placeholders": {} - }, - "copyToClipboard": "رونوشت به بریده‌دان", - "@copyToClipboard": { - "type": "String", - "placeholders": {} - }, - "countParticipants": "{count} شرکت‌کننده", - "@countParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "create": "ساختن", - "@create": { - "type": "String", - "placeholders": {} - }, - "createNewSpace": "فضای جدید", - "@createNewSpace": { - "type": "String", - "placeholders": {} - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "deviceId": "شناسه دستگاه", - "@deviceId": { - "type": "String", - "placeholders": {} - }, - "devices": "دستگاه‌ها", - "@devices": { - "type": "String", - "placeholders": {} - }, - "displaynameHasBeenChanged": "نام نمایشی تغییر کرد", - "@displaynameHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "downloadFile": "بارگیری پرونده", - "@downloadFile": { - "type": "String", - "placeholders": {} - }, - "edit": "ویرایش", - "@edit": { - "type": "String", - "placeholders": {} - }, - "editBlockedServers": "ویرایش سرورهای مسدود", - "@editBlockedServers": { - "type": "String", - "placeholders": {} - }, - "editRoomAliases": "ویرایش نام‌های مستعار اتاق", - "@editRoomAliases": { - "type": "String", - "placeholders": {} - }, - "editRoomAvatar": "ویرایش نماد اتاق", - "@editRoomAvatar": { - "type": "String", - "placeholders": {} - }, - "emoteExists": "شکلک از پیش وجود دارد!", - "@emoteExists": { - "type": "String", - "placeholders": {} - }, - "emoteWarnNeedToPick": "باید یک کد کوتاه شکلک و یک تصویر انتخاب کنید!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, - "emoteInvalid": "کد کوتاه شکلک نامعتبر است!", - "@emoteInvalid": { - "type": "String", - "placeholders": {} - }, - "emptyChat": "گپ خالی", - "@emptyChat": { - "type": "String", - "placeholders": {} - }, - "copiedToClipboard": "به بریده‌دان رونوشت شد", - "@copiedToClipboard": { - "type": "String", - "placeholders": {} - }, - "createdTheChat": "💬 {username} گپ را ساخت", - "@createdTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "darkTheme": "تیره", - "@darkTheme": { - "type": "String", - "placeholders": {} - }, - "directChats": "گپ‌های مستقیم", - "@directChats": { - "type": "String", - "placeholders": {} - }, - "emotePacks": "بسته‌های شکلک برای اتاق", - "@emotePacks": { - "type": "String", - "placeholders": {} - }, - "emoteSettings": "تنظیمات شکلک", - "@emoteSettings": { - "type": "String", - "placeholders": {} - }, - "emoteShortcode": "کد کوتاه شکلک", - "@emoteShortcode": { - "type": "String", - "placeholders": {} - }, - "commandHint_me": "توصیف خود", - "@commandHint_me": { - "type": "String", - "description": "Usage hint for the command /me" - }, - "commandHint_send": "فرستادن متن", - "@commandHint_send": { - "type": "String", - "description": "Usage hint for the command /send" - }, - "couldNotDecryptMessage": "نمی‌توان پیام را رمزگشایی کرد: {error}", - "@couldNotDecryptMessage": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "chatBackupDescription": "پیام‌های قدیمی شما با یک کلید بازیابی امن می‌شوند. لطفاً مطمئن شوید آن را گم نمی‌کنید.", - "@chatBackupDescription": { - "type": "String", - "placeholders": {} - }, - "deactivateAccountWarning": "این کار حساب شما را غیرفعال می‌کند. این کنش برگشت‌ناپذیر است! آیا مطمئن هستید؟", - "@deactivateAccountWarning": { - "type": "String", - "placeholders": {} - }, - "commandHint_invite": "دعوت از کاربر مشخص‌شده به این اتاق", - "@commandHint_invite": { - "type": "String", - "description": "Usage hint for the command /invite" - }, - "compareNumbersMatch": "لطفاً اعداد را مقایسه کنید", - "@compareNumbersMatch": { - "type": "String", - "placeholders": {} - }, - "configureChat": "پیکربندی گپ", - "@configureChat": { - "type": "String", - "placeholders": {} - }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "currentlyActive": "اکنون فعال", - "@currentlyActive": { - "type": "String", - "placeholders": {} - }, - "dateAndTimeOfDay": "{date}، {timeOfDay}", - "@dateAndTimeOfDay": { - "type": "String", - "placeholders": { - "date": { - "type": "String" - }, - "timeOfDay": { - "type": "String" - } - } - }, - "editDisplayname": "ویرایش نام نمایشی", - "@editDisplayname": { - "type": "String", - "placeholders": {} - }, - "id": "شناسه", - "@id": { - "type": "String", - "placeholders": {} - }, - "hasWithdrawnTheInvitationFor": "{username} دعوت {targetName} را پس گرفت", - "@hasWithdrawnTheInvitationFor": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "guestsAreForbidden": "مهمان‌ها ممنوع هستند", - "@guestsAreForbidden": { - "type": "String", - "placeholders": {} - }, - "hideRedactedEvents": "پنهان کردن رویدادهای ویرایش‌شده", - "@hideRedactedEvents": { - "type": "String", - "placeholders": {} - }, - "hideUnknownEvents": "پنهان کردن رویدادهای ناشناخته", - "@hideUnknownEvents": { - "type": "String", - "placeholders": {} - }, - "contentHasBeenReported": "محتوا به مدیران سرور گزارش شد", - "@contentHasBeenReported": { - "type": "String", - "placeholders": {} - }, - "fromJoining": "از پیوستن", - "@fromJoining": { - "type": "String", - "placeholders": {} - }, - "fromTheInvitation": "از دعوت", - "@fromTheInvitation": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "رفتن به اتاق جدید", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "group": "گروه", - "@group": { - "type": "String", - "placeholders": {} - }, - "groupIsPublic": "گروه عمومی است", - "@groupIsPublic": { - "type": "String", - "placeholders": {} - }, - "groupWith": "گروه با {displayname}", - "@groupWith": { - "type": "String", - "placeholders": { - "displayname": { - "type": "String" - } - } - }, - "howOffensiveIsThisContent": "این محتوا چقدر توهین‌آمیز است؟", - "@howOffensiveIsThisContent": { - "type": "String", - "placeholders": {} - }, - "enableEmotesGlobally": "فعال کردن بسته شکلک به‌صورت سراسری", - "@enableEmotesGlobally": { - "type": "String", - "placeholders": {} - }, - "enableEncryption": "فعال کردن رمزنگاری", - "@enableEncryption": { - "type": "String", - "placeholders": {} - }, - "enableEncryptionWarning": "نمی‌توانید رمزنگاری را غیرفعال کنید. آیا مطمئن هستید؟", - "@enableEncryptionWarning": { - "type": "String", - "placeholders": {} - }, - "encrypted": "رمزنگاری‌شده", - "@encrypted": { - "type": "String", - "placeholders": {} - }, - "encryption": "رمزنگاری", - "@encryption": { - "type": "String", - "placeholders": {} - }, - "encryptionNotEnabled": "رمزنگاری فعال نیست", - "@encryptionNotEnabled": { - "type": "String", - "placeholders": {} - }, - "enterAnEmailAddress": "یک نشانی رایانامه وارد کنید", - "@enterAnEmailAddress": { - "type": "String", - "placeholders": {} - }, - "endedTheCall": "{senderName} به تماس پایان داد", - "@endedTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "homeserver": "سرور خانگی", - "@homeserver": {}, - "enterYourHomeserver": "سرور خانگی خود را وارد کنید", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "errorObtainingLocation": "خطا در به‌دست آوردن مکان: {error}", - "@errorObtainingLocation": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "everythingReady": "همه‌چیز آماده است!", - "@everythingReady": { - "type": "String", - "placeholders": {} - }, - "extremeOffensive": "بسیار توهین‌آمیز", - "@extremeOffensive": { - "type": "String", - "placeholders": {} - }, - "fileName": "نام پرونده", - "@fileName": { - "type": "String", - "placeholders": {} - }, - "fluffychat": "فلافی‌چت", - "@fluffychat": { - "type": "String", - "placeholders": {} - }, - "fontSize": "اندازه قلم", - "@fontSize": { - "type": "String", - "placeholders": {} - }, - "forward": "هدایت", - "@forward": { - "type": "String", - "placeholders": {} - }, - "help": "کمک", - "@help": { - "type": "String", - "placeholders": {} - }, - "guestsCanJoin": "مهمان‌ها می‌توانند بپیوندند", - "@guestsCanJoin": { - "type": "String", - "placeholders": {} - }, - "ignoredUsers": "کاربران نادیده‌گرفته شده", - "@ignoredUsers": { - "type": "String", - "placeholders": {} - }, - "commandHint_googly": "فرستادن چند چشم گوگولی", - "@commandHint_googly": {}, - "googlyEyesContent": "{senderName} برای شما چشم‌های گوگولی می‌فرستد", - "@googlyEyesContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "ignore": "نادیده‌گرفتن", - "@ignore": { - "type": "String", - "placeholders": {} - }, - "cuddleContent": "{senderName} شما را در آغوش می‌گیرد", - "@cuddleContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "identity": "هویت", - "@identity": { - "type": "String", - "placeholders": {} - }, - "hugContent": "{senderName} شما را بغل می‌کند", - "@hugContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "commandHint_cuddle": "فرستادن آغوش", - "@commandHint_cuddle": {}, - "commandHint_hug": "فرستادن بغل", - "@commandHint_hug": {}, - "editBundlesForAccount": "ویرایش بسته‌های این حساب", - "@editBundlesForAccount": {}, - "logout": "خروج", - "@logout": { - "type": "String", - "placeholders": {} - }, - "mention": "نام‌بردن", - "@mention": { - "type": "String", - "placeholders": {} - }, - "muteChat": "بی‌صدا کردن گپ", - "@muteChat": { - "type": "String", - "placeholders": {} - }, - "newChat": "گپ جدید", - "@newChat": { - "type": "String", - "placeholders": {} - }, - "newMessageInFluffyChat": "💬 پیام جدید در فلافی‌چت", - "@newMessageInFluffyChat": { - "type": "String", - "placeholders": {} - }, - "noConnectionToTheServer": "بدون اتصال به سرور", - "@noConnectionToTheServer": { - "type": "String", - "placeholders": {} - }, - "no": "خیر", - "@no": { - "type": "String", - "placeholders": {} - }, - "noPasswordRecoveryDescription": "هنوز روشی برای بازیابی گذرواژه خود اضافه نکرده‌اید.", - "@noPasswordRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "notificationsEnabledForThisAccount": "آگاه‌سازها برای این حساب فعال شدند", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, - "or": "یا", - "@or": { - "type": "String", - "placeholders": {} - }, - "participant": "شرکت‌کننده", - "@participant": { - "type": "String", - "placeholders": {} - }, - "passphraseOrKey": "عبارت عبور یا کلید بازیابی", - "@passphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "password": "گذرواژه", - "@password": { - "type": "String", - "placeholders": {} - }, - "passwordHasBeenChanged": "گذرواژه تغییر کرد", - "@passwordHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "passwordRecovery": "بازیابی گذرواژه", - "@passwordRecovery": { - "type": "String", - "placeholders": {} - }, - "pin": "سنجاق کردن", - "@pin": { - "type": "String", - "placeholders": {} - }, - "play": "پخش {fileName}", - "@play": { - "type": "String", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "pleaseEnter4Digits": "لطفاً ۴ رقم وارد کنید یا خالی بگذارید تا قفل برنامه غیرفعال شود.", - "@pleaseEnter4Digits": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPin": "لطفاً رمز کوتاه خود را وارد کنید", - "@pleaseEnterYourPin": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPassword": "لطفاً گذرواژه خود را وارد کنید", - "@pleaseEnterYourPassword": { - "type": "String", - "placeholders": {} - }, - "pleaseFollowInstructionsOnWeb": "لطفاً دستورالعمل‌های وبگاه را دنبال کنید و روی بعدی بزنید.", - "@pleaseFollowInstructionsOnWeb": { - "type": "String", - "placeholders": {} - }, - "publicRooms": "اتاق‌های عمومی", - "@publicRooms": { - "type": "String", - "placeholders": {} - }, - "obtainingLocation": "در حال به‌دست آوردن مکان…", - "@obtainingLocation": { - "type": "String", - "placeholders": {} - }, - "oopsSomethingWentWrong": "اوه، مشکلی پیش آمد…", - "@oopsSomethingWentWrong": { - "type": "String", - "placeholders": {} - }, - "addToBundle": "افزودن به بسته", - "@addToBundle": {}, - "passwordForgotten": "فراموشی گذرواژه", - "@passwordForgotten": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterRecoveryKey": "لطفاً کلید بازیابی خود را وارد کنید:", - "@pleaseEnterRecoveryKey": {}, - "link": "پیوند", - "@link": {}, - "iHaveClickedOnLink": "روی پیوند کلیک کردم", - "@iHaveClickedOnLink": { - "type": "String", - "placeholders": {} - }, - "incorrectPassphraseOrKey": "عبارت عبور یا کلید بازیابی نادرست است", - "@incorrectPassphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "inoffensive": "بی‌ضرر", - "@inoffensive": { - "type": "String", - "placeholders": {} - }, - "inviteContactToGroup": "دعوت مخاطب به {groupName}", - "@inviteContactToGroup": { - "type": "String", - "placeholders": { - "groupName": { - "type": "String" - } - } - }, - "invitedUsersOnly": "فقط کاربران دعوت‌شده", - "@invitedUsersOnly": { - "type": "String", - "placeholders": {} - }, - "inviteForMe": "دعوت برای من", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "isTyping": "در حال نوشتن…", - "@isTyping": { - "type": "String", - "placeholders": {} - }, - "joinRoom": "پیوستن به اتاق", - "@joinRoom": { - "type": "String", - "placeholders": {} - }, - "kicked": "👞 {username} کاربر {targetName} را بیرون کرد", - "@kicked": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickFromChat": "بیرون کردن از گپ", - "@kickFromChat": { - "type": "String", - "placeholders": {} - }, - "leftTheChat": "گپ را ترک کرد", - "@leftTheChat": { - "type": "String", - "placeholders": {} - }, - "dehydrate": "صدور نشست و پاک کردن دستگاه", - "@dehydrate": {}, - "hydrateTorLong": "آیا آخرین بار نشست خود را با تور صادر کردید؟ آن را وارد کنید و گپ را ادامه دهید.", - "@hydrateTorLong": {}, - "loadingPleaseWait": "در حال بارگذاری… لطفاً صبر کنید.", - "@loadingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "loadMore": "بارگذاری بیشتر…", - "@loadMore": { - "type": "String", - "placeholders": {} - }, - "locationPermissionDeniedNotice": "دسترسی به مکان رد شد. برای هم‌رسانی مکان، لطفاً دسترسی بدهید.", - "@locationPermissionDeniedNotice": { - "type": "String", - "placeholders": {} - }, - "logInTo": "ورود به {homeserver}", - "@logInTo": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "memberChanges": "تغییرات اعضا", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "moderator": "ناظر", - "@moderator": { - "type": "String", - "placeholders": {} - }, - "newVerificationRequest": "درخواست بازبینی جدید!", - "@newVerificationRequest": { - "type": "String", - "placeholders": {} - }, - "noPermission": "بدون دسترسی", - "@noPermission": { - "type": "String", - "placeholders": {} - }, - "noRoomsFound": "اتاقی پیدا نشد…", - "@noRoomsFound": { - "type": "String", - "placeholders": {} - }, - "offline": "آفلاین", - "@offline": { - "type": "String", - "placeholders": {} - }, - "online": "آنلاین", - "@online": { - "type": "String", - "placeholders": {} - }, - "oopsPushError": "اوه! خطایی در تنظیم آگاه‌سازها رخ داد.", - "@oopsPushError": { - "type": "String", - "placeholders": {} - }, - "openCamera": "باز کردن دوربین", - "@openCamera": { - "type": "String", - "placeholders": {} - }, - "addAccount": "افزودن حساب", - "@addAccount": {}, - "people": "افراد", - "@people": { - "type": "String", - "placeholders": {} - }, - "pickImage": "انتخاب تصویر", - "@pickImage": { - "type": "String", - "placeholders": {} - }, - "pleaseChoose": "لطفاً انتخاب کنید", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, - "pleaseChooseAPasscode": "لطفاً یک رمز کوتاه انتخاب کنید", - "@pleaseChooseAPasscode": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourUsername": "لطفاً نام کاربری خود را وارد کنید", - "@pleaseEnterYourUsername": { - "type": "String", - "placeholders": {} - }, - "privacy": "حریم خصوصی", - "@privacy": { - "type": "String", - "placeholders": {} - }, - "license": "گواهینامه", - "@license": { - "type": "String", - "placeholders": {} - }, - "numUsersTyping": "{count} کاربر در حال نوشتن…", - "@numUsersTyping": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "invited": "دعوت‌شده", - "@invited": { - "type": "String", - "placeholders": {} - }, - "invitedUser": "📩 {username} از {targetName} دعوت کرد", - "@invitedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "joinedTheChat": "👋 {username} به گپ پیوست", - "@joinedTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "kickedAndBanned": "🙅 {username} کاربر {targetName} را بیرون و محروم کرد", - "@kickedAndBanned": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "dehydrateWarning": "این کنش برگشت‌ناپذیر است. مطمئن شوید پرونده پشتیبان را به‌صورت امن ذخیره می‌کنید.", - "@dehydrateWarning": {}, - "locationDisabledNotice": "مکان‌یاب غیرفعال است. لطفاً آن را فعال کنید تا بتوانید مکان خود را هم‌رسانی کنید.", - "@locationDisabledNotice": { - "type": "String", - "placeholders": {} - }, - "dehydrateTorLong": "برای کاربران تور، پیشنهاد می‌شود پیش از بستن پنجره، نشست را صادر کنند.", - "@dehydrateTorLong": {}, - "needPantalaimonWarning": "لطفاً توجه کنید که برای رمزنگاری سرتاسر به Pantalaimon نیاز دارید.", - "@needPantalaimonWarning": { - "type": "String", - "placeholders": {} - }, - "next": "بعدی", - "@next": { - "type": "String", - "placeholders": {} - }, - "noEmotesFound": "شکلکی پیدا نشد. 😕", - "@noEmotesFound": { - "type": "String", - "placeholders": {} - }, - "noGoogleServicesWarning": "به نظر می‌رسد دستگاه شما سرویس‌های گوگل ندارد. این انتخاب خوبی برای حریم خصوصی است! برای دریافت آگاه‌سازها در فلافی‌چت، پیشنهاد می‌کنیم از https://ntfy.sh استفاده کنید. با ntfy یا یک فراهم‌کننده UnifiedPush می‌توانید آگاه‌سازهای امن دریافت کنید. می‌توانید ntfy را از Play Store یا F-Droid بارگیری کنید.", - "@noGoogleServicesWarning": { - "type": "String", - "placeholders": {} - }, - "noEncryptionForPublicRooms": "رمزنگاری را تنها زمانی می‌توانید فعال کنید که اتاق عمومی نباشد.", - "@noEncryptionForPublicRooms": { - "type": "String", - "placeholders": {} - }, - "onlineKeyBackupEnabled": "پشتیبان‌گیری آنلاین کلید فعال است", - "@onlineKeyBackupEnabled": { - "type": "String", - "placeholders": {} - }, - "enableMultiAccounts": "(آزمایشی) فعال کردن چند حساب در این دستگاه", - "@enableMultiAccounts": {}, - "pleaseClickOnLink": "لطفاً روی پیوند در رایانامه کلیک کنید و ادامه دهید.", - "@pleaseClickOnLink": { - "type": "String", - "placeholders": {} - }, - "hydrateTor": "کاربران تور: وارد کردن نشست صادر شده", - "@hydrateTor": {}, - "hydrate": "بازیابی از پرونده پشتیبان", - "@hydrate": {}, - "inviteContact": "دعوت از مخاطب", - "@inviteContact": { - "type": "String", - "placeholders": {} - }, - "noMatrixServer": "{server1} سرور ماتریکس نیست، از {server2} استفاده شود؟", - "@noMatrixServer": { - "type": "String", - "placeholders": { - "server1": { - "type": "String" - }, - "server2": { - "type": "String" - } - } - }, - "openVideoCamera": "باز کردن دوربین برای فیلم‌برداری", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "oneClientLoggedOut": "یکی از برنامه‌های شما از سیستم خارج شد", - "@oneClientLoggedOut": {}, - "removeFromBundle": "برداشتن از بسته", - "@removeFromBundle": {}, - "bundleName": "نام بسته", - "@bundleName": {}, - "openInMaps": "باز کردن در نقشه", - "@openInMaps": { - "type": "String", - "placeholders": {} - }, - "serverRequiresEmail": "برای ثبت‌نام، این سرور باید نشانی رایانامه شما را تأیید کند.", - "@serverRequiresEmail": {}, - "inviteText": "{username} شما را به فلافی‌چت دعوت کرد.\n۱. به fluffychat.im بروید و برنامه را نصب کنید\n۲. ثبت‌نام کنید یا وارد شوید\n۳. پیوند دعوت را باز کنید:\n {link}", - "@inviteText": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "link": { - "type": "String" - } - } - }, - "leave": "ترک کردن", - "@leave": { - "type": "String", - "placeholders": {} - }, - "none": "هیچ", - "@none": { - "type": "String", - "placeholders": {} - }, - "offensive": "توهین‌آمیز", - "@offensive": { - "type": "String", - "placeholders": {} - }, - "scanQrCode": "پویش کد QR", - "@scanQrCode": {}, - "lastActiveAgo": "آخرین فعالیت: {localizedTimeShort}", - "@lastActiveAgo": { - "type": "String", - "placeholders": { - "localizedTimeShort": { - "type": "String" - } - } - }, - "lightTheme": "روشن", - "@lightTheme": { - "type": "String", - "placeholders": {} - }, - "dehydrateTor": "کاربران تور: صدور نشست", - "@dehydrateTor": {}, - "login": "ورود", - "@login": { - "type": "String", - "placeholders": {} - }, - "notifications": "آگاه‌سازها", - "@notifications": { - "type": "String", - "placeholders": {} - }, - "ok": "خوب", - "@ok": { - "type": "String", - "placeholders": {} - }, - "roomHasBeenUpgraded": "اتاق ارتقا یافت", - "@roomHasBeenUpgraded": { - "type": "String", - "placeholders": {} - }, - "register": "ثبت‌نام", - "@register": { - "type": "String", - "placeholders": {} - }, - "reject": "رد کردن", - "@reject": { - "type": "String", - "placeholders": {} - }, - "rejectedTheInvitation": "{username} دعوت را رد کرد", - "@rejectedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "rejoin": "پیوستن دوباره", - "@rejoin": { - "type": "String", - "placeholders": {} - }, - "unbanFromChat": "لغو محرومیت از گپ", - "@unbanFromChat": { - "type": "String", - "placeholders": {} - }, - "reply": "پاسخ", - "@reply": { - "type": "String", - "placeholders": {} - }, - "requestPermission": "درخواست دسترسی", - "@requestPermission": { - "type": "String", - "placeholders": {} - }, - "roomVersion": "نگارش اتاق", - "@roomVersion": { - "type": "String", - "placeholders": {} - }, - "search": "جستجو", - "@search": { - "type": "String", - "placeholders": {} - }, - "security": "امنیت", - "@security": { - "type": "String", - "placeholders": {} - }, - "seenByUser": "دیده‌شده توسط {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "setAsCanonicalAlias": "تنظیم به‌عنوان نام مستعار اصلی", - "@setAsCanonicalAlias": { - "type": "String", - "placeholders": {} - }, - "removeYourAvatar": "برداشتن نماد نمایه", - "@removeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "recording": "در حال ضبط", - "@recording": { - "type": "String", - "placeholders": {} - }, - "redactedAnEvent": "{username} یک رویداد را ویرایش کرد", - "@redactedAnEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "remove": "برداشتن", - "@remove": { - "type": "String", - "placeholders": {} - }, - "removeAllOtherDevices": "پاک کردن همه دستگاه‌های دیگر", - "@removeAllOtherDevices": { - "type": "String", - "placeholders": {} - }, - "removedBy": "پاک‌شده توسط {username}", - "@removedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "removeDevice": "پاک کردن دستگاه", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, - "reportMessage": "گزارش پیام", - "@reportMessage": { - "type": "String", - "placeholders": {} - }, - "saveFile": "ذخیره پرونده", - "@saveFile": { - "type": "String", - "placeholders": {} - }, - "recoveryKey": "کلید بازیابی", - "@recoveryKey": {}, - "setInvitationLink": "تنظیم پیوند دعوت", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "pushRules": "قوانین آگاه‌ساز", - "@pushRules": { - "type": "String", - "placeholders": {} - }, - "reason": "دلیل", - "@reason": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "تنظیم شکلک‌های سفارشی", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "redactMessage": "ویرایش پیام", - "@redactMessage": { - "type": "String", - "placeholders": {} - }, - "replaceRoomWithNewerVersion": "جایگزینی اتاق با نگارش جدیدتر", - "@replaceRoomWithNewerVersion": { - "type": "String", - "placeholders": {} - }, - "recoveryKeyLost": "کلید بازیابی گم شد؟", - "@recoveryKeyLost": {}, - "fileHasBeenSavedAt": "پرونده در {path} ذخیره شد", - "@fileHasBeenSavedAt": { - "type": "String", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "enterSpace": "ورود به فضا", - "@enterSpace": {}, - "wasDirectChatDisplayName": "گپ خالی (پیش‌تر {oldDisplayName} بود)", - "@wasDirectChatDisplayName": { - "type": "String", - "placeholders": { - "oldDisplayName": { - "type": "String" - } - } - }, - "newSpaceDescription": "فضاها امکان یکپارچه‌سازی گپ‌ها و ساخت جوامع خصوصی یا عمومی را فراهم می‌کنند.", - "@newSpaceDescription": {}, - "encryptThisChat": "رمزنگاری این گپ", - "@encryptThisChat": {}, - "sorryThatsNotPossible": "متأسفیم... این ممکن نیست", - "@sorryThatsNotPossible": {}, - "deviceKeys": "کلیدهای دستگاه:", - "@deviceKeys": {}, - "fileIsTooBigForServer": "نمیتوان فرستاد! سرور تنها از پیوست های تا {max} پشتیبانی میکند.", - "@fileIsTooBigForServer": {}, - "jumpToLastReadMessage": "پرش به آخرین پیام خوانده‌شده", - "@jumpToLastReadMessage": {}, - "hideUnimportantStateEvents": "پنهان کردن رویدادهای غیرمهم وضعیت", - "@hideUnimportantStateEvents": {}, - "doNotShowAgain": "دوباره نمایش نده", - "@doNotShowAgain": {}, - "readUpToHere": "خوانده‌شده تا اینجا", - "@readUpToHere": {}, - "noBackupWarning": "هشدار! بدون فعال کردن پشتیبان گپ، دسترسی به پیام‌های رمزنگاری‌شده خود را از دست خواهید داد. پیشنهاد می‌شود پیش از خروج، پشتیبان گپ را فعال کنید.", - "@noBackupWarning": {}, - "noOtherDevicesFound": "دستگاه دیگری پیدا نشد", - "@noOtherDevicesFound": {}, - "countFiles": "{count} پرونده", - "@countFiles": { - "placeholders": { - "count": { - "type": "int" - } - } - }, - "callingAccountDetails": "اجازه به فلافی‌چت برای استفاده از شماره‌گیر بومی اندروید.", - "@callingAccountDetails": {}, - "noKeyForThisMessage": "اگر پیام پیش از ورود به حساب در این دستگاه فرستاده شده باشد، این مشکل ممکن است رخ دهد.\n\nهمچنین ممکن است فرستنده دستگاه شما را مسدود کرده باشد یا مشکلی در اتصال اینترنت وجود داشته باشد.\n\nآیا می‌توانید پیام را در نشست دیگری بخوانید؟ در این صورت، می‌توانید آن را منتقل کنید! به تنظیمات > دستگاه‌ها بروید و مطمئن شوید دستگاه‌هایتان یکدیگر را بازبینی کرده‌اند. هنگام باز کردن دوباره اتاق و فعال بودن هر دو نشست، کلیدها به‌صورت خودکار منتقل می‌شوند.\n\nآیا نمی‌خواهید هنگام خروج یا تغییر دستگاه کلیدها را گم کنید؟ مطمئن شوید پشتیبان گپ را در تنظیمات فعال کرده‌اید.", - "@noKeyForThisMessage": {}, - "numChats": "{number} گپ", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "disableEncryptionWarning": "به دلایل امنیتی نمی‌توانید رمزنگاری را در گپی که فعال شده غیرفعال کنید.", - "@disableEncryptionWarning": {}, - "enterRoom": "ورود به اتاق", - "@enterRoom": {}, - "newGroup": "گروه جدید", - "@newGroup": {}, - "foregroundServiceRunning": "این آگاه‌ساز زمانی ظاهر می‌شود که خدمت پیش‌زمینه فعال است.", - "@foregroundServiceRunning": {}, - "appearOnTopDetails": "اجازه به برنامه برای نمایش در بالا (اگر فلافی‌چت را به‌عنوان حساب تماس تنظیم کرده‌اید، لازم نیست)", - "@appearOnTopDetails": {}, - "storeSecurlyOnThisDevice": "ذخیره امن در این دستگاه", - "@storeSecurlyOnThisDevice": {}, - "screenSharingDetail": "شما در حال هم‌رسانی صفحه‌نمایش خود در فلافی‌چت هستید", - "@screenSharingDetail": {}, - "newSpace": "فضای جدید", - "@newSpace": {}, - "saveKeyManuallyDescription": "این کلید را با استفاده از هم‌رسانی یا بریده‌دان به‌طور دستی ذخیره کنید.", - "@saveKeyManuallyDescription": {}, - "storeInAndroidKeystore": "ذخیره در Android KeyStore", - "@storeInAndroidKeystore": {}, - "storeInAppleKeyChain": "ذخیره در Apple KeyChain", - "@storeInAppleKeyChain": {}, - "user": "کاربر", - "@user": {}, - "custom": "سفارشی", - "@custom": {}, - "screenSharingTitle": "هم‌رسانی صفحه‌نمایش", - "@screenSharingTitle": {}, - "callingPermissions": "دسترسی‌های تماس", - "@callingPermissions": {}, - "callingAccount": "حساب تماس", - "@callingAccount": {}, - "appearOnTop": "نمایش در بالا", - "@appearOnTop": {}, - "otherCallingPermissions": "میکروفون، دوربین و دیگر دسترسی‌های فلافی‌چت", - "@otherCallingPermissions": {}, - "whyIsThisMessageEncrypted": "چرا این پیام خوانا نیست؟", - "@whyIsThisMessageEncrypted": {}, - "reopenChat": "باز کردن دوباره گپ", - "@reopenChat": {}, - "unmuteChat": "فعال کردن صدای گپ", - "@unmuteChat": { - "type": "String", - "placeholders": {} - }, - "nextAccount": "حساب بعدی", - "@nextAccount": {}, - "unlockOldMessages": "گشودن پیام‌های قدیمی", - "@unlockOldMessages": {}, - "share": "هم‌رسانی", - "@share": { - "type": "String", - "placeholders": {} - }, - "skip": "رد کردن", - "@skip": { - "type": "String", - "placeholders": {} - }, - "systemTheme": "سامانه", - "@systemTheme": { - "type": "String", - "placeholders": {} - }, - "theyDontMatch": "هم‌خوانی ندارند", - "@theyDontMatch": { - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "تغییر وضعیت برگزیده", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "تغییر وضعیت بی‌صدا", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "تغییر وضعیت خوانده‌شده/خوانده‌نشده", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "unavailable": "در دسترس نیست", - "@unavailable": { - "type": "String", - "placeholders": {} - }, - "unblockDevice": "باز کردن دستگاه", - "@unblockDevice": { - "type": "String", - "placeholders": {} - }, - "verifyStart": "آغاز بازبینی", - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "verifySuccess": "بازبینی با موفقیت انجام شد!", - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerEmoji": "در انتظار پذیرش شکلک توسط دیگری…", - "@waitingPartnerEmoji": { - "type": "String", - "placeholders": {} - }, - "wallpaper": "کاغذدیواری:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "whoCanPerformWhichAction": "چه کسی می‌تواند چه کاری انجام دهد", - "@whoCanPerformWhichAction": { - "type": "String", - "placeholders": {} - }, - "writeAMessage": "نوشتن پیام…", - "@writeAMessage": { - "type": "String", - "placeholders": {} - }, - "widgetVideo": "ویدئو", - "@widgetVideo": {}, - "youHaveBeenBannedFromThisChat": "شما از این گپ محروم شده‌اید", - "@youHaveBeenBannedFromThisChat": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "تنظیم سطح دسترسی", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setStatus": "تنظیم وضعیت", - "@setStatus": { - "type": "String", - "placeholders": {} - }, - "settings": "تنظیمات", - "@settings": { - "type": "String", - "placeholders": {} - }, - "showPassword": "نمایش گذرواژه", - "@showPassword": { - "type": "String", - "placeholders": {} - }, - "singlesignon": "ورود یکپارچه", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "spaceName": "نام فضا", - "@spaceName": { - "type": "String", - "placeholders": {} - }, - "startFirstChat": "شروع اولین گپ", - "@startFirstChat": {}, - "theyMatch": "هم‌خوانی دارند", - "@theyMatch": { - "type": "String", - "placeholders": {} - }, - "title": "فلافی‌چت", - "@title": { - "description": "Title for the application", - "type": "String", - "placeholders": {} - }, - "tooManyRequestsWarning": "درخواست‌های بیش از حد. لطفاً بعداً دوباره تلاش کنید!", - "@tooManyRequestsWarning": { - "type": "String", - "placeholders": {} - }, - "unbannedUser": "{username} محرومیت {targetName} را برداشت", - "@unbannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "unknownEncryptionAlgorithm": "الگوریتم رمزنگاری ناشناخته", - "@unknownEncryptionAlgorithm": { - "type": "String", - "placeholders": {} - }, - "unpin": "برداشتن سنجاق", - "@unpin": { - "type": "String", - "placeholders": {} - }, - "userAndUserAreTyping": "{username} و {username2} در حال نوشتن…", - "@userAndUserAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "username2": { - "type": "String" - } - } - }, - "videoCall": "تماس تصویری", - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "visibleForAllParticipants": "قابل‌دید برای همه شرکت‌کنندگان", - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "visibleForEveryone": "قابل‌دید برای همه", - "@visibleForEveryone": { - "type": "String", - "placeholders": {} - }, - "voiceMessage": "پیام صوتی", - "@voiceMessage": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerAcceptRequest": "در انتظار پذیرش درخواست توسط دیگری…", - "@waitingPartnerAcceptRequest": { - "type": "String", - "placeholders": {} - }, - "warning": "هشدار!", - "@warning": { - "type": "String", - "placeholders": {} - }, - "youAreNoLongerParticipatingInThisChat": "شما دیگر در این گپ شرکت نمی‌کنید", - "@youAreNoLongerParticipatingInThisChat": { - "type": "String", - "placeholders": {} - }, - "messageInfo": "اطلاعات پیام", - "@messageInfo": {}, - "time": "زمان", - "@time": {}, - "messageType": "نوع پیام", - "@messageType": {}, - "addToSpaceDescription": "فضایی را برای افزودن این گپ انتخاب کنید.", - "@addToSpaceDescription": {}, - "start": "آغاز", - "@start": {}, - "videoWithSize": "ویدئو ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "userIsTyping": "{username} در حال نوشتن…", - "@userIsTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "username": "نام کاربری", - "@username": { - "type": "String", - "placeholders": {} - }, - "yes": "بله", - "@yes": { - "type": "String", - "placeholders": {} - }, - "yourPublicKey": "کلید عمومی شما", - "@yourPublicKey": { - "type": "String", - "placeholders": {} - }, - "publish": "انتشار", - "@publish": {}, - "shareLocation": "هم‌رسانی مکان", - "@shareLocation": { - "type": "String", - "placeholders": {} - }, - "youInvitedUser": "📩 شما {user} را دعوت کردید", - "@youInvitedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "unverified": "تأییدنشده", - "@unverified": {}, - "verify": "بازبینی", - "@verify": { - "type": "String", - "placeholders": {} - }, - "openChat": "باز کردن گپ", - "@openChat": {}, - "dismiss": "رد کردن", - "@dismiss": {}, - "unsupportedAndroidVersion": "نسخه اندروید پشتیبانی‌نشده", - "@unsupportedAndroidVersion": {}, - "youUnbannedUser": "شما محرومیت {user} را برداشتید", - "@youUnbannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "verified": "تاییدشده", - "@verified": { - "type": "String", - "placeholders": {} - }, - "whyDoYouWantToReportThis": "چرا می‌خواهید گزارش دهید؟", - "@whyDoYouWantToReportThis": { - "type": "String", - "placeholders": {} - }, - "you": "شما", - "@you": { - "type": "String", - "placeholders": {} - }, - "widgetJitsi": "جیتسی‌میت(Jitsi Meet)", - "@widgetJitsi": {}, - "sourceCode": "کد منبع", - "@sourceCode": { - "type": "String", - "placeholders": {} - }, - "spaceIsPublic": "فضا عمومی است", - "@spaceIsPublic": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWait": "در حال همگام‌سازی... لطفا صبر کنید.", - "@synchronizingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "unknownEvent": "رویداد ناشناخته '{type}'", - "@unknownEvent": { - "type": "String", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "userAndOthersAreTyping": "{username} و {count} نفر دیگر در حال تایپ کردن…", - "@userAndOthersAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "userLeftTheChat": "👋 {username} گپ را ترک کرد", - "@userLeftTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "verifyTitle": "در حال تایید حساب دیگر", - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "visibilityOfTheChatHistory": "قابلیت دیدن تاریخچه گپ", - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "whoIsAllowedToJoinThisGroup": "چه کسی اجازه پیوستن به این گروه را دارد", - "@whoIsAllowedToJoinThisGroup": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerNumbers": "در انتظار پذیرش اعداد توسط دیگری…", - "@waitingPartnerNumbers": { - "type": "String", - "placeholders": {} - }, - "wipeChatBackup": "برای ایجاد کلید بازیابی جدید، پشتیبان گپ خود را پاک می‌کنید؟", - "@wipeChatBackup": { - "type": "String", - "placeholders": {} - }, - "withTheseAddressesRecoveryDescription": "با این آدرس‌ها می‌توانید رمز خود را بازیابی کنید.", - "@withTheseAddressesRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "openGallery": "بازکردن گالری", - "@openGallery": {}, - "removeFromSpace": "حذف از فضا", - "@removeFromSpace": {}, - "pleaseEnterRecoveryKeyDescription": "برای گشودن قفل پیام‌های قدیمیتان، لطفا کلید بازیابی‌ای که در یک نشست پیشین تولید شده را وارد کنید. کلید بازیابی شما، رمز عبور شما نیست.", - "@pleaseEnterRecoveryKeyDescription": {}, - "confirmEventUnpin": "آیا از برداشتن سنجاق رویداد به صورت دائمی مطمئن هستید؟", - "@confirmEventUnpin": {}, - "indexedDbErrorLong": "متاسفانه فضای ذخیره‌سازی پیام‌ها، به صورت پیش‌فرض در حالت خصوصی فعال نیست.\nلطفا آدرس زیر را باز کنید:\nabout:config\nمقدار «dom.indexedDB.privateBrowsing.enabled» را به «true» تغییر دهید\nدر غیر این صورت، امکان اجرای فلافی‌چت وجود ندارد.", - "@indexedDbErrorLong": {}, - "widgetEtherpad": "یادداشت متنی", - "@widgetEtherpad": {}, - "youKickedAndBanned": "🙅 شما {user} را بیرون و محروم کردید", - "@youKickedAndBanned": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "statusExampleMessage": "امروز حالتان چطور است؟", - "@statusExampleMessage": { - "type": "String", - "placeholders": {} - }, - "submit": "ارسال", - "@submit": { - "type": "String", - "placeholders": {} - }, - "youRejectedTheInvitation": "شما دعوت را رد کردید", - "@youRejectedTheInvitation": {}, - "youAcceptedTheInvitation": "👍 شما دعوت را پذیرفتید", - "@youAcceptedTheInvitation": {}, - "emailOrUsername": "رایانامه(ایمیل) یا نام کاربری", - "@emailOrUsername": {}, - "transferFromAnotherDevice": "انتقال از دستگاهی دیگر", - "@transferFromAnotherDevice": { - "type": "String", - "placeholders": {} - }, - "videoCallsBetaWarning": "لطفا توجه داشته باشید که تماس‌های تصویری در حال حاضر آزمایشی هستند. ممکن است طبق انتظار کار نکنند یا روی همه پلتفرم‌ها اصلا کار نکنند.", - "@videoCallsBetaWarning": {}, - "experimentalVideoCalls": "تماس‌های تصویری آزمایشی", - "@experimentalVideoCalls": {}, - "placeCall": "برقراری تماس", - "@placeCall": {}, - "unsupportedAndroidVersionLong": "این ویژگی به نسخه تازه‌تری از اندروید نیاز دارد. لطفا به‌روزرسانی یا پشتیبانی لینیج‌اواس(LineageOS) را بررسی کنید.", - "@unsupportedAndroidVersionLong": {}, - "sharedTheLocation": "{username} وضعیت مکانی خود را به اشتراک گذاشت", - "@sharedTheLocation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "unreadChats": "{unreadCount, plural, other{{unreadCount} گپ خوانده نشده}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "status": "وضعیت", - "@status": { - "type": "String", - "placeholders": {} - }, - "unknownDevice": "دستگاه ناشناس", - "@unknownDevice": { - "type": "String", - "placeholders": {} - }, - "markAsRead": "علامت‌گذاشتن به عنوان خوانده شده", - "@markAsRead": {}, - "reportUser": "گزارش دادن کاربر", - "@reportUser": {}, - "pinMessage": "سنجاق کردن به اتاق", - "@pinMessage": {}, - "emojis": "شکلک‌ها", - "@emojis": {}, - "voiceCall": "تماس صوتی", - "@voiceCall": {}, - "indexedDbErrorTitle": "اشکالات حالت خصوصی", - "@indexedDbErrorTitle": {}, - "switchToAccount": "تغییر به حساب {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "previousAccount": "حساب قبلی", - "@previousAccount": {}, - "addWidget": "افزودن ویجت", - "@addWidget": {}, - "widgetCustom": "سفارشی", - "@widgetCustom": {}, - "widgetName": "نام", - "@widgetName": {}, - "widgetUrlError": "این آدرس وب معتبر نیست.", - "@widgetUrlError": {}, - "widgetNameError": "لطفا یک نام نمایشی مشخص کنید.", - "@widgetNameError": {}, - "errorAddingWidget": "بروز خطا هنگام افزودن ویجت.", - "@errorAddingWidget": {}, - "youJoinedTheChat": "شما به گپ پیوستید", - "@youJoinedTheChat": {}, - "youBannedUser": "شما {user} را محروم کردید", - "@youBannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youHaveWithdrawnTheInvitationFor": "شما دعوت {user} را پس‌گرفتید", - "@youHaveWithdrawnTheInvitationFor": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedBy": "📩 شما توسط {user} دعوت شده‌اید", - "@youInvitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youKicked": "👞 شما {user} را بیرون کردید", - "@youKicked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "users": "کاربرها", - "@users": {}, - "storeInSecureStorageDescription": "کلید بازیابی را در محل ذخیره‌سازی امن این دستگاه ذخیره کنید.", - "@storeInSecureStorageDescription": {}, - "jump": "پرش", - "@jump": {}, - "allRooms": "تمام چت‌های گروهی", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "report": "گزارش", - "@report": {}, - "openLinkInBrowser": "بازکردن پیوند در مرورگر", - "@openLinkInBrowser": {}, - "reportErrorDescription": "اوه نه. اشتباهی رخ داد. اگر تمایل دارید، می‌توانید این اشکال را با توسعه‌دهندگان گزارش دهید.", - "@reportErrorDescription": {}, - "signInWithPassword": "ورود با رمزعبور", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "لطفا بعدا تلاش کنید یا سرور دیگری انتخاب کنید.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "notAnImage": "یک فایل تصویری نیست.", - "@notAnImage": {}, - "alwaysUse24HourFormat": "false", - "@alwaysUse24HourFormat": { - "description": "Set to true to always display time of day in 24 hour format." - }, - "setCustomPermissionLevel": "تنظیم سطح دسترسی سفارشی", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "لطفاً نقش از پیش تعریف‌شده‌ای را انتخاب کنید یا سطح دسترسی سفارشی بین ۰ تا ۱۰۰ وارد کنید.", - "@setPermissionsLevelDescription": {}, - "ignoreUser": "چشم‌پوشی از کاربر", - "@ignoreUser": {}, - "normalUser": "کاربر عادی", - "@normalUser": {}, - "importNow": "اکنون وارد کنید", - "@importNow": {}, - "importEmojis": "وارد کردن شکلک‌ها", - "@importEmojis": {}, - "importFromZipFile": "وارد کردن از پرونده زیپ", - "@importFromZipFile": {}, - "exportEmotePack": "صادر کردن بسته شکلک به‌صورت زیپ", - "@exportEmotePack": {}, - "replace": "جایگزین کردن", - "@replace": {}, - "aboutHomeserver": "درباره {homeserver}", - "@aboutHomeserver": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "addChatDescription": "افزودن توضیح گپ...", - "@addChatDescription": {}, - "commandHint_roomupgrade": "ارتقای این اتاق به نگارش مشخص‌شده", - "@commandHint_roomupgrade": {}, - "appLockDescription": "قفل کردن برنامه با رمز کوتاه هنگام عدم استفاده", - "@appLockDescription": {}, - "sendTypingNotifications": "فرستادن آگاه‌سازهای نوشتن", - "@sendTypingNotifications": {}, - "swipeRightToLeftToReply": "کشیدن از راست به چپ برای پاسخ", - "@swipeRightToLeftToReply": {}, - "countChatsAndCountParticipants": "{chats} گپ و {participants} شرکت‌کننده", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "noMoreChatsFound": "گپ دیگری پیدا نشد...", - "@noMoreChatsFound": {}, - "noChatsFoundHere": "اینجا هنوز گپی پیدا نشد. با استفاده از دکمه زیر گپ جدیدی با کسی شروع کنید. ⤵️", - "@noChatsFoundHere": {}, - "joinedChats": "گپ‌های پیوسته", - "@joinedChats": {}, - "unread": "خوانده‌نشده", - "@unread": {}, - "space": "فضا", - "@space": {}, - "spaces": "فضاها", - "@spaces": {}, - "checkList": "فهرست بررسی", - "@checkList": {}, - "countInvited": "{count} دعوت‌شده", - "@countInvited": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "createGroup": "ساختن گروه", - "@createGroup": {}, - "chatPermissions": "دسترسی‌های گپ", - "@chatPermissions": {}, - "emoteKeyboardNoRecents": "شکلک‌هایی که به تازگی استفاده‌شده اینجا نمایش داده میشوند...", - "@emoteKeyboardNoRecents": { - "type": "String", - "placeholders": {} - }, - "globalChatId": "شناسه گپ سراسری", - "@globalChatId": {}, - "accessAndVisibility": "دسترسی و قابلیت دید", - "@accessAndVisibility": {}, - "accessAndVisibilityDescription": "چه کسی اجازه پیوستن به این گپ را دارد و گپ چگونه قابل کشف است.", - "@accessAndVisibilityDescription": {}, - "calls": "تماس‌ها", - "@calls": {}, - "customEmojisAndStickers": "شکلک‌ها و برچسب‌های سفارشی", - "@customEmojisAndStickers": {}, - "customEmojisAndStickersBody": "افزودن یا هم‌رسانی شکلک‌ها یا برچسب‌های سفارشی که در هر گپ قابل استفاده‌اند.", - "@customEmojisAndStickersBody": {}, - "chatDescription": "توضیح گپ", - "@chatDescription": {}, - "chatDescriptionHasBeenChanged": "توضیح گپ تغییر کرد", - "@chatDescriptionHasBeenChanged": {}, - "hideRedactedMessages": "پنهان کردن پیام‌های ویرایش‌شده", - "@hideRedactedMessages": {}, - "hideRedactedMessagesBody": "اگر کسی پیامی را ویرایش کند، دیگر نمیتوان آن پیام را در گپ دید.", - "@hideRedactedMessagesBody": {}, - "hideInvalidOrUnknownMessageFormats": "پنهان کردن قالب‌های پیام نامعتبر یا ناشناخته", - "@hideInvalidOrUnknownMessageFormats": {}, - "block": "مسدود کردن", - "@block": {}, - "blockedUsers": "کاربران مسدود‌شده", - "@blockedUsers": {}, - "blockListDescription": "میتوانید کاربرانی که مزاحم شما هستند را مسدود کنید. از کاربران موجود در فهرست مسدود شخصی، پیام یا دعوت به اتاق دریافت نخواهید کرد.", - "@blockListDescription": {}, - "blockUsername": "چشم‌پوشی از نام کاربری", - "@blockUsername": {}, - "inviteContactToGroupQuestion": "آیا میخواهید {contact} را به گپ «{groupName}» دعوت کنید؟", - "@inviteContactToGroupQuestion": {}, - "noChatDescriptionYet": "هنوز توضیح گپی ساخته نشده است.", - "@noChatDescriptionYet": {}, - "tryAgain": "تلاش دوباره", - "@tryAgain": {}, - "invalidServerName": "نام سرور نامعتبر", - "@invalidServerName": {}, - "redactMessageDescription": "پیام برای همه شرکت‌کنندگان در این گفتگو ویرایش خواهد شد. این کار برگشت‌ناپذیر است.", - "@redactMessageDescription": {}, - "optionalRedactReason": "(اختیاری) دلیل ویرایش این پیام...", - "@optionalRedactReason": {}, - "messagesStyle": "پیام‌ها:", - "@messagesStyle": {}, - "shareInviteLink": "هم‌رسانی پیوند دعوت", - "@shareInviteLink": {}, - "hideMemberChangesInPublicChats": "پنهان کردن تغییرات اعضا در گپ‌های عمومی", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "برای بهبود خوانایی، اینکه کسی به گپ عمومی پیوست یا آن را ترک کرد در خط زمانی گپ نمایش داده نشود.", - "@hideMemberChangesInPublicChatsBody": {}, - "overview": "دید کلی", - "@overview": {}, - "notifyMeFor": "برایم آگاه‌ساز بفرست برای", - "@notifyMeFor": {}, - "passwordRecoverySettings": "تنظیمات بازیابی گذرواژه", - "@passwordRecoverySettings": {}, - "redactedBy": "ویرایش‌شده به‌دست {username}", - "@redactedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "directChat": "گپ مستقیم", - "@directChat": {}, - "redactedByBecause": "ویرایش‌شده به‌دست {username} زیرا: «{reason}»", - "@redactedByBecause": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "reason": { - "type": "String" - } - } - }, - "sendImages": "فرستادن {count} تصویر", - "@sendImages": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "setChatDescription": "تنظیم توضیح گپ", - "@setChatDescription": {}, - "presenceStyle": "حضور:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "presencesToggle": "نمایش پیام‌های وضعیت از دیگر کاربران", - "@presencesToggle": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWaitCounter": " در حال همگام‌سازی... ({percentage}%)", - "@synchronizingPleaseWaitCounter": { - "type": "String", - "placeholders": { - "percentage": { - "type": "String" - } - } - }, - "youInvitedToBy": "📩 شما با پیوند دعوت شده‌اید به:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "invitedBy": "📩 دعوت‌شده توسط {user}", - "@invitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "hasKnocked": "🚪 {user} در زده است", - "@hasKnocked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "usersMustKnock": "کاربران باید در بزنند", - "@usersMustKnock": {}, - "noOneCanJoin": "هیچ‌کس نمیتواند بپیوندد", - "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} مایل به پیوستن به گپ است.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "هنوز پیوند عمومی ساخته نشده است", - "@noPublicLinkHasBeenCreatedYet": {}, - "knock": "در زدن", - "@knock": {}, - "hidePresences": "پنهان کردن فهرست وضعیت؟", - "@hidePresences": {}, - "signInWith": "ورود با {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "profileNotFound": "کاربر در سرور پیدا نشد. شاید مشکل اتصال وجود دارد یا کاربر وجود ندارد.", - "@profileNotFound": {}, - "setTheme": "تنظیم پوسته:", - "@setTheme": {}, - "setColorTheme": "تنظیم پوسته رنگی:", - "@setColorTheme": {}, - "invite": "دعوت", - "@invite": {}, - "inviteGroupChat": "📨 دعوت به گپ گروهی", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 دعوت به گپ خصوصی", - "@invitePrivateChat": {}, - "invalidInput": "ورودی نامعتبر!", - "@invalidInput": {}, - "wrongPinEntered": "رمز کوتاه نادرست وارد شد! {seconds} ثانیه دیگر دوباره تلاش کنید...", - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "pleaseEnterANumber": "لطفاً عددی بزرگ‌تر از ۰ وارد کنید", - "@pleaseEnterANumber": {}, - "archiveRoomDescription": "گپ به بایگانی خواهد رفت. کاربران دیگر میتوانند ببینند که شما گپ را ترک کرده‌اید.", - "@archiveRoomDescription": {}, - "roomUpgradeDescription": "گپ با نگارش جدید اتاق بازسازی خواهد شد. به همه شرکت‌کنندگان آگاهی‌رسانی میشود که باید به گپ جدید بروند. داده‌های بیشتر درباره نگارش‌های اتاق در https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, - "removeDevicesDescription": "از این دستگاه خارج خواهید شد و دیگر نمیتوانید پیام دریافت کنید.", - "@removeDevicesDescription": {}, - "banUserDescription": "کاربر از گپ محروم خواهد شد و تا زمانی که محرومیت برداشته نشود، نمیتواند دوباره وارد گپ شود.", - "@banUserDescription": {}, - "unbanUserDescription": "کاربر در صورت تلاش دوباره میتواند وارد گپ شود.", - "@unbanUserDescription": {}, - "kickUserDescription": "کاربر از گپ بیرون میشود اما محروم نمیشود. در گپ‌های عمومی، کاربر میتواند هر زمان دوباره بپیوندد.", - "@kickUserDescription": {}, - "makeAdminDescription": "پس از مدیر کردن این کاربر، ممکن است نتوانید این کار را لغو کنید، زیرا آن‌ها همان دسترسی‌های شما را خواهند داشت.", - "@makeAdminDescription": {}, - "pushNotificationsNotAvailable": "آگاه‌سازهای فشاری در دسترس نیستند", - "@pushNotificationsNotAvailable": {}, - "learnMore": "بیشتر بدانید", - "@learnMore": {}, - "yourGlobalUserIdIs": "شناسه کاربری سراسری شما: ", - "@yourGlobalUserIdIs": {}, - "noUsersFoundWithQuery": "متأسفانه کاربری با «{query}» پیدا نشد. لطفاً بررسی کنید که آیا اشتباه نوشتاری دارید.", - "@noUsersFoundWithQuery": { - "type": "String", - "placeholders": { - "query": { - "type": "String" - } - } - }, - "knocking": "در زدن", - "@knocking": {}, - "chatCanBeDiscoveredViaSearchOnServer": "گپ با جستجو در {server} قابل کشف است", - "@chatCanBeDiscoveredViaSearchOnServer": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "searchChatsRooms": "جستجو برای #گپ‌ها، @کاربران...", - "@searchChatsRooms": {}, - "nothingFound": "چیزی پیدا نشد...", - "@nothingFound": {}, - "groupName": "نام گروه", - "@groupName": {}, - "createGroupAndInviteUsers": "ساختن گروه و دعوت کاربران", - "@createGroupAndInviteUsers": {}, - "groupCanBeFoundViaSearch": "گروه با جستجو قابل یافتن است", - "@groupCanBeFoundViaSearch": {}, - "wrongRecoveryKey": "متأسفیم... به نظر میرسد این کلید بازیابی درست نباشد.", - "@wrongRecoveryKey": {}, - "startConversation": "آغاز گفتگو", - "@startConversation": {}, - "commandHint_sendraw": "فرستادن JSON خام", - "@commandHint_sendraw": {}, - "databaseMigrationTitle": "پایگاه داده بهینه‌سازی شد", - "@databaseMigrationTitle": {}, - "databaseMigrationBody": "لطفاً صبر کنید. این ممکن است لحظه‌ای طول بکشد.", - "@databaseMigrationBody": {}, - "leaveEmptyToClearStatus": "برای پاک کردن وضعیت، خالی بگذارید.", - "@leaveEmptyToClearStatus": {}, - "select": "انتخاب", - "@select": {}, - "searchForUsers": "جستجو برای @کاربران...", - "@searchForUsers": {}, - "pleaseEnterYourCurrentPassword": "لطفاً گذرواژه کنونی خود را وارد کنید", - "@pleaseEnterYourCurrentPassword": {}, - "newPassword": "گذرواژه جدید", - "@newPassword": {}, - "pleaseChooseAStrongPassword": "لطفاً یک گذرواژه قوی انتخاب کنید", - "@pleaseChooseAStrongPassword": {}, - "passwordsDoNotMatch": "گذرواژه‌ها هم‌خوانی ندارند", - "@passwordsDoNotMatch": {}, - "passwordIsWrong": "گذرواژه واردشده نادرست است", - "@passwordIsWrong": {}, - "publicLink": "پیوند عمومی", - "@publicLink": {}, - "publicChatAddresses": "نشانی‌های گپ عمومی", - "@publicChatAddresses": {}, - "createNewAddress": "ساختن نشانی جدید", - "@createNewAddress": {}, - "joinSpace": "پیوستن به فضا", - "@joinSpace": {}, - "publicSpaces": "فضاهای عمومی", - "@publicSpaces": {}, - "addChatOrSubSpace": "افزودن گپ یا زیرفضا", - "@addChatOrSubSpace": {}, - "subspace": "زیرفضا", - "@subspace": {}, - "decline": "نپذیرفتن", - "@decline": {}, - "thisDevice": "این دستگاه:", - "@thisDevice": {}, - "userRole": "نقش کاربر", - "@userRole": {}, - "minimumPowerLevel": "{level} کمینه سطح دسترسی است.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, - "searchIn": "جستجو در گپ «{chat}»...", - "@searchIn": { - "type": "String", - "placeholders": { - "chat": { - "type": "String" - } - } - }, - "searchMore": "جستجوی بیشتر...", - "@searchMore": {}, - "gallery": "نگارخانه", - "@gallery": {}, - "files": "پرونده‌ها", - "@files": {}, - "databaseBuildErrorBody": "ناتوانی در ساخت پایگاه داده SQLite. برنامه اکنون سعی میکند از پایگاه داده قدیمی استفاده کند. لطفاً این خطا را به توسعه‌دهندگان در {url} گزارش دهید. پیام خطا: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "sessionLostBody": "نشست شما گم شده است. لطفاً این خطا را به توسعه‌دهندگان در {url} گزارش دهید. پیام خطا: {error}", - "@sessionLostBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "restoreSessionBody": "برنامه اکنون سعی میکند نشست شما را از پشتیبان بازیابی کند. لطفاً این خطا را به توسعه‌دهندگان در {url} گزارش دهید. پیام خطا: {error}", - "@restoreSessionBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "forwardMessageTo": "هدایت پیام به {roomName}؟", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "sendReadReceipts": "فرستادن رسیدهای خواندن", - "@sendReadReceipts": {}, - "sendTypingNotificationsDescription": "دیگر شرکت‌کنندگان در گپ میتوانند ببینند که شما در حال تایپ پیام جدید هستید.", - "@sendTypingNotificationsDescription": {}, - "sendReadReceiptsDescription": "دیگر شرکت‌کنندگان در گپ میتوانند ببینند که شما پیام را خوانده‌اید.", - "@sendReadReceiptsDescription": {}, - "formattedMessages": "پیام‌های قالب‌بندی‌شده", - "@formattedMessages": {}, - "formattedMessagesDescription": "نمایش محتوای پیام غنی مانند متن پررنگ با استفاده از مارک‌داون.", - "@formattedMessagesDescription": {}, - "verifyOtherUser": "🔐 بازبینی کاربر دیگر", - "@verifyOtherUser": {}, - "verifyOtherUserDescription": "اگر کاربر دیگری را بازبینی کنید، میتوانید مطمئن شوید که واقعاً با چه کسی در حال نوشتن هستید. 💪\n\nهنگام شروع بازبینی، شما و کاربر دیگر پنجره‌ای در برنامه خواهید دید. در آنجا مجموعه‌ای از شکلک‌ها یا اعداد را مشاهده میکنید که باید با یکدیگر مقایسه کنید.\n\nبهترین راه برای این کار دیدار حضوری یا شروع تماس تصویری است. 👭", - "@verifyOtherUserDescription": {}, - "verifyOtherDevice": "🔐 بازبینی دستگاه دیگر", - "@verifyOtherDevice": {}, - "verifyOtherDeviceDescription": "هنگام بازبینی دستگاه دیگر، آن دستگاه‌ها میتوانند کلیدها را تبادل کنند و امنیت کلی شما را افزایش دهند. 💪 هنگام شروع بازبینی، پنجره‌ای در برنامه روی هر دو دستگاه ظاهر میشود. در آنجا مجموعه‌ای از شکلک‌ها یا اعداد را مشاهده میکنید که باید با یکدیگر مقایسه کنید. بهتر است پیش از شروع بازبینی، هر دو دستگاه در دسترس باشند. 🤳", - "@verifyOtherDeviceDescription": {}, - "acceptedKeyVerification": "{sender} بازبینی کلید را پذیرفت", - "@acceptedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "canceledKeyVerification": "{sender} بازبینی کلید را رد کرد", - "@canceledKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "completedKeyVerification": "{sender} بازبینی کلید را کامل کرد", - "@completedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "isReadyForKeyVerification": "{sender} برای بازبینی کلید آماده است", - "@isReadyForKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "requestedKeyVerification": "{sender} درخواست بازبینی کلید کرد", - "@requestedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "startedKeyVerification": "{sender} بازبینی کلید را آغاز کرد", - "@startedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "transparent": "شفاف", - "@transparent": {}, - "incomingMessages": "پیام‌های دریافتی", - "@incomingMessages": {}, - "stickers": "برچسب‌ها", - "@stickers": {}, - "discover": "کشف", - "@discover": {}, - "commandHint_ignore": "چشم‌پوشی از شناسه ماتریکس داده‌شده", - "@commandHint_ignore": {}, - "commandHint_unignore": "لغو چشم‌پوشی از شناسه ماتریکس داده‌شده", - "@commandHint_unignore": {}, - "unreadChatsInApp": "{appname}: {unread} گپ خوانده‌نشده", - "@unreadChatsInApp": { - "type": "String", - "placeholders": { - "appname": { - "type": "String" - }, - "unread": { - "type": "String" - } - } - }, - "noDatabaseEncryption": "رمزنگاری پایگاه داده در این سکو پشتیبانی نمیشود", - "@noDatabaseEncryption": {}, - "thereAreCountUsersBlocked": "اکنون {count} کاربر مسدود شده‌اند.", - "@thereAreCountUsersBlocked": { - "type": "String", - "count": {} - }, - "restricted": "محدودشده", - "@restricted": {}, - "knockRestricted": "در زدن محدود", - "@knockRestricted": {}, - "goToSpace": "رفتن به فضا: {space}", - "@goToSpace": { - "type": "String", - "space": {} - }, - "markAsUnread": "علامت‌گذاری به‌عنوان خوانده‌نشده", - "@markAsUnread": {}, - "userLevel": "{level} - کاربر", - "@userLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "moderatorLevel": "{level} - ناظر", - "@moderatorLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "adminLevel": "{level} - مدیر", - "@adminLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "changeGeneralChatSettings": "تغییر تنظیمات عمومی گپ", - "@changeGeneralChatSettings": {}, - "inviteOtherUsers": "دعوت کاربران دیگر به این گپ", - "@inviteOtherUsers": {}, - "changeTheChatPermissions": "تغییر دسترسی‌های گپ", - "@changeTheChatPermissions": {}, - "changeTheVisibilityOfChatHistory": "تغییر قابلیت دید تاریخچه گپ", - "@changeTheVisibilityOfChatHistory": {}, - "changeTheCanonicalRoomAlias": "تغییر نشانی اصلی گپ عمومی", - "@changeTheCanonicalRoomAlias": {}, - "sendRoomNotifications": "فرستادن آگاه‌سازهای @room", - "@sendRoomNotifications": {}, - "changeTheDescriptionOfTheGroup": "تغییر توضیح گپ", - "@changeTheDescriptionOfTheGroup": {}, - "chatPermissionsDescription": "مشخص کنید کدام سطح دسترسی برای اقدامات خاصی در این گپ لازم است. سطح‌های دسترسی ۰، ۵۰ و ۱۰۰ معمولاً نشان‌دهنده کاربران، ناظران و مدیران هستند، اما هر درجه‌بندی ممکن است.", - "@chatPermissionsDescription": {}, - "updateInstalled": "🎉 به‌روزرسانی {version} نصب شد!", - "@updateInstalled": { - "type": "String", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "changelog": "فهرست تغییرات", - "@changelog": {}, - "sendCanceled": "فرستادن رد شد", - "@sendCanceled": {}, - "loginWithMatrixId": "ورود با شناسه ماتریکس", - "@loginWithMatrixId": {}, - "discoverHomeservers": "کشف سرورهای خانگی", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "سرور خانگی چیست؟", - "@whatIsAHomeserver": {}, - "homeserverDescription": "همه داده‌های شما روی سرور خانگی نگه‌داری میشوند، مانند یک فراهم‌کننده رایانامه. میتوانید سرور خانگی مورد نظر خود را انتخاب کنید، در حالی که همچنان میتوانید با هر کسی گفتگو کنید. اطلاعات بیشتر در https://matrix.org.", - "@homeserverDescription": {}, - "doesNotSeemToBeAValidHomeserver": "به نظر نمیرسد سرور خانگی سازگاری داشته باشد. نشانی اشتباه است؟", - "@doesNotSeemToBeAValidHomeserver": {}, - "calculatingFileSize": "در حال محاسبه اندازه پرونده...", - "@calculatingFileSize": {}, - "prepareSendingAttachment": "آماده‌سازی برای فرستادن پیوست...", - "@prepareSendingAttachment": {}, - "sendingAttachment": "در حال فرستادن پیوست...", - "@sendingAttachment": {}, - "generatingVideoThumbnail": "در حال تولید تصویر کوچک ویدئو...", - "@generatingVideoThumbnail": {}, - "compressVideo": "در حال فشرده‌سازی ویدئو...", - "@compressVideo": {}, - "sendingAttachmentCountOfCount": "در حال فرستادن پیوست {index} از {length}...", - "@sendingAttachmentCountOfCount": { - "type": "integer", - "placeholders": { - "index": { - "type": "int" - }, - "length": { - "type": "int" - } - } - }, - "serverLimitReached": "محدودیت سرور رسیده است! {seconds} ثانیه صبر کنید...", - "@serverLimitReached": { - "type": "integer", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "oneOfYourDevicesIsNotVerified": "یکی از دستگاه‌های شما بازبینی نشده است", - "@oneOfYourDevicesIsNotVerified": {}, - "noticeChatBackupDeviceVerification": "توجه: وقتی همه دستگاه‌های خود را به پشتیبان گپ متصل کنید، به‌صورت خودکار بازبینی میشوند.", - "@noticeChatBackupDeviceVerification": {}, - "continueText": "ادامه", - "@continueText": {}, - "welcomeText": "درود درود 👋 این فلافی‌چت است. میتوانید به هر سرور خانگی سازگار با https://matrix.org وارد شوید و با هر کسی گپ بزنید. این یک شبکه پیام‌رسانی غیرمتمرکز بزرگ است!", - "@welcomeText": {}, - "blur": "محو کردن:", - "@blur": {}, - "opacity": "شفافیت:", - "@opacity": {}, - "setWallpaper": "تنظیم کاغذدیواری", - "@setWallpaper": {}, - "manageAccount": "مدیریت حساب", - "@manageAccount": {}, - "noContactInformationProvided": "سرور هیچ اطلاعات تماس معتبری نمیدهد", - "@noContactInformationProvided": {}, - "contactServerAdmin": "تماس با مدیر سرور", - "@contactServerAdmin": {}, - "contactServerSecurity": "تماس با امنیت سرور", - "@contactServerSecurity": {}, - "supportPage": "صفحه پشتیبانی", - "@supportPage": {}, - "serverInformation": "درباره سرور:", - "@serverInformation": {}, - "name": "نام", - "@name": {}, - "version": "نگارش", - "@version": {}, - "website": "وبگاه", - "@website": {}, - "compress": "فشرده‌سازی", - "@compress": {}, - "boldText": "متن درشت", - "@boldText": {}, - "italicText": "متن کج", - "@italicText": {}, - "strikeThrough": "خط‌خورده", - "@strikeThrough": {}, - "pleaseFillOut": "لطفاً پر کنید", - "@pleaseFillOut": {}, - "invalidUrl": "نشانی نامعتبر", - "@invalidUrl": {}, - "addLink": "افزودن پیوند", - "@addLink": {}, - "unableToJoinChat": "ناتوانی در پیوستن به گپ. شاید طرف مقابل گفتگو را بسته است.", - "@unableToJoinChat": {}, - "previous": "پیشین", - "@previous": {}, - "otherPartyNotLoggedIn": "طرف مقابل اکنون وارد نشده است و بنابراین نمیتواند پیام دریافت کند!", - "@otherPartyNotLoggedIn": {}, - "appWantsToUseForLogin": "برای ورود از '{server}' استفاده کنید", - "@appWantsToUseForLogin": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "appWantsToUseForLoginDescription": "شما بدین‌وسیله به برنامه و وبگاه اجازه میدهید اطلاعات شما را هم‌رسانی کنند.", - "@appWantsToUseForLoginDescription": {}, - "open": "باز کردن", - "@open": {}, - "waitingForServer": "در انتظار سرور...", - "@waitingForServer": {}, - "appIntroduction": "فلافی‌چت به شما امکان گپ با دوستانتان در پیام‌رسان‌های مختلف را میدهد. اطلاعات بیشتر در https://matrix.org یا فقط روی *ادامه* بزنید.", - "@appIntroduction": {}, - "newChatRequest": "📩 درخواست گپ جدید", - "@newChatRequest": {}, - "contentNotificationSettings": "تنظیمات آگاه‌ساز محتوا", - "@contentNotificationSettings": {}, - "generalNotificationSettings": "تنظیمات آگاه‌ساز عمومی", - "@generalNotificationSettings": {}, - "roomNotificationSettings": "تنظیمات آگاه‌ساز اتاق", - "@roomNotificationSettings": {}, - "userSpecificNotificationSettings": "تنظیمات آگاه‌ساز خاص کاربر", - "@userSpecificNotificationSettings": {}, - "otherNotificationSettings": "سایر تنظیمات آگاه‌ساز", - "@otherNotificationSettings": {}, - "notificationRuleContainsUserName": "دارای نام کاربری", - "@notificationRuleContainsUserName": {}, - "notificationRuleContainsUserNameDescription": "وقتی پیامی حاوی نام کاربری باشد، کاربر را آگاه میکند.", - "@notificationRuleContainsUserNameDescription": {}, - "notificationRuleMaster": "بی‌صدا کردن همه آگاه‌سازها", - "@notificationRuleMaster": {}, - "notificationRuleMasterDescription": "از قوانین دیگر چشم‌پوشی میکند و همه آگاه‌سازها را غیرفعال میکند.", - "@notificationRuleMasterDescription": {}, - "notificationRuleSuppressNotices": "سرکوب پیام‌های خودکار", - "@notificationRuleSuppressNotices": {}, - "notificationRuleSuppressNoticesDescription": "آگاه‌سازهای کارخواه‌های خودکار مانند ربات‌ها را سرکوب میکند.", - "@notificationRuleSuppressNoticesDescription": {}, - "notificationRuleInviteForMe": "دعوت برای من", - "@notificationRuleInviteForMe": {}, - "notificationRuleInviteForMeDescription": "وقتی کاربر به اتاقی دعوت میشود، او را آگاه میکند.", - "@notificationRuleInviteForMeDescription": {}, - "notificationRuleMemberEvent": "رویداد عضویت", - "@notificationRuleMemberEvent": {}, - "notificationRuleMemberEventDescription": "آگاه‌سازهای رویدادهای عضویت را سرکوب میکند.", - "@notificationRuleMemberEventDescription": {}, - "notificationRuleIsUserMention": "نام‌بردن از کاربر", - "@notificationRuleIsUserMention": {}, - "notificationRuleIsUserMentionDescription": "وقتی در پیامی مستقیماً از کاربر نام برده میشود، او را آگاه میکند.", - "@notificationRuleIsUserMentionDescription": {}, - "notificationRuleContainsDisplayName": "دارای نام نمایشی", - "@notificationRuleContainsDisplayName": {}, - "notificationRuleContainsDisplayNameDescription": "وقتی پیامی حاوی نام نمایشی کاربر باشد، کاربر را آگاه میکند.", - "@notificationRuleContainsDisplayNameDescription": {}, - "notificationRuleIsRoomMention": "نام‌بردن از اتاق", - "@notificationRuleIsRoomMention": {}, - "notificationRuleIsRoomMentionDescription": "وقتی نام اتاق ذکر میشود، کاربر را آگاه میکند.", - "@notificationRuleIsRoomMentionDescription": {}, - "notificationRuleRoomnotif": "آگاه‌ساز اتاق", - "@notificationRuleRoomnotif": {}, - "notificationRuleRoomnotifDescription": "وقتی پیامی حاوی '@room' باشد، کاربر را آگاه میکند.", - "@notificationRuleRoomnotifDescription": {}, - "notificationRuleTombstone": "سنگ قبر", - "@notificationRuleTombstone": {}, - "notificationRuleTombstoneDescription": "کاربر را از پیام‌های غیرفعال‌سازی اتاق آگاه میکند.", - "@notificationRuleTombstoneDescription": {}, - "notificationRuleReaction": "واکنش", - "@notificationRuleReaction": {}, - "notificationRuleReactionDescription": "آگاه‌سازهای واکنش‌ها را سرکوب میکند.", - "@notificationRuleReactionDescription": {}, - "notificationRuleRoomServerAcl": "ACL سرور اتاق", - "@notificationRuleRoomServerAcl": {}, - "notificationRuleRoomServerAclDescription": "آگاه‌سازهای فهرست‌های کنترل دسترسی سرور اتاق (ACL) را سرکوب میکند.", - "@notificationRuleRoomServerAclDescription": {}, - "notificationRuleSuppressEdits": "سرکوب ویرایش‌ها", - "@notificationRuleSuppressEdits": {}, - "notificationRuleSuppressEditsDescription": "آگاه‌سازهای پیام‌های ویرایش‌شده را سرکوب میکند.", - "@notificationRuleSuppressEditsDescription": {}, - "notificationRuleCall": "تماس", - "@notificationRuleCall": {}, - "notificationRuleCallDescription": "درباره تماس‌ها کاربر را آگاه میکند.", - "@notificationRuleCallDescription": {}, - "notificationRuleEncryptedRoomOneToOne": "اتاق رمزنگاری‌شده یک‌به‌یک", - "@notificationRuleEncryptedRoomOneToOne": {}, - "notificationRuleEncryptedRoomOneToOneDescription": "کاربر را از پیام‌ها در اتاق‌های رمزنگاری‌شده یک‌به‌یک آگاه میکند.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, - "notificationRuleRoomOneToOne": "اتاق یک‌به‌یک", - "@notificationRuleRoomOneToOne": {}, - "notificationRuleRoomOneToOneDescription": "کاربر را از پیام‌ها در اتاق‌های یک‌به‌یک آگاه میکند.", - "@notificationRuleRoomOneToOneDescription": {}, - "notificationRuleMessage": "پیام", - "@notificationRuleMessage": {}, - "notificationRuleMessageDescription": "کاربر را از پیام‌های عمومی آگاه میکند.", - "@notificationRuleMessageDescription": {}, - "notificationRuleEncrypted": "رمزنگاری‌شده", - "@notificationRuleEncrypted": {}, - "notificationRuleEncryptedDescription": "کاربر را از پیام‌ها در اتاق‌های رمزنگاری‌شده آگاه میکند.", - "@notificationRuleEncryptedDescription": {}, - "notificationRuleJitsi": "جیتسی", - "@notificationRuleJitsi": {}, - "notificationRuleJitsiDescription": "کاربر را از رویدادهای ابزارک جیتسی آگاه میکند.", - "@notificationRuleJitsiDescription": {}, - "notificationRuleServerAcl": "سرکوب رویدادهای ACL سرور", - "@notificationRuleServerAcl": {}, - "notificationRuleServerAclDescription": "آگاه‌سازهای رویدادهای ACL سرور را سرکوب میکند.", - "@notificationRuleServerAclDescription": {}, - "unknownPushRule": "قانون ناشناخته آگاه‌ساز '{rule}'", - "@unknownPushRule": { - "type": "String", - "placeholders": { - "rule": { - "type": "String" - } - } - }, - "sentVoiceMessage": "🎙️ {duration} - پیام صوتی از {sender}", - "@sentVoiceMessage": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "duration": { - "type": "String" - } + "accept": "پذیرش", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} دعوت را پذیرفت", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "حساب", + "@account": { + "type": "String", + "placeholders": {} + }, + "addToSpace": "به فضا افزودن", + "appLock": "قفل برنامه", + "@appLock": { + "type": "String", + "placeholders": {} + }, + "all": "همه", + "@all": { + "type": "String", + "placeholders": {} + }, + "allChats": "همه چت ها", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "addEmail": "افزودن رایانامه", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "answeredTheCall": "{senderName} به تماس پاسخ داد", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "anyoneCanJoin": "هرکسی می‌تواند بپیوندد", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + }, + "archive": "بایگانی", + "@archive": { + "type": "String", + "placeholders": {} + }, + "areYouSure": "مطمئن هستید؟", + "@areYouSure": { + "type": "String", + "placeholders": {} + }, + "areYouSureYouWantToLogout": "مطمئن هستید می‌خواهید خارج شوید؟", + "@areYouSureYouWantToLogout": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} رمزنگاری سراسری را فعال کرد", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "admin": "مدیر", + "@admin": { + "type": "String", + "placeholders": {} + }, + "supposedMxid": "گمان میرود {mxid} باشد", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "changedTheDisplaynameTo": "{username} نام نمایشی را به '{displayname}' تغییر داد", + "@changedTheDisplaynameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "displayname": { + "type": "String" + } + } + }, + "confirmMatrixId": "برای پاک کردن حساب، لطفاً هویت ماتریکس خود را بپذیرید.", + "changeDeviceName": "تغییر نام دستگاه", + "@changeDeviceName": { + "type": "String", + "placeholders": {} + }, + "alias": "نام مستعار", + "@alias": { + "type": "String", + "placeholders": {} + }, + "banFromChat": "بن کردن از چت", + "@banFromChat": { + "type": "String", + "placeholders": {} + }, + "askVerificationRequest": "آیا درخواست بازبینی {username} را می‌پذیرید؟", + "@askVerificationRequest": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "areGuestsAllowedToJoin": "آیا مهمانان اجازه پیوستن دارند؟", + "@areGuestsAllowedToJoin": { + "type": "String", + "placeholders": {} + }, + "autoplayImages": "پخش خودکار شکلک‌ها و برچسب‌های متحرک", + "@autoplayImages": { + "type": "String", + "placeholder": {} + }, + "sendOnEnter": "فرستادن با کلید Enter", + "cancel": "رد کردن", + "@cancel": { + "type": "String", + "placeholders": {} + }, + "changedTheChatDescriptionTo": "{username} توضیح چت را به '{description}' تغییر داد", + "@changedTheChatDescriptionTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "description": { + "type": "String" + } + } + }, + "changedTheChatPermissions": "{username} دسترسی‌های چت را تغییر داد", + "@changedTheChatPermissions": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheChatNameTo": "{username} نام چت را به '{chatname}' تغییر داد", + "@changedTheChatNameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "chatname": { + "type": "String" + } + } + }, + "cantOpenUri": "نمی‌توان پیوند {uri} را باز کرد", + "@cantOpenUri": { + "type": "String", + "placeholders": { + "uri": { + "type": "String" + } + } + }, + "banned": "محروم‌شده", + "@banned": { + "type": "String", + "placeholders": {} + }, + "bannedUser": "{username} کاربر {targetName} را محروم کرد", + "@bannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "blockDevice": "مسدود کردن دستگاه", + "@blockDevice": { + "type": "String", + "placeholders": {} + }, + "blocked": "مسدود‌شده", + "@blocked": { + "type": "String", + "placeholders": {} + }, + "badServerLoginTypesException": "سرور از این نوع ورود پشتیبانی می‌کند:\n{serverVersions}\nاما برنامه تنها از این‌ها پشتیبانی می‌کند:\n{supportedVersions}", + "@badServerLoginTypesException": { + "type": "String", + "placeholders": { + "serverVersions": { + "type": "String" + }, + "supportedVersions": { + "type": "String" + } + } + }, + "changedTheChatAvatar": "{username} نماد چت را تغییر داد", + "@changedTheChatAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRules": "{username} قوانین دسترسی مهمان را تغییر داد", + "@changedTheGuestAccessRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheProfileAvatar": "{username} نماد نمایه را تغییر داد", + "@changedTheProfileAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "chats": "چت ها", + "@chats": { + "type": "String", + "placeholders": {} + }, + "messages": "پیام‌ها", + "@messages": { + "type": "String", + "placeholders": {} + }, + "send": "فرستادن", + "@send": { + "type": "String", + "placeholders": {} + }, + "sendAudio": "فرستادن صدا", + "@sendAudio": { + "type": "String", + "placeholders": {} + }, + "changedTheRoomAliases": "{username} نام‌های مستعار اتاق را تغییر داد", + "@changedTheRoomAliases": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomInvitationLink": "{username} پیوند دعوت را تغییر داد", + "@changedTheRoomInvitationLink": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "close": "بستن", + "@close": { + "type": "String", + "placeholders": {} + }, + "sendImage": "فرستادن تصویر", + "@sendImage": { + "type": "String", + "placeholders": {} + }, + "sendMessages": "فرستادن پیام‌ها", + "@sendMessages": { + "type": "String", + "placeholders": {} + }, + "changedTheHistoryVisibility": "{username} ویژگی دیدن تاریخچه را تغییر داد", + "@changedTheHistoryVisibility": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRulesTo": "{username} قوانین دسترسی مهمان را به {rules} تغییر داد", + "@changedTheGuestAccessRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheJoinRulesTo": "{username} قوانین پیوستن را به {joinRules} تغییر داد", + "@changedTheJoinRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "joinRules": { + "type": "String" + } + } + }, + "changedTheHistoryVisibilityTo": "{username} ویژگی دیدن تاریخچه را به {rules} تغییر داد", + "@changedTheHistoryVisibilityTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "chooseAStrongPassword": "یک گذرواژه قوی انتخاب کنید", + "@chooseAStrongPassword": { + "type": "String", + "placeholders": {} + }, + "yourChatBackupHasBeenSetUp": "پشتیبان چت شما تنظیم شد.", + "changeTheme": "تغییر پوسته", + "@changeTheme": { + "type": "String", + "placeholders": {} + }, + "changeTheNameOfTheGroup": "تغییر نام گروه", + "@changeTheNameOfTheGroup": { + "type": "String", + "placeholders": {} + }, + "changeYourAvatar": "تغییر نماد نمایه", + "@changeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "channelCorruptedDecryptError": "رمزنگاری مخدوش شده است", + "@channelCorruptedDecryptError": { + "type": "String", + "placeholders": {} + }, + "clearArchive": "پاک کردن بایگانی", + "commandHint_create": "ساختن یک چت گروهی خالی\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید", + "@commandHint_create": { + "type": "String", + "description": "Usage hint for the command /create" + }, + "commandHint_dm": "شروع یک چت مستقیم\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید", + "@commandHint_dm": { + "type": "String", + "description": "Usage hint for the command /dm" + }, + "sendVideo": "فرستادن ویدئو", + "@sendVideo": { + "type": "String", + "placeholders": {} + }, + "sender": "فرستنده", + "changedTheJoinRules": "{username} قوانین پیوستن را تغییر داد", + "@changedTheJoinRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "chatDetails": "جزئیات چت", + "@chatDetails": { + "type": "String", + "placeholders": {} + }, + "commandHint_markasdm": "علامت‌گذاری به‌عنوان اتاق پیام مستقیم با شناسه ماتریکس", + "commandHint_markasgroup": "علامت‌گذاری به‌عنوان گروه", + "commandHint_clearcache": "پاک کردن حافظه نهان", + "@commandHint_clearcache": { + "type": "String", + "description": "Usage hint for the command /clearcache" + }, + "commandHint_discardsession": "رد کردن نشست", + "@commandHint_discardsession": { + "type": "String", + "description": "Usage hint for the command /discardsession" + }, + "groups": "گروه‌ها", + "@groups": { + "type": "String", + "placeholders": {} + }, + "openAppToReadMessages": "برای خواندن پیام‌ها، برنامه را باز کنید", + "@openAppToReadMessages": { + "type": "String", + "placeholders": {} + }, + "sendAMessage": "فرستادن پیام", + "@sendAMessage": { + "type": "String", + "placeholders": {} + }, + "sentCallInformations": "{senderName} اطلاعات تماس را فرستاد", + "@sentCallInformations": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "sendAsText": "فرستادن به‌عنوان متن", + "@sendAsText": { + "type": "String" + }, + "sendFile": "فرستادن پرونده", + "@sendFile": { + "type": "String", + "placeholders": {} + }, + "startedACall": "{senderName} تماس را آغاز کرد", + "@startedACall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "tryToSendAgain": "تلاش دوباره برای فرستادن", + "@tryToSendAgain": { + "type": "String", + "placeholders": {} + }, + "reactedWith": "{sender} با {reaction} واکنش نشان داد", + "@reactedWith": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "reaction": { + "type": "String" + } + } + }, + "askSSSSSign": "لطفاً عبارت عبور یا کلید بازیابی حافظه امن را وارد کنید تا شخص دیگری را امضا کنید.", + "@askSSSSSign": { + "type": "String", + "placeholders": {} + }, + "chat": "چت", + "@chat": { + "type": "String", + "placeholders": {} + }, + "chatBackup": "پشتیبان چت", + "@chatBackup": { + "type": "String", + "placeholders": {} + }, + "changePassword": "تغییر گذرواژه", + "@changePassword": { + "type": "String", + "placeholders": {} + }, + "changeTheHomeserver": "تغییر سرور خانگی", + "@changeTheHomeserver": { + "type": "String", + "placeholders": {} + }, + "sentAPicture": "🖼️ {username} یک تصویر فرستاد", + "@sentAPicture": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAVideo": "🎥 {username} یک ویدئو فرستاد", + "@sentAVideo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "commandInvalid": "دستور نامعتبر", + "@commandInvalid": { + "type": "String" + }, + "commandMissing": "{command} یک دستور نیست.", + "@commandMissing": { + "type": "String", + "placeholders": { + "command": { + "type": "String" + } + }, + "description": "State that {command} is not a valid /command." + }, + "contactHasBeenInvitedToTheGroup": "مخاطب به گروه دعوت شد", + "@contactHasBeenInvitedToTheGroup": { + "type": "String", + "placeholders": {} + }, + "sentAFile": "📁 {username} یک پرونده فرستاد", + "@sentAFile": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAnAudio": "🎤 {username} یک صدا فرستاد", + "@sentAnAudio": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "userSentUnknownEvent": "{username} یک رویداد {type} فرستاد", + "@userSentUnknownEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "type": { + "type": "String" + } + } + }, + "weSentYouAnEmail": "یک رایانامه برای شما فرستادیم", + "@weSentYouAnEmail": { + "type": "String", + "placeholders": {} + }, + "loadCountMoreParticipants": "بارگیری {count} شرکت‌کننده دیگر", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sentASticker": "😊 {username} یک برچسب فرستاد", + "@sentASticker": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "allSpaces": "همه فضاها", + "commandHint_ban": "محروم کردن کاربر مشخص‌شده از این اتاق", + "@commandHint_ban": { + "type": "String", + "description": "Usage hint for the command /ban" + }, + "commandHint_kick": "بیرون کردن کاربر مشخص‌شده از این اتاق", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "commandHint_plain": "فرستادن متن بدون قالب", + "@commandHint_plain": { + "type": "String", + "description": "Usage hint for the command /plain" + }, + "commandHint_unban": "رد محرومیت کاربر مشخص‌شده از این اتاق", + "@commandHint_unban": { + "type": "String", + "description": "Usage hint for the command /unban" + }, + "device": "دستگاه", + "@device": { + "type": "String", + "placeholders": {} + }, + "copy": "رونوشت", + "@copy": { + "type": "String", + "placeholders": {} + }, + "defaultPermissionLevel": "سطح دسترسی پیش‌فرض", + "@defaultPermissionLevel": { + "type": "String", + "placeholders": {} + }, + "delete": "پاک کردن", + "@delete": { + "type": "String", + "placeholders": {} + }, + "deleteAccount": "پاک کردن حساب", + "@deleteAccount": { + "type": "String", + "placeholders": {} + }, + "deleteMessage": "پاک کردن پیام", + "@deleteMessage": { + "type": "String", + "placeholders": {} + }, + "commandHint_html": "فرستادن متن با قالب HTML", + "@commandHint_html": { + "type": "String", + "description": "Usage hint for the command /html" + }, + "commandHint_join": "پیوستن به اتاق مشخص‌شده", + "@commandHint_join": { + "type": "String", + "description": "Usage hint for the command /join" + }, + "commandHint_leave": "ترک این اتاق", + "@commandHint_leave": { + "type": "String", + "description": "Usage hint for the command /leave" + }, + "commandHint_myroomnick": "تنظیم نام نمایشی برای این اتاق", + "@commandHint_myroomnick": { + "type": "String", + "description": "Usage hint for the command /myroomnick" + }, + "commandHint_myroomavatar": "تنظیم نماد نمایه برای این اتاق (با mxc-uri)", + "@commandHint_myroomavatar": { + "type": "String", + "description": "Usage hint for the command /myroomavatar" + }, + "commandHint_op": "تنظیم سطح دسترسی کاربر مشخص‌شده (پیش‌فرض: ۵۰)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "commandHint_react": "فرستادن پاسخ به‌عنوان واکنش", + "@commandHint_react": { + "type": "String", + "description": "Usage hint for the command /react" + }, + "compareEmojiMatch": "لطفاً شکلک‌ها را مقایسه کنید", + "@compareEmojiMatch": { + "type": "String", + "placeholders": {} + }, + "copyToClipboard": "رونوشت به بریده‌دان", + "@copyToClipboard": { + "type": "String", + "placeholders": {} + }, + "countParticipants": "{count} شرکت‌کننده", + "@countParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "create": "ساختن", + "@create": { + "type": "String", + "placeholders": {} + }, + "createNewSpace": "فضای جدید", + "@createNewSpace": { + "type": "String", + "placeholders": {} + }, + "deviceId": "شناسه دستگاه", + "@deviceId": { + "type": "String", + "placeholders": {} + }, + "devices": "دستگاه‌ها", + "@devices": { + "type": "String", + "placeholders": {} + }, + "displaynameHasBeenChanged": "نام نمایشی تغییر کرد", + "@displaynameHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "downloadFile": "بارگیری پرونده", + "@downloadFile": { + "type": "String", + "placeholders": {} + }, + "edit": "ویرایش", + "@edit": { + "type": "String", + "placeholders": {} + }, + "editBlockedServers": "ویرایش سرورهای مسدود", + "@editBlockedServers": { + "type": "String", + "placeholders": {} + }, + "editRoomAliases": "ویرایش نام‌های مستعار اتاق", + "@editRoomAliases": { + "type": "String", + "placeholders": {} + }, + "editRoomAvatar": "ویرایش نماد اتاق", + "@editRoomAvatar": { + "type": "String", + "placeholders": {} + }, + "emoteExists": "شکلک از پیش وجود دارد!", + "@emoteExists": { + "type": "String", + "placeholders": {} + }, + "emoteInvalid": "کد کوتاه شکلک نامعتبر است!", + "@emoteInvalid": { + "type": "String", + "placeholders": {} + }, + "emptyChat": "چت خالی", + "@emptyChat": { + "type": "String", + "placeholders": {} + }, + "copiedToClipboard": "به بریده‌دان رونوشت شد", + "@copiedToClipboard": { + "type": "String", + "placeholders": {} + }, + "createdTheChat": "💬 {username} چت را ساخت", + "@createdTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "darkTheme": "تیره", + "@darkTheme": { + "type": "String", + "placeholders": {} + }, + "directChats": "چت های مستقیم", + "@directChats": { + "type": "String", + "placeholders": {} + }, + "emotePacks": "بسته‌های شکلک برای اتاق", + "@emotePacks": { + "type": "String", + "placeholders": {} + }, + "emoteSettings": "تنظیمات شکلک", + "@emoteSettings": { + "type": "String", + "placeholders": {} + }, + "emoteShortcode": "کد کوتاه شکلک", + "@emoteShortcode": { + "type": "String", + "placeholders": {} + }, + "commandHint_me": "توصیف خود", + "@commandHint_me": { + "type": "String", + "description": "Usage hint for the command /me" + }, + "commandHint_send": "فرستادن متن", + "@commandHint_send": { + "type": "String", + "description": "Usage hint for the command /send" + }, + "couldNotDecryptMessage": "نمی‌توان پیام را رمزگشایی کرد: {error}", + "@couldNotDecryptMessage": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "chatBackupDescription": "پیام‌های شما با کلید بازیابی محافظت می‌شوند. حتماً آن را نزد خود نگه دارید.", + "@chatBackupDescription": { + "type": "String", + "placeholders": {} + }, + "deactivateAccountWarning": "این کار حساب شما را غیرفعال می‌کند. این کنش برگشت‌ناپذیر است! آیا مطمئن هستید؟", + "@deactivateAccountWarning": { + "type": "String", + "placeholders": {} + }, + "commandHint_invite": "دعوت از کاربر مشخص‌شده به این اتاق", + "@commandHint_invite": { + "type": "String", + "description": "Usage hint for the command /invite" + }, + "compareNumbersMatch": "لطفاً اعداد را مقایسه کنید", + "@compareNumbersMatch": { + "type": "String", + "placeholders": {} + }, + "configureChat": "تنظیمات چت", + "@configureChat": { + "type": "String", + "placeholders": {} + }, + "currentlyActive": "اکنون فعال", + "@currentlyActive": { + "type": "String", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}، {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "String", + "placeholders": { + "date": { + "type": "String" + }, + "timeOfDay": { + "type": "String" + } + } + }, + "editDisplayname": "ویرایش نام نمایشی", + "@editDisplayname": { + "type": "String", + "placeholders": {} + }, + "id": "شناسه", + "@id": { + "type": "String", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} دعوت {targetName} را پس گرفت", + "@hasWithdrawnTheInvitationFor": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "guestsAreForbidden": "مهمان‌ها ممنوع هستند", + "@guestsAreForbidden": { + "type": "String", + "placeholders": {} + }, + "hideRedactedEvents": "پنهان کردن رویدادهای ویرایش‌شده", + "@hideRedactedEvents": { + "type": "String", + "placeholders": {} + }, + "hideUnknownEvents": "پنهان کردن رویدادهای ناشناخته", + "@hideUnknownEvents": { + "type": "String", + "placeholders": {} + }, + "contentHasBeenReported": "محتوا به مدیران سرور گزارش شد", + "@contentHasBeenReported": { + "type": "String", + "placeholders": {} + }, + "fromJoining": "از پیوستن", + "@fromJoining": { + "type": "String", + "placeholders": {} + }, + "fromTheInvitation": "از دعوت", + "@fromTheInvitation": { + "type": "String", + "placeholders": {} + }, + "group": "گروه", + "@group": { + "type": "String", + "placeholders": {} + }, + "groupIsPublic": "گروه عمومی است", + "@groupIsPublic": { + "type": "String", + "placeholders": {} + }, + "groupWith": "گروه با {displayname}", + "@groupWith": { + "type": "String", + "placeholders": { + "displayname": { + "type": "String" + } + } + }, + "howOffensiveIsThisContent": "این محتوا چقدر توهین‌آمیز است؟", + "@howOffensiveIsThisContent": { + "type": "String", + "placeholders": {} + }, + "enableEmotesGlobally": "فعال کردن بسته شکلک به‌صورت سراسری", + "@enableEmotesGlobally": { + "type": "String", + "placeholders": {} + }, + "enableEncryption": "فعال کردن رمزنگاری", + "@enableEncryption": { + "type": "String", + "placeholders": {} + }, + "enableEncryptionWarning": "نمی‌توانید رمزنگاری را غیرفعال کنید. آیا مطمئن هستید؟", + "@enableEncryptionWarning": { + "type": "String", + "placeholders": {} + }, + "encrypted": "رمزنگاری‌شده", + "@encrypted": { + "type": "String", + "placeholders": {} + }, + "encryption": "رمزنگاری", + "@encryption": { + "type": "String", + "placeholders": {} + }, + "encryptionNotEnabled": "رمزنگاری فعال نیست", + "@encryptionNotEnabled": { + "type": "String", + "placeholders": {} + }, + "enterAnEmailAddress": "یک نشانی رایانامه وارد کنید", + "@enterAnEmailAddress": { + "type": "String", + "placeholders": {} + }, + "endedTheCall": "{senderName} به تماس پایان داد", + "@endedTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "homeserver": "سرور خانگی", + "errorObtainingLocation": "خطا در به‌دست آوردن مکان: {error}", + "@errorObtainingLocation": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "everythingReady": "همه‌چیز آماده است!", + "@everythingReady": { + "type": "String", + "placeholders": {} + }, + "extremeOffensive": "بسیار توهین‌آمیز", + "@extremeOffensive": { + "type": "String", + "placeholders": {} + }, + "fileName": "نام پرونده", + "@fileName": { + "type": "String", + "placeholders": {} + }, + "fluffychat": "فلافی‌چت", + "@fluffychat": { + "type": "String", + "placeholders": {} + }, + "fontSize": "اندازه قلم", + "@fontSize": { + "type": "String", + "placeholders": {} + }, + "forward": "هدایت", + "@forward": { + "type": "String", + "placeholders": {} + }, + "help": "کمک", + "@help": { + "type": "String", + "placeholders": {} + }, + "guestsCanJoin": "مهمان‌ها می‌توانند بپیوندند", + "@guestsCanJoin": { + "type": "String", + "placeholders": {} + }, + "ignoredUsers": "کاربران نادیده‌گرفته شده", + "@ignoredUsers": { + "type": "String", + "placeholders": {} + }, + "commandHint_googly": "فرستادن چند چشم گوگولی", + "googlyEyesContent": "{senderName} برای شما چشم‌های گوگولی می‌فرستد", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "ignore": "نادیده‌گرفتن", + "@ignore": { + "type": "String", + "placeholders": {} + }, + "cuddleContent": "{senderName} شما را در آغوش می‌گیرد", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "hugContent": "{senderName} شما را بغل می‌کند", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "commandHint_cuddle": "فرستادن آغوش", + "commandHint_hug": "فرستادن بغل", + "editBundlesForAccount": "ویرایش بسته‌های این حساب", + "logout": "خروج", + "@logout": { + "type": "String", + "placeholders": {} + }, + "mention": "نام‌بردن", + "@mention": { + "type": "String", + "placeholders": {} + }, + "muteChat": "بی‌صدا کردن چت", + "@muteChat": { + "type": "String", + "placeholders": {} + }, + "newChat": "چت جدید", + "@newChat": { + "type": "String", + "placeholders": {} + }, + "newMessageInFluffyChat": "💬 پیام جدید در فلافی‌چت", + "@newMessageInFluffyChat": { + "type": "String", + "placeholders": {} + }, + "noConnectionToTheServer": "بدون اتصال به سرور", + "@noConnectionToTheServer": { + "type": "String", + "placeholders": {} + }, + "no": "خیر", + "@no": { + "type": "String", + "placeholders": {} + }, + "noPasswordRecoveryDescription": "هنوز روشی برای بازیابی گذرواژه خود اضافه نکرده‌اید.", + "@noPasswordRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "or": "یا", + "@or": { + "type": "String", + "placeholders": {} + }, + "participant": "شرکت‌کننده", + "@participant": { + "type": "String", + "placeholders": {} + }, + "passphraseOrKey": "عبارت عبور یا کلید بازیابی", + "@passphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "password": "گذرواژه", + "@password": { + "type": "String", + "placeholders": {} + }, + "passwordHasBeenChanged": "گذرواژه تغییر کرد", + "@passwordHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "passwordRecovery": "بازیابی گذرواژه", + "@passwordRecovery": { + "type": "String", + "placeholders": {} + }, + "pin": "سنجاق کردن", + "@pin": { + "type": "String", + "placeholders": {} + }, + "play": "پخش {fileName}", + "@play": { + "type": "String", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pleaseEnter4Digits": "لطفاً ۴ رقم وارد کنید یا خالی بگذارید تا قفل برنامه غیرفعال شود.", + "@pleaseEnter4Digits": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPin": "لطفاً رمز کوتاه خود را وارد کنید", + "@pleaseEnterYourPin": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPassword": "لطفاً گذرواژه خود را وارد کنید", + "@pleaseEnterYourPassword": { + "type": "String", + "placeholders": {} + }, + "pleaseFollowInstructionsOnWeb": "لطفاً دستورالعمل‌های وبگاه را دنبال کنید و روی بعدی بزنید.", + "@pleaseFollowInstructionsOnWeb": { + "type": "String", + "placeholders": {} + }, + "publicRooms": "اتاق‌های عمومی", + "@publicRooms": { + "type": "String", + "placeholders": {} + }, + "obtainingLocation": "در حال به‌دست آوردن مکان…", + "@obtainingLocation": { + "type": "String", + "placeholders": {} + }, + "oopsSomethingWentWrong": "اوه، مشکلی پیش آمد…", + "@oopsSomethingWentWrong": { + "type": "String", + "placeholders": {} + }, + "addToBundle": "افزودن به بسته", + "passwordForgotten": "فراموشی گذرواژه", + "@passwordForgotten": { + "type": "String", + "placeholders": {} + }, + "link": "پیوند", + "iHaveClickedOnLink": "روی پیوند کلیک کردم", + "@iHaveClickedOnLink": { + "type": "String", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "عبارت عبور یا کلید بازیابی نادرست است", + "@incorrectPassphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "inoffensive": "بی‌ضرر", + "@inoffensive": { + "type": "String", + "placeholders": {} + }, + "inviteContactToGroup": "دعوت مخاطب به {groupName}", + "@inviteContactToGroup": { + "type": "String", + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "invitedUsersOnly": "فقط کاربران دعوت‌شده", + "@invitedUsersOnly": { + "type": "String", + "placeholders": {} + }, + "isTyping": "در حال نوشتن…", + "@isTyping": { + "type": "String", + "placeholders": {} + }, + "joinRoom": "پیوستن به اتاق", + "@joinRoom": { + "type": "String", + "placeholders": {} + }, + "kicked": "👞 {username} کاربر {targetName} را بیرون کرد", + "@kicked": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickFromChat": "بیرون کردن از چت", + "@kickFromChat": { + "type": "String", + "placeholders": {} + }, + "leftTheChat": "چت را ترک کرد", + "@leftTheChat": { + "type": "String", + "placeholders": {} + }, + "dehydrate": "صدور نشست و پاک کردن دستگاه", + "loadingPleaseWait": "در حال بارگذاری… لطفاً صبر کنید.", + "@loadingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "loadMore": "بارگذاری بیشتر…", + "@loadMore": { + "type": "String", + "placeholders": {} + }, + "locationPermissionDeniedNotice": "دسترسی به مکان رد شد. برای هم‌رسانی مکان، لطفاً دسترسی بدهید.", + "@locationPermissionDeniedNotice": { + "type": "String", + "placeholders": {} + }, + "logInTo": "ورود به {homeserver}", + "@logInTo": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "moderator": "ناظر", + "@moderator": { + "type": "String", + "placeholders": {} + }, + "newVerificationRequest": "درخواست بازبینی جدید!", + "@newVerificationRequest": { + "type": "String", + "placeholders": {} + }, + "noPermission": "بدون دسترسی", + "@noPermission": { + "type": "String", + "placeholders": {} + }, + "noRoomsFound": "اتاقی پیدا نشد…", + "@noRoomsFound": { + "type": "String", + "placeholders": {} + }, + "offline": "آفلاین", + "@offline": { + "type": "String", + "placeholders": {} + }, + "online": "آنلاین", + "@online": { + "type": "String", + "placeholders": {} + }, + "oopsPushError": "اوه! خطایی در تنظیم آگاه‌سازها رخ داد.", + "@oopsPushError": { + "type": "String", + "placeholders": {} + }, + "openCamera": "باز کردن دوربین", + "@openCamera": { + "type": "String", + "placeholders": {} + }, + "addAccount": "افزودن حساب", + "pickImage": "انتخاب تصویر", + "@pickImage": { + "type": "String", + "placeholders": {} + }, + "pleaseChooseAPasscode": "لطفاً یک رمز کوتاه انتخاب کنید", + "@pleaseChooseAPasscode": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourUsername": "لطفاً نام کاربری خود را وارد کنید", + "@pleaseEnterYourUsername": { + "type": "String", + "placeholders": {} + }, + "privacy": "حریم خصوصی", + "@privacy": { + "type": "String", + "placeholders": {} + }, + "numUsersTyping": "{count} کاربر در حال نوشتن…", + "@numUsersTyping": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "invited": "دعوت‌شده", + "@invited": { + "type": "String", + "placeholders": {} + }, + "invitedUser": "📩 {username} از {targetName} دعوت کرد", + "@invitedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "joinedTheChat": "👋 {username} به چت پیوست", + "@joinedTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "kickedAndBanned": "🙅 {username} کاربر {targetName} را بیرون و محروم کرد", + "@kickedAndBanned": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "dehydrateWarning": "این کنش برگشت‌ناپذیر است. مطمئن شوید پرونده پشتیبان را به‌صورت امن ذخیره می‌کنید.", + "locationDisabledNotice": "مکان‌یاب غیرفعال است. لطفاً آن را فعال کنید تا بتوانید مکان خود را هم‌رسانی کنید.", + "@locationDisabledNotice": { + "type": "String", + "placeholders": {} + }, + "needPantalaimonWarning": "لطفاً توجه کنید که برای رمزنگاری سرتاسر به Pantalaimon نیاز دارید.", + "@needPantalaimonWarning": { + "type": "String", + "placeholders": {} + }, + "next": "بعدی", + "@next": { + "type": "String", + "placeholders": {} + }, + "noEmotesFound": "شکلکی پیدا نشد. 😕", + "@noEmotesFound": { + "type": "String", + "placeholders": {} + }, + "noGoogleServicesWarning": "به نظر می‌رسد دستگاه شما سرویس‌های گوگل ندارد. این انتخاب خوبی برای حریم خصوصی است! برای دریافت آگاه‌سازها در فلافی‌چت، پیشنهاد می‌کنیم از https://ntfy.sh استفاده کنید. با ntfy یا یک فراهم‌کننده UnifiedPush می‌توانید آگاه‌سازهای امن دریافت کنید. می‌توانید ntfy را از Play Store یا F-Droid بارگیری کنید.", + "@noGoogleServicesWarning": { + "type": "String", + "placeholders": {} + }, + "noEncryptionForPublicRooms": "رمزنگاری را تنها زمانی می‌توانید فعال کنید که اتاق عمومی نباشد.", + "@noEncryptionForPublicRooms": { + "type": "String", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "پشتیبان‌گیری آنلاین کلید فعال است", + "@onlineKeyBackupEnabled": { + "type": "String", + "placeholders": {} + }, + "enableMultiAccounts": "(آزمایشی) فعال کردن چند حساب در این دستگاه", + "pleaseClickOnLink": "لطفاً روی پیوند در رایانامه کلیک کنید و ادامه دهید.", + "@pleaseClickOnLink": { + "type": "String", + "placeholders": {} + }, + "hydrate": "بازیابی از پرونده پشتیبان", + "inviteContact": "دعوت از مخاطب", + "@inviteContact": { + "type": "String", + "placeholders": {} + }, + "noMatrixServer": "{server1} سرور ماتریکس نیست، از {server2} استفاده شود؟", + "@noMatrixServer": { + "type": "String", + "placeholders": { + "server1": { + "type": "String" + }, + "server2": { + "type": "String" + } + } + }, + "oneClientLoggedOut": "یکی از برنامه‌های شما از سیستم خارج شد", + "removeFromBundle": "برداشتن از بسته", + "bundleName": "نام بسته", + "openInMaps": "باز کردن در نقشه", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "serverRequiresEmail": "برای ثبت‌نام، این سرور باید نشانی رایانامه شما را تأیید کند.", + "inviteText": "{username} شما را به فلافی‌چت دعوت کرد.\n۱. به fluffychat.im بروید و برنامه را نصب کنید\n۲. ثبت‌نام کنید یا وارد شوید\n۳. پیوند دعوت را باز کنید:\n {link}", + "@inviteText": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "link": { + "type": "String" + } + } + }, + "leave": "ترک کردن", + "@leave": { + "type": "String", + "placeholders": {} + }, + "none": "هیچ", + "@none": { + "type": "String", + "placeholders": {} + }, + "offensive": "توهین‌آمیز", + "@offensive": { + "type": "String", + "placeholders": {} + }, + "scanQrCode": "پویش کد QR", + "lastActiveAgo": "آخرین فعالیت: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "String", + "placeholders": { + "localizedTimeShort": { + "type": "String" + } + } + }, + "lightTheme": "روشن", + "@lightTheme": { + "type": "String", + "placeholders": {} + }, + "login": "ورود", + "@login": { + "type": "String", + "placeholders": {} + }, + "notifications": "آگاه‌سازها", + "@notifications": { + "type": "String", + "placeholders": {} + }, + "ok": "خوب", + "@ok": { + "type": "String", + "placeholders": {} + }, + "roomHasBeenUpgraded": "اتاق ارتقا یافت", + "@roomHasBeenUpgraded": { + "type": "String", + "placeholders": {} + }, + "register": "ثبت‌نام", + "@register": { + "type": "String", + "placeholders": {} + }, + "reject": "رد کردن", + "@reject": { + "type": "String", + "placeholders": {} + }, + "rejectedTheInvitation": "{username} دعوت را رد کرد", + "@rejectedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "unbanFromChat": "لغو محرومیت از چت", + "@unbanFromChat": { + "type": "String", + "placeholders": {} + }, + "reply": "پاسخ", + "@reply": { + "type": "String", + "placeholders": {} + }, + "requestPermission": "درخواست دسترسی", + "@requestPermission": { + "type": "String", + "placeholders": {} + }, + "roomVersion": "نگارش اتاق", + "@roomVersion": { + "type": "String", + "placeholders": {} + }, + "search": "جستجو", + "@search": { + "type": "String", + "placeholders": {} + }, + "security": "امنیت", + "@security": { + "type": "String", + "placeholders": {} + }, + "setAsCanonicalAlias": "تنظیم به‌عنوان نام مستعار اصلی", + "@setAsCanonicalAlias": { + "type": "String", + "placeholders": {} + }, + "removeYourAvatar": "برداشتن نماد نمایه", + "@removeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "recording": "در حال ضبط", + "@recording": { + "type": "String", + "placeholders": {} + }, + "redactedAnEvent": "{username} یک رویداد را ویرایش کرد", + "@redactedAnEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "remove": "برداشتن", + "@remove": { + "type": "String", + "placeholders": {} + }, + "removeAllOtherDevices": "پاک کردن همه دستگاه‌های دیگر", + "@removeAllOtherDevices": { + "type": "String", + "placeholders": {} + }, + "removedBy": "پاک‌شده توسط {username}", + "@removedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "reportMessage": "گزارش پیام", + "@reportMessage": { + "type": "String", + "placeholders": {} + }, + "saveFile": "ذخیره پرونده", + "@saveFile": { + "type": "String", + "placeholders": {} + }, + "recoveryKey": "کلید بازیابی", + "pushRules": "قوانین آگاه‌ساز", + "@pushRules": { + "type": "String", + "placeholders": {} + }, + "reason": "دلیل", + "@reason": { + "type": "String", + "placeholders": {} + }, + "redactMessage": "ویرایش پیام", + "@redactMessage": { + "type": "String", + "placeholders": {} + }, + "replaceRoomWithNewerVersion": "جایگزینی اتاق با نگارش جدیدتر", + "@replaceRoomWithNewerVersion": { + "type": "String", + "placeholders": {} + }, + "recoveryKeyLost": "کلید بازیابی گم شد؟", + "fileHasBeenSavedAt": "پرونده در {path} ذخیره شد", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "wasDirectChatDisplayName": "چت خالی (قبلا {oldDisplayName} بود)", + "@wasDirectChatDisplayName": { + "type": "String", + "placeholders": { + "oldDisplayName": { + "type": "String" + } + } + }, + "newSpaceDescription": "فضاها امکان یکپارچه‌سازی چت ها و ساخت جوامع خصوصی یا عمومی را فراهم می‌کنند.", + "encryptThisChat": "رمزنگاری این چت", + "sorryThatsNotPossible": "متأسفیم... این ممکن نیست", + "deviceKeys": "کلیدهای دستگاه:", + "fileIsTooBigForServer": "نمیتوان فرستاد! سرور تنها از پیوست های تا {max} پشتیبانی میکند.", + "jumpToLastReadMessage": "پرش به آخرین پیام خوانده‌شده", + "doNotShowAgain": "دوباره نمایش نده", + "readUpToHere": "خوانده‌شده تا اینجا", + "noBackupWarning": "هشدار! بدون فعال کردن پشتیبان چت، دسترسی به پیام‌های رمزنگاری‌شده خود را از دست خواهید داد. پیشنهاد می‌شود پیش از خروج، پشتیبان چت را فعال کنید.", + "noOtherDevicesFound": "دستگاه دیگری پیدا نشد", + "countFiles": "{count} پرونده", + "@countFiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noKeyForThisMessage": "اگر پیام پیش از ورود به حساب در این دستگاه فرستاده شده باشد، این مشکل ممکن است رخ دهد.\n\nهمچنین ممکن است فرستنده دستگاه شما را مسدود کرده باشد یا مشکلی در اتصال اینترنت وجود داشته باشد.\n\nآیا می‌توانید پیام را در نشست دیگری بخوانید؟ در این صورت، می‌توانید آن را منتقل کنید! به تنظیمات > دستگاه‌ها بروید و مطمئن شوید دستگاه‌هایتان یکدیگر را بازبینی کرده‌اند. هنگام باز کردن دوباره اتاق و فعال بودن هر دو نشست، کلیدها به‌صورت خودکار منتقل می‌شوند.\n\nآیا نمی‌خواهید هنگام خروج یا تغییر دستگاه کلیدها را گم کنید؟ مطمئن شوید پشتیبان چت را در تنظیمات فعال کرده‌اید.", + "disableEncryptionWarning": "به دلایل امنیتی نمی‌توانید رمزنگاری را در چتی که فعال شده غیرفعال کنید.", + "newGroup": "گروه جدید", + "foregroundServiceRunning": "این آگاه‌ساز زمانی ظاهر می‌شود که خدمت پیش‌زمینه فعال است.", + "storeSecurlyOnThisDevice": "ذخیره امن در این دستگاه", + "screenSharingDetail": "شما در حال هم‌رسانی صفحه‌نمایش خود در فلافی‌چت هستید", + "newSpace": "فضای جدید", + "saveKeyManuallyDescription": "این کلید را با استفاده از هم‌رسانی یا بریده‌دان به‌طور دستی ذخیره کنید.", + "storeInAndroidKeystore": "ذخیره در Android KeyStore", + "storeInAppleKeyChain": "ذخیره در Apple KeyChain", + "user": "کاربر", + "custom": "سفارشی", + "screenSharingTitle": "هم‌رسانی صفحه‌نمایش", + "whyIsThisMessageEncrypted": "چرا این پیام خوانا نیست؟", + "reopenChat": "باز کردن دوباره چت", + "unmuteChat": "فعال کردن صدای چت", + "@unmuteChat": { + "type": "String", + "placeholders": {} + }, + "unlockOldMessages": "گشودن پیام‌های قدیمی", + "share": "هم‌رسانی", + "@share": { + "type": "String", + "placeholders": {} + }, + "skip": "رد کردن", + "@skip": { + "type": "String", + "placeholders": {} + }, + "systemTheme": "سامانه", + "@systemTheme": { + "type": "String", + "placeholders": {} + }, + "theyDontMatch": "هم‌خوانی ندارند", + "@theyDontMatch": { + "type": "String", + "placeholders": {} + }, + "unavailable": "در دسترس نیست", + "@unavailable": { + "type": "String", + "placeholders": {} + }, + "unblockDevice": "باز کردن دستگاه", + "@unblockDevice": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "آغاز بازبینی", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "بازبینی با موفقیت انجام شد!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerEmoji": "در انتظار پذیرش شکلک توسط دیگری…", + "@waitingPartnerEmoji": { + "type": "String", + "placeholders": {} + }, + "whoCanPerformWhichAction": "چه کسی می‌تواند چه کاری انجام دهد", + "@whoCanPerformWhichAction": { + "type": "String", + "placeholders": {} + }, + "writeAMessage": "نوشتن پیام…", + "@writeAMessage": { + "type": "String", + "placeholders": {} + }, + "youHaveBeenBannedFromThisChat": "شما از این چت محروم شده‌اید", + "@youHaveBeenBannedFromThisChat": { + "type": "String", + "placeholders": {} + }, + "setStatus": "تنظیم وضعیت", + "@setStatus": { + "type": "String", + "placeholders": {} + }, + "settings": "تنظیمات", + "@settings": { + "type": "String", + "placeholders": {} + }, + "showPassword": "نمایش گذرواژه", + "@showPassword": { + "type": "String", + "placeholders": {} + }, + "spaceName": "نام فضا", + "@spaceName": { + "type": "String", + "placeholders": {} + }, + "theyMatch": "هم‌خوانی دارند", + "@theyMatch": { + "type": "String", + "placeholders": {} + }, + "title": "فلافی‌چت", + "@title": { + "description": "Title for the application", + "type": "String", + "placeholders": {} + }, + "tooManyRequestsWarning": "درخواست‌های بیش از حد. لطفاً بعداً دوباره تلاش کنید!", + "@tooManyRequestsWarning": { + "type": "String", + "placeholders": {} + }, + "unbannedUser": "{username} محرومیت {targetName} را برداشت", + "@unbannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "unknownEncryptionAlgorithm": "الگوریتم رمزنگاری ناشناخته", + "@unknownEncryptionAlgorithm": { + "type": "String", + "placeholders": {} + }, + "unpin": "برداشتن سنجاق", + "@unpin": { + "type": "String", + "placeholders": {} + }, + "userAndUserAreTyping": "{username} و {username2} در حال نوشتن…", + "@userAndUserAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "username2": { + "type": "String" + } + } + }, + "videoCall": "تماس تصویری", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "قابل‌دید برای همه شرکت‌کنندگان", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "visibleForEveryone": "قابل‌دید برای همه", + "@visibleForEveryone": { + "type": "String", + "placeholders": {} + }, + "voiceMessage": "پیام صوتی", + "@voiceMessage": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "در انتظار پذیرش درخواست توسط دیگری…", + "@waitingPartnerAcceptRequest": { + "type": "String", + "placeholders": {} + }, + "warning": "هشدار!", + "@warning": { + "type": "String", + "placeholders": {} + }, + "youAreNoLongerParticipatingInThisChat": "شما دیگر در این چت شرکت نمی‌کنید", + "@youAreNoLongerParticipatingInThisChat": { + "type": "String", + "placeholders": {} + }, + "messageInfo": "اطلاعات پیام", + "time": "زمان", + "messageType": "نوع پیام", + "start": "آغاز", + "userIsTyping": "{username} در حال نوشتن…", + "@userIsTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "username": "نام کاربری", + "@username": { + "type": "String", + "placeholders": {} + }, + "yes": "بله", + "@yes": { + "type": "String", + "placeholders": {} + }, + "yourPublicKey": "کلید عمومی شما", + "@yourPublicKey": { + "type": "String", + "placeholders": {} + }, + "shareLocation": "هم‌رسانی مکان", + "@shareLocation": { + "type": "String", + "placeholders": {} + }, + "youInvitedUser": "📩 شما {user} را دعوت کردید", + "@youInvitedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "unverified": "تأییدنشده", + "verify": "بازبینی", + "@verify": { + "type": "String", + "placeholders": {} + }, + "openChat": "باز کردن چت", + "dismiss": "رد کردن", + "unsupportedAndroidVersion": "نسخه اندروید پشتیبانی‌نشده", + "youUnbannedUser": "شما محرومیت {user} را برداشتید", + "@youUnbannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "verified": "تاییدشده", + "@verified": { + "type": "String", + "placeholders": {} + }, + "whyDoYouWantToReportThis": "چرا می‌خواهید گزارش دهید؟", + "@whyDoYouWantToReportThis": { + "type": "String", + "placeholders": {} + }, + "you": "شما", + "@you": { + "type": "String", + "placeholders": {} + }, + "sourceCode": "کد منبع", + "@sourceCode": { + "type": "String", + "placeholders": {} + }, + "spaceIsPublic": "فضا عمومی است", + "@spaceIsPublic": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWait": "در حال همگام‌سازی... لطفا صبر کنید.", + "@synchronizingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "unknownEvent": "رویداد ناشناخته '{type}'", + "@unknownEvent": { + "type": "String", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "userAndOthersAreTyping": "{username} و {count} نفر دیگر در حال تایپ کردن…", + "@userAndOthersAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "userLeftTheChat": "👋 {username} چت را ترک کرد", + "@userLeftTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "verifyTitle": "در حال تایید حساب دیگر", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "visibilityOfTheChatHistory": "قابلیت دیدن تاریخچه چت", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "whoIsAllowedToJoinThisGroup": "چه کسی اجازه پیوستن به این گروه را دارد", + "@whoIsAllowedToJoinThisGroup": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerNumbers": "در انتظار پذیرش اعداد توسط دیگری…", + "@waitingPartnerNumbers": { + "type": "String", + "placeholders": {} + }, + "wipeChatBackup": "برای ایجاد کلید بازیابی جدید، پشتیبان چت خود را پاک می‌کنید؟", + "@wipeChatBackup": { + "type": "String", + "placeholders": {} + }, + "withTheseAddressesRecoveryDescription": "با این آدرس‌ها می‌توانید رمز خود را بازیابی کنید.", + "@withTheseAddressesRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "openGallery": "بازکردن گالری", + "removeFromSpace": "حذف از فضا", + "pleaseEnterRecoveryKeyDescription": "برای گشودن قفل پیام‌های قدیمیتان، لطفا کلید بازیابی‌ای که در یک نشست پیشین تولید شده را وارد کنید. کلید بازیابی شما، رمز عبور شما نیست.", + "confirmEventUnpin": "آیا از برداشتن سنجاق رویداد به صورت دائمی مطمئن هستید؟", + "youKickedAndBanned": "🙅 شما {user} را بیرون و محروم کردید", + "@youKickedAndBanned": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "statusExampleMessage": "امروز حالتان چطور است؟", + "@statusExampleMessage": { + "type": "String", + "placeholders": {} + }, + "submit": "ارسال", + "@submit": { + "type": "String", + "placeholders": {} + }, + "youRejectedTheInvitation": "شما دعوت را رد کردید", + "youAcceptedTheInvitation": "👍 شما دعوت را پذیرفتید", + "transferFromAnotherDevice": "انتقال از دستگاهی دیگر", + "@transferFromAnotherDevice": { + "type": "String", + "placeholders": {} + }, + "videoCallsBetaWarning": "لطفا توجه داشته باشید که تماس‌های تصویری در حال حاضر آزمایشی هستند. ممکن است طبق انتظار کار نکنند یا روی همه پلتفرم‌ها اصلا کار نکنند.", + "experimentalVideoCalls": "تماس‌های تصویری آزمایشی", + "placeCall": "برقراری تماس", + "unsupportedAndroidVersionLong": "این ویژگی به نسخه تازه‌تری از اندروید نیاز دارد. لطفا به‌روزرسانی یا پشتیبانی لینیج‌اواس(LineageOS) را بررسی کنید.", + "sharedTheLocation": "{username} وضعیت مکانی خود را به اشتراک گذاشت", + "@sharedTheLocation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "status": "وضعیت", + "@status": { + "type": "String", + "placeholders": {} + }, + "unknownDevice": "دستگاه ناشناس", + "@unknownDevice": { + "type": "String", + "placeholders": {} + }, + "markAsRead": "علامت‌گذاشتن به عنوان خوانده شده", + "reportUser": "گزارش دادن کاربر", + "pinMessage": "سنجاق کردن به اتاق", + "emojis": "شکلک‌ها", + "voiceCall": "تماس صوتی", + "youJoinedTheChat": "شما به چت پیوستید", + "youBannedUser": "شما {user} را محروم کردید", + "@youBannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youHaveWithdrawnTheInvitationFor": "شما دعوت {user} را پس‌گرفتید", + "@youHaveWithdrawnTheInvitationFor": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedBy": "📩 شما توسط {user} دعوت شده‌اید", + "@youInvitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKicked": "👞 شما {user} را بیرون کردید", + "@youKicked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "users": "کاربرها", + "storeInSecureStorageDescription": "کلید بازیابی را در محل ذخیره‌سازی امن این دستگاه ذخیره کنید.", + "jump": "پرش", + "report": "گزارش", + "openLinkInBrowser": "بازکردن پیوند در مرورگر", + "reportErrorDescription": "اوه نه. اشتباهی رخ داد. اگر تمایل دارید، می‌توانید این اشکال را با توسعه‌دهندگان گزارش دهید.", + "notAnImage": "یک فایل تصویری نیست.", + "alwaysUse24HourFormat": "false", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." + }, + "ignoreUser": "چشم‌پوشی از کاربر", + "importNow": "اکنون وارد کنید", + "importEmojis": "وارد کردن شکلک‌ها", + "importFromZipFile": "وارد کردن از پرونده زیپ", + "exportEmotePack": "صادر کردن بسته شکلک به‌صورت زیپ", + "replace": "جایگزین کردن", + "aboutHomeserver": "درباره {homeserver}", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "commandHint_roomupgrade": "ارتقای این اتاق به نگارش مشخص‌شده", + "appLockDescription": "قفل کردن برنامه با رمز کوتاه هنگام عدم استفاده", + "sendTypingNotifications": "فرستادن آگاه‌سازهای نوشتن", + "swipeRightToLeftToReply": "کشیدن از راست به چپ برای پاسخ", + "noMoreChatsFound": "چت دیگری پیدا نشد...", + "noChatsFoundHere": "اینجا هنوز چتی پیدا نشد. با استفاده از دکمه زیر چت جدیدی با کسی شروع کنید. ⤵️", + "unread": "خوانده‌نشده", + "space": "فضا", + "spaces": "فضاها", + "checkList": "فهرست بررسی", + "countInvited": "{count} دعوت‌شده", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "createGroup": "ساختن گروه", + "chatPermissions": "دسترسی‌های چت", + "emoteKeyboardNoRecents": "شکلک‌هایی که به تازگی استفاده‌شده اینجا نمایش داده میشوند...", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "globalChatId": "شناسه سراسری چت", + "accessAndVisibility": "دسترسی و قابلیت دید", + "accessAndVisibilityDescription": "چه کسی اجازه پیوستن به این چت را دارد و چت چگونه قابل پیدا شدن است.", + "calls": "تماس‌ها", + "customEmojisAndStickers": "شکلک‌ها و برچسب‌های سفارشی", + "customEmojisAndStickersBody": "افزودن یا اشتراک گذاری ایموجی ها یا استیکر های سفارشی که در هر چت قابل استفاده‌اند.", + "chatDescription": "توضیحات چت", + "chatDescriptionHasBeenChanged": "توضیحات چت تغییر کرد", + "hideRedactedMessages": "پنهان کردن پیام‌های ویرایش‌شده", + "hideRedactedMessagesBody": "اگر کسی پیامی را ویرایش کند، دیگر نمیتوان آن پیام را در چت دید.", + "hideInvalidOrUnknownMessageFormats": "پنهان کردن قالب‌های پیام نامعتبر یا ناشناخته", + "block": "مسدود کردن", + "blockedUsers": "کاربران مسدود‌شده", + "blockListDescription": "میتوانید کاربرانی که مزاحم شما هستند را مسدود کنید. از کاربران موجود در فهرست مسدود شخصی، پیام یا دعوت به اتاق دریافت نخواهید کرد.", + "blockUsername": "چشم‌پوشی از نام کاربری", + "noChatDescriptionYet": "هنوز توضیحات چتی نوشته نشده است.", + "tryAgain": "تلاش دوباره", + "invalidServerName": "نام سرور نامعتبر", + "redactMessageDescription": "پیام برای همه شرکت‌کنندگان در این گفتگو ویرایش خواهد شد. این کار برگشت‌ناپذیر است.", + "optionalRedactReason": "(اختیاری) دلیل ویرایش این پیام...", + "messagesStyle": "پیام‌ها:", + "shareInviteLink": "هم‌رسانی پیوند دعوت", + "overview": "دید کلی", + "passwordRecoverySettings": "تنظیمات بازیابی گذرواژه", + "redactedBy": "ویرایش‌شده به‌دست {username}", + "@redactedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "directChat": "چت مستقیم", + "redactedByBecause": "ویرایش‌شده به‌دست {username} زیرا: «{reason}»", + "@redactedByBecause": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "reason": { + "type": "String" + } + } + }, + "sendImages": "فرستادن {count} تصویر", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "setChatDescription": "تنظیم توضیحات چت", + "presencesToggle": "نمایش پیام‌های وضعیت از دیگر کاربران", + "@presencesToggle": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWaitCounter": " در حال همگام‌سازی... ({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "invitedBy": "📩 دعوت‌شده توسط {user}", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "hasKnocked": "🚪 {user} در زده است", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "usersMustKnock": "کاربران باید در بزنند", + "noOneCanJoin": "هیچ‌کس نمیتواند بپیوندد", + "knock": "در زدن", + "hidePresences": "پنهان کردن فهرست وضعیت؟", + "setColorTheme": "تنظیم پوسته رنگی:", + "invite": "دعوت", + "inviteGroupChat": "📨 دعوت به چت گروهی", + "invalidInput": "ورودی نامعتبر!", + "wrongPinEntered": "رمز کوتاه نادرست وارد شد! {seconds} ثانیه دیگر دوباره تلاش کنید...", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "pleaseEnterANumber": "لطفاً عددی بزرگ‌تر از ۰ وارد کنید", + "archiveRoomDescription": "چت به بایگانی خواهد رفت. کاربران دیگر میتوانند ببینند که شما چت را ترک کرده‌اید.", + "roomUpgradeDescription": "چت با نگارش جدید اتاق بازسازی خواهد شد. به همه شرکت‌کنندگان آگاهی‌رسانی میشود که باید به چت جدید بروند. داده‌های بیشتر درباره نگارش‌های اتاق در https://spec.matrix.org/latest/rooms/", + "removeDevicesDescription": "از این دستگاه خارج خواهید شد و دیگر نمیتوانید پیام دریافت کنید.", + "banUserDescription": "کاربر از چت محروم خواهد شد و تا زمانی که محرومیت برداشته نشود، نمیتواند دوباره وارد چت شود.", + "unbanUserDescription": "کاربر در صورت تلاش دوباره میتواند وارد چت شود.", + "kickUserDescription": "کاربر از چت بیرون میشود اما محروم نمیشود. در چت های عمومی، کاربر میتواند هر زمان دوباره بپیوندد.", + "makeAdminDescription": "پس از مدیر کردن این کاربر، ممکن است نتوانید این کار را لغو کنید، زیرا آن‌ها همان دسترسی‌های شما را خواهند داشت.", + "pushNotificationsNotAvailable": "آگاه‌سازهای فشاری در دسترس نیستند", + "learnMore": "بیشتر بدانید", + "yourGlobalUserIdIs": "شناسه کاربری سراسری شما: ", + "noUsersFoundWithQuery": "متأسفانه کاربری با «{query}» پیدا نشد. لطفاً بررسی کنید که آیا اشتباه نوشتاری دارید.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "knocking": "در زدن", + "chatCanBeDiscoveredViaSearchOnServer": "چت با جستجو در {server} قابل کشف است", + "@chatCanBeDiscoveredViaSearchOnServer": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "searchChatsRooms": "جستجو برای #چت ها، @کاربران...", + "nothingFound": "چیزی پیدا نشد...", + "groupName": "نام گروه", + "createGroupAndInviteUsers": "ساختن گروه و دعوت کاربران", + "groupCanBeFoundViaSearch": "گروه با جستجو قابل یافتن است", + "wrongRecoveryKey": "متأسفیم... به نظر میرسد این کلید بازیابی درست نباشد.", + "commandHint_sendraw": "فرستادن json خام", + "databaseMigrationTitle": "پایگاه داده بهینه‌سازی شد", + "databaseMigrationBody": "لطفاً صبر کنید. این ممکن است لحظه‌ای طول بکشد.", + "leaveEmptyToClearStatus": "برای پاک کردن وضعیت، خالی بگذارید.", + "select": "انتخاب", + "searchForUsers": "جستجو برای @کاربران...", + "pleaseEnterYourCurrentPassword": "لطفاً گذرواژه کنونی خود را وارد کنید", + "newPassword": "گذرواژه جدید", + "pleaseChooseAStrongPassword": "لطفاً یک گذرواژه قوی انتخاب کنید", + "passwordsDoNotMatch": "گذرواژه‌ها هم‌خوانی ندارند", + "passwordIsWrong": "گذرواژه واردشده نادرست است", + "publicChatAddresses": "آدرس های چت عمومی", + "createNewAddress": "ساختن نشانی جدید", + "joinSpace": "پیوستن به فضا", + "publicSpaces": "فضاهای عمومی", + "addChatOrSubSpace": "افزودن چت یا زیرفضا", + "thisDevice": "این دستگاه:", + "searchIn": "جستجو در چت «{chat}»...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "searchMore": "جستجوی بیشتر...", + "gallery": "نگارخانه", + "files": "پرونده‌ها", + "sessionLostBody": "نشست شما گم شده است. لطفاً این خطا را به توسعه‌دهندگان در {url} گزارش دهید. پیام خطا: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "restoreSessionBody": "برنامه اکنون سعی میکند نشست شما را از پشتیبان بازیابی کند. لطفاً این خطا را به توسعه‌دهندگان در {url} گزارش دهید. پیام خطا: {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "sendReadReceipts": "فرستادن رسیدهای خواندن", + "sendTypingNotificationsDescription": "دیگر شرکت‌کنندگان در چت میتوانند ببینند که شما در حال تایپ پیام جدید هستید.", + "sendReadReceiptsDescription": "دیگر شرکت‌کنندگان در چت میتوانند ببینند که شما پیام را خوانده‌اید.", + "formattedMessages": "پیام‌های قالب‌بندی‌شده", + "formattedMessagesDescription": "نمایش محتوای پیام غنی مانند متن پررنگ با استفاده از مارک‌داون.", + "verifyOtherUser": "🔐 بازبینی کاربر دیگر", + "verifyOtherUserDescription": "اگر کاربر دیگری را بازبینی کنید، میتوانید مطمئن شوید که واقعاً با چه کسی در حال نوشتن هستید. 💪\n\nهنگام شروع بازبینی، شما و کاربر دیگر پنجره‌ای در برنامه خواهید دید. در آنجا مجموعه‌ای از شکلک‌ها یا اعداد را مشاهده میکنید که باید با یکدیگر مقایسه کنید.\n\nبهترین راه برای این کار دیدار حضوری یا شروع تماس تصویری است. 👭", + "verifyOtherDevice": "🔐 بازبینی دستگاه دیگر", + "verifyOtherDeviceDescription": "هنگام بازبینی دستگاه دیگر، آن دستگاه‌ها میتوانند کلیدها را تبادل کنند و امنیت کلی شما را افزایش دهند. 💪 هنگام شروع بازبینی، پنجره‌ای در برنامه روی هر دو دستگاه ظاهر میشود. در آنجا مجموعه‌ای از شکلک‌ها یا اعداد را مشاهده میکنید که باید با یکدیگر مقایسه کنید. بهتر است پیش از شروع بازبینی، هر دو دستگاه در دسترس باشند. 🤳", + "acceptedKeyVerification": "{sender} بازبینی کلید را پذیرفت", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "canceledKeyVerification": "{sender} بازبینی کلید را رد کرد", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "completedKeyVerification": "{sender} بازبینی کلید را کامل کرد", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "isReadyForKeyVerification": "{sender} برای بازبینی کلید آماده است", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "requestedKeyVerification": "{sender} درخواست بازبینی کلید کرد", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "startedKeyVerification": "{sender} بازبینی کلید را آغاز کرد", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "transparent": "شفاف", + "incomingMessages": "پیام‌های دریافتی", + "stickers": "برچسب‌ها", + "discover": "کشف", + "commandHint_ignore": "چشم‌پوشی از شناسه ماتریکس داده‌شده", + "commandHint_unignore": "لغو چشم‌پوشی از شناسه ماتریکس داده‌شده", + "unreadChatsInApp": "{appname}: {unread} چت خوانده‌نشده", + "@unreadChatsInApp": { + "type": "String", + "placeholders": { + "appname": { + "type": "String" + }, + "unread": { + "type": "String" + } + } + }, + "noDatabaseEncryption": "رمزنگاری پایگاه داده در این سکو پشتیبانی نمیشود", + "thereAreCountUsersBlocked": "اکنون {count} کاربر مسدود شده‌اند.", + "@thereAreCountUsersBlocked": { + "type": "String", + "count": {} + }, + "restricted": "محدودشده", + "knockRestricted": "در زدن محدود", + "goToSpace": "رفتن به فضا: {space}", + "@goToSpace": { + "type": "String", + "space": {} + }, + "markAsUnread": "علامت‌گذاری به‌عنوان خوانده‌نشده", + "userLevel": "{level} - کاربر", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "moderatorLevel": "{level} - ناظر", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "adminLevel": "{level} - مدیر", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "تغییر تنظیمات عمومی چت", + "inviteOtherUsers": "دعوت کاربران دیگر به این چت", + "changeTheChatPermissions": "تغییر دسترسی‌های چت", + "changeTheVisibilityOfChatHistory": "تغییر قابلیت دید تاریخچه چت", + "changeTheCanonicalRoomAlias": "تغییر نشانی اصلی چت عمومی", + "sendRoomNotifications": "فرستادن آگاه‌سازهای @room", + "changeTheDescriptionOfTheGroup": "تغییر توضیح چت", + "chatPermissionsDescription": "مشخص کنید کدام سطح دسترسی برای اقدامات خاصی در این چت لازم است. سطح‌های دسترسی ۰، ۵۰ و ۱۰۰ معمولاً نشان‌دهنده کاربران، ناظران و مدیران هستند، اما هر درجه‌بندی ممکن است.", + "updateInstalled": "🎉 به‌روزرسانی {version} نصب شد!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "changelog": "فهرست تغییرات", + "sendCanceled": "فرستادن رد شد", + "loginWithMatrixId": "ورود با شناسه ماتریکس", + "doesNotSeemToBeAValidHomeserver": "به نظر نمیرسد سرور خانگی سازگاری داشته باشد. نشانی اشتباه است؟", + "calculatingFileSize": "در حال محاسبه اندازه پرونده...", + "prepareSendingAttachment": "آماده‌سازی برای فرستادن پیوست...", + "sendingAttachment": "در حال فرستادن پیوست...", + "generatingVideoThumbnail": "در حال تولید تصویر کوچک ویدئو...", + "compressVideo": "در حال فشرده‌سازی ویدئو...", + "sendingAttachmentCountOfCount": "در حال فرستادن پیوست {index} از {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "محدودیت سرور رسیده است! {seconds} ثانیه صبر کنید...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "یکی از دستگاه‌های شما بازبینی نشده است", + "noticeChatBackupDeviceVerification": "توجه: وقتی همه دستگاه‌های خود را به پشتیبان چت متصل کنید، به‌صورت خودکار بازبینی میشوند.", + "continueText": "ادامه", + "welcomeText": "درود درود 👋 این فلافی‌چت است. میتوانید به هر سرور خانگی سازگار با https://matrix.org وارد شوید و با هر کسی چت کنید. این یک شبکه پیام‌رسانی غیرمتمرکز بزرگ است!", + "blur": "محو کردن:", + "opacity": "شفافیت:", + "setWallpaper": "تنظیم کاغذدیواری", + "manageAccount": "مدیریت حساب", + "noContactInformationProvided": "سرور هیچ اطلاعات تماس معتبری نمیدهد", + "contactServerAdmin": "تماس با مدیر سرور", + "contactServerSecurity": "تماس با امنیت سرور", + "supportPage": "صفحه پشتیبانی", + "serverInformation": "درباره سرور:", + "name": "نام", + "version": "نگارش", + "website": "وبگاه", + "compress": "فشرده‌سازی", + "boldText": "متن درشت", + "italicText": "متن کج", + "strikeThrough": "خط‌خورده", + "pleaseFillOut": "لطفاً پر کنید", + "invalidUrl": "نشانی نامعتبر", + "addLink": "افزودن پیوند", + "unableToJoinChat": "ناتوانی در پیوستن به چت. شاید طرف مقابل گفتگو را بسته است.", + "previous": "پیشین", + "otherPartyNotLoggedIn": "طرف مقابل اکنون وارد نشده است و بنابراین نمیتواند پیام دریافت کند!", + "appWantsToUseForLogin": "برای ورود از '{server}' استفاده کنید", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "appWantsToUseForLoginDescription": "شما بدین‌وسیله به برنامه و وبگاه اجازه میدهید اطلاعات شما را هم‌رسانی کنند.", + "open": "باز کردن", + "waitingForServer": "در انتظار سرور...", + "newChatRequest": "📩 درخواست چت جدید", + "contentNotificationSettings": "تنظیمات آگاه‌ساز محتوا", + "generalNotificationSettings": "تنظیمات آگاه‌ساز عمومی", + "roomNotificationSettings": "تنظیمات آگاه‌ساز اتاق", + "userSpecificNotificationSettings": "تنظیمات آگاه‌ساز خاص کاربر", + "otherNotificationSettings": "سایر تنظیمات آگاه‌ساز", + "notificationRuleContainsUserName": "دارای نام کاربری", + "notificationRuleContainsUserNameDescription": "وقتی پیامی حاوی نام کاربری باشد، کاربر را آگاه میکند.", + "notificationRuleMaster": "بی‌صدا کردن همه آگاه‌سازها", + "notificationRuleMasterDescription": "از قوانین دیگر چشم‌پوشی میکند و همه آگاه‌سازها را غیرفعال میکند.", + "notificationRuleSuppressNotices": "سرکوب پیام‌های خودکار", + "notificationRuleSuppressNoticesDescription": "آگاه‌سازهای کارخواه‌های خودکار مانند ربات‌ها را سرکوب میکند.", + "notificationRuleInviteForMe": "دعوت برای من", + "notificationRuleInviteForMeDescription": "وقتی کاربر به اتاقی دعوت میشود، او را آگاه میکند.", + "notificationRuleMemberEvent": "رویداد عضویت", + "notificationRuleMemberEventDescription": "آگاه‌سازهای رویدادهای عضویت را سرکوب میکند.", + "notificationRuleIsUserMention": "نام‌بردن از کاربر", + "notificationRuleIsUserMentionDescription": "وقتی در پیامی مستقیماً از کاربر نام برده میشود، او را آگاه میکند.", + "notificationRuleContainsDisplayName": "دارای نام نمایشی", + "notificationRuleContainsDisplayNameDescription": "وقتی پیامی حاوی نام نمایشی کاربر باشد، کاربر را آگاه میکند.", + "notificationRuleIsRoomMention": "نام‌بردن از اتاق", + "notificationRuleIsRoomMentionDescription": "وقتی نام اتاق ذکر میشود، کاربر را آگاه میکند.", + "notificationRuleRoomnotif": "آگاه‌ساز اتاق", + "notificationRuleRoomnotifDescription": "وقتی پیامی حاوی '@room' باشد، کاربر را آگاه میکند.", + "notificationRuleTombstone": "سنگ قبر", + "notificationRuleTombstoneDescription": "کاربر را از پیام‌های غیرفعال‌سازی اتاق آگاه میکند.", + "notificationRuleReaction": "واکنش", + "notificationRuleReactionDescription": "آگاه‌سازهای واکنش‌ها را سرکوب میکند.", + "notificationRuleRoomServerAcl": "ACL سرور اتاق", + "notificationRuleRoomServerAclDescription": "آگاه‌سازهای فهرست‌های کنترل دسترسی سرور اتاق (ACL) را سرکوب میکند.", + "notificationRuleSuppressEdits": "سرکوب ویرایش‌ها", + "notificationRuleSuppressEditsDescription": "آگاه‌سازهای پیام‌های ویرایش‌شده را سرکوب میکند.", + "notificationRuleCall": "تماس", + "notificationRuleCallDescription": "درباره تماس‌ها کاربر را آگاه میکند.", + "notificationRuleEncryptedRoomOneToOne": "اتاق رمزنگاری‌شده یک‌به‌یک", + "notificationRuleEncryptedRoomOneToOneDescription": "کاربر را از پیام‌ها در اتاق‌های رمزنگاری‌شده یک‌به‌یک آگاه میکند.", + "notificationRuleRoomOneToOne": "اتاق یک‌به‌یک", + "notificationRuleRoomOneToOneDescription": "کاربر را از پیام‌ها در اتاق‌های یک‌به‌یک آگاه میکند.", + "notificationRuleMessage": "پیام", + "notificationRuleMessageDescription": "کاربر را از پیام‌های عمومی آگاه میکند.", + "notificationRuleEncrypted": "رمزنگاری‌شده", + "notificationRuleEncryptedDescription": "کاربر را از پیام‌ها در اتاق‌های رمزنگاری‌شده آگاه میکند.", + "notificationRuleJitsi": "جیتسی", + "notificationRuleJitsiDescription": "کاربر را از رویدادهای ابزارک جیتسی آگاه میکند.", + "notificationRuleServerAcl": "سرکوب رویدادهای ACL سرور", + "notificationRuleServerAclDescription": "آگاه‌سازهای رویدادهای ACL سرور را سرکوب میکند.", + "unknownPushRule": "قانون ناشناخته آگاه‌ساز '{rule}'", + "@unknownPushRule": { + "type": "String", + "placeholders": { + "rule": { + "type": "String" + } + } + }, + "sentVoiceMessage": "🎙️ {duration} - پیام صوتی از {sender}", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "deletePushRuleCanNotBeUndone": "اگر این تنظیم آگاه‌ساز را پاک کنید، این کار برگشت‌ناپذیر است.", + "more": "بیشتر", + "shareKeysWith": "هم‌رسانی کلیدها با...", + "shareKeysWithDescription": "کدام دستگاه‌ها باید مورد اعتماد باشند تا بتوانند پیام‌های شما را در چت های رمزنگاری‌شده بخوانند؟", + "allDevices": "همه دستگاه‌ها", + "crossVerifiedDevicesIfEnabled": "دستگاه‌های بازبینی‌شده متقابل اگر فعال باشد", + "crossVerifiedDevices": "دستگاه‌های بازبینی‌شده متقابل", + "verifiedDevicesOnly": "فقط دستگاه‌های بازبینی‌شده", + "takeAPhoto": "گرفتن عکس", + "recordAVideo": "ضبط ویدئو", + "optionalMessage": "(اختیاری) پیام...", + "notSupportedOnThisDevice": "در این دستگاه پشتیبانی نمیشود", + "enterNewChat": "ورود به چت جدید", + "approve": "پذیرفتن", + "youHaveKnocked": "شما در زده‌اید", + "pleaseWaitUntilInvited": "لطفاً اکنون صبر کنید تا کسی از اتاق شما را دعوت کند.", + "commandHint_logout": "خروج از دستگاه کنونی", + "commandHint_logoutall": "خروج از همه دستگاه‌های فعال", + "displayNavigationRail": "نمایش نوار ناوبری در تلفن همراه", + "customReaction": "واکنش سفارشی", + "moreEvents": "رویدادهای بیشتر", + "initAppError": "خطایی هنگام آغاز برنامه رخ داد", + "changedTheChatDescription": "‮‭‭‮‭‬‫{username} توضیحات چت را تغییر داد", + "changedTheChatName": "{username} نام چت را تغییر داد", + "declineInvitation": "رد کردن دعوت", + "noMessagesYet": "پیامی وجود ندارد", + "longPressToRecordVoiceMessage": "برای ضبط پیام صوتی، انگشت خود را نگه دارید.", + "pause": "توقف", + "resume": "ادامه", + "removeFromSpaceDescription": "این چت از این فضا حذف خواهد شد اما همچنان در لیست چت های شما نمایش داده میشود.", + "countChats": "{chats} چت", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "عضو فضای {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "عضو فضای {spaces} میتواند در بزند", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username} یک نظرسنجی را آغاز کرد.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "نظرسنجی", + "startPoll": "آغاز نظرسنجی", + "endPoll": "پایان نظرسنجی", + "answersVisible": "پاسخ ها قابل رویت", + "pollQuestion": "سوال نظرسنجی", + "answerOption": "گزینه جواب", + "addAnswerOption": "اضافه کردن گزینه جواب", + "allowMultipleAnswers": "اجازه دادن چند جواب", + "pollHasBeenEnded": "این نظرسنجی پایان یافته است", + "answersWillBeVisibleWhenPollHasEnded": "پاسخ ها وقتی نظرسنجی به پایان برسد نمایش داده خواهند شد", + "replyInThread": "پاسخ در رشته", + "countReplies": "{count} پاسخ دیگر", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "thread": "رشته", + "backToMainChat": "بازگشت به چت اصلی", + "saveChanges": "ذخیره تغییرات", + "createSticker": "ساخت استیکر یا ایموجی", + "useAsSticker": "استفاده به عنوان استیکر", + "useAsEmoji": "استفاده به عنوان ایموجی", + "stickerPackNameAlreadyExists": "نام استیکرپک تکراری است", + "newStickerPack": "استیکر پک جدید", + "stickerPackName": "نام استیکر پک", + "attribution": "نسبت دادن", + "skipChatBackup": "صرف نظر از پشتیبان گیری چت", + "skipChatBackupWarning": "آیا مطمئنید؟ بدون فعال کردن پشتیبان گیری چت ممکن است در صورت تغییر دستگاه دسترسی خود به پیام هایتان را از دست بدهید.", + "loadingMessages": "در حال بارگذاری پیام ها", + "setupChatBackup": "فعالسازی پشتیبان گیری چت", + "noMoreResultsFound": "نتایج دیگری یافت نشد", + "chatSearchedUntil": "چت تا {time} جستجو شد", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "پایه آدرس فدریشن", + "clientWellKnownInformation": "اطلاعات Client-Well-Known:", + "baseUrl": "پایه آدرس", + "identityServer": "سرور احراز هویت:", + "versionWithNumber": "ورژن: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "لاگ ها", + "advancedConfigs": "تنظیمات پیشرفته", + "advancedConfigurations": "تنظیمات پیشرفته", + "signIn": "ورود", + "createNewAccount": "ساخت حساب جدید", + "signUpGreeting": "فلافی چت غیرمتمرکز است! یک سرور که میخواهید در آن حسابتان را بسازید را انتخاب کنید و شروع کنید!", + "signInGreeting": "از قبل در ماتریکس حساب کاربری دارید؟ خوش برگشتید! سرور خانه خود را انتخاب و لاگین کنید.", + "appIntro": "فلافی چت یک پیامرسان امن غیرمتمرکز ماتریکس است که با آن میتوانید با دوستانتان چت کنید! برای اطلاعات بیشتر میتوانید به https://matrix.org مراجعه کنید یا اینکه صرفا ثبت نام کنید.", + "theProcessWasCanceled": "فرآیند لغو شد.", + "join": "عضویت", + "searchOrEnterHomeserverAddress": "جستجو یا وارد کردن آدرس سرور خانه", + "matrixId": "شناسه ماتریکس", + "setPowerLevel": "انتخاب سطح قدرت", + "makeModerator": "انتخاب به عنوان ناظر", + "makeAdmin": "انتخاب به عنوان مدیر", + "removeModeratorRights": "حذف دسترسی های نظارتی", + "removeAdminRights": "حذف دسترسی های مدیریتی", + "powerLevel": "سطح قدرت", + "setPowerLevelDescription": "سطح قدرت مشخص میکند که یک کاربر قادر به انجام چه کارهایی در این اتاق است. معمولا یک عدد بین ۰ تا ۱۰۰ می باشد.", + "owner": "صاحب", + "mute": "ساکت", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "ساخت چت جدید", + "reset": "ریست کردن", + "supportFluffyChat": "حمایت از فلافی چت", + "support": "پشتیبانی", + "fluffyChatSupportBannerMessage": "فلافی چت به کمک شما نیاز دارد!\n❤️❤️❤️\nفلافی چت همواره رایگان خواهد بود، اما توسعه و نگهداری از آن هزینه بر است.\nآینده این پروژه در گرو حمایت افرادی مثل شماست.", + "skipSupportingFluffyChat": "رد کردن حمایت از فلافی چت", + "iDoNotWantToSupport": "نمیخواهم حمایت کنم", + "iAlreadySupportFluffyChat": "از قبل از فلافی چت حمایت میکنم", + "setLowPriority": "تنظیم اولویت پایین", + "unsetLowPriority": "لغو تنظیم اولویت پایین", + "countVotes": "{count} رای دیگر", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } } - }, - "deletePushRuleCanNotBeUndone": "اگر این تنظیم آگاه‌ساز را پاک کنید، این کار برگشت‌ناپذیر است.", - "@deletePushRuleCanNotBeUndone": {}, - "more": "بیشتر", - "@more": {}, - "shareKeysWith": "هم‌رسانی کلیدها با...", - "@shareKeysWith": {}, - "shareKeysWithDescription": "کدام دستگاه‌ها باید مورد اعتماد باشند تا بتوانند پیام‌های شما را در گپ‌های رمزنگاری‌شده بخوانند؟", - "@shareKeysWithDescription": {}, - "allDevices": "همه دستگاه‌ها", - "@allDevices": {}, - "crossVerifiedDevicesIfEnabled": "دستگاه‌های بازبینی‌شده متقابل اگر فعال باشد", - "@crossVerifiedDevicesIfEnabled": {}, - "crossVerifiedDevices": "دستگاه‌های بازبینی‌شده متقابل", - "@crossVerifiedDevices": {}, - "verifiedDevicesOnly": "فقط دستگاه‌های بازبینی‌شده", - "@verifiedDevicesOnly": {}, - "takeAPhoto": "گرفتن عکس", - "@takeAPhoto": {}, - "recordAVideo": "ضبط ویدئو", - "@recordAVideo": {}, - "optionalMessage": "(اختیاری) پیام...", - "@optionalMessage": {}, - "notSupportedOnThisDevice": "در این دستگاه پشتیبانی نمیشود", - "@notSupportedOnThisDevice": {}, - "enterNewChat": "ورود به گپ جدید", - "@enterNewChat": {}, - "approve": "پذیرفتن", - "@approve": {}, - "youHaveKnocked": "شما در زده‌اید", - "@youHaveKnocked": {}, - "pleaseWaitUntilInvited": "لطفاً اکنون صبر کنید تا کسی از اتاق شما را دعوت کند.", - "@pleaseWaitUntilInvited": {}, - "commandHint_logout": "خروج از دستگاه کنونی", - "@commandHint_logout": {}, - "commandHint_logoutall": "خروج از همه دستگاه‌های فعال", - "@commandHint_logoutall": {}, - "displayNavigationRail": "نمایش نوار ناوبری در تلفن همراه", - "@displayNavigationRail": {}, - "customReaction": "واکنش سفارشی", - "@customReaction": {}, - "moreEvents": "رویدادهای بیشتر", - "@moreEvents": {}, - "initAppError": "خطایی هنگام آغاز برنامه رخ داد", - "@initAppError": {} } diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index 9f33e4c5..9c26272b 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -121,18 +121,6 @@ }, "sendOnEnter": "Lähetä painamalla rivinvaihtonäppäintä", "@sendOnEnter": {}, - "badServerVersionsException": "Kotipalvelin tukee Matrix Spec versio(it)a:\n{serverVersions}, mutta tämä sovellus tukee vain versio(it)a {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "badServerLoginTypesException": "Tämä kotipalvelin tukee sisäänkirjautumistapoja: \n{serverVersions},\nmutta tämä sovellus tukee vain -tapoja: \n{supportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -177,11 +165,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bottien lähettämät viestit", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Peruuta", "@cancel": { "type": "String", @@ -372,8 +355,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Keskustelu on lisätty tähän tilaan", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Keskustelut", "@chats": { "type": "String", @@ -458,18 +439,6 @@ "type": "String", "placeholders": {} }, - "dateWithoutYear": "{day}.{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "dateAndTimeOfDay": "{date}, {timeOfDay}", "@dateAndTimeOfDay": { "type": "String", @@ -482,21 +451,6 @@ } } }, - "dateWithYear": "{day}.{month}.{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Tämä poistaa tunnuksesi käytöstä. Tätä ei voi kumota! Oletko varma?", "@deactivateAccountWarning": { "type": "String", @@ -602,11 +556,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Emote-lyhytkoodi ja kuva on valittava!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Tyhjä keskustelu", "@emptyChat": { "type": "String", @@ -638,11 +587,6 @@ }, "homeserver": "Kotipalvelin", "@homeserver": {}, - "enterYourHomeserver": "Syötä kotipalvelimesi", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Virhe paikannuksessa: {error}", "@errorObtainingLocation": { "type": "String", @@ -677,11 +621,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Mene uuteen huoneeseen", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Ryhmä", "@group": { "type": "String", @@ -753,11 +692,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identiteetti", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Jätä huomioitta", "@ignore": { "type": "String", @@ -795,11 +729,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Kutsu minua varten", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} kutsui sinut FluffyChattiin.\n1. Viereaile sivulla: https://fluffychat.im ja asenna sovellus\n2. Rekisteröidy tai kirjaudu sisään\n3. Avaa kutsulinkki:\n{link}", "@inviteText": { "type": "String", @@ -860,11 +789,6 @@ "type": "String", "placeholders": {} }, - "license": "Lisenssi", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Vaalea", "@lightTheme": { "type": "String", @@ -1083,16 +1007,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Vahvista", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Sisältää käyttäjätunnuksen", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "countParticipants": "{count} osallistujaa", "@countParticipants": { "type": "String", @@ -1156,21 +1070,11 @@ "type": "String", "placeholders": {} }, - "connect": "Yhdistä", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Yhteystieto on kutsuttu ryhmään", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Sisältää näyttönimen", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Sisältö on ilmoitettu palvelimen ylläpitäjille", "@contentHasBeenReported": { "type": "String", @@ -1263,21 +1167,11 @@ } } }, - "notificationsEnabledForThisAccount": "Tämän tunnuksen ilmoitukset ovat käytössä", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "joinRoom": "Liity huoneeseen", "@joinRoom": { "type": "String", "placeholders": {} }, - "memberChanges": "Jäsenmuutoksia", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "needPantalaimonWarning": "Tiedäthän tarvitsevasi toistaiseksi Pantalaimonin käyttääksesi päästä-päähän-salausta.", "@needPantalaimonWarning": { "type": "String", @@ -1367,11 +1261,6 @@ "type": "String", "placeholders": {} }, - "people": "Ihmiset", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Valitse kuva", "@pickImage": { "type": "String", @@ -1391,11 +1280,6 @@ } } }, - "pleaseChoose": "Valitse", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Valitse pääsykoodi", "@pleaseChooseAPasscode": { "type": "String", @@ -1469,11 +1353,6 @@ } } }, - "rejoin": "Liity uudelleen", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Poista", "@remove": { "type": "String", @@ -1493,25 +1372,11 @@ } } }, - "removeDevice": "Poista laite", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Poista porttikielto keskusteluun", "@unbanFromChat": { "type": "String", "placeholders": {} }, - "seenByUser": "Nähnyt {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "sendAMessage": "Lähetä viesti", "@sendAMessage": { "type": "String", @@ -1546,31 +1411,11 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Lähetä alkuperäinen", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Aseta pääalias", "@setAsCanonicalAlias": { "type": "String", "placeholders": {} }, - "setCustomEmotes": "Aseta mukautetut emotet", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Aseta kutsulinkki", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Aseta oikeustasot", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Aseta tila", "@setStatus": { "type": "String", @@ -1595,11 +1440,6 @@ } } }, - "singlesignon": "Kertakirjautuminen", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Ohita", "@skip": { "type": "String", @@ -1651,21 +1491,11 @@ "type": "String", "placeholders": {} }, - "toggleMuted": "Mykistetty-kytkin", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Liikaa pyyntöjä. Yritä myöhemmin uudelleen!", "@tooManyRequestsWarning": { "type": "String", "placeholders": {} }, - "toggleUnread": "Merkitse lukemattomaksi/luetuksi", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "transferFromAnotherDevice": "Siirrä toiselta laitteelta", "@transferFromAnotherDevice": { "type": "String", @@ -1823,11 +1653,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Taustakuva:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Varoitus!", "@warning": { "type": "String", @@ -1875,8 +1700,6 @@ }, "removeFromSpace": "Poista tilasta", "@removeFromSpace": {}, - "addToSpaceDescription": "Valitse tila, johon tämä keskustelu lisätään.", - "@addToSpaceDescription": {}, "start": "Aloita", "@start": {}, "serverRequiresEmail": "Tämän palvelimen täytyy tarkistaa sähköposti-osoitteesi rekisteröitymistä varten.", @@ -1980,11 +1803,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Lähetä tarra", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "publicRooms": "Julkiset huoneet", "@publicRooms": { "type": "String", @@ -2052,15 +1870,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 lukematon keskustelu} other{{unreadCount} lukematonta keskustelua}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "videoCall": "Videopuhelu", "@videoCall": { "type": "String", @@ -2082,11 +1891,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Suosikki-kytkin", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "unmuteChat": "Poista keskustelun mykistys", "@unmuteChat": { "type": "String", @@ -2150,22 +1954,6 @@ "type": "String", "description": "Usage hint for the command /discardsession" }, - "openVideoCamera": "Avaa kamera videokuvausta varten", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Julkaise", - "@publish": {}, "markAsRead": "Merkitse luetuksi", "@markAsRead": {}, "dismiss": "Hylkää", @@ -2202,41 +1990,8 @@ "@pinMessage": {}, "confirmEventUnpin": "Haluatko varmasti irrottaa tapahtuman pysyvästi?", "@confirmEventUnpin": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Mukautettu", - "@widgetCustom": {}, - "widgetName": "Nimi", - "@widgetName": {}, - "widgetUrlError": "Epäkelvollinen URL.", - "@widgetUrlError": {}, - "errorAddingWidget": "Virhe lisättäessä pienoissovellusta.", - "@errorAddingWidget": {}, - "nextAccount": "Seuraava tili", - "@nextAccount": {}, - "switchToAccount": "Siirry tilille {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "experimentalVideoCalls": "Kokeelliset videopuhelut", "@experimentalVideoCalls": {}, - "emailOrUsername": "Sähköposti-osoite tai käyttäjätunnus", - "@emailOrUsername": {}, - "previousAccount": "Edellinen tili", - "@previousAccount": {}, - "widgetEtherpad": "Tekstimuotoinen muistiinpano", - "@widgetEtherpad": {}, - "widgetNameError": "Syötä näyttönimi.", - "@widgetNameError": {}, - "addWidget": "Lisää pienoissovellus", - "@addWidget": {}, "youRejectedTheInvitation": "Kieltäydyit kutsusta", "@youRejectedTheInvitation": {}, "youJoinedTheChat": "Liityit keskusteluun", @@ -2299,25 +2054,10 @@ } } }, - "separateChatTypes": "Erota yksityiskeskustelut ryhmistä", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "dehydrateTor": "TOR-käyttäjät: vie istunto", - "@dehydrateTor": {}, - "hydrateTor": "TOR-käyttäjät: tuo viety istunto", - "@hydrateTor": {}, - "hydrateTorLong": "Veitkö edellisen istuntosi käyttäessäsi TORia? Tuo se nopeasti ja jatka jutustelua.", - "@hydrateTorLong": {}, - "pleaseEnterRecoveryKey": "Syötä palautusavaimesi:", - "@pleaseEnterRecoveryKey": {}, "recoveryKey": "Palautusavain", "@recoveryKey": {}, "recoveryKeyLost": "Kadonnut palautusavain?", "@recoveryKeyLost": {}, - "dehydrateTorLong": "Tor-käyttäjille suositellaan istunnon vientiä ennen ikkunan sulkemista.", - "@dehydrateTorLong": {}, "hydrate": "Palauta varmuuskopiotiedostosta", "@hydrate": {}, "dehydrate": "Vie istunto ja tyhjennä laite", @@ -2332,8 +2072,6 @@ "@pleaseEnterRecoveryKeyDescription": {}, "unlockOldMessages": "Pura vanhojen viestien salaus", "@unlockOldMessages": {}, - "indexedDbErrorLong": "Viestivarasto ei ole käytössä yksityisselauksessa oletuksena.\nKäythän osoitteessa\n - about:config\n - Aseta dom.indexedDB.privateBrowsing.enabled arvoon true\nMuuten FluffyChatin käyttäminen ei ole mahdollista.", - "@indexedDbErrorLong": {}, "saveKeyManuallyDescription": "Tallenna tämä avain manuaalisesti käyttäen järjestelmän jakodialogia tai leikepöytää.", "@saveKeyManuallyDescription": {}, "storeInAndroidKeystore": "Tallenna Android KeyStoreen", @@ -2350,8 +2088,6 @@ }, "storeInSecureStorageDescription": "Tallenna palautusavain tämän laitteen turvavarastoon.", "@storeInSecureStorageDescription": {}, - "indexedDbErrorTitle": "Yksityisen selauksen ongelmat", - "@indexedDbErrorTitle": {}, "user": "Käyttäjä", "@user": {}, "custom": "Mukautettu", @@ -2377,28 +2113,12 @@ "@commandHint_markasdm": {}, "foregroundServiceRunning": "Tämä ilmoitus näkyy etualapalvelun ollessa käynnissä.", "@foregroundServiceRunning": {}, - "callingPermissions": "Puheluoikeudet", - "@callingPermissions": {}, - "callingAccount": "Soittamistunnus", - "@callingAccount": {}, - "callingAccountDetails": "Sallii FluffyChatin käyttää Androidin omaa Puhelut-sovellusta.", - "@callingAccountDetails": {}, - "appearOnTop": "Näy päällä", - "@appearOnTop": {}, - "appearOnTopDetails": "Sallii sovelluksen näkyä muiden sovellusten päällä (tätä ei tarvita, mikäli olet jo määrittänyt FluffyChatin puhelin-tunnukseksi)", - "@appearOnTopDetails": {}, "newSpace": "Uusi tila", "@newSpace": {}, - "enterSpace": "Siirry tilaan", - "@enterSpace": {}, - "enterRoom": "Siirry huoneeseen", - "@enterRoom": {}, "allSpaces": "Kaikki tilat", "@allSpaces": {}, "screenSharingTitle": "ruudunjako", "@screenSharingTitle": {}, - "otherCallingPermissions": "Mikrofoni, kamera ja muut FluffyChatin oikeudet", - "@otherCallingPermissions": {}, "newGroup": "Uusi ryhmä", "@newGroup": {}, "screenSharingDetail": "Jaat ruutuasi FluffyChatissä", @@ -2432,21 +2152,10 @@ } } }, - "numChats": "{number} keskustelua", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "commandHint_googly": "Lähetä askartelusilmiä", "@commandHint_googly": {}, "commandHint_cuddle": "Lähetä kokovartaluhalaus", "@commandHint_cuddle": {}, - "hideUnimportantStateEvents": "Piilota ei-niin-tärkeät tilatapahtumat", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "Älä näytä uudelleen", "@doNotShowAgain": {}, "fileHasBeenSavedAt": "Tiedosto on tallennettu sijaintiin {path}", @@ -2460,13 +2169,6 @@ }, "disableEncryptionWarning": "Turvallisuuden vuoksi et voi poistaa salausta käytöstä huoneista, joissa se on aiemmin otettu käyttöön.", "@disableEncryptionWarning": {}, - "allRooms": "Kaikki ryhmäkeskustelut", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "startFirstChat": "Aloita ensimmäinen keskustelusi", - "@startFirstChat": {}, "newSpaceDescription": "Tilat mahdollistavat keskusteluidesi keräämisen ja yksityisten tai julkisten yhteisöjen rakentamisen.", "@newSpaceDescription": {}, "deviceKeys": "Laite-avaimet:", @@ -2504,10 +2206,6 @@ }, "sorryThatsNotPossible": "Anteeksi... se ei ole mahdollista", "@sorryThatsNotPossible": {}, - "signInWithPassword": "Kirjaudu sisään salasanalla", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Yritä myöhemmin uudelleen tai valitse toinen palvelin.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "setColorTheme": "Aseta väriteema:", "@setColorTheme": {}, "tryAgain": "Yritä uudelleen", @@ -2533,23 +2231,12 @@ } } }, - "signInWith": "Kirjaudu sisään palvelulla {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "optionalRedactReason": "(Vapaaehtoinen) Syy tämän viestin poistamiselle...", "@optionalRedactReason": {}, "archiveRoomDescription": "Keskustelu siirretään arkistoon. Muut käyttäjät näkevät sinun poistuneen keskustelusta.", "@archiveRoomDescription": {}, "exportEmotePack": "Vie emotepaketti .zip-tiedostona", "@exportEmotePack": {}, - "inviteContactToGroupQuestion": "Tahdotko kutsua yhteystiedon {contact} keskusteluun \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "Poistanut {username} syystä: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2566,8 +2253,6 @@ "@redactMessageDescription": {}, "invalidInput": "Virheellinen syöte!", "@invalidInput": {}, - "addChatDescription": "Lisää keskustelulle kuvaus...", - "@addChatDescription": {}, "hasKnocked": "🚪 {user} on koputtanut", "@hasKnocked": { "placeholders": { @@ -2591,8 +2276,6 @@ "@sendTypingNotifications": {}, "inviteGroupChat": "📨 Kutsu ryhmäkeskusteluun", "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Kutsu yksityiskeskusteluun", - "@invitePrivateChat": {}, "importEmojis": "Tuo emojit", "@importEmojis": {}, "noChatDescriptionYet": "Keskustelun kuvausta ei ole vielä luotu.", @@ -2605,8 +2288,6 @@ "@roomUpgradeDescription": {}, "pleaseEnterANumber": "Syötä suurempi luku kuin 0", "@pleaseEnterANumber": {}, - "profileNotFound": "Käyttäjää ei löydy palvelimelta. Tämä voi olla yhteysongelma tai käyttäjä ei ole olemassa.", - "@profileNotFound": {}, "shareInviteLink": "Jaa kutsulinkki", "@shareInviteLink": {}, "emoteKeyboardNoRecents": "Viimeaikoina käytetyt emotet tulevat näkymään täällä...", @@ -2614,8 +2295,6 @@ "type": "String", "placeholders": {} }, - "setTheme": "Aseta teema:", - "@setTheme": {}, "replace": "Korvaa", "@replace": {}, "createGroup": "Luo ryhmä", @@ -2686,20 +2365,10 @@ "@pause": {}, "resume": "Jatka", "@resume": {}, - "moveUp": "Siirrä ylös", - "@moveUp": {}, - "moveDown": "Siirrä alas", - "@moveDown": {}, "poll": "Kysely", "@poll": {}, - "setCustomPermissionLevel": "Aseta mukautettu lupataso", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Valitse alla oleva ennalta määritetty rooli tai anna mukautettu lupataso väliltä 0–100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Jätä huomiotta", "@ignoreUser": {}, - "normalUser": "Peruskäyttäjä", - "@normalUser": {}, "aboutHomeserver": "Tietoja {homeserver}:sta", "@aboutHomeserver": { "type": "String", @@ -2713,22 +2382,8 @@ "@commandHint_roomupgrade": {}, "appLockDescription": "Lukitse sovellus kun sitä ei käytetä PIN-koodin kanssa", "@appLockDescription": {}, - "countChatsAndCountParticipants": "{chats} pikakeskustelut ja {participants} osallistujat", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noChatsFoundHere": "Täältä ei löytynyt vielä pikakeskusteluja. Aloita uusi pikakeskustelu jonkun kanssa alla olevalla painikkeella. ⤵️", "@noChatsFoundHere": {}, - "joinedChats": "Liittyneet pikakeskustelut", - "@joinedChats": {}, "space": "Tila", "@space": {}, "spaces": "Tilat", @@ -2762,16 +2417,10 @@ "@blockedUsers": {}, "blockListDescription": "Voit estää sinua häiritsevät käyttäjät. Et voi vastaanottaa viestejä tai huonekutsuja henkilökohtaisella estolistallasi olevilta käyttäjiltä.", "@blockListDescription": {}, - "hideMemberChangesInPublicChats": "Piilota jäsenten muutokset julkisissa pikakeskusteluissa", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Älä näytä pikakeskustelun aikajanalla, jos joku liittyy julkiseen pikakeskusteluun tai poistuu siitä luettavuuden parantamiseksi.", - "@hideMemberChangesInPublicChatsBody": {}, "blockUsername": "Jätä käyttäjänimi huomiotta", "@blockUsername": {}, "overview": "Yleiskatsaus", "@overview": {}, - "notifyMeFor": "Ilmoita minulle", - "@notifyMeFor": {}, "passwordRecoverySettings": "Salasanan palautusasetukset", "@passwordRecoverySettings": {}, "sendImages": "Lähetä {count} kuva", @@ -2783,11 +2432,6 @@ } } }, - "presenceStyle": "Läsnäolo:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Näytä muiden käyttäjien tilaviestit", "@presencesToggle": { "type": "String", @@ -2802,14 +2446,6 @@ } } }, - "youInvitedToBy": "📩 Sinut on kutsuttu linkin kautta kohteeseen:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "invitedBy": "📩 Kutsujana {user}", "@invitedBy": { "placeholders": { @@ -2822,16 +2458,6 @@ "@usersMustKnock": {}, "noOneCanJoin": "Kukaan ei voi liittyä", "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} haluaa liittyä pikakeskusteluun.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Julkista linkkiä ei ole vielä luotu", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "Koputa", "@knock": {}, "hidePresences": "Piilotetaanko tilaluettelo?", @@ -2884,8 +2510,6 @@ "@groupCanBeFoundViaSearch": {}, "wrongRecoveryKey": "Pahoittelut... tämä ei vaikuta olevan oikea palautusavain.", "@wrongRecoveryKey": {}, - "startConversation": "Aloita keskustelu", - "@startConversation": {}, "commandHint_sendraw": "Lähetä raaka JSON", "@commandHint_sendraw": {}, "databaseMigrationTitle": "Tietokanta on optimoitu", @@ -2894,8 +2518,6 @@ "@databaseMigrationBody": {}, "leaveEmptyToClearStatus": "Jätä tyhjäksi tyhjentääksesi tilasi.", "@leaveEmptyToClearStatus": {}, - "publicLink": "Julkinen linkki", - "@publicLink": {}, "publicChatAddresses": "Julkiset keskusteluosoitteet", "@publicChatAddresses": {}, "createNewAddress": "Luo uusi osoite", @@ -2906,23 +2528,8 @@ "@publicSpaces": {}, "addChatOrSubSpace": "Lisää pikakeskustelu tai alitila", "@addChatOrSubSpace": {}, - "subspace": "Alitila", - "@subspace": {}, - "decline": "Hylkää", - "@decline": {}, "initAppError": "Sovelluksen alustamisessa tapahtui virhe", "@initAppError": {}, - "userRole": "Käyttäjärooli", - "@userRole": {}, - "minimumPowerLevel": "{level} on pienin tehotaso.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchIn": "Hae keskustelusta \"{chat}\"...", "@searchIn": { "type": "String", @@ -2934,18 +2541,6 @@ }, "searchMore": "Hae lisää...", "@searchMore": {}, - "databaseBuildErrorBody": "SQlite-tietokantaa ei voida rakentaa. Sovellus yrittää toistaiseksi käyttää vanhaa tietokantaa. Ilmoita tästä virheestä kehittäjille osoitteessa {url}. Virheviesti on: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Istuntosi on menetetty. Ilmoita tästä virheestä kehittäjille osoitteessa {url}. Virheviesti on: {error}", "@sessionLostBody": { "type": "String", @@ -2970,15 +2565,6 @@ } } }, - "forwardMessageTo": "Lähetätkö viestin edelleen kohteeseen {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Lähetä lukukuittaukset", "@sendReadReceipts": {}, "sendTypingNotificationsDescription": "Muut keskustelun osallistujat näkevät, milloin olet kirjoittamassa uutta viestiä.", @@ -3149,12 +2735,6 @@ "@sendCanceled": {}, "loginWithMatrixId": "Kirjaudu sisään Matrix-tunnuksella", "@loginWithMatrixId": {}, - "discoverHomeservers": "Tutustu kotipalvelimiin", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "Mikä on kotipalvelin?", - "@whatIsAHomeserver": {}, - "homeserverDescription": "Kaikki tietosi tallennetaan kotipalvelimelle, aivan kuten sähköpostipalveluntarjoaja. Voit valita, mitä kotipalvelinta haluat käyttää, ja silti kommunikoida kaikkien kanssa. Lisätietoja osoitteessa https://matrix.org.", - "@homeserverDescription": {}, "doesNotSeemToBeAValidHomeserver": "Ei näytä olevan yhteensopiva kotipalvelin. Väärä URL-osoite?", "@doesNotSeemToBeAValidHomeserver": {}, "calculatingFileSize": "Lasketaan tiedoston kokoa...", @@ -3239,8 +2819,6 @@ "@appWantsToUseForLoginDescription": {}, "waitingForServer": "Odotetaan palvelinta...", "@waitingForServer": {}, - "appIntroduction": "FluffyChatin avulla voit keskustella ystäviesi kanssa eri pikaviestimien kautta. Lue lisää osoitteesta https://matrix.org tai napauta *Jatka*.", - "@appIntroduction": {}, "newChatRequest": "📩 Uusi pikakeskustelupyyntö", "@newChatRequest": {}, "contentNotificationSettings": "Sisältöilmoitusten asetukset", @@ -3396,10 +2974,6 @@ "@noMessagesYet": {}, "longPressToRecordVoiceMessage": "Pitkä painallus ääniviestin tallentamiseksi.", "@longPressToRecordVoiceMessage": {}, - "newSubSpace": "Uusi alitila", - "@newSubSpace": {}, - "moveToDifferentSpace": "Siirry eri tilaan", - "@moveToDifferentSpace": {}, "removeFromSpaceDescription": "Pikakeskustelu poistetaan tilasta, mutta se näkyy edelleen pikakeskusteluluettelossasi.", "@removeFromSpaceDescription": {}, "countChats": "{chats} pikakeskustelua", @@ -3429,8 +3003,6 @@ } } }, - "donate": "Lahjoita", - "@donate": {}, "startedAPoll": "{username} aloitti kyselyn.", "@startedAPoll": { "type": "String", @@ -3446,8 +3018,6 @@ "@endPoll": {}, "answersVisible": "Vastaukset näkyvissä", "@answersVisible": {}, - "answersHidden": "Vastaukset piilotettu", - "@answersHidden": {}, "pollQuestion": "Kyselykysymys", "@pollQuestion": {}, "answerOption": "Vastausvaihtoehto", @@ -3484,4 +3054,4 @@ "@thread": {}, "backToMainChat": "Takaisin pääpikakeskusteluun", "@backToMainChat": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index 414c52d4..4814eb47 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -29,8 +29,6 @@ }, "confirmMatrixId": "Paki-kumpirma ang iyong Matrix ID para burahin ang iyong account.", "@confirmMatrixId": {}, - "addChatDescription": "Magdagdag ng deskripsyon ng chat...", - "@addChatDescription": {}, "admin": "Admin", "@admin": { "type": "String", @@ -207,8 +205,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Nadagdag ang chat sa space na ito", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Mga Chat", "@chats": { "type": "String", @@ -317,18 +313,6 @@ }, "sendOnEnter": "Ipadala sa pagpindot ng enter", "@sendOnEnter": {}, - "badServerVersionsException": "Ang homeserver ay sinusuportahan ang mga Spec bersyon:\n{serverVersions}\nNgunit sinusuportahan lang ng app ang {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Pagbawalan sa chat", "@banFromChat": { "type": "String", @@ -339,11 +323,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Mga mensahe ng bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Kanselahin", "@cancel": { "type": "String", @@ -510,11 +489,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Kumpirmahin", - "@confirm": { - "type": "String", - "placeholders": {} - }, "compareNumbersMatch": "Paki-kumpara ang mga numero", "@compareNumbersMatch": { "type": "String", @@ -580,11 +554,6 @@ "type": "String", "placeholders": {} }, - "allRooms": "Lahat ng Mga Group Chat", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "downloadFile": "I-download ang file", "@downloadFile": { "type": "String", @@ -728,16 +697,6 @@ "type": "String", "placeholders": {} }, - "connect": "Kumonekta", - "@connect": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Naglalaman ng display name", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "create": "Gumawa", "@create": { "type": "String", @@ -755,33 +714,6 @@ } } }, - "dateWithoutYear": "{month}/{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{month}/{day}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Ide-deactivate nito ang iyong user account. Hindi na ito maaaring bawiin! Sigurado ka?", "@deactivateAccountWarning": { "type": "String", @@ -833,11 +765,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Kailangan mong pumili ng emote shortcode at isang larawan!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "enableEmotesGlobally": "I-enable ang emote pack globally", "@enableEmotesGlobally": { "type": "String", @@ -859,11 +786,6 @@ }, "homeserver": "Homeserver", "@homeserver": {}, - "enterYourHomeserver": "Ilagay ang iyong homeserver", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "extremeOffensive": "Lubhang nakakasakit", "@extremeOffensive": { "type": "String", @@ -889,11 +811,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Naglalaman ng username", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Inulat ang nilalaman sa mga pangangasiwa ng server", "@contentHasBeenReported": { "type": "String", @@ -976,18 +893,6 @@ }, "space": "Espasyo", "@space": {}, - "countChatsAndCountParticipants": "{chats} mga chat at {participants} mga kasali", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "guestsAreForbidden": "Pinagbabawal ang mga bisita", "@guestsAreForbidden": { "type": "String", @@ -1013,11 +918,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Pumunta sa bagong room", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupo", "@group": { "type": "String", @@ -1027,8 +927,6 @@ "@swipeRightToLeftToReply": {}, "noMoreChatsFound": "Wala nang mga chat na nahanap…", "@noMoreChatsFound": {}, - "joinedChats": "Mga nasaling chat", - "@joinedChats": {}, "unread": "Hindi nabasa", "@unread": {}, "spaces": "Mga Espasyo", @@ -1060,4 +958,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 74e993c8..4c6b6042 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -131,18 +131,6 @@ } } }, - "badServerVersionsException": "Le serveur d'accueil prend en charge les versions des spécifications :\n{serverVersions}\nMais cette application ne prend en charge que {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Bannir de la discussion", "@banFromChat": { "type": "String", @@ -175,11 +163,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Messages de bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Annuler", "@cancel": { "type": "String", @@ -393,8 +376,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "La discussion a été ajoutée à cet espace", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Discussions", "@chats": { "type": "String", @@ -511,31 +492,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Confirmer", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Se connecter", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Le contact a été invité au groupe", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Contient un nom d'affichage", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Contient un nom d'utilisateur·ice", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Le contenu a été signalé aux administrateurs du serveur", "@contentHasBeenReported": { "type": "String", @@ -615,33 +576,6 @@ } } }, - "dateWithoutYear": "{day}/{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Cette opération va désactiver votre compte. Une fois cette action effectuée, aucun retour en arrière n'est possible ! Êtes-vous sûr·e ?", "@deactivateAccountWarning": { "type": "String", @@ -747,11 +681,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Vous devez sélectionner un raccourci d'émoticône et une image !", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Discussion vide", "@emptyChat": { "type": "String", @@ -801,11 +730,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Renseignez votre serveur d'accueil", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Erreur lors de l'obtention de la localisation : {error}", "@errorObtainingLocation": { "type": "String", @@ -855,11 +779,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Aller dans le nouveau salon", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Groupe", "@group": { "type": "String", @@ -931,11 +850,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identité", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorer", "@ignore": { "type": "String", @@ -997,11 +911,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Inviter pour moi", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} vous a invité·e sur FluffyChat.\n1. Visiter fluffychat.im et installer l'application\n2. Inscrivez-vous ou connectez-vous\n3. Ouvrez le lien d'invitation :\n{link}", "@inviteText": { "type": "String", @@ -1081,11 +990,6 @@ "type": "String", "placeholders": {} }, - "license": "Licence", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Clair", "@lightTheme": { "type": "String", @@ -1139,11 +1043,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Changements de membres", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Mentionner", "@mention": { "type": "String", @@ -1251,11 +1150,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notifications activées pour ce compte", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} utilisateur·ices écrivent…", "@numUsersTyping": { "type": "String", @@ -1355,11 +1249,6 @@ "type": "String", "placeholders": {} }, - "people": "Personnes", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Choisir une image", "@pickImage": { "type": "String", @@ -1379,11 +1268,6 @@ } } }, - "pleaseChoose": "Veuillez choisir", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Veuillez choisir un code d’accès", "@pleaseChooseAPasscode": { "type": "String", @@ -1477,11 +1361,6 @@ } } }, - "rejoin": "Rejoindre de nouveau", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Supprimer", "@remove": { "type": "String", @@ -1501,11 +1380,6 @@ } } }, - "removeDevice": "Supprimer l'appareil", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Débannissement de la discussion", "@unbanFromChat": { "type": "String", @@ -1561,15 +1435,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Vu par {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Envoyer", "@send": { "type": "String", @@ -1604,16 +1469,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Envoyer le fichier original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Envoyer un autocollant", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Envoyer une vidéo", "@sendVideo": { "type": "String", @@ -1678,21 +1533,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Définir des émoticônes personnalisées", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Créer un lien d'invitation", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Définir le niveau de permissions", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Définir le statut", "@setStatus": { "type": "String", @@ -1727,11 +1567,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Authentification unique", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Ignorer", "@skip": { "type": "String", @@ -1802,21 +1637,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Activer/désactiver en favori", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Activer/désactiver la sourdine", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Marquer comme lu / non lu", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Trop de requêtes. Veuillez réessayer plus tard !", "@tooManyRequestsWarning": { "type": "String", @@ -1883,15 +1703,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 discussion non lue} other{{unreadCount} discussions non lues}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} et {count} autres sont en train d'écrire…", "@userAndOthersAreTyping": { "type": "String", @@ -2016,11 +1827,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Image de fond :", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Attention !", "@warning": { "type": "String", @@ -2128,8 +1934,6 @@ "@messageInfo": {}, "removeFromSpace": "Supprimer de l’espace", "@removeFromSpace": {}, - "addToSpaceDescription": "Sélectionnez un espace pour y ajouter cette discussion.", - "@addToSpaceDescription": {}, "start": "Commencer", "@start": {}, "commandHint_create": "Créer un groupe de discussion vide\nUtilisez --no-encryption pour désactiver le chiffrement", @@ -2152,22 +1956,6 @@ "type": "String", "description": "Usage hint for the command /dm" }, - "openVideoCamera": "Ouvrir la caméra pour une vidéo", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "Publier", - "@publish": {}, - "videoWithSize": "Vidéo ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "dismiss": "Rejeter", "@dismiss": {}, "markAsRead": "Marquer comme lu", @@ -2206,39 +1994,6 @@ "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Appels vidéo expérimentaux", "@experimentalVideoCalls": {}, - "emailOrUsername": "Courriel ou identifiant", - "@emailOrUsername": {}, - "switchToAccount": "Passer au compte {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Compte suivant", - "@nextAccount": {}, - "previousAccount": "Compte précédent", - "@previousAccount": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Personnalisé", - "@widgetCustom": {}, - "widgetUrlError": "Ceci n'est pas un lien valide.", - "@widgetUrlError": {}, - "widgetNameError": "Veuillez fournir un nom d'affichage.", - "@widgetNameError": {}, - "errorAddingWidget": "Erreur lors de l'ajout du widget.", - "@errorAddingWidget": {}, - "widgetEtherpad": "Note textuelle", - "@widgetEtherpad": {}, - "addWidget": "Ajouter un widget", - "@addWidget": {}, - "widgetName": "Nom", - "@widgetName": {}, - "widgetVideo": "Vidéo", - "@widgetVideo": {}, "youRejectedTheInvitation": "Vous avez rejeté l'invitation", "@youRejectedTheInvitation": {}, "youJoinedTheChat": "Vous avez rejoint la discussion", @@ -2301,11 +2056,6 @@ } } }, - "separateChatTypes": "Séparer les discussions directes et les groupes", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "users": "Utilisateurs/trices", "@users": {}, "storeInAndroidKeystore": "Stocker dans Android KeyStore", @@ -2320,30 +2070,16 @@ "@hydrate": {}, "dehydrateWarning": "Cette action ne peut pas être annulée. Assurez-vous d'enregistrer convenablement le fichier de sauvegarde.", "@dehydrateWarning": {}, - "dehydrateTorLong": "Pour les utilisateurs/trices de TOR, il est recommandé d'exporter la session avant de fermer la fenêtre.", - "@dehydrateTorLong": {}, "recoveryKey": "Clé de récupération", "@recoveryKey": {}, "recoveryKeyLost": "Clé de récupération perdue ?", "@recoveryKeyLost": {}, - "indexedDbErrorLong": "Le stockage des messages n'est malheureusement pas activé par défaut en mode privé.\nVeuillez consulter :\n - about:config\n - Définir dom.indexedDB.privateBrowsing.enabled à « vrai ».\nSinon, il n'est pas possible d'exécuter FluffyChat.", - "@indexedDbErrorLong": {}, "saveKeyManuallyDescription": "Enregistrer cette clé manuellement en déclenchant la boîte de dialogue de partage du système ou le presse-papiers.", "@saveKeyManuallyDescription": {}, "storeInSecureStorageDescription": "Stocker la clé de récupération dans un espace sécurisé de cet appareil.", "@storeInSecureStorageDescription": {}, - "indexedDbErrorTitle": "Problèmes relatifs au mode privé", - "@indexedDbErrorTitle": {}, "dehydrate": "Exporter la session et effacer l'appareil", "@dehydrate": {}, - "dehydrateTor": "Utilisateurs/trices de TOR : Exporter la session", - "@dehydrateTor": {}, - "hydrateTor": "Utilisateurs/trices de TOR : Importer une session exportée", - "@hydrateTor": {}, - "hydrateTorLong": "Vous avez exporté votre session la dernière fois sur TOR ? Importez-la rapidement et continuez à discuter.", - "@hydrateTorLong": {}, - "pleaseEnterRecoveryKey": "Veuillez saisir votre clé de récupération :", - "@pleaseEnterRecoveryKey": {}, "pleaseEnterRecoveryKeyDescription": "Pour déverrouiller vos anciens messages, veuillez entrer votre clé de récupération qui a été générée lors d'une session précédente. Votre clé de récupération n'est PAS votre mot de passe.", "@pleaseEnterRecoveryKeyDescription": {}, "unlockOldMessages": "Déverrouiller les anciens messages", @@ -2360,8 +2096,6 @@ }, "noKeyForThisMessage": "Cela peut se produire si le message a été envoyé avant que vous ne vous soyez connecté à votre compte sur cet appareil.\n\nIl est également possible que l'expéditeur ait bloqué votre appareil ou qu'un problème de connexion Internet se soit produit.\n\nÊtes-vous capable de lire le message sur une autre session ? Vous pouvez alors transférer le message à partir de celle-ci ! Allez dans Paramètres > Appareils et assurez-vous que vos appareils se sont vérifiés mutuellement. Lorsque vous ouvrirez le salon la fois suivante et que les deux sessions seront au premier plan, les clés seront transmises automatiquement.\n\nVous ne voulez pas perdre les clés en vous déconnectant ou en changeant d'appareil ? Assurez-vous que vous avez activé la sauvegarde de la discussion dans les paramètres.", "@noKeyForThisMessage": {}, - "enterRoom": "Entrer dans le salon", - "@enterRoom": {}, "allSpaces": "Tous les espaces", "@allSpaces": {}, "commandHint_markasdm": "Marquer comme salon de messages directs pour l'identifiant Matrix indiqué", @@ -2387,35 +2121,10 @@ "@screenSharingTitle": {}, "screenSharingDetail": "Vous partagez votre écran dans FuffyChat", "@screenSharingDetail": {}, - "callingPermissions": "Permissions d'appel", - "@callingPermissions": {}, - "callingAccount": "Compte d'appel", - "@callingAccount": {}, - "callingAccountDetails": "Permet à FluffyChat d'utiliser l'application de numérotation native d'Android.", - "@callingAccountDetails": {}, - "appearOnTop": "Apparaître en haut", - "@appearOnTop": {}, - "appearOnTopDetails": "Permet à l'application d'apparaître en haut de l'écran (non nécessaire si vous avez déjà configuré Fluffychat comme compte d'appel)", - "@appearOnTopDetails": {}, - "otherCallingPermissions": "Microphone, caméra et autres autorisations de FluffyChat", - "@otherCallingPermissions": {}, "newGroup": "Nouveau groupe", "@newGroup": {}, "newSpace": "Nouvel espace", "@newSpace": {}, - "enterSpace": "Entrer dans l’espace", - "@enterSpace": {}, - "numChats": "{number} discussions", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Masquer les événements d'état sans importance", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "Ne plus afficher", "@doNotShowAgain": {}, "commandHint_googly": "Envoyer des yeux écarquillés", @@ -2466,8 +2175,6 @@ "@sorryThatsNotPossible": {}, "deviceKeys": "Clés de l’appareil :", "@deviceKeys": {}, - "startFirstChat": "Commencez votre première discussion", - "@startFirstChat": {}, "newSpaceDescription": "Les espaces vous permettent de consolider vos conversations et de construire des communautés privées ou publiques.", "@newSpaceDescription": {}, "disableEncryptionWarning": "Pour des raisons de sécurité, vous ne pouvez pas désactiver le chiffrement dans une discussion s'il a été activé avant.", @@ -2493,17 +2200,10 @@ "@jumpToLastReadMessage": {}, "readUpToHere": "Lisez jusqu’ici", "@readUpToHere": {}, - "allRooms": "Tous les groupes de discussion", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "chatPermissions": "Permissions du salon", "@chatPermissions": {}, "importFromZipFile": "Importer depuis un fichier .zip", "@importFromZipFile": {}, - "inviteContactToGroupQuestion": "Voulez-vous inviter {contact} au salon \"{groupName}\" ?", - "@inviteContactToGroupQuestion": {}, "importEmojis": "Importer des Emojis", "@importEmojis": {}, "notAnImage": "Pas un fichier image.", @@ -2533,8 +2233,6 @@ "@directChat": {}, "optionalRedactReason": "(Facultatif) Raison de la suppression de ce message...", "@optionalRedactReason": {}, - "subspace": "Sous-espace", - "@subspace": {}, "sendTypingNotifications": "Envoyer des notifications de frappe", "@sendTypingNotifications": {}, "replace": "Remplacer", @@ -2550,14 +2248,10 @@ "@chatDescription": {}, "invalidServerName": "Nom de serveur invalide", "@invalidServerName": {}, - "addChatDescription": "Ajouter une description à la discussion...", - "@addChatDescription": {}, "shareInviteLink": "Partager un lien d'invitation", "@shareInviteLink": {}, "openLinkInBrowser": "Ouvrir le lien dans le navigateur", "@openLinkInBrowser": {}, - "setTheme": "Définir le thème :", - "@setTheme": {}, "setColorTheme": "Définir la couleur du thème :", "@setColorTheme": {}, "databaseMigrationBody": "Veuillez patienter. Cela peut prendre un moment.", @@ -2568,8 +2262,6 @@ "@passwordsDoNotMatch": {}, "passwordIsWrong": "Votre mot de passe saisi est erroné", "@passwordIsWrong": {}, - "publicLink": "Lien public", - "@publicLink": {}, "joinSpace": "Rejoindre l'espace", "@joinSpace": {}, "publicSpaces": "Espaces publics", @@ -2584,20 +2276,6 @@ "@sendTypingNotificationsDescription": {}, "verifyOtherDevice": "🔐 Vérifier l'autre appareil", "@verifyOtherDevice": {}, - "databaseBuildErrorBody": "La base de données SQlite ne peut pas être créée. L'application essaie d'utiliser la base de données existante pour le moment. Veuillez signaler cette erreur aux développeurs à {url}. Le message d'erreur est le suivant : {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "startConversation": "Démarrer la conversation", - "@startConversation": {}, "formattedMessagesDescription": "Affichez le contenu formaté des messages comme du texte en gras à l'aide de markdown.", "@formattedMessagesDescription": {}, "incomingMessages": "Messages entrants", @@ -2611,24 +2289,12 @@ } } }, - "pleaseTryAgainLaterOrChooseDifferentServer": "Veuillez réessayer plus tard ou choisir un autre serveur.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "inviteGroupChat": "📨 Inviter à une discussion de groupe", "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Inviter à une discussion privée", - "@invitePrivateChat": {}, "jump": "Sauter", "@jump": {}, - "signInWithPassword": "Se connecter avec mot de passe", - "@signInWithPassword": {}, - "hideMemberChangesInPublicChats": "Masquer les modifications de membres dans les discussions publiques", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Ne pas afficher dans la chronologie de la discussion si quelqu'un rejoint ou quitte une discussion publique afin d'améliorer la lisibilité.", - "@hideMemberChangesInPublicChatsBody": {}, "overview": "Aperçu", "@overview": {}, - "notifyMeFor": "Me notifier pour", - "@notifyMeFor": {}, "passwordRecoverySettings": "Paramètres de récupération de mot de passe", "@passwordRecoverySettings": {}, "hasKnocked": "🚪 {user} a frappé", @@ -2736,34 +2402,11 @@ }, "setChatDescription": "Définir la description de la discussion", "@setChatDescription": {}, - "presenceStyle": "Statut :", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Afficher les messages de statut des autres utilisateurs/trices", "@presencesToggle": { "type": "String", "placeholders": {} }, - "youInvitedToBy": "📩 Vous avez été invité par lien à :\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "userWouldLikeToChangeTheChat": "{user} souhaite rejoindre la discussion.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Aucun lien public n'a encore été crée", - "@noPublicLinkHasBeenCreatedYet": {}, "gallery": "Galerie", "@gallery": {}, "files": "Fichiers", @@ -2789,15 +2432,6 @@ } } }, - "forwardMessageTo": "Transférer le message à {roomName} ?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceiptsDescription": "Les autres participants à une discussion peuvent voir si vous avez lu un message.", "@sendReadReceiptsDescription": {}, "formattedMessages": "Messages formatés", @@ -2847,15 +2481,6 @@ "@restricted": {}, "knockRestricted": "Frapper à la porte limité", "@knockRestricted": {}, - "signInWith": "Se connecter avec {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "groupCanBeFoundViaSearch": "Le groupe peut être trouvé via la recherche", "@groupCanBeFoundViaSearch": {}, "groupName": "Nom du groupe", @@ -2866,24 +2491,10 @@ "@block": {}, "removeDevicesDescription": "Vous serez déconnecté de cet appareil et ne pourrez plus recevoir de messages.", "@removeDevicesDescription": {}, - "userRole": "Rôle de l'utilisateur/trice", - "@userRole": {}, "createNewAddress": "Créer une nouvelle adresse", "@createNewAddress": {}, "publicChatAddresses": "Addresses de discussion publiques", "@publicChatAddresses": {}, - "countChatsAndCountParticipants": "{chats} discussions et {participants} participants", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "space": "Espace", "@space": {}, "spaces": "Espaces", @@ -2892,8 +2503,6 @@ "@noMoreChatsFound": {}, "unread": "Non lu", "@unread": {}, - "joinedChats": "Discussions rejointes", - "@joinedChats": {}, "commandHint_sendraw": "Envoyer du JSON brut", "@commandHint_sendraw": {}, "databaseMigrationTitle": "La base de données est optimisée", @@ -2942,8 +2551,6 @@ "@newPassword": {}, "pleaseChooseAStrongPassword": "Veuillez choisir un mot de passe fort", "@pleaseChooseAStrongPassword": {}, - "decline": "Refuser", - "@decline": {}, "initAppError": "Une erreur est survenue pendant l'initialisation de l'application", "@initAppError": {}, "markAsUnread": "Marquer comme non lu", @@ -2971,15 +2578,6 @@ "@roomUpgradeDescription": {}, "learnMore": "En savoir plus", "@learnMore": {}, - "minimumPowerLevel": "{level} est le niveau minimum de droits.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "restoreSessionBody": "L'application tente maintenant de restaurer votre session depuis la sauvegarde. Veuillez signaler cette erreur aux développeurs à {url}. Le message d'erreur est le suivant : {error}", "@restoreSessionBody": { "type": "String", @@ -2992,8 +2590,6 @@ } } }, - "profileNotFound": "Cet utilisateur/trice n'a pu être trouvé sur le serveur. Peut-être est-ce un problème de connexion ou l'utilisateur/trice n'existe pas.", - "@profileNotFound": {}, "archiveRoomDescription": "La discussion sera déplacée dans les archives. Les autres utilisateurs/trices pourront voir que vous avez quitté la discussion.", "@archiveRoomDescription": {}, "noUsersFoundWithQuery": "Malheureusement, aucun utilisateur/trice n'a pu être trouvé avec \"{query}\". Veuillez vérifier si vous n'avez pas fait de faute de frappe.", @@ -3089,14 +2685,8 @@ }, "loginWithMatrixId": "Connexion avec l'identifiant Matrix", "@loginWithMatrixId": {}, - "setCustomPermissionLevel": "Définir un niveau d’autorisation", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Veuillez choisir un rôle prédéfini ci-dessous ou saisir un niveau d’autorisation entre 0 et 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Ignorer l'utilisateur", "@ignoreUser": {}, - "normalUser": "Utilisateur standard", - "@normalUser": {}, "checkList": "Check-list", "@checkList": {}, "countInvited": "{count} invité(e/s)", @@ -3117,8 +2707,6 @@ } } }, - "homeserverDescription": "Toutes vos données sont stockées sur le serveur de votre fournisseur matrix, comme chez un fournisseur d'e-mails. Vous pouvez choisir le serveur que vous souhaitez utiliser, tout en pouvant communiquer avec tout le monde. Pour en savoir plus, rendez-vous sur https://matrix.org.", - "@homeserverDescription": {}, "calculatingFileSize": "Calcul en cours...", "@calculatingFileSize": {}, "prepareSendingAttachment": "Préparation à l'envoi...", @@ -3164,4 +2752,4 @@ "@addLink": {}, "allowMultipleAnswers": "Autoriser plusieurs réponses", "@allowMultipleAnswers": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index bd9e47f0..018e2283 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -14,11 +14,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Cúlbhrat:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "verify": "Deimhnigh", "@verify": { "type": "String", @@ -110,11 +105,6 @@ "type": "String", "placeholders": {} }, - "rejoin": "Téigh ar ais isteach", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "reject": "Diúltaigh", "@reject": { "type": "String", @@ -145,11 +135,6 @@ "type": "String", "placeholders": {} }, - "people": "Daoine", - "@people": { - "type": "String", - "placeholders": {} - }, "password": "Pasfhocal", "@password": { "type": "String", @@ -269,11 +254,6 @@ "type": "String", "placeholders": {} }, - "license": "Ceadúnas", - "@license": { - "type": "String", - "placeholders": {} - }, "leave": "Fág", "@leave": { "type": "String", @@ -294,11 +274,6 @@ "type": "String", "placeholders": {} }, - "identity": "Aitheantas", - "@identity": { - "type": "String", - "placeholders": {} - }, "id": "ID", "@id": { "type": "String", @@ -360,33 +335,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithoutYear": "{day}/{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "dateAndTimeOfDay": "{date}, {timeOfDay}", "@dateAndTimeOfDay": { "type": "String", @@ -399,11 +347,6 @@ } } }, - "containsUserName": "Coinníonn sé ainm úsáideora", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "configureChat": "Cumraigh comhrá", "@configureChat": { "type": "String", @@ -462,11 +405,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Teachtaireachtaí bota", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "blocked": "Bactha", "@blocked": { "type": "String", @@ -602,7 +540,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "An bhfuil cead ag aoi-úsáideoirí a bheith páirteach", + "areGuestsAllowedToJoin": "An bhfuil cead ag úsáideoirí aoi páirt a ghlacadh?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -653,11 +591,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Cuir isteach do fhreastalaí baile", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "emoteInvalid": "Gearrchód emote neamhbhailí!", "@emoteInvalid": { "type": "String", @@ -763,7 +696,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Cuireadh comhrá leis an spás seo", "chatBackupDescription": "Tá do theachtaireachtaí slán le heochair aisghabhála. Déan cinnte nach gcaillfidh tú í.", "@chatBackupDescription": { "type": "String", @@ -917,11 +849,6 @@ "type": "String", "placeholders": {} }, - "containsDisplayName": "Coinníonn sé ainm taispeána", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "commandHint_plain": "Seol téacs neamhfhoirmithe", "@commandHint_plain": { "type": "String", @@ -982,21 +909,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Marcáil Léite/Neamhléite", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Scoránaigh mar ciúnaithe", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "Scoránaigh mar ceann is fearr leat", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "theyMatch": "Tá siad céanna", "@theyMatch": { "type": "String", @@ -1032,16 +944,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Seol greamán", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendOriginal": "Seol an bunchóip", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendMessages": "Seol teachtaireachtaí", "@sendMessages": { "type": "String", @@ -1082,11 +984,6 @@ "type": "String", "placeholders": {} }, - "removeDevice": "Bain gléas", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "redactMessage": "Bain teachtaireacht amach", "@redactMessage": { "type": "String", @@ -1102,11 +999,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Roghnaigh le do thoil", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "play": "Seinn {fileName}", "@play": { "type": "String", @@ -1151,11 +1043,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Athruithe ball", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "loadMore": "Lódáil níos mó…", "@loadMore": { "type": "String", @@ -1256,16 +1143,6 @@ "type": "String", "placeholders": {} }, - "connect": "Ceangail", - "@connect": { - "type": "String", - "placeholders": {} - }, - "confirm": "Dearbhaigh", - "@confirm": { - "type": "String", - "placeholders": {} - }, "close": "Dún", "@close": { "type": "String", @@ -1472,11 +1349,6 @@ } } }, - "goToTheNewRoom": "Téigh go dtí an seomra nua", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Earráid maidir le suíomh a fháil: {error}", "@errorObtainingLocation": { "type": "String", @@ -1515,11 +1387,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Caithfidh tú gearrchód straoiseoige agus íomhá a roghnú!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emotePacks": "Pacáistí straoiseoige don seomra", "@emotePacks": { "type": "String", @@ -1575,18 +1442,6 @@ } } }, - "badServerVersionsException": "Tá na leaganacha sonraíochta seo ar fáil faoin freastalaí baile:\n{serverVersions}\nAch níl ach na ceann seo ar fáil faoin aip seo {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "badServerLoginTypesException": "Tá na cineálacha logála isteach seo ar fáil faoin freastalaí baile:\n{serverVersions}\nAch níl ach na ceann seo ar fáil faoin aip seo:\n{supportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -1687,15 +1542,6 @@ } } }, - "unreadChats": "{unreadCount, plural, =1{1 comhrá neamhléite} other{{unreadCount} comhráite neamhléite}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "unknownEncryptionAlgorithm": "Algartam criptithe anaithnid", "@unknownEncryptionAlgorithm": { "type": "String", @@ -1742,21 +1588,6 @@ } } }, - "setPermissionsLevel": "Socraigh leibhéal ceadanna", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Socraigh nasc cuiridh", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "Socraigh straoiseoga saincheaptha", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Socraigh mar phríomh-ailias", "@setAsCanonicalAlias": { "type": "String", @@ -1855,7 +1686,7 @@ "type": "String", "placeholders": {} }, - "pleaseEnterYourPin": "Cuir isteach d'uimhir PIN le do thoil", + "pleaseEnterYourPin": "Cuir isteach do uap le do thoil", "@pleaseEnterYourPin": { "type": "String", "placeholders": {} @@ -1930,11 +1761,6 @@ } } }, - "notificationsEnabledForThisAccount": "Fógraí cumasaithe don chuntas seo", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "noRoomsFound": "Níor aimsíodh aon seomraí…", "@noRoomsFound": { "type": "String", @@ -1945,11 +1771,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Tabhair cuireadh dom", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "weSentYouAnEmail": "Sheolamar ríomhphost chugat", "@weSentYouAnEmail": { "type": "String", @@ -2039,11 +1860,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Sínigh Aonair ar", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "sentAnAudio": "🎤 sheol {username} fuaim", "@sentAnAudio": { "type": "String", @@ -2071,15 +1887,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Le feiceáil ag {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "roomHasBeenUpgraded": "Uasghrádaíodh an seomra", "@roomHasBeenUpgraded": { "type": "String", @@ -2099,14 +1906,8 @@ "description": "Usage hint for the command /clearcache" }, "videoCallsBetaWarning": "Tabhair faoi deara go bhfuil físglaonna i béite. B'fhéidir nach bhfeidhmíonn siad ar gach ardán chomh atá súil aige ná ar bith.", - "emailOrUsername": "Ríomhphost nó ainm úsáideora", "repeatPassword": "Scríobh an pasfhocal arís", "yourChatBackupHasBeenSetUp": "Bunaíodh do chúltaca comhrá.", - "openVideoCamera": "Oscail físcheamara", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "fileHasBeenSavedAt": "Sábháladh an comhad ag {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2118,12 +1919,9 @@ }, "editBundlesForAccount": "Cuir cuachta in eagar don chuntas seo", "globalChatId": "Aitheantas comhrá domhanda", - "hideMemberChangesInPublicChatsBody": "Ná taispeáin san amlíne comhrá má théann duine isteach i gcomhrá poiblí nó má fhágann sé nó sí é chun inléiteacht a fheabhsú.", - "pleaseEnterRecoveryKey": "Cuir isteach d'eochair athshlánaithe le do thoil:", "sender": "Seoltóir", "noOneCanJoin": "Ní féidir le duine ar bith páirt a ghlacadh", "noOtherDevicesFound": "Níor aimsíodh aon ghléas eile", - "profileNotFound": "Níorbh fhéidir an t-úsáideoir a aimsiú ar an bhfreastalaí. B'fhéidir go bhfuil fadhb nasctha ann nó nach bhfuil an t-úsáideoir ann.", "inviteGroupChat": "📨 Cuireadh chuig comhrá grúpa", "knocking": "Cnagadh", "addChatOrSubSpace": "Cuir comhrá nó fo-spás leis", @@ -2159,9 +1957,7 @@ } } }, - "addToSpaceDescription": "Roghnaigh spás chun an comhrá seo a chur leis.", "markAsRead": "Marcáil mar léite", - "enterRoom": "Iontráil seomra", "deviceKeys": "Eochracha gléis:", "allSpaces": "Gach spás", "searchForUsers": "Cuardaigh @users...", @@ -2192,41 +1988,17 @@ "unbanUserDescription": "Beidh an t-úsáideoir in ann dul isteach sa chomhrá arís má dhéanann siad iarracht.", "pleaseEnterYourCurrentPassword": "Iontráil do phasfhocal reatha le do thoil", "newPassword": "Pasfhocal nua", - "subspace": "Fospás", - "decline": "Meath", - "forwardMessageTo": "Seol teachtaireacht ar aghaidh chuig {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Seol admhálacha léite", "formattedMessagesDescription": "Taispeáin ábhar saibhir teachtaireachta cosúil le téacs trom ag baint úsáide as marcáil síos.", "verifyOtherUser": "🔐 Fíoraigh úsáideoir eile", - "dehydrateTorLong": "Maidir le húsáideoirí TOR, moltar an seisiún a onnmhairiú roimh dhúnadh an fhuinneog.", - "numChats": "Comhráite {number}", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "hidePresences": "Folaigh Liosta Stádais?", "jump": "Léim", "reportErrorDescription": "😭 Ó, a mhac go deo. Chuaigh rud éigin mícheart. Más mian leat, is féidir leat an fabht seo a thuairisciú do na forbróirí.", - "setTheme": "Socraigh téama:", "invalidInput": "Ionchur neamhbhailí!", "kickUserDescription": "Ciceáiltear an t-úsáideoir as an gcomhrá ach níl cosc air. I gcomhráite poiblí, is féidir leis an úsáideoir teacht ar ais ag am ar bith.", - "startConversation": "Tosaigh comhrá", "commandHint_sendraw": "Seol json amh", "leaveEmptyToClearStatus": "Fág folamh chun do stádas a ghlanadh.", "pleaseChooseAStrongPassword": "Roghnaigh pasfhocal láidir", - "publicLink": "Nasc poiblí", "joinSpace": "Glac páirt sa spás", "initAppError": "Tharla earráid agus an feidhmchlár á thosú", "requestedKeyVerification": "D'iarr {sender} fíorú eochrach", @@ -2241,8 +2013,6 @@ "incomingMessages": "Teachtaireachtaí isteach", "transparent": "Trédhearcach", "voiceCall": "Glao gutha", - "widgetVideo": "Físeán", - "errorAddingWidget": "Earráid agus an ghiuirléid á cur leis.", "emojis": "Emojis", "reportUser": "Déan tuairisc ar úsáideoir", "custom": "Saincheaptha", @@ -2260,7 +2030,6 @@ "newGroup": "Grúpa nua", "newSpace": "Spás nua", "confirmMatrixId": "Deimhnigh d’ID Maitrís chun do chuntas a scriosadh.", - "hideMemberChangesInPublicChats": "Cuir athruithe ball i gcomhráite poiblí i bhfolach", "confirmEventUnpin": "An bhfuil tú cinnte an t-imeacht a dhíphionnáil go buan?", "hugContent": "Tugann {senderName} barróg duit", "@hugContent": { @@ -2273,37 +2042,12 @@ }, "unread": "Neamhléite", "noChatsFoundHere": "Níor aimsíodh aon chomhrá anseo fós. Cuir tús le comhrá nua le duine éigin tríd an gcnaipe thíos a úsáid. ⤵️", - "separateChatTypes": "Comhráite Díreacha agus Grúpaí ar Leith", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Físeán ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "messageInfo": "Eolas teachtaireachta", "messageType": "Cineál Teachtaireachta", "pleaseEnterRecoveryKeyDescription": "Chun do sheanteachtaireachtaí a dhíghlasáil, cuir isteach d'eochair athshlánaithe a gineadh i seisiún eile. NÍ do phasfhocal í d'eochair athshlánaithe.", "openChat": "Oscail Comhrá", "unsupportedAndroidVersionLong": "Éilíonn an ghné seo leagan Android níos nuaí. Seiceáil le haghaidh nuashonruithe nó tacaíocht Lineage OS.", "experimentalVideoCalls": "Glaonna físe turgnamhacha", - "switchToAccount": "Athraigh go cuntas {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "addWidget": "Cuir giuirléid leis", - "widgetUrlError": "Ní URL bailí é seo.", "invitedBy": "📩 Cuireadh ó {user}", "@invitedBy": { "placeholders": { @@ -2328,14 +2072,6 @@ } } }, - "userWouldLikeToChangeTheChat": "Ba mhaith le {user} páirt a ghlacadh sa chomhrá.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "knock": "Cnoc Mhuire", "storeInSecureStorageDescription": "Stóráil an eochair aisghabhála i stóráil slán an ghléis seo.", "countFiles": "Comhaid {count}", @@ -2348,12 +2084,6 @@ }, "foregroundServiceRunning": "Tá an fógra seo le feiceáil nuair atá an tseirbhís tulra ag rith.", "screenSharingDetail": "Tá do scáileán á roinnt agat i FuffyChat", - "callingPermissions": "Ceadanna a ghlaoch", - "callingAccount": "Cuntas ag glaoch", - "callingAccountDetails": "Ceadaíonn FluffyChat an aip dhiailiú android dúchais a úsáid.", - "appearOnTopDetails": "Ceadaíonn sé don aip a bheith ar bharr (ní gá má tá socrú Fluffychat agat cheana féin mar chuntas glao)", - "otherCallingPermissions": "Micreafón, ceamara agus ceadanna FluffyChat eile", - "hideUnimportantStateEvents": "Folaigh imeachtaí stáit gan tábhacht", "disableEncryptionWarning": "Ar chúiseanna slándála ní féidir leat criptiú a dhíchumasú i gcomhrá, áit ar cumasaíodh é roimhe seo.", "sorryThatsNotPossible": "Tá brón orm... nach féidir a dhéanamh", "reopenChat": "Comhrá a athoscailt", @@ -2370,18 +2100,6 @@ "jumpToLastReadMessage": "Léim go dtí an teachtaireacht léite is déanaí", "readUpToHere": "Léigh suas go dtí seo", "openLinkInBrowser": "Oscail nasc sa bhrabhsálaí", - "signInWithPassword": "Sínigh isteach le pasfhocal", - "pleaseTryAgainLaterOrChooseDifferentServer": "Bain triail eile as níos déanaí nó roghnaigh freastalaí eile.", - "signInWith": "Sínigh isteach le:", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "invitePrivateChat": "📨 Cuireadh chuig comhrá príobháideach", "wrongPinEntered": "Tháinig biorán mícheart isteach! Bain triail eile as i {seconds} soicind...", "@wrongPinEntered": { "type": "String", @@ -2425,18 +2143,6 @@ }, "passwordIsWrong": "Tá do phasfhocal iontrála mícheart", "files": "Comhaid", - "databaseBuildErrorBody": "Ní féidir bunachar sonraí SQlite a thógáil. Déanann an aip iarracht an bunachar sonraí oidhreachta a úsáid anois. Tuairiscigh an earráid seo do na forbróirí ag {url}. Is í an teachtaireacht earráide: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Cailltear do sheisiún. Tuairiscigh an earráid seo do na forbróirí ag {url}. Is í an teachtaireacht earráide: {error}", "@sessionLostBody": { "type": "String", @@ -2515,9 +2221,6 @@ "changelog": "ChangelogName", "sendCanceled": "Cealaíodh seoladh", "loginWithMatrixId": "Logáil isteach le Matrix-ID", - "discoverHomeservers": "Faigh amach faoi fhreastalaithe baile", - "whatIsAHomeserver": "Cad is freastalaí baile ann?", - "homeserverDescription": "Stóráiltear do chuid sonraí go léir ar an bhfreastalaí baile, díreach cosúil le soláthraí ríomhphoist. Is féidir leat an freastalaí baile is mian leat a úsáid a roghnú, agus is féidir leat cumarsáid a dhéanamh le gach duine fós. Foghlaim níos mó ag https://matrix.org.", "calculatingFileSize": "Méid an chomhaid á ríomh...", "sendingAttachment": "Iatán á sheoladh...", "generatingVideoThumbnail": "Mionsamhail físe á cruthú...", @@ -2585,9 +2288,8 @@ "invite": "Tabhair cuireadh", "publicSpaces": "Spásanna poiblí", "whyIsThisMessageEncrypted": "Cén fáth nach féidir an teachtaireacht seo a léamh?", - "pinMessage": "PIN go seomra", + "pinMessage": "Bioráin chuig an seomra", "dehydrate": "Easpórtáil seisiún agus gléas wipe", - "dehydrateTor": "Úsáideoirí TOR: Seisiún easpórtála", "commandHint_markasdm": "Marcáil mar sheomra teachtaireachta dírí don ID Maitrís tugtha", "googlyEyesContent": "Seolann {senderName} súile googly chugat", "@googlyEyesContent": { @@ -2600,11 +2302,9 @@ }, "commandHint_cuddle": "Seol cuddle", "commandHint_hug": "Seol barróg", - "startFirstChat": "Cuir tús le do chéad chomhrá", "encryptThisChat": "Criptigh an comhrá seo", "importNow": "Iompórtáil anois", "sendTypingNotifications": "Seol fógraí clóscríofa", - "addChatDescription": "Cuir cur síos ar an gcomhrá leis...", "chatPermissions": "Ceadanna comhrá", "emoteKeyboardNoRecents": "Beidh mothúcháin a úsáideadh le déanaí le feiceáil anseo ...", "@emoteKeyboardNoRecents": { @@ -2613,7 +2313,6 @@ }, "chatDescriptionHasBeenChanged": "Athraíodh cur síos ar an gcomhrá", "pushNotificationsNotAvailable": "Níl fógraí brú ar fáil", - "publish": "Foilsigh", "changeGeneralChatSettings": "Athraigh socruithe ginearálta comhrá", "sendRoomNotifications": "Seol fógraí @room", "changeTheDescriptionOfTheGroup": "Athraigh an cur síos ar an gcomhrá", @@ -2635,20 +2334,7 @@ } } }, - "countChatsAndCountParticipants": "{chats} comhrá agus {participants} rannpháirtí", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Níor aimsíodh a thuilleadh comhráite...", - "joinedChats": "Glacadh páirt i gcomhráite", "space": "Spás", "spaces": "Spásanna", "directChat": "Comhrá díreach", @@ -2666,11 +2352,6 @@ }, "recoveryKey": "Eochair athshlánaithe", "setChatDescription": "Socraigh cur síos ar an gcomhrá", - "presenceStyle": "Láithreacht:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Taispeáin teachtaireachtaí stádais ó úsáideoirí eile", "@presencesToggle": { "type": "String", @@ -2680,12 +2361,7 @@ "removeFromSpace": "Bain as spás", "placeCall": "Cuir glaoch", "unsupportedAndroidVersion": "Leagan Android gan tacaíocht", - "previousAccount": "Cuntas roimhe seo", - "widgetJitsi": "Jitsi le chéile", - "widgetCustom": "Saincheaptha", - "widgetName": "Ainm", "usersMustKnock": "Ní mór d'úsáideoirí cnag a chur ar", - "noPublicLinkHasBeenCreatedYet": "Níor cruthaíodh aon nasc poiblí go fóill", "storeSecurlyOnThisDevice": "Stóráil go daingean ar an ngléas seo", "userLevel": "{level} - Úsáideoir", "@userLevel": { @@ -2710,9 +2386,7 @@ "createGroup": "Cruthaigh grúpa", "noChatDescriptionYet": "Níl aon chur síos ar an gcomhrá cruthaithe fós.", "shareInviteLink": "Roinn an nasc cuireadh", - "notifyMeFor": "Cuir in iúl dom le haghaidh", "passwordRecoverySettings": "Socruithe athshlánaithe pasfhocal", - "widgetEtherpad": "Nóta téacs", "youKickedAndBanned": "🙅 Chiceáil tú agus chuir tú cosc ar {user}", "@youKickedAndBanned": { "placeholders": { @@ -2725,7 +2399,6 @@ "createNewAddress": "Cruthaigh seoladh nua", "groupName": "Ainm an ghrúpa", "bundleName": "Ainm an bheartáin", - "enterSpace": "Iontráil spás", "wasDirectChatDisplayName": "Comhrá folamh (bhí {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2738,7 +2411,6 @@ "oneClientLoggedOut": "Tá duine de do chliaint logáilte amach", "overview": "Forbhreathnú", "unverified": "Neamhfhíoraithe", - "widgetNameError": "Tabhair ainm taispeána, le do thoil.", "youRejectedTheInvitation": "Dhiúltaigh tú don chuireadh", "youHaveWithdrawnTheInvitationFor": "Tharraing tú siar an cuireadh do {user}", "@youHaveWithdrawnTheInvitationFor": { @@ -2748,14 +2420,6 @@ } } }, - "youInvitedToBy": "📩 Tugadh cuireadh duit trí nasc chuig:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "youInvitedUser": "📩 Thug tú cuireadh do {user}", "@youInvitedUser": { "placeholders": { @@ -2768,7 +2432,6 @@ "saveKeyManuallyDescription": "Sábháil an eochair seo de láimh trí dialóg nó gearrthaisce comhroinnte an chórais a spreagadh.", "storeInAndroidKeystore": "Stóráil i Android KeyStore", "storeInAppleKeyChain": "Stóráil i Apple KeyChain", - "appearOnTop": "Le feiceáil ar an mbarr", "newSpaceDescription": "Ligeann spásanna duit do chomhráite a chomhdhlúthú agus pobail phríobháideacha nó phoiblí a thógáil.", "chatCanBeDiscoveredViaSearchOnServer": "Is féidir comhrá a aimsiú tríd an gcuardach ar {server}", "@chatCanBeDiscoveredViaSearchOnServer": { @@ -2796,33 +2459,15 @@ "type": "String", "description": "Usage hint for the command /discardsession" }, - "allRooms": "Gach Comhrá Grúpa", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "block": "Bloc", "blockListDescription": "Is féidir leat bac a chur ar úsáideoirí atá ag cur isteach ort. Ní bheidh tú in ann teachtaireachtaí nó cuireadh seomra ar bith a fháil ó na húsáideoirí ar do liosta bloc pearsanta.", "blockUsername": "Déan neamhaird de ainm úsáideora", - "inviteContactToGroupQuestion": "Ar mhaith leat cuireadh a thabhairt do {contact} chuig an gcomhrá \"{groupName}\"?", "tryAgain": "Bain triail eile as", "optionalRedactReason": "(Roghnach) An chúis leis an teachtaireacht seo a chur in eagar...", "dehydrateWarning": "Ní féidir an gníomh seo a chealú. Cinntigh go stórálann tú an comhad cúltaca go sábháilte.", - "hydrateTor": "Úsáideoirí TOR: Iompórtáil easpórtáil seisiún", - "hydrateTorLong": "An ndearna tú do sheisiún a easpórtáil an uair dheireanach ar TOR? Iompórtáil go tapa é agus leanúint ar aghaidh ag comhrá.", "hydrate": "Athchóirigh ó chomhad cúltaca", "commandHint_googly": "Seol roinnt súile googly", "notAnImage": "Ní comhad íomhá é.", - "userRole": "Ról an úsáideora", - "minimumPowerLevel": "Is é {level} an t-íosleibhéal cumhachta.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "isReadyForKeyVerification": "Tá {sender} réidh le haghaidh fíorú eochair", "@isReadyForKeyVerification": { "type": "String", @@ -2863,9 +2508,6 @@ }, "sendReadReceiptsDescription": "Is féidir le rannpháirtithe eile i gcomhrá a fheiceáil nuair a bhíonn teachtaireacht léite agat.", "doesNotSeemToBeAValidHomeserver": "Ní cosúil gur freastalaí baile comhoiriúnach é. URL mícheart?", - "indexedDbErrorTitle": "Saincheisteanna mód príobháideach", - "indexedDbErrorLong": "Ar an drochuair níl an stóráil teachtaireachta cumasaithe sa mhód príobháideach de réir réamhshocraithe.\nTabhair cuairt le do thoil\n - faoi: config\n - socraithe dom.indexedDB.privateBrowsing.enabled go fíor\nSeachas sin, ní féidir FluffyChat a rith.", - "nextAccount": "An chéad chuntas eile", "youJoinedTheChat": "Chuaigh tú isteach sa chomhrá", "youAcceptedTheInvitation": "👍 Ghlac tú leis an gcuireadh", "screenSharingTitle": "comhroinnt scáileáin", @@ -2898,7 +2540,6 @@ } } }, - "appIntroduction": "Ligeann FluffyChat duit comhrá a dhéanamh le do chairde thar theachtairí éagsúla. Foghlaim tuilleadh ag https://matrix.org nó tapáil *Ar aghaidh*.", "appWantsToUseForLoginDescription": "Ligeann tú leis seo don aip agus don suíomh Gréasáin faisnéis a roinnt fút.", "synchronizingPleaseWaitCounter": " Ag sioncronú… ({percentage}%)", "@synchronizingPleaseWaitCounter": { @@ -2991,10 +2632,7 @@ "optionalMessage": "Teachtaireacht (Roghnach)…", "enterNewChat": "Cuir isteach comhrá nua", "commandHint_roomupgrade": "Uasghrádaigh an seomra seo go dtí an leagan seomra a thugtar", - "setCustomPermissionLevel": "Socraigh leibhéal ceadanna saincheaptha", - "setPermissionsLevelDescription": "Roghnaigh ról réamhshainithe thíos nó cuir isteach leibhéal ceadanna saincheaptha idir 0 agus 100.", "ignoreUser": "Déan neamhaird den úsáideoir", - "normalUser": "Gnáthúsáideoir", "approve": "Ceadaigh", "youHaveKnocked": "Bhuail tú", "pleaseWaitUntilInvited": "Fan anois, le do thoil, go dtí go dtabharfaidh duine éigin ón seomra cuireadh duit.", @@ -3030,10 +2668,6 @@ "longPressToRecordVoiceMessage": "Brúigh go fada chun teachtaireacht gutha a thaifeadadh.", "pause": "Sos", "resume": "Atosú", - "newSubSpace": "Fo-spás nua", - "moveToDifferentSpace": "Bog go spás difriúil", - "moveUp": "Bog suas", - "moveDown": "Bog síos", "removeFromSpaceDescription": "Bainfear an comhrá as an spás ach beidh sé fós le feiceáil i do liosta comhrá.", "countChats": "comhráite {chats}", "@countChats": { @@ -3062,7 +2696,6 @@ } } }, - "donate": "Tabhair Síntiús", "startedAPoll": "Chuir {username} tús le pobalbhreith.", "@startedAPoll": { "type": "String", @@ -3076,7 +2709,6 @@ "startPoll": "Tosaigh pobalbhreith", "endPoll": "Deireadh leis an pobalbhreith", "answersVisible": "Freagraí le feiceáil", - "answersHidden": "Freagraí i bhfolach", "pollQuestion": "Ceist pobalbhreithe", "answerOption": "Rogha freagartha", "addAnswerOption": "Cuir rogha freagra leis", @@ -3144,5 +2776,43 @@ "logs": "Logaí", "advancedConfigs": "Cumraíochtaí Ardleibhéil", "advancedConfigurations": "Cumraíochtaí ardleibhéil", - "signInWithLabel": "Sínigh isteach le:" + "signIn": "Sínigh isteach", + "createNewAccount": "Cruthaigh cuntas nua", + "signUpGreeting": "Tá FluffyChat díláraithe! Roghnaigh freastalaí inar mian leat do chuntas a chruthú agus déanaimis é!", + "signInGreeting": "An bhfuil cuntas agat i Matrix cheana féin? Fáilte ar ais! Roghnaigh do fhreastalaí baile agus sínigh isteach.", + "appIntro": "Le FluffyChat is féidir leat comhrá a dhéanamh le do chairde. Is teachtaire [maitrís] díláraithe slán é! Foghlaim tuilleadh ar https://matrix.org más maith leat nó cláraigh.", + "theProcessWasCanceled": "Cuireadh an próiseas ar ceal.", + "join": "Téigh i", + "searchOrEnterHomeserverAddress": "Cuardaigh nó cuir isteach seoladh an fhreastalaí baile", + "matrixId": "Aitheantas Maitrís", + "setPowerLevel": "Socraigh leibhéal cumhachta", + "makeModerator": "Déan modhnóir", + "makeAdmin": "Déan riarthóir", + "removeModeratorRights": "Bain cearta an mhodhnóra", + "removeAdminRights": "Bain cearta riarthóra", + "powerLevel": "Leibhéal cumhachta", + "setPowerLevelDescription": "Sainmhíníonn leibhéil chumhachta cad a cheadaítear do bhall a dhéanamh sa seomra seo agus is gnách go mbíonn siad idir 0 agus 100.", + "owner": "Úinéir", + "mute": "Balbhaigh", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Cruthaigh comhrá nua", + "reset": "Athshocraigh", + "supportFluffyChat": "Tacaigh le FluffyChat", + "support": "Tacaíocht", + "fluffyChatSupportBannerMessage": "Tá DO chabhair ag teastáil ó FluffyChat!\n❤️❤️❤️\nBeidh FluffyChat saor in aisce i gcónaí, ach cosnaíonn forbairt agus óstáil airgead fós.\nBraitheann todhchaí an tionscadail ar thacaíocht ó dhaoine cosúil leatsa.", + "skipSupportingFluffyChat": "Seachain tacú le FluffyChat", + "iDoNotWantToSupport": "Nílim ag iarraidh tacú leis", + "iAlreadySupportFluffyChat": "Tacaím le FluffyChat cheana féin", + "setLowPriority": "Socraigh tosaíocht íseal", + "unsetLowPriority": "Díshuiteáil tosaíocht íseal", + "removeCallFromChat": "Bain glao den chomhrá", + "removeCallFromChatDescription": "Ar mhaith leat an glao a bhaint den chomhrá do gach ball?", + "removeCallForEveryone": "Bain glao do gach duine", + "startVoiceCall": "Tosaigh glao gutha", + "startVideoCall": "Tosaigh glao físe", + "joinVoiceCall": "Glac páirt i nglao gutha", + "joinVideoCall": "Glac páirt i nglao físe", + "live": "Beo" } diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 88bde085..e6bf530b 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -83,7 +83,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Permitir o acceso de convidadas", + "areGuestsAllowedToJoin": "Poden entrar as usuarias convidadas?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -129,18 +129,6 @@ } } }, - "badServerVersionsException": "O servidor soporta as seguintes características:\n{serverVersions}\nPero esta app só soporta {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Vetar na conversa", "@banFromChat": { "type": "String", @@ -173,11 +161,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Mensaxes de Bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Cancelar", "@cancel": { "type": "String", @@ -506,31 +489,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Confirmar", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Conectar", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "O contacto foi convidado ao grupo", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Contén nome público", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Contén nome de usuaria", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "O contido foi denunciado á administración do servidor", "@contentHasBeenReported": { "type": "String", @@ -610,33 +573,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Esto desactivará a conta. Esto non ten volta atrás. Estás segura?", "@deactivateAccountWarning": { "type": "String", @@ -742,11 +678,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Escribe un atallo e asocialle unha imaxe!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Conversa baleira", "@emptyChat": { "type": "String", @@ -796,11 +727,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Escribe o teu servidor de inicio", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Erro ao obter a localización: {error}", "@errorObtainingLocation": { "type": "String", @@ -850,11 +776,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Ir á nova sala", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupo", "@group": { "type": "String", @@ -926,11 +847,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identidade", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorar", "@ignore": { "type": "String", @@ -992,11 +908,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Convite para min", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} convidoute a FluffyChat.\n1. Visita fluffychat.im e instala a app\n2. Crea unha conta ou Accede\n3. Abre a ligazón do convite: \n {link}", "@inviteText": { "type": "String", @@ -1076,11 +987,6 @@ "type": "String", "placeholders": {} }, - "license": "Licenza", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Claro", "@lightTheme": { "type": "String", @@ -1134,11 +1040,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Cambios de participantes", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Mención", "@mention": { "type": "String", @@ -1246,11 +1147,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notificacións activadas para a conta", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} usuarias están escribindo…", "@numUsersTyping": { "type": "String", @@ -1350,11 +1246,6 @@ "type": "String", "placeholders": {} }, - "people": "Persoas", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Elixe unha imaxe", "@pickImage": { "type": "String", @@ -1374,11 +1265,6 @@ } } }, - "pleaseChoose": "Por favor elixe", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Escolle un código de acceso", "@pleaseChooseAPasscode": { "type": "String", @@ -1472,11 +1358,6 @@ } } }, - "rejoin": "Volta a unirte", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Quitar", "@remove": { "type": "String", @@ -1496,11 +1377,6 @@ } } }, - "removeDevice": "Quitar dispositivo", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Retirar veto na conversa", "@unbanFromChat": { "type": "String", @@ -1556,15 +1432,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Visto por {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Enviar", "@send": { "type": "String", @@ -1599,16 +1466,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Enviar orixinal", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Enviar adhesivo", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Enviar vídeo", "@sendVideo": { "type": "String", @@ -1673,21 +1530,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Establecer emotes personalizados", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Establecer ligazón do convite", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Establecer nivel de permisos", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Establecer estado", "@setStatus": { "type": "String", @@ -1722,11 +1564,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Conexión Unificada SSO", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Saltar", "@skip": { "type": "String", @@ -1797,21 +1634,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Marcar Favorito", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Cambia Noificacións", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Marcar como Lido/Non lido", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Demasiadas solicitudes. Inténtao máis tarde!", "@tooManyRequestsWarning": { "type": "String", @@ -1878,15 +1700,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 conversa sen ler} other{{unreadCount} conversas sen ler}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} e {count} máis están escribindo…", "@userAndOthersAreTyping": { "type": "String", @@ -2011,11 +1824,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Imaxe de fondo:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Aviso!", "@warning": { "type": "String", @@ -2081,7 +1889,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Engadiuse a conversa a este espazo", "addToSpace": "Engadir ao espazo", "scanQrCode": "Escanear código QR", "sendOnEnter": "Enter para enviar", @@ -2098,7 +1905,6 @@ "time": "Hora", "sender": "Remitente", "openGallery": "Galería pública", - "addToSpaceDescription": "Elixe un espazo ao que engadir esta conversa.", "messageType": "Tipo de mensaxe", "removeFromSpace": "Retirar do espazo", "start": "Comezar", @@ -2122,21 +1928,6 @@ "type": "String", "description": "Usage hint for the command /dm" }, - "openVideoCamera": "Abrir a cámara para un vídeo", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Vídeo ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Publicar", "dismiss": "Desbotar", "markAsRead": "Marcar como lido", "reportUser": "Denunciar usuaria", @@ -2162,36 +1953,10 @@ "pinMessage": "Fixar na sala", "confirmEventUnpin": "Tes a certeza de querer desafixar o evento?", "experimentalVideoCalls": "Chamadas de vídeo en probas", - "emailOrUsername": "Email ou nome de usuaria", - "switchToAccount": "Cambiar á conta {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "previousAccount": "Conta anterior", - "nextAccount": "Conta seguinte", "bundleName": "Nome do feixe", - "widgetVideo": "Vídeo", - "widgetJitsi": "Jitsi Meet", - "widgetCustom": "Personalizado", - "widgetName": "Nome", - "widgetUrlError": "Non é un URL válido.", - "widgetNameError": "Escribe un nome público.", - "addWidget": "Engadir widget", - "widgetEtherpad": "Nota de texto", - "errorAddingWidget": "Erro ao engadir o widget.", "editBundlesForAccount": "Editar os feixes desta conta", "addToBundle": "Engadir ao feixe", "removeFromBundle": "Eliminar deste feixe", - "separateChatTypes": "Separar Conversas directas e Grupos", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youRejectedTheInvitation": "Rexeitaches o convite", "youBannedUser": "Vetaches a {user}", "@youBannedUser": { @@ -2255,7 +2020,6 @@ "storeInAndroidKeystore": "Gardar en Android KeyStore", "storeInAppleKeyChain": "Gardar en Apple KeyChain", "recoveryKeyLost": "Perdeches a chave de recuperación?", - "pleaseEnterRecoveryKey": "Escribe a túa chave de recuperación:", "recoveryKey": "Chave de recuperación", "storeSecurlyOnThisDevice": "Gardar de xeito seguro no dispositivo", "pleaseEnterRecoveryKeyDescription": "Para desbloquear as mensaxes antigas, escribe a chave de recuperación creada nunha sesión existente. A chave de recuperación NON é o teu contrasinal.", @@ -2270,15 +2034,9 @@ } }, "unlockOldMessages": "Desbloquear mensaxes antigas", - "dehydrateTorLong": "Para usuarias de TOR, é recomendable exportar a sesión antes de pechar a xanela.", - "hydrateTor": "Usuarias TOR: Importar a sesión exportada", - "hydrateTorLong": "Exportaches a túa sesión a última vez en TOR? Importaa rápidamente e segue conversando.", "hydrate": "Restablecer desde copia de apoio", "dehydrateWarning": "Esta acción non é reversible. Pon coidado en gardar o ficheiro de apoio.", "dehydrate": "Exportar sesión e eliminar dispositivo", - "dehydrateTor": "Usuarias TOR: Exportar sesión", - "indexedDbErrorTitle": "Problemas no modo privado", - "indexedDbErrorLong": "A almacenaxe de mensaxes non está activada por defecto no modo privado.\nMira en\n- about:config\n- establece dom.indexedDB.privateBrowsing.enabled como true\nSe non, non é posible executar FluffyChat.", "user": "Usuaria", "custom": "Personal", "confirmMatrixId": "Confirma o teu ID Matrix para poder eliminar a conta.", @@ -2295,30 +2053,12 @@ "commandHint_markasgroup": "Marcar como grupo", "whyIsThisMessageEncrypted": "Por que non podo ler esta mensaxe?", "noKeyForThisMessage": "Pode ser que a mensaxe fose enviada antes de que ti accedeses á túa conta neste dispositivo.\n\nTamén é posible que a remitente non validase o teu dispositivo ou tamén que algo fallase na conexión a internet.\n\nPodes ler a mensaxe noutro dispositivo? Entón podes transferila desde el! Vai a Axustes > Dispositivos e comproba que tes tódolos dispositivos verificados. Entón cando abras a sala a próxima vez a sincronización realizarase e as chaves transmitiranse automáticamente.\n\nNon desexas perder as chaves cando pechas sesión ou cambias de dispositivo? Comproba nos axustes que activaches a copia de apoio das conversas.", - "appearOnTop": "Aparecer arriba", - "otherCallingPermissions": "Micrófono, cámara e outros permisos para FluffyChat", "newGroup": "Novo grupo", "newSpace": "Novo espazo", "foregroundServiceRunning": "Esta notificación aparece cando se está a executar o servizo en segundo plano.", "screenSharingTitle": "compartición da pantalla", - "callingPermissions": "Permisos de chamada", - "callingAccount": "Conta que chama", - "callingAccountDetails": "Permítelle a FluffyChat usar a app de telefonía nativa de android.", - "appearOnTopDetails": "Permítelle á app aparecer por enriba (non é preciso se xa configuraches FluffyChat como unha conta para chamadas)", - "enterSpace": "Entrar no espazo", - "enterRoom": "Entrar na sala", "allSpaces": "Todos os espazos", "screenSharingDetail": "Estás a compartir a túa pantalla en FluffyChat", - "numChats": "{number} conversas", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Agochar os eventos de menor relevancia", "doNotShowAgain": "Non mostrar outra vez", "commandHint_googly": "Envía uns ollos desos grandes", "googlyEyesContent": "{senderName} enviouche uns ollos grandes", @@ -2355,7 +2095,6 @@ "sorryThatsNotPossible": "Lamentámolo... iso non é posible", "deviceKeys": "Chaves do dispositivo:", "newSpaceDescription": "Os Espazos permítenche consolidar as túas conversas e construir comunidades públicas ou privadas.", - "startFirstChat": "Abre a túa primeira conversa", "wasDirectChatDisplayName": "Conversa baleira (era {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2383,23 +2122,7 @@ "openLinkInBrowser": "Abrir ligazón no navegador", "jump": "Ir alá", "report": "informar", - "allRooms": "Todas as Conversas en grupo", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "reportErrorDescription": "😭 Vaia! Algo fallou. Se queres, podes informar do problema ás persoas desenvolvedoras.", - "signInWithPassword": "Accede con contrasinal", - "pleaseTryAgainLaterOrChooseDifferentServer": "Inténtao máis tarde ou elixe un servidor diferente.", - "signInWith": "Accede con {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Non é un ficheiro de imaxe.", "importNow": "Importar agora", "importEmojis": "Importar Emojis", @@ -2409,11 +2132,8 @@ "sendTypingNotifications": "Permitir ver que estás escribindo", "createGroup": "Crear grupo", "messagesStyle": "Mensaxes:", - "profileNotFound": "Non se atopa a usuaria no servidor. Pode que haxa un problema coa conexión ou que a usuaria non exista.", "shareInviteLink": "Comparte ligazón de convite", "setColorTheme": "Cor do decorado:", - "setTheme": "Establecer decorado:", - "inviteContactToGroupQuestion": "Queres convidar a {contact} para que se una á conversa \"{groupName}\"?", "tryAgain": "Intentar outra vez", "optionalRedactReason": "(Optativo) Razón para editar a mensaxe...", "redactedBy": "Editada por {username}", @@ -2439,7 +2159,6 @@ }, "redactMessageDescription": "A mensaxe vai ser editada para todas as participantes na conversa. Non ten volta atrás.", "invite": "Convidar", - "addChatDescription": "Engadir descrición da conversa...", "chatPermissions": "Permisos da conversa", "chatDescription": "Descrición da conversa", "chatDescriptionHasBeenChanged": "Cambiou a descrición da conversa", @@ -2448,7 +2167,6 @@ "directChat": "Conversa Directa", "setChatDescription": "Escribir descrición da conversa", "inviteGroupChat": "📨 Convidar a conversa en grupo", - "invitePrivateChat": "📨 Convidar a conversa privada", "emoteKeyboardNoRecents": "Os emotes usados recentemente aparecerán aquí...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2496,7 +2214,6 @@ "yourGlobalUserIdIs": "O teu ID-usuaria global é: ", "groupName": "Nome do grupo", "searchChatsRooms": "Buscar #conversas, @usuarias...", - "startConversation": "Iniciar conversa", "commandHint_sendraw": "Enviar json sen editar", "wrongRecoveryKey": "Desculpa... non semella ser o xeito correcto de recuperar a chave.", "blockListDescription": "Podes bloquear usuarias que che molesten. Non recibirás mensaxes nin convites para salas procedentes das usuarias da túa lista persoal de bloqueo.", @@ -2507,12 +2224,9 @@ "publicSpaces": "Espazos públicos", "passwordIsWrong": "O contrasinal escrito non é correcto", "pleaseEnterYourCurrentPassword": "Escribe o contrasinal actual", - "publicLink": "Ligazón pública", "nothingFound": "Non atopamos nada...", - "decline": "Desbotar", "newPassword": "Novo contrasinal", "passwordsDoNotMatch": "Os contrasinais non concordan", - "subspace": "Subespazo", "select": "Escolle", "pleaseChooseAStrongPassword": "Elixe un contrasinal forte", "addChatOrSubSpace": "Engadir charla ou sub espazo", @@ -2521,18 +2235,6 @@ "searchForUsers": "Buscar @persoas...", "databaseMigrationTitle": "Base de datos optimizada", "databaseMigrationBody": "Agarda, podería levarnos un pouco.", - "databaseBuildErrorBody": "Non se puido crear a base de datos SQlite. A app intentará usar a base de datos clásica. Por favor informa deste fallo ás desenvolvedoras en {url}. A mensaxe do erro é: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "Houbo un fallo ao iniciar a app", "sessionLostBody": "Estragouse a túa sesión. Por favor informa deste fallo ás desenvolvedoras en {url}. A mensaxe do erro é: {error}", "@sessionLostBody": { @@ -2558,14 +2260,6 @@ } } }, - "youInvitedToBy": "📩 Convidáronte cunha ligazón a:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "transparent": "Transparente", "sendReadReceipts": "Enviar confirmación de lectura", "sendReadReceiptsDescription": "Outras participantes na conversa poden ver cando liches unha mensaxe.", @@ -2591,15 +2285,6 @@ } } }, - "forwardMessageTo": "Reenviar a mensaxe a {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "As outras participantes da conversa poden ver cando estás a escribir unha mensaxe.", "formattedMessagesDescription": "Mostrar texto enriquecido nas mensaxes como letra grosa usando markdown.", "verifyOtherUserDescription": "Se verificas a outra usuaria, podes ter a certeza de que sabes con quen estás a conversar. 💪\n\nAo iniciar a verificación, ti mais a outra usuaria veredes unha xanela emerxente na app onde aparecerán varios emojis ou números que teredes que comparar entre vós.\n\nO mellor xeito de facelo é en persoa o cunha chamada de vídeo. 👭", @@ -2639,11 +2324,6 @@ } } }, - "presenceStyle": "Presenza:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "hidePresences": "Agochar Lista de estados?", "presencesToggle": "Mostra mensaxes de estado de outras usuarias", "@presencesToggle": { @@ -2675,18 +2355,7 @@ "hideRedactedMessages": "Agochar mensaxes editadas", "hideRedactedMessagesBody": "Se alguén corrixe unha mensaxe entón esta xa non será visible na charla.", "hideInvalidOrUnknownMessageFormats": "Agochar formatos de mensaxe non válidos ou descoñecidos", - "hideMemberChangesInPublicChats": "Agochar cambios dos membros nas charlas públicas", - "notifyMeFor": "Notificarme sobre", - "hideMemberChangesInPublicChatsBody": "Non mostrar na cronoloxía se alguén se une ou deixa unha conversa pública, para mellorar a lexibilidade.", "usersMustKnock": "As usuarias teñen que pedir entrar", - "userWouldLikeToChangeTheChat": "{user} quere unirse á charla.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "knocking": "A solicitar", "chatCanBeDiscoveredViaSearchOnServer": "A charla pode ser atopada ao buscar en {server}", "@chatCanBeDiscoveredViaSearchOnServer": { @@ -2703,7 +2372,6 @@ "customEmojisAndStickersBody": "Engade ou comparte emojis personais e adhesivos que poden usarse nas charlas.", "overview": "Vista xeral", "passwordRecoverySettings": "Axustes de recuperación do contrasinal", - "noPublicLinkHasBeenCreatedYet": "Aínda non se creou unha ligazón pública", "knock": "Solicitar acceso", "noOneCanJoin": "Ninguén pode unirse", "thereAreCountUsersBlocked": "Agora mesmo hai {count} usuarias bloqueadas.", @@ -2712,16 +2380,6 @@ "count": {} }, "publicChatAddresses": "Enderezos públicos da charla", - "userRole": "Rol da usuaria", - "minimumPowerLevel": "{level} é o nivel mínimo de responsabilidade.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchIn": "Buscar na conversa \"{chat}\"...", "@searchIn": { "type": "String", @@ -2742,19 +2400,6 @@ "description": "Set to true to always display time of day in 24 hour format." }, "noMoreChatsFound": "Non se atopan máis charlas…", - "joinedChats": "Charlas nas que participas", - "countChatsAndCountParticipants": "{chats} charlas e {participants} participantes", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "unread": "Sen ler", "space": "Espazo", "spaces": "Espazos", @@ -2819,10 +2464,7 @@ }, "sendCanceled": "Cancelouse o envío", "noChatsFoundHere": "Aínda non hai conversas. Comeza a conversar con alguén premendo no botón de abaixo. ⤵️", - "discoverHomeservers": "Atopar servidores", - "whatIsAHomeserver": "Que é un servidor de inicio?", "loginWithMatrixId": "Acceder co ID-Matrix", - "homeserverDescription": "Todos os teus datos quedan gardados no servidor de inicio, igual que co teu provedor de correo electrónico. Podes elexir o servidor que queres usar e poderás comunicarte con todos os demais. Aprende máis en https://matrix.org.", "doesNotSeemToBeAValidHomeserver": "Non semella ser un servidor de inicio compatible. É o URL correcto?", "calculatingFileSize": "Calculando o tamaño do ficheiro…", "prepareSendingAttachment": "Preparando o envío…", @@ -2966,7 +2608,6 @@ "crossVerifiedDevices": "Dispositivos verificados", "verifiedDevicesOnly": "Só dispositivos verificados", "waitingForServer": "Agardando polo servidor…", - "appIntroduction": "FluffyChat permíteche laretar coas túas amizades entre diferentes mensaxerías. Coñece máis en https://matrix.org ou toca en *Continuar*.", "notificationRuleMasterDescription": "Sobrescribe todas as outras regras e desactiva todas as notificacións.", "appWantsToUseForLoginDescription": "Por tanto permites que a app e o sitio web compartan información sobre ti.", "notificationRuleMemberEventDescription": "Suprime as notificacións dos eventos de participación.", @@ -2985,10 +2626,7 @@ "recordAVideo": "Gravar vídeo", "enterNewChat": "Entrar na nova conversa", "commandHint_roomupgrade": "Actualizar esta sala á versión de sala indicada", - "setCustomPermissionLevel": "Establecer nivel personalizado dos permisos", - "setPermissionsLevelDescription": "Elixe un rol predefinido dos indicados ou escribe un nivel personalizado entre 0 e 100.", "ignoreUser": "Ignorar usuaria", - "normalUser": "Usuaria corrente", "approve": "Aprobar", "pleaseWaitUntilInvited": "Agora agarda a que alguén da sala te convide a entrar.", "youHaveKnocked": "Petaches á porta", @@ -3024,10 +2662,6 @@ "longPressToRecordVoiceMessage": "Pulsación longa para gravar mensaxe de voz.", "pause": "Deter", "resume": "Continuar", - "newSubSpace": "Novo sub espazo", - "moveToDifferentSpace": "Mover a outro espazo", - "moveUp": "Mover arriba", - "moveDown": "Mover abaixo", "removeFromSpaceDescription": "Vaise quitar a conversa do espazo pero seguirá aparecendo na túa lista de conversas.", "countChats": "{chats} conversas", "@countChats": { @@ -3038,7 +2672,6 @@ } } }, - "donate": "Doar", "spaceMemberOf": "Participa no espazo {spaces}", "@spaceMemberOf": { "type": "String", @@ -3070,7 +2703,6 @@ "startPoll": "Publicar enquisa", "endPoll": "Finalizar enquisa", "answersVisible": "Resultados visibles", - "answersHidden": "Non se ven os resultados", "pollQuestion": "Pregunta da enquisa", "answerOption": "Opción de resposta", "addAnswerOption": "Engadir opción", @@ -3138,5 +2770,43 @@ "logs": "Rexistros", "advancedConfigs": "Axustes avanzados", "advancedConfigurations": "Configuracións avanzadas", - "signInWithLabel": "Acceder con:" + "signIn": "Acceder", + "createNewAccount": "Crear nova conta", + "signUpGreeting": "FluffyChat é descentralizada! Elixe un servidor para crear a conta e xa podes utilizar a app!", + "signInGreeting": "Xa tes unha conta en Matrix? Benvida! Selecciona o teu servidor de orixe e accede.", + "appIntro": "Con FluffyChat podes conversar coas amizades. É mensaxería segura e descentralizada en [matrix]! Coñece máis en https://matrix.org ou crea unha conta.", + "theProcessWasCanceled": "Desbotouse o proceso.", + "join": "Unirse", + "searchOrEnterHomeserverAddress": "Busca ou escribe o enderezo do servidor de inicio", + "matrixId": "ID en Matrix", + "setPowerLevel": "Establecer responsabilidade", + "makeModerator": "Facer moderadora", + "makeAdmin": "Facer admin", + "removeModeratorRights": "Retirar permiso de moderación", + "removeAdminRights": "Retirar permiso de administración", + "powerLevel": "Nivel responsabilidade", + "setPowerLevelDescription": "Os niveis de responsabilidade definen o que pode facer unha usuaria na sala, normalmente varía de 0 a 100.", + "owner": "Propietaria", + "mute": "Acalar", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Crear nova conversa", + "reset": "Restablecer", + "supportFluffyChat": "Apoia a FluffyChat", + "support": "Axuda", + "fluffyChatSupportBannerMessage": "FluffyChat precisa a TÚA axuda!\n❤️❤️❤️\nFluffyChat vai ser sempre gratuíta, pero o desenvolvemento e a hospedaxe costan cartos.\nO futuro do proxecto depende da axuda de persoas coma ti.", + "skipSupportingFluffyChat": "Omitir apoiar a FluffyChat", + "iDoNotWantToSupport": "Non quero axudar", + "iAlreadySupportFluffyChat": "Xa apoiei a FluffyChat", + "setLowPriority": "Establecer prioridade baixa", + "unsetLowPriority": "Non establecer prioridade baixa", + "removeCallFromChat": "Eliminar a chamada da conversa", + "removeCallFromChatDescription": "Queres eliminar a chamada da conversa para todos os membros?", + "removeCallForEveryone": "Eliminar para todos a chamada", + "startVoiceCall": "Iniciar chamada de voz", + "startVideoCall": "Iniciar chamada de vídeo", + "joinVoiceCall": "Unirse á chamada de voz", + "joinVideoCall": "Unirse á chamada de vídeo", + "live": "En directo" } diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index 28f27b10..027bf04a 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -194,18 +194,6 @@ "type": "String", "placeholder": {} }, - "badServerVersionsException": "שרת הבית תומך בגרסאות:\n{serverVersions}\nאבל האפליקציה הזו תומכת רק ב-{supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "צאט חסום", "@banFromChat": { "type": "String", @@ -233,11 +221,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "הודעות בוט", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cantOpenUri": "לא ניתן לפתוח את ה-URI {uri}", "@cantOpenUri": { "type": "String", @@ -451,8 +434,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "צ'אט נוסף למרחב הזה", - "@chatHasBeenAddedToThisSpace": {}, "chats": "צ'אטים", "@chats": { "type": "String", @@ -532,18 +513,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "defaultPermissionLevel": "רמת הרשאת ברירת מחדל", "@defaultPermissionLevel": { "type": "String", @@ -614,11 +583,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "הזן את שרת הבית שלך", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "הכל מוכן!", "@everythingReady": { "type": "String", @@ -654,11 +618,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "עבור לחדר החדש", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "groupIsPublic": "הקבוצה ציבורית", "@groupIsPublic": { "type": "String", @@ -688,11 +647,6 @@ "type": "String", "placeholders": {} }, - "identity": "זהות", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignoredUsers": "משתמשים שהתעלמו מהם", "@ignoredUsers": { "type": "String", @@ -730,11 +684,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "הזמנה בשבילי", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} הזמין אותך ל-FluffyChat.\n1. התקן את FluffyChat: https://fluffychat.im\n2. הירשם או היכנס\n3. פתח את קישור ההזמנה: {link}", "@inviteText": { "type": "String", @@ -849,11 +798,6 @@ "type": "String", "description": "Usage hint for the command /react" }, - "containsUserName": "מכיל שם משתמש", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "createNewSpace": "חלל חדש", "@createNewSpace": { "type": "String", @@ -873,21 +817,6 @@ } } }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "פעולה זו תשבית את חשבון המשתמש שלך. אי אפשר לבטל את זה! האם אתה בטוח?", "@deactivateAccountWarning": { "type": "String", @@ -1009,11 +938,6 @@ "type": "String", "placeholders": {} }, - "license": "רשיון", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "בהיר", "@lightTheme": { "type": "String", @@ -1034,26 +958,11 @@ "type": "String", "placeholders": {} }, - "confirm": "לאשר", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "התחבר", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "איש הקשר הוזמן לקבוצה", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "מכיל שם תצוגה", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "התוכן דווח למנהלי השרת", "@contentHasBeenReported": { "type": "String", @@ -1259,11 +1168,6 @@ "type": "String", "placeholders": {} }, - "people": "אנשים", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "בחר תמונה", "@pickImage": { "type": "String", @@ -1278,11 +1182,6 @@ } } }, - "pleaseChoose": "אנא בחר", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "אנא בחר קוד גישה", "@pleaseChooseAPasscode": { "type": "String", @@ -1345,11 +1244,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "התראות הופעלו עבור חשבון זה", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "bundleName": "שם החבילה", "@bundleName": {}, "offline": "לא מקוון", @@ -1357,11 +1251,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "פתח את המצלמה לסרטון", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "removeFromBundle": "הסר מחבילה זו", "@removeFromBundle": {}, "enableMultiAccounts": "(בטא) אפשר ריבוי חשבונות במכשיר זה", @@ -1406,11 +1295,6 @@ } } }, - "memberChanges": "שינויים בחבר", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "הזכיר", "@mention": { "type": "String", @@ -1432,4 +1316,4 @@ "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index 032a7464..aaa31e9d 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -1,2109 +1,68 @@ { - "@showPassword": { - "type": "String", - "placeholders": {} - }, - "@hugContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "@darkTheme": { - "type": "String", - "placeholders": {} - }, - "@passphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "@pleaseEnterYourPassword": { - "type": "String", - "placeholders": {} - }, - "@theyMatch": { - "type": "String", - "placeholders": {} - }, - "@connect": { - "type": "String", - "placeholders": {} - }, - "@jumpToLastReadMessage": {}, - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "@obtainingLocation": { - "type": "String", - "placeholders": {} - }, - "@commandHint_cuddle": {}, - "@chats": { - "type": "String", - "placeholders": {} - }, - "@widgetVideo": {}, - "@dismiss": {}, - "@unknownDevice": { - "type": "String", - "placeholders": {} - }, - "@emoteShortcode": { - "type": "String", - "placeholders": {} - }, - "@noEncryptionForPublicRooms": { - "type": "String", - "placeholders": {} - }, - "@admin": { - "type": "String", - "placeholders": {} - }, - "@reportErrorDescription": {}, - "@directChats": { - "type": "String", - "placeholders": {} - }, - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "@inviteContactToGroup": { - "type": "String", - "placeholders": { - "groupName": { - "type": "String" - } - } - }, - "@addAccount": {}, - "@close": { - "type": "String", - "placeholders": {} - }, - "@configureChat": { - "type": "String", - "placeholders": {} - }, - "@chatHasBeenAddedToThisSpace": {}, - "@reply": { - "type": "String", - "placeholders": {} - }, - "@currentlyActive": { - "type": "String", - "placeholders": {} - }, - "@removeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "@unsupportedAndroidVersion": {}, - "@device": { - "type": "String", - "placeholders": {} - }, - "@blockDevice": { - "type": "String", - "placeholders": {} - }, - "@commandHint_html": { - "type": "String", - "description": "Usage hint for the command /html" - }, - "@widgetJitsi": {}, - "@youAreNoLongerParticipatingInThisChat": { - "type": "String", - "placeholders": {} - }, - "@encryption": { - "type": "String", - "placeholders": {} - }, - "@messageType": {}, - "@indexedDbErrorLong": {}, - "@oneClientLoggedOut": {}, - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "@unsupportedAndroidVersionLong": {}, - "@kicked": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "@title": { - "description": "Title for the application", - "type": "String", - "placeholders": {} - }, - "@changeTheNameOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "@changedTheChatAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "@sendFile": { - "type": "String", - "placeholders": {} - }, - "@newVerificationRequest": { - "type": "String", - "placeholders": {} - }, - "@startFirstChat": {}, - "@callingAccount": {}, - "@requestPermission": { - "type": "String", - "placeholders": {} - }, - "@sentAPicture": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@invited": { - "type": "String", - "placeholders": {} - }, - "@changedTheDisplaynameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "displayname": { - "type": "String" - } - } - }, - "@setColorTheme": {}, - "@nextAccount": {}, - "@commandHint_create": { - "type": "String", - "description": "Usage hint for the command /create" - }, - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "@warning": { - "type": "String", - "placeholders": {} - }, - "@password": { - "type": "String", - "placeholders": {} - }, - "@allSpaces": {}, - "@supposedMxid": { - "type": "String", - "placeholders": { - "mxid": { - "type": "String" - } - } - }, - "@editDisplayname": { - "type": "String", - "placeholders": {} - }, - "@user": {}, - "@roomVersion": { - "type": "String", - "placeholders": {} - }, - "@sentAFile": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "@youAcceptedTheInvitation": {}, - "@banFromChat": { - "type": "String", - "placeholders": {} - }, - "@noMatrixServer": { - "type": "String", - "placeholders": { - "server1": { - "type": "String" - }, - "server2": { - "type": "String" - } - } - }, - "@userAndOthersAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "@youInvitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@userIsTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@openAppToReadMessages": { - "type": "String", - "placeholders": {} - }, - "@sentAVideo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@banUserDescription": {}, - "@inviteContact": { - "type": "String", - "placeholders": {} - }, - "@askSSSSSign": { - "type": "String", - "placeholders": {} - }, - "@widgetEtherpad": {}, - "@waitingPartnerAcceptRequest": { - "type": "String", - "placeholders": {} - }, - "remove": "निकालना", - "@remove": { - "type": "String", - "placeholders": {} - }, - "@writeAMessage": { - "type": "String", - "placeholders": {} - }, - "@changeTheme": { - "type": "String", - "placeholders": {} - }, - "@id": { - "type": "String", - "placeholders": {} - }, - "@removeDevicesDescription": {}, - "@changedTheChatDescriptionTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "description": { - "type": "String" - } - } - }, - "@countParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "@tryAgain": {}, - "@areGuestsAllowedToJoin": { - "type": "String", - "placeholders": {} - }, - "@blocked": { - "type": "String", - "placeholders": {} - }, - "@youKickedAndBanned": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "@removeDevice": { - "type": "String", - "placeholders": {} - }, - "@unbanUserDescription": {}, - "@userAndUserAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "username2": { - "type": "String" - } - } - }, - "@pleaseClickOnLink": { - "type": "String", - "placeholders": {} - }, - "@saveFile": { - "type": "String", - "placeholders": {} - }, - "@sendOnEnter": {}, - "@pickImage": { - "type": "String", - "placeholders": {} - }, - "@answeredTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "@youRejectedTheInvitation": {}, - "@otherCallingPermissions": {}, - "@messagesStyle": {}, - "@couldNotDecryptMessage": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "@invitedUsersOnly": { - "type": "String", - "placeholders": {} - }, - "@link": {}, - "@widgetUrlError": {}, - "@emailOrUsername": {}, - "@newSpaceDescription": {}, - "@chatDescription": {}, - "@callingAccountDetails": {}, - "@next": { - "type": "String", - "placeholders": {} - }, - "@pleaseFollowInstructionsOnWeb": { - "type": "String", - "placeholders": {} - }, - "@changedTheGuestAccessRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "@editRoomAliases": { - "type": "String", - "placeholders": {} - }, - "@enterSpace": {}, - "@encryptThisChat": {}, - "@fileName": { - "type": "String", - "placeholders": {} - }, - "@unavailable": { - "type": "String", - "placeholders": {} - }, - "@previousAccount": {}, - "@publicRooms": { - "type": "String", - "placeholders": {} - }, - "@fromTheInvitation": { - "type": "String", - "placeholders": {} - }, - "@sendMessages": { - "type": "String", - "placeholders": {} - }, - "@incorrectPassphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, - "@reopenChat": {}, - "@pleaseEnterRecoveryKey": {}, - "@create": { - "type": "String", - "placeholders": {} - }, - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "@no": { - "type": "String", - "placeholders": {} - }, - "@alias": { - "type": "String", - "placeholders": {} - }, - "@widgetNameError": {}, - "@inoffensive": { - "type": "String", - "placeholders": {} - }, - "@unpin": { - "type": "String", - "placeholders": {} - }, - "@addToBundle": {}, - "@reportMessage": { - "type": "String", - "placeholders": {} - }, - "@spaceIsPublic": { - "type": "String", - "placeholders": {} - }, - "@addWidget": {}, - "@all": { - "type": "String", - "placeholders": {} - }, - "@removeAllOtherDevices": { - "type": "String", - "placeholders": {} - }, - "@unblockDevice": { - "type": "String", - "placeholders": {} - }, - "@countFiles": { - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@noKeyForThisMessage": {}, - "@enableEncryptionWarning": { - "type": "String", - "placeholders": {} - }, - "@inviteText": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "link": { - "type": "String" - } - } - }, - "@shareLocation": { - "type": "String", - "placeholders": {} - }, - "@reason": { - "type": "String", - "placeholders": {} - }, - "@commandHint_markasgroup": {}, - "@errorObtainingLocation": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "@hydrateTor": {}, - "@pushNotificationsNotAvailable": {}, - "@passwordRecovery": { - "type": "String", - "placeholders": {} - }, - "@storeInAppleKeyChain": {}, - "@replaceRoomWithNewerVersion": { - "type": "String", - "placeholders": {} - }, - "@hydrate": {}, - "@invalidServerName": {}, - "@chatPermissions": {}, - "@voiceMessage": { - "type": "String", - "placeholders": {} - }, - "@badServerLoginTypesException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "@wipeChatBackup": { - "type": "String", - "placeholders": {} - }, - "@cantOpenUri": { - "type": "String", - "placeholders": { - "uri": { - "type": "String" - } - } - }, - "@sender": {}, - "@storeInAndroidKeystore": {}, - "@hideRedactedEvents": { - "type": "String", - "placeholders": {} - }, - "@online": { - "type": "String", - "placeholders": {} - }, - "@signInWithPassword": {}, - "@ignoredUsers": { - "type": "String", - "placeholders": {} - }, - "@lastActiveAgo": { - "type": "String", - "placeholders": { - "localizedTimeShort": { - "type": "String" - } - } - }, - "@changedTheGuestAccessRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "@weSentYouAnEmail": { - "type": "String", - "placeholders": {} - }, - "@offensive": { - "type": "String", - "placeholders": {} - }, - "@needPantalaimonWarning": { - "type": "String", - "placeholders": {} - }, - "@makeAdminDescription": {}, - "@edit": { - "type": "String", - "placeholders": {} - }, - "@loadMore": { - "type": "String", - "placeholders": {} - }, - "@noEmotesFound": { - "type": "String", - "placeholders": {} - }, - "@synchronizingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "@transferFromAnotherDevice": { - "type": "String", - "placeholders": {} - }, - "@passwordHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "@pushRules": { - "type": "String", - "placeholders": {} - }, - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "@commandHint_clearcache": { - "type": "String", - "description": "Usage hint for the command /clearcache" - }, - "@loadingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "@copy": { - "type": "String", - "placeholders": {} - }, - "@saveKeyManuallyDescription": {}, - "@none": { - "type": "String", - "placeholders": {} - }, - "@editBundlesForAccount": {}, - "@enableEncryption": { - "type": "String", - "placeholders": {} - }, - "@whyIsThisMessageEncrypted": {}, - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "@rejectedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@setChatDescription": {}, - "@userLeftTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@spaceName": { - "type": "String", - "placeholders": {} - }, - "importFromZipFile": ".zip फ़ाइल से आयात करें", - "@importFromZipFile": {}, - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "@or": { - "type": "String", - "placeholders": {} - }, - "@dehydrateWarning": {}, - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "@noOtherDevicesFound": {}, - "@whoIsAllowedToJoinThisGroup": { - "type": "String", - "placeholders": {} - }, - "@emptyChat": { - "type": "String", - "placeholders": {} - }, - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@storeSecurlyOnThisDevice": {}, - "@yourChatBackupHasBeenSetUp": {}, - "@chatBackup": { - "type": "String", - "placeholders": {} - }, - "@redactedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@submit": { - "type": "String", - "placeholders": {} - }, - "@videoCallsBetaWarning": {}, - "@unmuteChat": { - "type": "String", - "placeholders": {} - }, - "@createdTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@redactedAnEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@autoplayImages": { - "type": "String", - "placeholder": {} - }, - "@compareEmojiMatch": { - "type": "String", - "placeholders": {} - }, - "@participant": { - "type": "String", - "placeholders": {} - }, - "@logInTo": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "@yes": { - "type": "String", - "placeholders": {} - }, - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "@username": { - "type": "String", - "placeholders": {} - }, - "@changedTheRoomAliases": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@fileIsTooBigForServer": {}, - "@homeserver": {}, - "@help": { - "type": "String", - "placeholders": {} - }, - "@chatDetails": { - "type": "String", - "placeholders": {} - }, - "@people": { - "type": "String", - "placeholders": {} - }, - "@changedTheHistoryVisibilityTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "@leftTheChat": { - "type": "String", - "placeholders": {} - }, - "@verified": { - "type": "String", - "placeholders": {} - }, - "repeatPassword": "पासवर्ड दोहराएं", - "@repeatPassword": {}, - "@setStatus": { - "type": "String", - "placeholders": {} - }, - "@groupWith": { - "type": "String", - "placeholders": { - "displayname": { - "type": "String" - } - } - }, - "@callingPermissions": {}, - "@delete": { - "type": "String", - "placeholders": {} - }, - "@newMessageInFluffyChat": { - "type": "String", - "placeholders": {} - }, - "@readUpToHere": {}, - "@start": {}, - "@downloadFile": { - "type": "String", - "placeholders": {} - }, - "@deviceId": { - "type": "String", - "placeholders": {} - }, - "@register": { - "type": "String", - "placeholders": {} - }, - "@unlockOldMessages": {}, - "@identity": { - "type": "String", - "placeholders": {} - }, - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "@changedTheJoinRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "joinRules": { - "type": "String" - } - } - }, - "@ignore": { - "type": "String", - "placeholders": {} - }, - "@recording": { - "type": "String", - "placeholders": {} - }, - "@changedTheChatPermissions": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@moderator": { - "type": "String", - "placeholders": {} - }, - "@optionalRedactReason": {}, - "@acceptedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@waitingPartnerEmoji": { - "type": "String", - "placeholders": {} - }, - "@channelCorruptedDecryptError": { - "type": "String", - "placeholders": {} - }, - "@tryToSendAgain": { - "type": "String", - "placeholders": {} - }, - "@guestsCanJoin": { - "type": "String", - "placeholders": {} - }, - "@ok": { - "type": "String", - "placeholders": {} - }, - "@copyToClipboard": { - "type": "String", - "placeholders": {} - }, - "@dehydrate": {}, - "@locationPermissionDeniedNotice": { - "type": "String", - "placeholders": {} - }, - "@send": { - "type": "String", - "placeholders": {} - }, - "@hasWithdrawnTheInvitationFor": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "@noRoomsFound": { - "type": "String", - "placeholders": {} - }, - "@banned": { - "type": "String", - "placeholders": {} - }, - "@sendAsText": { - "type": "String" - }, - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "@archiveRoomDescription": {}, - "exportEmotePack": "इमोट पैक को .zip के रूप में निर्यात करें", - "@exportEmotePack": {}, - "@changedTheChatNameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "chatname": { - "type": "String" - } - } - }, - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "@account": { - "type": "String", - "placeholders": {} - }, - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "@commandInvalid": { - "type": "String" - }, - "@setAsCanonicalAlias": { - "type": "String", - "placeholders": {} - }, - "@whyDoYouWantToReportThis": { - "type": "String", - "placeholders": {} - }, - "@locationDisabledNotice": { - "type": "String", - "placeholders": {} - }, - "@placeCall": {}, - "@removedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@changedTheRoomInvitationLink": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@newChat": { - "type": "String", - "placeholders": {} - }, - "@notifications": { - "type": "String", - "placeholders": {} - }, - "@commandHint_plain": { - "type": "String", - "description": "Usage hint for the command /plain" - }, - "@emoteSettings": { - "type": "String", - "placeholders": {} - }, - "@experimentalVideoCalls": {}, - "@openCamera": { - "type": "String", - "placeholders": {} - }, - "@pleaseEnterRecoveryKeyDescription": {}, - "@guestsAreForbidden": { - "type": "String", - "placeholders": {} - }, - "@mention": { - "type": "String", - "placeholders": {} - }, - "@openInMaps": { - "type": "String", - "placeholders": {} - }, - "@withTheseAddressesRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "@inviteContactToGroupQuestion": {}, - "@emoteExists": { - "type": "String", - "placeholders": {} - }, - "@redactedByBecause": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "reason": { - "type": "String" - } - } - }, - "@isTyping": { - "type": "String", - "placeholders": {} - }, - "@youHaveWithdrawnTheInvitationFor": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@chat": { - "type": "String", - "placeholders": {} - }, - "@group": { - "type": "String", - "placeholders": {} - }, - "@leave": { - "type": "String", - "placeholders": {} - }, - "@skip": { - "type": "String", - "placeholders": {} - }, - "@appearOnTopDetails": {}, - "@roomHasBeenUpgraded": { - "type": "String", - "placeholders": {} - }, - "@enterRoom": {}, - "@enableEmotesGlobally": { - "type": "String", - "placeholders": {} - }, - "@areYouSure": { - "type": "String", - "placeholders": {} - }, - "@pleaseChooseAPasscode": { - "type": "String", - "placeholders": {} - }, - "@noPasswordRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "@changedTheProfileAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@allChats": { - "type": "String", - "placeholders": {} - }, - "@reportUser": {}, - "@sharedTheLocation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@commandHint_send": { - "type": "String", - "description": "Usage hint for the command /send" - }, - "@onlineKeyBackupEnabled": { - "type": "String", - "placeholders": {} - }, - "@unbannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "@confirmEventUnpin": {}, - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "@youInvitedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@kickedAndBanned": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "@noConnectionToTheServer": { - "type": "String", - "placeholders": {} - }, - "@fileHasBeenSavedAt": { - "type": "String", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "@license": { - "type": "String", - "placeholders": {} - }, - "@addToSpace": {}, - "@unbanFromChat": { - "type": "String", - "placeholders": {} - }, - "@commandMissing": { - "type": "String", - "placeholders": { - "command": { - "type": "String" - } + "remove": "निकालना", + "@remove": { + "type": "String", + "placeholders": {} }, - "description": "State that {command} is not a valid /command." - }, - "@redactMessageDescription": {}, - "@rejoin": { - "type": "String", - "placeholders": {} - }, - "@recoveryKey": {}, - "@redactMessage": { - "type": "String", - "placeholders": {} - }, - "@forward": { - "type": "String", - "placeholders": {} - }, - "@commandHint_discardsession": { - "type": "String", - "description": "Usage hint for the command /discardsession" - }, - "@invalidInput": {}, - "@about": { - "type": "String", - "placeholders": {} - }, - "@chooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "@hideUnknownEvents": { - "type": "String", - "placeholders": {} - }, - "@dehydrateTorLong": {}, - "@yourPublicKey": { - "type": "String", - "placeholders": {} - }, - "@tooManyRequestsWarning": { - "type": "String", - "placeholders": {} - }, - "@invitedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } + "importFromZipFile": ".zip फ़ाइल से आयात करें", + "repeatPassword": "पासवर्ड दोहराएं", + "exportEmotePack": "इमोट पैक को .zip के रूप में निर्यात करें", + "importEmojis": "इमोजी आयात करें", + "notAnImage": "कोई छवि फ़ाइल नहीं।", + "importNow": "अभी आयात करें", + "ignoreUser": "उपयोगकर्ता को नजरअंदाज करें", + "replace": "बदलें", + "about": "हमारे बारे में", + "aboutHomeserver": "{homeserver} की जानकारी", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "accept": "स्वीकार करें", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} ने निमंत्रण स्वीकार किया", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "अकाउंट", + "@account": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} ने एंड-टू-एंड एन्क्रिप्शन चालू किया", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "addEmail": "ईमेल ऐड करें", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "confirmMatrixId": "कृपया अपना अकाउंट हटाने के लिए अपनी मैट्रिक्स आईडी की पुष्टि करें।", + "supposedMxid": "यह {mxid} होना चाहिए", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } } - }, - "@kickFromChat": { - "type": "String", - "placeholders": {} - }, - "@commandHint_myroomnick": { - "type": "String", - "description": "Usage hint for the command /myroomnick" - }, - "@offline": { - "type": "String", - "placeholders": {} - }, - "@noPermission": { - "type": "String", - "placeholders": {} - }, - "@doNotShowAgain": {}, - "@activatedEndToEndEncryption": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@report": {}, - "@status": { - "type": "String", - "placeholders": {} - }, - "@compareNumbersMatch": { - "type": "String", - "placeholders": {} - }, - "@groupIsPublic": { - "type": "String", - "placeholders": {} - }, - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "@joinRoom": { - "type": "String", - "placeholders": {} - }, - "@unverified": {}, - "@fluffychat": { - "type": "String", - "placeholders": {} - }, - "@howOffensiveIsThisContent": { - "type": "String", - "placeholders": {} - }, - "@serverRequiresEmail": {}, - "@hideUnimportantStateEvents": {}, - "@screenSharingTitle": {}, - "@widgetCustom": {}, - "@sentCallInformations": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "@addToSpaceDescription": {}, - "@googlyEyesContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "@youBannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@theyDontMatch": { - "type": "String", - "placeholders": {} - }, - "@youHaveBeenBannedFromThisChat": { - "type": "String", - "placeholders": {} - }, - "@displaynameHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "@addChatDescription": {}, - "@sentAnAudio": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@editRoomAvatar": { - "type": "String", - "placeholders": {} - }, - "@encrypted": { - "type": "String", - "placeholders": {} - }, - "@commandHint_leave": { - "type": "String", - "description": "Usage hint for the command /leave" - }, - "@commandHint_myroomavatar": { - "type": "String", - "description": "Usage hint for the command /myroomavatar" - }, - "@cancel": { - "type": "String", - "placeholders": {} - }, - "@hasKnocked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@publish": {}, - "@openLinkInBrowser": {}, - "@clearArchive": {}, - "@appLock": { - "type": "String", - "placeholders": {} - }, - "@commandHint_react": { - "type": "String", - "description": "Usage hint for the command /react" - }, - "@changedTheHistoryVisibility": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@commandHint_me": { - "type": "String", - "description": "Usage hint for the command /me" - }, - "@pleaseEnterYourUsername": { - "type": "String", - "placeholders": {} - }, - "@messageInfo": {}, - "@disableEncryptionWarning": {}, - "@directChat": {}, - "@encryptionNotEnabled": { - "type": "String", - "placeholders": {} - }, - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "@sendTypingNotifications": {}, - "@lightTheme": { - "type": "String", - "placeholders": {} - }, - "@inviteGroupChat": {}, - "@appearOnTop": {}, - "@invitePrivateChat": {}, - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "@foregroundServiceRunning": {}, - "@enterAnEmailAddress": { - "type": "String", - "placeholders": {} - }, - "@voiceCall": {}, - "@commandHint_kick": { - "type": "String", - "description": "Usage hint for the command /kick" - }, - "@copiedToClipboard": { - "type": "String", - "placeholders": {} - }, - "@createNewSpace": { - "type": "String", - "placeholders": {} - }, - "@commandHint_unban": { - "type": "String", - "description": "Usage hint for the command /unban" - }, - "@unknownEncryptionAlgorithm": { - "type": "String", - "placeholders": {} - }, - "@commandHint_ban": { - "type": "String", - "description": "Usage hint for the command /ban" - }, - "importEmojis": "इमोजी आयात करें", - "@importEmojis": {}, - "@confirm": { - "type": "String", - "placeholders": {} - }, - "@wasDirectChatDisplayName": { - "type": "String", - "placeholders": { - "oldDisplayName": { - "type": "String" - } - } - }, - "@noChatDescriptionYet": {}, - "@defaultPermissionLevel": { - "type": "String", - "placeholders": {} - }, - "@removeFromBundle": {}, - "@numUsersTyping": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@fontSize": { - "type": "String", - "placeholders": {} - }, - "@whoCanPerformWhichAction": { - "type": "String", - "placeholders": {} - }, - "@confirmMatrixId": {}, - "@learnMore": {}, - "@iHaveClickedOnLink": { - "type": "String", - "placeholders": {} - }, - "@you": { - "type": "String", - "placeholders": {} - }, - "notAnImage": "कोई छवि फ़ाइल नहीं।", - "@notAnImage": {}, - "@users": {}, - "@openGallery": {}, - "@chatDescriptionHasBeenChanged": {}, - "@search": { - "type": "String", - "placeholders": {} - }, - "@newGroup": {}, - "@bundleName": {}, - "@dehydrateTor": {}, - "@removeFromSpace": {}, - "@dateAndTimeOfDay": { - "type": "String", - "placeholders": { - "date": { - "type": "String" - }, - "timeOfDay": { - "type": "String" - } - } - }, - "@commandHint_op": { - "type": "String", - "description": "Usage hint for the command /op" - }, - "@commandHint_join": { - "type": "String", - "description": "Usage hint for the command /join" - }, - "@sourceCode": { - "type": "String", - "placeholders": {} - }, - "@roomUpgradeDescription": {}, - "@commandHint_invite": { - "type": "String", - "description": "Usage hint for the command /invite" - }, - "@userSentUnknownEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "type": { - "type": "String" - } - } - }, - "@scanQrCode": {}, - "@logout": { - "type": "String", - "placeholders": {} - }, - "@pleaseEnterANumber": {}, - "@contactHasBeenInvitedToTheGroup": { - "type": "String", - "placeholders": {} - }, - "@youKicked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@areYouSureYouWantToLogout": { - "type": "String", - "placeholders": {} - }, - "@changedTheJoinRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@profileNotFound": {}, - "@jump": {}, - "@groups": { - "type": "String", - "placeholders": {} - }, - "@reactedWith": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "reaction": { - "type": "String" - } - } - }, - "@bannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "@sorryThatsNotPossible": {}, - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "@oopsSomethingWentWrong": { - "type": "String", - "placeholders": {} - }, - "@loadCountMoreParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@shareInviteLink": {}, - "@commandHint_markasdm": {}, - "@recoveryKeyLost": {}, - "@cuddleContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "@askVerificationRequest": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "@messages": { - "type": "String", - "placeholders": {} - }, - "@login": { - "type": "String", - "placeholders": {} - }, - "@deviceKeys": {}, - "@waitingPartnerNumbers": { - "type": "String", - "placeholders": {} - }, - "@noGoogleServicesWarning": { - "type": "String", - "placeholders": {} - }, - "@everythingReady": { - "type": "String", - "placeholders": {} - }, - "@addEmail": { - "type": "String", - "placeholders": {} - }, - "@emoteKeyboardNoRecents": { - "type": "String", - "placeholders": {} - }, - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "@startedACall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "@emoteInvalid": { - "type": "String", - "placeholders": {} - }, - "@systemTheme": { - "type": "String", - "placeholders": {} - }, - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, - "@deleteMessage": { - "type": "String", - "placeholders": {} - }, - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "@settings": { - "type": "String", - "placeholders": {} - }, - "@setTheme": {}, - "@changeTheHomeserver": { - "type": "String", - "placeholders": {} - }, - "@youJoinedTheChat": {}, - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "@play": { - "type": "String", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "@chatBackupDescription": { - "type": "String", - "placeholders": {} - }, - "@changeDeviceName": { - "type": "String", - "placeholders": {} - }, - "@passwordForgotten": { - "type": "String", - "placeholders": {} - }, - "@statusExampleMessage": { - "type": "String", - "placeholders": {} - }, - "@security": { - "type": "String", - "placeholders": {} - }, - "@markAsRead": {}, - "@sendAudio": { - "type": "String", - "placeholders": {} - }, - "@widgetName": {}, - "@sentASticker": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@errorAddingWidget": {}, - "@commandHint_dm": { - "type": "String", - "description": "Usage hint for the command /dm" - }, - "@commandHint_hug": {}, - "@replace": {}, - "@reject": { - "type": "String", - "placeholders": {} - }, - "@extremeOffensive": { - "type": "String", - "placeholders": {} - }, - "@editBlockedServers": { - "type": "String", - "placeholders": {} - }, - "@oopsPushError": { - "type": "String", - "placeholders": {} - }, - "@youUnbannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@deactivateAccountWarning": { - "type": "String", - "placeholders": {} - }, - "@archive": { - "type": "String", - "placeholders": {} - }, - "@joinedTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "@visibleForEveryone": { - "type": "String", - "placeholders": {} - }, - "@pleaseEnter4Digits": { - "type": "String", - "placeholders": {} - }, - "@newSpace": {}, - "@changePassword": { - "type": "String", - "placeholders": {} - }, - "@devices": { - "type": "String", - "placeholders": {} - }, - "@accept": { - "type": "String", - "placeholders": {} - }, - "@unknownEvent": { - "type": "String", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "@emojis": {}, - "@pleaseEnterYourPin": { - "type": "String", - "placeholders": {} - }, - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, - "@share": { - "type": "String", - "placeholders": {} - }, - "@commandHint_googly": {}, - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "@createGroup": {}, - "@privacy": { - "type": "String", - "placeholders": {} - }, - "@changeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "@sendImage": { - "type": "String", - "placeholders": {} - }, - "@hydrateTorLong": {}, - "@time": {}, - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "@botMessages": { - "type": "String", - "placeholders": {} - }, - "@contentHasBeenReported": { - "type": "String", - "placeholders": {} - }, - "@custom": {}, - "@noBackupWarning": {}, - "@fromJoining": { - "type": "String", - "placeholders": {} - }, - "@verify": { - "type": "String", - "placeholders": {} - }, - "@sendVideo": { - "type": "String", - "placeholders": {} - }, - "@storeInSecureStorageDescription": {}, - "@openChat": {}, - "@kickUserDescription": {}, - "@sendAMessage": { - "type": "String", - "placeholders": {} - }, - "@pin": { - "type": "String", - "placeholders": {} - }, - "importNow": "अभी आयात करें", - "@importNow": {}, - "@deleteAccount": { - "type": "String", - "placeholders": {} - }, - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "@pinMessage": {}, - "@screenSharingDetail": {}, - "@muteChat": { - "type": "String", - "placeholders": {} - }, - "@invite": {}, - "@enableMultiAccounts": {}, - "@anyoneCanJoin": { - "type": "String", - "placeholders": {} - }, - "@emotePacks": { - "type": "String", - "placeholders": {} - }, - "@indexedDbErrorTitle": {}, - "@endedTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 936e2fa7..cba7322e 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -119,18 +119,6 @@ } } }, - "badServerVersionsException": "Homeserver podržava verzije specifikacije:\n{serverVersions}\nMeđutim ovaj program podržava samo {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Isključi iz chata", "@banFromChat": { "type": "String", @@ -163,11 +151,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Poruke bota", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Odustani", "@cancel": { "type": "String", @@ -496,31 +479,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Potvrdi", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Spoji", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt je pozvan u grupu", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Sadržava prikazano ime", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Sadrži korisničko ime", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Sadržaj je prijavljen administratorima servera", "@contentHasBeenReported": { "type": "String", @@ -600,33 +563,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Ovo će nepovratno deaktivirati tvoj korisnički račun. Stvarno to želiš?", "@deactivateAccountWarning": { "type": "String", @@ -732,11 +668,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Moraš odabrati jednu kraticu emotikona i sliku!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Prazan chat", "@emptyChat": { "type": "String", @@ -786,11 +717,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Upiši svoj homeserver", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "Sve je spremno!", "@everythingReady": { "type": "String", @@ -831,11 +757,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Idi u novu sobu", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupiraj", "@group": { "type": "String", @@ -907,11 +828,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identitet", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Zanemari", "@ignore": { "type": "String", @@ -973,11 +889,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Poziv za mene", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} te je pozvao/la u FluffyChat. \n1. Posjeti strnicu fluffychat.im i instaliraj aplikaciju \n2. Registriraj ili prijavi se \n3. Otvori poveznicu poziva: \n {link}", "@inviteText": { "type": "String", @@ -1057,11 +968,6 @@ "type": "String", "placeholders": {} }, - "license": "Licenca", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Svijetla", "@lightTheme": { "type": "String", @@ -1105,11 +1011,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Promjene člana", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Spominjanje", "@mention": { "type": "String", @@ -1200,11 +1101,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Obavijesti su aktivirane za ovaj račun", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} korisnika tipkaju …", "@numUsersTyping": { "type": "String", @@ -1294,11 +1190,6 @@ "type": "String", "placeholders": {} }, - "people": "Ljudi", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Odaberi sliku", "@pickImage": { "type": "String", @@ -1318,11 +1209,6 @@ } } }, - "pleaseChoose": "Odaberi", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Odaberi lozinku", "@pleaseChooseAPasscode": { "type": "String", @@ -1416,11 +1302,6 @@ } } }, - "rejoin": "Ponovo se pridruži", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Ukloni", "@remove": { "type": "String", @@ -1440,11 +1321,6 @@ } } }, - "removeDevice": "Ukloni uređaj", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Ponovo uključi u chat", "@unbanFromChat": { "type": "String", @@ -1500,15 +1376,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Viđeno od {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Pošalji", "@send": { "type": "String", @@ -1543,16 +1410,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Pošalji original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Pošalji naljepnicu", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Pošalji video datoteku", "@sendVideo": { "type": "String", @@ -1617,21 +1474,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Postavi prilagođene emotikone", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Pošalji poveznicu poziva", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Postavi razinu dozvola", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Postavi stanje", "@setStatus": { "type": "String", @@ -1661,11 +1503,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Jednokratna prijava", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Preskoči", "@skip": { "type": "String", @@ -1736,21 +1573,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Uklj/Isklj favorite", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Uklj/Isklj isključene", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Označi kao pročitano/nepročitano", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Previše zahtjeva. Pokušaj ponovo kasnije!", "@tooManyRequestsWarning": { "type": "String", @@ -1817,15 +1639,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 nepročitan chat} few{{unreadCount} nepročitana chata} other{{unreadCount} nepročitanih chatova}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} i još {count} korisnika tipkaju …", "@userAndOthersAreTyping": { "type": "String", @@ -1950,11 +1763,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Pozadina:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Upozorenje!", "@warning": { "type": "String", @@ -2076,7 +1884,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Chat je dodan u ovaj prostor", "addToSpace": "Dodaj u prostor", "serverRequiresEmail": "Za registraciju ovaj server mora potvrditi tvoju e-mail adresu.", "scanQrCode": "Snimi QR kod", @@ -2099,7 +1906,6 @@ "openGallery": "Otvori galeriju", "time": "Vrijeme", "removeFromSpace": "Ukloni iz prostora", - "addToSpaceDescription": "Odaberi prostor kojem će se ovaj chat dodati.", "start": "Početak", "commandHint_clearcache": "Isprazni predmemoriju", "@commandHint_clearcache": { @@ -2121,44 +1927,12 @@ "type": "String", "description": "Usage hint for the command /dm" }, - "openVideoCamera": "Otvori kameru za video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Objavi", "markAsRead": "Označi kao pročitano", "reportUser": "Prijavi korisnika", "openChat": "Otvori chat", "dismiss": "Odbaci", "unsupportedAndroidVersion": "Nepodržana Android verzija", - "widgetVideo": "Video", - "widgetEtherpad": "Tekstna bilješka", - "widgetCustom": "Prilagođeno", - "widgetName": "Ime", - "widgetUrlError": "Ovo nije valjan URL.", - "switchToAccount": "Prijeđi na račun {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Sljedeći račun", - "emailOrUsername": "E-mail adresa ili korisničko ime", "unsupportedAndroidVersionLong": "Ova funkcija zahtijeva noviju verziju Androida. Provjeri, postoje li nove verzije ili podrška za Lineage OS.", - "previousAccount": "Prethodni račun", "recoveryKey": "Ključ za obnavljanje", "recoveryKeyLost": "Izgubio/la si ključ za obnavljanje?", "youKickedAndBanned": "🙅 Izbacio/la i isključio/la si korisnika {user}", @@ -2170,10 +1944,7 @@ } }, "dehydrateWarning": "Ovo je nepovratna radnja. Spremi datoteku sigurnosne kopije na sigurno mjesto.", - "hydrateTor": "Korisnici TOR-a: Uzvezite izvoz sesije", - "dehydrateTor": "Korisnici TOR-a: izvezite sesiju", "emojis": "Emojiji", - "indexedDbErrorLong": "Spremište poruka nažalost nije standarno uključena u privatnom modusu.\nOtvori stranicu\n - about:config\n - postavi dom.indexedDB.privateBrowsing.enabled na true\nFluffyChat se inače neće moći pokrenuti.", "storeSecurlyOnThisDevice": "Spremi sigurno na ovom uređaju", "countFiles": "Broj datoteka: {count}", "@countFiles": { @@ -2201,11 +1972,7 @@ "placeCall": "Nazovi", "videoCallsBetaWarning": "Napominjemo da se funkcija videopoziva trenutačno nalazi u beta stanju. Možda neće raditi ispravno ili uopće neće raditi na svim platformama.", "experimentalVideoCalls": "Eksperimentalni videopozivi", - "widgetJitsi": "Jitsi Meet", - "addWidget": "Dodaj widget", - "widgetNameError": "Zadaj prikazno ime.", "youRejectedTheInvitation": "Odbio/la si poziv", - "errorAddingWidget": "Greška prilikom dodavanja widgeta.", "youJoinedTheChat": "Pridružio/la si se chatu", "youAcceptedTheInvitation": "👍 Prihvatio/la si poziv", "youHaveWithdrawnTheInvitationFor": "Povukao/la si poziv za korisnika {user}", @@ -2253,18 +2020,9 @@ "storeInSecureStorageDescription": "Ključ za obnavljanje spremi u sigurno spremište na ovom uređaju.", "saveKeyManuallyDescription": "Spremi ovaj ključ ručno pokretanjem dijaloga za dijeljenje sustava ili međuspremnika.", "storeInAndroidKeystore": "Spremi u Android KeyStore", - "separateChatTypes": "Zasebni izravni chatovi i grupe", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "dehydrateTorLong": "Korisnicima TOR-a se preporučuje izvoz sesije prije zatvaranja prozora.", - "hydrateTorLong": "Je li zadnji izvoz sesije bio na TOR-u? Brzo ga uvezi i nastavi razgovarati.", "hydrate": "Obnovi pomoću sigurnosne kopije", - "pleaseEnterRecoveryKey": "Upiši svoj ključ za obnavljanje:", "users": "Korisnici", "pleaseEnterRecoveryKeyDescription": "Za otključavanje starih poruka upiši ključ za obnavljanje koji je generiran u prethodnoj sesiji. Tvoj ključ za obnavljanje NIJE tvoja lozinka.", - "indexedDbErrorTitle": "Problemi u privatnom modusu", "youBannedUser": "Isključio/la si korisnika {user}", "@youBannedUser": { "placeholders": { @@ -2285,20 +2043,10 @@ } } }, - "numChats": "{number} chata", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "fileIsTooBigForServer": "Neuspjelo slanje! Server podržava samo priloge do {max}.", "jumpToLastReadMessage": "Skoči na zadnju pročitanu poruku", "commandHint_markasdm": "Označi kao sobu za izravnu razmjenu poruka za zadani Matrix ID", "commandHint_markasgroup": "Označi kao grupu", - "hideUnimportantStateEvents": "Sakrij nevažna stanja događaja", "doNotShowAgain": "Nemoj više prikazivati", "readUpToHere": "Pročitaj do ovdje", "wasDirectChatDisplayName": "Prazan chat (zvao se {oldDisplayName})", @@ -2314,14 +2062,10 @@ "noOtherDevicesFound": "Nijedan drugi uređaj nije pronađen", "whyIsThisMessageEncrypted": "Zašto nije moguće čitati ovu poruku?", "jump": "Skoči", - "startFirstChat": "Započni svoj prvi chat", "newSpaceDescription": "Prostori omogućuju konsolidiranje tvojih chatova i izgradnju privatne ili javne zajednice.", "encryptThisChat": "Šifiraj ovaj chat", "deviceKeys": "Ključevi uređaja:", "foregroundServiceRunning": "Ova se obavijest pojavljuje kada se pokreće usluga u prvom planu.", - "callingPermissions": "Dozvole za pozivanje", - "callingAccountDetails": "Omogućuje FluffyChatu korištenje izvorne Android aplikacije za pozivanje.", - "callingAccount": "Račun za pozivanje", "commandHint_hug": "Pošalji grljenje", "commandHint_googly": "Pošalji kotrljajuće oči", "commandHint_cuddle": "Pošalji maženje", @@ -2335,15 +2079,10 @@ } } }, - "enterRoom": "Upiši sobu", "screenSharingDetail": "Dijeliš svoj ekran u FuffyChatu", - "appearOnTopDetails": "Omogućuje prikaz aplikacije ispred drugih (nije potrebno ako je FluffyChat već postavljen kao račun za pozivanje)", - "appearOnTop": "Prikaz ispred drugih", "newGroup": "Nova grupa", "allSpaces": "Svi prostori", "screenSharingTitle": "dijeljenje ekrana", - "otherCallingPermissions": "Mikrofon, kamera i druge FluffyChat dozvole", - "enterSpace": "Upiši prostor", "newSpace": "Novi prostor", "sorryThatsNotPossible": "Žao nam je … to nije moguće", "disableEncryptionWarning": "Iz sigurnosnih razloga ne možeš deaktivirati šifriranje u chatu u kojem je prije bilo aktivirano.", @@ -2378,23 +2117,7 @@ "reopenChat": "Ponovo otvori chat", "openLinkInBrowser": "Otvori poveznicu u pregledniku", "report": "prijavi", - "allRooms": "Svi grupni chatovi", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "reportErrorDescription": "😭 Joj! Dogodila se greška. Pokušaj ponovo kasnije. Ako želiš, grešku možeš prijaviti programerima.", - "signInWithPassword": "Prijavi se s lozinkom", - "pleaseTryAgainLaterOrChooseDifferentServer": "Pokušaj ponovo kasnije ili odaberi jedan drugi server.", - "signInWith": "Prijavi se pomoću {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Nije slikovna datoteka.", "importNow": "Uvezi sada", "importEmojis": "Uvezi emoji slike", @@ -2419,7 +2142,6 @@ } }, "optionalRedactReason": "(Opcionalno) Razlog za redigiranje ove poruke …", - "inviteContactToGroupQuestion": "Želiš li pozvati {contact} u chat „{groupName}”?", "redactedByBecause": "Preuređeno od {username} zbog: „{reason}”", "@redactedByBecause": { "type": "String", @@ -2433,20 +2155,16 @@ } }, "redactMessageDescription": "Poruka će se redigirati za sve sudionike u ovoj konverzaciji. To je nepovratna radnja.", - "addChatDescription": "Dodaj opis chata …", "directChat": "Izravni chat", "inviteGroupChat": "📨 Pozivnica u grupni chat", - "invitePrivateChat": "📨 Pozivnica u privatni chat", "noChatDescriptionYet": "Opis chata još nije stvoren.", "chatDescriptionHasBeenChanged": "Opis chata je promijenjen", - "profileNotFound": "Korisnik nije pronađen na serveru. Možda postoji problem s vezom ili korisnik ne postoji.", "shareInviteLink": "Dijeli poveznicu za poziv", "emoteKeyboardNoRecents": "Ovdje će se pojaviti nedavno korišteni emotikoni …", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, - "setTheme": "Postavi temu:", "createGroup": "Stvori grupu", "invite": "Pozovi", "invalidInput": "Neispravan unos!", @@ -2471,7 +2189,6 @@ "pushNotificationsNotAvailable": "Automatsko slanje obavijesti nije dostupno", "learnMore": "Saznaj više", "createGroupAndInviteUsers": "Stvori grupu i pozovi korisnike", - "startConversation": "Pokreni konverzaciju", "blockedUsers": "Blokirani korisnici", "groupCanBeFoundViaSearch": "Grupa se može pronaći putem pretrage", "block": "Blokiraj", @@ -2500,23 +2217,14 @@ "newPassword": "Nova lozinka", "unbanUserDescription": "Korisnik će se ponovo moći pridružiti chatu ako pokuša.", "publicSpaces": "Javni prostori", - "subspace": "Podprostori", - "decline": "Odbij", "thisDevice": "Ovaj uređaj:", - "presenceStyle": "Prisutnost:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Prikaži poruke stanja od drugih korisnika", "@presencesToggle": { "type": "String", "placeholders": {} }, - "noPublicLinkHasBeenCreatedYet": "Još nije stvorena nijedna javna poveznica", "hidePresences": "Sakriti popis stanja?", "pleaseEnterYourCurrentPassword": "Upiši svoju trenutačnu lozinku", - "publicLink": "Javna poveznica", "passwordIsWrong": "Tvoja upisana lozinka je kriva", "initAppError": "Dogodila se greška prilikom inicijaliziranja aplikacije", "hideRedactedMessagesBody": "Ako netko redigira poruku, ta poruka više neće biti vidljiva u chatu.", @@ -2527,27 +2235,9 @@ "hideRedactedMessages": "Sakrij redigirane poruke", "hideInvalidOrUnknownMessageFormats": "Sakrij nevažeće ili nepoznate formate poruka", "overview": "Pregled", - "notifyMeFor": "Obavijesit me za", "passwordRecoverySettings": "Postavke za obnavljanje lozinke", - "hideMemberChangesInPublicChats": "Sakrij promjene članova u javnim chatovima", - "youInvitedToBy": "📩 Pozvan/a si putem poveznice na:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "usersMustKnock": "Korisnici moraju pokucati", "noOneCanJoin": "Nitko se ne može pridružiti", - "userWouldLikeToChangeTheChat": "{user} se želi pridružiti chatu.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "knock": "Pokucaj", "knocking": "Kucanje", "chatCanBeDiscoveredViaSearchOnServer": "Chat se može otkriti pretraživanjem servera {server}", @@ -2564,7 +2254,6 @@ "joinSpace": "Pridruži se prostoru", "publicChatAddresses": "Adrese javnih chatova", "createNewAddress": "Stvori novu adresu", - "userRole": "Korisnička uloga", "verifyOtherUser": "🔐 Potvrdi drugog korisnika", "sendTypingNotificationsDescription": "Drugi sudionici u chatu mogu vidjeti kada tipkaš novu poruku.", "sendReadReceiptsDescription": "Drugi sudionici u raygovoru mogu vidjeti kada pročitaš poruku.", @@ -2668,39 +2357,8 @@ "verifyOtherDeviceDescription": "Kada potvrdiš jedan drugi uređaj, ti uređaji mogu razmjenjivati ključeve, povećavajući tvoju ukupnu sigurnost. 💪 Kada pokreneš provjeru, pojavit će se skočni prozor u aplikaciji na oba uređaja. Tamo ćeš tada vidjeti niz emojija ili brojeve koje moraš međusobno usporediti. Najbolje je imati oba uređaja pri ruci prije nego što započneš provjeru. 🤳", "verifyOtherUserDescription": "Ako potvrdiš jednog drugog korisnika, možeš biti siguran/na da znaš kome zapravo pišeš. 💪\n\nKada pokreneš provjeru, vi i drugi korisnik vidjet ćete skočni prozor u aplikaciji. Tamo ćeš tada vidjeti niz emojija ili brojeve koje morate međusobno usporediti.\n\nNajbolji način za to je da se nađete zajedno ili započnete videopoziv. 👭", "knockRestricted": "Pokucaj na ograničene sobe", - "hideMemberChangesInPublicChatsBody": "Za bolju čitljivosti, na vremenskoj traci chata nemoj prikazivati kad se netko pridruži ili napusti javni chat.", "makeAdminDescription": "Nakon postavljanja ovog korisnika kao administratora, to možda nećeš moći poništiti jer će on tada imati iste dozvole kao i ti.", "leaveEmptyToClearStatus": "Ostavi prazno za brisanje tvog stanja.", - "forwardMessageTo": "Proslijediti poruku u sobu {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "minimumPowerLevel": "{level} je najmanja razina prava.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, - "databaseBuildErrorBody": "Nije moguće izgraditi SQlite bazu podataka. Aplikacija za sada pokušava koristiti staru bazu podataka. Prijavi ovu grešku programerima na {url}. Poruka o grešci glasi: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sendReadReceipts": "Šalji potvrde o čitanju", "acceptedKeyVerification": "{sender} je prihvatio/la potvrđivanje ključa", "@acceptedKeyVerification": { @@ -2755,10 +2413,7 @@ } } }, - "setCustomPermissionLevel": "Postavi razinu dozvole", - "setPermissionsLevelDescription": "Odaberi unaprijed definiranu ulogu u nastavku ili upiši prilagođenu razinu dozvole između 0 i 100.", "ignoreUser": "Zanemari korisnika", - "normalUser": "Normalni korisnik", "aboutHomeserver": "Informacije o {homeserver}", "@aboutHomeserver": { "type": "String", @@ -2769,21 +2424,8 @@ } }, "commandHint_roomupgrade": "Nadogradi ovu sobu na zadanu verziju sobe", - "countChatsAndCountParticipants": "{chats} chata i {participants} sudionika", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Nema više chatova …", "noChatsFoundHere": "Ovdje još nisu pronađeni chatovi. Započni novi chat s nekime pomoću donjeg gumba. ⤵️", - "joinedChats": "Pridruženi chatovi", "unread": "Nepročitano", "space": "Prostor", "spaces": "Prostori", @@ -2878,9 +2520,6 @@ "changelog": "Dnevnik promjena", "sendCanceled": "Slanje je prekinuto", "loginWithMatrixId": "Prijava pomoću Matrix-ID-a", - "discoverHomeservers": "Otkrij homeservere", - "whatIsAHomeserver": "Što je homeserver?", - "homeserverDescription": "Svi se tvoji podaci spremaju na homeserver, baš kao kod pružatelja usluge e-pošte. Možeš odabrati koji homeserver želiš koristiti, te istovremeno komunicirati sa svima. Saznaj više na at https://matrix.org.", "doesNotSeemToBeAValidHomeserver": "Čini se da nije kompatibilan homeserver. Pogrešan URL?", "calculatingFileSize": "Izračunavanje veličine datoteke …", "generatingVideoThumbnail": "Generiranje minijatura videa …", @@ -2932,7 +2571,6 @@ "appWantsToUseForLoginDescription": "Ovime dopuštaš aplikaciji i web-stranici da dijele podatke o tebi.", "open": "Otvori", "waitingForServer": "Čekanje na server …", - "appIntroduction": "FluffyChat omogućuje da razgovaraš s prijateljima preko različitih messengera. Saznaj više na https://matrix.org ili jednostavno dodirni *Nastavi*.", "newChatRequest": "📩 Novi zahtjev za chat", "contentNotificationSettings": "Postavke obavijesti o sadržaju", "generalNotificationSettings": "Opće postavke obavijesti", @@ -3026,10 +2664,6 @@ "longPressToRecordVoiceMessage": "Pritisni dugo za snimanje glasovne poruke.", "pause": "Pauza", "resume": "Nastavi", - "newSubSpace": "Novi podprostor", - "moveToDifferentSpace": "Premjesti u jedan drugi prostor", - "moveUp": "Pomakni gore", - "moveDown": "Pomakni dolje", "removeFromSpaceDescription": "Chat će se ukloniti iz prostora, ali će se i dalje pojaviti na tvom popisu chatova.", "countChats": "Broj chatova: {chats}", "@countChats": { @@ -3058,7 +2692,6 @@ } } }, - "donate": "Doniraj", "startedAPoll": "{username} je pokrenuo/la anketu.", "@startedAPoll": { "type": "String", @@ -3072,7 +2705,6 @@ "startPoll": "Početak ankete", "endPoll": "Kraj ankete", "answersVisible": "Odgovori vidljivi", - "answersHidden": "Odgovori skriveni", "pollQuestion": "Pitanje u anketi", "answerOption": "Opcija za odgovor", "addAnswerOption": "Dodaj opciju za odgovor", @@ -3137,6 +2769,5 @@ }, "logs": "Zapisi", "advancedConfigs": "Napredne konfiguracije", - "advancedConfigurations": "Napredne konfiguracije", - "signInWithLabel": "Prijavi se sa:" -} + "advancedConfigurations": "Napredne konfiguracije" +} \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index fb94d4e4..afb797b9 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -323,16 +323,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Megerősít", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Csatlakozás", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kapcsolat meghívásra került a csoportba", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -402,33 +392,6 @@ } } }, - "dateWithoutYear": "{month}. {day}.", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}. {month}. {day}.", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Ez deaktiválja a felhasználói fiókját. Ez nem vonható vissza! Biztos benne?", "@deactivateAccountWarning": { "type": "String", @@ -499,11 +462,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Ki kell választania egy hangulatjel rövidkódot és egy képet!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Üres csevegés", "@emptyChat": { "type": "String", @@ -538,11 +496,6 @@ } } }, - "enterYourHomeserver": "Adja meg a Matrix-kiszolgálóját", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "fileName": "Fájlnév", "@fileName": { "type": "String", @@ -629,11 +582,6 @@ "type": "String", "placeholders": {} }, - "identity": "Azonosító", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignoredUsers": "Figyelmen kívül hagyott felhasználók", "@ignoredUsers": { "type": "String", @@ -759,11 +707,6 @@ "type": "String", "placeholders": {} }, - "license": "Licenc", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Világos", "@lightTheme": { "type": "String", @@ -984,11 +927,6 @@ } } }, - "rejoin": "Újracsatlakozás", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Eltávolítás", "@remove": { "type": "String", @@ -1008,11 +946,6 @@ } } }, - "removeDevice": "Eszköz eltávolítása", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Csevegés kitiltás feloldása", "@unbanFromChat": { "type": "String", @@ -1033,15 +966,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username} látta", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Küldés", "@send": { "type": "String", @@ -1067,11 +991,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Eredeti küldése", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Videó küldése", "@sendVideo": { "type": "String", @@ -1131,11 +1050,6 @@ } } }, - "setInvitationLink": "Meghívó hivatkozás beállítása", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "Állapot beállítása", "@setStatus": { "type": "String", @@ -1266,15 +1180,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 olvasatlan csevegés} other{{unreadCount} olvasatlan csevegés}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} és {count} másik résztvevő gépel…", "@userAndOthersAreTyping": { "type": "String", @@ -1394,11 +1299,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Háttér:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Figyelem!", "@warning": { "type": "String", @@ -1454,11 +1354,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Meghívás számomra", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "iHaveClickedOnLink": "Rákattintottam a linkre", "@iHaveClickedOnLink": { "type": "String", @@ -1489,11 +1384,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bot üzenetek", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "repeatPassword": "Jelszó ismétlése", "@repeatPassword": {}, "addEmail": "E-mail-cím hozzáadása", @@ -1648,11 +1538,6 @@ }, "scanQrCode": "QR kód beolvasása", "@scanQrCode": {}, - "notificationsEnabledForThisAccount": "Értesítések be vannak kapcsolva ebben a fiókban", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "offensive": "Sértő", "@offensive": { "type": "String", @@ -1702,21 +1587,6 @@ "type": "String", "placeholders": {} }, - "containsDisplayName": "Tartalmazza a megjelenített nevet", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Tartalmazza a felhasználónevet", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "Ugrás az új szobába", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "noConnectionToTheServer": "Nem elérhető a szerver", "@noConnectionToTheServer": { "type": "String", @@ -1727,8 +1597,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Csevegés hozzáadva a térhez", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Csevegések", "@chats": { "type": "String", @@ -1814,11 +1682,6 @@ } } }, - "memberChanges": "Tagi változások", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "messages": "Üzenetek", "@messages": { "type": "String", @@ -1855,23 +1718,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Kamera megnyitása videóhoz", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "badServerVersionsException": "A Matrix-kiszolgáló ezeket a specifikált verziókat támogatja:\n{serverVersions}\nAzonban ez az app csak a következőket: {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "commandHint_me": "Írja le magát", "@commandHint_me": { "type": "String", @@ -1901,12 +1747,6 @@ "@dehydrate": {}, "dehydrateWarning": "Ez nem visszavonható. Bizonyosodjon meg róla, hogy biztonságos helyre menti a fájlt.", "@dehydrateWarning": {}, - "dehydrateTor": "TOR felhasználók: Munkamenet exportálása", - "@dehydrateTor": {}, - "dehydrateTorLong": "TOR felhasználóknak ajánlott a munkamenet exportálása az ablak bezárása előtt.", - "@dehydrateTorLong": {}, - "hydrateTor": "TOR felhasználóknak: munkamenet export importálása", - "@hydrateTor": {}, "hydrate": "Visszaállítás mentett fájlból", "@hydrate": {}, "link": "Hivatkozás", @@ -1916,11 +1756,6 @@ "type": "String", "placeholders": {} }, - "people": "Emberek", - "@people": { - "type": "String", - "placeholders": {} - }, "pleaseEnterYourPin": "Kérem, írja be PIN kódját", "@pleaseEnterYourPin": { "type": "String", @@ -1953,11 +1788,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Matrica küldése", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "reportMessage": "Üzenet jelentése", "@reportMessage": { "type": "String", @@ -1985,11 +1815,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Kérem, válasszon", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "commandHint_hug": "Ölelés küldése", "@commandHint_hug": {}, "reason": "Indok", @@ -2049,22 +1874,10 @@ }, "jumpToLastReadMessage": "Az utoljára olvasott üzenethez ugrás", "@jumpToLastReadMessage": {}, - "allRooms": "Minden Csoport Csevegés", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "widgetVideo": "Videó", - "@widgetVideo": {}, "dismiss": "Elvetés", "@dismiss": {}, "reportErrorDescription": "😭 Sajnos, valami félresiklott. Ha kívánja, jelezheti a bugot a fejlesztőknek.", "@reportErrorDescription": {}, - "setPermissionsLevel": "Engedélyszint beállítása", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "removeYourAvatar": "Profilképének törlése", "@removeYourAvatar": { "type": "String", @@ -2072,32 +1885,12 @@ }, "unsupportedAndroidVersion": "Nem támogatott Android verzió", "@unsupportedAndroidVersion": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "messageType": "Üzenet típus", "@messageType": {}, - "indexedDbErrorLong": "Sajnos az üzenet mentés alapból nincs bekapcsolva privát módban.\nKeresse meg a\n - about:config\n - állítsa a dom.indexedDB.privateBrowsing.enabled \"true\"-ra\nMáskülönben nem lehetséges a FluffyChat futtatása.", - "@indexedDbErrorLong": {}, "oneClientLoggedOut": "Az egyik kliense kijelentkezett", "@oneClientLoggedOut": {}, - "toggleMuted": "Némítottak megjelenítése", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "startFirstChat": "Kezdje meg első csevegését", - "@startFirstChat": {}, - "callingAccount": "Hívási fiók", - "@callingAccount": {}, "setColorTheme": "Szín séma beállítása:", "@setColorTheme": {}, - "nextAccount": "Következő fiók", - "@nextAccount": {}, - "singlesignon": "Egyszeri Bejelentkezés", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "allSpaces": "Minden tér", "@allSpaces": {}, "supposedMxid": "{mxid}-nek kell lennie", @@ -2123,15 +1916,8 @@ }, "banUserDescription": "A felhasználó kitiltásra kerül a csevegésből, és nem fog tudni visszajönni egészen a kitiltás feloldásáig.", "@banUserDescription": {}, - "widgetEtherpad": "Szöveges megjegyzés", - "@widgetEtherpad": {}, "removeDevicesDescription": "Ki fog jelentkezni a készülékről, és többé nem fog tudni fogadni üzeneteket.", "@removeDevicesDescription": {}, - "separateChatTypes": "Csoportok és privát üzenetek elkülönítése", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "tryAgain": "Próbálja újra", "@tryAgain": {}, "youKickedAndBanned": "🙅 Kirúgta és kitiltotta {user}-t", @@ -2151,42 +1937,21 @@ }, "youRejectedTheInvitation": "Visszautasította a meghívást", "@youRejectedTheInvitation": {}, - "otherCallingPermissions": "Mikrofon, kamera, és más egyéb FluffyChat engedélyek", - "@otherCallingPermissions": {}, "messagesStyle": "Üzenetek:", "@messagesStyle": {}, - "widgetUrlError": "Helytelen hivatkozás.", - "@widgetUrlError": {}, - "emailOrUsername": "Email vagy felhasználónév", - "@emailOrUsername": {}, "newSpaceDescription": "A terek lehetővé teszik a csevegések konszolidációját, ezáltal létrehozva publikus vagy privát közösségeket.", "@newSpaceDescription": {}, "chatDescription": "Csevegés leírás", "@chatDescription": {}, - "callingAccountDetails": "Engedélyezés a FluffyChat számára hogy használja a natív android hívás applikációt.", - "@callingAccountDetails": {}, "pleaseFollowInstructionsOnWeb": "Kérem, kövesse az instrukciókat az oldalon, és nyomjon a tovább gombra.", "@pleaseFollowInstructionsOnWeb": { "type": "String", "placeholders": {} }, - "enterSpace": "Belépés a térre", - "@enterSpace": {}, "encryptThisChat": "A csevegés titkosítása", "@encryptThisChat": {}, - "previousAccount": "Előző fiók", - "@previousAccount": {}, "reopenChat": "Csevegés újranyitása", "@reopenChat": {}, - "pleaseEnterRecoveryKey": "Kérem, adja meg a visszaállító kódját:", - "@pleaseEnterRecoveryKey": {}, - "toggleFavorite": "Kedvencek megjelenítése", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "widgetNameError": "Kérem adjon meg egy megjelenítendő nevet.", - "@widgetNameError": {}, "addToBundle": "Hozzáadás fiókcsoporthoz", "@addToBundle": {}, "spaceIsPublic": "A tér publikus", @@ -2194,8 +1959,6 @@ "type": "String", "placeholders": {} }, - "addWidget": "Widget hozzáadása", - "@addWidget": {}, "countFiles": "{count} fájl", "@countFiles": { "placeholders": { @@ -2233,8 +1996,6 @@ "@sender": {}, "storeInAndroidKeystore": "Tárolás az Android KeyStore-ba", "@storeInAndroidKeystore": {}, - "signInWithPassword": "Bejelentkezés jelszóval", - "@signInWithPassword": {}, "makeAdminDescription": "Miután a felhasználót aminisztrátorrá lépteti elő, nem fogja tudni visszavonni döntését, mivel azonos jogosultsági szinttel fognak rendelkezni.", "@makeAdminDescription": {}, "synchronizingPleaseWait": "Szinkronizálás... Kérem, várjon.", @@ -2267,11 +2028,6 @@ }, "importFromZipFile": "Importálás zip fájlból", "@importFromZipFile": {}, - "toggleUnread": "Jelölés Olvasottként/Olvasatlanként", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "noOtherDevicesFound": "Nem található más eszköz", "@noOtherDevicesFound": {}, "redactedBy": "{username} által szerkesztve", @@ -2285,15 +2041,6 @@ }, "videoCallsBetaWarning": "Kérem vegye figyelembe, hogy a videó hívások jelenleg béta fázisban vannak. Nem biztos, hogy megfelelően fognak működni, vagy egyáltalán elindulnak egyes platformokon.", "@videoCallsBetaWarning": {}, - "signInWith": "Bejelentkezés a {provider} kiszolgálóval", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "fileIsTooBigForServer": "Nem küldhető el! A szerver csak {max} határig enged csatolmányokat.", "@fileIsTooBigForServer": {}, "verified": "Hitelesített", @@ -2301,23 +2048,12 @@ "type": "String", "placeholders": {} }, - "callingPermissions": "Hívási engedélyek", - "@callingPermissions": {}, "readUpToHere": "Olvasás idáig", "@readUpToHere": {}, "start": "Kezdés", "@start": {}, "unlockOldMessages": "Régi üzenetek feloldása", "@unlockOldMessages": {}, - "numChats": "{number} csevegés", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "optionalRedactReason": "(Választható) A szerkesztés oka...", "@optionalRedactReason": {}, "sendAsText": "Küldés szövegként", @@ -2328,15 +2064,6 @@ "@archiveRoomDescription": {}, "exportEmotePack": "Emojicsomag exportálása zip-be", "@exportEmotePack": {}, - "switchToAccount": "A {number} számú fiókra váltás", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "setAsCanonicalAlias": "Beállítás alapértelmezett álnévként", "@setAsCanonicalAlias": { "type": "String", @@ -2351,8 +2078,6 @@ "@experimentalVideoCalls": {}, "pleaseEnterRecoveryKeyDescription": "A régi üzenetei feloldásához adja meg a korábban generált visszaállítási jelszavát. A visszaállítási jelszó NEM EGYEZIK MEG a jelszóval.", "@pleaseEnterRecoveryKeyDescription": {}, - "inviteContactToGroupQuestion": "Meg kívánja hívni {contact} ismerősét a \"{groupName}\" csevegő csoportba?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "{username} által szerkesztve, mivel: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2373,10 +2098,6 @@ } } }, - "appearOnTopDetails": "Engedélyezi az app számára, hogy mindig legfelül jelenjen meg (nem szükséges, ha a FluffyChat hívó fiókként lett beállítva)", - "@appearOnTopDetails": {}, - "enterRoom": "Belépés a szobába", - "@enterRoom": {}, "pleaseChooseAPasscode": "Kérem, válasszon egy kódot", "@pleaseChooseAPasscode": { "type": "String", @@ -2432,14 +2153,8 @@ "@unverified": {}, "serverRequiresEmail": "Ehhez a szerverhez szükséges az email címének visszaigazolása.", "@serverRequiresEmail": {}, - "hideUnimportantStateEvents": "Jelentéktelen esemény státuszok elrejtése", - "@hideUnimportantStateEvents": {}, "screenSharingTitle": "képernyő megosztás", "@screenSharingTitle": {}, - "widgetCustom": "Egyedi", - "@widgetCustom": {}, - "addToSpaceDescription": "Válassza ki melyik térhez kívánja hozzáadni a csevegést.", - "@addToSpaceDescription": {}, "youBannedUser": "Letitotta {user} felhasználót", "@youBannedUser": { "placeholders": { @@ -2448,8 +2163,6 @@ } } }, - "addChatDescription": "Chat leírás hozzáadása...", - "@addChatDescription": {}, "hasKnocked": "🚪 {user} bekopogott", "@hasKnocked": { "placeholders": { @@ -2458,8 +2171,6 @@ } } }, - "publish": "Közzététel", - "@publish": {}, "openLinkInBrowser": "Hivatkozás megnyitása böngészőben", "@openLinkInBrowser": {}, "messageInfo": "Üzenet információ", @@ -2481,10 +2192,6 @@ "@sendTypingNotifications": {}, "inviteGroupChat": "📨 Meghívó a csoportba", "@inviteGroupChat": {}, - "appearOnTop": "Megjelenés legfelül", - "@appearOnTop": {}, - "invitePrivateChat": "📨 Meghívó privát csevegéshez", - "@invitePrivateChat": {}, "foregroundServiceRunning": "Ez az értesítés akkor jelenik meg ha az előtéri szolgáltatás fut.", "@foregroundServiceRunning": {}, "voiceCall": "Hang hívás", @@ -2535,8 +2242,6 @@ } } }, - "profileNotFound": "A felhasználó nem található a szerveren. Lehetséges, hogy csatlakozási problémák adódtak, vagy nem létezik a felhasználó.", - "@profileNotFound": {}, "jump": "Ugrás", "@jump": {}, "reactedWith": "{sender} a következőképp reagált: {reaction}", @@ -2553,15 +2258,6 @@ }, "sorryThatsNotPossible": "Ez sajnos nem lehetséges", "@sorryThatsNotPossible": {}, - "videoWithSize": "Videó ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "shareInviteLink": "Meghívó link megosztása", "@shareInviteLink": {}, "commandHint_markasdm": "Szoba megjelölése mint közvetlen csevegő szoba az adott Matrix ID-nél", @@ -2575,21 +2271,10 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Egyedi hangulatjelek beállítása", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setTheme": "Téma beállítása:", - "@setTheme": {}, "youJoinedTheChat": "Becsatlakozott a csevegésbe", "@youJoinedTheChat": {}, "markAsRead": "Olvasottként megjelölés", "@markAsRead": {}, - "widgetName": "Név", - "@widgetName": {}, - "errorAddingWidget": "Hiba lépett fel a widget hozzáadásánál.", - "@errorAddingWidget": {}, "replace": "Kicserél", "@replace": {}, "youUnbannedUser": "Levette a letiltást {user}-ről", @@ -2604,12 +2289,8 @@ "@newSpace": {}, "emojis": "Hangulatjelek", "@emojis": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Próbálja meg később, vagy válasszon másik szervert.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "createGroup": "Csoport létrehozása", "@createGroup": {}, - "hydrateTorLong": "Legutóbb TOR segítségével exportálta korábbi munkamenetét? Gyorsan importálja őket vissza, és folytassa a csevegést.", - "@hydrateTorLong": {}, "time": "Idő", "@time": {}, "custom": "Egyedi", @@ -2630,8 +2311,6 @@ "@invite": {}, "enableMultiAccounts": "(BÉTA) Több fiók bekapcsolása az eszközön", "@enableMultiAccounts": {}, - "indexedDbErrorTitle": "Privát mód problémák", - "@indexedDbErrorTitle": {}, "unsupportedAndroidVersionLong": "Ehhez a funkcióhoz egy újabb Android verzió kell. Kérem ellenőrizze be van e frissítve teljesen készüléke, esetlegesen van e LineageOS támogatás hozzá.", "@unsupportedAndroidVersionLong": {}, "storeSecurlyOnThisDevice": "Biztonságos tárolás az eszközön", @@ -2648,26 +2327,11 @@ "@blockListDescription": {}, "blockUsername": "Felhasználónév ignorálása", "@blockUsername": {}, - "presenceStyle": "Állapot:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Más felhasználók állapot üzeneteinek megjelenítése", "@presencesToggle": { "type": "String", "placeholders": {} }, - "youInvitedToBy": "📩 Meghívást kapott linken keresztül a következőhöz:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "decline": "Elutasítás", - "@decline": {}, "yourGlobalUserIdIs": "A globális felhasználó-ID-je: ", "@yourGlobalUserIdIs": {}, "noUsersFoundWithQuery": "\"{query}\"-vel nem található felhasználó. Ellenőrizze nincs e elírás.", @@ -2710,19 +2374,8 @@ "@passwordsDoNotMatch": {}, "passwordIsWrong": "Hibás a beírt jelszava", "@passwordIsWrong": {}, - "subspace": "Al-tér", - "@subspace": {}, "thisDevice": "Ez az eszköz:", "@thisDevice": {}, - "forwardMessageTo": "Üzenet továbbítása a {roomName} szobába?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "A csevegés többi tagja látja amikor gépel.", "@sendTypingNotificationsDescription": {}, "sendReadReceiptsDescription": "A csevegés többi tagja láthatja, ha olvasta az üzeneteiket.", @@ -2749,18 +2402,6 @@ } } }, - "databaseBuildErrorBody": "Nem lehetséges az SQlite adatbázis létrehozása. Az app megpróbálja a régi típusú adatbázist használni. Kérem jelentse a hibát a fejlesztőknek a {url} hivatkozáson. A hiba szövege a következő: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "restoreSessionBody": "Megpróbálkozunk visszaállítani a munkamenetét egy korábbi mentésből. Kérem jelezze a hibát a fejlesztőknek a {url} címen. A hiba szövege a következő: {error}", "@restoreSessionBody": { "type": "String", @@ -2779,8 +2420,6 @@ "@searchChatsRooms": {}, "wrongRecoveryKey": "Sajnos, úgy tűnik hibásan adta meg a visszaállítási kulcsot.", "@wrongRecoveryKey": {}, - "startConversation": "Társalgás kezdése", - "@startConversation": {}, "commandHint_sendraw": "Tiszta json küldése", "@commandHint_sendraw": {}, "databaseMigrationBody": "Kérem várjon. Ez igénybe vehet valamennyi időt.", @@ -2838,8 +2477,6 @@ "@incomingMessages": {}, "nothingFound": "Nincs találat...", "@nothingFound": {}, - "publicLink": "Nyilvános hivatkozás", - "@publicLink": {}, "select": "Kiválaszt", "@select": {}, "stickers": "Matricák", @@ -2864,24 +2501,10 @@ "@calls": {}, "hideInvalidOrUnknownMessageFormats": "Érvénytelen vagy ismeretlen üzenetformátum elrejtése", "@hideInvalidOrUnknownMessageFormats": {}, - "hideMemberChangesInPublicChatsBody": "Ne mutassa ha valaki be- vagy kilép a csevegésből az olvashatóság javítása érdekében.", - "@hideMemberChangesInPublicChatsBody": {}, - "notifyMeFor": "Értesítsen ha", - "@notifyMeFor": {}, "passwordRecoverySettings": "Jelszó-helyreállítási beállítások", "@passwordRecoverySettings": {}, "noOneCanJoin": "Senki sem csatlakozhat", "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} szeretne csatlakozni a csevegéshez.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Nyilvános link nem került még létrehozásra", - "@noPublicLinkHasBeenCreatedYet": {}, "chatCanBeDiscoveredViaSearchOnServer": "Csevegés felfedezhető a {server} szerveren történő kereséssel", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2901,8 +2524,6 @@ "@overview": {}, "publicChatAddresses": "Nyilvános csevegés címek", "@publicChatAddresses": {}, - "userRole": "Felhasználói szerep", - "@userRole": {}, "createNewAddress": "Új cím létrehozása", "@createNewAddress": {}, "noDatabaseEncryption": "Adatbázis titkosítás nem támogatott ezen a platformon", @@ -2947,23 +2568,12 @@ "@hideRedactedMessages": {}, "hideRedactedMessagesBody": "Ha valaki szerkeszti az üzenetét, ez az üzenet nem jelenik meg a csevegés során.", "@hideRedactedMessagesBody": {}, - "hideMemberChangesInPublicChats": "Tag változások elrejtése a publikus csevegésben", - "@hideMemberChangesInPublicChats": {}, "knocking": "Bekopogás", "@knocking": {}, "usersMustKnock": "A felhasználóknak be kell kopogniuk", "@usersMustKnock": {}, "knock": "Kopogás", "@knock": {}, - "minimumPowerLevel": "{level} a minimum szint.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchMore": "További keresés...", "@searchMore": {}, "gallery": "Galéria", @@ -3021,10 +2631,6 @@ "@changeTheCanonicalRoomAlias": {}, "chatPermissionsDescription": "Adja meg milyen erősségi szint kell egyes csevegési művelethez. A 0, 50 és 100-as szintek általában felhasználókat, moderátorokat és adminisztrátorokat jelölnek de bármilyen szintezés lehetséges.", "@chatPermissionsDescription": {}, - "whatIsAHomeserver": "Mi az a Matrix-kiszolgáló?", - "@whatIsAHomeserver": {}, - "homeserverDescription": "Az összes adata a Mátrix-kiszolgálón tárolódik, pont mint egy e-mail kiszolgálón. Kiválaszthatja melyik Matrix-kiszolgálót akarja használni, miközben tud kommunikálni mindenkivel. Tudjon meg többet a https://matrix.org címen.", - "@homeserverDescription": {}, "userLevel": "{level} - Felhasználó", "@userLevel": { "type": "String", @@ -3061,26 +2667,10 @@ }, "loginWithMatrixId": "Bejelentkezés Matrix-ID-vel", "@loginWithMatrixId": {}, - "discoverHomeservers": "Matrix-kiszolgálók felfedezése", - "@discoverHomeservers": {}, "doesNotSeemToBeAValidHomeserver": "Nem tűnik kompatibilisnek a Mátrix-kiszolgálónak. Hibás a hivatkozás?", "@doesNotSeemToBeAValidHomeserver": {}, - "countChatsAndCountParticipants": "{chats} csevegések és {participants} résztvevők", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Nem található több csevegés...", "@noMoreChatsFound": {}, - "joinedChats": "Csatlakozott csevegések", - "@joinedChats": {}, "checkList": "Tennivalók listája", "@checkList": {}, "countInvited": "{count} meghívott", @@ -3110,16 +2700,10 @@ } } }, - "normalUser": "Normál felhasználó", - "@normalUser": {}, "ignoreUser": "Felhasználó ignorálása", "@ignoreUser": {}, "commandHint_roomupgrade": "Szoba frissítése a megadott szoba verzióra", "@commandHint_roomupgrade": {}, - "setCustomPermissionLevel": "Egyedi engedélyszint beállítása", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Kérem, válasszon egy előre meghatározott szerepkört, vagy adjon meg egy egyedi engedély szintet 0 és 100 között.", - "@setPermissionsLevelDescription": {}, "sendingAttachmentCountOfCount": "{index} csatolmány küldése {length}-ból...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3226,8 +2810,6 @@ "@appWantsToUseForLoginDescription": {}, "waitingForServer": "Várakozás a szerverre...", "@waitingForServer": {}, - "appIntroduction": "A FluffyChat segítségével cseveghet barátaival, akár más üzenetküldő alkalmazásokon keresztül is. Tudjon meg erről többet a https://matrix.org oldalon, vagy nyomjon a \"Folytatás\" gombra.", - "@appIntroduction": {}, "open": "Megnyitás", "@open": {}, "notificationRuleSuppressNotices": "Minden automata üzenetet némít", @@ -3374,4 +2956,4 @@ "@youHaveKnocked": {}, "pleaseWaitUntilInvited": "Kérem várjon, amíg valaki a szobából behívja Önt.", "@pleaseWaitUntilInvited": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index ec6a01f2..d63df13e 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -57,4 +57,4 @@ } }, "@custom": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index 6452572a..b0877b55 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -10,16 +10,6 @@ "type": "String", "placeholders": {} }, - "people": "Orang-orang", - "@people": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "Pergi ke ruangan yang baru", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "chats": "Obrolan", "@chats": { "type": "String", @@ -110,11 +100,6 @@ } } }, - "inviteForMe": "Undangan untuk saya", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "invitedUsersOnly": "Pengguna yang diundang saja", "@invitedUsersOnly": { "type": "String", @@ -166,11 +151,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identitas", - "@identity": { - "type": "String", - "placeholders": {} - }, "id": "ID", "@id": { "type": "String", @@ -262,11 +242,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Masukkan homeserver-mu", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "enterAnEmailAddress": "Masukkan alamat email", "@enterAnEmailAddress": { "type": "String", @@ -306,11 +281,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Kamu harus memilih shortcode emote dan gambar!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emoteShortcode": "Shortcode emote", "@emoteShortcode": { "type": "String", @@ -401,33 +371,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "dateAndTimeOfDay": "{timeOfDay}, {date}", "@dateAndTimeOfDay": { "type": "String", @@ -690,11 +633,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Pesan bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "blocked": "Diblokir", "@blocked": { "type": "String", @@ -722,20 +660,7 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "Homeserver ini mendukung versi Spec ini:\n{serverVersions}\nTetapi aplikasi ini hanya mendukung {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "sendOnEnter": "Kirim dengan enter", - "@sendOnEnter": {}, "badServerLoginTypesException": "Homeserver ini mendukung tipe masuk ini:\n{serverVersions}\nTetapi aplikasi ini mendukung:\n{supportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -788,7 +713,6 @@ "placeholders": {} }, "addToSpace": "Tambah ke space", - "@addToSpace": {}, "addEmail": "Tambah email", "@addEmail": { "type": "String", @@ -799,31 +723,11 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Berisi nama pengguna", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Berisi nama tampilan", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontak telah diundang ke grup", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "connect": "Hubungkan", - "@connect": { - "type": "String", - "placeholders": {} - }, - "confirm": "Konfirmasi", - "@confirm": { - "type": "String", - "placeholders": {} - }, "compareNumbersMatch": "Bandingkan angka", "@compareNumbersMatch": { "type": "String", @@ -840,7 +744,6 @@ "placeholders": {} }, "clearArchive": "Bersihkan arsip", - "@clearArchive": {}, "chooseAStrongPassword": "Pilih kata sandi yang kuat", "@chooseAStrongPassword": { "type": "String", @@ -851,7 +754,7 @@ "type": "String", "placeholders": {} }, - "chatBackupDescription": "Pesan lamamu diamankan dengan sebuah kunci pemulihan. Pastikan kamu tidak menghilangkannya.", + "chatBackupDescription": "Pesan Anda diamankan dengan kunci pemulihan. Pastikan Anda tidak kehilangannya.", "@chatBackupDescription": { "type": "String", "placeholders": {} @@ -879,11 +782,6 @@ } } }, - "license": "Lisensi", - "@license": { - "type": "String", - "placeholders": {} - }, "leftTheChat": "Keluar dari obrolan", "@leftTheChat": { "type": "String", @@ -1021,11 +919,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Perubahan anggota", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "logout": "Keluar", "@logout": { "type": "String", @@ -1099,11 +992,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Mohon pilih", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "oopsPushError": "Ups! Sayangnya, terjadi kesalahan saat mengatur pemberitahuan push.", "@oopsPushError": { "type": "String", @@ -1129,11 +1017,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notifikasi diaktifkan untuk akun ini", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "notifications": "Notifikasi", "@notifications": { "type": "String", @@ -1204,11 +1087,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Latar belakang:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "waitingPartnerNumbers": "Menunggu pengguna untuk menerima angka…", "@waitingPartnerNumbers": { "type": "String", @@ -1319,15 +1197,6 @@ } } }, - "unreadChats": "{unreadCount, plural, =1{1 obrolan belum dibaca} other{{unreadCount} obrolan belum dibaca}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "unpin": "Lepaskan pin", "@unpin": { "type": "String", @@ -1384,21 +1253,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Tandai Baca/Belum Dibaca", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Beralih Bisuan", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "Beralih Favorit", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "title": "FluffyChat", "@title": { "description": "Title for the application", @@ -1469,11 +1323,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Login Masuk Tunggal", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "shareLocation": "Bagikan lokasi", "@shareLocation": { "type": "String", @@ -1503,21 +1352,6 @@ "type": "String", "placeholders": {} }, - "setPermissionsLevel": "Tetapkan level izin", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Tetapkan tautan undangan", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "Tetapkan emote kustom", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "sentCallInformations": "{senderName} mengirim informasi panggilan", "@sentCallInformations": { "type": "String", @@ -1572,15 +1406,6 @@ } } }, - "seenByUser": "Dilihat oleh {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "security": "Keamanan", "@security": { "type": "String", @@ -1621,11 +1446,6 @@ "type": "String", "placeholders": {} }, - "rejoin": "Gabung kembali", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "rejectedTheInvitation": "{username} menolak undangannya", "@rejectedTheInvitation": { "type": "String", @@ -1719,26 +1539,18 @@ "placeholders": {} }, "serverRequiresEmail": "Server ini harus memvalidasi alamat email kamu untuk registrasi.", - "@serverRequiresEmail": {}, "openInMaps": "Buka di peta", "@openInMaps": { "type": "String", "placeholders": {} }, "enableMultiAccounts": "(BETA) Aktifkan multi-akun di perangkat ini", - "@enableMultiAccounts": {}, "bundleName": "Nama bundel", - "@bundleName": {}, "removeFromBundle": "Hilangkan dari bundel ini", - "@removeFromBundle": {}, "addToBundle": "Tambah ke bundel", - "@addToBundle": {}, "editBundlesForAccount": "Edit bundel untuk akun ini", - "@editBundlesForAccount": {}, "addAccount": "Tambah akun", - "@addAccount": {}, "oneClientLoggedOut": "Salah satu klienmu telah keluar", - "@oneClientLoggedOut": {}, "openCamera": "Buka kamera", "@openCamera": { "type": "String", @@ -1774,7 +1586,6 @@ } }, "scanQrCode": "Pindai kode QR", - "@scanQrCode": {}, "noMatrixServer": "{server1} itu bukan server Matrix, gunakan {server2} saja?", "@noMatrixServer": { "type": "String", @@ -1852,7 +1663,6 @@ } }, "homeserver": "Homeserver", - "@homeserver": {}, "enableEncryption": "Aktifkan enkripsi", "@enableEncryption": { "type": "String", @@ -1977,8 +1787,6 @@ "type": "String", "description": "Usage hint for the command /ban" }, - "chatHasBeenAddedToThisSpace": "Obrolan telah ditambahkan ke space ini", - "@chatHasBeenAddedToThisSpace": {}, "changeTheme": "Ubah tema", "@changeTheme": { "type": "String", @@ -1994,16 +1802,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Kirim stiker", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendOriginal": "Kirim yang asli", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendMessages": "Kirim pesan", "@sendMessages": { "type": "String", @@ -2048,11 +1846,6 @@ "type": "String", "placeholders": {} }, - "removeDevice": "Hapus perangkat", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "removedBy": "Dihapus oleh {username}", "@removedBy": { "type": "String", @@ -2108,29 +1901,16 @@ "placeholders": {} }, "link": "Tautan", - "@link": {}, "yourChatBackupHasBeenSetUp": "Cadangan obrolanmu telah disiapkan.", - "@yourChatBackupHasBeenSetUp": {}, "unverified": "Tidak terverifikasi", - "@unverified": {}, "repeatPassword": "Ulangi kata sandi", - "@repeatPassword": {}, "messageInfo": "Informasi pesan", - "@messageInfo": {}, "time": "Waktu", - "@time": {}, "messageType": "Tipe Pesan", - "@messageType": {}, "sender": "Pengirim", - "@sender": {}, "openGallery": "Buka galeri", - "@openGallery": {}, - "addToSpaceDescription": "Pilih sebuah space untuk menambahkan obrolan ke spacenya.", - "@addToSpaceDescription": {}, "start": "Mulai", - "@start": {}, "removeFromSpace": "Hilangkan dari space", - "@removeFromSpace": {}, "commandHint_clearcache": "Bersihkan tembolok", "@commandHint_clearcache": { "type": "String", @@ -2151,30 +1931,10 @@ "type": "String", "description": "Usage hint for the command /create" }, - "openVideoCamera": "Buka kamera untuk merekam video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "Publikasi", - "@publish": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "dismiss": "Abaikan", - "@dismiss": {}, "markAsRead": "Tandai sebagai dibaca", - "@markAsRead": {}, "reportUser": "Laporkan pengguna", - "@reportUser": {}, "openChat": "Buka Chat", - "@openChat": {}, "reactedWith": "{sender} bereaksi dengan {reaction}", "@reactedWith": { "type": "String", @@ -2188,61 +1948,14 @@ } }, "emojis": "Emoji", - "@emojis": {}, "pinMessage": "Sematkan ke ruangan", - "@pinMessage": {}, "confirmEventUnpin": "Apakah kamu yakin untuk melepaskan pin peristiwa ini secara permanen?", - "@confirmEventUnpin": {}, "unsupportedAndroidVersionLong": "Fitur ini memerlukan versi Android yang baru. Mohon periksa untuk pembaruan atau dukungan LineageOS.", - "@unsupportedAndroidVersionLong": {}, "unsupportedAndroidVersion": "Versi Android tidak didukung", - "@unsupportedAndroidVersion": {}, "placeCall": "Lakukan panggilan", - "@placeCall": {}, "voiceCall": "Panggilan suara", - "@voiceCall": {}, "videoCallsBetaWarning": "Dicatat bahwa panggilan video sedang dalam beta. Fitur ini mungkin tidak berkerja dengan benar atau tidak berkerja sama sekali pada semua platform.", - "@videoCallsBetaWarning": {}, - "emailOrUsername": "Email atau nama pengguna", - "@emailOrUsername": {}, "experimentalVideoCalls": "Panggilan video eksperimental", - "@experimentalVideoCalls": {}, - "previousAccount": "Akun sebelumnya", - "@previousAccount": {}, - "switchToAccount": "Ganti ke akun {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Akun berikutnya", - "@nextAccount": {}, - "widgetEtherpad": "Catatan teks", - "@widgetEtherpad": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Kustom", - "@widgetCustom": {}, - "errorAddingWidget": "Terjadi kesalahan menambahkan widget.", - "@errorAddingWidget": {}, - "widgetName": "Nama", - "@widgetName": {}, - "addWidget": "Tambahkan widget", - "@addWidget": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetUrlError": "Ini bukan URL yang valid.", - "@widgetUrlError": {}, - "widgetNameError": "Mohon sediakan sebuah nama tampilan.", - "@widgetNameError": {}, - "separateChatTypes": "Pisahkan Pesan Langsung dan Grup", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youInvitedBy": "📩 Kamu telah diundang oleh {user}", "@youInvitedBy": { "placeholders": { @@ -2276,11 +1989,8 @@ } }, "youRejectedTheInvitation": "Kamu menolak undangannya", - "@youRejectedTheInvitation": {}, "youJoinedTheChat": "Kamu bergabung ke obrolan", - "@youJoinedTheChat": {}, "youAcceptedTheInvitation": "👍 Kamu menerima undangannya", - "@youAcceptedTheInvitation": {}, "youBannedUser": "Kamu mencekal {user}", "@youBannedUser": { "placeholders": { @@ -2306,27 +2016,15 @@ } }, "pleaseEnterRecoveryKeyDescription": "Untuk mengakses pesan lamamu, mohon masukkan kunci pemulihanmu yang telah dibuat di sesi sebelumnya. Kunci pemulihanmu BUKAN kata sandimu.", - "@pleaseEnterRecoveryKeyDescription": {}, "users": "Pengguna", - "@users": {}, "storeInSecureStorageDescription": "Simpan kunci pemulihan di penyimpanan aman perangkat ini.", - "@storeInSecureStorageDescription": {}, "saveKeyManuallyDescription": "Simpan kunci ini secara manual dengan memicu dialog pembagian atau papan klip sistem.", - "@saveKeyManuallyDescription": {}, "recoveryKey": "Kunci pemulihan", - "@recoveryKey": {}, "storeInAppleKeyChain": "Simpan di Apple KeyChain", - "@storeInAppleKeyChain": {}, - "pleaseEnterRecoveryKey": "Mohon masukkan kunci pemulihanmu:", - "@pleaseEnterRecoveryKey": {}, "unlockOldMessages": "Akses pesan lama", - "@unlockOldMessages": {}, "recoveryKeyLost": "Kunci pemulihan hilang?", - "@recoveryKeyLost": {}, "storeInAndroidKeystore": "Simpan di Android KeyStore", - "@storeInAndroidKeystore": {}, "storeSecurlyOnThisDevice": "Simpan secara aman di perangkat ini", - "@storeSecurlyOnThisDevice": {}, "countFiles": "{count} file", "@countFiles": { "placeholders": { @@ -2336,29 +2034,11 @@ } }, "hydrate": "Pulihkan dari file cadangan", - "@hydrate": {}, - "indexedDbErrorTitle": "Masalah dengan mode privat", - "@indexedDbErrorTitle": {}, - "indexedDbErrorLong": "Penyimpanan pesan sayangnya tidak diaktifkan dalam mode privat secara default.\nMohon kunjungi\n- about:config\n- tetapkan dom.indexedDB.privateBrowsing.enabled ke true\nJika tidak ditetapkan, FluffyChat tidak akan dapat dijalankan.", - "@indexedDbErrorLong": {}, "dehydrate": "Ekspor sesi dan bersihkan perangkat", - "@dehydrate": {}, "dehydrateWarning": "Tindakan ini tidak dapat diurungkan. Pastikan kamu telah menyimpan file cadangan dengan aman.", - "@dehydrateWarning": {}, - "dehydrateTor": "Pengguna Tor: Ekspor sesi", - "@dehydrateTor": {}, - "hydrateTorLong": "Apakah kamu mengekspor sesimu terakhir kali di Tor? Impor dengan cepat dan lanjut mengobrol.", - "@hydrateTorLong": {}, - "dehydrateTorLong": "Pengguna Tor disarankan untuk mengekspor sesi sebelum menutup jendela.", - "@dehydrateTorLong": {}, - "hydrateTor": "Pengguna Tor: Impor eksporan sesi", - "@hydrateTor": {}, "custom": "Kustom", - "@custom": {}, "user": "Pengguna", - "@user": {}, "confirmMatrixId": "Mohon konfirmasi ID Matrix Anda untuk menghapus akun Anda.", - "@confirmMatrixId": {}, "supposedMxid": "Ini seharusnya {mxid}", "@supposedMxid": { "type": "String", @@ -2369,54 +2049,16 @@ } }, "commandHint_markasdm": "Tandai sebagai ruangan pesan langsung untuk ID Matrix yang ditentukan", - "@commandHint_markasdm": {}, "commandHint_markasgroup": "Tandai sebagai grup", - "@commandHint_markasgroup": {}, "screenSharingTitle": "membagikan layar", - "@screenSharingTitle": {}, - "appearOnTopDetails": "Memperbolehkan aplikasi untuk ditampilkan di atas (tidak dibutuhkan jika kamu memiliki FluffyChat ditetapkan sebagai akun pemanggilan)", - "@appearOnTopDetails": {}, - "callingAccountDetails": "Memperbolehkan FluffyChat untuk menggunakan aplikasi penelepon Android bawaan.", - "@callingAccountDetails": {}, "noKeyForThisMessage": "Hal ini bisa terjadi jika pesan dikirim sebelum kamu masuk ke akunmu di perangkat ini.\n\nMungkin juga pengirim telah memblokir perangkatmu atau ada yang tidak beres dengan koneksi internet.\n\nApakah kamu bisa membaca pesan pada sesi lain? Maka kamu bisa mentransfer pesan dari sesi tersebut! Buka Pengaturan > Perangkat dan pastikan bahwa perangkat Anda telah ditandatangani secara silang. Ketika kamu membuka ruangan di lain waktu dan kedua sesi berada di latar depan, kunci akan ditransmisikan secara otomatis.\n\nApakah kamu tidak mau kehilangan kunci saat keluar atau berpindah perangkat? Pastikan bahwa kamu telah mengaktifkan cadangan obrolan dalam pengaturan.", - "@noKeyForThisMessage": {}, "foregroundServiceRunning": "Notifikasi ini ditampilkan ketika layanan latar depan berjalan.", - "@foregroundServiceRunning": {}, - "callingPermissions": "Perizinan panggilan", - "@callingPermissions": {}, - "appearOnTop": "Tampilkan di atas", - "@appearOnTop": {}, - "callingAccount": "Akun pemanggilan", - "@callingAccount": {}, - "otherCallingPermissions": "Mikrofon, kamera dan perizinan FluffyChat lainnya", - "@otherCallingPermissions": {}, "whyIsThisMessageEncrypted": "Mengapa pesan ini tidak bisa dibaca?", - "@whyIsThisMessageEncrypted": {}, "newGroup": "Grup baru", - "@newGroup": {}, "newSpace": "Space baru", - "@newSpace": {}, - "enterSpace": "Masuk space", - "@enterSpace": {}, - "enterRoom": "Masuk ruangan", - "@enterRoom": {}, "allSpaces": "Semua space", - "@allSpaces": {}, "screenSharingDetail": "Kamu membagikan layarmu di FluffyChat", - "@screenSharingDetail": {}, - "numChats": "{number} obrolan", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Sembunyikan peristiwa keadaan yang tidak penting", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "Jangan tampilkan lagi", - "@doNotShowAgain": {}, "hugContent": "{senderName} memeluk kamu", "@hugContent": { "type": "String", @@ -2445,11 +2087,8 @@ } }, "commandHint_googly": "Kirim mata googly", - "@commandHint_googly": {}, "commandHint_hug": "Kirim pelukan", - "@commandHint_hug": {}, "commandHint_cuddle": "Kirim berpelukan", - "@commandHint_cuddle": {}, "wasDirectChatDisplayName": "Obrolan kosong (sebelumnya {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2459,26 +2098,15 @@ } } }, - "startFirstChat": "Mulai obrolan pertamamu", - "@startFirstChat": {}, "newSpaceDescription": "Fitur space bisa membantu untuk memisahkan obrolanmu dan membuat komunitas pribadi atau publik.", - "@newSpaceDescription": {}, "sorryThatsNotPossible": "Maaf... itu tidak mungkin", - "@sorryThatsNotPossible": {}, "deviceKeys": "Kunci perangkat:", - "@deviceKeys": {}, "encryptThisChat": "Enkripsi obrolan ini", - "@encryptThisChat": {}, "disableEncryptionWarning": "Demi keamanan kamu tidak bisa menonaktifkan enkripsi dalam sebuah obrolan di mana sebelumbya sudah diaktifkan.", - "@disableEncryptionWarning": {}, "reopenChat": "Buka obrolan lagi", - "@reopenChat": {}, "noBackupWarning": "Peringatan! Tanpa mengaktifkan cadangan percakapan, kamu akan kehilangan akses ke pesan terenkripsimu. Disarankan untuk mengaktifkan cadangan percakapan terlebih dahulu sebelum keluar dari akun.", - "@noBackupWarning": {}, "noOtherDevicesFound": "Tidak ada perangkat lain yang ditemukan", - "@noOtherDevicesFound": {}, "fileIsTooBigForServer": "Tidak dapat mengirim! Server hanya mendukung lampiran sampai dengan {max}.", - "@fileIsTooBigForServer": {}, "fileHasBeenSavedAt": "Berkas telah disimpan di {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2489,77 +2117,29 @@ } }, "jumpToLastReadMessage": "Pergi ke pesan terakhir dibaca", - "@jumpToLastReadMessage": {}, "readUpToHere": "Baca sampai sini", - "@readUpToHere": {}, "jump": "Lompat", - "@jump": {}, "openLinkInBrowser": "Buka tautan dalam peramban", - "@openLinkInBrowser": {}, - "allRooms": "Semua Percakapan Grup", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "report": "laporkan", - "@report": {}, "reportErrorDescription": "😭 Aduh. Ada yang salah. Jika kamu mau, kamu bisa melaporkan kutu ini kepada para pengembang.", - "@reportErrorDescription": {}, - "signInWithPassword": "Masuk dengan kata sandi", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Silakan coba lagi nanti atau pilih server yang lain.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "Masuk dengan {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Bukan berkas gambar.", - "@notAnImage": {}, "importNow": "Impor sekarang", - "@importNow": {}, "importFromZipFile": "Impor dari berkas .zip", - "@importFromZipFile": {}, "exportEmotePack": "Ekspor paket Emote sebagai .zip", - "@exportEmotePack": {}, "replace": "Ganti", - "@replace": {}, "importEmojis": "Impor Emoji", - "@importEmojis": {}, "sendTypingNotifications": "Kirim notifikasi pengetikan", - "@sendTypingNotifications": {}, "createGroup": "Buat grup", - "@createGroup": {}, - "inviteContactToGroupQuestion": "Apakah kamu ingin mengundang {contact} ke obrolan \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, "tryAgain": "Coba ulang", - "@tryAgain": {}, "messagesStyle": "Pesan:", - "@messagesStyle": {}, "shareInviteLink": "Bagikan tautan undangan", - "@shareInviteLink": {}, - "setTheme": "Atur tema:", - "@setTheme": {}, "invalidServerName": "Nama server tidak valid", - "@invalidServerName": {}, - "addChatDescription": "Tambahkan deskripsi obrolan...", - "@addChatDescription": {}, "chatPermissions": "Perizinan obrolan", - "@chatPermissions": {}, "chatDescription": "Deskripsi obrolan", - "@chatDescription": {}, "chatDescriptionHasBeenChanged": "Deskripsi obrolan diubah", - "@chatDescriptionHasBeenChanged": {}, "noChatDescriptionYet": "Deskripsi obrolan belum dibuat.", - "@noChatDescriptionYet": {}, "redactMessageDescription": "Pesan akan dihilangkan untuk semua anggota dalam percakapan ini. Ini tidak dapat diurungkan.", - "@redactMessageDescription": {}, "optionalRedactReason": "(Opsional) Alasan menghilangkan pesan ini...", - "@optionalRedactReason": {}, "redactedBy": "Dihilangkan oleh {username}", "@redactedBy": { "type": "String", @@ -2570,7 +2150,6 @@ } }, "directChat": "Chat langsung", - "@directChat": {}, "redactedByBecause": "Dihilangkan oleh {username} karena: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2584,24 +2163,15 @@ } }, "setChatDescription": "Lihat deskripsi obrolan", - "@setChatDescription": {}, - "profileNotFound": "Pengguna ini tidak dapat ditemukan di server. Mungkin ada masalah koneksi atau penggunanya tidak ada.", - "@profileNotFound": {}, "setColorTheme": "Atur tema warna:", - "@setColorTheme": {}, "invite": "Undang", - "@invite": {}, "inviteGroupChat": "📨 Undangan percakapan grup", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Undangan percakapan privat", - "@invitePrivateChat": {}, "emoteKeyboardNoRecents": "Emote yang telah digunakan akan muncul di sini...", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, "invalidInput": "Masukan tidak valid!", - "@invalidInput": {}, "wrongPinEntered": "PIN yang dimasukkan salah! Coba lagi dalam {seconds} detik...", "@wrongPinEntered": { "type": "String", @@ -2612,17 +2182,11 @@ } }, "banUserDescription": "Pengguna akan dicekal dari percakapan dan tidak akan dapat memasuki percakapan lagi sampai dibatalkan cekalannya.", - "@banUserDescription": {}, "removeDevicesDescription": "Kamu akan dikeluarkan dari perangkat ini dan tidak akan dapat menerima pesan lagi.", - "@removeDevicesDescription": {}, "unbanUserDescription": "Pengguna akan dapat memasuki percakapannya lagi jika dicoba.", - "@unbanUserDescription": {}, "pushNotificationsNotAvailable": "Notifikasi dorongan tidak tersedia", - "@pushNotificationsNotAvailable": {}, "makeAdminDescription": "Setelah kamu membuat pengguna ini admin, kamu tidak akan dapat mengurungkan ini karena penggunanya akan memiliki perizinan yang sama seperti kamu.", - "@makeAdminDescription": {}, "archiveRoomDescription": "Percakapan akan dipindahkan ke arsip. Pengguna lain akan melihat bahwa kamu telah meninggalkan percakapan.", - "@archiveRoomDescription": {}, "hasKnocked": "🚪 {user} telah dikeluarkan", "@hasKnocked": { "placeholders": { @@ -2632,25 +2196,15 @@ } }, "learnMore": "Pelajari lebih lanjut", - "@learnMore": {}, "roomUpgradeDescription": "Percakapannya akan dibuat ulang dengan versi ruangan yang baru. Semua anggota akan diberi tahu bahwa mereka harus ganti ke percakapan yang baru. Kamu bisa mempelajari lebih lanjut tentang versi ruangan di https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, "pleaseEnterANumber": "Silakan masukkan angka lebih dari 0", - "@pleaseEnterANumber": {}, "kickUserDescription": "Pengguna ini dikeluarkan dari percakapan tetapi tidak dicekal. Dalam percakapan publik, penggunanya dapat bergabung ulang kapan pun.", - "@kickUserDescription": {}, "groupCanBeFoundViaSearch": "Grup dapat dicari melalui pencarian", - "@groupCanBeFoundViaSearch": {}, "groupName": "Nama grup", - "@groupName": {}, "wrongRecoveryKey": "Maaf... ini sepertinya bukan kunci pemulihan yang benar.", - "@wrongRecoveryKey": {}, "addChatOrSubSpace": "Tambahkan percakapan atau subspace", - "@addChatOrSubSpace": {}, "pleaseChooseAStrongPassword": "Silakan pilih kata sandi yang kuat", - "@pleaseChooseAStrongPassword": {}, "joinSpace": "Bergabung ke space", - "@joinSpace": {}, "acceptedKeyVerification": "{sender} menerima verifikasi kunci", "@acceptedKeyVerification": { "type": "String", @@ -2679,7 +2233,6 @@ } }, "verifyOtherDevice": "🔐 Verifikasi perangkat lain", - "@verifyOtherDevice": {}, "requestedKeyVerification": "{sender} meminta verifikasi kunci", "@requestedKeyVerification": { "type": "String", @@ -2699,7 +2252,6 @@ } }, "formattedMessagesDescription": "Tampilkan konten pesan kaya seperti teks tebal menggunakan Markdown.", - "@formattedMessagesDescription": {}, "noUsersFoundWithQuery": "Sayangnya tidak ada pengguna yang dapat ditemukan dengan \"{query}\". Silakan periksa jika ada tipo.", "@noUsersFoundWithQuery": { "type": "String", @@ -2709,47 +2261,15 @@ } } }, - "databaseBuildErrorBody": "Tidak dapat membangun basis data SQLite. Aplikasi mencoba menggunakan basis data lawas untuk sekarang. Silakan laporkan kesalahan ini kepada pengembang di {url}. Pesan kesalahannya adalah: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "passwordIsWrong": "Kata sandi yang kamu masukkan salah", - "@passwordIsWrong": {}, "searchChatsRooms": "Cari #percakapan, @pengguna...", - "@searchChatsRooms": {}, "createGroupAndInviteUsers": "Buat sebuah grup dan undang pengguna", - "@createGroupAndInviteUsers": {}, "pleaseEnterYourCurrentPassword": "Silakan masukkan kata sandimu saat ini", - "@pleaseEnterYourCurrentPassword": {}, "passwordsDoNotMatch": "Kata sandi tidak cocok", - "@passwordsDoNotMatch": {}, - "publicLink": "Tautan publik", - "@publicLink": {}, "sendTypingNotificationsDescription": "Anggota lain dalam percakapan dapat melihat ketika kamu sedang mengetik sebuah pesan baru.", - "@sendTypingNotificationsDescription": {}, - "forwardMessageTo": "Teruskan pesan ke {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Kirim laporan dibaca", - "@sendReadReceipts": {}, "formattedMessages": "Pesan yang diformat", - "@formattedMessages": {}, "verifyOtherUser": "🔐 Verifikasi pengguna lain", - "@verifyOtherUser": {}, "sessionLostBody": "Sesimu hilang. Silakan laporkan kesalahan ini kepada pengembang di {url}. Pesan kesalahannya adalah: {error}", "@sessionLostBody": { "type": "String", @@ -2774,68 +2294,30 @@ } } }, - "presenceStyle": "Presensi:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Tampilkan pesan status dari pengguna lain", "@presencesToggle": { "type": "String", "placeholders": {} }, - "youInvitedToBy": "📩 Kamu telah diundang melalui surel ke:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "publicSpaces": "Space publik", - "@publicSpaces": {}, "commandHint_sendraw": "Kirim JSON mentah", - "@commandHint_sendraw": {}, "sendReadReceiptsDescription": "Anggota lain dalam percakapan dapat melihat ketika kamu membaca sebuah pesan.", - "@sendReadReceiptsDescription": {}, "block": "Blokir", - "@block": {}, "blockedUsers": "Pengguna yang terblokir", - "@blockedUsers": {}, "blockListDescription": "Kamu bisa memblokir pengguna yang sedang menganggumu. Kamu tidak akan mendapatkan pesan atau undangan ruangan dari pengguna dalam daftar blokiran pribadimu.", - "@blockListDescription": {}, "blockUsername": "Abaikan nama pengguna", - "@blockUsername": {}, "hidePresences": "Sembunyikan Daftar Status?", - "@hidePresences": {}, "transparent": "Transparan", - "@transparent": {}, "stickers": "Stiker", - "@stickers": {}, "discover": "Jelajahi", - "@discover": {}, - "startConversation": "Mulai percakapan", - "@startConversation": {}, "yourGlobalUserIdIs": "ID pengguna globalmu adalah: ", - "@yourGlobalUserIdIs": {}, "select": "Pilih", - "@select": {}, - "subspace": "Subspace", - "@subspace": {}, - "decline": "Tolak", - "@decline": {}, "nothingFound": "Tidak ada yang ditemukan...", - "@nothingFound": {}, "thisDevice": "Perangkat ini:", - "@thisDevice": {}, "newPassword": "Kata sandi baru", - "@newPassword": {}, "incomingMessages": "Pesan masuk", - "@incomingMessages": {}, "databaseMigrationTitle": "Basis data sudah dioptimalkan", - "@databaseMigrationTitle": {}, "searchForUsers": "Cari @pengguna...", - "@searchForUsers": {}, "completedKeyVerification": "{sender} menyelesaikan verifikasi kunci", "@completedKeyVerification": { "type": "String", @@ -2846,19 +2328,12 @@ } }, "databaseMigrationBody": "Silakan tunggu. Ini dapat membutuhkan beberapa waktu.", - "@databaseMigrationBody": {}, "leaveEmptyToClearStatus": "Tinggalkan kosong untuk menghapus statusmu.", - "@leaveEmptyToClearStatus": {}, "initAppError": "Terjadi kesalahan saat init aplikasi", - "@initAppError": {}, "verifyOtherDeviceDescription": "Saat kamu memverifikasi perangkat lain, perangkat tersebut dapat bertukar kunci, sehingga meningkatkan keamananmu secara keseluruhan. 💪 Saat Anda memulai verifikasi, sebuah pemberitahuan akan muncul di aplikasi pada kedua perangkat. Di situ kemudian akan melihat serangkaian emoji atau angka yang harus dibandingkan satu sama lain. Sebaiknya siapkan kedua perangkat sebelum kamu memulai verifikasi. 🤳", - "@verifyOtherDeviceDescription": {}, "verifyOtherUserDescription": "Jika kamu memverifikasi pengguna lain, kamu bisa yakin bahwa kamu tahu kepada siapa sebenarnya kamu menulis pesan kepadanya. 💪\n\nSaat kamu memulai verifikasi, kamu dan pengguna lain akan melihat pemberitahuan di aplikasi. Di sana kemudian akan melihat serangkaian emoji atau angka yang harus dibandingkan satu sama lain.\n\nCara terbaik untuk melakukannya adalah dengan bertemu secara langsung atau memulai panggilan video. 👭", - "@verifyOtherUserDescription": {}, "commandHint_ignore": "Abaikan ID Matrix yang diberikan", - "@commandHint_ignore": {}, "commandHint_unignore": "Batalkan pengabaian ID Matrix yang diberikan", - "@commandHint_unignore": {}, "unreadChatsInApp": "{appname}: {unread} obrolan belum dibaca", "@unreadChatsInApp": { "type": "String", @@ -2872,55 +2347,22 @@ } }, "noDatabaseEncryption": "Enkripsi basis data tidak didukung di platform ini", - "@noDatabaseEncryption": {}, "customEmojisAndStickersBody": "Tambakan atau bagikan emoji atau stiker kustom yang dapat digunakan dalam obrolan apa pun.", - "@customEmojisAndStickersBody": {}, "hideRedactedMessages": "Sembunyikan pesan yang dihapus", - "@hideRedactedMessages": {}, "appLockDescription": "Kunci aplikasi ketika tidak digunakan dengan kode PIN", - "@appLockDescription": {}, "accessAndVisibility": "Akses dan keterlihatan", - "@accessAndVisibility": {}, "globalChatId": "ID obrolan global", - "@globalChatId": {}, "accessAndVisibilityDescription": "Siapa yang diperbolehkan bergabung ke obrolan ini dan bagaimana obrolannya dapat ditemukan.", - "@accessAndVisibilityDescription": {}, "calls": "Panggilan", - "@calls": {}, "customEmojisAndStickers": "Emoji dan stiker kustom", - "@customEmojisAndStickers": {}, "hideRedactedMessagesBody": "Jika seseorang menghapus pesan, pesannya tidak akan terlihat lagi dalam obrolan.", - "@hideRedactedMessagesBody": {}, - "hideMemberChangesInPublicChatsBody": "Jangan tampilkan dalam lini masa obrolan jika seseorang bergabung atau keluar dari obrolan untuk meningkatkan keterlihatan.", - "@hideMemberChangesInPublicChatsBody": {}, - "notifyMeFor": "Beri tahu aku untuk", - "@notifyMeFor": {}, "hideInvalidOrUnknownMessageFormats": "Sembunyikan format pesan yang tidak valid atau tidak diketahui", - "@hideInvalidOrUnknownMessageFormats": {}, - "hideMemberChangesInPublicChats": "Sembunyikan perubahan anggota dalam obrolan publik", - "@hideMemberChangesInPublicChats": {}, "overview": "Ikhtisar", - "@overview": {}, "passwordRecoverySettings": "Pengaturan pemulihan kata sandi", - "@passwordRecoverySettings": {}, "usersMustKnock": "Pengguna harus mengetuk", - "@usersMustKnock": {}, "noOneCanJoin": "Tidak ada siapa pun yang dapat bergabung", - "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} ingin bergabung dengan obrolan.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Belum ada tautan publik yang dibuat", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "Ketuk", - "@knock": {}, "knocking": "Mengetuk", - "@knocking": {}, "chatCanBeDiscoveredViaSearchOnServer": "Obrolan dapat ditemukan melalui pencarian di {server}", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2936,26 +2378,10 @@ "count": {} }, "publicChatAddresses": "Alamat obrolan umum", - "@publicChatAddresses": {}, "createNewAddress": "Buat alamat baru", - "@createNewAddress": {}, - "userRole": "Peran pengguna", - "@userRole": {}, - "minimumPowerLevel": "{level} adalah tingkat daya minimum.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "swipeRightToLeftToReply": "Usap dari kanan ke kiri untuk membalas", - "@swipeRightToLeftToReply": {}, "searchMore": "Cari lebih banyak...", - "@searchMore": {}, "gallery": "Galeri", - "@gallery": {}, "searchIn": "Cari dalam obrolan \"{chat}\"...", "@searchIn": { "type": "String", @@ -2966,19 +2392,14 @@ } }, "files": "Berkas", - "@files": {}, "restricted": "Dibatasi", - "@restricted": {}, "knockRestricted": "Ketukan dibatasi", - "@knockRestricted": {}, "alwaysUse24HourFormat": "tidak", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, "sendCanceled": "Pengiriman dibatalkan", - "@sendCanceled": {}, "noChatsFoundHere": "Belum ada chat di sini. Mulai chat baru dengan seseorang menggunakan tombol di bawah. ⤵️", - "@noChatsFoundHere": {}, "invitedBy": "📩 Diundang oleh {user}", "@invitedBy": { "placeholders": { @@ -2988,28 +2409,19 @@ } }, "markAsUnread": "Tandai sebagai belum dibaca", - "@markAsUnread": {}, "goToSpace": "Pergi ke space: {space}", "@goToSpace": { "type": "String", "space": {} }, "changeTheChatPermissions": "Ubah perizinan chat", - "@changeTheChatPermissions": {}, "changeTheCanonicalRoomAlias": "Ubah alamat chat publik utama", - "@changeTheCanonicalRoomAlias": {}, "changeTheVisibilityOfChatHistory": "Ubah keterlihatan riwayat chat", - "@changeTheVisibilityOfChatHistory": {}, "changeTheDescriptionOfTheGroup": "Ubah deskripsi chat", - "@changeTheDescriptionOfTheGroup": {}, "sendingAttachment": "Mengirim lampiran...", - "@sendingAttachment": {}, "compressVideo": "Mengompres video...", - "@compressVideo": {}, "calculatingFileSize": "Menghitung ukuran berkas...", - "@calculatingFileSize": {}, "prepareSendingAttachment": "Menyiapkan pengiriman lampiran...", - "@prepareSendingAttachment": {}, "sendingAttachmentCountOfCount": "Mengirim lampiran {index} dari {length}...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3050,43 +2462,15 @@ } }, "changeGeneralChatSettings": "Ubah pengaturan chat umum", - "@changeGeneralChatSettings": {}, - "discoverHomeservers": "Jelajahi homeserver", - "@discoverHomeservers": {}, "loginWithMatrixId": "Masuk dengan ID Matrix", - "@loginWithMatrixId": {}, "doesNotSeemToBeAValidHomeserver": "Sepertinya bukan homeserver yang kompatibel. URL salah?", - "@doesNotSeemToBeAValidHomeserver": {}, - "countChatsAndCountParticipants": "{chats} chat dan {participants} anggota", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "unread": "Tidak dibaca", - "@unread": {}, "space": "Space", - "@space": {}, "spaces": "Space", - "@spaces": {}, - "joinedChats": "Bergabung chat", - "@joinedChats": {}, "noMoreChatsFound": "Tidak ada chat lagi yang ditemukan...", - "@noMoreChatsFound": {}, "generatingVideoThumbnail": "Membuat gambar kecil video...", - "@generatingVideoThumbnail": {}, "changelog": "Catatan perubahan", - "@changelog": {}, - "whatIsAHomeserver": "Apa itu homeserver?", - "@whatIsAHomeserver": {}, "sendRoomNotifications": "Kirim notifikasi @room", - "@sendRoomNotifications": {}, "updateInstalled": "🎉 Pembaruan {version} terpasang!", "@updateInstalled": { "type": "String", @@ -3097,7 +2481,6 @@ } }, "inviteOtherUsers": "Undang pengguna lain ke chat ini", - "@inviteOtherUsers": {}, "serverLimitReached": "Batasan server tercapai! Menunggu {seconds} detik...", "@serverLimitReached": { "type": "integer", @@ -3108,17 +2491,10 @@ } }, "chatPermissionsDescription": "Tentukan tingkat kekuasaan yang diperlukan untuk tindakan tertentu dalam chat ini. Tingkat kekuasaan 0, 50 dan 100 biasanya mewakili pengguna, moderator dan admin, tetapi gradasi apa pun dimungkinkan.", - "@chatPermissionsDescription": {}, - "homeserverDescription": "Semua data Anda disimpan di dalam server, seperti halnya penyedia email. Anda dapat memilih homeserver mana yang ingin Anda gunakan, sementara Anda masih dapat berkomunikasi dengan semua orang. Pelajari lebih lanjut di https://matrix.org.", - "@homeserverDescription": {}, "oneOfYourDevicesIsNotVerified": "Salah satu perangkat Anda tidak terverifikasi", - "@oneOfYourDevicesIsNotVerified": {}, "noticeChatBackupDeviceVerification": "Catatan: Ketika Anda menghubungkan semua perangkat Anda ke cadangan chat, mereka akan diverifikasi secara otomatis.", - "@noticeChatBackupDeviceVerification": {}, "welcomeText": "Halo 👋 Ini FluffyChat. Kamu bisa masuk ke homeserver mana pun, yang kompatibel dengan https://matrix.org. Lalu, chat dengan siapa pun. Ini merupakan jaringan perpesanan besar yang terdesentralisasi!", - "@welcomeText": {}, "continueText": "Lanjutkan", - "@continueText": {}, "aboutHomeserver": "Tentang {homeserver}", "@aboutHomeserver": { "type": "String", @@ -3129,43 +2505,24 @@ } }, "blur": "Buram:", - "@blur": {}, "contactServerAdmin": "Hubungi admin server", - "@contactServerAdmin": {}, "opacity": "Opasitas:", - "@opacity": {}, "setWallpaper": "Atur later belakang", - "@setWallpaper": {}, "serverInformation": "Informasi server:", - "@serverInformation": {}, "noContactInformationProvided": "Server tidak menyediakan informasi kontak valid apa pun", - "@noContactInformationProvided": {}, "supportPage": "Laman dukungan", - "@supportPage": {}, "version": "Versi", - "@version": {}, "website": "Situs Web", - "@website": {}, "manageAccount": "Kelola akun", - "@manageAccount": {}, "contactServerSecurity": "Hubungi keamanan server", - "@contactServerSecurity": {}, "name": "Nama", - "@name": {}, "strikeThrough": "Coret", - "@strikeThrough": {}, "pleaseFillOut": "Silakan isi", - "@pleaseFillOut": {}, "addLink": "Tambahkan tautan", - "@addLink": {}, "invalidUrl": "URL tidak valid", - "@invalidUrl": {}, "boldText": "Teks tebal", - "@boldText": {}, "italicText": "Teks miring", - "@italicText": {}, "unableToJoinChat": "Tidak dapat bergabung dalam chat. Mungkin pihak lain telah menutup percakapan.", - "@unableToJoinChat": {}, "sendImages": "Kirim {count} gambar", "@sendImages": { "type": "String", @@ -3176,95 +2533,50 @@ } }, "compress": "Kompres", - "@compress": {}, "contentNotificationSettings": "Pengaturan notifikasi konten", - "@contentNotificationSettings": {}, "generalNotificationSettings": "Pengaturan notifikasi umum", - "@generalNotificationSettings": {}, "roomNotificationSettings": "Pengaturan notifikasi ruangan", - "@roomNotificationSettings": {}, "userSpecificNotificationSettings": "Pengaturan notifikasi spesifik pengguna", - "@userSpecificNotificationSettings": {}, "otherNotificationSettings": "Pengaturan notifikasi lainnya", - "@otherNotificationSettings": {}, "notificationRuleContainsUserName": "Berisi Nama Pengguna", - "@notificationRuleContainsUserName": {}, "notificationRuleContainsUserNameDescription": "Memberi tahu pengguna ketika pesan memiliki nama penggunanya.", - "@notificationRuleContainsUserNameDescription": {}, "notificationRuleMaster": "Bisukan semua notifikasi", - "@notificationRuleMaster": {}, "notificationRuleMasterDescription": "Menimpa peraturan lainnya dan menonaktifkan semua notifikasi.", - "@notificationRuleMasterDescription": {}, "notificationRuleSuppressNotices": "Dimakan Pesan Terautomasi", - "@notificationRuleSuppressNotices": {}, "notificationRuleSuppressNoticesDescription": "Mendiamkan notifikasi dari klien terautomasi seperti bot.", - "@notificationRuleSuppressNoticesDescription": {}, "notificationRuleInviteForMe": "Undang untuk Aku", - "@notificationRuleInviteForMe": {}, "notificationRuleInviteForMeDescription": "Memberi tahu pengguna ketika diundang ke ruangan.", - "@notificationRuleInviteForMeDescription": {}, "notificationRuleMemberEvent": "Peristiwa Anggota", - "@notificationRuleMemberEvent": {}, "notificationRuleMemberEventDescription": "Mendiamkan notifikasi peristiwa keanggotaan.", - "@notificationRuleMemberEventDescription": {}, "notificationRuleIsUserMention": "Sebutan Pengguna", - "@notificationRuleIsUserMention": {}, "notificationRuleIsUserMentionDescription": "Memberi tahu pengguna ketika disebut secara langsung dalam pesan.", - "@notificationRuleIsUserMentionDescription": {}, "notificationRuleContainsDisplayName": "Berisi Nama Tampilan", - "@notificationRuleContainsDisplayName": {}, "notificationRuleIsRoomMention": "Sebutan Ruangan", - "@notificationRuleIsRoomMention": {}, "notificationRuleIsRoomMentionDescription": "Memberi tahu pengguna ketika ada sebutan ruangan.", - "@notificationRuleIsRoomMentionDescription": {}, "notificationRuleRoomnotif": "Notifikasi Ruangan", - "@notificationRuleRoomnotif": {}, "notificationRuleRoomnotifDescription": "Memberi tahu pengguna ketika pesan berisi '@room'.", - "@notificationRuleRoomnotifDescription": {}, "notificationRuleTombstone": "Nisan", - "@notificationRuleTombstone": {}, "notificationRuleTombstoneDescription": "Memberi tahu pengguna tentang pesan deaktivasi ruangan.", - "@notificationRuleTombstoneDescription": {}, "notificationRuleReaction": "Reaksi", - "@notificationRuleReaction": {}, "notificationRuleReactionDescription": "Mendiamkan notifikasi reaksi.", - "@notificationRuleReactionDescription": {}, "notificationRuleRoomServerAcl": "ACL Server Ruangan", - "@notificationRuleRoomServerAcl": {}, "notificationRuleRoomServerAclDescription": "Mendiamkan notifikasi daftar kontrol akses server ruangan (ACL).", - "@notificationRuleRoomServerAclDescription": {}, "notificationRuleSuppressEdits": "Diamkan Penyuntingan", - "@notificationRuleSuppressEdits": {}, "notificationRuleSuppressEditsDescription": "Mendiamkan notifikasi pesan tersunting.", - "@notificationRuleSuppressEditsDescription": {}, "notificationRuleCall": "Panggilan", - "@notificationRuleCall": {}, "notificationRuleCallDescription": "Memberi tahu pengguna tentang panggilan.", - "@notificationRuleCallDescription": {}, "notificationRuleEncryptedRoomOneToOne": "Ruangan Terenkripsi Satu ke Satu", - "@notificationRuleEncryptedRoomOneToOne": {}, "notificationRuleEncryptedRoomOneToOneDescription": "Memberi tahu pengguna tentang pesan dalam ruangan satu ke satu.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, "notificationRuleRoomOneToOne": "Ruangan Satu ke Satu", - "@notificationRuleRoomOneToOne": {}, "notificationRuleRoomOneToOneDescription": "Memberi tahu pengguna tentang pesan dalam ruangan satu ke satu.", - "@notificationRuleRoomOneToOneDescription": {}, "notificationRuleMessage": "Pesan", - "@notificationRuleMessage": {}, "notificationRuleMessageDescription": "Memberi tahu pengguna tentang pesan umum.", - "@notificationRuleMessageDescription": {}, "notificationRuleEncrypted": "Terenkripsi", - "@notificationRuleEncrypted": {}, "notificationRuleEncryptedDescription": "Memberi tahu pengguna tentang pesan dalam ruangan terenkripsi.", - "@notificationRuleEncryptedDescription": {}, "notificationRuleJitsi": "Jitsi", - "@notificationRuleJitsi": {}, "notificationRuleJitsiDescription": "Memberi tahu pengguna tentang peristiwa widget Jitsi.", - "@notificationRuleJitsiDescription": {}, "notificationRuleServerAcl": "Diamkan Peristiwa ACL Server", - "@notificationRuleServerAcl": {}, "notificationRuleServerAclDescription": "Mendiamkan notifikasi peristiwa ACL server.", - "@notificationRuleServerAclDescription": {}, "unknownPushRule": "Aturan dorongan '{rule}' tidak diketahui", "@unknownPushRule": { "type": "String", @@ -3275,23 +2587,13 @@ } }, "deletePushRuleCanNotBeUndone": "Jika kamu menghapus pengaturan notifikasi ini, maka tidak dapat diurungkan.", - "@deletePushRuleCanNotBeUndone": {}, "more": "Tambahan", - "@more": {}, "newChatRequest": "📩 Permintaan pesan baru", - "@newChatRequest": {}, "allDevices": "Semua perangkat", - "@allDevices": {}, "crossVerifiedDevices": "Perangkat terverifikasi silang", - "@crossVerifiedDevices": {}, "waitingForServer": "Menunggu server...", - "@waitingForServer": {}, - "appIntroduction": "FluffyChat memungkinkanmu untuk mengobrol dengan teman-temanmu di berbagai perpesanan. Pelajari lebih lanjut di https://matrix.org atau ketuk *Lanjutkan* saja.", - "@appIntroduction": {}, "notificationRuleContainsDisplayNameDescription": "Memberi tahu pengguna ketika pesan berisi nama tampilannya.", - "@notificationRuleContainsDisplayNameDescription": {}, "shareKeysWith": "Bagikan kunci dengan...", - "@shareKeysWith": {}, "synchronizingPleaseWaitCounter": " Sinkronisasi… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -3302,15 +2604,10 @@ } }, "shareKeysWithDescription": "Perangkat apa saja yang dipercayai supaya mereka bisa membaca bersama dengan pesanmu dalam obrolan terenkripsi?", - "@shareKeysWithDescription": {}, "verifiedDevicesOnly": "Perangkat terverifikasi saja", - "@verifiedDevicesOnly": {}, "crossVerifiedDevicesIfEnabled": "Verifikasi silang perangkat jika diaktifkan", - "@crossVerifiedDevicesIfEnabled": {}, "previous": "Sebelumnya", - "@previous": {}, "otherPartyNotLoggedIn": "Pihak lain belum masuk dan tidak dapat menerima pesan!", - "@otherPartyNotLoggedIn": {}, "appWantsToUseForLogin": "Gunakan '{server}' untuk masuk", "@appWantsToUseForLogin": { "type": "String", @@ -3321,35 +2618,17 @@ } }, "appWantsToUseForLoginDescription": "Anda memperbolehkan aplikasi dan situs web membagikan informasi tentang Anda.", - "@appWantsToUseForLoginDescription": {}, "open": "Buka", - "@open": {}, "takeAPhoto": "Ambil foto", - "@takeAPhoto": {}, "recordAVideo": "Rekam video", - "@recordAVideo": {}, "optionalMessage": "Pesan (opsional)...", - "@optionalMessage": {}, "notSupportedOnThisDevice": "Tidak didukung pada perangkat ini", - "@notSupportedOnThisDevice": {}, "enterNewChat": "Masuk ke obrolan baru", - "@enterNewChat": {}, "commandHint_roomupgrade": "Tingkatkan ruangan ini ke versi ruangan yang ditentukan", - "@commandHint_roomupgrade": {}, "pleaseWaitUntilInvited": "Silakan menunggu sampai seseorang dari ruangan mengundang Anda.", - "@pleaseWaitUntilInvited": {}, - "setCustomPermissionLevel": "Atur tingkat perizinan kustom", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Silakan pilih peran yang sudah ditentukan di bawah atau masukkan tingkat perizinan kustom antara 0 dan 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Abaikan pengguna", - "@ignoreUser": {}, - "normalUser": "Pengguna biasa", - "@normalUser": {}, "approve": "Terima", - "@approve": {}, "youHaveKnocked": "Anda telah mengetuk", - "@youHaveKnocked": {}, "sentVoiceMessage": "🎙️ {duration} - Pesan suara dari {sender}", "@sentVoiceMessage": { "type": "String", @@ -3363,7 +2642,6 @@ } }, "checkList": "Ceklis", - "@checkList": {}, "countInvited": "{count} diundang", "@countInvited": { "type": "String", @@ -3374,23 +2652,127 @@ } }, "commandHint_logout": "Keluar dari perangkatmu saat ini", - "@commandHint_logout": {}, "commandHint_logoutall": "Keluarkan semua perangkat aktif", - "@commandHint_logoutall": {}, "displayNavigationRail": "Tampilkan jalur navigasi pada ponsel", - "@displayNavigationRail": {}, "customReaction": "Reaksi khusus", - "@customReaction": {}, "moreEvents": "Peristiwa tambahan", - "@moreEvents": {}, "declineInvitation": "Tolak undangan", - "@declineInvitation": {}, "noMessagesYet": "Belum ada pesan", - "@noMessagesYet": {}, "longPressToRecordVoiceMessage": "Tekan lama untuk merekam pesan suara.", - "@longPressToRecordVoiceMessage": {}, "pause": "Jeda", - "@pause": {}, "resume": "Lanjut", - "@resume": {} -} + "changedTheChatDescription": "{username} mengubah deskripsi obrolan", + "changedTheChatName": "{username} mengubah nama obrolan", + "removeFromSpaceDescription": "Obrolan akan dihapus dari space tetapi masih muncul di daftar obrolan Anda.", + "countChats": "{chats} obrolan", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Anggota space dari {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "Anggota space dari {spaces} dapat mengetuk", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username} memulai polling.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "Polling", + "startPoll": "Mulai polling", + "endPoll": "Akhiri polling", + "answersVisible": "Jawaban terlihat", + "pollQuestion": "Pertanyaan polling", + "answerOption": "Opsi jawaban", + "addAnswerOption": "Tambah opsi jawaban", + "allowMultipleAnswers": "Izinkan beberapa jawaban", + "pollHasBeenEnded": "Polling telah diakhiri", + "countVotes": "{count, plural, =1{Satu suara} other{{count} suara}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "answersWillBeVisibleWhenPollHasEnded": "Jawaban akan terlihat saat polling telah diakhiri", + "replyInThread": "Balas dalam thread", + "countReplies": "{count, plural, =1{Satu balasan} other{{count} balasan}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "thread": "Thread", + "backToMainChat": "Kembali ke obrolan utama", + "saveChanges": "Simpan perubahan", + "createSticker": "Buat stiker atau emoji", + "useAsSticker": "Gunakan sebagai stiker", + "useAsEmoji": "Gunakan sebagai emoji", + "stickerPackNameAlreadyExists": "Nama paket stiker sudah ada", + "newStickerPack": "Paket stiker baru", + "stickerPackName": "Nama paket stiker", + "attribution": "Atribusi", + "skipChatBackup": "Lewati cadangan obrolan", + "skipChatBackupWarning": "Anda yakin? Tanpa mengaktifkan cadangan obrolan, Anda mungkin kehilangan akses ke pesan Anda jika Anda mengganti perangkat.", + "loadingMessages": "Memuat pesan", + "setupChatBackup": "Siapkan cadangan obrolan", + "noMoreResultsFound": "Tidak ada hasil lagi yang ditemukan", + "chatSearchedUntil": "Obrolan dicari hingga {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "URL Dasar Federasi", + "clientWellKnownInformation": "Informasi Client-Well-Known:", + "baseUrl": "URL Dasar", + "identityServer": "Server Identitas:", + "versionWithNumber": "Versi: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Log", + "advancedConfigs": "Konfigurasi Lanjutan", + "advancedConfigurations": "Konfigurasi lanjutan", + "signIn": "Masuk", + "createNewAccount": "Buat akun baru", + "signUpGreeting": "FluffyChat terdesentralisasi! Pilih server tempat Anda ingin membuat akun dan mari kita mulai!", + "signInGreeting": "Anda sudah memiliki akun di Matrix? Selamat datang kembali! Pilih homeserver Anda dan masuk.", + "appIntro": "Dengan FluffyChat Anda dapat mengobrol dengan teman-teman Anda. Ini adalah messenger [matrix] terdesentralisasi yang aman! Pelajari lebih lanjut di https://matrix.org jika Anda suka atau cukup daftar.", + "theProcessWasCanceled": "Proses dibatalkan." +} \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index 20258f7c..41f899c8 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -4,21 +4,11 @@ "type": "String", "placeholders": {} }, - "identity": "Identitá", - "@identity": { - "type": "String", - "placeholders": {} - }, "close": "Cluder", "@close": { "type": "String", "placeholders": {} }, - "confirm": "Confirmar", - "@confirm": { - "type": "String", - "placeholders": {} - }, "admin": "Administrator", "@admin": { "type": "String", @@ -29,16 +19,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Contene li nómine", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Contene li visibil nómine", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "copiedToClipboard": "Copiat al Paperiere", "@copiedToClipboard": { "type": "String", @@ -120,11 +100,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Provide vor hem-servitor", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "fromTheInvitation": "Pro invitation", "@fromTheInvitation": { "type": "String", @@ -180,11 +155,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Invitationes por me", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "lastActiveAgo": "Ultim activité: {localizedTimeShort}", "@lastActiveAgo": { "type": "String", @@ -229,11 +199,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Cambios inter membres", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "muteChat": "Assurdar li conversation", "@muteChat": { "type": "String", @@ -276,11 +241,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Ples selecter", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pushRules": "Regules de push-notificationes", "@pushRules": { "type": "String", @@ -291,11 +251,6 @@ "type": "String", "placeholders": {} }, - "removeDevice": "Remover li aparate", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "saveFile": "Gardar li file", "@saveFile": { "type": "String", @@ -328,11 +283,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Marcar quam (ín)leet", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "unblockDevice": "Deblocar li aparate", "@unblockDevice": { "type": "String", @@ -348,11 +298,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Tapete", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "messageType": "Tip de missage", "@messageType": {}, "start": "Iniciar", @@ -361,23 +306,10 @@ "@messageInfo": {}, "openGallery": "Aperter li galerie", "@openGallery": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "reportUser": "Raportar li usator", "@reportUser": {}, "voiceCall": "Telefonada", "@voiceCall": {}, - "nextAccount": "Sequent conto", - "@nextAccount": {}, - "previousAccount": "Precedent conto", - "@previousAccount": {}, "countFiles": "{count} files", "@countFiles": { "placeholders": { @@ -396,11 +328,6 @@ "type": "String", "placeholders": {} }, - "connect": "Conexer", - "@connect": { - "type": "String", - "placeholders": {} - }, "copy": "Copiar", "@copy": { "type": "String", @@ -421,11 +348,6 @@ "type": "String", "placeholders": {} }, - "rejoin": "Re-adherer", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Remover", "@remove": { "type": "String", @@ -441,21 +363,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{day}.{month}.{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "delete": "Remover", "@delete": { "type": "String", @@ -538,8 +445,6 @@ }, "time": "Hora", "@time": {}, - "publish": "Publicar", - "@publish": {}, "sender": "Autor", "@sender": {}, "dismiss": "Demisser", @@ -548,8 +453,6 @@ "@custom": {}, "emojis": "Emoji", "@emojis": {}, - "widgetCustom": "Personalisat", - "@widgetCustom": {}, "users": "Usatores", "@users": {}, "user": "Usator", @@ -584,11 +487,6 @@ "type": "String", "placeholders": {} }, - "license": "Licentie", - "@license": { - "type": "String", - "placeholders": {} - }, "or": "O", "@or": { "type": "String", @@ -606,11 +504,6 @@ "type": "String", "placeholders": {} }, - "people": "Homes", - "@people": { - "type": "String", - "placeholders": {} - }, "pin": "Fixar", "@pin": { "type": "String", @@ -732,11 +625,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Inviar li originale", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "theyMatch": "Corresponde", "@theyMatch": { "type": "String", @@ -752,8 +640,6 @@ "type": "String", "placeholders": {} }, - "addWidget": "Adjunter un widget", - "@addWidget": {}, "addAccount": "Adjunter un conto", "@addAccount": {}, "publicRooms": "Public chambres", @@ -776,11 +662,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Inviar un nota adhesiv", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "setStatus": "Assignar li statu", "@setStatus": { "type": "String", @@ -845,11 +726,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Missages de robots", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "changeDeviceName": "Cambiar li nómine de aparate", "@changeDeviceName": { "type": "String", @@ -894,8 +770,6 @@ "@commandInvalid": { "type": "String" }, - "widgetEtherpad": "Textual nota", - "@widgetEtherpad": {}, "banFromChat": "Bannir del conversation", "@banFromChat": { "type": "String", @@ -908,14 +782,8 @@ }, "commandHint_markasgroup": "Marcar quam gruppe", "@commandHint_markasgroup": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "screenSharingTitle": "partir li ecran", "@screenSharingTitle": {}, - "callingPermissions": "Permissiones de telefonada", - "@callingPermissions": {}, - "callingAccount": "Conto telefonante", - "@callingAccount": {}, "bannedUser": "{username} ha bannit {targetName}", "@bannedUser": { "type": "String", @@ -1028,39 +896,11 @@ } } }, - "badServerVersionsException": "Li hem-servitor supporta ti versiones de specification:\n{serverVersions}\nMa ti-ci application supporta solmen {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "dateWithoutYear": "{day}.{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "device": "Aparate", "@device": { "type": "String", "placeholders": {} }, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetName": "Nómine", - "@widgetName": {}, "account": "Conto", "@account": { "type": "String", @@ -1112,21 +952,8 @@ "@newGroup": {}, "newSpace": "Crear un spacie", "@newSpace": {}, - "enterSpace": "Intrar li spacie", - "@enterSpace": {}, - "enterRoom": "Intrar li chambre", - "@enterRoom": {}, "allSpaces": "Omni spacies", "@allSpaces": {}, - "numChats": "{number} conversationes", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "logout": "Cluder li session", "@logout": { "type": "String", @@ -1202,20 +1029,12 @@ "placeholders": {} }, "@jumpToLastReadMessage": {}, - "@allRooms": { - "type": "String", - "placeholders": {} - }, "@commandHint_cuddle": {}, "@noEncryptionForPublicRooms": { "type": "String", "placeholders": {} }, "@reportErrorDescription": {}, - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "@inviteContactToGroup": { "type": "String", "placeholders": { @@ -1224,7 +1043,6 @@ } } }, - "@chatHasBeenAddedToThisSpace": {}, "@removeYourAvatar": { "type": "String", "placeholders": {} @@ -1234,12 +1052,7 @@ "type": "String", "placeholders": {} }, - "@indexedDbErrorLong": {}, "@oneClientLoggedOut": {}, - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "@unsupportedAndroidVersionLong": {}, "@kicked": { "type": "String", @@ -1268,7 +1081,6 @@ "type": "String", "placeholders": {} }, - "@startFirstChat": {}, "@sentAPicture": { "type": "String", "placeholders": { @@ -1293,10 +1105,6 @@ "type": "String", "description": "Usage hint for the command /create" }, - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "@sentAFile": { "type": "String", "placeholders": { @@ -1380,10 +1188,6 @@ } } }, - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "@tryAgain": {}, "@areGuestsAllowedToJoin": { "type": "String", @@ -1425,7 +1229,6 @@ } }, "@youRejectedTheInvitation": {}, - "@otherCallingPermissions": {}, "@messagesStyle": {}, "@couldNotDecryptMessage": { "type": "String", @@ -1435,11 +1238,8 @@ } } }, - "@widgetUrlError": {}, - "@emailOrUsername": {}, "@newSpaceDescription": {}, "@chatDescription": {}, - "@callingAccountDetails": {}, "@pleaseFollowInstructionsOnWeb": { "type": "String", "placeholders": {} @@ -1457,17 +1257,7 @@ "type": "String", "placeholders": {} }, - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "@reopenChat": {}, - "@pleaseEnterRecoveryKey": {}, - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "@widgetNameError": {}, "@addToBundle": {}, "@spaceIsPublic": { "type": "String", @@ -1501,7 +1291,6 @@ } } }, - "@hydrateTor": {}, "@pushNotificationsNotAvailable": {}, "@storeInAppleKeyChain": {}, "@replaceRoomWithNewerVersion": { @@ -1520,7 +1309,6 @@ "type": "String", "placeholders": {} }, - "@signInWithPassword": {}, "@changedTheGuestAccessRulesTo": { "type": "String", "placeholders": { @@ -1557,21 +1345,9 @@ "type": "String", "placeholders": {} }, - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "@saveKeyManuallyDescription": {}, "@editBundlesForAccount": {}, "@whyIsThisMessageEncrypted": {}, - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "@rejectedTheInvitation": { "type": "String", "placeholders": { @@ -1596,14 +1372,6 @@ "type": "String", "placeholders": {} }, - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "@storeSecurlyOnThisDevice": {}, "@yourChatBackupHasBeenSetUp": {}, "@redactedBy": { @@ -1647,14 +1415,6 @@ } } }, - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "@changedTheRoomAliases": { "type": "String", "placeholders": { @@ -1753,14 +1513,6 @@ } } }, - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "@setAsCanonicalAlias": { "type": "String", "placeholders": {} @@ -1800,7 +1552,6 @@ "type": "String", "placeholders": {} }, - "@inviteContactToGroupQuestion": {}, "@redactedByBecause": { "type": "String", "placeholders": { @@ -1819,7 +1570,6 @@ } } }, - "@appearOnTopDetails": {}, "@roomHasBeenUpgraded": { "type": "String", "placeholders": {} @@ -1921,7 +1671,6 @@ "type": "String", "placeholders": {} }, - "@dehydrateTorLong": {}, "@yourPublicKey": { "type": "String", "placeholders": {} @@ -1957,7 +1706,6 @@ "placeholders": {} }, "@serverRequiresEmail": {}, - "@hideUnimportantStateEvents": {}, "@sentCallInformations": { "type": "String", "placeholders": { @@ -1966,7 +1714,6 @@ } } }, - "@addToSpaceDescription": {}, "@googlyEyesContent": { "type": "String", "placeholders": { @@ -1994,7 +1741,6 @@ "type": "String", "placeholders": {} }, - "@addChatDescription": {}, "@sentAnAudio": { "type": "String", "placeholders": { @@ -2051,8 +1797,6 @@ }, "@sendTypingNotifications": {}, "@inviteGroupChat": {}, - "@appearOnTop": {}, - "@invitePrivateChat": {}, "@verifyTitle": { "type": "String", "placeholders": {} @@ -2113,7 +1857,6 @@ "@notAnImage": {}, "@chatDescriptionHasBeenChanged": {}, "@bundleName": {}, - "@dehydrateTor": {}, "@removeFromSpace": {}, "@commandHint_op": { "type": "String", @@ -2159,7 +1902,6 @@ } } }, - "@profileNotFound": {}, "@jump": {}, "@reactedWith": { "type": "String", @@ -2209,10 +1951,6 @@ "type": "String", "placeholders": {} }, - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "@startedACall": { "type": "String", "placeholders": { @@ -2225,20 +1963,11 @@ "type": "String", "placeholders": {} }, - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "@visibilityOfTheChatHistory": { "type": "String", "placeholders": {} }, - "@setTheme": {}, "@youJoinedTheChat": {}, - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "@chatBackupDescription": { "type": "String", "placeholders": {} @@ -2256,7 +1985,6 @@ } } }, - "@errorAddingWidget": {}, "@commandHint_dm": { "type": "String", "description": "Usage hint for the command /dm" @@ -2307,9 +2035,7 @@ "placeholders": {} }, "@commandHint_googly": {}, - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "@createGroup": {}, - "@hydrateTorLong": {}, "@contentHasBeenReported": { "type": "String", "placeholders": {} @@ -2322,10 +2048,6 @@ "placeholders": {} }, "@importNow": {}, - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "@pinMessage": {}, "@screenSharingDetail": {}, "@invite": {}, @@ -2334,7 +2056,6 @@ "type": "String", "placeholders": {} }, - "@indexedDbErrorTitle": {}, "@endedTheCall": { "type": "String", "placeholders": { @@ -2343,4 +2064,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 6009bfa3..6ad2b9c5 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -118,18 +118,6 @@ } } }, - "badServerVersionsException": "L'homeserver supporta le versioni Spec:\n{serverVersions}\nMa questa applicazione supporta solo {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Bandisci dalla chat", "@banFromChat": { "type": "String", @@ -162,11 +150,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Messaggi bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Annulla", "@cancel": { "type": "String", @@ -396,31 +379,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Conferma", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Connetti", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Il contatto è stato invitato nel gruppo", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Contiene nome visibile", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Contiene nome utente", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Il contenuto è stato segnalato agli amministratori del server", "@contentHasBeenReported": { "type": "String", @@ -495,33 +458,6 @@ } } }, - "dateWithoutYear": "{day}/{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Disabiliterà il tuo account. Non puoi tornare indietro! Sei sicuro/a?", "@deactivateAccountWarning": { "type": "String", @@ -622,11 +558,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Devi scegliere una scorciatoia emote e aggiungere un immagine!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Discussione vuota", "@emptyChat": { "type": "String", @@ -676,11 +607,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Inserisci il tuo server principale", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "Tutto pronto!", "@everythingReady": { "type": "String", @@ -721,11 +647,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Vai nella nuova stanza", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Gruppo", "@group": { "type": "String", @@ -797,11 +718,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identità", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignora", "@ignore": { "type": "String", @@ -863,11 +779,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Invita per me", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} ti ha invitato/a a FluffyChat.\n1. Visita fluffychat.im e installa l'applicazione\n2. Iscriviti o accedi\n3. Apri il collegamento di invito: \n {link}", "@inviteText": { "type": "String", @@ -947,11 +858,6 @@ "type": "String", "placeholders": {} }, - "license": "Licenza", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Chiaro", "@lightTheme": { "type": "String", @@ -995,11 +901,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Cambiamenti di membri", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Menzione", "@mention": { "type": "String", @@ -1095,11 +996,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notifiche abilitate per questo account", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} utenti stanno scrivendo…", "@numUsersTyping": { "type": "String", @@ -1179,11 +1075,6 @@ "type": "String", "placeholders": {} }, - "people": "Persone", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Scegli un'immagine", "@pickImage": { "type": "String", @@ -1286,11 +1177,6 @@ } } }, - "rejoin": "Riunisciti", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Rimuovi", "@remove": { "type": "String", @@ -1310,11 +1196,6 @@ } } }, - "removeDevice": "Rimuovi il dispositivo", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Rimuovi il ban dalla chat", "@unbanFromChat": { "type": "String", @@ -1360,15 +1241,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Visto da {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Invia", "@send": { "type": "String", @@ -1399,11 +1271,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Invia l'originale", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Invia un video", "@sendVideo": { "type": "String", @@ -1463,21 +1330,6 @@ } } }, - "setCustomEmotes": "Imposta emoticon personalizzate", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Imposta il collegamento di invito", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Imposta il livello di autorizzazione", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Imposta lo stato", "@setStatus": { "type": "String", @@ -1562,21 +1414,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Attiva/disattiva preferito", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Attiva/disattiva il silenziatore", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Segna come letto / non letto", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Troppe richieste. Per favore riprova più tardi!", "@tooManyRequestsWarning": { "type": "String", @@ -1643,15 +1480,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 discussione non letta} other{{unreadCount} discussioni non lette}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} e {count} altri stanno scrivendo…", "@userAndOthersAreTyping": { "type": "String", @@ -1776,11 +1604,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Immagine di sfondo:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Attenzione!", "@warning": { "type": "String", @@ -1846,11 +1669,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Accesso singolo", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Imposta come alias principale", "@setAsCanonicalAlias": { "type": "String", @@ -1871,11 +1689,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Si prega di scegliere", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "or": "O", "@or": { "type": "String", @@ -1915,11 +1728,6 @@ "type": "String", "description": "Usage hint for the command /ban" }, - "sendSticker": "Invia adesivo", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "commandHint_html": "Invia testo formattato in HTML", "@commandHint_html": { "type": "String", @@ -2002,11 +1810,6 @@ }, "jumpToLastReadMessage": "Salta all'ultimo messaggio letto", "@jumpToLastReadMessage": {}, - "allRooms": "Tutte le chat di gruppo", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "obtainingLocation": "Ottengo la posizione…", "@obtainingLocation": { "type": "String", @@ -2014,32 +1817,18 @@ }, "commandHint_cuddle": "Invia una coccola", "@commandHint_cuddle": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, "dismiss": "Chiudi", "@dismiss": {}, "reportErrorDescription": "😭 Oh no. Qualcosa è andato storto. Se vuoi, puoi segnalare questo bug agli sviluppatori.", "@reportErrorDescription": {}, - "chatHasBeenAddedToThisSpace": "La chat è stata aggiunta a questo spazio", - "@chatHasBeenAddedToThisSpace": {}, "unsupportedAndroidVersion": "Versione di Android non supportata", "@unsupportedAndroidVersion": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "messageType": "Tipo del Messaggio", "@messageType": {}, - "indexedDbErrorLong": "Sfortunatamente l'archiviazione dei messaggi non è abilitata in modalità privata per impostazione predefinita.\nPer favore visita\n - about:config\n - imposta dom.indexedDB.privateBrowsing.enabled su true\nAltrimenti, non è possibile eseguire FluffyChat.", - "@indexedDbErrorLong": {}, "oneClientLoggedOut": "Uno dei tuoi client è stato disconnesso", "@oneClientLoggedOut": {}, - "startFirstChat": "Inizia la tua prima chat", - "@startFirstChat": {}, - "callingAccount": "Account di chiamata", - "@callingAccount": {}, "setColorTheme": "Imposta tema colore:", "@setColorTheme": {}, - "nextAccount": "Account successivo", - "@nextAccount": {}, "commandHint_create": "Crea una chat di gruppo vuota\nUtilizza --no-encryption per disattivare la criptazione", "@commandHint_create": { "type": "String", @@ -2082,15 +1871,8 @@ }, "banUserDescription": "L'utente sarà bannato dalla chat e non sarà in grado di rientrare finché non verrà sbannato.", "@banUserDescription": {}, - "widgetEtherpad": "Nota di testo", - "@widgetEtherpad": {}, "removeDevicesDescription": "Sarai disconnesso da questo dispositivo e non potrai più ricevere messaggi.", "@removeDevicesDescription": {}, - "separateChatTypes": "Separare le chat dirette e i gruppi", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "tryAgain": "Riprova", "@tryAgain": {}, "youKickedAndBanned": "🙅 Hai rimosso e bannato {user}", @@ -2107,32 +1889,16 @@ "@sendOnEnter": {}, "youRejectedTheInvitation": "Hai rifiutato l'invito", "@youRejectedTheInvitation": {}, - "otherCallingPermissions": "Microfono, fotocamera e altri permessi di FluffyChat", - "@otherCallingPermissions": {}, "messagesStyle": "Messaggi:", "@messagesStyle": {}, - "widgetUrlError": "Questo non è un URL valido.", - "@widgetUrlError": {}, - "emailOrUsername": "Email o nome utente", - "@emailOrUsername": {}, "newSpaceDescription": "Gli spazi ti permettono di consolidare le tue chat e di creare comunità private o pubbliche.", "@newSpaceDescription": {}, "chatDescription": "Descrizione della chat", "@chatDescription": {}, - "callingAccountDetails": "Dai l'autorizzazione a FluffyChat di usare l'app di composizione Android nativa.", - "@callingAccountDetails": {}, - "enterSpace": "Unirsi allo spazio", - "@enterSpace": {}, "encryptThisChat": "Cifra questa chat", "@encryptThisChat": {}, - "previousAccount": "Account precedente", - "@previousAccount": {}, "reopenChat": "Riapri la chat", "@reopenChat": {}, - "pleaseEnterRecoveryKey": "Per favore inserisci la tua chiave di recupero:", - "@pleaseEnterRecoveryKey": {}, - "widgetNameError": "Per favore fornire un nome da visualizzare.", - "@widgetNameError": {}, "addToBundle": "Aggiungi al bundle", "@addToBundle": {}, "spaceIsPublic": "Lo spazio è pubblico", @@ -2140,8 +1906,6 @@ "type": "String", "placeholders": {} }, - "addWidget": "Aggiungi widget", - "@addWidget": {}, "countFiles": "{count} file", "@countFiles": { "placeholders": { @@ -2163,8 +1927,6 @@ } } }, - "hydrateTor": "Utenti TOR: Importa l'esportazione della sessione", - "@hydrateTor": {}, "pushNotificationsNotAvailable": "Notifiche push non disponibili", "@pushNotificationsNotAvailable": {}, "storeInAppleKeyChain": "Salva nel portachiavi di Apple", @@ -2179,8 +1941,6 @@ "@sender": {}, "storeInAndroidKeystore": "Salva nel KeyStore di Android", "@storeInAndroidKeystore": {}, - "signInWithPassword": "Accedi con la password", - "@signInWithPassword": {}, "makeAdminDescription": "Una volta che fai questo utente amministratore, potresti non essere in grado di rimuoverlo, in quanto avrà i tuoi stessi privilegi.", "@makeAdminDescription": {}, "synchronizingPleaseWait": "Sincronizzazione... Attendere prego.", @@ -2223,36 +1983,16 @@ }, "videoCallsBetaWarning": "Nota che le video chiamate sono attualmente in beta. Potrebbero non funzionare come previsto o non funzionare del tutto su alcune piattaforme.", "@videoCallsBetaWarning": {}, - "signInWith": "Accedi con {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "fileIsTooBigForServer": "Impossibile inviare! Il server supporta solo allegati fino a {max}.", "@fileIsTooBigForServer": {}, "homeserver": "Homeserver", "@homeserver": {}, - "callingPermissions": "Permessi di chiamata", - "@callingPermissions": {}, "readUpToHere": "Letto fino a qui", "@readUpToHere": {}, "start": "Inizio", "@start": {}, "unlockOldMessages": "Sblocca i vecchi messaggi", "@unlockOldMessages": {}, - "numChats": "{number} chat", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "optionalRedactReason": "(Opzionale) Ragione per rimuovere questo messaggio...", "@optionalRedactReason": {}, "dehydrate": "Esporta la sessione e cancella il dispositivo", @@ -2266,21 +2006,10 @@ "@archiveRoomDescription": {}, "exportEmotePack": "Esporta pack di Emote come .zip", "@exportEmotePack": {}, - "switchToAccount": "Passa all'account {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "experimentalVideoCalls": "Video chiamate sperimentali", "@experimentalVideoCalls": {}, "pleaseEnterRecoveryKeyDescription": "Per sbloccare i tuoi vecchi messaggi, per favore inserisci la tua chiave di recupero che è stata generata nella tua sessione precedente. La tua chiave di recupero NON è la tua password.", "@pleaseEnterRecoveryKeyDescription": {}, - "inviteContactToGroupQuestion": "Vuoi invitare {contact} nella chat \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "Rimosso da {username} per: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2301,10 +2030,6 @@ } } }, - "appearOnTopDetails": "Permetti all'app di apparire in alto (non necessario se hai già impostato Fluffychat come account di chiamata)", - "@appearOnTopDetails": {}, - "enterRoom": "Unirsi alla stanza", - "@enterRoom": {}, "reportUser": "Segnala utente", "@reportUser": {}, "confirmEventUnpin": "Sei sicuro di voler permanentemente sfissare l'evento?", @@ -2347,8 +2072,6 @@ }, "invalidInput": "Contenuto non valido!", "@invalidInput": {}, - "dehydrateTorLong": "Per gli utenti TOR, è raccomandato esportare la sessione prima di chiudere la finestra.", - "@dehydrateTorLong": {}, "commandHint_myroomnick": "Imposta il nome visualizzato per questa stanza", "@commandHint_myroomnick": { "type": "String", @@ -2358,14 +2081,8 @@ "@doNotShowAgain": {}, "report": "segnala", "@report": {}, - "hideUnimportantStateEvents": "Nascondi gli eventi di stato non importanti", - "@hideUnimportantStateEvents": {}, "screenSharingTitle": "condivisione schermo", "@screenSharingTitle": {}, - "widgetCustom": "Personalizzati", - "@widgetCustom": {}, - "addToSpaceDescription": "Seleziona una spazio a cui aggiungere questa chat.", - "@addToSpaceDescription": {}, "googlyEyesContent": "{senderName} ti ha inviato degli occhi finti", "@googlyEyesContent": { "type": "String", @@ -2383,8 +2100,6 @@ } } }, - "addChatDescription": "Aggiungi una descrizione chat...", - "@addChatDescription": {}, "commandHint_myroomavatar": "Importa la foto profilo per questa stanza ( mxc-uri)", "@commandHint_myroomavatar": { "type": "String", @@ -2398,8 +2113,6 @@ } } }, - "publish": "Pubblicare", - "@publish": {}, "openLinkInBrowser": "Apri il collegamento nel browser", "@openLinkInBrowser": {}, "commandHint_react": "Rispondi con una reazione", @@ -2431,10 +2144,6 @@ "@sendTypingNotifications": {}, "inviteGroupChat": "📨 Invita a una chat di gruppo", "@inviteGroupChat": {}, - "appearOnTop": "Appare in alto", - "@appearOnTop": {}, - "invitePrivateChat": "📨 Invita a una chat privata", - "@invitePrivateChat": {}, "foregroundServiceRunning": "Questa notifica viene mostrata quando il servizio in primo piano è in esecuzione.", "@foregroundServiceRunning": {}, "voiceCall": "Chiamata vocale", @@ -2485,8 +2194,6 @@ "@newGroup": {}, "bundleName": "Nome del bundle", "@bundleName": {}, - "dehydrateTor": "Utenti TOR: Esporta la sessione", - "@dehydrateTor": {}, "removeFromSpace": "Rimuovi dallo spazio", "@removeFromSpace": {}, "commandHint_op": "Imposta il livello di privilegi dell'utente specificato (predefinito: 50)", @@ -2516,8 +2223,6 @@ } } }, - "profileNotFound": "Impossibile trovare l'utente sul server. Forse c'è un problema di connessione oppure l'utente non esiste.", - "@profileNotFound": {}, "jump": "Salta", "@jump": {}, "reactedWith": "{sender} ha reagito con {reaction}", @@ -2534,15 +2239,6 @@ }, "sorryThatsNotPossible": "Scusa... questo non è possibile", "@sorryThatsNotPossible": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "shareInviteLink": "Condividi link d'invito", "@shareInviteLink": {}, "commandHint_markasdm": "Contrassegna questo Matrix ID come stanza di messaggi diretti", @@ -2565,21 +2261,10 @@ "type": "String", "placeholders": {} }, - "setTheme": "Imposta tema:", - "@setTheme": {}, "youJoinedTheChat": "Sei entrato/a nella chat", "@youJoinedTheChat": {}, - "openVideoCamera": "Apri la fotocamera per un video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "markAsRead": "Segna come letto", "@markAsRead": {}, - "widgetName": "Nome", - "@widgetName": {}, - "errorAddingWidget": "Errore aggiungendo il widget.", - "@errorAddingWidget": {}, "commandHint_dm": "Avvia una chat diretta\nUsa --no-encryption per disabilitare la crittografia", "@commandHint_dm": { "type": "String", @@ -2603,12 +2288,8 @@ "@emojis": {}, "commandHint_googly": "Invia degli occhi finti", "@commandHint_googly": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Per favore riprova più tardi o scegli un server diverso.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "createGroup": "Crea gruppo", "@createGroup": {}, - "hydrateTorLong": "Hai esportato la tua sessione l'ultima volta con TOR? Importala velocemente e continua a chattare.", - "@hydrateTorLong": {}, "time": "Tempo", "@time": {}, "custom": "Personalizzato", @@ -2629,8 +2310,6 @@ "@invite": {}, "enableMultiAccounts": "(BETA) Abilita account multipli su questo dispositivo", "@enableMultiAccounts": {}, - "indexedDbErrorTitle": "Problemi con la modalità privata", - "@indexedDbErrorTitle": {}, "unsupportedAndroidVersionLong": "Questa funzionalità richiede una versione di Android più recente. Si prega di verificare la presenza di aggiornamenti o supporto per Lineage OS.", "@unsupportedAndroidVersionLong": {}, "storeSecurlyOnThisDevice": "Salva in modo sicuro su questo dispositivo", @@ -2647,8 +2326,6 @@ "@blockUsername": {}, "createGroupAndInviteUsers": "Crea un gruppo e invita gli utenti", "@createGroupAndInviteUsers": {}, - "startConversation": "Inizia una conversazione", - "@startConversation": {}, "groupCanBeFoundViaSearch": "Il gruppo può essere cercato", "@groupCanBeFoundViaSearch": {}, "noUsersFoundWithQuery": "Sfortunatamente non è stato trovato nessun utente con \"{query}\". Per favore controlla se hai fatto un errore di battitura.", @@ -2676,18 +2353,8 @@ "@searchChatsRooms": {}, "databaseMigrationBody": "Attendere prego. L'operazione potrebbe richiedere un momento.", "@databaseMigrationBody": {}, - "youInvitedToBy": "📩 Sei stato invitato tramite link in:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "addChatOrSubSpace": "Aggiungi chat o sottospazio", "@addChatOrSubSpace": {}, - "subspace": "Sottospazio", - "@subspace": {}, "publicSpaces": "Spazio pubblico", "@publicSpaces": {}, "hidePresences": "Nascondere l'elenco degli stati?", @@ -2696,18 +2363,6 @@ "@pleaseEnterYourCurrentPassword": {}, "passwordIsWrong": "La password inserita è sbagliata", "@passwordIsWrong": {}, - "databaseBuildErrorBody": "Impossibile costruire il database SQlite. L'applicazione proverà ad usare il database legacy per ora. Per favore segnala questo errore agli sviluppatori su {url}. Il messaggio di errore è: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "select": "Seleziona", "@select": {}, "newPassword": "Nuova password", @@ -2716,15 +2371,6 @@ "@pleaseChooseAStrongPassword": {}, "thisDevice": "Questo dispositivo:", "@thisDevice": {}, - "forwardMessageTo": "Inoltra messaggio in {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "verifyOtherUser": "🔐 Verifica altro utente", "@verifyOtherUser": {}, "verifyOtherUserDescription": "Se verifichi un altro utente, puoi essere certo di sapere a chi stai realmente scrivendo. 💪\n\nQuando inizi una verifica, tu e l'altro utente vedrete un popup nell'app. Lì vedrai una serie di emoji o numeri che dovrai confrontare tra loro.\n\nIl modo migliore per farlo è incontrarsi o avviare una videochiamata. 👭", @@ -2740,28 +2386,20 @@ "type": "String", "placeholders": {} }, - "publicLink": "Link pubblico", - "@publicLink": {}, "leaveEmptyToClearStatus": "Lascia vuoto per cancellare il tuo stato.", "@leaveEmptyToClearStatus": {}, - "decline": "Declina", - "@decline": {}, "transparent": "Trasparente", "@transparent": {}, "incomingMessages": "Messaggi in arrivo", "@incomingMessages": {}, "noChatsFoundHere": "Nessuna chat trovata. Inizia una nuova chat con qualcuno usando il pulsante qui sotto. ⤵️", "@noChatsFoundHere": {}, - "joinedChats": "Chat a cui partecipi", - "@joinedChats": {}, "unread": "Non letti", "@unread": {}, "space": "Spazio", "@space": {}, "spaces": "Spazi", "@spaces": {}, - "notifyMeFor": "Avvisami per", - "@notifyMeFor": {}, "invitedBy": "📩 Invitato da {user}", "@invitedBy": { "placeholders": { @@ -2776,29 +2414,10 @@ "@hideInvalidOrUnknownMessageFormats": {}, "overview": "Panoramica", "@overview": {}, - "presenceStyle": "Presenza:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "swipeRightToLeftToReply": "Scorri da destra a sinistra per rispondere", "@swipeRightToLeftToReply": {}, "globalChatId": "ID chat globale", "@globalChatId": {}, - "hideMemberChangesInPublicChats": "Nascondi le modifiche dei membri nelle chat pubbliche", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Per migliorare la leggibilità, non mostrare nella cronologia della chat se qualcuno si unisce o abbandona una chat pubblica.", - "@hideMemberChangesInPublicChatsBody": {}, - "userWouldLikeToChangeTheChat": "{user} vorrebbe unirsi alla chat.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Non è stato ancora creato alcun link pubblico", - "@noPublicLinkHasBeenCreatedYet": {}, "appLockDescription": "Blocca l'app con un codice PIN quando non è in uso", "@appLockDescription": {}, "noOneCanJoin": "Nessuno può unirsi", @@ -2827,18 +2446,6 @@ "@passwordRecoverySettings": {}, "noMoreChatsFound": "Non sono state trovate altre chat...", "@noMoreChatsFound": {}, - "countChatsAndCountParticipants": "{chats} chat e {participants} partecipanti", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "stickers": "Adesivi", "@stickers": {}, "searchMore": "Cerca di più...", @@ -2929,17 +2536,6 @@ "@publicChatAddresses": {}, "createNewAddress": "Crea un nuovo indirizzo", "@createNewAddress": {}, - "userRole": "Ruolo utente", - "@userRole": {}, - "minimumPowerLevel": "{level} è il livello minimo di privilegi.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchIn": "Cerca nella chat \"{chat}\"...", "@searchIn": { "type": "String", @@ -3098,12 +2694,6 @@ "@changeGeneralChatSettings": {}, "loginWithMatrixId": "Accedi con il Matrix ID", "@loginWithMatrixId": {}, - "homeserverDescription": "Tutti i tuoi dati sono archiviati sull'homeserver, proprio come un provider di posta elettronica. Puoi scegliere quale homeserver vuoi usare, mentre puoi comunque comunicare con tutti. Scopri di più su https://matrix.org.", - "@homeserverDescription": {}, - "discoverHomeservers": "Scopri gli homeserver", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "Cos'è un homeserver?", - "@whatIsAHomeserver": {}, "changelog": "Registro delle modifiche", "@changelog": {}, "doesNotSeemToBeAValidHomeserver": "Non sembra essere un homeserver compatibile. URL sbagliato?", @@ -3297,8 +2887,6 @@ "@open": {}, "appWantsToUseForLoginDescription": "Con la presente consenti all'app e al sito web di condividere informazioni su di te.", "@appWantsToUseForLoginDescription": {}, - "appIntroduction": "FluffyChat ti consente di chattare con i tuoi amici attraverso diverse app di messaggistica. Ulteriori informazioni su https://matrix.org o semplicemente tocca *Continua*.", - "@appIntroduction": {}, "waitingForServer": "In attesa del server...", "@waitingForServer": {}, "synchronizingPleaseWaitCounter": " Sincronizzazione… ({percentage}%)", @@ -3332,14 +2920,8 @@ "@notSupportedOnThisDevice": {}, "enterNewChat": "Inizia nuova chat", "@enterNewChat": {}, - "setCustomPermissionLevel": "Imposta livello di permesso personalizzato", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Scegli un ruolo predefinito qui sotto o inserisci un livello di permesso personalizzato tra 0 e 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Ignora utente", "@ignoreUser": {}, - "normalUser": "Utente normale", - "@normalUser": {}, "commandHint_roomupgrade": "Aggiorna questa stanza alla versione specificata", "@commandHint_roomupgrade": {}, "optionalMessage": "Messaggio (opzionale)...", @@ -3392,13 +2974,5 @@ "pause": "Pausa", "@pause": {}, "resume": "Riprendi", - "@resume": {}, - "newSubSpace": "Nuovo sotto sapzio", - "@newSubSpace": {}, - "moveToDifferentSpace": "Cambia spazio", - "@moveToDifferentSpace": {}, - "moveUp": "Muoviti sopra", - "@moveUp": {}, - "moveDown": "Muoviti sotto", - "@moveDown": {} -} + "@resume": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index 3cf02e2a..b82e405f 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -119,18 +119,6 @@ } } }, - "badServerVersionsException": "ホームサーバーでサポートされているバージョン:\n{serverVersions}\nアプリでは{supportedVersions}しかサポートされていません", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "チャットからBANする", "@banFromChat": { "type": "String", @@ -163,11 +151,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "ボットメッセージ", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "キャンセル", "@cancel": { "type": "String", @@ -187,7 +170,7 @@ } } }, - "changedTheChatDescriptionTo": "{username}がチャットの説明を「{description}」に変更しました", + "changedTheChatDescriptionTo": "{username}がチャットの説明を「{description}」に変更した", "@changedTheChatDescriptionTo": { "type": "String", "placeholders": { @@ -199,7 +182,7 @@ } } }, - "changedTheChatNameTo": "{username}がチャットの名前を「{chatname}」に変更しました", + "changedTheChatNameTo": "{username}がチャットの名前を「{chatname}」に変更した", "@changedTheChatNameTo": { "type": "String", "placeholders": { @@ -220,7 +203,7 @@ } } }, - "changedTheDisplaynameTo": "{username}が表示名を「{displayname}」に変更しました", + "changedTheDisplaynameTo": "{username}が表示名を「{displayname}」に変更した", "@changedTheDisplaynameTo": { "type": "String", "placeholders": { @@ -378,7 +361,6 @@ "placeholders": {} }, "clearArchive": "アーカイブを消去", - "@clearArchive": {}, "close": "閉じる", "@close": { "type": "String", @@ -399,31 +381,11 @@ "type": "String", "placeholders": {} }, - "confirm": "確認", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "接続", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "連絡先に登録された人が招待されました", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "表示名を含んでいます", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "ユーザー名を含んでいます", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "サーバー管理者に通報されました", "@contentHasBeenReported": { "type": "String", @@ -498,33 +460,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}/{month}/{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "あなたのアカウントを無効化します。この操作は元に戻せません!よろしいですか?", "@deactivateAccountWarning": { "type": "String", @@ -630,11 +565,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Emoteショートコードと画像を選択してください!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "空のチャット", "@emptyChat": { "type": "String", @@ -684,11 +614,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "ホームサーバーを入力してください", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "すべての準備は完了しました!", "@everythingReady": { "type": "String", @@ -729,11 +654,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "新規ルームへ", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "グループ", "@group": { "type": "String", @@ -805,11 +725,6 @@ "type": "String", "placeholders": {} }, - "identity": "アイデンティティ", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "無視する", "@ignore": { "type": "String", @@ -871,12 +786,7 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "自分への招待", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "inviteText": "{username}がFluffyChatにあなたを招待しました. \n1. FluffyChatをインストールしてください: https://fluffychat.im \n2. 新しくアカウントを作成するかサインインしてください\n3. 招待リンクを開いてください: {link}", + "inviteText": "{username}があなたをFluffyChatに招待しました。\n1. FluffyChatをインストール: fluffychat.im \n2. アカウントの作成、またはサインインを行う\n3. 招待リンクを開く\n {link}", "@inviteText": { "type": "String", "placeholders": { @@ -955,11 +865,6 @@ "type": "String", "placeholders": {} }, - "license": "ライセンス", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "ライト", "@lightTheme": { "type": "String", @@ -1003,11 +908,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "メンバーの変更", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "メンション", "@mention": { "type": "String", @@ -1103,11 +1003,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "このアカウントでは通知が有効です", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count}人が入力中…", "@numUsersTyping": { "type": "String", @@ -1187,11 +1082,6 @@ "type": "String", "placeholders": {} }, - "people": "人々", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "画像を選択してください", "@pickImage": { "type": "String", @@ -1299,11 +1189,6 @@ } } }, - "rejoin": "再参加", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "消去", "@remove": { "type": "String", @@ -1323,11 +1208,6 @@ } } }, - "removeDevice": "デバイスの削除", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "チャットからのブロックを解除する", "@unbanFromChat": { "type": "String", @@ -1373,15 +1253,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username}が既読", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "送信", "@send": { "type": "String", @@ -1412,11 +1283,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "オリジナルの送信", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "動画を送信", "@sendVideo": { "type": "String", @@ -1481,21 +1347,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "カスタムエモートの設定", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "招待リンクを設定する", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "権限レベルをセット", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "ステータスの設定", "@setStatus": { "type": "String", @@ -1580,21 +1431,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "お気に入り切り替え", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "ミュート切り替え", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "既読/未読にマーク", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "リクエストが多すぎます。また後で試してみてください!", "@tooManyRequestsWarning": { "type": "String", @@ -1661,15 +1497,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1件の未読メッセージ} other{{unreadCount}件の未読メッセージ}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username}と他{count}名が入力しています…", "@userAndOthersAreTyping": { "type": "String", @@ -1794,11 +1621,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "壁紙", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "警告!", "@warning": { "type": "String", @@ -1870,7 +1692,6 @@ "placeholders": {} }, "addToSpace": "スペースに追加", - "@addToSpace": {}, "cantOpenUri": "URIが開けません {uri}", "@cantOpenUri": { "type": "String", @@ -1881,23 +1702,18 @@ } }, "repeatPassword": "パスワードを繰り返そ", - "@repeatPassword": {}, "autoplayImages": "GIFを自動的に再生する", "@autoplayImages": { "type": "String", "placeholder": {} }, "yourChatBackupHasBeenSetUp": "チャットバックアップを設定ました。", - "@yourChatBackupHasBeenSetUp": {}, "sendOnEnter": "Enterで送信", - "@sendOnEnter": {}, "changeYourAvatar": "アバタるを変化しする", "@changeYourAvatar": { "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "このスペースにチャットが追加されました", - "@chatHasBeenAddedToThisSpace": {}, "commandHint_ban": "このユーザーを禁止する", "@commandHint_ban": { "type": "String", @@ -1923,9 +1739,7 @@ "description": "Usage hint for the command /discardsession" }, "confirmMatrixId": "アカウントを削除するには、Matrix IDを確認してください。", - "@confirmMatrixId": {}, "commandHint_markasgroup": "グループとしてマーク", - "@commandHint_markasgroup": {}, "commandHint_join": "指定した部屋に参加", "@commandHint_join": { "type": "String", @@ -1937,7 +1751,6 @@ "description": "Usage hint for the command /send" }, "hydrate": "バックアップファイルから復元", - "@hydrate": {}, "commandHint_html": "HTML形式のテキストを送信", "@commandHint_html": { "type": "String", @@ -1959,43 +1772,17 @@ "description": "State that {command} is not a valid /command." }, "oneClientLoggedOut": "クライアントの 1つがログアウトしました", - "@oneClientLoggedOut": {}, "addAccount": "アカウントを追加", - "@addAccount": {}, "editBundlesForAccount": "このアカウントのバンドルを編集", - "@editBundlesForAccount": {}, "unverified": "未検証", - "@unverified": {}, "sender": "送信者", - "@sender": {}, "placeCall": "電話をかける", - "@placeCall": {}, "voiceCall": "音声通話", - "@voiceCall": {}, "unsupportedAndroidVersionLong": "この機能を利用するには、より新しいAndroidのバージョンが必要です。アップデートまたはLineage OSのサポートをご確認ください。", - "@unsupportedAndroidVersionLong": {}, - "widgetVideo": "動画", - "@widgetVideo": {}, - "widgetName": "名称", - "@widgetName": {}, - "widgetCustom": "カスタム", - "@widgetCustom": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "dehydrateWarning": "この操作は元に戻せません。バックアップファイルを安全に保存してください。", - "@dehydrateWarning": {}, "dehydrate": "セッションのエクスポートとデバイスの消去", - "@dehydrate": {}, "messageType": "メッセージの種類", - "@messageType": {}, "start": "開始", - "@start": {}, - "publish": "公開", - "@publish": {}, - "indexedDbErrorTitle": "プライベートモードに関する問題", - "@indexedDbErrorTitle": {}, - "addWidget": "ウィジェットを追加", - "@addWidget": {}, "youBannedUser": "{user} を禁止しました", "@youBannedUser": { "placeholders": { @@ -2005,7 +1792,6 @@ } }, "youJoinedTheChat": "チャットに参加しました", - "@youJoinedTheChat": {}, "youHaveWithdrawnTheInvitationFor": "{user} への招待を取り下げました", "@youHaveWithdrawnTheInvitationFor": { "placeholders": { @@ -2015,26 +1801,18 @@ } }, "users": "ユーザー", - "@users": {}, "youRejectedTheInvitation": "招待を拒否しました", - "@youRejectedTheInvitation": {}, "screenSharingDetail": "FuffyChatで画面を共有しています", - "@screenSharingDetail": {}, "homeserver": "ホームサーバー", - "@homeserver": {}, "scanQrCode": "QRコードをスキャン", - "@scanQrCode": {}, "obtainingLocation": "位置情報を取得しています…", "@obtainingLocation": { "type": "String", "placeholders": {} }, "addToBundle": "バンドルに追加", - "@addToBundle": {}, "removeFromBundle": "このバンドルから削除", - "@removeFromBundle": {}, "bundleName": "バンドル名", - "@bundleName": {}, "noMatrixServer": "{server1} はMatrixのサーバーではありません。代わりに {server2} を使用しますか?", "@noMatrixServer": { "type": "String", @@ -2047,13 +1825,7 @@ } } }, - "openVideoCamera": "ビデオ用にカメラを開く", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "link": "リンク", - "@link": {}, "or": "または", "@or": { "type": "String", @@ -2075,12 +1847,6 @@ "placeholders": {} }, "recoveryKey": "リカバリーキー", - "@recoveryKey": {}, - "singlesignon": "シングルサインオン", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "spaceIsPublic": "スペースは公開されています", "@spaceIsPublic": { "type": "String", @@ -2091,50 +1857,13 @@ "type": "String", "placeholders": {} }, - "startFirstChat": "最初のチャットを開始する", - "@startFirstChat": {}, - "addToSpaceDescription": "このチャットを追加するスペースを選択してください。", - "@addToSpaceDescription": {}, "messageInfo": "メッセージの情報", - "@messageInfo": {}, "openGallery": "ギャラリーを開く", - "@openGallery": {}, "removeFromSpace": "スペースから削除", - "@removeFromSpace": {}, "pleaseEnterRecoveryKeyDescription": "古いメッセージを解除するには、以前のセッションで生成されたリカバリーキーを入力してください。リカバリーキーはパスワードではありません。", - "@pleaseEnterRecoveryKeyDescription": {}, - "videoWithSize": "ビデオ ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "openChat": "チャットを開く", - "@openChat": {}, "experimentalVideoCalls": "実験的なビデオ通話", - "@experimentalVideoCalls": {}, - "emailOrUsername": "メールアドレスまたはユーザー名", - "@emailOrUsername": {}, - "switchToAccount": "アカウント {number} に切り替える", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "次のアカウント", - "@nextAccount": {}, "youAcceptedTheInvitation": "👍 招待を承諾しました", - "@youAcceptedTheInvitation": {}, - "errorAddingWidget": "ウィジェットの追加中にエラーが発生しました。", - "@errorAddingWidget": {}, - "widgetNameError": "表示名を入力してください。", - "@widgetNameError": {}, "youUnbannedUser": "{user} の禁止を解除しました", "@youUnbannedUser": { "placeholders": { @@ -2168,23 +1897,12 @@ } }, "storeInAppleKeyChain": "Apple KeyChainに保存", - "@storeInAppleKeyChain": {}, "storeInAndroidKeystore": "Android KeyStoreに保存する", - "@storeInAndroidKeystore": {}, "storeInSecureStorageDescription": "このデバイスの安全なストレージにリカバリーキーを保存。", - "@storeInSecureStorageDescription": {}, "unlockOldMessages": "古いメッセージのロックを解除する", - "@unlockOldMessages": {}, - "callingAccount": "通話アカウント", - "@callingAccount": {}, - "callingPermissions": "通話の権限", - "@callingPermissions": {}, "screenSharingTitle": "画面共有", - "@screenSharingTitle": {}, "foregroundServiceRunning": "この通知は、フォアグラウンド サービスの実行中に表示されます。", - "@foregroundServiceRunning": {}, "custom": "カスタム", - "@custom": {}, "countFiles": "{count}個のファイル", "@countFiles": { "placeholders": { @@ -2194,51 +1912,23 @@ } }, "storeSecurlyOnThisDevice": "このデバイスに安全に保管する", - "@storeSecurlyOnThisDevice": {}, "whyIsThisMessageEncrypted": "このメッセージが読めない理由", - "@whyIsThisMessageEncrypted": {}, - "otherCallingPermissions": "マイク、カメラ、その他FluffyChatの権限", - "@otherCallingPermissions": {}, - "appearOnTopDetails": "アプリをトップに表示できるようにする(すでに通話アカウントとしてFluffychatを設定している場合は必要ありません)", - "@appearOnTopDetails": {}, - "dehydrateTorLong": "TOR ユーザーの場合、ウィンドウを閉じる前にセッションをエクスポートすることをお勧めします。", - "@dehydrateTorLong": {}, - "hydrateTorLong": "前回、TOR でセッションをエクスポートしましたか?すぐにインポートしてチャットを続けましょう。", - "@hydrateTorLong": {}, "enableMultiAccounts": "(ベータ版) このデバイスで複数のアカウントを有効にする", - "@enableMultiAccounts": {}, - "pleaseEnterRecoveryKey": "リカバリーキーを入力してください。", - "@pleaseEnterRecoveryKey": {}, "serverRequiresEmail": "このサーバーは、登録のためにメールアドレスを検証する必要があります。", - "@serverRequiresEmail": {}, - "sendSticker": "ステッカーを送る", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "synchronizingPleaseWait": "同期中...お待ちください。", "@synchronizingPleaseWait": { "type": "String", "placeholders": {} }, "emojis": "絵文字", - "@emojis": {}, "markAsRead": "既読にする", - "@markAsRead": {}, "videoCallsBetaWarning": "ビデオ通話は、現在ベータ版であることにご注意ください。すべてのプラットフォームで期待通りに動作しない、あるいはまったく動作しない可能性があります。", - "@videoCallsBetaWarning": {}, "confirmEventUnpin": "イベントの固定を完全に解除してもよろしいですか?", - "@confirmEventUnpin": {}, "unsupportedAndroidVersion": "サポートされていないAndroidのバージョン", - "@unsupportedAndroidVersion": {}, "user": "ユーザー", - "@user": {}, "newGroup": "新しいグループ", - "@newGroup": {}, "noBackupWarning": "警告!チャットのバックアップを有効にしないと、暗号化されたメッセージにアクセスできなくなります。ログアウトする前に、まずチャットのバックアップを有効にすることを強くお勧めします。", - "@noBackupWarning": {}, "disableEncryptionWarning": "セキュリティ上の理由から、以前は暗号化が有効だったチャットで暗号化を無効にすることはできません。", - "@disableEncryptionWarning": {}, "youInvitedUser": "📩 {user} を招待しました", "@youInvitedUser": { "placeholders": { @@ -2264,10 +1954,7 @@ "type": "String", "placeholders": {} }, - "widgetUrlError": "有効なURLではありません。", - "@widgetUrlError": {}, "reportUser": "ユーザーを報告", - "@reportUser": {}, "errorObtainingLocation": "位置情報の取得中にエラーが発生しました: {error}", "@errorObtainingLocation": { "type": "String", @@ -2278,42 +1965,27 @@ } }, "pinMessage": "部屋にピン留めする", - "@pinMessage": {}, - "previousAccount": "前のアカウント", - "@previousAccount": {}, - "pleaseChoose": "選択してください", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "oopsPushError": "おっと!残念ながら、プッシュ通知の設定中にエラーが発生しました。", "@oopsPushError": { "type": "String", "placeholders": {} }, "noOtherDevicesFound": "他のデバイスが見つかりません", - "@noOtherDevicesFound": {}, "recoveryKeyLost": "リカバリーキーを紛失した場合", - "@recoveryKeyLost": {}, "shareLocation": "位置情報の共有", "@shareLocation": { "type": "String", "placeholders": {} }, "time": "時間", - "@time": {}, "sendAsText": "テキストとして送信", "@sendAsText": { "type": "String" }, "commandHint_googly": "ぎょろ目を送る", - "@commandHint_googly": {}, "commandHint_hug": "ハグを送る", - "@commandHint_hug": {}, "encryptThisChat": "このチャットを暗号化する", - "@encryptThisChat": {}, "commandHint_markasdm": "ダイレクトメッセージの部屋としてマークする", - "@commandHint_markasdm": {}, "commandHint_dm": "ダイレクトチャットを開始する\n暗号化を無効にするには、--no-encryptionを使用してください", "@commandHint_dm": { "type": "String", @@ -2344,10 +2016,6 @@ "type": "String", "description": "Usage hint for the command /react" }, - "dehydrateTor": "TOR ユーザー: セッションをエクスポート", - "@dehydrateTor": {}, - "hydrateTor": "TOR ユーザー: セッションのエクスポートをインポート", - "@hydrateTor": {}, "locationDisabledNotice": "位置情報サービスが無効になっています。位置情報を共有できるようにするには、位置情報サービスを有効にしてください。", "@locationDisabledNotice": { "type": "String", @@ -2359,9 +2027,7 @@ "placeholders": {} }, "deviceKeys": "デバイスキー:", - "@deviceKeys": {}, "sorryThatsNotPossible": "申し訳ありません...それは不可能です", - "@sorryThatsNotPossible": {}, "wasDirectChatDisplayName": "空のチャット (以前は {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2372,37 +2038,362 @@ } }, "doNotShowAgain": "今後表示しない", - "@doNotShowAgain": {}, - "hideUnimportantStateEvents": "重要でない状態イベントを非表示にする", - "@hideUnimportantStateEvents": {}, - "numChats": "{number} チャット", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "allSpaces": "すべてのスペース", - "@allSpaces": {}, - "enterRoom": "部屋に入る", - "@enterRoom": {}, - "enterSpace": "スペースに入る", - "@enterSpace": {}, "newSpace": "新しいスペース", - "@newSpace": {}, "reopenChat": "チャットを再開する", - "@reopenChat": {}, - "signInWith": "{provider}でログイン", - "@signInWith": { + "notAnImage": "画像ファイルではありません。", + "ignoreUser": "ユーザーを無視する", + "aboutHomeserver": "{homeserver} について", + "@aboutHomeserver": { "type": "String", "placeholders": { - "provider": { + "homeserver": { "type": "String" } } }, - "signInWithPassword": "パスワードでログイン", - "@signInWithPassword": {} + "noMoreChatsFound": "これ以上のチャットが見つかりません…", + "unread": "未読", + "space": "スペース", + "spaces": "スペース", + "changedTheChatDescription": "{username}がチャットの説明を変更した", + "changedTheChatName": "{username}がチャットの名前を変更した", + "commandHint_kick": "入力のユーザーをこの部屋からキックする", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "countInvited": "{count}人を招待済み", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "createGroup": "グループを作成する", + "emoteKeyboardNoRecents": "最近使われた絵文字がここに表示されます…", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "globalChatId": "グローバルチャットID", + "calls": "通話", + "chatDescription": "チャットの説明", + "chatDescriptionHasBeenChanged": "チャットの説明が変更された", + "block": "ブロック", + "blockedUsers": "ブロック済みのユーザー", + "blockUsername": "ユーザー名を無視する", + "noChatDescriptionYet": "チャットの説明はまだ作成されていません。", + "tryAgain": "再試行", + "messagesStyle": "メッセージ:", + "shareInviteLink": "招待リンクを共有", + "openInMaps": "マップで開く", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "redactedBy": "{username}によって削除済み", + "@redactedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "directChat": "ダイレクトチャット", + "redactedByBecause": "{username}によって削除済み。理由:「{reason}」", + "@redactedByBecause": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "reason": { + "type": "String" + } + } + }, + "sendImages": "{count}つの画像を送信", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "presencesToggle": "他のユーザーからのステータスメッセージを表示する", + "@presencesToggle": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWaitCounter": " 同期中…({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "importEmojis": "絵文字をインポート", + "importNow": "今すぐインポート", + "importFromZipFile": ".zipファイルからインポート", + "exportEmotePack": "エモートパックを.zipでエクスポート", + "replace": "置き換え", + "commandHint_roomupgrade": "このルームを特定のルームバージョンにアップグレード", + "commandHint_cuddle": "笑顔を送る", + "googlyEyesContent": "{senderName}がギョロ目を送りました", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "cuddleContent": "{senderName}が笑顔を送りました", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "hugContent": "{senderName}がハグしました", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "appLockDescription": "未使用時にアプリをPINコードでロック", + "sendTypingNotifications": "入力通知を送信", + "swipeRightToLeftToReply": "左にスワイプして返信", + "noChatsFoundHere": "ここにはまだチャットがありません。下のボタンを使ってみんなと新しいチャットを始めましょう。⤵️", + "commandHint_unban": "このルームから禁止されたユーザーを解禁する", + "@commandHint_unban": { + "type": "String", + "description": "Usage hint for the command /unban" + }, + "chatPermissions": "チャット権限", + "checkList": "チェックリスト", + "accessAndVisibility": "アクセスと範囲", + "accessAndVisibilityDescription": "誰がこのチャットに参加できて、どのように発見することができるか。", + "customEmojisAndStickers": "カスタム絵文字とステッカー", + "customEmojisAndStickersBody": "どのチャットでも利用可能なカスタム絵文字やステッカーを追加・共有します。", + "hideRedactedMessages": "削除されたメッセージを隠す", + "hideRedactedMessagesBody": "誰かがメッセージを削除した場合、このメッセージはそれ以降チャット内では見えなくなります。", + "hideInvalidOrUnknownMessageFormats": "無効であるか不明なメッセージ形式を隠す", + "blockListDescription": "迷惑なユーザーをブロックすることができます。あなたの個人的なブロックリストに記載されたユーザーは、あらゆるメッセージやルームへの招待を受け取ることができません。", + "invalidServerName": "無効なサーバー名", + "redactMessageDescription": "メッセージはこの会話のすべての参加者から削除されます。これは取り消すことができません。", + "commandHint_op": "ユーザーの権限レベルを付与する(デフォルト:50)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "optionalRedactReason": "(オプション)メッセージを削除する理由…", + "overview": "概観", + "passwordRecoverySettings": "パスワードの復元設定", + "setChatDescription": "チャットの説明を設定", + "dismiss": "棄却", + "invitedBy": "📩 {user}に招待されました", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "hasKnocked": "🚪 {user}がノックしました", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "usersMustKnock": "ユーザーはノックする必要があります", + "noOneCanJoin": "誰も参加できません", + "knock": "ノック", + "saveKeyManuallyDescription": "この鍵をシステムの共有ダイアログかクリップボードから手動で保存してください。", + "fileIsTooBigForServer": "送信できません!このサーバーは添付数は{max}個までです。", + "@fileIsTooBigForServer": { + "type": "String", + "placeholders": { + "max": { + "type": "String" + } + } + }, + "fileHasBeenSavedAt": "ファイルは {path} に保存されています", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "jumpToLastReadMessage": "最後に閲覧したメッセージまで移動する", + "readUpToHere": "ここまで既読です", + "jump": "移動", + "openLinkInBrowser": "リンクをブラウザで開く", + "reportErrorDescription": "😭 おっと。問題が発生しました。必要があれば、このバグを開発者に報告することができます。", + "setColorTheme": "カラーテーマの設定:", + "invite": "招待", + "inviteGroupChat": "📨 グループチャットへ招待する", + "invalidInput": "無効な入力です!", + "wrongPinEntered": "誤ったPINが入力されました!{seconds}秒後に再試行してください…", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "pleaseEnterANumber": "0以上の数値を入力してください", + "archiveRoomDescription": "チャットはアーカイブに移動されます。他のユーザーはあなたが退出したチャットを見ることができます。", + "roomUpgradeDescription": "チャットは新しい部屋バージョンで再作成されます。全参加者に新しいチャットへ切り替える必要があることが通知されます。部屋バージョンについては https://spec.matrix.org/latest/rooms/ をご覧ください", + "removeDevicesDescription": "このデバイスからログアウトするとメッセージを受け取ることができません。", + "banUserDescription": "ユーザーをチャットからBANすると、BANを解除されるまで再入室することはできません。", + "unbanUserDescription": "ユーザーが再試行時に再入室することができます。", + "pushNotificationsNotAvailable": "プッシュ通知は利用できません", + "learnMore": "詳しく知る", + "yourGlobalUserIdIs": "あなたのグローバルユーザーID: ", + "knocking": "ノックしています", + "searchChatsRooms": "#チャット,@ユーザーで検索…", + "nothingFound": "何も見つかりませんでした…", + "groupName": "グループ名", + "createGroupAndInviteUsers": "グループを作成してユーザーを招待する", + "groupCanBeFoundViaSearch": "グループは検索で見つけることができます", + "commandHint_sendraw": "生のJSONを送信する", + "databaseMigrationTitle": "データベースは最適化されています", + "databaseMigrationBody": "しばらくお待ちください。この操作は時間がかかります。", + "searchForUsers": "@ユーザー で検索…", + "pleaseEnterYourCurrentPassword": "現在のパスワードを入力してください", + "newPassword": "新しいパスワード", + "pleaseChooseAStrongPassword": "強力なパスワードを選択してください", + "markAsUnread": "未読としてマーク", + "userLevel": "{level} - ユーザー", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "moderatorLevel": "{level} - モデレーター", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "adminLevel": "{level} - 管理者", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "全体のチャット設定を変更する", + "inviteOtherUsers": "他のユーザーをこのチャットに招待する", + "changeTheChatPermissions": "チャット権限を変更する", + "changeTheDescriptionOfTheGroup": "チャットの説明を変更する", + "updateInstalled": "🎉 アップデート {version} をインストールしました!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "changelog": "変更履歴", + "sendCanceled": "送信を取り消しました", + "loginWithMatrixId": "Matrix-IDでログイン", + "calculatingFileSize": "ファイルサイズを計算しています…", + "prepareSendingAttachment": "送信する添付ファイルを準備しています…", + "sendingAttachment": "添付ファイルを送信しています…", + "generatingVideoThumbnail": "ビデオサムネイルを生成しています…", + "compressVideo": "ビデオを圧縮しています…", + "sendingAttachmentCountOfCount": "{length}個中{index}個の添付ファイルを送信しています…", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "サーバーのリミットに達しました!{seconds}秒お待ちください…", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "いずれかのデバイスが認証されていません", + "noticeChatBackupDeviceVerification": "注意:すべてのデバイスをチャットのバックアップに接続している場合、それらは自動的に認証されます。", + "continueText": "続ける", + "blur": "ぼかし:", + "opacity": "透過度:", + "setWallpaper": "壁紙を設定する", + "manageAccount": "アカウント管理", + "noContactInformationProvided": "サーバーから有効な連絡先情報が提供されていません", + "supportPage": "サポートページ", + "serverInformation": "サーバー情報:", + "name": "名前", + "version": "バージョン", + "website": "ウェブサイト", + "compress": "圧縮", + "boldText": "太字", + "italicText": "斜体", + "invalidUrl": "無効なURL", + "addLink": "リンクを追加", + "appWantsToUseForLogin": "'{server}' を使用してログインする", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "open": "開く", + "waitingForServer": "サーバーを待機中…", + "newChatRequest": "📩 新しいチャットを要求", + "contentNotificationSettings": "コンテンツ通知設定", + "generalNotificationSettings": "全体通知設定", + "roomNotificationSettings": "部屋通知設定", + "userSpecificNotificationSettings": "ユーザー毎の通知設定", + "otherNotificationSettings": "その他の通知設定", + "notificationRuleContainsUserName": "ユーザー名を含む", + "notificationRuleContainsUserNameDescription": "ユーザー名がメッセージに含まれる場合に通知します。", + "notificationRuleMaster": "すべての通知をミュート", + "notificationRuleSuppressNotices": "自動化されたメッセージを控える", + "notificationRuleSuppressNoticesDescription": "Botのような自動化されたクライアントからの通知を抑制します。", + "notificationRuleInviteForMeDescription": "ユーザーが部屋に招待されたときに通知します。", + "notificationRuleMasterDescription": "全ルールを上書きして通知をすべて無効にします。", + "notificationRuleIsUserMention": "ユーザーの言及", + "notificationRuleIsUserMentionDescription": "ユーザーがメッセージ内で直接言及されたときに通知します。" } diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index c8778128..a5687f29 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -5,9 +5,7 @@ "placeholders": {} }, "appLockDescription": "პინკოდის გამოყენების გარეშე აპლიკაციის ბლოკირება", - "@appLockDescription": {}, "commandHint_hug": "მეგობრული ჩახუტვის გაგზავნა", - "@commandHint_hug": {}, "areYouSure": "დარწმუნებული ხართ?", "@areYouSure": { "type": "String", @@ -60,7 +58,6 @@ } }, "sendOnEnter": "გაგზავნა enter-ის დაჭერისას", - "@sendOnEnter": {}, "bannedUser": "{username} დაბლოკა {targetName}", "@bannedUser": { "type": "String", @@ -83,11 +80,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "ბოტის შეტყობინებები", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "გაუქმება", "@cancel": { "type": "String", @@ -134,7 +126,6 @@ "placeholders": {} }, "yourChatBackupHasBeenSetUp": "თქვენი ჩატის სარეზერვო საშუალება კონფიგურირებული იქნა.", - "@yourChatBackupHasBeenSetUp": {}, "channelCorruptedDecryptError": "დაშიფვრა დაზიანდა", "@channelCorruptedDecryptError": { "type": "String", @@ -175,16 +166,6 @@ }, "description": "State that {command} is not a valid /command." }, - "confirm": "დადასტურება", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "დაკავშირება", - "@connect": { - "type": "String", - "placeholders": {} - }, "countParticipants": "{count} მონაწილე", "@countParticipants": { "type": "String", @@ -195,7 +176,6 @@ } }, "createGroup": "ჯგუფის შექმნა", - "@createGroup": {}, "deactivateAccountWarning": "ეს გააუქმებს თქვენს ანგარიშს. ამის გაუქმება შეუძლებელია. დარწმუნებული ხართ?", "@deactivateAccountWarning": { "type": "String", @@ -212,7 +192,6 @@ "placeholders": {} }, "chatPermissions": "ჩატის უფლებები", - "@chatPermissions": {}, "dateAndTimeOfDay": "{date}, {timeOfDay}", "@dateAndTimeOfDay": { "type": "String", @@ -240,22 +219,17 @@ "type": "String", "placeholders": {} }, - "importNow": "იმპორტი", - "@importNow": {}, - "importEmojis": "ემოჯის იმპორტი", - "@importEmojis": {}, + "importNow": "დაიმპორტება", + "importEmojis": "ემოჯის დაიმპორტება", "importFromZipFile": "იმპორტი .zip ფაილიდან", - "@importFromZipFile": {}, "exportEmotePack": "ემოციების .zip ფაილში ექსპორტი", - "@exportEmotePack": {}, "replace": "ჩანაცვლება", - "@replace": {}, "accept": "თანხმობა", "@accept": { "type": "String", "placeholders": {} }, - "acceptedTheInvitation": "👍 {username} მიიღო მოწვევა", + "acceptedTheInvitation": "👍 {username}-მ(ა) მიიღო მოწვევა", "@acceptedTheInvitation": { "type": "String", "placeholders": { @@ -275,11 +249,7 @@ "placeholders": {} }, "confirmMatrixId": "გთხოვთ, დაადასტუროთ თქვენი Matrix ID ანგარიშის წაშლისათვის.", - "@confirmMatrixId": {}, - "addChatDescription": "ჩატის აღწერილობის დამატება...", - "@addChatDescription": {}, "addToSpace": "სივრცეში დამატება", - "@addToSpace": {}, "admin": "ადმინი", "@admin": { "type": "String", @@ -296,7 +266,6 @@ "placeholders": {} }, "commandHint_cuddle": "ჩახუტების გაგზავნა", - "@commandHint_cuddle": {}, "answeredTheCall": "{senderName} უპასუხა ზარს", "@answeredTheCall": { "type": "String", @@ -322,7 +291,6 @@ "placeholders": {} }, "commandHint_googly": "გამოშტერილი თვალების გაგზავნა", - "@commandHint_googly": {}, "googlyEyesContent": "{senderName} გამოშტერილ თვალებს გიგზავნის", "@googlyEyesContent": { "type": "String", @@ -341,7 +309,7 @@ } } }, - "areGuestsAllowedToJoin": "შეუძლიათ თუ არა სტუმარ მომხმარებლებს გაწევრიანება", + "areGuestsAllowedToJoin": "შეუძლიათ სტუმარ მომხმარებლებს გაწევრება?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -356,7 +324,6 @@ } }, "sendTypingNotifications": "წერის შეტყობინების გაგზავნა", - "@sendTypingNotifications": {}, "cantOpenUri": "ვერ იხსნება ბმული {uri}", "@cantOpenUri": { "type": "String", @@ -503,8 +470,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "ჩატი დაემატა ამ სივრცეს", - "@chatHasBeenAddedToThisSpace": {}, "chats": "ჩატები", "@chats": { "type": "String", @@ -516,14 +481,12 @@ "placeholders": {} }, "clearArchive": "არქივის გაწმენდა", - "@clearArchive": {}, "close": "დახურვა", "@close": { "type": "String", "placeholders": {} }, "commandHint_markasgroup": "აღნიშვნა, როგორც ჯგუფის", - "@commandHint_markasgroup": {}, "commandHint_ban": "მოცემული მომხმარებლის ბლოკირება ამ ოთახში", "@commandHint_ban": { "type": "String", @@ -583,11 +546,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "შეიცავს სახელს", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "copiedToClipboard": "კოპირებულია ბუფერში", "@copiedToClipboard": { "type": "String", @@ -636,33 +594,6 @@ "type": "String", "placeholders": {} }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "delete": "წაშლა", "@delete": { "type": "String", @@ -693,11 +624,6 @@ "type": "String", "placeholders": {} }, - "allRooms": "ყველა ჯგუფური ჩატები", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "downloadFile": "ფაილის ჩატვირთვა", "@downloadFile": { "type": "String", @@ -724,17 +650,14 @@ "placeholders": {} }, "globalChatId": "გლობალური ჩატის ID", - "@globalChatId": {}, "repeatPassword": "გაიმეორეთ პაროლი", - "@repeatPassword": {}, "notAnImage": "ფაილი არაა სურათი.", - "@notAnImage": {}, "remove": "წაშლა", "@remove": { "type": "String", "placeholders": {} }, - "activatedEndToEndEncryption": "🔐 {username} გააქტიურა end to end დაშიფვრა", + "activatedEndToEndEncryption": "🔐 {username}-მ(ა) გააქტიურა end to end დაშიფვრა", "@activatedEndToEndEncryption": { "type": "String", "placeholders": { @@ -804,11 +727,6 @@ "type": "String", "description": "Usage hint for the command /react" }, - "containsDisplayName": "ნაჩვენებ სახელს შეიცავს", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "ეს კონტენტი გაგზავნილ იქნა სერვერის ადმინისტრატორებთან", "@contentHasBeenReported": { "type": "String", @@ -828,5 +746,15 @@ "@editDisplayname": { "type": "String", "placeholders": {} + }, + "ignoreUser": "დაიგნორება", + "aboutHomeserver": "{homeserver}-ის შესახებ", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_kab.arb b/lib/l10n/intl_kab.arb new file mode 100644 index 00000000..a6de66d7 --- /dev/null +++ b/lib/l10n/intl_kab.arb @@ -0,0 +1,2191 @@ +{ + "@@locale": "kab", + "repeatPassword": "Ales awal n uɛeddi", + "notAnImage": "Mačči d afaylu n tugna.", + "ignoreUser": "Zgel aseqdac", + "remove": "Kkes", + "@remove": { + "type": "String", + "placeholders": {} + }, + "importNow": "Kter tura", + "importEmojis": "Kter imujiten", + "importFromZipFile": "Kter seg ufaylu .zip", + "exportEmotePack": "Sifeḍ akemmus n Izamulen uḥulfu am .zip", + "replace": "Semselsi", + "about": "Ɣef", + "aboutHomeserver": "Ɣef {homeserver}", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "accept": "Qbel", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} yeqbel tinubga", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "Amiḍan", + "@account": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} irmed awgelhen seg yixef ɣer yixef", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "addEmail": "Rnu imayl", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "confirmMatrixId": "Ttxil-ik·im, sentem asulay-ik·im n Matriks akken ad tekkseḍ amiḍan-ik·im.", + "supposedMxid": "A win yufan, ad yili d {mxid}", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "addToSpace": "Rnu ɣer tallunt", + "admin": "Anedbal", + "@admin": { + "type": "String", + "placeholders": {} + }, + "alias": "Tazaẓlut", + "@alias": { + "type": "String", + "placeholders": {} + }, + "all": "Meṛṛa", + "@all": { + "type": "String", + "placeholders": {} + }, + "allChats": "Meṛṛa idiwenniyen", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "commandHint_roomupgrade": "Sali aswir n txxamt-agi ɣer lqem n texxamt i d-yettunefken", + "answeredTheCall": "{senderName} yerra-d i usiwel", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "anyoneCanJoin": "Yal yiwen yezmer ad yettekki", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + }, + "appLock": "Asekkeṛ n usnas", + "@appLock": { + "type": "String", + "placeholders": {} + }, + "appLockDescription": "Sekkeṛ asnas ticki ur tseqdaceḍ ara s tengalt n pin", + "archive": "Aɣbaṛ", + "@archive": { + "type": "String", + "placeholders": {} + }, + "areGuestsAllowedToJoin": "Iseqdacen inebgiwen ttusirgen ad ttekkin", + "@areGuestsAllowedToJoin": { + "type": "String", + "placeholders": {} + }, + "areYouSure": "Tetḥeqqeḍ?", + "@areYouSure": { + "type": "String", + "placeholders": {} + }, + "areYouSureYouWantToLogout": "D tidet tebɣiḍ ad teffɣeḍ?", + "@areYouSureYouWantToLogout": { + "type": "String", + "placeholders": {} + }, + "askSSSSSign": "Iwakken ad teszmeleḍ amdan-nniḍen, ttxil-k·m sekcem tafyirt-ik·im n uḥraz s wudem aɣelsan neɣ tasarut n tririt.", + "@askSSSSSign": { + "type": "String", + "placeholders": {} + }, + "askVerificationRequest": "Qbel asuter-agi n usenqed seg {username}?", + "@askVerificationRequest": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "spaces": "Tallunin", + "banFromChat": "Gdel seg adiwenni", + "@banFromChat": { + "type": "String", + "placeholders": {} + }, + "banned": "Yettwagdel", + "@banned": { + "type": "String", + "placeholders": {} + }, + "bannedUser": "{username} yegdel {targetName}", + "@bannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "blockDevice": "Sewḥel ibenk", + "@blockDevice": { + "type": "String", + "placeholders": {} + }, + "blocked": "Yettusewḥel", + "@blocked": { + "type": "String", + "placeholders": {} + }, + "cancel": "Sefsex", + "@cancel": { + "type": "String", + "placeholders": {} + }, + "cantOpenUri": "Ur yezmir ara ad yeldi URl {uri}", + "@cantOpenUri": { + "type": "String", + "placeholders": { + "uri": { + "type": "String" + } + } + }, + "changeDeviceName": "Snifel isem n yibenk", + "@changeDeviceName": { + "type": "String", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} yesnifel avaṭar n udiwenni", + "@changedTheChatAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheChatDescription": "{username} yesnifel aglam n udiwenni", + "changedTheChatDescriptionTo": "{username} yesnifel aglam n udiwenni ɣer: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "description": { + "type": "String" + } + } + }, + "changedTheChatName": "{username} yesnifel isem n udiwenni", + "changedTheChatNameTo": "{username} yesnifel isem n udiwenni ɣer: '{chatname}'", + "@changedTheChatNameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "chatname": { + "type": "String" + } + } + }, + "changedTheChatPermissions": "{username} yesnifel tisirag n udiwenni", + "@changedTheChatPermissions": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheDisplaynameTo": "{username} yesnifel tisirag n udiwenni ɣer: '{displayname}'", + "@changedTheDisplaynameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "displayname": { + "type": "String" + } + } + }, + "chat": "Adiwenni", + "@chat": { + "type": "String", + "placeholders": {} + }, + "yourChatBackupHasBeenSetUp": "Aḥraz n udiwenni-ik·im yettusbadu.", + "chatBackup": "Aḥraz n udiwenni", + "@chatBackup": { + "type": "String", + "placeholders": {} + }, + "chatBackupDescription": "Iznan-ik·im d iɣelsanen s tsarut n tririt. Ɣur-k·m ad k·em-truḥ.", + "@chatBackupDescription": { + "type": "String", + "placeholders": {} + }, + "chatDetails": "Ifatusen n udiwenni", + "@chatDetails": { + "type": "String", + "placeholders": {} + }, + "chats": "Idiwenniyen", + "@chats": { + "type": "String", + "placeholders": {} + }, + "chooseAStrongPassword": "Fren awal n uɛeddi iǧehden", + "@chooseAStrongPassword": { + "type": "String", + "placeholders": {} + }, + "clearArchive": "Sfeḍ aɣbaṛ", + "close": "Mdel", + "@close": { + "type": "String", + "placeholders": {} + }, + "commandHint_markasdm": "Creḍ d akken taxxamt n yizen usrid i Usulay Matriks i d-yettunefken", + "commandHint_markasgroup": "Creḍ am ugraw", + "commandHint_ban": "Gdel aseqdac i d-ittunefken seg texxamt-agi", + "@commandHint_ban": { + "type": "String", + "description": "Usage hint for the command /ban" + }, + "commandHint_clearcache": "Sfeḍ tazarkatut", + "@commandHint_clearcache": { + "type": "String", + "description": "Usage hint for the command /clearcache" + }, + "commandHint_create": "Snulfu-d agraw n udiwenni ilem\nSeqdec -- war awgelhen i tukksa n uwgelhen", + "@commandHint_create": { + "type": "String", + "description": "Usage hint for the command /create" + }, + "commandHint_discardsession": "Kkes tiɣimit", + "@commandHint_discardsession": { + "type": "String", + "description": "Usage hint for the command /discardsession" + }, + "commandHint_dm": "Senker adiwenni usrid\nSeqdec --war awgelhen i tukksa n uwgelhen", + "@commandHint_dm": { + "type": "String", + "description": "Usage hint for the command /dm" + }, + "commandHint_html": "Azen aḍris s umasal HTML", + "@commandHint_html": { + "type": "String", + "description": "Usage hint for the command /html" + }, + "commandHint_invite": "Snubg aseqdac i d-ittunefken ɣer texxamt-agi", + "@commandHint_invite": { + "type": "String", + "description": "Usage hint for the command /invite" + }, + "commandHint_join": "Ddu ɣer texxamt i d-ittunefken", + "@commandHint_join": { + "type": "String", + "description": "Usage hint for the command /join" + }, + "commandHint_kick": "Kkes aseqdac i d-ittunefken seg texxamt-agi", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "commandHint_leave": "Ffeɣ seg texxamt-a", + "@commandHint_leave": { + "type": "String", + "description": "Usage hint for the command /leave" + }, + "commandHint_me": "Glem-d iman-ik·im", + "@commandHint_me": { + "type": "String", + "description": "Usage hint for the command /me" + }, + "commandHint_myroomavatar": "Sbadu tawlaft-ik·im i texxamt-a (s mxc-uri)", + "@commandHint_myroomavatar": { + "type": "String", + "description": "Usage hint for the command /myroomavatar" + }, + "commandHint_myroomnick": "Sbadu isem n uskan i texxamt-agi", + "@commandHint_myroomnick": { + "type": "String", + "description": "Usage hint for the command /myroomnick" + }, + "commandHint_op": "Sbadu aswir n tnezmert n useqdac i d-ittunefken (amezwer: 50)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "createNewSpace": "Tallunt tamaynut", + "@createNewSpace": { + "type": "String", + "placeholders": {} + }, + "currentlyActive": "Yermed akka tura", + "@currentlyActive": { + "type": "String", + "placeholders": {} + }, + "darkTheme": "Ubrik", + "@darkTheme": { + "type": "String", + "placeholders": {} + }, + "dateAndTimeOfDay": "{timeOfDay}, {date}", + "@dateAndTimeOfDay": { + "type": "String", + "placeholders": { + "date": { + "type": "String" + }, + "timeOfDay": { + "type": "String" + } + } + }, + "deactivateAccountWarning": "Ayagi ad yekkes armed i umiḍan-ik·im n useqdac. Aya ur yezmir ara ad yettwasefsex. Tetḥeqqeḍ s tidet?", + "@deactivateAccountWarning": { + "type": "String", + "placeholders": {} + }, + "defaultPermissionLevel": "Aswir n turagt amezwer i yiseqdacen imaynuten", + "@defaultPermissionLevel": { + "type": "String", + "placeholders": {} + }, + "delete": "kkes", + "@delete": { + "type": "String", + "placeholders": {} + }, + "deleteAccount": "kkes amiḍan", + "@deleteAccount": { + "type": "String", + "placeholders": {} + }, + "deleteMessage": "kkes izen", + "@deleteMessage": { + "type": "String", + "placeholders": {} + }, + "device": "Ibenk", + "@device": { + "type": "String", + "placeholders": {} + }, + "deviceId": "Asulay n yibenk", + "@deviceId": { + "type": "String", + "placeholders": {} + }, + "devices": "Ibenkan", + "@devices": { + "type": "String", + "placeholders": {} + }, + "directChats": "Idiwenniyen Usriden", + "@directChats": { + "type": "String", + "placeholders": {} + }, + "displaynameHasBeenChanged": "Isem n uskan yettusnifel", + "@displaynameHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "downloadFile": "Sider afaylu", + "@downloadFile": { + "type": "String", + "placeholders": {} + }, + "edit": "Ẓreg", + "@edit": { + "type": "String", + "placeholders": {} + }, + "editBlockedServers": "Ẓreg iqeddacen yettusweḥlen", + "@editBlockedServers": { + "type": "String", + "placeholders": {} + }, + "chatPermissions": "Isirigen n Udiwenni", + "encrypted": "Yettwawgelhen", + "@encrypted": { + "type": "String", + "placeholders": {} + }, + "encryption": "Awgelhen", + "@encryption": { + "type": "String", + "placeholders": {} + }, + "encryptionNotEnabled": "Awgelhen ur yettwarmed ara", + "@encryptionNotEnabled": { + "type": "String", + "placeholders": {} + }, + "endedTheCall": "{senderName} ifukk asiwel", + "@endedTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "enterAnEmailAddress": "Sekcem tansa n yimayl", + "@enterAnEmailAddress": { + "type": "String", + "placeholders": {} + }, + "homeserver": "Aqeddac agejdan", + "errorObtainingLocation": "Tuccḍa deg wawway n yideg: {error}", + "@errorObtainingLocation": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "everythingReady": "Kullec ihegga!", + "@everythingReady": { + "type": "String", + "placeholders": {} + }, + "fileName": "Isem n ufaylu", + "@fileName": { + "type": "String", + "placeholders": {} + }, + "fluffychat": "FluffyChat", + "@fluffychat": { + "type": "String", + "placeholders": {} + }, + "fontSize": "Tiddi n tsefsit", + "@fontSize": { + "type": "String", + "placeholders": {} + }, + "forward": "Ɣer zdat", + "@forward": { + "type": "String", + "placeholders": {} + }, + "fromJoining": "Seg unekcam-is", + "@fromJoining": { + "type": "String", + "placeholders": {} + }, + "fromTheInvitation": "Seg tinubga", + "@fromTheInvitation": { + "type": "String", + "placeholders": {} + }, + "group": "Agraw", + "@group": { + "type": "String", + "placeholders": {} + }, + "chatDescription": "Aglam n udiwenni", + "chatDescriptionHasBeenChanged": "Aglam n udiwenni yettwabeddel", + "groupIsPublic": "Agraw d azayez", + "@groupIsPublic": { + "type": "String", + "placeholders": {} + }, + "groups": "Igrawen", + "@groups": { + "type": "String", + "placeholders": {} + }, + "groupWith": "Agraw s {displayname}", + "@groupWith": { + "type": "String", + "placeholders": { + "displayname": { + "type": "String" + } + } + }, + "tryAgain": "Ɛreḍ tikkelt-nniḍen", + "invalidServerName": "Isem n uqeddac d armeɣtu", + "invited": "Yettwaɛreḍ", + "@invited": { + "type": "String", + "placeholders": {} + }, + "redactMessageDescription": "Izen ad yettwakkesn i imttekkiyen merra deg udiwenni-agi. Ur tezmireḍ ara ad tesfesxeḍ.", + "optionalRedactReason": "(Afrayan) Sebba n tukksa n izen-agi…", + "invitedUser": "📩 {username} yenced {targetName}", + "@invitedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "invitedUsersOnly": "Iseqdacen kan yettwaɛerḍen", + "@invitedUsersOnly": { + "type": "String", + "placeholders": {} + }, + "isTyping": "la yettaru…", + "@isTyping": { + "type": "String", + "placeholders": {} + }, + "joinedTheChat": "👋{username} yekcem ɣer udiwenni", + "@joinedTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "joinRoom": "Tekki deg texxamt", + "@joinRoom": { + "type": "String", + "placeholders": {} + }, + "kicked": "👞{username} yessuffeɣ-d {targetName}", + "@kicked": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickedAndBanned": "🙅 {username} yessuffeɣ-d udiɣ igdel {targetName}", + "@kickedAndBanned": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickFromChat": "Suffeɣ seg udiwenni", + "@kickFromChat": { + "type": "String", + "placeholders": {} + }, + "lastActiveAgo": "Yermed i tikkelt taneggarut: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "String", + "placeholders": { + "localizedTimeShort": { + "type": "String" + } + } + }, + "leave": "Eǧǧ", + "@leave": { + "type": "String", + "placeholders": {} + }, + "leftTheChat": "Ffeɣ seg udiwenni", + "@leftTheChat": { + "type": "String", + "placeholders": {} + }, + "lightTheme": "Aceɛlal", + "@lightTheme": { + "type": "String", + "placeholders": {} + }, + "loadCountMoreParticipants": "Sali-d ugar n {count} yimttekkiyen", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dehydrate": "Sifeḍ tiɣimit akked usfaḍ n yibenk", + "dehydrateWarning": "Tigawt-agi ur tezmir ara ad tettwasefsex. Tḥeqqeq belli tesseklaseḍ afaylu n weḥraz.", + "hydrate": "Err-d seg ufaylu n weḥraz", + "loadingPleaseWait": "Asali... Ttxil-k·m arǧu.", + "@loadingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "copiedToClipboard": "Yettwanɣel ɣer tecfawit", + "@copiedToClipboard": { + "type": "String", + "placeholders": {} + }, + "copy": "Nɣel", + "@copy": { + "type": "String", + "placeholders": {} + }, + "copyToClipboard": "Nɣel ɣer tecfawit", + "@copyToClipboard": { + "type": "String", + "placeholders": {} + }, + "couldNotDecryptMessage": "Ur izmer ara tukksa n uwgelhen n yizen: {error}", + "@couldNotDecryptMessage": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "checkList": "Senqed tabdart", + "countParticipants": "{count} imttekkiyen", + "@countParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "countInvited": "{count} yettwaɛerḍen", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "create": "Snulfu-d", + "@create": { + "type": "String", + "placeholders": {} + }, + "createdTheChat": "💬 {username} yesnulfa-d adiwenni", + "@createdTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "createGroup": "Snulfu-d agraw", + "editDisplayname": "Ẓreg isem n ubeqqeḍ", + "@editDisplayname": { + "type": "String", + "placeholders": {} + }, + "editRoomAvatar": "Ẓreg avaṭar n texxamt", + "@editRoomAvatar": { + "type": "String", + "placeholders": {} + }, + "emoteExists": "Azamul uḥulfu yella yakan!", + "@emoteExists": { + "type": "String", + "placeholders": {} + }, + "emoteInvalid": "Tangalt tawezlant n uzamul uḥulfu d tarmeɣtut!", + "@emoteInvalid": { + "type": "String", + "placeholders": {} + }, + "emoteKeyboardNoRecents": "Izamulen uḥulfu yettwasqedcen melmi kan ad banen dagi…", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "emotePacks": "Ikemmusen n uzamul uḥulfu i texxamt", + "@emotePacks": { + "type": "String", + "placeholders": {} + }, + "emoteSettings": "Iɣewwaṛen n uzamul uḥulfu", + "@emoteSettings": { + "type": "String", + "placeholders": {} + }, + "globalChatId": "Asulay n udiwenni amatu", + "accessAndVisibility": "Addaf d twalit", + "accessAndVisibilityDescription": "Anwa i yesɛan turagt ad yernu ɣer udiwenni-agi u amek adiwenni yezmer ad yettwaf.", + "calls": "Isawalen", + "customEmojisAndStickers": "Imujiten yugnen akked tcṛeṭ n tesfift", + "customEmojisAndStickersBody": "Rnu neɣ bḍu imujiten yugnen neɣ tcṛeṭ n tesfift i zemren ad ttwasqedcen deg yal adiwenni.", + "emptyChat": "Adiwenni d ilem", + "@emptyChat": { + "type": "String", + "placeholders": {} + }, + "enableEmotesGlobally": "Sermed akemmus n uzamul uḥulfu s wudem amatu", + "@enableEmotesGlobally": { + "type": "String", + "placeholders": {} + }, + "enableEncryption": "Rmed awgelhen", + "@enableEncryption": { + "type": "String", + "placeholders": {} + }, + "enableEncryptionWarning": "Ur tettizmireḍ ara ad tessenseḍ awgelhen syagi ɣer zdat. Tetḥeqqeḍ s tidet?", + "@enableEncryptionWarning": { + "type": "String", + "placeholders": {} + }, + "login": "Anekcam", + "@login": { + "type": "String", + "placeholders": {} + }, + "logInTo": "Anekcam ɣer {homeserver}", + "@logInTo": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "logout": "Tuffɣa", + "@logout": { + "type": "String", + "placeholders": {} + }, + "mention": "Abdar", + "@mention": { + "type": "String", + "placeholders": {} + }, + "messages": "Iznan", + "@messages": { + "type": "String", + "placeholders": {} + }, + "messagesStyle": "Iznan:", + "muteChat": "Sgugem adiwenni", + "@muteChat": { + "type": "String", + "placeholders": {} + }, + "needPantalaimonWarning": "Ttxil-k·m ẓeṛ belli tesriḍ Palaimon akken ad tesqedceḍ awgelhen seg yixef ɣer yixef.", + "@needPantalaimonWarning": { + "type": "String", + "placeholders": {} + }, + "newChat": "Adiwenni Amaynut", + "@newChat": { + "type": "String", + "placeholders": {} + }, + "newMessageInFluffyChat": "💬 Izen amaynut deg FluffyChat", + "@newMessageInFluffyChat": { + "type": "String", + "placeholders": {} + }, + "newVerificationRequest": "Asuter amaynut n uselken!", + "@newVerificationRequest": { + "type": "String", + "placeholders": {} + }, + "next": "Uḍfir", + "@next": { + "type": "String", + "placeholders": {} + }, + "no": "Ala", + "@no": { + "type": "String", + "placeholders": {} + }, + "noConnectionToTheServer": "Ulac tuqqna ɣer uqeddac", + "@noConnectionToTheServer": { + "type": "String", + "placeholders": {} + }, + "noEncryptionForPublicRooms": "Tzemreḍ kan ad tesremdeḍ awgelhen akken kan ara tuɣal taxxamt s war anekcum azayez.", + "@noEncryptionForPublicRooms": { + "type": "String", + "placeholders": {} + }, + "noEmotesFound": "Ulac izamulen uḥulfu yettwafen. 😕", + "@noEmotesFound": { + "type": "String", + "placeholders": {} + }, + "noMatrixServer": "{server1} ur yelli d aqeddac matriks, seqdec axir {server2} ?", + "@noMatrixServer": { + "type": "String", + "placeholders": { + "server1": { + "type": "String" + }, + "server2": { + "type": "String" + } + } + }, + "shareInviteLink": "Bḍu aseɣwen n tinubga", + "none": "Ulac", + "@none": { + "type": "String", + "placeholders": {} + }, + "noPasswordRecoveryDescription": "Mazal ur terniḍ ara tarrayt akken ad terreḍ awal-ik·im n uɛeddi.", + "@noPasswordRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "noPermission": "Ulac tasiregt", + "@noPermission": { + "type": "String", + "placeholders": {} + }, + "noRoomsFound": "Ulac taxxamt i yettwafen…", + "@noRoomsFound": { + "type": "String", + "placeholders": {} + }, + "notifications": "Ilɣa", + "@notifications": { + "type": "String", + "placeholders": {} + }, + "numUsersTyping": "{count} n iseqdacen la yettarun…", + "@numUsersTyping": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "obtainingLocation": "Aguccel n wadig…", + "@obtainingLocation": { + "type": "String", + "placeholders": {} + }, + "offensive": "Tanṭagt", + "@offensive": { + "type": "String", + "placeholders": {} + }, + "editRoomAliases": "Ẓreg tizeẓla n taxxamt", + "@editRoomAliases": { + "type": "String", + "placeholders": {} + }, + "link": "Aseɣwen", + "serverRequiresEmail": "Aqeddac-agi ilaq ad isentem tansa imayl i ujerred.", + "or": "Neɣ", + "@or": { + "type": "String", + "placeholders": {} + }, + "participant": "Imttekki", + "@participant": { + "type": "String", + "placeholders": {} + }, + "passphraseOrKey": "tafyirt n uɛeddi neɣ tasarut n tririt", + "@passphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "password": "Awal n uɛeddi", + "@password": { + "type": "String", + "placeholders": {} + }, + "passwordForgotten": "Awal n uɛeddi yettwattun", + "@passwordForgotten": { + "type": "String", + "placeholders": {} + }, + "passwordHasBeenChanged": "Awal n uɛeddi yettusnifel", + "@passwordHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "overview": "Taskant", + "passwordRecoverySettings": "Iɣewwaṛen n tririt n wawal n uɛeddi", + "passwordRecovery": "Tiririt n wawal n uɛeddi", + "@passwordRecovery": { + "type": "String", + "placeholders": {} + }, + "pickImage": "Fren tugna", + "@pickImage": { + "type": "String", + "placeholders": {} + }, + "play": "Ɣeṛ {fileName}", + "@play": { + "type": "String", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pleaseChooseAPasscode": "Ttxil-k·m fren tangalt n uɛeddi", + "@pleaseChooseAPasscode": { + "type": "String", + "placeholders": {} + }, + "pleaseClickOnLink": "Ma ulac aɣilif, sit ɣef useɣwen yellan deg imayl sakin kemmel.", + "@pleaseClickOnLink": { + "type": "String", + "placeholders": {} + }, + "userAndOthersAreTyping": "{username} akked {count} nniḍen la ad ttarun…", + "@userAndOthersAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "userAndUserAreTyping": "{username} akked {username2} la ad ttarun…", + "@userAndUserAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "username2": { + "type": "String" + } + } + }, + "userIsTyping": "{username} la yettaru…", + "@userIsTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "userLeftTheChat": "🚪{username} yeffeɣ seg udiwenni", + "@userLeftTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "username": "Isem n useqdac", + "@username": { + "type": "String", + "placeholders": {} + }, + "userSentUnknownEvent": "{username} yuzen-d tadyant {type}", + "@userSentUnknownEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "type": { + "type": "String" + } + } + }, + "unverified": "Ur yettwaselken ara", + "verified": "Yettwaselken", + "@verified": { + "type": "String", + "placeholders": {} + }, + "verify": "Selken", + "@verify": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "Bdu Aselken", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "Yedda uselken-ik·im akken iwata!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "verifyTitle": "Aselken n imiḍanen nniḍen", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "videoCall": "Asiwel s tvidyut", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "visibilityOfTheChatHistory": "Tawalit n uzray n udiwenni", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "Yettban i yimttekkiyen meṛṛa", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "visibleForEveryone": "Yettban i yal yiwen", + "@visibleForEveryone": { + "type": "String", + "placeholders": {} + }, + "voiceMessage": "Izen n taɣect", + "@voiceMessage": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Araǧu n uneblag ad yeqbel asuter…", + "@waitingPartnerAcceptRequest": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerEmoji": "Araǧu n uneblag ad yeqbel imujit…", + "@waitingPartnerEmoji": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerNumbers": "Araǧu n uneblag ad yeqbel uṭṭunen…", + "@waitingPartnerNumbers": { + "type": "String", + "placeholders": {} + }, + "warning": "Ɣur-k·m!", + "@warning": { + "type": "String", + "placeholders": {} + }, + "weSentYouAnEmail": "Nuzen-ak-d imayl", + "@weSentYouAnEmail": { + "type": "String", + "placeholders": {} + }, + "whoCanPerformWhichAction": "Anwa i izemren ad yexdem anta tigawt", + "@whoCanPerformWhichAction": { + "type": "String", + "placeholders": {} + }, + "whoIsAllowedToJoinThisGroup": "Anwa i izemren ad yernu ɣer ugraw-agi", + "@whoIsAllowedToJoinThisGroup": { + "type": "String", + "placeholders": {} + }, + "whyDoYouWantToReportThis": "Ayɣer tebɣiḍ ad temleḍ aya?", + "@whyDoYouWantToReportThis": { + "type": "String", + "placeholders": {} + }, + "wipeChatBackup": "Sfeḍ aḥraz-ik·im n udiwenni akken ad d-tesnulfuḍ tasarut tamaynut n tririt?", + "@wipeChatBackup": { + "type": "String", + "placeholders": {} + }, + "withTheseAddressesRecoveryDescription": "S tansiwin-agi i tzemreḍ ad terreḍ awal-ik·im n uɛeddi.", + "@withTheseAddressesRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "writeAMessage": "Aru izen…", + "@writeAMessage": { + "type": "String", + "placeholders": {} + }, + "yes": "Ih", + "@yes": { + "type": "String", + "placeholders": {} + }, + "you": "kečč·em", + "@you": { + "type": "String", + "placeholders": {} + }, + "youAreNoLongerParticipatingInThisChat": "Ur mazal ara tettekkaḍ deg udiwenni-a", + "@youAreNoLongerParticipatingInThisChat": { + "type": "String", + "placeholders": {} + }, + "youHaveBeenBannedFromThisChat": "Tettwagedleḍ seg udiwenni-agi", + "@youHaveBeenBannedFromThisChat": { + "type": "String", + "placeholders": {} + }, + "yourPublicKey": "Tasarut-ik·im tazayezt", + "@yourPublicKey": { + "type": "String", + "placeholders": {} + }, + "messageInfo": "Talɣut n yizen", + "time": "Akud", + "messageType": "Anaw n yizen", + "sender": "Amazan", + "openGallery": "Ldi timidelt", + "removeFromSpace": "Kkes seg tallunt", + "start": "Senker", + "openChat": "Ldi Adiwenni", + "markAsRead": "Creḍ amzun yettwaɣṛa", + "reportUser": "Cetki aseqdac", + "dismiss": "Agi", + "reactedWith": "{sender} err-d s {reaction}", + "@reactedWith": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "reaction": { + "type": "String" + } + } + }, + "pinMessage": "Senteḍ ɣer texxamt", + "confirmEventUnpin": "Tebɣiḍ ad tekkseḍ s wudem imezgi asenṭed n tadyant-nni?", + "emojis": "Imujiten", + "placeCall": "Sɛeddi Asiwel", + "voiceCall": "Asiwel n taɣect", + "removeAllOtherDevices": "Kkes akk ibenkan-nniḍen", + "@removeAllOtherDevices": { + "type": "String", + "placeholders": {} + }, + "removedBy": "Yettwakkes sɣur {username}", + "@removedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "unbanFromChat": "Kkes agdal seg udiwenni", + "@unbanFromChat": { + "type": "String", + "placeholders": {} + }, + "removeYourAvatar": "Kkes avaṭar-ik·im", + "@removeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "replaceRoomWithNewerVersion": "Semselsi taxxamt s lqem amaynut", + "@replaceRoomWithNewerVersion": { + "type": "String", + "placeholders": {} + }, + "reply": "Err", + "@reply": { + "type": "String", + "placeholders": {} + }, + "contactHasBeenInvitedToTheGroup": "Anermis yettwaɛreḍ ɣer ugraw", + "@contactHasBeenInvitedToTheGroup": { + "type": "String", + "placeholders": {} + }, + "contentHasBeenReported": "Agbur yettwammel i inedbalen n uqeddac", + "@contentHasBeenReported": { + "type": "String", + "placeholders": {} + }, + "iHaveClickedOnLink": "Ttekkiɣ ɣef useɣwen", + "@iHaveClickedOnLink": { + "type": "String", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Tafyirt n uɛeddi neɣ tasarut n tririt d tarameɣtut", + "@incorrectPassphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "inoffensive": "Ur yettḍurru ara", + "@inoffensive": { + "type": "String", + "placeholders": {} + }, + "inviteContact": "Snubg anermis", + "@inviteContact": { + "type": "String", + "placeholders": {} + }, + "inviteContactToGroup": "Snubg anermis ɣer {groupName}", + "@inviteContactToGroup": { + "type": "String", + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "noChatDescriptionYet": "Ulac aglam n udiwenni i d-yenulfan yakan.", + "inviteText": "{username} yeɛreḍ-ik·m ɣer FluffyChat.\n1. Rzu ɣer fluffychat.im syin sbedd asnas \n2. Jerred neɣ kcem \n3. Ldi aseɣwen n tinubga: \n {link}", + "@inviteText": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "link": { + "type": "String" + } + } + }, + "configureChat": "Swel adiwenni", + "@configureChat": { + "type": "String", + "placeholders": {} + }, + "id": "Asulay", + "@id": { + "type": "String", + "placeholders": {} + }, + "block": "Iḥder", + "blockedUsers": "Iseqdacen yettusweḥlen", + "blockUsername": "Zgel isem n useqdac", + "loadMore": "Sali-d ugar…", + "@loadMore": { + "type": "String", + "placeholders": {} + }, + "locationDisabledNotice": "Imeẓla n wadig nsan. Ma ulac aɣilif, rmed-iten akken ad izmiren ad bḍun ideg-ik·im.", + "@locationDisabledNotice": { + "type": "String", + "placeholders": {} + }, + "locationPermissionDeniedNotice": "Tisirag n wadig tettwagdel. Ttxil-k·m efk-asen amek ara bḍun ideg-ik·im.", + "@locationPermissionDeniedNotice": { + "type": "String", + "placeholders": {} + }, + "scanQrCode": "Semḍen tangalt QR", + "offline": "Aruqqin", + "@offline": { + "type": "String", + "placeholders": {} + }, + "ok": "iH", + "@ok": { + "type": "String", + "placeholders": {} + }, + "online": "Deg uẓeṭṭa", + "@online": { + "type": "String", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Aḥraz n tsarut deg uẓeṭṭa yermed", + "@onlineKeyBackupEnabled": { + "type": "String", + "placeholders": {} + }, + "unread": "Ur yettwaɣri ara", + "sendOnEnter": "Azen ɣef Kcem", + "space": "Tallunt", + "oopsPushError": "Ayhu! nesḥissif, teḍra-d tuccḍa deg usbadu n yilɣa usriden.", + "@oopsPushError": { + "type": "String", + "placeholders": {} + }, + "oopsSomethingWentWrong": "Ihuh, yella wayen ur neddi ara…", + "@oopsSomethingWentWrong": { + "type": "String", + "placeholders": {} + }, + "openAppToReadMessages": "Ldi asnas akken ad teɣreḍ iznan", + "@openAppToReadMessages": { + "type": "String", + "placeholders": {} + }, + "openCamera": "Ldi takamiṛat", + "@openCamera": { + "type": "String", + "placeholders": {} + }, + "moreEvents": "Ugar n ineḍruyen", + "declineInvitation": "Agi tinnubga", + "noMessagesYet": "Ulac iznan akka tura", + "longPressToRecordVoiceMessage": "Asiti aɣezzfan i usekles n yizen n taɣect.", + "pause": "Serǧu", + "resume": "Kemmel", + "removeFromSpaceDescription": "Adiwenni ad yettwakkes seg tallunt maca mazal ad yettban deg tebdart-ik·im n udiwenni.", + "countChats": "{chats} idiwenniyen", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Aɛeggal n tallunt n {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username}yessenker tafrent.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "Tafrent", + "startPoll": "Senker tafrent", + "endPoll": "Eg taggara n tafrent", + "answersVisible": "Tiririyin yettbanen", + "pollQuestion": "Isteqsiyen n tefrent", + "answerOption": "tanefrunt n tririt", + "addAnswerOption": "Rnu tanefrunt n tririt", + "allowMultipleAnswers": "Sireg aget n tiririyin", + "pollHasBeenEnded": "Tafrent tfukk", + "answersWillBeVisibleWhenPollHasEnded": "Tiririyin ad banent ticki tafrent tfukk", + "replyInThread": "Err deg udras udiwenni", + "thread": "Adras udiwenni", + "oneOfYourDevicesIsNotVerified": "iwen seg ibenkan-ik·im ur yettusenqed ara", + "noticeChatBackupDeviceVerification": "Tamawt: Mi ara teqqneḍ akk ibenkan-ik·im ɣer weḥraz udiwenni, ttusneqden s wudem awurman.", + "continueText": "Ddu", + "blur": "Asluɣu:", + "opacity": "Tiḍullest:", + "setWallpaper": "Sbadu tugna ugilal", + "manageAccount": "Sefrek amiḍan", + "noContactInformationProvided": "Aqeddac ur yezmir ara ad d-yefk talɣut n unermis tameɣtut", + "contactServerAdmin": "Nermes anedbal n uqeddac", + "contactServerSecurity": "Taɣellist uqeddac n unermis", + "supportPage": "Asebter n tallalt", + "serverInformation": "Talɣut n uqeddac:", + "name": "Isem", + "version": "Lqem", + "website": "Asmel Web", + "compress": "Sekussem", + "boldText": "Aḍris azuran", + "italicText": "Aḍris uknan", + "strikeThrough": "Yettwajeṛṛeḍ", + "pleaseFillOut": "Ttxil-k·m, ččar", + "invalidUrl": "url armeɣtu", + "addLink": "Rnu aseɣwen", + "serverLimitReached": "Talast n uqeddac tewweḍ! Araǧu n {seconds} n tasinin…", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "unableToJoinChat": "Ur yezmir ara ad yernu ɣer udiwenni. Ahat aseqdac n udiwenni-agi imdel-it yakan.", + "previous": "Uzwir", + "otherPartyNotLoggedIn": "Aḥric nniḍen ur yeqqin ara akka tura, ihi ur yezmir ara ad d-yeṭṭef iznan!", + "appWantsToUseForLogin": "Seqdec '{server}' akken ad teqqneḍ", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "open": "Ldi", + "waitingForServer": "Araǧu n uqeddac...", + "newChatRequest": "📩 Asuter n udiwenni amaynut", + "contentNotificationSettings": "Iɣewwaṛen n telɣut n ugbur", + "generalNotificationSettings": "Iɣewwaren imuta n ilɣa", + "roomNotificationSettings": "Iɣewwaṛen n telɣut n texxamt", + "userSpecificNotificationSettings": "Iɣewwaṛen n telɣut n useqdac", + "otherNotificationSettings": "Iɣewwaṛen-nniḍen n telɣut", + "notificationRuleContainsUserName": "Yegber isem n useqdac", + "notificationRuleContainsUserNameDescription": "Azen tilɣa i useqdac ma yella yizen yegber isem-is useqdac.", + "notificationRuleMaster": "Sgugem akk tilɣa", + "notificationRuleMasterDescription": "Ad isemselsi akk ilugan-nniḍen sakin ad sexsi akk tilɣa.", + "notificationRuleSuppressNotices": "Kkes iznan s wudem awurman", + "notificationRuleSuppressNoticesDescription": "Kkes ilɣa seg imsaɣen iwurmanen am yiṛubuten.", + "notificationRuleInviteForMe": "Asnubget i nekk", + "notificationRuleInviteForMeDescription": "Azen ilɣa i useqdac ticki yettwaɛreḍ ɣer texxamt.", + "notificationRuleMemberEvent": "Tadyant i yiɛeggalen", + "notificationRuleIsUserMention": "Abdar n useqdac", + "notificationRuleIsUserMentionDescription": "Azen ilɣa i useqdac ma yella yettwabder s srid deg yizen.", + "notificationRuleContainsDisplayName": "Yegber Isem n ubeqqeḍ", + "notificationRuleContainsDisplayNameDescription": "Azen ilɣa i useqdac ma yella yizen yegber Isem-is n ubeqqeḍ.", + "notificationRuleIsRoomMention": "Abdar n Texxamt", + "notificationRuleIsRoomMentionDescription": "Azen ilɣa i useqdac ticki yella ubdar n texxamt.", + "badServerLoginTypesException": "Aqeddac agejdan issefrak anawen n tuqqna:\n{serverVersions}\nMaca asnas-agi issefrak kan:\n{supportedVersions}", + "@badServerLoginTypesException": { + "type": "String", + "placeholders": { + "serverVersions": { + "type": "String" + }, + "supportedVersions": { + "type": "String" + } + } + }, + "sendTypingNotifications": "Azen alɣu ttaruɣ", + "swipeRightToLeftToReply": "Zuɣer seg uyeffus ɣer uzelmaḍ akken ad d-terreḍ", + "noMoreChatsFound": "Ulac ugar n idiwenniyen yettwafen…", + "noChatsFoundHere": "Ur d-nufi ula d yiwen n udiwenni da. Bdu adiwenni akked yiwen s useqdec n tqeffalt ukessar-a. ⤵️", + "youRejectedTheInvitation": "Tugiḍ tinnubga", + "youJoinedTheChat": "Tekcemeḍ ɣer udiwenni", + "youAcceptedTheInvitation": "👍 Tqebleḍ tinubga", + "youBannedUser": "Tgedleḍ {user}", + "@youBannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youHaveWithdrawnTheInvitationFor": "Tekkseḍ tinnubga i {user}", + "@youHaveWithdrawnTheInvitationFor": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedBy": "📩 Tettwaɛerḍeḍ sɣur {user}", + "@youInvitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "invitedBy": "📩 Tettwaɛerḍeɣ sɣur {user}", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedUser": "📩 Tɛerḍeḍ-d {user}", + "@youInvitedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKicked": "👞 Tegliḍ s rrkel {user}", + "@youKicked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKickedAndBanned": "🙅 Tegliḍ s rrkel u tgedleḍ {user}", + "@youKickedAndBanned": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youUnbannedUser": "Tekkseḍ agdel n {user}", + "@youUnbannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "hasKnocked": "🚪{user} yesṭebṭbed", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "usersMustKnock": "Iseqdacen yessefk ad sṭebṭben", + "noOneCanJoin": "Yiwen ur yezmir ad d-yernu", + "users": "Iseqdacen", + "unlockOldMessages": "Kkes asekkeṛ i yiznan iqbuṛen", + "storeInSecureStorageDescription": "Ḥrez tasarut n tririt deg usekles aɣelsan n yibenk-a.", + "saveKeyManuallyDescription": "Sekles tasarut-agi s ufus deg udiwenni n beṭṭu n unagraw neɣ ɣef tecfawit.", + "storeInAndroidKeystore": "Sekles deg Android KeyStore", + "storeInAppleKeyChain": "Sekles deg uzrar n tsura n Apple", + "storeSecurlyOnThisDevice": "Ḥrez s wudem aɣelsan ɣef yibenk-a", + "countFiles": "{count} n yifuyla", + "@countFiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "user": "Aseqdac", + "custom": "Yugnen", + "foregroundServiceRunning": "Alɣu-agi yettban-d ticki ameẓlu n uɣawas amezwaru iteddu.", + "screenSharingTitle": "beṭṭu n ugdil", + "screenSharingDetail": "Tbeṭṭuḍ agdil-ik·im deg FluffyChat", + "whyIsThisMessageEncrypted": "Acuɣer izen-agi ur yettwaɣri ara?", + "recoveryKeyLost": "Tasarut n tririt teɛreq?", + "send": "Azen", + "@send": { + "type": "String", + "placeholders": {} + }, + "sendAMessage": "Azen izen", + "@sendAMessage": { + "type": "String", + "placeholders": {} + }, + "sendAsText": "Azen am uḍris", + "@sendAsText": { + "type": "String" + }, + "sendAudio": "Azen ameslaw", + "@sendAudio": { + "type": "String", + "placeholders": {} + }, + "sendFile": "Azen afaylu", + "@sendFile": { + "type": "String", + "placeholders": {} + }, + "sendImage": "Azen tugna", + "@sendImage": { + "type": "String", + "placeholders": {} + }, + "sendImages": "Azen {count} n tugna(iwin)", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sendMessages": "Azen iznan", + "@sendMessages": { + "type": "String", + "placeholders": {} + }, + "sendVideo": "Azen avidyu", + "@sendVideo": { + "type": "String", + "placeholders": {} + }, + "sentAFile": "📁 {username} yuzen afaylu", + "@sentAFile": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAnAudio": "🎤 {username} yuzen ameslaw", + "@sentAnAudio": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAPicture": "🖼️ {username} yuzen tugna", + "@sentAPicture": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentASticker": "😊 {username} yuzen ticṛeṭ n tesfift", + "@sentASticker": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAVideo": "🎥 {username} yuzen tavidyut", + "@sentAVideo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentCallInformations": "{senderName} yuzen talɣut n usiwel", + "@sentCallInformations": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "setAsCanonicalAlias": "Sbadu-t d tazaẓlut tagejdant", + "@setAsCanonicalAlias": { + "type": "String", + "placeholders": {} + }, + "noOtherDevicesFound": "Ulac ibenkan nniḍen yettwafen", + "fileIsTooBigForServer": "Ur izmir ara ad yazen! Aqeddac yessefrak kan ifuyla imeddayen almi ɣer {max}.", + "@fileIsTooBigForServer": { + "type": "String", + "placeholders": { + "max": { + "type": "String" + } + } + }, + "fileHasBeenSavedAt": "Afaylu yettwasekles deg {path}", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "jumpToLastReadMessage": "Ddu ɣer yizen aneggaru yettwaɣen", + "readUpToHere": "Ɣeṛ dagi", + "jump": "Neggez", + "openLinkInBrowser": "Ldi aseɣwen deg yiminig", + "reportErrorDescription": "😭 Uhu. Yella kra n wugur ay yellan. Ma tebɣiḍ, tzemreḍ ad tazneḍ aneqqis-a i yineflayen.", + "report": "aneqqis", + "setColorTheme": "Sbadu asentel n yini:", + "invite": "Snubget", + "inviteGroupChat": "📨Snubget ɣer udiwenni n ugraw", + "invalidInput": "Anekcam d armeɣtu!", + "wrongPinEntered": "Tettwasekcem tangalt PIN d armeɣtut! Ɛreḍ tikkelt nniḍen deg {seconds} n tasinin…", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "pleaseEnterANumber": "Ma ulac aɣilif sekcem amḍan yugaren 0", + "unknownEncryptionAlgorithm": "Alguritm n uwgelhen d arussin", + "@unknownEncryptionAlgorithm": { + "type": "String", + "placeholders": {} + }, + "unknownEvent": "Tadyant tarussint '{type}'", + "@unknownEvent": { + "type": "String", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "unmuteChat": "Kkes asgugem i udiwenni", + "@unmuteChat": { + "type": "String", + "placeholders": {} + }, + "unsupportedAndroidVersion": "Lqem Android ur yettwasefrak ara", + "unsupportedAndroidVersionLong": "Tamahilt-a tesra lqem Android tamaynut. Ttxil-k·m senqed ileqman neɣ asefrak n Lineage OS.", + "status": "Addad", + "@status": { + "type": "String", + "placeholders": {} + }, + "statusExampleMessage": "Amek telliḍ ass-a?", + "@statusExampleMessage": { + "type": "String", + "placeholders": {} + }, + "submit": "Ceyyeɛ", + "@submit": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWait": "Amtawi... Ttxil-k·m arǧu.", + "@synchronizingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWaitCounter": " Amtawi… ({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "systemTheme": "Anagraw", + "@systemTheme": { + "type": "String", + "placeholders": {} + }, + "theyDontMatch": "Ur mṣadan ara", + "@theyDontMatch": { + "type": "String", + "placeholders": {} + }, + "theyMatch": "mṣadan", + "@theyMatch": { + "type": "String", + "placeholders": {} + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "String", + "placeholders": {} + }, + "tooManyRequestsWarning": "Deqs n tuttriwin. Ttxil-k·m, ɛreḍ tikelt nniḍen ticki!", + "@tooManyRequestsWarning": { + "type": "String", + "placeholders": {} + }, + "transferFromAnotherDevice": "Asiweḍ seg yibenk nniḍen", + "@transferFromAnotherDevice": { + "type": "String", + "placeholders": {} + }, + "tryToSendAgain": "Ɛreḍ ad tazneḍ tikkelt nniḍen", + "@tryToSendAgain": { + "type": "String", + "placeholders": {} + }, + "unavailable": "Ur yewjid ara", + "@unavailable": { + "type": "String", + "placeholders": {} + }, + "unbannedUser": "{username} yekkes agdek n {targetName}", + "@unbannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "unblockDevice": "Kkes asewḥel n yibenk", + "@unblockDevice": { + "type": "String", + "placeholders": {} + }, + "unknownDevice": "Ibenk arussin", + "@unknownDevice": { + "type": "String", + "placeholders": {} + }, + "skip": "Zgel", + "@skip": { + "type": "String", + "placeholders": {} + }, + "sourceCode": "Tangalt taɣbalutt", + "@sourceCode": { + "type": "String", + "placeholders": {} + }, + "spaceIsPublic": "Tallunt d tazayezt", + "@spaceIsPublic": { + "type": "String", + "placeholders": {} + }, + "spaceName": "Isem n tallunt", + "@spaceName": { + "type": "String", + "placeholders": {} + }, + "startedACall": "{senderName} yebda-d asiwel", + "@startedACall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "pleaseEnterRecoveryKeyDescription": "Akken ad tekkseḍ asekkeṛ i yiznan-ik·im iqburen, ttxil-k·m sekcem tasarut n tririt i d-yenulfan di tɣimit tuzwirt. Tasarut-ik·im n tririt UR TELLI ARA d awal-ik·im n uɛeddi.", + "experimentalVideoCalls": "Isawalen uvidya s wudem armitan", + "newGroup": "Agraw amaynut", + "newSpace": "Tallunt tamaynut", + "allSpaces": "Akk tallunin", + "verifiedDevicesOnly": "Ibenkan yettwasneqden kan", + "optionalMessage": "(D afrayan) izen…", + "notSupportedOnThisDevice": "Ur itteddu ara deg yibenk-agi", + "approve": "Sqbel", + "enterNewChat": "Sekcem adiwenni amaynut", + "pleaseWaitUntilInvited": "Ttxil-k·m, rǧu arma yeɛreḍ-ik-id yiwen seg texxamt.", + "commandHint_logout": "Senser seg yibenk-ik·im amiran", + "commandHint_logoutall": "Senser akk ibenkan urmiden", + "displayNavigationRail": "Sken afeggag n yinig deg uziraz", + "customReaction": "Tasedmirt yugnen", + "backToMainChat": "Uɣal ɣer udiwenni agejdan", + "createSticker": "Snulfu-d ticṛeṭ n tesfift neɣ imujiten", + "useAsSticker": "Seqdec am tcṛeṭ n tesfift", + "useAsEmoji": "Seqdec am imujit", + "stickerPackNameAlreadyExists": "Isem ukemmus n tcṛeṭ n tesfift yella yakan", + "newStickerPack": "Akemmus n tcṛeṭ n tesfift", + "stickerPackName": "Isem ukemmus n tcṛeṭ n tesfift", + "skipChatBackup": "Zgel aḥraz n udiwenni", + "skipChatBackupWarning": "tetḥeqqeḍ? S war armad n weḥraz n udiwenni, tzemreḍ ad tesruḥeḍ anekcum ɣer yiznan-ik·im ma tbeddeleḍ ibenk-ik·im.", + "loadingMessages": "Asali n yiznan", + "setupChatBackup": "Sbadu aḥraz n udiwenni", + "noMoreResultsFound": "Ulac ugar n igmaḍ yettwafen", + "clientWellKnownInformation": "Talɣut yettwasnen ɣef umsaɣ:", + "advancedConfigs": "Tawila leqqayen", + "advancedConfigurations": "Tawila tinaẓiyin", + "signUpGreeting": "FluffyChat d araslemmes! Fren aqeddac anda tebɣiḍ ad ternuḍ amiḍan-ik·im, u yyaw ad neddu!", + "signInGreeting": "Tesɛiḍ yakan amiḍan deg Matriks? Anṣuf yes-k·m tikkelt niḍen! Fren aqeddac-ik·im, u tkecmeḍ.", + "theProcessWasCanceled": "Tettwasefsex ukala-nni.", + "searchOrEnterHomeserverAddress": "Nadi neɣ sekcem tansa n uqeddac agejdan", + "setPowerLevel": "Sbadu aswir n tezmert", + "removeAdminRights": "Kkes izerfan n unedbal", + "powerLevel": "Aswir n tezmert", + "help": "Tallelt", + "@help": { + "type": "String", + "placeholders": {} + }, + "privacy": "Tabaḍnit", + "@privacy": { + "type": "String", + "placeholders": {} + }, + "reason": "Taɣẓint", + "@reason": { + "type": "String", + "placeholders": {} + }, + "recording": "Asekles", + "@recording": { + "type": "String", + "placeholders": {} + }, + "register": "Jerred", + "@register": { + "type": "String", + "placeholders": {} + }, + "reject": "Aggi", + "@reject": { + "type": "String", + "placeholders": {} + }, + "search": "Nadi", + "@search": { + "type": "String", + "placeholders": {} + }, + "security": "Taɣellist", + "@security": { + "type": "String", + "placeholders": {} + }, + "settings": "Iɣewwaren", + "@settings": { + "type": "String", + "placeholders": {} + }, + "share": "Bḍu", + "@share": { + "type": "String", + "placeholders": {} + }, + "unpin": "Kkes anṭaḍ", + "@unpin": { + "type": "String", + "placeholders": {} + }, + "knock": "Sqeṛbeb", + "knocking": "Sqeṛbeb", + "select": "Fren", + "gallery": "Timidelt", + "files": "Ifuyla", + "transparent": "Afrawan", + "discover": "Snirem", + "changelog": "Aɣmis n ibeddilen", + "notificationRuleCall": "Asiwel", + "notificationRuleMessage": "Izen", + "notificationRuleEncrypted": "Yettwawgelhen", + "notificationRuleJitsi": "Jitsi", + "more": "Ugar", + "logs": "Iɣmisen", + "join": "Ttekki", + "owner": "Amli", + "changePassword": "Asnifel n wawal n uɛeddi", + "@changePassword": { + "type": "String", + "placeholders": {} + }, + "commandHint_send": "Azen aḍris", + "@commandHint_send": { + "type": "String", + "description": "Usage hint for the command /send" + }, + "addAccount": "Rnu amiḍan", + "directChat": "Adiwenni usrid", + "redactMessage": "Kkes izen", + "@redactMessage": { + "type": "String", + "placeholders": {} + }, + "requestPermission": "Suter tasiregt", + "@requestPermission": { + "type": "String", + "placeholders": {} + }, + "saveFile": "Sekles afaylu", + "@saveFile": { + "type": "String", + "placeholders": {} + }, + "recoveryKey": "Tasarut n tririt", + "setStatus": "Sbadu addad", + "@setStatus": { + "type": "String", + "placeholders": {} + }, + "shareLocation": "Bḍu adig", + "@shareLocation": { + "type": "String", + "placeholders": {} + }, + "showPassword": "Sken-d awal n uɛeddi", + "@showPassword": { + "type": "String", + "placeholders": {} + }, + "deviceKeys": "Tisura n yibenk:", + "learnMore": "Issin ugar", + "groupName": "Isem n ugraw", + "newPassword": "Awal n uɛeddi amaynut", + "thisDevice": "Ibenk-a:", + "searchMore": "Nadi ugar…", + "allDevices": "Akk ibenkan", + "saveChanges": "Sekles ibeddilen", + "baseUrl": "URL n taffa", + "identityServer": "Aseqdac n tmagit:", + "versionWithNumber": "Lqem: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "signIn": "Qqen", + "matrixId": "Asulay ID Matrix", + "makeAdmin": "Err-it d anedbal", + "openInMaps": "Ldi-t deg maps", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "encryptThisChat": "Wgelhen adiwenni-a", + "searchForUsers": "Nadi iseqdacen…", + "createNewAddress": "Snulfu-d tansa tamaynut", + "adminLevel": "{level} - Tadbelt", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "loginWithMatrixId": "Tuqqna s usulay ID n Matrix", + "calculatingFileSize": "Asiḍen n tiddi n ufaylu...", + "shareKeysWith": "Bḍu tisura akked…", + "takeAPhoto": "Ṭṭef tawlaft", + "recordAVideo": "Sekles tavidyut", + "createNewAccount": "Snulfu-d amiḍan amaynut", + "pleaseEnterYourPassword": "Ma ulac aɣilif, sekcem-d awal-ik n uɛeddi", + "@pleaseEnterYourPassword": { + "type": "String", + "placeholders": {} + }, + "doNotShowAgain": "Ur t-id-sskan ara tikkelt nniḍen", + "passwordsDoNotMatch": "Awalen n uɛeddi mgarraden", + "searchIn": "Nadi deg udiwenni \"{chat}\"...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "enableMultiAccounts": "(armitan) Rmed aget n yimiḍanen deg yibenk-agi", + "pleaseEnter4Digits": "Ttxil-k·m sekcem 4 n wuṭṭunen neɣ eǧǧ-it d ilem akken ad tsenseḍ asekkeṛ n usnas.", + "@pleaseEnter4Digits": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPin": "Ttxil-k·m sekcem tangalt-ik·im pin", + "@pleaseEnterYourPin": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourUsername": "Ma ulac aɣilif sekcem isem n useqdac", + "@pleaseEnterYourUsername": { + "type": "String", + "placeholders": {} + }, + "pleaseFollowInstructionsOnWeb": "Ma ulac aɣilif, ḍfeṛ iwellihen n usmel web sakin sit ɣef uḍfir.", + "@pleaseFollowInstructionsOnWeb": { + "type": "String", + "placeholders": {} + }, + "publicRooms": "Tixxamin tizuyaz", + "@publicRooms": { + "type": "String", + "placeholders": {} + }, + "rejectedTheInvitation": "{username} yugi tinnubga-nni", + "@rejectedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "reportMessage": "Mmel-d izen", + "@reportMessage": { + "type": "String", + "placeholders": {} + }, + "roomHasBeenUpgraded": "Taxxamt tettwaleqqem", + "@roomHasBeenUpgraded": { + "type": "String", + "placeholders": {} + }, + "roomVersion": "Lqem n texxamt", + "@roomVersion": { + "type": "String", + "placeholders": {} + }, + "setChatDescription": "Sbadu aglam n udiwenni", + "sharedTheLocation": "{username} yebḍa adig-is", + "@sharedTheLocation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "compressVideo": "Asekkussem n tvidyut...", + "sendingAttachmentCountOfCount": "Tuzna umedday {index} n {length}…", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "welcomeText": "Azul Azul 👋 Wa d FluffyChat. Tzemreḍ ad tkecmeḍ ɣer uqeddac agejdan, yellan yemsaḍa akked https://matrix.org. Dɣa meslay d win tebɣiḍ, d aẓeṭṭa n udiwenni araslemmas amuqṛan!", + "notificationRuleRoomnotif": "Alɣu n texxamt", + "notificationRuleRoomnotifDescription": "Azen alɣu i useqdec mi ara yelli yizen yegber '@room'.", + "notificationRuleTombstoneDescription": "Azen alɣu i useqdec ɣef yiznan n usens n texxamt.", + "notificationRuleReaction": "Tasedmirt", + "notificationRuleReactionDescription": "Kkes ilɣa i tsedmirin.", + "notificationRuleSuppressEdits": "Kkes Asiẓreg", + "notificationRuleSuppressEditsDescription": "Kkes ilɣa i yeznan yettwaẓergen.", + "notificationRuleCallDescription": "Azen alɣu i useqdac ɣef isawalen.", + "notificationRuleEncryptedRoomOneToOne": "Taxxamt yettwawgelhen s wudem n yiwen ɣer yiwen", + "notificationRuleRoomOneToOne": "Taxxamt s wudem n yiwen ɣer yiwen", + "userLevel": "{level} - Aseqdac", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "startVideoCall": "Bdu asiwel n uvidyu" +} diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index 2697a159..9344f679 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -88,11 +88,6 @@ "type": "String", "placeholders": {} }, - "license": "라이선스", - "@license": { - "type": "String", - "placeholders": {} - }, "help": "도움", "@help": { "type": "String", @@ -118,11 +113,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "새로운 방 가기", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "fromTheInvitation": "초대받은 후부터", "@fromTheInvitation": { "type": "String", @@ -163,11 +153,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "당신의 홈서버를 입력하세요", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "homeserver": "홈서버", "@homeserver": {}, "enterAnEmailAddress": "이메일 주소 입력", @@ -219,11 +204,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "이모트 단축키와 이미지를 골라야 합니다!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emoteShortcode": "이모트 단축키", "@emoteShortcode": { "type": "String", @@ -381,31 +361,11 @@ "type": "String", "placeholders": {} }, - "containsUserName": "내 아이디 포함", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "내 닉네임 포함", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "연락처가 채팅에 초대되었습니다", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "connect": "연결", - "@connect": { - "type": "String", - "placeholders": {} - }, - "confirm": "확인", - "@confirm": { - "type": "String", - "placeholders": {} - }, "configureChat": "채팅 설정", "@configureChat": { "type": "String", @@ -477,8 +437,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "이 스페이스에 채팅이 추가되었습니다", - "@chatHasBeenAddedToThisSpace": {}, "chatDetails": "채팅 정보", "@chatDetails": { "type": "String", @@ -683,11 +641,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "봇 메시지", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "blocked": "차단됨", "@blocked": { "type": "String", @@ -720,18 +673,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "이 홈서버가 지원하는 Spec 버전:\n{serverVersions}\n하지만 이 앱은 {supportedVersions}만 지원합니다", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "sendOnEnter": "엔터로 보내기", "@sendOnEnter": {}, "badServerLoginTypesException": "홈서버가 지원하는 로그인 유형:\n{serverVersions}\n하지만 이 앱에서 지원하는 것은:\n{supportedVersions}", @@ -849,11 +790,6 @@ "type": "String", "placeholders": {} }, - "identity": "신원", - "@identity": { - "type": "String", - "placeholders": {} - }, "id": "ID", "@id": { "type": "String", @@ -919,33 +855,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "dateAndTimeOfDay": "{date}, {timeOfDay}", "@dateAndTimeOfDay": { "type": "String", @@ -1008,11 +917,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "배경:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "waitingPartnerNumbers": "상대가 숫자를 수락하길 기다리는 중…", "@waitingPartnerNumbers": { "type": "String", @@ -1226,11 +1130,6 @@ } } }, - "notificationsEnabledForThisAccount": "이 계정에서 알림이 활성화되었습니다", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "notifications": "알림", "@notifications": { "type": "String", @@ -1324,15 +1223,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{읽지 않은 채팅 1} other{{unreadCount} 개}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "unavailable": "사용할 수 없음", "@unavailable": { "type": "String", @@ -1426,21 +1316,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "메시지 안/읽음 으로 표시", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "음소거 토글", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "즐겨찾기 토글", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "title": "FluffyChat", "@title": { "description": "Title for the application", @@ -1501,11 +1376,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "단일 계정 로그인(SSO)", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "pushRules": "푸시 규칙", "@pushRules": { "type": "String", @@ -1535,11 +1405,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "선택해주세요", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "play": "{fileName} 재생", "@play": { "type": "String", @@ -1549,11 +1414,6 @@ } } }, - "people": "사람들", - "@people": { - "type": "String", - "placeholders": {} - }, "passwordHasBeenChanged": "비밀번호가 변경됨", "@passwordHasBeenChanged": { "type": "String", @@ -1633,11 +1493,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "참가자 변경", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "loadingPleaseWait": "로딩 중... 기다려 주세요.", "@loadingPleaseWait": { "type": "String", @@ -1697,21 +1552,6 @@ "type": "String", "placeholders": {} }, - "setPermissionsLevel": "권한 레벨 설정", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "초대 링크 설정", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "맞춤 이모트 설정", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "주 별명으로 설정", "@setAsCanonicalAlias": { "type": "String", @@ -1735,11 +1575,6 @@ } } }, - "sendOriginal": "원본 보내기", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendMessages": "메시지 보내기", "@sendMessages": { "type": "String", @@ -1774,15 +1609,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username}님이 읽음", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "security": "보안", "@security": { "type": "String", @@ -1879,11 +1705,6 @@ } } }, - "inviteForMe": "초대됨", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "invitedUsersOnly": "초대된 유저만", "@invitedUsersOnly": { "type": "String", @@ -1976,11 +1797,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "스티커 보내기", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "reportMessage": "메시지 신고", "@reportMessage": { "type": "String", @@ -2006,11 +1822,6 @@ "type": "String", "placeholders": {} }, - "removeDevice": "기기 삭제", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "removedBy": "{username}에 의해 지워짐", "@removedBy": { "type": "String", @@ -2030,11 +1841,6 @@ "type": "String", "placeholders": {} }, - "rejoin": "다시 참가", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "rejectedTheInvitation": "{username}님이 초대를 거절함", "@rejectedTheInvitation": { "type": "String", @@ -2129,8 +1935,6 @@ "@start": {}, "removeFromSpace": "스페이스에서 삭제", "@removeFromSpace": {}, - "addToSpaceDescription": "이 채팅을 추가할 스페이스를 선택하세요.", - "@addToSpaceDescription": {}, "commandHint_discardsession": "세션 삭제", "@commandHint_discardsession": { "type": "String", @@ -2151,22 +1955,6 @@ "type": "String", "description": "Usage hint for the command /create" }, - "openVideoCamera": "영상용 카메라 열기", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "공개", - "@publish": {}, - "videoWithSize": "영상 ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "dismiss": "닫기", "@dismiss": {}, "markAsRead": "읽음으로 표시하기", @@ -2205,8 +1993,6 @@ "@unsupportedAndroidVersionLong": {}, "videoCallsBetaWarning": "영상 통화는 베타임을 확인해주세요. 의도한 대로 작동하지 않거나 모든 플랫폼에서 작동하지 않을 수 있습니다.", "@videoCallsBetaWarning": {}, - "emailOrUsername": "이메일이나 유저 이름", - "@emailOrUsername": {}, "confirmMatrixId": "계정을 삭제하려면 Matrix ID를 입력해 주세요.", "@confirmMatrixId": {}, "commandHint_googly": "왕눈이 눈알 보내기", @@ -2237,29 +2023,12 @@ }, "jumpToLastReadMessage": "마지막으로 읽은 메시지로 이동", "@jumpToLastReadMessage": {}, - "allRooms": "모든 그룹 채팅", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "commandHint_cuddle": "미소 보내기", "@commandHint_cuddle": {}, - "widgetVideo": "영상", - "@widgetVideo": {}, "reportErrorDescription": "😭 이런. 무언가 잘못되었습니다. 원한다면, 개발자에게 버그를 신고할 수 있습니다.", "@reportErrorDescription": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "indexedDbErrorLong": "메시지 저장은 기본적으로 사생활 보호 모드에서 사용할 수 없습니다.\n- about:config 로 이동\n- dom.indexedDB.privateBrowsing.enabled 를 true로 설정\n그렇지 않으면 FluffyChat을 실행할 수 없습니다.", - "@indexedDbErrorLong": {}, - "startFirstChat": "첫 번째 채팅을 시작하기", - "@startFirstChat": {}, - "callingAccount": "통화 계정", - "@callingAccount": {}, "setColorTheme": "색상 테마 설정:", "@setColorTheme": {}, - "nextAccount": "다음 계정", - "@nextAccount": {}, "allSpaces": "모든 스페이스", "@allSpaces": {}, "supposedMxid": "{mxid} 이어야 함", @@ -2285,15 +2054,8 @@ }, "banUserDescription": "유저는 채팅에서 영구 추방되며 추방 해제 전까지 채팅을 다시 입력할 수 없습니다.", "@banUserDescription": {}, - "widgetEtherpad": "텍스트 메모", - "@widgetEtherpad": {}, "removeDevicesDescription": "이 기기에서 로그아웃되며 더 이상 메시지를 받을 수 없습니다.", "@removeDevicesDescription": {}, - "separateChatTypes": "다이렉트 채팅과 그룹 채팅 분리", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "tryAgain": "다시 시도하기", "@tryAgain": {}, "youKickedAndBanned": "🙅 {user}님을 영구 추방했습니다", @@ -2308,32 +2070,16 @@ "@unbanUserDescription": {}, "youRejectedTheInvitation": "초대를 거부했습니다", "@youRejectedTheInvitation": {}, - "otherCallingPermissions": "마이크, 카메라 그리고 다름 FluffyChat 권한", - "@otherCallingPermissions": {}, "messagesStyle": "메세지:", "@messagesStyle": {}, - "widgetUrlError": "유효한 URL이 아닙니다.", - "@widgetUrlError": {}, "newSpaceDescription": "스페이스를 사용하면 채팅을 통합하고 비공개 또는 공개 커뮤니티를 구축할 수 있습니다.", "@newSpaceDescription": {}, "chatDescription": "채팅 설명", "@chatDescription": {}, - "callingAccountDetails": "FluffyChat이 android 전화앱을 사용 할 수 있도록 허가.", - "@callingAccountDetails": {}, - "enterSpace": "스페이스에 입장", - "@enterSpace": {}, "encryptThisChat": "이 채팅을 암호화", "@encryptThisChat": {}, - "previousAccount": "이전 계정", - "@previousAccount": {}, "reopenChat": "채팅 다시 열기", "@reopenChat": {}, - "pleaseEnterRecoveryKey": "당신의 복구키를 입력하세요:", - "@pleaseEnterRecoveryKey": {}, - "widgetNameError": "표시 이름을 입력하세요.", - "@widgetNameError": {}, - "addWidget": "위젯 추가", - "@addWidget": {}, "countFiles": "{count}개의 파일", "@countFiles": { "placeholders": { @@ -2344,8 +2090,6 @@ }, "noKeyForThisMessage": "이것은 이 메시지가 당신이 이 기기를 서명하기 전에 발송되었기 때문에 일어났을 수 있습니다.\n\n이것은 또한 발송자가 당신의 기기를 차단하였거나 혹은 인터넷 연결이 잘못되었을 수 있습니다.\n\n다른 세션에서 이 메시지를 읽을 수 있나요? 그렇다면 그 메시지를 옮길 수 있습니다! 설정 > 기기로 가서 기기를 서로 증명하세요. 다음번에 방을 열었을 때 두 세션이 모두 작동중이라면, 키가 자동으로 옮겨질것입니다.\n\n로그아웃하거나 기기를 바꿀 때 키를 잃고싶지 않으신가요? 설정에서 채팅 백업을 사용중인지 확인하세요.", "@noKeyForThisMessage": {}, - "hydrateTor": "TOR 사용자: 내보낸 세션 불러오기", - "@hydrateTor": {}, "pushNotificationsNotAvailable": "푸시 알림 사용 불가", "@pushNotificationsNotAvailable": {}, "storeInAppleKeyChain": "Apple KeyChain에 저장하기", @@ -2358,8 +2102,6 @@ "@chatPermissions": {}, "storeInAndroidKeystore": "Android KeyStore에 저장하기", "@storeInAndroidKeystore": {}, - "signInWithPassword": "비밀번호로 로그인", - "@signInWithPassword": {}, "makeAdminDescription": "유저를 한 번 관리자로 만들면, 당신과 같은 권한을 가지기때문에 권한 회수가 불가능합니다.", "@makeAdminDescription": {}, "saveKeyManuallyDescription": "공유나 클립보드를 이용해 수동으로 키를 저장합니다.", @@ -2381,51 +2123,20 @@ } } }, - "signInWith": "{provider}로 로그인", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "fileIsTooBigForServer": "전송에 실패했습니다. 서버는 {max}가 넘는 파일을 지원하지 않습니다.", "@fileIsTooBigForServer": {}, - "callingPermissions": "통화 권한", - "@callingPermissions": {}, "readUpToHere": "여기까지 읽음", "@readUpToHere": {}, "unlockOldMessages": "오래된 메시지 잠금 해제하기", "@unlockOldMessages": {}, - "numChats": "{number}개의 채팅", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "optionalRedactReason": "(선택) 이 메시지를 편집하는 이유...", "@optionalRedactReason": {}, "archiveRoomDescription": "채팅이 보관함으로 이동합니다. 다른 유저들은 당신이 떠난다는것을 볼 수 있습니다.", "@archiveRoomDescription": {}, "exportEmotePack": ".zip 파일로 이모트 내보내기", "@exportEmotePack": {}, - "switchToAccount": "계정 {number}로 전환", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "pleaseEnterRecoveryKeyDescription": "오래된 메시지를 잠금 해제하려면, 이전 세션에서 생성된 복호화 키를 입력하세요. 복호화 키는 비밀번호가 아닙니다.", "@pleaseEnterRecoveryKeyDescription": {}, - "inviteContactToGroupQuestion": "{contact} 를 \"{groupName}\"에 초대할까요?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "{username}님이 삭제함. 사유: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2446,10 +2157,6 @@ } } }, - "appearOnTopDetails": "앱이 상단에 표시되도록 허용 (이미 FluffyChat을 통화 계정으로 설정한 경우에는 필요하지 않음)", - "@appearOnTopDetails": {}, - "enterRoom": "방에 입장", - "@enterRoom": {}, "youInvitedUser": "📩 {user}님을 초대했습니다", "@youInvitedUser": { "placeholders": { @@ -2473,18 +2180,12 @@ "@recoveryKey": {}, "invalidInput": "잘못된 입력!", "@invalidInput": {}, - "dehydrateTorLong": "TOR 사용자들은 창을 닫기 전에 세션을 내보내는것이 권장됩니다.", - "@dehydrateTorLong": {}, "doNotShowAgain": "다시 보지 않기", "@doNotShowAgain": {}, "report": "신고", "@report": {}, - "hideUnimportantStateEvents": "중요하지 않은 상태 이벤트 숨기기", - "@hideUnimportantStateEvents": {}, "screenSharingTitle": "화면 공유", "@screenSharingTitle": {}, - "widgetCustom": "사용자 정의", - "@widgetCustom": {}, "youBannedUser": "{user}님을 영구 추방함", "@youBannedUser": { "placeholders": { @@ -2493,8 +2194,6 @@ } } }, - "addChatDescription": "채팅 설명 추가하기...", - "@addChatDescription": {}, "hasKnocked": "🚪 {user}님이 참가를 요청했습니다", "@hasKnocked": { "placeholders": { @@ -2522,10 +2221,6 @@ "@sendTypingNotifications": {}, "inviteGroupChat": "📨 그룹 채팅에 초대", "@inviteGroupChat": {}, - "appearOnTop": "상단에 표시", - "@appearOnTop": {}, - "invitePrivateChat": "📨 비공개 채팅에 초대", - "@invitePrivateChat": {}, "foregroundServiceRunning": "이 알림은 백그라운드 서비스가 실행중일때 표시됩니다.", "@foregroundServiceRunning": {}, "importEmojis": "이모지 불러오기", @@ -2551,8 +2246,6 @@ "@chatDescriptionHasBeenChanged": {}, "newGroup": "새 그룹 채팅", "@newGroup": {}, - "dehydrateTor": "TOR 사용자: 세션 내보내기", - "@dehydrateTor": {}, "roomUpgradeDescription": "채팅이 새로운 방 버전으로 다시 생성됩니다. 모든 참가자는 새로운 채팅으로 전환해야합니다. https://spec.matrix.org/latest/rooms/ 에서 방 버전에 대해 자세히 알아볼 수 있습니다.", "@roomUpgradeDescription": {}, "pleaseEnterANumber": "0보다 큰 숫자를 입력하세요", @@ -2565,8 +2258,6 @@ } } }, - "profileNotFound": "유저를 서버에서 찾을 수 있습니다. 연결 문제가 있거나 유저가 존재하지 않을 수 있습니다.", - "@profileNotFound": {}, "jump": "점프", "@jump": {}, "sorryThatsNotPossible": "죄송합니다...그것은 불가능합니다", @@ -2593,14 +2284,8 @@ "type": "String", "placeholders": {} }, - "setTheme": "테마 설정:", - "@setTheme": {}, "youJoinedTheChat": "채팅에 참가하였습니다", "@youJoinedTheChat": {}, - "widgetName": "이름", - "@widgetName": {}, - "errorAddingWidget": "위젯 추가중 오류 발생.", - "@errorAddingWidget": {}, "commandHint_hug": "허그 보내기", "@commandHint_hug": {}, "replace": "대체", @@ -2615,12 +2300,8 @@ }, "newSpace": "새 스페이스", "@newSpace": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "나중에 다시 시도하거나 다른 서버를 선택하십시오.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "createGroup": "새 그룹 채팅", "@createGroup": {}, - "hydrateTorLong": "지난 TOR 이용에서 세션을 내보내셨나요? 빠르게 불러오고 채팅을 계속하세요.", - "@hydrateTorLong": {}, "custom": "커스텀", "@custom": {}, "noBackupWarning": "경고! 채팅 백업을 켜지 않을경우, 당신은 암호화된 메시지에 대한 접근권한을 잃을것 입니다. 로그아웃 하기 전에 채팅을 백업하는것이 강력히 권장됩니다.", @@ -2633,8 +2314,6 @@ "@importNow": {}, "invite": "초대", "@invite": {}, - "indexedDbErrorTitle": "사생활 보호 모드의 문제", - "@indexedDbErrorTitle": {}, "storeSecurlyOnThisDevice": "이 기기에 안전하게 저장", "@storeSecurlyOnThisDevice": {}, "screenSharingDetail": "FluffyChat에 당신의 화면을 공유하는중", @@ -2653,24 +2332,12 @@ "@pleaseChooseAStrongPassword": {}, "addChatOrSubSpace": "채팅 또는 하위 스페이스 추가", "@addChatOrSubSpace": {}, - "subspace": "하위 스페이스", - "@subspace": {}, - "youInvitedToBy": "📩 링크를 통해 초대되셨습니다:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "databaseMigrationBody": "잠시만 기다리세요. 시간이 걸릴 수 있습니다.", "@databaseMigrationBody": {}, "select": "선택", "@select": {}, "joinSpace": "스페이스 참가", "@joinSpace": {}, - "decline": "거절", - "@decline": {}, "formattedMessagesDescription": "마크다운을 이용한 볼드등의 서식이 있는 메시지를 봅니다.", "@formattedMessagesDescription": {}, "completedKeyVerification": "{sender}가 키 검증을 완료함", @@ -2697,8 +2364,6 @@ "@passwordsDoNotMatch": {}, "passwordIsWrong": "비밀번호가 틀립니다", "@passwordIsWrong": {}, - "publicLink": "공개 링크", - "@publicLink": {}, "thisDevice": "이 기기:", "@thisDevice": {}, "sendReadReceipts": "읽음 확인 보내기", @@ -2753,11 +2418,6 @@ "@commandHint_unignore": {}, "blockListDescription": "당신은 당신을 방해하는 유저들을 차단할 수 있습니다. 당신은 당신의 개인 차단 목록에 있는 어떠한 유저의 메시지와 방 초대도 받지 않을것 입니다.", "@blockListDescription": {}, - "presenceStyle": "상태:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "sessionLostBody": "세션을 잃었습니다. {url} 에서 개발자에게 오류를 신고하세요. 오류 메시지는 다음과 같습니다: {error}", "@sessionLostBody": { "type": "String", @@ -2783,8 +2443,6 @@ }, "nothingFound": "아무것도 찾지 못했습니다...", "@nothingFound": {}, - "startConversation": "대화 시작", - "@startConversation": {}, "databaseMigrationTitle": "데이터베이스가 최적화됨", "@databaseMigrationTitle": {}, "pleaseEnterYourCurrentPassword": "현재 비밀번호 입력", @@ -2793,31 +2451,10 @@ "@publicSpaces": {}, "initAppError": "앱 초기화중 오류 발생", "@initAppError": {}, - "databaseBuildErrorBody": "SQlite 데이터베이스를 구축할 수 없습니다. 현재 레거시 데이터베이스 사용을 시도중입니다. {url} 에서 개발자에게 오류를 신고하세요. 오류 메시지는 다음과 같습니다: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "채팅의 다른 참가자들이 당신이 새 메시지를 입력중인것을 볼 수 있습니다.", "@sendTypingNotificationsDescription": {}, "formattedMessages": "형식이 지정된 메시지", "@formattedMessages": {}, - "forwardMessageTo": "{roomName}에 메시지를 전달할까요?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "verifyOtherDevice": "🔐 다른 기기를 확인", "@verifyOtherDevice": {}, "verifyOtherUserDescription": "다른 유저를 확인하면, 당신은 당신이 누구에게 말하고있는지 알 수 있습니다. 💪\n\n확인을 시작할 때, 다른 유저는 앱에서 팝업을 볼 수 있습니다. 당신은 그런 다음 서로 비교해야 이모지 또는 숫자의 목록을 볼 수 있습니다.\n\n이 작업을 수행하는 가장 좋은 방법은 직접 만나거나 영상통화를 하는것입니다. 👭", @@ -2893,22 +2530,8 @@ "@hideInvalidOrUnknownMessageFormats": {}, "overview": "개요", "@overview": {}, - "notifyMeFor": "나에게 알림", - "@notifyMeFor": {}, "passwordRecoverySettings": "비밀번호 복구 설정", "@passwordRecoverySettings": {}, - "hideMemberChangesInPublicChats": "공개 채팅에서의 참가자 변화 숨김", - "@hideMemberChangesInPublicChats": {}, - "userWouldLikeToChangeTheChat": "{user}님이 참가를 희망합니다.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "공개 링크가 아직 생성되지 않았음", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "참가 요청", "@knock": {}, "usersMustKnock": "유저들이 참가를 허가받아야함", @@ -2931,25 +2554,12 @@ "type": "String", "count": {} }, - "minimumPowerLevel": "{level}은 최소 권한 레벨입니다.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "noDatabaseEncryption": "데이터베이스 암호화는 이 플랫폼에서 지원되지 않음", "@noDatabaseEncryption": {}, "publicChatAddresses": "공개 채팅 주소", "@publicChatAddresses": {}, - "userRole": "유저 역할", - "@userRole": {}, "createNewAddress": "새 주소 만들기", "@createNewAddress": {}, - "hideMemberChangesInPublicChatsBody": "공개 채팅에 누군가가 참가하거나 떠날때 타임라인에 표시하지 않습니다.", - "@hideMemberChangesInPublicChatsBody": {}, "searchMore": "더 검색...", "@searchMore": {}, "files": "파일", @@ -2988,20 +2598,6 @@ }, "markAsUnread": "읽지 않음으로 표시", "@markAsUnread": {}, - "countChatsAndCountParticipants": "{chats} 채팅과 {participants} 참여자", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "joinedChats": "참가한 채팅", - "@joinedChats": {}, "noMoreChatsFound": "채팅을 찾을 수 없습니다...", "@noMoreChatsFound": {}, "moderatorLevel": "{level} - 관리자", @@ -3047,8 +2643,6 @@ "@changeTheCanonicalRoomAlias": {}, "sendCanceled": "전송 최소됨", "@sendCanceled": {}, - "homeserverDescription": "당신의 모든 데이터는 이메일과 흡사하게 당신의 홈서버에 저장됩니다. 당신이 소통하고 싶은 사람들과 다른 서버를 사용해도 무관하니 당신이 원하는 홈서버를 선택해도 됩니다. https://matrix.org에서 자세히 알아보세요.", - "@homeserverDescription": {}, "sendingAttachmentCountOfCount": "첨부파일 {length}개중 {index}번째 전송 중...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3125,10 +2719,6 @@ "@chatPermissionsDescription": {}, "loginWithMatrixId": "Matrix-ID로 로그인", "@loginWithMatrixId": {}, - "discoverHomeservers": "홈서버 찾아보기", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "홈서버가 무엇인가요?", - "@whatIsAHomeserver": {}, "doesNotSeemToBeAValidHomeserver": "호환되는 홈서버가 아닌 것 같습니다. URL을 올바르게 입력됐나요?", "@doesNotSeemToBeAValidHomeserver": {}, "continueText": "계속하기", @@ -3196,8 +2786,6 @@ "@previous": {}, "newChatRequest": "📩 새 채팅 요청", "@newChatRequest": {}, - "appIntroduction": "FluffyChat는 다른 메신저들을 사용하는 친구들과도 채팅할 수 있습니다. https://matrix.org에 방문하거나 *계속*을 눌러 자세한 정보를 확인하세요.", - "@appIntroduction": {}, "synchronizingPleaseWaitCounter": " 동기화중… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -3271,14 +2859,8 @@ "@notificationRuleSuppressEditsDescription": {}, "notificationRuleCall": "전화", "@notificationRuleCall": {}, - "setCustomPermissionLevel": "사용자 지정 권한 수준 설정", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "아래에서 미리 정의된 역할을 선택하거나 0부터 100 사이의 사용자 지정 권한 수준을 입력해 주세요.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "사용자 무시", "@ignoreUser": {}, - "normalUser": "일반 사용자", - "@normalUser": {}, "commandHint_roomupgrade": "이 방을 주어진 방 버전으로 업그레이드합니다", "@commandHint_roomupgrade": {}, "checkList": "체크리스트", @@ -3292,4 +2874,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index 44f5681e..2fd1b1e7 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -4,11 +4,6 @@ "type": "String", "description": "Usage hint for the command /leave" }, - "confirm": "Patvirtinti", - "@confirm": { - "type": "String", - "placeholders": {} - }, "cancel": "Atšaukti", "@cancel": { "type": "String", @@ -179,11 +174,6 @@ }, "homeserver": "Namų serveris", "@homeserver": {}, - "enterYourHomeserver": "Įveskite namų serverį", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "Viskas paruošta!", "@everythingReady": { "type": "String", @@ -201,16 +191,6 @@ "type": "String", "placeholders": {} }, - "connect": "Prisijungti", - "@connect": { - "type": "String", - "placeholders": {} - }, - "people": "Žmonės", - "@people": { - "type": "String", - "placeholders": {} - }, "moderator": "Moderatorius", "@moderator": { "type": "String", @@ -246,11 +226,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Pranešimai aktyvuoti šitai paskyrai", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "obtainingLocation": "Gaunama vieta…", "@obtainingLocation": { "type": "String", @@ -318,11 +293,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Prašome pasirinkti", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Pasirinkite slaptą kodą", "@pleaseChooseAPasscode": { "type": "String", @@ -383,11 +353,6 @@ "type": "String", "placeholders": {} }, - "rejoin": "Vėl prisijungti", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Pašalinti", "@remove": { "type": "String", @@ -398,11 +363,6 @@ "type": "String", "placeholders": {} }, - "removeDevice": "Pašalinti įrenginį", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "removeYourAvatar": "Pašalinti savo avatarą", "@removeYourAvatar": { "type": "String", @@ -649,11 +609,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Eiti į naują kambarį", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupė", "@group": { "type": "String", @@ -694,11 +649,6 @@ "type": "String", "placeholders": {} }, - "identity": "Tapatybė", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignoruoti", "@ignore": { "type": "String", @@ -714,11 +664,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Narių pokyčiai", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Paminėti", "@mention": { "type": "String", @@ -853,11 +798,6 @@ "type": "String", "placeholders": {} }, - "license": "Licencija", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Šviesi", "@lightTheme": { "type": "String", @@ -898,16 +838,6 @@ "type": "String", "placeholders": {} }, - "setInvitationLink": "Nustatyti pakvietimo nuorodą", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "singlesignon": "Vienkartinis prisijungimas", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "sourceCode": "Programinis kodas", "@sourceCode": { "type": "String", @@ -1031,31 +961,16 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Siųsti originalą", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Siųsti video", "@sendVideo": { "type": "String", "placeholders": {} }, - "separateChatTypes": "Atskirti tiesioginius pokalbius ir grupes", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Nustatyti kaip pagrindinį slapyvardį", "@setAsCanonicalAlias": { "type": "String", "placeholders": {} }, - "setPermissionsLevel": "Nustatyti leidimų lygį", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Nustatyti būseną", "@setStatus": { "type": "String", @@ -1118,8 +1033,6 @@ "type": "String", "placeholders": {} }, - "addToSpaceDescription": "Pasirinkite erdvę, kad prie jos pridėtumėte šį pokalbį.", - "@addToSpaceDescription": {}, "start": "Pradžia", "@start": {}, "account": "Paskyra", @@ -1139,18 +1052,11 @@ "type": "String", "placeholders": {} }, - "botMessages": "Botų žinutės", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "channelCorruptedDecryptError": "Šifravimas buvo sugadintas", "@channelCorruptedDecryptError": { "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Pokalbis buvo pridėtas prie šios erdvės", - "@chatHasBeenAddedToThisSpace": {}, "compareEmojiMatch": "Palyginkite jaustukus", "@compareEmojiMatch": { "type": "String", @@ -1201,11 +1107,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Pažymėti kaip skaitytą/neskaitytą", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Per daug užklausų. Pabandykite dar kartą vėliau!", "@tooManyRequestsWarning": { "type": "String", @@ -1221,11 +1122,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Užsklanda", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Įspėjimas!", "@warning": { "type": "String", @@ -1333,11 +1229,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Atidarykite kamerą vaizdo įrašui", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "editBundlesForAccount": "Redaguoti šios paskyros paketus", "@editBundlesForAccount": {}, "serverRequiresEmail": "Šis serveris turi patvirtinti jūsų el. pašto adresą registracijai.", @@ -1399,20 +1290,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Matė {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sendSticker": "Siųsti lipduką", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sentAFile": "📁 {username} atsiuntė failą", "@sentAFile": { "type": "String", @@ -1534,8 +1411,6 @@ } } }, - "publish": "Paskelbti", - "@publish": {}, "openChat": "Atverti pokalbį", "@openChat": {}, "reportUser": "Pranešti apie vartotoją", @@ -1556,12 +1431,6 @@ }, "unsupportedAndroidVersion": "Nepalaikoma Android versija", "@unsupportedAndroidVersion": {}, - "emailOrUsername": "El. paštas arba vartotojo vardas", - "@emailOrUsername": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetNameError": "Pateikite rodomą vardą.", - "@widgetNameError": {}, "acceptedTheInvitation": "👍 {username} priėmė kvietimą", "@acceptedTheInvitation": { "type": "String", @@ -1610,18 +1479,6 @@ } } }, - "badServerVersionsException": "Namų serveris palaiko spec. versijas:\n{serverVersions}\nTačiau ši programa palaiko tik {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "bannedUser": "{username} užblokavo {targetName}", "@bannedUser": { "type": "String", @@ -1695,16 +1552,6 @@ }, "description": "State that {command} is not a valid /command." }, - "containsDisplayName": "Turi rodomą vardą", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Turi vartotojo vardą", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "couldNotDecryptMessage": "Nepavyko iššifruoti pranešimo: {error}", "@couldNotDecryptMessage": { "type": "String", @@ -1762,11 +1609,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Turite pasirinkti jaustuko trumpąjį kodą ir paveiksliuką!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "enableEmotesGlobally": "Įgalinti jaustukų paketą visur", "@enableEmotesGlobally": { "type": "String", @@ -1811,11 +1653,6 @@ } } }, - "inviteForMe": "Pakvietimas man", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteContactToGroup": "Pakviesti kontaktą į {groupName}", "@inviteContactToGroup": { "type": "String", @@ -1909,16 +1746,6 @@ } } }, - "toggleFavorite": "Perjungti parankinius", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Perjungti nutildytą", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "cantOpenUri": "Nepavyksta atidaryti URI {uri}", "@cantOpenUri": { "type": "String", @@ -2051,15 +1878,6 @@ } } }, - "videoWithSize": "Vaizdo įrašas ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "pinMessage": "Prisegti prie kambario", "@pinMessage": {}, "confirmEventUnpin": "Ar tikrai norite visam laikui atsegti įvykį?", @@ -2076,27 +1894,6 @@ "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Eksperimentiniai vaizdo skambučiai", "@experimentalVideoCalls": {}, - "switchToAccount": "Perjungti paskyrą į {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Kita paskyra", - "@nextAccount": {}, - "previousAccount": "Ankstesnė paskyra", - "@previousAccount": {}, - "widgetEtherpad": "Teksto pastaba", - "@widgetEtherpad": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetName": "Vardas", - "@widgetName": {}, - "widgetUrlError": "Netinkamas URL.", - "@widgetUrlError": {}, "youRejectedTheInvitation": "Jūs atmetėte kvietimą", "@youRejectedTheInvitation": {}, "youJoinedTheChat": "Jūs prisijungėte prie pokalbio", @@ -2171,33 +1968,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "locationDisabledNotice": "Vietos nustatymo paslaugos yra išjungtos. Kad galėtumėte bendrinti savo buvimo vietą, įjunkite jas.", "@locationDisabledNotice": { "type": "String", @@ -2258,11 +2028,6 @@ } } }, - "setCustomEmotes": "Nustatyti pasirinktinius jaustukus", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "userLeftTheChat": "🚪 {username} paliko pokalbį", "@userLeftTheChat": { "type": "String", @@ -2279,21 +2044,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 unread chat} other{{unreadCount} neperskaityti pokalbiai}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "addWidget": "Pridėti programėlę", - "@addWidget": {}, - "widgetCustom": "Pasirinktinis", - "@widgetCustom": {}, - "errorAddingWidget": "Pridedant valdiklį įvyko klaida.", - "@errorAddingWidget": {}, "askSSSSSign": "Kad galėtumėte prijungti kitą asmenį, įveskite savo saugyklos slaptafrazę arba atkūrimo raktą.", "@askSSSSSign": { "type": "String", @@ -2306,32 +2056,16 @@ }, "commandHint_markasdm": "Pažymėti kaip tiesioginio pokalbio kambarį", "@commandHint_markasdm": {}, - "dehydrateTorLong": "TOR naudotojams rekomenduojama eksportuoti sesiją prieš uždarant langą.", - "@dehydrateTorLong": {}, "dehydrateWarning": "Šio veiksmo negalima atšaukti. Įsitikinkite, kad saugiai saugote atsarginę kopiją.", "@dehydrateWarning": {}, - "hydrateTorLong": "Ar paskutinį kartą eksportavote savo sesiją naudodami TOR? Greitai ją importuokite ir tęskite pokalbį.", - "@hydrateTorLong": {}, "commandHint_markasgroup": "Pažymėti kaip grupę", "@commandHint_markasgroup": {}, "pleaseEnterRecoveryKeyDescription": "Norėdami atrakinti senas žinutes, įveskite atkūrimo raktą, kuris buvo sukurtas ankstesnės sesijos metu. Atkūrimo raktas NĖRA jūsų slaptažodis.", "@pleaseEnterRecoveryKeyDescription": {}, - "callingPermissions": "Skambinimo leidimai", - "@callingPermissions": {}, "storeInAppleKeyChain": "Saugoti Apple raktų grandinėje", "@storeInAppleKeyChain": {}, - "callingAccount": "Skambinimo paskyra", - "@callingAccount": {}, "newSpace": "Nauja erdvė", "@newSpace": {}, - "callingAccountDetails": "Leidžia FluffyChat naudoti vietinę Android rinkiklio programą.", - "@callingAccountDetails": {}, - "appearOnTop": "Rodyti viršuje", - "@appearOnTop": {}, - "enterSpace": "Įeiti į erdvę", - "@enterSpace": {}, - "enterRoom": "Įeiti į kambarį", - "@enterRoom": {}, "allSpaces": "Visos erdvės", "@allSpaces": {}, "user": "Vartotojas", @@ -2351,20 +2085,12 @@ }, "dehydrate": "Eksportuoti sesiją ir išvalyti įrenginį", "@dehydrate": {}, - "dehydrateTor": "TOR Naudotojai: Eksportuoti sesiją", - "@dehydrateTor": {}, - "hydrateTor": "TOR Naudotojai: Importuoti sesijos eksportą", - "@hydrateTor": {}, "hydrate": "Atkurti iš atsarginės kopijos failo", "@hydrate": {}, - "pleaseEnterRecoveryKey": "Įveskite savo atkūrimo raktą:", - "@pleaseEnterRecoveryKey": {}, "recoveryKey": "Atkūrimo raktas", "@recoveryKey": {}, "recoveryKeyLost": "Pamestas atkūrimo raktas?", "@recoveryKeyLost": {}, - "indexedDbErrorLong": "Deja, pagal numatytuosius nustatymus žinučių saugojimas privačiame režime nėra įjungtas.\nPrašome apsilankyti\n - about:config\n - nustatykite dom.indexedDB.privateBrowsing.enabled į true\nPriešingu atveju FluffyChat paleisti neįmanoma.", - "@indexedDbErrorLong": {}, "countFiles": "{count} failai", "@countFiles": { "placeholders": { @@ -2385,33 +2111,16 @@ "@unlockOldMessages": {}, "storeInAndroidKeystore": "Saugoti Android raktų saugykloje", "@storeInAndroidKeystore": {}, - "indexedDbErrorTitle": "Privataus režimo problemos", - "@indexedDbErrorTitle": {}, "noKeyForThisMessage": "Taip gali atsitikti, jei žinutė buvo išsiųsta prieš prisijungiant prie paskyros šiame prietaise.\n\nTaip pat gali būti, kad siuntėjas užblokavo jūsų prietaisą arba kažkas sutriko su interneto ryšiu.\n\nAr galite perskaityti žinutę kitoje sesijoje? Tada galite perkelti žinutę iš jos! Eikite į Nustatymai > Prietaisai ir įsitikinkite, kad jūsų prietaisai patvirtino vienas kitą. Kai kitą kartą atidarysite kambarį ir abi sesijos bus pirmame plane, raktai bus perduoti automatiškai.\n\nNenorite prarasti raktų atsijungdami arba keisdami įrenginius? Įsitikinkite, kad nustatymuose įjungėte pokalbių atsarginę kopiją.", "@noKeyForThisMessage": {}, "foregroundServiceRunning": "Šis pranešimas rodomas, kai veikia pirmojo plano paslauga.", "@foregroundServiceRunning": {}, "screenSharingTitle": "ekrano bendrinimas", "@screenSharingTitle": {}, - "appearOnTopDetails": "Leidžia programėlę rodyti viršuje (nebūtina, jei jau esate nustatę Fluffychat kaip skambinimo paskyrą)", - "@appearOnTopDetails": {}, - "otherCallingPermissions": "Mikrofonas, kamera ir kiti FluffyChat leidimai", - "@otherCallingPermissions": {}, "whyIsThisMessageEncrypted": "Kodėl ši žinutė neperskaitoma?", "@whyIsThisMessageEncrypted": {}, "newGroup": "Nauja grupė", "@newGroup": {}, "screenSharingDetail": "Bendrinate savo ekraną per FuffyChat", - "@screenSharingDetail": {}, - "numChats": "{number} pokalbiai", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Slėpti nesvarbius būsenos įvykius", - "@hideUnimportantStateEvents": {} -} + "@screenSharingDetail": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 9e9a9ddb..c81ba6ca 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -33,17 +33,7 @@ "type": "String", "placeholders": {} }, - "connect": "Savienot", - "@connect": { - "type": "String", - "placeholders": {} - }, "jumpToLastReadMessage": "Pārlēkt uz pēdējo izlasīto ziņu", - "allRooms": "Visām kopu tērzēšanām", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "obtainingLocation": "Iegūst atrašanās vietu…", "@obtainingLocation": { "type": "String", @@ -55,7 +45,6 @@ "type": "String", "placeholders": {} }, - "widgetVideo": "Video", "dismiss": "Atmest", "unknownDevice": "Nezināma ierīce", "@unknownDevice": { @@ -83,11 +72,6 @@ "type": "String", "placeholders": {} }, - "setPermissionsLevel": "Iestatīt atļauju līmeni", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "inviteContactToGroup": "Uzaicināt kontaktpersonu {groupName}", "@inviteContactToGroup": { "type": "String", @@ -108,7 +92,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Šai vietai tika pievienota tērzēšana", "reply": "Atbildēt", "@reply": { "type": "String", @@ -140,7 +123,6 @@ "type": "String", "description": "Usage hint for the command /html" }, - "widgetJitsi": "Jitsi Meet", "youAreNoLongerParticipatingInThisChat": "Tu vairs nepiedalies šajā tērzēšanā", "@youAreNoLongerParticipatingInThisChat": { "type": "String", @@ -152,13 +134,7 @@ "placeholders": {} }, "messageType": "Ziņas veids", - "indexedDbErrorLong": "Diemžēl ziņu krātuve pēc noklusējuma nav iespējota privātajā režīmā.\nLūgums apmeklēt\n - about:config\n - iestatīt dom.indexedDB.privateBrowsing.enabled kā true\nPretējā gadījumā nav iespējams palaist FluffyChat.", "oneClientLoggedOut": "Viens no klientiem ir atteicies", - "toggleMuted": "Pārslēgt apklusināšanu", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "unsupportedAndroidVersionLong": "Šai iespējai ir nepieciešama jaunāka Android versija. Lūgums pārbaudīt atjauninājumus vai Lineage OS atbalstu.", "kicked": "👞 {username} izmeta {targetName}", "@kicked": { @@ -207,8 +183,6 @@ "type": "String", "placeholders": {} }, - "startFirstChat": "Uzsāc savu pirmo tērzēšanu", - "callingAccount": "Zvanīšanas konts", "requestPermission": "Pieprasīt atļauju", "@requestPermission": { "type": "String", @@ -241,17 +215,11 @@ } }, "setColorTheme": "Iestatīt krāsu izskatu:", - "nextAccount": "Nākamais konts", "commandHint_create": "Izveidot tukšu kopas tērzēšanu\nLai atspējotu šifrēšanu, jāizmanto --no-encryption", "@commandHint_create": { "type": "String", "description": "Usage hint for the command /create" }, - "singlesignon": "Vienotā pieteikšanās", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "warning": "Uzmanību!", "@warning": { "type": "String", @@ -369,7 +337,6 @@ "type": "String", "placeholders": {} }, - "widgetEtherpad": "Teksta piezīme", "waitingPartnerAcceptRequest": "Gaida, līdz biedrs apstiprinās pieprasījumu…", "@waitingPartnerAcceptRequest": { "type": "String", @@ -417,11 +384,6 @@ } } }, - "separateChatTypes": "Atdalīt tiešās tērzēšanas un kopas", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "tryAgain": "Jāmēģina vēlreiz", "areGuestsAllowedToJoin": "Vai vieslietotājiem ir ļauts pievienoties", "@areGuestsAllowedToJoin": { @@ -441,23 +403,6 @@ } } }, - "dateWithoutYear": "{day}.{month}.", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "removeDevice": "Noņemt ierīci", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanUserDescription": "Lietotājs varēs atkal pievienoties tērzēšanai, ja mēģinās.", "userAndUserAreTyping": "{username} un {username2} raksta…", "@userAndUserAreTyping": { @@ -497,7 +442,6 @@ } }, "youRejectedTheInvitation": "Tu noraidīji uzaicinājumu", - "otherCallingPermissions": "Mikrofons, kamera un citas FluffyChat atļaujas", "messagesStyle": "Ziņas:", "couldNotDecryptMessage": "Nevarēja atšifrēt ziņu: {error}", "@couldNotDecryptMessage": { @@ -514,11 +458,8 @@ "placeholders": {} }, "link": "Saite", - "widgetUrlError": "Tas nav derīgs URL.", - "emailOrUsername": "E-pasta adrese vai lietotājvārds", "newSpaceDescription": "Vietas ļauj apvienot tērzēšanas un būvēt privātas vai publiskas kopienas.", "chatDescription": "Tērzēšanas apraksts", - "callingAccountDetails": "Ļauj FluffyChat izmantot iebūvēto Android zvanīšanas lietotni.", "next": "Nākamais", "@next": { "type": "String", @@ -538,27 +479,11 @@ } } }, - "dateWithYear": "{year}.{month}.{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "editRoomAliases": "Labot istabu aizstājvārdus", "@editRoomAliases": { "type": "String", "placeholders": {} }, - "enterSpace": "Ieiet vietā", "encryptThisChat": "Šifrēt šo tērzēšanu", "fileName": "Datnes nosaukums", "@fileName": { @@ -570,7 +495,6 @@ "type": "String", "placeholders": {} }, - "previousAccount": "Iepriekšējais konts", "publicRooms": "Publiskas istabas", "@publicRooms": { "type": "String", @@ -591,23 +515,12 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Nepieciešams izvēlēties emocijas īskodu un attēlu.", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "reopenChat": "Atkārtoti atvērt tērzēšanu", - "pleaseEnterRecoveryKey": "Lūgums ievadīt savu atkopes atslēgu:", "create": "Izveidot", "@create": { "type": "String", "placeholders": {} }, - "toggleFavorite": "Pārslēgt iecienīto", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "no": "Nē", "@no": { "type": "String", @@ -618,7 +531,6 @@ "type": "String", "placeholders": {} }, - "widgetNameError": "Lūgums norādīt attēlojamo nosaukumu.", "inoffensive": "Nav aizskarošs", "@inoffensive": { "type": "String", @@ -640,7 +552,6 @@ "type": "String", "placeholders": {} }, - "addWidget": "Pievienot logrīku", "all": "Viss", "@all": { "type": "String", @@ -702,7 +613,6 @@ } } }, - "hydrateTor": "TOR lietotāji: ievietot sesijas izguvi", "pushNotificationsNotAvailable": "Pašpiegādes paziņojumi nav pieejami", "passwordRecovery": "Paroles atkope", "@passwordRecovery": { @@ -761,7 +671,6 @@ "type": "String", "placeholders": {} }, - "signInWithPassword": "Pieteikties ar paroli", "lastActiveAgo": "Pēdējoreiz tiešsaistē: {localizedTimeShort}", "@lastActiveAgo": { "type": "String", @@ -834,11 +743,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Doties uz jauno istabu", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "commandHint_clearcache": "Iztīrīt kešatmiņu", "@commandHint_clearcache": { "type": "String", @@ -867,15 +771,6 @@ "placeholders": {} }, "whyIsThisMessageEncrypted": "Kādēļ šī ziņa ir nelasāma?", - "unreadChats": "{unreadCount, plural, zero{{unreadCount} nelasītu tērzēšanu} =1{{unreadCount} nelasīta tērzēšana} other{{unreadCount} nelasītas tērzēšanas}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "rejectedTheInvitation": "{username} noraidīja uzaicinājumu", "@rejectedTheInvitation": { "type": "String", @@ -901,22 +796,12 @@ "placeholders": {} }, "importFromZipFile": "Ievietot no .zip datnes", - "toggleUnread": "Atzīmēt kā lasītu/nelasītu", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "or": "Vai", "@or": { "type": "String", "placeholders": {} }, "dehydrateWarning": "Šī darbība nav atdarāma. Jānodrošina, ka rezerves kopijas datne tiek droši uzglabāta.", - "sendOriginal": "Nosūtīt sākotnējo", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "noOtherDevicesFound": "Netika atrastas citas ierīces", "whoIsAllowedToJoinThisGroup": "Kuram ir ļauts pievienoties šai kopai", "@whoIsAllowedToJoinThisGroup": { @@ -928,15 +813,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username} redzēja", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "storeSecurlyOnThisDevice": "Droši uzglabāt šajā ierīcē", "yourChatBackupHasBeenSetUp": "Tērzēšanu rezerves kopēšana iestatīta.", "chatBackup": "Tērzēšanu rezerves kopēšana", @@ -1011,20 +887,6 @@ "type": "String", "placeholders": {} }, - "containsDisplayName": "Satur attēlojamo vārdu", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "signInWith": "Pieteikties ar {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "username": "Lietotājvārds", "@username": { "type": "String", @@ -1051,11 +913,6 @@ "type": "String", "placeholders": {} }, - "people": "Cilvēki", - "@people": { - "type": "String", - "placeholders": {} - }, "changedTheHistoryVisibilityTo": "{username} nomainīja vēstures redzamību uz {rules}", "@changedTheHistoryVisibilityTo": { "type": "String", @@ -1093,7 +950,6 @@ } } }, - "callingPermissions": "Zvanīšanas atļaujas", "delete": "Izdzēst", "@delete": { "type": "String", @@ -1122,20 +978,6 @@ "placeholders": {} }, "unlockOldMessages": "Atslēgt vecās ziņas", - "identity": "Identitāte", - "@identity": { - "type": "String", - "placeholders": {} - }, - "numChats": "{number} tērzēšanas", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "changedTheJoinRulesTo": "{username} nomainīja pievienošanās nosacījumus uz {joinRules}", "@changedTheJoinRulesTo": { "type": "String", @@ -1249,11 +1091,6 @@ "@sendAsText": { "type": "String" }, - "inviteForMe": "Uzaicinājumu man", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "archiveRoomDescription": "Tērzēšana tiks pārvietota uz arhīvu. Citi lietotāji redzēs, ka pameti tērzēšanu.", "exportEmotePack": "Izgūt emociju paku kā .zip", "changedTheChatNameTo": "{username} nomainīja tērzēšanas nosaukumu uz '{chatname}'", @@ -1268,25 +1105,11 @@ } } }, - "sendSticker": "Nosūtīt uzlīmi", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "account": "Konts", "@account": { "type": "String", "placeholders": {} }, - "switchToAccount": "Pārslēgties uz kontu {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "commandInvalid": "Nederīga komanda", "@commandInvalid": { "type": "String" @@ -1372,7 +1195,6 @@ "type": "String", "placeholders": {} }, - "inviteContactToGroupQuestion": "Vai vēlies uzaicināt {contact} uz tērzēšanu \"{groupName}\"?", "emoteExists": "Emocija jau pastāv.", "@emoteExists": { "type": "String", @@ -1423,13 +1245,11 @@ "type": "String", "placeholders": {} }, - "appearOnTopDetails": "Ļauj lietotnei parādīties virspusē (nav nepieciešams, ja FluffyChat jau ir iestatīts kā zvanīšanas konts)", "roomHasBeenUpgraded": "Istaba tika atjaunināta", "@roomHasBeenUpgraded": { "type": "String", "placeholders": {} }, - "enterRoom": "Ieiet istabā", "enableEmotesGlobally": "Iespējot kā vispārēju emociju paku", "@enableEmotesGlobally": { "type": "String", @@ -1497,18 +1317,6 @@ } }, "confirmEventUnpin": "Vai tiešām neatgriezeniski atspraust šo notikumu?", - "badServerVersionsException": "Mājasserveris nodrošina specifikācijas versijas:\n{serverVersions}\nSavukārt, lietotne atbalsta tikai {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "youInvitedUser": "📩 Tu uzaicināji {user}", "@youInvitedUser": { "placeholders": { @@ -1543,11 +1351,6 @@ } } }, - "license": "Licence", - "@license": { - "type": "String", - "placeholders": {} - }, "addToSpace": "Pievienot vietai", "unbanFromChat": "Atcelt liegumu tērzēšanā", "@unbanFromChat": { @@ -1565,11 +1368,6 @@ "description": "State that {command} is not a valid /command." }, "redactMessageDescription": "Ziņa tiks labota visiem šīs sarunas dalībniekiem. To nevar atdarīt.", - "rejoin": "Pievienoties atkārtoti", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "recoveryKey": "Atkopes atslēga", "redactMessage": "Labot ziņu", "@redactMessage": { @@ -1597,7 +1395,6 @@ "type": "String", "placeholders": {} }, - "dehydrateTorLong": "TOR lietotājiem ir ieteicams izgūt sesiju pirms loga aizvēršanas.", "yourPublicKey": "Tava publiskā atslēga", "@yourPublicKey": { "type": "String", @@ -1671,11 +1468,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Dalībnieku izmaiņām", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "joinRoom": "Pievienoties istabai", "@joinRoom": { "type": "String", @@ -1693,9 +1485,7 @@ "placeholders": {} }, "serverRequiresEmail": "Šim serverim ir nepieciešams pārbaudīt Tavu e-pasta adresi reģistrācijai.", - "hideUnimportantStateEvents": "Paslēpt nebūtiskus stāvokļa notikumus", "screenSharingTitle": "ekrāna kopīgošana", - "widgetCustom": "Pielāgots", "sentCallInformations": "{senderName} nosūtīja informāciju par zvanu", "@sentCallInformations": { "type": "String", @@ -1705,7 +1495,6 @@ } } }, - "addToSpaceDescription": "Atlasīt vietu, kurai pievienot šo tērzēšanu.", "googlyEyesContent": "{senderName} sūta izbolītas acis", "@googlyEyesContent": { "type": "String", @@ -1738,7 +1527,6 @@ "type": "String", "placeholders": {} }, - "addChatDescription": "Pievienot tērzēšanas aprakstu…", "sentAnAudio": "🎤 {username} nosūtīja skaņu", "@sentAnAudio": { "type": "String", @@ -1781,7 +1569,6 @@ } } }, - "publish": "Publicēt", "openLinkInBrowser": "Atvērt saiti pārlūkā", "clearArchive": "Iztīrīt arhīvu", "appLock": "Lietotnes aizslēgšana", @@ -1837,8 +1624,6 @@ "placeholders": {} }, "inviteGroupChat": "📨 Uzaicinājums uz kopas tērzēšanu", - "appearOnTop": "Parādīt virspusē", - "invitePrivateChat": "📨 Uzaicinājums uz privātu tērzēšanu", "verifyTitle": "Apliecina citu kontu", "@verifyTitle": { "type": "String", @@ -1882,11 +1667,6 @@ "description": "Usage hint for the command /ban" }, "importEmojis": "Ievietot emocijzīmes", - "confirm": "Apstiprināt", - "@confirm": { - "type": "String", - "placeholders": {} - }, "wasDirectChatDisplayName": "Tukša tērzēšana (bija {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -1945,7 +1725,6 @@ }, "newGroup": "Jauna kopa", "bundleName": "Komplekta nosaukums", - "dehydrateTor": "TOR lietotāji: izgūt sesiju", "removeFromSpace": "Noņemt no vietas", "dateAndTimeOfDay": "{date}, {timeOfDay}", "@dateAndTimeOfDay": { @@ -2026,7 +1805,6 @@ } } }, - "profileNotFound": "Lietotāju serverī nevarēja atrast. Varbūt ir nebūšanas ar savienojumu vai lietotājs nepastāv.", "jump": "Pārlēkt", "groups": "Kopas", "@groups": { @@ -2058,15 +1836,6 @@ } }, "sorryThatsNotPossible": "Atvaino! Tas nav iespējams", - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "oopsSomethingWentWrong": "Ups! Kaut kas nogāja greizi…", "@oopsSomethingWentWrong": { "type": "String", @@ -2102,11 +1871,6 @@ } } }, - "containsUserName": "Satur lietotājvārdu", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "messages": "Ziņas", "@messages": { "type": "String", @@ -2143,11 +1907,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Iestatīt pielāgotas emocijas", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "startedACall": "{senderName} uzsāka zvanu", "@startedACall": { "type": "String", @@ -2167,11 +1926,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Paziņojumi iespējoti šim kontam", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "deleteMessage": "Izdzēst ziņu", "@deleteMessage": { "type": "String", @@ -2187,23 +1941,12 @@ "type": "String", "placeholders": {} }, - "setTheme": "Iestatīt izskatu:", "changeTheHomeserver": "Mainīt mājasserveri", "@changeTheHomeserver": { "type": "String", "placeholders": {} }, "youJoinedTheChat": "Tu pievienojies tērzēšanai", - "wallpaper": "Ekrāntapete:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "openVideoCamera": "Atvērt kameru video uzņemšanai", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "play": "Atskaņot {fileName}", "@play": { "type": "String", @@ -2244,7 +1987,6 @@ "type": "String", "placeholders": {} }, - "widgetName": "Nosaukums", "sentASticker": "😊 {username} nosūtīja uzlīmi", "@sentASticker": { "type": "String", @@ -2254,7 +1996,6 @@ } } }, - "errorAddingWidget": "Kļūda logrīka pievienošanā.", "commandHint_dm": "Uzsākt tiešu tērzēšanu\nLai atspējotu šifrēšanu, jāizmanto --no-encryption", "@commandHint_dm": { "type": "String", @@ -2350,18 +2091,12 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Lūgums izvēlēties", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "share": "Kopīgot", "@share": { "type": "String", "placeholders": {} }, "commandHint_googly": "Nosūtīt izbolītu acu pāri", - "pleaseTryAgainLaterOrChooseDifferentServer": "Lūgums vēlāk mēģināt vēlreiz vai izvēlēties citu serveri.", "createGroup": "Izveidot kopu", "privacy": "Privātums", "@privacy": { @@ -2378,18 +2113,7 @@ "type": "String", "placeholders": {} }, - "hydrateTorLong": "Vai sesija pēdējoreiz tika izgūta TOR? Ātri ievieto to un turpini tērzēšanu!", "time": "Laiks", - "enterYourHomeserver": "Jāievada mājasserveris", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "botMessages": "Robotprogrammatūras ziņām", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Par saturu tika ziņos servera pārvaldītājiem", "@contentHasBeenReported": { "type": "String", @@ -2431,11 +2155,6 @@ "type": "String", "placeholders": {} }, - "setInvitationLink": "Iestatīt uzaicinājumu saiti", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "pinMessage": "Piespraust istabai", "screenSharingDetail": "Tu kopīgo savu ekrānu FluffyChat", "muteChat": "Apklusināt tērzēšanu", @@ -2455,7 +2174,6 @@ "type": "String", "placeholders": {} }, - "indexedDbErrorTitle": "Privātā režīma nebūšanas", "endedTheCall": "{senderName} beidza zvanu", "@endedTheCall": { "type": "String", @@ -2477,33 +2195,20 @@ "hideRedactedMessages": "Paslēpt labošanas ziņas", "hideRedactedMessagesBody": "Ja kāds labo ziņu, tā vairs nebūs redzama tērzēšanā.", "blockListDescription": "Ir iespējams atslēgt traucējošus lietotājus. Nebūs iespējams saņem jebkādas ziņas vai uzaicinājumus uz istabām no lietotājiem, kas ir personīgajā izslēgšanas sarakstā.", - "hideMemberChangesInPublicChatsBody": "Nerādīt tērzēšanas plūsmā, ja kāds pievienojas publiskai tērzēšanai vai pamet to, lai uzlabotu lasāmību.", "overview": "Pārskats", - "notifyMeFor": "Paziņot man par", "wrongRecoveryKey": "Atvaino... Nešķiet, ka šī būtu pareiza atkopes atslēga.", "block": "Izslēgt", - "hideMemberChangesInPublicChats": "Paslēpt dalībnieku izmaiņas publiskajās tērzēšanās", "passwordRecoverySettings": "Paroles atkopes iestatījumi", "blockedUsers": "Atslēgtie lietotāji", "transparent": "Caurspīdīgs", "searchForUsers": "Meklēt @lietotājus...", "pleaseEnterYourCurrentPassword": "Lūgums ievadīt savu pašreizējo paroli", "publicSpaces": "Publiskas vietas", - "decline": "Atteikt", "joinSpace": "Pievienoties vietai", "createGroupAndInviteUsers": "Izveidot kopu un uzaicināt lietotājus", "groupCanBeFoundViaSearch": "Kopu var atrast meklēšanā", "commandHint_sendraw": "Nosūtīt neapstrādātu JSON", "newPassword": "Jauna parole", - "forwardMessageTo": "Pārsūtīt ziņu uz {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Nosūtīt lasīšanas atskaites", "verifyOtherUser": "🔐 Apliecināt otru lietotāju", "verifyOtherDevice": "🔐 Apliecināt otru ierīci", @@ -2561,28 +2266,6 @@ "commandHint_ignore": "Neņemt vērā norādīto Matrix Id", "searchChatsRooms": "Meklēt #tērzēšanas, @lietotājus...", "groupName": "Kopas nosaukums", - "presenceStyle": "Klātesamība:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "youInvitedToBy": "📩 Tu tiki uzaicināts ar saiti:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "userWouldLikeToChangeTheChat": "{user} vēlas pievienoties tērzēšanai.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Vēl nav izveidota neviena publiska saite", "knock": "Pieklauvēt", "stickers": "Uzlīmes", "usersMustKnock": "Lietotājiem jāpieklauvē", @@ -2599,12 +2282,10 @@ } }, "nothingFound": "Nekas netika atrasts...", - "startConversation": "Uzsākt sarunu", "databaseMigrationTitle": "Datubāze ir optimizēta", "leaveEmptyToClearStatus": "Atstāt tukšu, lai notīrītu savu stāvokli.", "pleaseChooseAStrongPassword": "Lūgums izvēlēties spēcīgu paroli", "passwordIsWrong": "Ievadītā parole ir nepareiza", - "publicLink": "Publiska saite", "thisDevice": "Šī ierīce:", "acceptedKeyVerification": "{sender} apstiprināja atslēgas apliecināšanu", "@acceptedKeyVerification": { @@ -2615,7 +2296,6 @@ } } }, - "userRole": "Lietotāja loma", "noDatabaseEncryption": "Šajā platformā datubāzes šifrēšana netiek nodrošināta", "presencesToggle": "Rādīt citu lietotāju stāvokļa ziņas", "@presencesToggle": { @@ -2626,15 +2306,6 @@ "passwordsDoNotMatch": "Paroles nesakrīt", "publicChatAddresses": "Publiskas tērzēšanas adreses", "createNewAddress": "Izveidot jaunu adresi", - "minimumPowerLevel": "{level} ir zemākais spēka līmenis.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "discover": "Atklāt", "unreadChatsInApp": "{appname}: {unread} nelasītas tērzēšanas", "@unreadChatsInApp": { @@ -2648,21 +2319,8 @@ } } }, - "subspace": "Apakšvieta", "addChatOrSubSpace": "Pievienot tērzēšanu vai apakšvietu", "formattedMessagesDescription": "Attēlot bagātinātu ziņu saturu, piemēram, ar Markdown iezīmētu treknrakstu.", - "databaseBuildErrorBody": "Nebija iespējams izveidot SQlite datubāzi. Lietotne pagaidām mēģina izmantot iepriekšējo datubāzi. Lūgums ziņot par šo kļūdu izstrādātājiem {url}. Kļūdas ziņojums ir: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Sesija ir zaudēta. Lūgums ziņot par šo kļūdu izstrādātājiem {url}. Kļūdas ziņojums ir: {error}", "@sessionLostBody": { "type": "String", @@ -2776,9 +2434,6 @@ "chatPermissionsDescription": "Noteikt, kurš spēka līmenis ir nepieciešams noteiktām darbībām šajā tērzēšanā. Spēka līmeņi 0, 50 un 100 parasti atbilst lietotājiem, moderatoriem un pārvaldītājiem, bet ir iespējams jebkāds iedalījums.", "doesNotSeemToBeAValidHomeserver": "Neizskatās pēc saderīga mājasservera. Nepareizs URL?", "loginWithMatrixId": "Pieteikties ar Matrix-Id", - "discoverHomeservers": "Atklāt mājasserverus", - "whatIsAHomeserver": "Kas ir mājasserveris?", - "homeserverDescription": "Visi lietotāja dati tiek glabāti mājasserverī, gluži kā ar e-pasta nodrošinātāju. Ir iespējams izvēlēties, kuru mājasserveri izmantot, saglabājot iespēju sazināties ar ikvienu. Vairāk var uzzināt https://matrix.org.", "updateInstalled": "🎉 Atjauninājums {version} uzstādīts.", "@updateInstalled": { "type": "String", @@ -2789,20 +2444,7 @@ } }, "changelog": "Izmaiņu žurnāls", - "countChatsAndCountParticipants": "{chats} tērzēšanas un {participants} dalībnieki", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Vairs netika atrasta neviena tērzēšana...", - "joinedChats": "Tērzēšanas, kurās piedalos", "unread": "Nelasītas", "space": "Vieta", "spaces": "Vietas", @@ -2876,7 +2518,6 @@ "compress": "Saspiest", "unableToJoinChat": "Nevarēja pievienoties tērzēšanai. Varbūt otra puse jau ir aizvērusi sarunu.", "appWantsToUseForLoginDescription": "Ar šo tiek ļauts lietotnei un tīmekļvietnei kopīgot informāciju par Tevi.", - "appIntroduction": "FluffyChat ļauj tērzēt ar draugiem, kuri izmanto dažādas ziņojumapmaiņas lietotnes. Vairāk var uzzināt https://matrix.org vai vienkārši piesitot *Turpināt*.", "synchronizingPleaseWaitCounter": " Sinhronizē... ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -2968,10 +2609,7 @@ "notSupportedOnThisDevice": "Šajā ierīcē nav atbalstīts", "enterNewChat": "Ieiet jaunajā tērzēšanā", "commandHint_roomupgrade": "Uzlabot šo istabu uz norādīto istabas versiju", - "setCustomPermissionLevel": "Iestatīt pielāgotu atļauju līmeni", - "setPermissionsLevelDescription": "Lūgums zemāk atlasīt iepriekšizveidotu lomu vai ievadīt pielāgotu atļauju līmeni starp 0 un 100.", "ignoreUser": "Neņemt vērā lietotāju", - "normalUser": "Parasts lietotājs", "youHaveKnocked": "Tu pieklauvēji", "pleaseWaitUntilInvited": "Lūgums tagad uzgaidīt, līdz kāds no istabas uzaicinās Tevi.", "approve": "Apstiprināt", @@ -3007,10 +2645,6 @@ "longPressToRecordVoiceMessage": "Ilga piespiešana, lai ierakstītu balss ziņu.", "pause": "Apturēt", "resume": "Atsākt", - "newSubSpace": "Jauna apakšvieta", - "moveToDifferentSpace": "Pārvietot uz citu vietu", - "moveUp": "Pārvietot augšup", - "moveDown": "Pārvietot lejup", "removeFromSpaceDescription": "Tērzēšana tiks noņemta no vietas, bet tā joprojām būs redzama tērzēšanu sarakstā.", "countChats": "{chats} tērzēšanas", "@countChats": { @@ -3039,7 +2673,6 @@ } } }, - "donate": "Ziedot", "startedAPoll": "{username} uzsāka aptauju.", "@startedAPoll": { "type": "String", @@ -3053,7 +2686,6 @@ "startPoll": "Sākt aptauju", "endPoll": "Noslēgt aptauju", "answersVisible": "Atbildes ir redzamas", - "answersHidden": "Atbildes ir paslēptas", "pollQuestion": "Aptaujas jautājums", "answerOption": "Atbildes iespēja", "addAnswerOption": "Pievienot atbildes iespēju", @@ -3121,5 +2753,10 @@ "logs": "Žurnāli", "advancedConfigs": "Izvērsta konfigurācijas", "advancedConfigurations": "Izvērstas konfigurācijas", - "signInWithLabel": "Pieteikties ar:" -} + "theProcessWasCanceled": "Darbība tika atcelta.", + "signIn": "Pieteikties", + "createNewAccount": "Izveidot jaunu kontu", + "signUpGreeting": "FluffyChat ir decentralizēta. Jāatlasa serveris, kurā ir vēlēšanās izveidot savu kontu, un aiziet!", + "signInGreeting": "Jau ir Matrix konts? Laipni lūdzam atpakaļ! Jāatlasa savs mājasserveris un jāpiesakās.", + "appIntro": "Ar FluffyChat vari tērzēt ar saviem draugiem. Tā ir droša un decentralizēta [matrix] ziņapmaiņas lietotne. Vairāk var uzzināt https://matrix.org, ja ir vēlēšanās, vai vienkārši jāpiesakās." +} \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index 9d320c0b..92e65d4e 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -72,7 +72,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Skal gjester tillates å ta del", + "areGuestsAllowedToJoin": "Kan gjester bli med?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -128,11 +128,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bot-meldinger", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Avbryt", "@cancel": { "type": "String", @@ -357,31 +352,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Bekreft", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Koble til", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt invitert til gruppen", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Inneholder visningsnavn", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Inneholder brukernavn", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Innholdet har blitt rapportert til tjeneradministratorene", "@contentHasBeenReported": { "type": "String", @@ -456,33 +431,6 @@ } } }, - "dateWithoutYear": "{day} {month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day} {month} {year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Dette vil skru av din brukerkonto for godt, og kan ikke angres! Er du sikker?", "@deactivateAccountWarning": { "type": "String", @@ -583,11 +531,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Du må velge en smilefjes-kode og et bilde!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Tom sludring", "@emptyChat": { "type": "String", @@ -637,11 +580,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Skriv inn din hjemmetjener", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "Alt er klart!", "@everythingReady": { "type": "String", @@ -753,11 +691,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identitet", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorer", "@ignore": { "type": "String", @@ -819,11 +752,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Invitasjon for meg", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} har invitert deg til FluffyChat. \n1. Installer FluffyChat: https://fluffychat.im \n2. Registrer deg eller logg inn \n3. Åpne invitasjonslenken: \n {link}", "@inviteText": { "type": "String", @@ -903,11 +831,6 @@ "type": "String", "placeholders": {} }, - "license": "Lisens", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Lys", "@lightTheme": { "type": "String", @@ -951,11 +874,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Medlemsendringer", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Nevn", "@mention": { "type": "String", @@ -1041,11 +959,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Merknader påslått for denne kontoen", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} brukere skriver …", "@numUsersTyping": { "type": "String", @@ -1065,7 +978,7 @@ "type": "String", "placeholders": {} }, - "ok": "OK", + "ok": "Ok", "@ok": { "type": "String", "placeholders": {} @@ -1212,11 +1125,6 @@ } } }, - "rejoin": "Ta del igjen", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Fjern", "@remove": { "type": "String", @@ -1236,11 +1144,6 @@ } } }, - "removeDevice": "Fjern enhet", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Opphev bannlysning", "@unbanFromChat": { "type": "String", @@ -1281,15 +1184,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Sett av {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Send", "@send": { "type": "String", @@ -1320,11 +1214,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Send original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Send video", "@sendVideo": { "type": "String", @@ -1384,21 +1273,6 @@ } } }, - "setCustomEmotes": "Sett tilpassede smilefjes", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Sett invitasjonslenke", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Sett tilgangsnivå", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Angi status", "@setStatus": { "type": "String", @@ -1544,15 +1418,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, other{{unreadCount} uleste sludringer}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} og {count} andre skriver…", "@userAndOthersAreTyping": { "type": "String", @@ -1662,11 +1527,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Bakgrunnsbilde:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Advarsel!", "@warning": { "type": "String", @@ -1727,21 +1587,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Marker som lest/ulest", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Veksle forstumming", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "Veksle favorittmerking", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "noConnectionToTheServer": "Ingen tilkobling til tjeneren", "@noConnectionToTheServer": { "type": "String", @@ -1777,18 +1622,6 @@ } }, "sendOnEnter": "Trykk på enter for å sende", - "badServerVersionsException": "Hjemmeserveren støtter følgene Spec-versjoner:\n{serverVersions}\nMen applikasjonen støtter kun {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "blocked": "Blokkert", "@blocked": { "type": "String", @@ -1832,8 +1665,6 @@ }, "appLockDescription": "Lås appen med en PIN-kode når den ikke er i bruk", "ignoreUser": "Ignorer bruker", - "setCustomPermissionLevel": "Angi egendefinert tillatelsesnivå", - "normalUser": "Vanlig bruker", "replace": "Erstatt", "noMoreChatsFound": "Ingen flere chatter funnet ...", "confirmMatrixId": "Bekreft Matrix-IDen din for å slette kontoen din.", @@ -1852,18 +1683,10 @@ "openLinkInBrowser": "Åpne lenke i nettleser", "start": "Start", "passwordsDoNotMatch": "Passordene stemmer ikke overens", - "decline": "Avslå", - "emailOrUsername": "E-post eller brukernavn", "encryptThisChat": "Krypter denne chatten", - "nextAccount": "Neste konto", "doNotShowAgain": "Ikke vis igjen", "notificationRuleContainsUserName": "Inneholder brukernavn", "notificationRuleMaster": "Demp alle varslinger", - "presenceStyle": "Tilstedeværelse:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "verified": "Verifisert", "@verified": { "type": "String", @@ -1875,11 +1698,6 @@ "placeholders": {} }, "recoveryKey": "Gjenopprettingsnøkkel", - "sendSticker": "Send sticker", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "shareLocation": "Del lokasjon", "@shareLocation": { "type": "String", @@ -1897,7 +1715,6 @@ }, "dismiss": "Avvis", "openChat": "Åpne chat", - "addWidget": "Legg til widget", "reopenChat": "Gjenåpne chat", "changeTheDescriptionOfTheGroup": "Endre beskrivelsen til chatten", "inviteOtherUsers": "Inviter andre brukere til denne chatten", @@ -1906,14 +1723,7 @@ "notificationRuleJitsi": "Jitsi", "takeAPhoto": "Ta et bilde", "setChatDescription": "Sett chat beskrivelse", - "singlesignon": "Single Sign on (SSO)", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "openGallery": "Åpne galleri", - "widgetCustom": "Egendefinert", - "widgetVideo": "Video", "pushNotificationsNotAvailable": "Push-varsler er ikke tilgjengelige", "gallery": "Galleri", "moderatorLevel": "{level} - Moderator", @@ -1956,7 +1766,6 @@ "notificationRuleEncrypted": "Kkryptert", "more": "Mer", "passwordIsWrong": "Det inntastede passordet ditt er feil", - "startConversation": "Start samtale", "manageAccount": "Administrer konto", "nothingFound": "Ingenting funnet...", "incomingMessages": "Innkommende meldinger", @@ -1964,10 +1773,7 @@ "contactServerAdmin": "Kontakt serveradministrator", "setWallpaper": "Sett bakgrunnsbilde", "unsupportedAndroidVersion": "Usupportert Android-versjon", - "widgetName": "Navn", "youJoinedTheChat": "Du har blitt med i chatten", - "widgetJitsi": "Jitsi Meet", - "widgetNameError": "Vennligst oppgi et visningsnavn.", "youRejectedTheInvitation": "Du har avvist invitasjonen", "formattedMessages": "Formaterte meldinger", "allDevices": "Alle enheter", @@ -1975,7 +1781,6 @@ "sorryThatsNotPossible": "Beklager... det er ikke mulig", "markAsUnread": "Marker som ulest", "newGroup": "Ny gruppe", - "userRole": "Brukerrolle", "addLink": "Legg til lenke", "synchronizingPleaseWaitCounter": " Synkroniserer… ({percentage}%)", "@synchronizingPleaseWaitCounter": { @@ -2037,22 +1842,9 @@ } } }, - "addChatDescription": "Legg til chat beskrivelse...", "commandHint_roomupgrade": "Oppgrader dette rommet til den gitte romversjonen", - "hideMemberChangesInPublicChatsBody": "Ikke vis i chattens tidslinje hvis noen blir med i eller forlater en offentlig chat for økt lesbarhet.", "overview": "Oversikt", - "notifyMeFor": "Varsle meg om", "passwordRecoverySettings": "Innstillinger for gjenoppretting av passord", - "people": "Folk", - "@people": { - "type": "String", - "placeholders": {} - }, - "pleaseChoose": "Vennligst velg", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Vennligst velg en passordkode", "@pleaseChooseAPasscode": { "type": "String", @@ -2063,20 +1855,13 @@ "type": "String", "placeholders": {} }, - "pleaseEnterRecoveryKey": "Vennligst skriv inn gjenopprettingsnøkkelen din:", - "pleaseEnterYourPin": "Vennligst skriv inn PIN-koden din", + "pleaseEnterYourPin": "Oppgi din PIN-kode", "@pleaseEnterYourPin": { "type": "String", "placeholders": {} }, "globalChatId": "Global chat-ID", - "allRooms": "Alle gruppechatter", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "chatPermissions": "Chat tillatelser", - "setPermissionsLevelDescription": "Vennligst velg en forhåndsdefinert rolle nedenfor eller skriv inn et tilpasset tillatelsesnivå mellom 0 og 100.", "commandHint_invite": "Inviter den gitte brukeren til dette rommet", "@commandHint_invite": { "type": "String", @@ -2101,7 +1886,6 @@ }, "sendCanceled": "Sending avbrutt", "loginWithMatrixId": "Logg på med Matrix ID", - "discoverHomeservers": "Oppdag hjemmeservere", "shareInviteLink": "Del invitasjonslenke", "scanQrCode": "Skann QR-kode", "messagesStyle": "Meldinger:", @@ -2121,8 +1905,6 @@ "type": "String", "placeholders": {} }, - "previousAccount": "Forrige konto", - "widgetUrlError": "Dette er ikke en gyldig URL.", "custom": "Egendefinert", "user": "Bruker", "users": "Brukere", @@ -2151,16 +1933,6 @@ "time": "Tid", "messageType": "Meldingstype", "sender": "Avsender", - "publish": "Publiser", - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "reportUser": "Rapporter bruker", "youHaveWithdrawnTheInvitationFor": "Du har trukket tilbake invitasjonen for {user}", "@youHaveWithdrawnTheInvitationFor": { @@ -2180,24 +1952,15 @@ } }, "chatDescriptionHasBeenChanged": "Chatbeskrivelsen er endret", - "goToTheNewRoom": "Gå til det nye rommet", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "screenSharingTitle": "skjermdeling", "screenSharingDetail": "Du deler skjermen din i FuffyChat", - "callingPermissions": "Anropstillatelser", - "callingAccountDetails": "Lar FluffyChat bruke den innebygde Android-oppringingsappen.", - "appearOnTop": "Vis øverst", - "otherCallingPermissions": "Mikrofon, kamera og andre FluffyChat-tillatelser", "whyIsThisMessageEncrypted": "Hvorfor er denne meldingen uleselig?", "yourGlobalUserIdIs": "Din globale bruker-ID er: ", "searchChatsRooms": "Søk etter #chatter, @brukere...", "groupName": "Gruppenavn", "createGroupAndInviteUsers": "Opprett en gruppe og inviter brukere", "invite": "Inviter", - "wrongPinEntered": "Feil PIN-kode tastet inn! Prøv igjen om {seconds} sekunder...", + "wrongPinEntered": "Feil PIN-kode oppgitt! Prøv igjen om {seconds} sekunder...", "@wrongPinEntered": { "type": "String", "placeholders": { @@ -2233,11 +1996,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Åpne kameraet for en video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "obtainingLocation": "Henter sted …", "@obtainingLocation": { "type": "String", @@ -2246,14 +2004,6 @@ "noDatabaseEncryption": "Databasekryptering støttes ikke på denne plattformen", "changeGeneralChatSettings": "Endre generelle chatinnstillinger", "changeTheChatPermissions": "Endre chattillatelsene", - "youInvitedToBy": "📩 Du har blitt invitert via lenke til:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "youInvitedBy": "📩 Du har blitt invitert av {user}", "@youInvitedBy": { "placeholders": { @@ -2355,25 +2105,12 @@ "pleaseEnterANumber": "Vennligst skriv inn et tall større enn 0", "archiveRoomDescription": "Chatten vil bli flyttet til arkivet. Andre brukere vil kunne se at du har forlatt chatten.", "removeDevicesDescription": "Du vil bli logget ut av denne enheten og vil ikke lenger kunne motta meldinger.", - "profileNotFound": "Brukeren ble ikke funnet på serveren. Kanskje det er et tilkoblingsproblem, eller brukeren finnes ikke.", - "setTheme": "Angi tema:", "setColorTheme": "Angi fargetema:", "inviteGroupChat": "📨 Invitasjon til gruppechat", - "invitePrivateChat": "📨 Invitasjon til privat chat", "pleaseChooseAStrongPassword": "Vennligst velg et sterkt passord", - "publicLink": "Offentlig lenke", "publicChatAddresses": "Offentlige chatadresser", "createNewAddress": "Opprett ny adresse", "initAppError": "Det oppsto en feil under oppstart av appen", - "minimumPowerLevel": "{level} er det laveste strømnivået.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "sendReadReceipts": "Send lesebekreftelser", "searchMore": "Søk mer...", "shareKeysWithDescription": "Hvilke enheter bør man stole på, slik at de kan lese meldingene dine i krypterte chatter?", @@ -2436,28 +2173,7 @@ } } }, - "forwardMessageTo": "Videresende melding til {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Skjul uviktige tilstandshendelser", "hidePresences": "Skjul statuslisten?", - "signInWithPassword": "Logg inn med passord", - "pleaseTryAgainLaterOrChooseDifferentServer": "Prøv igjen senere eller velg en annen server.", - "signInWith": "Logg inn med {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "noMessagesYet": "Ingen meldinger enda", "notificationRuleMasterDescription": "Overstyrer alle andre regler og deaktiverer alle varsler.", "notificationRuleSuppressNotices": "Undertrykk automatiserte meldinger", @@ -2575,7 +2291,6 @@ "hideRedactedMessagesBody": "Hvis noen redigerer en melding, vil ikke denne meldingen lenger være synlig i chatten.", "blockListDescription": "Du kan blokkere brukere som forstyrrer deg. Du vil ikke kunne motta meldinger eller rominvitasjoner fra brukerne på din personlige blokkeringsliste.", "blockUsername": "Ignorer brukernavn", - "inviteContactToGroupQuestion": "Vil du invitere {contact} til chatten «{groupName}»?", "noChatDescriptionYet": "Ingen chatbeskrivelse er opprettet ennå.", "redactMessageDescription": "Meldingen vil bli redigert for alle deltakerne i denne samtalen. Dette kan ikke angres.", "optionalRedactReason": "(Valgfritt) Årsak til redigering av denne meldingen...", @@ -2591,10 +2306,6 @@ }, "dehydrate": "Eksporter økten og slett enheten", "dehydrateWarning": "Denne handlingen kan ikke angres. Sørg for at du lagrer sikkerhetskopifilen på en trygg måte.", - "dehydrateTor": "TOR-brukere: Eksporter økt", - "dehydrateTorLong": "For TOR-brukere anbefales det å eksportere økten før vinduet lukkes.", - "hydrateTor": "TOR-brukere: Importer eksportert økt", - "hydrateTorLong": "Eksporterte du økten din sist gang på TOR? Importer den raskt og fortsett å chatte.", "noEncryptionForPublicRooms": "Du kan bare aktivere kryptering på rom som ikke er offentlig tilgjengelig.", "@noEncryptionForPublicRooms": { "type": "String", @@ -2617,11 +2328,8 @@ "otherNotificationSettings": "Andre varslingsinnstillinger", "contentNotificationSettings": "Innstillinger for innholdsvarslinger", "generalNotificationSettings": "Generelle varslingsinnstillinger", - "appIntroduction": "Med FluffyChat kan du chatte med vennene dine på tvers av forskjellige meldingstjenester. Finn ut mer på https://matrix.org eller trykk bare på *Fortsett*.", "notificationRuleContainsUserNameDescription": "Varsler bruker når en melding inneholder ens brukernavn.", - "hideMemberChangesInPublicChats": "Skjul medlemsendringer i offentlige chatter", "removeFromSpace": "Fjern fra området", - "addToSpaceDescription": "Velg områder hvor denne chatten legges til.", "pleaseEnterRecoveryKeyDescription": "For å låse opp gamle meldinger, vennligst skriv inn gjenopprettingsnøkkelen som ble generert i en tidligere økt. Gjenopprettingsnøkkelen er IKKE passordet ditt.", "reactedWith": "{sender} reagerte med {reaction}", "@reactedWith": { @@ -2645,7 +2353,6 @@ "notificationRuleTombstoneDescription": "Varsler brukeren om meldinger om deaktivering av rom.", "notificationRuleReactionDescription": "Demper varsler for reaksjoner.", "notificationRuleSuppressEdits": "Demp redigeringer", - "chatHasBeenAddedToThisSpace": "Chatten er lagt til i dette området", "clearArchive": "Tøm arkivet", "commandHint_markasgroup": "Merk som gruppe", "commandHint_ban": "Utesteng den gitte brukeren fra dette rommet", @@ -2658,7 +2365,6 @@ "type": "String", "description": "Usage hint for the command /clearcache" }, - "homeserverDescription": "Alle dataene dine lagres på hjemmeserveren, akkurat som hos en e-postleverandør. Du kan velge hvilken hjemmeserver du vil bruke, samtidig som du fortsatt kan kommunisere med alle. Lær mer på https://matrix.org.", "doesNotSeemToBeAValidHomeserver": "Ser ikke ut til å være en kompatibel hjemmeserver. Feil URL?", "prepareSendingAttachment": "Forbered sending av vedlegg...", "generatingVideoThumbnail": "Genererer videominiatyrbilde ...", @@ -2669,7 +2375,6 @@ "notificationRuleContainsDisplayNameDescription": "Varsler brukeren når en melding inneholder ens visningsnavnet.", "notificationRuleIsUserMention": "Brukeromtale", "notificationRuleIsRoomMention": "Romomtale", - "whatIsAHomeserver": "Hva er en hjemmeserver?", "commandHint_me": "Beskriv deg selv", "@commandHint_me": { "type": "String", @@ -2751,26 +2456,7 @@ "type": "String", "placeholders": {} }, - "switchToAccount": "Bytt til konto {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "widgetEtherpad": "Tekstnotat", "noOneCanJoin": "Ingen kan bli med", - "userWouldLikeToChangeTheChat": "{user} vil gjerne bli med i chatten.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Ingen offentlig lenke er opprettet ennå", "commandHint_html": "Send HTML-formatert tekst", "@commandHint_html": { "type": "String", @@ -2835,15 +2521,6 @@ }, "newSpace": "Nytt område", "allSpaces": "Alle områder", - "numChats": "{number} chats", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "wasDirectChatDisplayName": "Tom chat (var {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2853,7 +2530,6 @@ } } }, - "moveDown": "Flytt ned", "removeFromSpaceDescription": "Chatten blir fjernet fra området, men vises fortsatt i chatlisten din.", "countChats": "{chats} chats", "@countChats": { @@ -2864,13 +2540,11 @@ } } }, - "donate": "Doner", "banUserDescription": "Brukeren vil bli utestengt fra chatten og vil ikke kunne delta i chatten igjen før utestengelsen er opphevet.", "unbanUserDescription": "Brukeren vil kunne gå inn i chatten igjen hvis vedkommende prøver.", "kickUserDescription": "Brukeren blir kastet ut av chatten, men ikke utestengt. I offentlige chatter kan brukeren bli med på nytt når som helst.", "sendTypingNotifications": "Send varsler ved skriving", "swipeRightToLeftToReply": "Sveip fra høyre mot venstre for å svare", - "startFirstChat": "Start din første chat", "unlockOldMessages": "Lås opp gamle meldinger", "storeInAndroidKeystore": "Lagre i Android KeyStore", "storeInAppleKeyChain": "Lagre i Apple nøkkelring", @@ -2892,12 +2566,8 @@ "notificationRuleJitsiDescription": "Varsler brukeren om hendelser i Jitsi-widgeten.", "customReaction": "Egendefinert reaksjon", "pause": "Pause", - "moveToDifferentSpace": "Flytt til et annet område", - "moveUp": "Flytt opp", "storeInSecureStorageDescription": "Oppbevar gjenopprettingsnøkkelen på en sikker lagringsplass på denne enheten.", "foregroundServiceRunning": "Denne varslingen vises når forgrunnstjenesten kjører.", - "callingAccount": "Ringekonto", - "appearOnTopDetails": "Lar appen vises øverst (ikke nødvendig hvis du allerede har Fluffychat konfigurert som en ringekonto)", "longPressToRecordVoiceMessage": "Langt trykk for å spille inn talemelding.", "startedAPoll": "{username} startet en avstemning.", "@startedAPoll": { @@ -2912,7 +2582,6 @@ "startPoll": "Start avstemning", "endPoll": "Avslutt avstemning", "answersVisible": "Svar synlige", - "answersHidden": "Svar skjult", "addAnswerOption": "Legg til svaralternativ", "answerOption": "Svaralternativ", "allowMultipleAnswers": "Tillat flere svar", @@ -2953,30 +2622,11 @@ } } }, - "countChatsAndCountParticipants": "{chats} chatter og {participants} deltakere", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noChatsFoundHere": "Ingen chatter her. Bruk knappen under for å starte en ny samtale. ⤵️", - "joinedChats": "Mine chatter", "changedTheChatDescription": "{username} endret beskrivelsen av chatten", "changedTheChatName": "{username} endret navnet på chatten", "commandHint_markasdm": "Marker som rom for direktemeldinger for den angitte Matrix-IDen", - "indexedDbErrorTitle": "Problemer med privat modus", "recoveryKeyLost": "Mistet gjenopprettingsnøkkel?", - "separateChatTypes": "Skille direktemeldinger og grupper", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Angi som hovedalias", "@setAsCanonicalAlias": { "type": "String", @@ -2996,9 +2646,6 @@ "stickerPackNameAlreadyExists": "Klistremerkepakken finnes allerede", "newStickerPack": "Ny klistremerkepakke", "stickerPackName": "Navn på klistremerkepakke", - "signInWithLabel": "Logg inn med:", - "enterSpace": "Bli med i området", - "enterRoom": "Bli med i rommet", "addToBundle": "Legg til i pakke", "removeFromBundle": "Fjern fra denne pakken", "bundleName": "Navn på pakke", @@ -3014,22 +2661,9 @@ "type": "String", "placeholders": {} }, - "errorAddingWidget": "Kunne ikke legge til widget.", "makeAdminDescription": "Når du gjør denne brukeren til administrator, kan du kanskje ikke omgjøre det senere. Brukeren vil da få de samme rettighetene som deg.", "joinSpace": "Bli med i området", "publicSpaces": "Offentlige områder", - "databaseBuildErrorBody": "Kunne ikke bygge SQLite-databasen. Appen prøver å bruke den gamle databasen enn så lenge. Vennligst rapporter denne feilen til utviklerne på {url}. Feilmeldingen er: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "verifyOtherUserDescription": "Hvis du verifiserer en annen bruker, kan du være trygg på at du vet hvem du faktisk skriver med. 💪\n\nNår du starter en verifisering, vil både du og den andre brukeren se et popup-vindu i appen. Der vil dere se en serie emojier eller tall som dere må sammenligne med hverandre.\n\nDen beste måten å gjøre dette på er å møtes ansikt til ansikt eller starte en videosamtale. 👭", "verifyOtherDeviceDescription": "Når du verifiserer en annen enhet, kan disse enhetene utveksle nøkler, noe som øker den generelle sikkerheten din. 💪 Når du starter en verifisering, vil det dukke opp et popup-vindu i appen på begge enhetene. Der vil du se en serie emojier eller tall som du må sammenligne med hverandre. Det er best å ha begge enhetene forhånden før du starter verifiseringen. 🤳", "clientWellKnownInformation": "Velkjent informasjon om klienten:", @@ -3065,5 +2699,121 @@ "attribution": "Kreditering", "skipChatBackupWarning": "Er du sikker? Uten sikkerhetskopi av chattene kan du miste meldingene dine hvis du bytter enhet.", "noMoreResultsFound": "Ingen flere treff", - "federationBaseUrl": "Federation Base URL" + "federationBaseUrl": "Federation Base URL", + "notificationRuleServerAclDescription": "Skjuler varslinger for Server ACL-hendelser.", + "notificationRuleServerAcl": "Skjul Server ACL-hendelser", + "notificationRuleMemberEventDescription": "Skjuler varslinger for medlemsskapshendelser.", + "youHaveKnocked": "Du har banket på", + "moreEvents": "Flere hendelser", + "knockRestricted": "Banking deaktivert", + "contactServerSecurity": "Kontakt sikkerhetsansvarlig for serveren", + "notificationRuleMemberEvent": "Medlemshendelse", + "spaceMemberOfCanKnock": "Et medlem av området {spaces} kan banke på", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "countVotes": "{count, plural, =1{En stemme} other{{count} stemmer}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "countReplies": "{count, plural, =1{Et svar} other{{count} svar}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "chatSearchedUntil": "Søkte i chatten frem til {time}", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "sendingAttachmentCountOfCount": "Sender vedlegg {index} av {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "spaceMemberOf": "Områdemedlem av {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "confirmEventUnpin": "Er du sikker på at du vil løsne hendelsen permanent?", + "saveKeyManuallyDescription": "Lagre denne nøkkelen manuelt ved å åpne systemets delingsmeny eller kopiere til utklippstavlen.", + "newSpaceDescription": "Områder lar deg samle chattene dine og bygge private eller offentlige fellesskap.", + "chatPermissionsDescription": "Definer hvilket tilgangsnivå som kreves for bestemte handlinger i denne chatten. Nivåene 0, 50 og 100 representerer vanligvis brukere, moderatorer og administratorer, men alle mellomtrinn er mulige.", + "knocking": "Banker på", + "alwaysUse24HourFormat": "false", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." + }, + "noKeyForThisMessage": "Dette kan skje hvis meldingen ble sendt før du logget inn på kontoen din på denne enheten.\n\nDet er også mulig at senderen har blokkert enheten din, eller at noe gikk galt med internettforbindelsen.\n\nEr du i stand til å lese meldingen i en annen sesjon? Da kan du overføre meldingen fra den! Gå til Innstillinger > Enheter og sørg for at enhetene dine har verifisert hverandre. Neste gang du åpner rommet og begge sesjonene er i forgrunnen, vil nøklene bli overført automatisk.\n\nVil du unngå å miste nøklene når du logger ut eller bytter enhet? Sørg for at du har aktivert sikkerhetskopiering av chat i innstillingene.", + "report": "rapportere", + "addChatOrSubSpace": "Legg til chat eller underområde", + "signIn": "Logg på", + "createNewAccount": "Opprett ny konto", + "signUpGreeting": "FluffyChat er desentralisert! Velg en server der du vil opprette kontoen din, så kjører vi på!", + "signInGreeting": "Har du allerede en Matrix-konto? Velkommen tilbake! Velg hjemmeserveren din og logg inn.", + "appIntro": "Med FluffyChat kan du chatte med vennene dine. Det er en sikker, desentralisert [matrix]-meldingsapp! Les mer på https://matrix.org hvis du vil, eller bare registrer deg.", + "theProcessWasCanceled": "Prosessen ble avbrutt.", + "join": "Bli med", + "searchOrEnterHomeserverAddress": "Søk eller angi adresse til hjemmeserver", + "matrixId": "Matrix ID", + "setPowerLevel": "Angi styrkenivå", + "makeModerator": "Gjør til moderator", + "makeAdmin": "Gjør til admin", + "removeModeratorRights": "Fjern moderator-rettigheter", + "removeAdminRights": "Fjern admin-rettigheter", + "powerLevel": "Styrkenivå", + "setPowerLevelDescription": "Styrkenivåer definerer hva et medlem har lov til å gjøre i dette rommet, og varierer vanligvis mellom 0 og 100.", + "owner": "Eier", + "mute": "Demp", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Opprett ny chat", + "reset": "Nullstill", + "supportFluffyChat": "Støtt FluffyChat", + "support": "Støtte", + "fluffyChatSupportBannerMessage": "FluffyChat trenger DIN hjelp!\n❤️❤️❤️\nFluffyChat vil alltid være gratis, men utvikling og drift koster fortsatt penger. \nProsjektets fremtid avhenger av støtte fra folk som deg.", + "skipSupportingFluffyChat": "Hopp over støtte til FluffyChat", + "iDoNotWantToSupport": "Jeg ønsker ikke å støtte", + "iAlreadySupportFluffyChat": "Jeg støtter allerede FluffyChat", + "setLowPriority": "Sett lav prioritet", + "unsetLowPriority": "Fjern lav prioritet", + "removeCallFromChat": "Fjern anrop fra chat", + "removeCallFromChatDescription": "Vil du fjerne anropet fra chatten for alle medlemmer?", + "removeCallForEveryone": "Fjern anrop fra alle", + "startVoiceCall": "Start lydsamtale", + "startVideoCall": "Start videosamtale", + "joinVoiceCall": "Bli med i lydsamtale", + "joinVideoCall": "Bli med i videosamtale", + "live": "Direkte" } diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 40f298f2..18ed4ccd 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -83,7 +83,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Mogen gasten deelnemen", + "areGuestsAllowedToJoin": "Mogen gasten deelnemen?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -129,18 +129,6 @@ } } }, - "badServerVersionsException": "De homeserver ondersteunt de Spec-versies:\n{serverVersions}\nMaar deze app ondersteunt alleen {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Van chat verbannen", "@banFromChat": { "type": "String", @@ -173,11 +161,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bot-berichten", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Annuleren", "@cancel": { "type": "String", @@ -391,7 +374,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Chat is toegevoegd aan deze space", "chats": "Chats", "@chats": { "type": "String", @@ -453,7 +435,7 @@ "type": "String", "description": "Usage hint for the command /myroomnick" }, - "commandHint_op": "Machtsniveau van de persoon instellen (standaard: 50)", + "commandHint_op": "Rechtenniveau van de persoon instellen (standaard: 50)", "@commandHint_op": { "type": "String", "description": "Usage hint for the command /op" @@ -507,31 +489,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Bevestigen", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Verbinden", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Contact is voor de groep uitgenodigd", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Bevat naam", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Bevat inlognaam", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "De inhoud is gerapporteerd aan de serverbeheerders", "@contentHasBeenReported": { "type": "String", @@ -611,33 +573,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Hierdoor wordt je account gedeactiveerd. Dit kan niet ongedaan gemaakt worden! Weet je het zeker?", "@deactivateAccountWarning": { "type": "String", @@ -743,11 +678,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Je moet een emoticon korte code en afbeelding kiezen!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Lege chat", "@emptyChat": { "type": "String", @@ -797,11 +727,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Vul je homeserver in", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Locatie ophalen fout: {error}", "@errorObtainingLocation": { "type": "String", @@ -851,17 +776,12 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Ga naar de nieuwe chat", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Groep", "@group": { "type": "String", "placeholders": {} }, - "groupIsPublic": "Groep is openbaar", + "groupIsPublic": "Groep is publiek", "@groupIsPublic": { "type": "String", "placeholders": {} @@ -927,11 +847,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identiteit", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Negeer", "@ignore": { "type": "String", @@ -993,11 +908,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Persoonlijke uitnodiging", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} heeft je uitgenodigd voor FluffyChat.\n1. Bezoek https://fluffychat.im en installeer de app\n2. Registreer of log in\n3. Open deze uitnodigingslink:\n{link}", "@inviteText": { "type": "String", @@ -1077,11 +987,6 @@ "type": "String", "placeholders": {} }, - "license": "Licentie", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Licht", "@lightTheme": { "type": "String", @@ -1135,11 +1040,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Persoon wijzigingen", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Vermeld", "@mention": { "type": "String", @@ -1200,7 +1100,7 @@ "type": "String", "placeholders": {} }, - "noEncryptionForPublicRooms": "Je kunt de versleuteling pas activeren zodra de chat niet meer openbaar toegankelijk is.", + "noEncryptionForPublicRooms": "Je kunt de versleuteling pas activeren zodra de chat niet meer publiek toegankelijk is.", "@noEncryptionForPublicRooms": { "type": "String", "placeholders": {} @@ -1247,11 +1147,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Meldingen ingeschakeld voor dit account", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} personen typen…", "@numUsersTyping": { "type": "String", @@ -1276,7 +1171,7 @@ "type": "String", "placeholders": {} }, - "ok": "OK", + "ok": "Ok", "@ok": { "type": "String", "placeholders": {} @@ -1351,11 +1246,6 @@ "type": "String", "placeholders": {} }, - "people": "Personen", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Kies een afbeelding", "@pickImage": { "type": "String", @@ -1375,11 +1265,6 @@ } } }, - "pleaseChoose": "Maak een keuze", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Kies een toegangscode", "@pleaseChooseAPasscode": { "type": "String", @@ -1420,7 +1305,7 @@ "type": "String", "placeholders": {} }, - "publicRooms": "Openbare chats", + "publicRooms": "Publieke chats", "@publicRooms": { "type": "String", "placeholders": {} @@ -1473,11 +1358,6 @@ } } }, - "rejoin": "Opnieuw deelnemen", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Verwijder", "@remove": { "type": "String", @@ -1497,11 +1377,6 @@ } } }, - "removeDevice": "Verwijder apparaat", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Verbanning opheffen", "@unbanFromChat": { "type": "String", @@ -1557,15 +1432,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Gezien door {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Verstuur", "@send": { "type": "String", @@ -1600,16 +1466,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Origineel versturen", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Sticker versturen", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Video versturen", "@sendVideo": { "type": "String", @@ -1674,21 +1530,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Aangepaste emoticons instellen", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Uitnodigingslink instellen", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Rechten-niveau instellen", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Status instellen", "@setStatus": { "type": "String", @@ -1723,11 +1564,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Eenmalig Inloggen", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Overslaan", "@skip": { "type": "String", @@ -1738,7 +1574,7 @@ "type": "String", "placeholders": {} }, - "spaceIsPublic": "Space is openbaar", + "spaceIsPublic": "Space is publiek", "@spaceIsPublic": { "type": "String", "placeholders": {} @@ -1798,21 +1634,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Favoriet in- of uitschakelen", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Dempen in- of uitschakelen", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Markeer gelezen/ongelezen", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Te veel verzoeken. Probeer het later nog eens!", "@tooManyRequestsWarning": { "type": "String", @@ -1879,15 +1700,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 ongelezen chat} other{{unreadCount} ongelezen chats}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} en {count} anderen zijn aan het typen …", "@userAndOthersAreTyping": { "type": "String", @@ -2012,11 +1824,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Achtergrond:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Waarschuwing!", "@warning": { "type": "String", @@ -2102,7 +1909,6 @@ "messageType": "Berichttype", "sender": "Afzender", "openGallery": "Galerij openen", - "addToSpaceDescription": "Selecteer een space om deze chat aan toe te voegen.", "removeFromSpace": "Uit de space verwijderen", "start": "Start", "commandHint_clearcache": "Cache wissen", @@ -2125,21 +1931,6 @@ "type": "String", "description": "Usage hint for the command /discardsession" }, - "openVideoCamera": "Videocamera openen", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Publiceren", "dismiss": "Sluiten", "markAsRead": "Markeer als gelezen", "reportUser": "Persoon rapporteren", @@ -2162,35 +1953,9 @@ "unsupportedAndroidVersion": "Niet-ondersteunde Android-versie", "unsupportedAndroidVersionLong": "Voor deze functie is een nieuwe Android-versie verplicht. Controleer je updates of Lineage OS-ondersteuning.", "videoCallsBetaWarning": "Houd er rekening mee dat videogesprekken momenteel in bèta zijn. Ze werken misschien niet zoals je verwacht of werken niet op alle platformen.", - "voiceCall": "Spraakoproep", + "voiceCall": "Spraakgesprek", "confirmEventUnpin": "Weet je zeker dat je de gebeurtenis definitief wilt losmaken?", "experimentalVideoCalls": "Videogesprekken (experimenteel)", - "emailOrUsername": "Email of inlognaam", - "nextAccount": "Volgende account", - "switchToAccount": "Naar account {number} overschakelen", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "previousAccount": "Vorige account", - "widgetCustom": "Aangepast", - "widgetName": "Naam", - "widgetUrlError": "Dit is geen geldige link.", - "widgetNameError": "Geef een naam op.", - "errorAddingWidget": "Fout bij het toevoegen van de widget.", - "widgetJitsi": "Jitsi Meet", - "addWidget": "Widget toevoegen", - "widgetVideo": "Video", - "widgetEtherpad": "Tekstnotitie", - "separateChatTypes": "Directe chats en groepen los weergeven", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youAcceptedTheInvitation": "👍 Je hebt de uitnodiging geaccepteerd", "youRejectedTheInvitation": "Je hebt de uitnodiging afgewezen", "youJoinedTheChat": "Je bent toegetreden tot de chat", @@ -2252,7 +2017,6 @@ }, "recoveryKey": "Herstelsleutel", "recoveryKeyLost": "Herstelsleutel verloren?", - "pleaseEnterRecoveryKey": "Voer jouw herstelsleutel in:", "users": "Personen", "unlockOldMessages": "Oude berichten ontgrendelen", "storeInAndroidKeystore": "In Android KeyStore opslaan", @@ -2263,13 +2027,7 @@ "storeSecurlyOnThisDevice": "Veilig opslaan op dit apparaat", "dehydrate": "Sessie exporteren en apparaat wissen", "dehydrateWarning": "Deze actie kan niet ongedaan worden gemaakt. Zorg ervoor dat je het back-upbestand veilig opslaat.", - "dehydrateTor": "TOR-sessies: Exporteer sessie", - "dehydrateTorLong": "Voor TOR-sessies is het aanbevolen de sessie te exporteren alvorens het venster te sluiten.", - "hydrateTor": "TOR-sessie: Importeren sessie export", - "hydrateTorLong": "Heb je de vorige keer jouw sessie geëxporteerd met TOR? Importeer het dan snel en ga verder met chatten.", "hydrate": "Herstellen vanuit back-upbestand", - "indexedDbErrorTitle": "Problemen met privémodus", - "indexedDbErrorLong": "Het opslaan van berichten is helaas niet standaard ingeschakeld in de privémodus.\nBezoek alsjeblieft\n - about:config\n - stel dom.indexedDB.privateBrowsing.enabled in op true\nAnders is het niet mogelijk om FluffyChat op te starten.", "countFiles": "{count} bestanden", "@countFiles": { "placeholders": { @@ -2294,30 +2052,12 @@ "commandHint_markasgroup": "Markeer als groep", "whyIsThisMessageEncrypted": "Waarom is dit bericht onleesbaar?", "noKeyForThisMessage": "Dit kan gebeuren als het bericht is verzonden voordat je bij je account op dit apparaat hebt aangemeld.\n\nHet is ook mogelijk dat de afzender je apparaat heeft geblokkeerd of dat er iets mis is gegaan met de internetverbinding.\n\nKan je het bericht wel lezen in een andere sessie? Dan kan je het bericht daarvandaan overzetten! Ga naar Instellingen > Apparaten en zorg ervoor dat je apparaten elkaar hebben geverifieerd. Wanneer je de chat de volgende keer opent en beide sessies op de voorgrond staan, zullen de sleutels automatisch worden verzonden.\n\nWil je de sleutels niet verliezen als je uitlogt of van apparaat wisselt? Zorg er dan voor dat je de chatback-up hebt aangezet in de instellingen.", - "enterSpace": "Space betreden", "allSpaces": "Alle spaces", "foregroundServiceRunning": "Deze melding verschijnt wanneer de voorgronddienst draait.", "screenSharingTitle": "scherm delen", "screenSharingDetail": "Je deelt je scherm in FuffyChat", - "callingPermissions": "Telefoon-rechten", - "callingAccount": "Telefoon-account", - "callingAccountDetails": "Hiermee kan FluffyChat de Android telefoon-app gebruiken.", - "appearOnTop": "Bovenaan verschijnen", - "appearOnTopDetails": "Laat de app bovenaan verschijnen (niet nodig als je FluffyChat al hebt ingesteld als een bel-account)", - "otherCallingPermissions": "Microfoon, camera en andere FluffyChat-rechten", "newGroup": "Nieuwe groep", "newSpace": "Space aanmaken", - "enterRoom": "Chat betreden", - "numChats": "{number} chats", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Onbelangrijke statusgebeurtenissen verbergen", "doNotShowAgain": "Niet meer tonen", "googlyEyesContent": "{senderName} stuurt je wiebelogen", "@googlyEyesContent": { @@ -2363,8 +2103,7 @@ "reopenChat": "Chat heropenen", "encryptThisChat": "Versleutel deze chat", "deviceKeys": "Apparaatsleutels:", - "startFirstChat": "Begin je eerste chat", - "newSpaceDescription": "Met spaces kun je je chats samenvoegen en privé- of openbare community's bouwen.", + "newSpaceDescription": "Met spaces kun je je chats samenvoegen en privé- of publieke community's bouwen.", "noOtherDevicesFound": "Geen andere apparaten gevonden", "noBackupWarning": "Waarschuwing! Zonder de chatback-up in te schakelen, verlies je de toegang tot je versleutelde berichten. Het is sterk aanbevolen om eerst de chatback-up in te schakelen voordat je uitlogt.", "fileIsTooBigForServer": "Kan niet verzenden! De server ondersteunt alleen bijlages tot {max}.", @@ -2381,20 +2120,6 @@ "readUpToHere": "Lees tot hier", "jump": "Spring", "openLinkInBrowser": "Link in browser openen", - "allRooms": "Alle groepschats", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "signInWith": "Aanmelden met {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Geen afbeeldingsbestand.", "importNow": "Nu importeren", "importEmojis": "Emoji's importeren", @@ -2404,12 +2129,10 @@ "report": "Rapporteer", "reportErrorDescription": "😭 Oh nee. Er is iets misgegaan. Probeer het later nog eens. Als je wilt, kun je de bug rapporteren aan de ontwikkelaars.", "sendTypingNotifications": "Typemeldingen verzenden", - "pleaseTryAgainLaterOrChooseDifferentServer": "Probeer het later nog eens of kies een andere server.", - "signInWithPassword": "Aanmelden met wachtwoord", - "chatPermissions": "Chat rechten", - "chatDescription": "Chatomschrijving", - "chatDescriptionHasBeenChanged": "Chatomschrijving gewijzigd", - "noChatDescriptionYet": "Nog geen chatomschrijving gemaakt.", + "chatPermissions": "Chatrechten", + "chatDescription": "Onderwerp", + "chatDescriptionHasBeenChanged": "Onderwerp gewijzigd", + "noChatDescriptionYet": "Nog geen onderwerp gemaakt.", "tryAgain": "Opnieuw proberen", "redactMessageDescription": "Het bericht zal worden aangepast voor alle deelnemers in dit gesprek. Dit kan niet ongedaan gemaakt worden.", "redactedByBecause": "Aangepast door {username}, reden: \"{reason}\"", @@ -2424,11 +2147,8 @@ } } }, - "profileNotFound": "De persoon kan niet gevonden worden op de server. Misschien is er een verbindingsprobleem of de persoon bestaat niet.", "createGroup": "Groep aanmaken", - "inviteContactToGroupQuestion": "Wil je {contact} uitnodigingen voor de chat \"{groupName}\"?", "optionalRedactReason": "(Optioneel) Reden voor aanpassing van dit bericht...", - "addChatDescription": "Voeg een chatomschrijving toe...", "invalidServerName": "Foute servernaam", "messagesStyle": "Berichten:", "shareInviteLink": "Uitnodigingslink delen", @@ -2442,12 +2162,10 @@ } }, "directChat": "Directe chat", - "setChatDescription": "Chatomschrijving instellen", - "setTheme": "Thema instellen:", + "setChatDescription": "Onderwerp instellen", "setColorTheme": "Kleurthema instellen:", "invite": "Uitnodigen", "inviteGroupChat": "📨 Groeps-chat uitnodiging", - "invitePrivateChat": "📨 Privé-chat uitnodiging", "emoteKeyboardNoRecents": "Recent gebruikte emoticons zullen hier verschijnen...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2480,7 +2198,7 @@ "learnMore": "Lees meer", "roomUpgradeDescription": "De chat zal dan opnieuw gemaakt worden met de nieuwe kamerversie. Alle deelnemers worden geïnformeerd dat ze moeten overstappen naar de nieuwe chat. Je kan meer lezen over kamerversies op https://spec.matrix.org/latest/rooms/", "pleaseEnterANumber": "Vul een getal in groter dan 0", - "kickUserDescription": "De persoon is verwijderd uit de chat, maar is niet verbannen. In openbare chats kan de persoon op elk moment opnieuw deelnemen.", + "kickUserDescription": "De persoon is verwijderd uit de chat, maar is niet verbannen. In publieke chats kan de persoon op elk moment opnieuw deelnemen.", "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." @@ -2488,11 +2206,6 @@ "joinSpace": "Toetreden tot de space", "block": "Blokkeren", "blockedUsers": "Geblokkeerde personen", - "presenceStyle": "Aanwezigheid:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "searchChatsRooms": "Zoek #chats, @personen...", "swipeRightToLeftToReply": "Veeg van rechts naar links om te reageren", "calls": "Gesprekken", @@ -2503,14 +2216,6 @@ "hideRedactedMessagesBody": "Als iemand een bericht verwijdert is dit bericht niet meer zichtbaar in de chat.", "hideInvalidOrUnknownMessageFormats": "Ongeldige of onbekende berichtformaten verbergen", "passwordRecoverySettings": "Wachtwoordherstel-instellingen", - "youInvitedToBy": "📩 Je bent uitgenodigd via een link voor:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "knock": "Klop", "overview": "Overzicht", "hidePresences": "Verberg statuslijst?", @@ -2527,46 +2232,20 @@ } } }, - "publicSpaces": "Openbare spaces", + "publicSpaces": "Publieke spaces", "blockUsername": "Negeer inlognaam", - "publicChatAddresses": "Openbare chat adressen", + "publicChatAddresses": "Publieke chat adressen", "createNewAddress": "Creëer nieuw adres", - "countChatsAndCountParticipants": "{chats} chats en {participants} deelnemers", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Geen chats gevonden...", - "joinedChats": "Chats waaraan je deelneemt", "knocking": "Kloppen", "space": "Space", "spaces": "Spaces", "unread": "Ongelezen", - "databaseBuildErrorBody": "Het aanmaken van de SQlite database is mislukt. De app probeert nu een traditionele database te gebruiken. Meldt alsjeblieft deze fout aan de ontwikkelaars via deze {url}. De foutmelding is: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "groupName": "Groepsnaam", "changeGeneralChatSettings": "Algemene chat instellingen wijzigen", "restricted": "Beperkt", "searchForUsers": "Zoek @personen...", "searchMore": "Zoek meer...", - "noPublicLinkHasBeenCreatedYet": "Openbare link is nog niet gecreëerd", "groupCanBeFoundViaSearch": "Groep kan gevonden worden via zoeken", "searchIn": "Zoek in chat \"{chat}\"...", "@searchIn": { @@ -2651,7 +2330,6 @@ "compress": "Comprimeren", "previous": "Vorige", "otherPartyNotLoggedIn": "De andere partij is momenteel niet ingelogd en kan daarom geen berichten ontvangen!", - "notifyMeFor": "Waarschuw mij voor", "blockListDescription": "Je kunt personen blokkeren die je lastig vallen. Je kan dan geen berichten meer ontvangen of chat uitnodigingen krijgen van de personen op je blokkeerlijst.", "sendImages": "Stuur {count} afbeelding(en)", "@sendImages": { @@ -2668,9 +2346,6 @@ "placeholders": {} }, "website": "Website", - "hideMemberChangesInPublicChats": "Verberg persoon veranderingen in openbare chats", - "hideMemberChangesInPublicChatsBody": "Verberg in de tijdlijn van de chat als iemand zich aanmeldt bij een openbare chat of deze verlaat om de leesbaarheid te verbeteren.", - "startConversation": "Start gesprek", "usersMustKnock": "Personen moeten kloppen", "noUsersFoundWithQuery": "Helaas kan er geen persoon gevonden worden met \"{query}\". Controleer of je een typfout hebt gemaakt.", "@noUsersFoundWithQuery": { @@ -2682,14 +2357,6 @@ } }, "createGroupAndInviteUsers": "Maak groep en nodig personen uit", - "userWouldLikeToChangeTheChat": "{user} wil graag deelnemen aan de chat.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "chatCanBeDiscoveredViaSearchOnServer": "Chat kan worden gevonden via een zoekopdracht op {server}", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2715,14 +2382,11 @@ "passwordIsWrong": "Je ingevoerde wachtwoord is fout", "newPassword": "Nieuw wachtwoord", "pleaseChooseAStrongPassword": "Kies a.j.b. een sterk wachtwoord", - "publicLink": "Openbare link", "select": "Selecteer", - "leaveEmptyToClearStatus": "Laat leeg om je status te resetten.", + "leaveEmptyToClearStatus": "Laat leeg om jouw status te herstellen.", "addChatOrSubSpace": "Voeg chat of subspace toe", - "subspace": "Subspace", "pleaseEnterYourCurrentPassword": "Vul je huidige wachtwoord in", "passwordsDoNotMatch": "Wachtwoorden komen niet overeen", - "decline": "Weiger", "thisDevice": "Dit apparaat:", "contentNotificationSettings": "Contentmelding instellingen", "roomNotificationSettings": "Kamermelding instellingen", @@ -2761,7 +2425,6 @@ "opacity": "Doorzichtigheid:", "verifyOtherUserDescription": "Als je een persoon verifieert ben je er zeker van dat je echt met haar contact hebt. 💪\n\nWanneer je een verificatie start ziet de persoon een popup in de app. Hier staat een serie van emoji's of getallen die je met elkaar moet vergelijken.\n\nDe beste manier om dit te doen is in persoon of met een videogesprek. 👭", "changeTheVisibilityOfChatHistory": "Zichtbaarheid van de chat-geschiedenis wijzigen", - "whatIsAHomeserver": "Wat is een server?", "sendRoomNotifications": "@room-meldingen versturen", "noticeChatBackupDeviceVerification": "Opmerking: Als al je apparaten zijn verbonden met de chat back-up worden ze automatisch geverifieerd.", "notificationRuleMemberEvent": "Chat-gebeurtenis uitschakelen", @@ -2777,8 +2440,8 @@ "notificationRuleSuppressNoticesDescription": "Meldingen van automatische accounts zoals bots uitschakelen.", "notificationRuleInviteForMe": "Persoonlijke uitnodiging", "inviteOtherUsers": "Personen voor deze chat uitnodigen", - "changeTheChatPermissions": "Chat-rechten wijzigen", - "changeTheCanonicalRoomAlias": "Standaard openbaar chat-adres wijzigen", + "changeTheChatPermissions": "Chatrechten wijzigen", + "changeTheCanonicalRoomAlias": "Standaard publiek chat-adres wijzigen", "blur": "Vervaag:", "isReadyForKeyVerification": "{sender} is klaar voor de sleutelverificatie", "@isReadyForKeyVerification": { @@ -2833,7 +2496,6 @@ } } }, - "discoverHomeservers": "Ontdek servers", "changelog": "Wijzigingengeschiedenis", "loginWithMatrixId": "Inloggen met Matrix-ID", "calculatingFileSize": "Bestandsgrootte berekenen...", @@ -2856,15 +2518,6 @@ "name": "Naam", "verifyOtherDeviceDescription": "Een geverifieerd ander apparaat zorgt ervoor dat de apparaten sleutels uitwisselen, wat je beveiliging versterkt. 💪 Als je de verificatie start verschijnt er een popup op beide apparaten. Hier staat een reeks emoji's of getallen die je met elkaar moet vergelijken. Het is handig om beide apparaten bij de hand te hebben voordat je de verificatie start. 🤳", "commandHint_unignore": "Herstel de negeerde Matrix-ID", - "forwardMessageTo": "Bericht doorsturen naar {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "restoreSessionBody": "De app probeert nu je sessie te herstellen van een back-up. Meldt alsjeblieft deze fout aan de ontwikkelaars via deze link {url}. De foutmelding is: {error}", "@restoreSessionBody": { "type": "String", @@ -2880,17 +2533,7 @@ "sendReadReceipts": "Leesbevestigingen versturen", "formattedMessages": "Opgemaakte berichten", "chatPermissionsDescription": "Stel het gewenste rechten-niveau in voor bepaalde acties in deze chat. Het rechten-niveau 0, 50 en 100 zijn gebruikelijk voor deelnemer, moderator en beheerder, maar elke verdeling is mogelijk.", - "changeTheDescriptionOfTheGroup": "Chatomschrijving wijzigen", - "userRole": "Rol", - "minimumPowerLevel": "{level} is het minimale rechten-niveau.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, + "changeTheDescriptionOfTheGroup": "Onderwerp wijzigen", "sendReadReceiptsDescription": "Andere deelnemers van de chat kunnen zien of je een bericht hebt gelezen.", "formattedMessagesDescription": "Geef rijke berichtinhoud weer zoals vetgedrukte tekst met markdown.", "verifyOtherUser": "🔐 Persoon verifiëren", @@ -2921,7 +2564,6 @@ }, "appWantsToUseForLoginDescription": "Hierbij sta je toe dat de app en website informatie over je delen.", "open": "Open", - "appIntroduction": "FluffyChat laat je chatten met je vrienden tussen verschillende chat-netwerken. Lees meer op https://matrix.org of tik *Continue*.", "completedKeyVerification": "{sender} ronde de sleutelverificatie af", "@completedKeyVerification": { "type": "String", @@ -2931,7 +2573,6 @@ } } }, - "homeserverDescription": "Al je data is opgeslagen op de server, net als bij een email-leverancier. Je kan kiezen welke server je gebruikt en toch communiceren met iedereen. Lees meer op https://matrix.org.", "notificationRuleContainsDisplayName": "Bevat de naam", "notificationRuleIsUserMentionDescription": "Stuur een melding als je direct genoemd wordt in een bericht.", "notificationRuleContainsDisplayNameDescription": "Stuur een melding als je genoemd wordt in een bericht.", @@ -2984,10 +2625,7 @@ "optionalMessage": "(Optioneel) bericht...", "notSupportedOnThisDevice": "Niet ondersteund op dit apparaat", "commandHint_roomupgrade": "Upgradeer deze chat naar de aangegeven kamerversie", - "setCustomPermissionLevel": "Aangepast rechten-niveau instellen", - "setPermissionsLevelDescription": "Kies hieronder een standaard rol of voer een aangepast rechten-niveau in tussen 0 en 100.", "ignoreUser": "Persoon negeren", - "normalUser": "Normaal persoon", "pleaseWaitUntilInvited": "Wacht even alsjeblieft tot iemand van de chat je uitnodigt.", "approve": "Goedkeuren", "youHaveKnocked": "Je hebt geklopt", @@ -3023,11 +2661,6 @@ "longPressToRecordVoiceMessage": "Lang drukken om een spraakbericht op te nemen.", "pause": "Pauzeer", "resume": "Hervat", - "donate": "Doneer", - "newSubSpace": "Nieuwe sub-space", - "moveToDifferentSpace": "Naar andere space verplaatsen", - "moveUp": "Omhoog verplaatsen", - "moveDown": "Omlaag verplaatsen", "removeFromSpaceDescription": "De chat zal worden verwijderd uit de space, maar blijft in je chats.", "countChats": "{chats} chats", "@countChats": { @@ -3069,7 +2702,6 @@ "startPoll": "Peiling starten", "endPoll": "Peiling beëindigen", "answersVisible": "Zichtbaar invullen", - "answersHidden": "Antwoorden verborgen", "pollQuestion": "Peiling vraag", "answerOption": "Antwoord optie", "addAnswerOption": "Antwoord optie toevoegen", @@ -3085,7 +2717,7 @@ } }, "answersWillBeVisibleWhenPollHasEnded": "Antwoorden zullen zichtbaar zijn wanneer de peiling is geëindigd", - "replyInThread": "Antwoord in draad", + "replyInThread": "Antwoord in gesprek", "countReplies": "{count, plural, =1{Één antwoord} other{{count} antwoorden}}", "@countReplies": { "type": "int", @@ -3095,7 +2727,7 @@ } } }, - "thread": "Draad", + "thread": "Gesprek", "backToMainChat": "Terug naar hoofdchat", "saveChanges": "Wijzigingen opslaan", "createSticker": "Sticker of emoji maken", @@ -3109,7 +2741,7 @@ "skipChatBackupWarning": "Weet je het zeker? Zonder chat back-up verlies je toegang tot je berichten als je van apparaat wisselt.", "loadingMessages": "Berichten laden", "setupChatBackup": "Chatback-up instellen", - "changedTheChatDescription": "{username} heeft de chatomschrijving gewijzigd", + "changedTheChatDescription": "{username} heeft het onderwerp gewijzigd", "changedTheChatName": "{username} heeft de chatnaam gewijzigd", "noMoreResultsFound": "Geen resultaten meer gevonden", "chatSearchedUntil": "Chat doorzocht tot {time}", @@ -3137,5 +2769,43 @@ "logs": "Logs", "advancedConfigs": "Geavanceerde configuratie", "advancedConfigurations": "Geavanceerde configuraties", - "signInWithLabel": "Log in met:" + "signIn": "Log in", + "createNewAccount": "Registreer nieuw account", + "signUpGreeting": "FluffyChat is decentraal! Kies een server waar je wil voor jouw account en laten we gaan!", + "signInGreeting": "Heb je al een Matrix account? Welkom terug! Kies jouw server en log in.", + "appIntro": "Met FluffyChat kan je chatten met je vrienden. Het is een veilige en decentrale [matrix] app! Lees meer op https://matrix.org als je wilt of kies registreren.", + "theProcessWasCanceled": "Het proces is geannuleerd.", + "join": "Deelnemen", + "searchOrEnterHomeserverAddress": "Zoek of voer serveradres in", + "matrixId": "Matrix-ID", + "setPowerLevel": "Rechtenniveau instellen", + "makeModerator": "Maak moderator", + "makeAdmin": "Maak beheerder", + "removeModeratorRights": "Verwijder moderator-rechten", + "removeAdminRights": "Verwijder beheerder-rechten", + "powerLevel": "Rechtenniveau", + "setPowerLevelDescription": "Rechtenniveau's definiëren wat een persoon mag doen in deze chat en variëren meestal tussen 0 en 100.", + "owner": "Eigenaar", + "mute": "Demp", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "Creëer nieuw chat", + "reset": "Herstellen", + "fluffyChatSupportBannerMessage": "Fluffy Chat heeft JOUW hulp nodig. _\n❤️❤️❤️\nFluffyChat zal altijd gratis zijn, maar ontwikkeling en hosting kost geld.\nDe toekomst van het project hangt af van steun van mensen zoals jij.", + "skipSupportingFluffyChat": "FluffyChat steunen overslaan", + "iDoNotWantToSupport": "Ik wil niet ondersteunen", + "iAlreadySupportFluffyChat": "Ik steun FluffyChat al", + "supportFluffyChat": "FluffyChat steunen", + "support": "Steunen", + "setLowPriority": "Lage prioriteit instellen", + "unsetLowPriority": "Lage prioriteit uitschakelen", + "removeCallFromChat": "Verwijder oproep van chat", + "removeCallFromChatDescription": "Wil je de oproep voor iedereen in de chat verwijderen?", + "removeCallForEveryone": "Verwijder oproep voor iedereen", + "live": "Live", + "startVoiceCall": "Start audio-gesprek", + "startVideoCall": "Start video-gesprek", + "joinVoiceCall": "Audio-gesprek opnemen", + "joinVideoCall": "Deelnemen aan video-gesprek" } diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 16754022..1b14a592 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -68,7 +68,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "Czy użytkownicy-goście mogą dołączyć", + "areGuestsAllowedToJoin": "Czy goście mogą dołączyć?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -109,18 +109,6 @@ } } }, - "badServerVersionsException": "Serwer obsługuje wersje Spec:\n{serverVersions}\nAle aplikacja obsługuje tylko {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Ban w czacie", "@banFromChat": { "type": "String", @@ -153,11 +141,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Wiadomości botów", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Anuluj", "@cancel": { "type": "String", @@ -347,7 +330,7 @@ "type": "String", "placeholders": {} }, - "chatBackupDescription": "Twoje stare wiadomości są zabezpieczone kluczem odzyskiwania. Uważaj żeby go nie zgubić.", + "chatBackupDescription": "Twoje wiadomości są zabezpieczone kluczem odzyskiwania. Uważaj żeby go nie zgubić.", "@chatBackupDescription": { "type": "String", "placeholders": {} @@ -368,7 +351,6 @@ "placeholders": {} }, "clearArchive": "Wyczyść archiwum", - "@clearArchive": {}, "close": "Zamknij", "@close": { "type": "String", @@ -468,31 +450,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Potwierdź", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Połącz", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt został zaproszony do grupy", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Zawiera nazwę wyświetlaną", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Zawiera nazwę użytkownika", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "copiedToClipboard": "Skopiowano do schowka", "@copiedToClipboard": { "type": "String", @@ -562,33 +524,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}.{month}.{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "To zdezaktywuje twoje konto. To jest nieodwracalne! Na pewno chcesz to zrobić?", "@deactivateAccountWarning": { "type": "String", @@ -679,11 +614,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Musisz wybrać kod emotikonu oraz obraz!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Pusty czat", "@emptyChat": { "type": "String", @@ -728,11 +658,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Wpisz swój serwer domowy", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "Wszystko gotowe!", "@everythingReady": { "type": "String", @@ -763,11 +688,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Przejdź do nowego pokoju", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupa", "@group": { "type": "String", @@ -829,11 +749,6 @@ "type": "String", "placeholders": {} }, - "identity": "Tożsamość", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignoredUsers": "Ignorowani użytkownicy", "@ignoredUsers": { "type": "String", @@ -885,11 +800,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Zaproszenie dla mnie", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} zaprosił/-a Cię do FluffyChat.\n1. Odwiedź fluffychat.im i zainstaluj aplikację\n2. Zarejestuj się lub zaloguj\n3. Otwórz link zaproszenia:\n{link}", "@inviteText": { "type": "String", @@ -969,11 +879,6 @@ "type": "String", "placeholders": {} }, - "license": "Licencja", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Jasny", "@lightTheme": { "type": "String", @@ -1017,11 +922,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Zmiany członków", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Wzmianka", "@mention": { "type": "String", @@ -1102,11 +1002,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Powiadomienia są włączone dla tego konta", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "oopsSomethingWentWrong": "Ojej! Coś poszło nie tak…", "@oopsSomethingWentWrong": { "type": "String", @@ -1132,11 +1027,6 @@ "type": "String", "placeholders": {} }, - "people": "Osoby", - "@people": { - "type": "String", - "placeholders": {} - }, "pin": "Przypnij", "@pin": { "type": "String", @@ -1204,11 +1094,6 @@ } } }, - "rejoin": "Dołącz ponownie", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Usuń", "@remove": { "type": "String", @@ -1228,11 +1113,6 @@ } } }, - "removeDevice": "Usuń urządzenie", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Odbanuj w czacie", "@unbanFromChat": { "type": "String", @@ -1253,15 +1133,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Zobaczone przez {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Wyślij", "@send": { "type": "String", @@ -1332,11 +1203,6 @@ "type": "String", "placeholders": {} }, - "setInvitationLink": "Ustaw link z zaproszeniem", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "Ustaw status", "@setStatus": { "type": "String", @@ -1443,15 +1309,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 unread chat} other{{unreadCount} unread chats}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} oraz {count} pozostałych pisze…", "@userAndOthersAreTyping": { "type": "String", @@ -1546,11 +1403,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Tapeta:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "whoIsAllowedToJoinThisGroup": "Kto może dołączyć do tej grupy", "@whoIsAllowedToJoinThisGroup": { "type": "String", @@ -1602,9 +1454,7 @@ "placeholders": {} }, "addAccount": "Dodaj konto", - "@addAccount": {}, "serverRequiresEmail": "Ten serwer wymaga potwierdzenia Twojego adresu email w celu rejestracji.", - "@serverRequiresEmail": {}, "or": "Lub", "@or": { "type": "String", @@ -1620,11 +1470,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Proszę wybrać", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseClickOnLink": "Proszę kliknij w odnośnik wysłany w wiadomości e-mail, aby kontynuować.", "@pleaseClickOnLink": { "type": "String", @@ -1679,16 +1524,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Wyślij oryginał", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Wyślij naklejkę", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Wyślij film", "@sendVideo": { "type": "String", @@ -1709,7 +1544,6 @@ "placeholders": {} }, "enableMultiAccounts": "(BETA) Włącza obsługę wielu kont na tym urządzeniu", - "@enableMultiAccounts": {}, "pickImage": "Wybierz obraz", "@pickImage": { "type": "String", @@ -1726,14 +1560,12 @@ "placeholders": {} }, "link": "Link", - "@link": {}, "roomHasBeenUpgraded": "Pokój został zaktualizowany", "@roomHasBeenUpgraded": { "type": "String", "placeholders": {} }, "repeatPassword": "Powtórz hasło", - "@repeatPassword": {}, "all": "Wszystkie", "@all": { "type": "String", @@ -1750,7 +1582,6 @@ "placeholders": {} }, "sendOnEnter": "Wyślij enterem", - "@sendOnEnter": {}, "autoplayImages": "Automatycznie odtwarzaj animowane naklejki i emotikony", "@autoplayImages": { "type": "String", @@ -1771,14 +1602,12 @@ "placeholders": {} }, "homeserver": "Adres serwera", - "@homeserver": {}, "locationDisabledNotice": "Usługi lokalizacji są wyłączone. Proszę włącz je aby móc udostępnić swoją lokalizację.", "@locationDisabledNotice": { "type": "String", "placeholders": {} }, "oneClientLoggedOut": "Jedno z twoich urządzeń zostało wylogowane", - "@oneClientLoggedOut": {}, "privacy": "Prywatność", "@privacy": { "type": "String", @@ -1789,15 +1618,8 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Przełącz ulubione", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "yourChatBackupHasBeenSetUp": "Kopia zapasowa Twojego czatu została ustawiona.", "@yourChatBackupHasBeenSetUp": {}, - "chatHasBeenAddedToThisSpace": "Czat został dodany do tej przestrzeni", - "@chatHasBeenAddedToThisSpace": {}, "contentHasBeenReported": "Treść została zgłoszona administratorom serwera", "@contentHasBeenReported": { "type": "String", @@ -1823,11 +1645,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Nagraj film", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "messages": "Wiadomości", "@messages": { "type": "String", @@ -1853,11 +1670,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Ustaw niestandardowe emotikony", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "withTheseAddressesRecoveryDescription": "Dzięki tym adresom możesz odzyskać swoje hasło.", "@withTheseAddressesRecoveryDescription": { "type": "String", @@ -1873,11 +1685,6 @@ "type": "String", "placeholders": {} }, - "setPermissionsLevel": "Ustaw poziom uprawnień", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "skip": "Pomiń", "@skip": { "type": "String", @@ -1888,25 +1695,12 @@ "type": "String", "placeholders": {} }, - "toggleMuted": "Przełącz wyciszone", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Oznacz przeczytane/nieprzeczytane", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "unavailable": "Niedostępne", "@unavailable": { "type": "String", "placeholders": {} }, - "publish": "Opublikuj", - "@publish": {}, "scanQrCode": "Skanuj kod QR", - "@scanQrCode": {}, "createNewSpace": "Nowa przestrzeń", "@createNewSpace": { "type": "String", @@ -1918,7 +1712,6 @@ "placeholders": {} }, "addToSpace": "Dodaj do przestrzeni", - "@addToSpace": {}, "changeYourAvatar": "Zmień swoje zdjęcie", "@changeYourAvatar": { "type": "String", @@ -1979,7 +1772,7 @@ "type": "String", "placeholders": {} }, - "tooManyRequestsWarning": "Zbyt wiele żądań. Proszę spróbować później.", + "tooManyRequestsWarning": "Zbyt wiele żądań. Proszę spróbować później!", "@tooManyRequestsWarning": { "type": "String", "placeholders": {} @@ -1995,16 +1788,9 @@ "placeholders": {} }, "messageInfo": "Informacje o wiadomości", - "@messageInfo": {}, "time": "Czas", - "@time": {}, "messageType": "Rodzaj wiadomości", "@messageType": {}, - "separateChatTypes": "Oddzielenie czatów bezpośrednich i grupowych", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "waitingPartnerAcceptRequest": "Oczekiwanie na zaakceptowanie prośby przez drugą osobę…", "@waitingPartnerAcceptRequest": { "type": "String", @@ -2031,7 +1817,6 @@ "placeholders": {} }, "removeFromSpace": "Usuń z przestrzeni", - "@removeFromSpace": {}, "extremeOffensive": "Bardzo obraźliwe", "@extremeOffensive": { "type": "String", @@ -2057,9 +1842,7 @@ "placeholders": {} }, "recoveryKey": "Klucz odzyskiwania", - "@recoveryKey": {}, "recoveryKeyLost": "Utracono klucz odzyskiwania?", - "@recoveryKeyLost": {}, "sentCallInformations": "{senderName} wysłał/-a informacje o połączeniu", "@sentCallInformations": { "type": "String", @@ -2069,13 +1852,6 @@ } } }, - "singlesignon": "Pojedyncze logowanie", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "startFirstChat": "Rozpocznij swój pierwszy czat", - "@startFirstChat": {}, "verifyStart": "Rozpocznij weryfikację", "@verifyStart": { "type": "String", @@ -2097,28 +1873,11 @@ "placeholders": {} }, "sender": "Nadawca", - "@sender": {}, "openGallery": "Otwórz galerię", - "@openGallery": {}, "start": "Start", - "@start": {}, "pleaseEnterRecoveryKeyDescription": "Aby odblokować wcześniejsze wiadomości, wprowadź swój klucz odzyskiwania, który został wygenerowany w poprzedniej sesji. Twój klucz odzyskiwania NIE jest Twoim hasłem.", "@pleaseEnterRecoveryKeyDescription": {}, - "videoWithSize": "Film ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "hydrateTorLong": "Czy ostatnio eksportowałeś/-aś swoją sesję na TOR? Szybko ją zaimportuj i kontynuuj rozmowy.", - "@hydrateTorLong": {}, - "dehydrateTorLong": "W przypadku użytkowników sieci TOR zaleca się eksportowanie sesji przed zamknięciem okna.", - "@dehydrateTorLong": {}, "hydrate": "Przywracanie z pliku kopii zapasowej", - "@hydrate": {}, "noMatrixServer": "{server1} nie jest serwerem Matriksa, czy chcesz zamiast niego użyć {server2}?", "@noMatrixServer": { "type": "String", @@ -2131,8 +1890,6 @@ } } }, - "hydrateTor": "Użytkownicy TOR: Importuj eksport sesji", - "@hydrateTor": {}, "numUsersTyping": "{count} użytkowników pisze…", "@numUsersTyping": { "type": "String", @@ -2147,8 +1904,6 @@ "type": "String", "placeholders": {} }, - "pleaseEnterRecoveryKey": "Wprowadź swój klucz odzyskiwania:", - "@pleaseEnterRecoveryKey": {}, "submit": "Odeślij", "@submit": { "type": "String", @@ -2160,7 +1915,6 @@ "placeholders": {} }, "unverified": "Niezweryfikowane", - "@unverified": {}, "wipeChatBackup": "Wymazać kopię zapasową czatu, aby utworzyć nowy klucz odzyskiwania?", "@wipeChatBackup": { "type": "String", @@ -2172,11 +1926,8 @@ "placeholders": {} }, "reportUser": "Zgłoś użytkownika", - "@reportUser": {}, "dismiss": "Odrzuć", - "@dismiss": {}, "markAsRead": "Oznacz jako przeczytane", - "@markAsRead": {}, "passphraseOrKey": "fraza dostępu lub klucz odzyskiwania", "@passphraseOrKey": { "type": "String", @@ -2184,8 +1935,6 @@ }, "openChat": "Otwórz czat", "@openChat": {}, - "addToSpaceDescription": "Wybierz przestrzeń, do której ten czat ma być dodany.", - "@addToSpaceDescription": {}, "supposedMxid": "To powinno być {mxid}", "@supposedMxid": { "type": "String", @@ -2196,46 +1945,26 @@ } }, "commandHint_markasdm": "Oznacz jako pokój wiadomości bezpośrednich dla podanego Matrix ID", - "@commandHint_markasdm": {}, "confirmMatrixId": "Potwierdź swój identyfikator Matrix w celu usunięcia konta.", - "@confirmMatrixId": {}, "commandHint_markasgroup": "Oznacz jako grupę", - "@commandHint_markasgroup": {}, "noEmotesFound": "Nie znaleziono żadnych emotikonów. 😕", "@noEmotesFound": { "type": "String", "placeholders": {} }, "dehydrate": "Eksportuj sesję i wymaż urządzenie", - "@dehydrate": {}, "dehydrateWarning": "Tego nie można cofnąć. Upewnij się, że plik kopii zapasowej jest bezpiecznie przechowywany.", "@dehydrateWarning": {}, - "dehydrateTor": "Użytkownicy TOR: Eksportuj sesję", - "@dehydrateTor": {}, "unsupportedAndroidVersion": "Nieobsługiwana wersja systemu Android", "@unsupportedAndroidVersion": {}, - "widgetCustom": "Własny", - "@widgetCustom": {}, - "widgetEtherpad": "Notatka", - "@widgetEtherpad": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "pinMessage": "Przypnij do pokoju", - "@pinMessage": {}, "confirmEventUnpin": "Czy na pewno chcesz trwale odpiąć wydarzenie?", - "@confirmEventUnpin": {}, "youJoinedTheChat": "Dołączono do czatu", - "@youJoinedTheChat": {}, "user": "Użytkownik", - "@user": {}, "custom": "Własne", - "@custom": {}, "newGroup": "Nowa grupa", - "@newGroup": {}, "newSpace": "Nowa przestrzeń", - "@newSpace": {}, "fileIsTooBigForServer": "Nie udało się wysłać! Ten serwer obsługuje załączniki o maksymalnej wielkości {max}.", - "@fileIsTooBigForServer": {}, "youBannedUser": "Zbanowałeś/-aś {user}", "@youBannedUser": { "placeholders": { @@ -2245,7 +1974,6 @@ } }, "users": "Użytkownicy", - "@users": {}, "countFiles": "{count} plików", "@countFiles": { "placeholders": { @@ -2256,40 +1984,20 @@ }, "noOtherDevicesFound": "Nie znaleziono innych urządzeń", "@noOtherDevicesFound": {}, - "widgetUrlError": "Niepoprawny URL.", - "@widgetUrlError": {}, - "widgetNameError": "Podaj nazwę wyświetlaną.", - "@widgetNameError": {}, "encryptThisChat": "Zaszyfruj ten czat", - "@encryptThisChat": {}, "disableEncryptionWarning": "Ze względów bezpieczeństwa nie można wyłączyć szyfrowania w czacie, w którym zostało ono wcześniej włączone.", - "@disableEncryptionWarning": {}, "deviceKeys": "Klucze urządzenia:", "@deviceKeys": {}, - "emailOrUsername": "Adres e-mail lub nazwa użytkownika", - "@emailOrUsername": {}, - "indexedDbErrorLong": "Przechowywanie wiadomości niestety nie jest domyślnie włączone w trybie prywatnym.\nOdwiedź\n - about:config\n - ustaw dom.indexedDB.privateBrowsing.enabled na true\nW przeciwnym razie nie jest możliwe uruchomienie FluffyChat.", - "@indexedDbErrorLong": {}, "saveKeyManuallyDescription": "Zapisz ten klucz ręcznie, uruchamiając systemowe okno dialogowe udostępniania lub schowek.", - "@saveKeyManuallyDescription": {}, "screenSharingTitle": "udostępnianie ekranu", "@screenSharingTitle": {}, - "appearOnTopDetails": "Umożliwia wyświetlanie aplikacji nad innymi (nie jest to konieczne, jeśli FluffyChat jest już ustawiony jako konto do dzwonienia)", - "@appearOnTopDetails": {}, "noKeyForThisMessage": "Może się to zdarzyć, jeśli wiadomość została wysłana przed zalogowaniem się na to konto na tym urządzeniu.\n\nMożliwe jest również, że nadawca zablokował Twoje urządzenie lub coś poszło nie tak z połączeniem internetowym.\n\nJesteś w stanie odczytać wiadomość na innej sesji? W takim razie możesz przenieść z niej wiadomość! Wejdź w Ustawienia > Urządzenia i upewnij się, że Twoje urządzenia zweryfikowały się wzajemnie. Gdy następnym razem otworzysz pokój i obie sesje będą włączone, klucze zostaną przekazane automatycznie.\n\nNie chcesz stracić kluczy podczas wylogowania lub przełączania urządzeń? Upewnij się, że w ustawieniach masz włączoną kopię zapasową czatu.", - "@noKeyForThisMessage": {}, "sorryThatsNotPossible": "Przepraszamy... to nie jest możliwe", - "@sorryThatsNotPossible": {}, "noBackupWarning": "Uwaga! Bez włączenia kopii zapasowej czatu, stracisz dostęp do swoich zaszyfrowanych wiadomości. Zaleca się włączenie kopii zapasowej czatu przed wylogowaniem.", - "@noBackupWarning": {}, "commandHint_googly": "Wyślij kręcące się oczka", "@commandHint_googly": {}, - "callingPermissions": "Uprawnienia połączeń", - "@callingPermissions": {}, "storeInAndroidKeystore": "Przechowaj w Android KeyStore", - "@storeInAndroidKeystore": {}, "commandHint_cuddle": "Wyślij przytulenie", - "@commandHint_cuddle": {}, "googlyEyesContent": "{senderName} wysyła ci kręcące się oczka", "@googlyEyesContent": { "type": "String", @@ -2318,7 +2026,6 @@ } }, "commandHint_hug": "Wyślij uścisk", - "@commandHint_hug": {}, "reactedWith": "{sender} zareagował/-a z {reaction}", "@reactedWith": { "type": "String", @@ -2332,44 +2039,14 @@ } }, "emojis": "Emoji", - "@emojis": {}, "placeCall": "Zadzwoń", - "@placeCall": {}, "voiceCall": "Połączenie głosowe", - "@voiceCall": {}, "unsupportedAndroidVersionLong": "Ta funkcja wymaga nowszej wersji systemu Android. Sprawdź aktualizacje lub wsparcie Lineage OS.", - "@unsupportedAndroidVersionLong": {}, "videoCallsBetaWarning": "Należy pamiętać, że połączenia wideo są obecnie w fazie beta. Mogą nie działać zgodnie z oczekiwaniami lub nie działać w ogóle na wszystkich platformach.", - "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Eksperymentalne połączenia wideo", "@experimentalVideoCalls": {}, - "indexedDbErrorTitle": "Problemy związane z trybem prywatnym", - "@indexedDbErrorTitle": {}, - "switchToAccount": "Przełącz na konto {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Następne konto", - "@nextAccount": {}, - "previousAccount": "Poprzednie konto", - "@previousAccount": {}, - "addWidget": "Dodaj widżet", - "@addWidget": {}, - "widgetVideo": "Film", - "@widgetVideo": {}, - "widgetName": "Nazwa", - "@widgetName": {}, - "errorAddingWidget": "Błąd podczas dodawania widżetu.", - "@errorAddingWidget": {}, "youRejectedTheInvitation": "Odrzucono zaproszenie", - "@youRejectedTheInvitation": {}, "youAcceptedTheInvitation": "👍 Zaakceptowałeś/-aś zaproszenie", - "@youAcceptedTheInvitation": {}, "youHaveWithdrawnTheInvitationFor": "Wycofano zaproszenie dla {user}", "@youHaveWithdrawnTheInvitationFor": { "placeholders": { @@ -2419,46 +2096,17 @@ } }, "unlockOldMessages": "Odblokuj stare wiadomości", - "@unlockOldMessages": {}, "storeInSecureStorageDescription": "Przechowaj klucz odzyskiwania w bezpiecznym magazynie tego urządzenia.", - "@storeInSecureStorageDescription": {}, "storeInAppleKeyChain": "Przechowaj w pęku kluczy Apple", - "@storeInAppleKeyChain": {}, "storeSecurlyOnThisDevice": "Przechowaj bezpiecznie na tym urządzeniu", - "@storeSecurlyOnThisDevice": {}, "foregroundServiceRunning": "To powiadomienie pojawia się, gdy usługa w tle jest uruchomiona.", - "@foregroundServiceRunning": {}, "screenSharingDetail": "Udostępniasz swój ekran w FluffyChat", "@screenSharingDetail": {}, - "callingAccount": "Konto połączeń", - "@callingAccount": {}, - "callingAccountDetails": "Pozwala FluffyChat używać natywnej aplikacji do wykonywania połączeń w Androidzie.", - "@callingAccountDetails": {}, - "appearOnTop": "Wyświetlaj nad innymi", - "@appearOnTop": {}, - "otherCallingPermissions": "Mikrofon, kamera i inne uprawnienia FluffyChat", - "@otherCallingPermissions": {}, "whyIsThisMessageEncrypted": "Dlaczego nie można odczytać tej wiadomości?", "@whyIsThisMessageEncrypted": {}, - "enterSpace": "Wejdź do przestrzeni", - "@enterSpace": {}, - "enterRoom": "Wejdź do pokoju", - "@enterRoom": {}, "allSpaces": "Wszystkie przestrzenie", "@allSpaces": {}, - "numChats": "{number} czatów", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Ukryj nieistotne wydarzenia stanu", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "Nie pokazuj ponownie", - "@doNotShowAgain": {}, "wasDirectChatDisplayName": "Pusty czat (wcześniej {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2469,9 +2117,7 @@ } }, "newSpaceDescription": "Przestrzenie pozwalają na konsolidację czatów i budowanie prywatnych lub publicznych społeczności.", - "@newSpaceDescription": {}, "reopenChat": "Otwórz ponownie czat", - "@reopenChat": {}, "fileHasBeenSavedAt": "Plik został zapisany w ścieżce {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2482,46 +2128,24 @@ } }, "addToBundle": "Dodaj do pakietu", - "@addToBundle": {}, "bundleName": "Nazwa pakietu", - "@bundleName": {}, "editBundlesForAccount": "Edytuj pakiety dla tego konta", - "@editBundlesForAccount": {}, "jumpToLastReadMessage": "Przejdź do ostatnio przeczytanej wiadomości", - "@jumpToLastReadMessage": {}, "readUpToHere": "Czytaj do tego miejsca", - "@readUpToHere": {}, "jump": "Przejdź", - "@jump": {}, "removeFromBundle": "Usuń z tego pakietu", - "@removeFromBundle": {}, "openLinkInBrowser": "Otwórz link w przeglądarce", "@openLinkInBrowser": {}, - "allRooms": "Wszystkie czaty grupowe", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "reportErrorDescription": "😭 O nie! Coś poszło nie tak. Spróbuj ponownie później. Jeśli chcesz, możesz zgłosić ten błąd autorom programu.", - "@reportErrorDescription": {}, "setColorTheme": "Ustal styl kolorów:", - "@setColorTheme": {}, "tryAgain": "Spróbuj ponownie", - "@tryAgain": {}, "messagesStyle": "Wiadomości:", - "@messagesStyle": {}, "chatDescription": "Opis czatu", - "@chatDescription": {}, "invalidServerName": "Nieprawidłowa nazwa serwera", - "@invalidServerName": {}, "chatPermissions": "Uprawnienia w czacie", "@chatPermissions": {}, - "signInWithPassword": "Zaloguj się z hasłem", - "@signInWithPassword": {}, "setChatDescription": "Ustaw opis czatu", - "@setChatDescription": {}, "importFromZipFile": "Zaimportuj z pliku .zip", - "@importFromZipFile": {}, "redactedBy": "Usunięte przez {username}", "@redactedBy": { "type": "String", @@ -2531,21 +2155,9 @@ } } }, - "signInWith": "Zaloguj się z {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "optionalRedactReason": "(Opcjonalnie) Powód usunięcia tej wiadomości...", - "@optionalRedactReason": {}, "exportEmotePack": "Eksportuj pakiet emotikonów jako .zip", "@exportEmotePack": {}, - "inviteContactToGroupQuestion": "Czy chcesz zaprosić {contact} do czatu „{groupName}”?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "Usunięte przez {username} z powodu „{reason}”", "@redactedByBecause": { "type": "String", @@ -2559,15 +2171,10 @@ } }, "redactMessageDescription": "Wiadomość zostanie usunięta u wszystkich uczestników tej rozmowy. Tego nie można cofnąć.", - "@redactMessageDescription": {}, "invalidInput": "Nieprawidłowe dane!", - "@invalidInput": {}, "report": "zgłoś", "@report": {}, - "addChatDescription": "Dodaj opis tego czatu...", - "@addChatDescription": {}, "directChat": "Czat bezpośredni", - "@directChat": {}, "wrongPinEntered": "Wprowadzono nieprawidłowy kod PIN! Spróbuj ponownie za {seconds} sekund...", "@wrongPinEntered": { "type": "String", @@ -2578,95 +2185,49 @@ } }, "sendTypingNotifications": "Wysyłaj powiadomienie o pisaniu", - "@sendTypingNotifications": {}, "inviteGroupChat": "📨 Zaproszenie do rozmowy grupowej", "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Zaproszenie do rozmowy prywatnej", - "@invitePrivateChat": {}, "importEmojis": "Zaimportuj emotikony", - "@importEmojis": {}, "noChatDescriptionYet": "Nie utworzono jeszcze opisu czatu.", - "@noChatDescriptionYet": {}, "notAnImage": "To nie jest plik obrazu.", - "@notAnImage": {}, "chatDescriptionHasBeenChanged": "Zmieniono opis czatu", "@chatDescriptionHasBeenChanged": {}, - "profileNotFound": "Nie można odnaleźć użytkownika na serwerze. Być może wystąpił problem z połączeniem lub użytkownik nie istnieje.", - "@profileNotFound": {}, "shareInviteLink": "Udostępnij link z zaproszeniem", - "@shareInviteLink": {}, "emoteKeyboardNoRecents": "Tutaj pojawiają się ostatnio używane emotikony...", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, - "setTheme": "Ustaw wygląd:", - "@setTheme": {}, "replace": "Zastąp", "@replace": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Spróbuj ponownie później lub wybierz inny serwer.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "createGroup": "Utwórz grupę", - "@createGroup": {}, "importNow": "Zaimportuj", - "@importNow": {}, "invite": "Zaproszenie", - "@invite": {}, "block": "Zablokuj", - "@block": {}, "blockedUsers": "Zablokowani użytkownicy", - "@blockedUsers": {}, "blockUsername": "Ignoruj użytkownika", "@blockUsername": {}, - "publicLink": "Link publiczny", - "@publicLink": {}, "transparent": "Przezroczystość", - "@transparent": {}, "select": "Zaznacz", - "@select": {}, "calls": "Połączenia", - "@calls": {}, "overview": "Podsumowanie", - "@overview": {}, "learnMore": "Dowiedz się więcej", - "@learnMore": {}, "groupName": "Nazwa grupy", "@groupName": {}, - "startConversation": "Rozpocznij rozmowę", - "@startConversation": {}, "newPassword": "Nowe hasło", - "@newPassword": {}, "thisDevice": "To urządzenie:", - "@thisDevice": {}, "gallery": "Galeria", - "@gallery": {}, "files": "Pliki", - "@files": {}, "discover": "Odkrywaj", - "@discover": {}, "restricted": "Ograniczone", "@restricted": {}, - "decline": "Odmów", - "@decline": {}, "nothingFound": "Nic nie odnaleziono...", - "@nothingFound": {}, "stickers": "Naklejki", - "@stickers": {}, "noChatsFoundHere": "Nie jeszcze ma żadnych czatów. Wciśnij poniższy przycisk, aby rozpocząć nowy czat. ⤵️", - "@noChatsFoundHere": {}, "hideRedactedMessagesBody": "Usunięte wiadomości nie będą widoczne w czacie.", "@hideRedactedMessagesBody": {}, - "hideMemberChangesInPublicChats": "Ukryj zmiany członkostwa w publicznych czatach", - "@hideMemberChangesInPublicChats": {}, "passwordRecoverySettings": "Ustawienia odzyskiwania hasła", "@passwordRecoverySettings": {}, - "hideMemberChangesInPublicChatsBody": "W celu poprawienia czytelności, nie pokazuj w historii publicznego czatu, czy ktoś do niego dołączył lub go opuścił.", - "@hideMemberChangesInPublicChatsBody": {}, - "presenceStyle": "Obecność:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "invitedBy": "Zaproszony/-a przez {user}", "@invitedBy": { "placeholders": { @@ -2676,9 +2237,7 @@ } }, "archiveRoomDescription": "Czat zostanie przeniesiony do archiwum. Pozostali użytkownicy będą mogli zobaczyć, że opuściłeś/-aś czat.", - "@archiveRoomDescription": {}, "yourGlobalUserIdIs": "Twój globalny identyfikator to: ", - "@yourGlobalUserIdIs": {}, "canceledKeyVerification": "{sender} anulował/-a weryfikację kluczy", "@canceledKeyVerification": { "type": "String", @@ -2698,29 +2257,17 @@ } }, "commandHint_ignore": "Ignoruj podany identyfikator Matrix", - "@commandHint_ignore": {}, "commandHint_unignore": "Przestań ignorować podany identyfikator Matrix", - "@commandHint_unignore": {}, "changeTheChatPermissions": "Zmień uprawnienia w czacie", - "@changeTheChatPermissions": {}, "changelog": "Lista zmian", - "@changelog": {}, "inviteOtherUsers": "Zaproś innych użytkowników do tego czatu", - "@inviteOtherUsers": {}, "blockListDescription": "Możesz zablokować uciążliwych użytkowników. Nie będziesz widzieć ani otrzymywać wiadomości oraz zaproszeń od nich.", - "@blockListDescription": {}, "formattedMessages": "Sformatowane wiadomości", - "@formattedMessages": {}, "banUserDescription": "Użytkownik zostanie zbanowany w czacie i nie będzie w stanie dołączyć do czatu do momentu odbanowania.", "@banUserDescription": {}, - "subspace": "Podprzestrzeń", - "@subspace": {}, "sendReadReceipts": "Wysyłaj powiadomienia o przeczytaniu wiadomości", - "@sendReadReceipts": {}, "verifyOtherDevice": "🔐 Zweryfikuj inne urządzenie", - "@verifyOtherDevice": {}, "prepareSendingAttachment": "Przygotuj wysyłanie załącznika...", - "@prepareSendingAttachment": {}, "acceptedKeyVerification": "{sender} zaakceptował/-a weryfikację kluczy", "@acceptedKeyVerification": { "type": "String", @@ -2731,7 +2278,6 @@ } }, "databaseMigrationTitle": "Baza danych jest zoptymalizowana", - "@databaseMigrationTitle": {}, "hasKnocked": "{user} zapukał-/a", "@hasKnocked": { "placeholders": { @@ -2750,7 +2296,6 @@ } }, "changeTheVisibilityOfChatHistory": "Zmień widoczność historii czatu", - "@changeTheVisibilityOfChatHistory": {}, "sendImages": "Wyślij {count} obrazów", "@sendImages": { "type": "String", @@ -2760,22 +2305,8 @@ } } }, - "noPublicLinkHasBeenCreatedYet": "Nie utworzono jeszcze żadnego publicznego linku", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "Zapukaj", "@knock": {}, - "databaseBuildErrorBody": "Nie udało się utworzyć bazy danych SQLite. Aplikacja na razie spróbuje korzystać ze starej bazy. Prosimy zgłosić ten błąd autorom aplikacji na {url}. Treść błędu to: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "restoreSessionBody": "Aplikacja spróbuje teraz odzyskać Twoją sesję z kopii zapasowej. Prosimy zgłosić ten błąd autorom aplikacji na {url}. Treść błędu to: {error}", "@restoreSessionBody": { "type": "String", @@ -2798,11 +2329,8 @@ } }, "sendTypingNotificationsDescription": "Pozostali uczestnicy czatu mogą widzieć kiedy piszesz nową wiadomość.", - "@sendTypingNotificationsDescription": {}, "sendReadReceiptsDescription": "Pozostali uczestnicy czatu mogą widzieć zobaczyć kiedy przeczytasz wiadomość.", - "@sendReadReceiptsDescription": {}, "noDatabaseEncryption": "Szyfrowanie bazy danych nie jest obsługiwane na tej platformie", - "@noDatabaseEncryption": {}, "thereAreCountUsersBlocked": "Obecnie jest {count} zablokowanych użytkowników.", "@thereAreCountUsersBlocked": { "type": "String", @@ -2814,7 +2342,6 @@ "space": {} }, "markAsUnread": "Oznacz jako nieprzeczytane", - "@markAsUnread": {}, "moderatorLevel": "{level} - Moderator", "@moderatorLevel": { "type": "String", @@ -2834,27 +2361,16 @@ } }, "sendRoomNotifications": "Wysyłaj powiadomienia @room", - "@sendRoomNotifications": {}, "chatPermissionsDescription": "Ustal jaki poziom uprawnień jest wymagany dla określonych czynności w czacie. Poziomy uprawnień 0, 50 i 100 zwykle dotyczą odpowiednio użytkowników, moderatorów i administratorów, ale możliwa jest dowolna gradacja.", - "@chatPermissionsDescription": {}, "changeTheCanonicalRoomAlias": "Zmień główny publiczny czatu", - "@changeTheCanonicalRoomAlias": {}, "changeTheDescriptionOfTheGroup": "Zmień opis czatu", - "@changeTheDescriptionOfTheGroup": {}, "sendCanceled": "Anulowano wysyłanie", "@sendCanceled": {}, - "homeserverDescription": "Wszystkie Twoje dane trzymane są na serwerze domowym, jak u dostawców usług e-mail. Możesz wybrać swój serwer domowy i nadal rozmawiać ze wszystkimi. Dowiedz się więcej na https://matrix.org.", - "@homeserverDescription": {}, "doesNotSeemToBeAValidHomeserver": "Wydaje się nie być kompatybilnym serwerem domowym. Niepoprawny adres URL?", - "@doesNotSeemToBeAValidHomeserver": {}, "calculatingFileSize": "Obliczanie rozmiaru pliku...", - "@calculatingFileSize": {}, "sendingAttachment": "Wysyłanie załącznika...", - "@sendingAttachment": {}, "generatingVideoThumbnail": "Generowanie podglądu filmu...", - "@generatingVideoThumbnail": {}, "compressVideo": "Kompresowanie filmu...", - "@compressVideo": {}, "sendingAttachmentCountOfCount": "Wysyłanie {index} z {length} części załącznika...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -2868,27 +2384,16 @@ } }, "welcomeText": "No cześć! 👋 Tutaj FluffyChat. Możesz zapisać się do dowolnego serwera domowego, kompatybilnego z https://matrix.org i rozmawiać ze wszystkimi. To duża zdecentralizowana sieć czatów!", - "@welcomeText": {}, "blur": "Rozmazanie:", - "@blur": {}, "opacity": "Przezroczystość:", - "@opacity": {}, "setWallpaper": "Ustaw tapetę", - "@setWallpaper": {}, "manageAccount": "Zarządzaj kontem", - "@manageAccount": {}, "noContactInformationProvided": "Serwer nie dostarcza żadnych poprawnych danych kontaktowych", - "@noContactInformationProvided": {}, "contactServerAdmin": "Skontaktuj się z administratorem serwera", - "@contactServerAdmin": {}, "compress": "Skompresuj", - "@compress": {}, "pleaseFillOut": "Proszę wypełnić", - "@pleaseFillOut": {}, "invalidUrl": "Niepoprawny adres URL", - "@invalidUrl": {}, - "unableToJoinChat": "Nie udało się dołączyć do czatu. Może druga strona zakończyła już rozmowę?", - "@unableToJoinChat": {}, + "unableToJoinChat": "Nie udało się dołączyć do czatu. Rozmowa mogła zostać zakończona przez drugą stronę.", "aboutHomeserver": "O {homeserver}", "@aboutHomeserver": { "type": "String", @@ -2908,9 +2413,7 @@ } }, "continueText": "Kontynuuj", - "@continueText": {}, "noticeChatBackupDeviceVerification": "Uwaga: Urządzenia dodane do kopii zapasowej czatu automatycznie zostają zweryfikowane.", - "@noticeChatBackupDeviceVerification": {}, "serverLimitReached": "Osiągnięto limit serwera. Czekanie {seconds} sekund...", "@serverLimitReached": { "type": "integer", @@ -2921,37 +2424,21 @@ } }, "oneOfYourDevicesIsNotVerified": "Jedno z Twoich urządzeń nie jest zweryfikowane", - "@oneOfYourDevicesIsNotVerified": {}, "supportPage": "Strona obsługi użytkownika", - "@supportPage": {}, "serverInformation": "Informacje o serwerze:", - "@serverInformation": {}, "name": "Nazwa", - "@name": {}, "website": "Strona internetowa", - "@website": {}, "contactServerSecurity": "Skontaktuj się z działem bezpieczeństwa serwera", - "@contactServerSecurity": {}, "version": "Wersja", - "@version": {}, "accessAndVisibility": "Dostęp i widoczność", - "@accessAndVisibility": {}, "customEmojisAndStickers": "Własne emotikony i naklejki", - "@customEmojisAndStickers": {}, "globalChatId": "Globalny identyfikator czatu", - "@globalChatId": {}, "accessAndVisibilityDescription": "Kto może dołączyć do tego czatu i w jaki sposób można ten czat znaleźć.", - "@accessAndVisibilityDescription": {}, "customEmojisAndStickersBody": "Dodaj lub podziel się własnymi emotikonami i naklejkami, które będą mogły być użyte w dowolnym czacie.", - "@customEmojisAndStickersBody": {}, "hideRedactedMessages": "Nie pokazuj usuniętych wiadomości", - "@hideRedactedMessages": {}, "hideInvalidOrUnknownMessageFormats": "Ukryj niepoprawne lub nieznane typy wiadomości", "@hideInvalidOrUnknownMessageFormats": {}, - "notifyMeFor": "Powiadom mnie o", - "@notifyMeFor": {}, "pushNotificationsNotAvailable": "Powiadomienia push nie są dostępne", - "@pushNotificationsNotAvailable": {}, "noUsersFoundWithQuery": "Niestety nie udało się nikogo znaleźć poprzez \"{query}\". Proszę sprawdzić, czy w zapytaniu nie ma literówek.", "@noUsersFoundWithQuery": { "type": "String", @@ -2971,46 +2458,30 @@ } }, "publicSpaces": "Przestrzenie publiczne", - "@publicSpaces": {}, "searchMore": "Szukaj dalej...", - "@searchMore": {}, "formattedMessagesDescription": "Używaj Markdown do wyświetlania dodatkowego formatowania w wiadomościach, jak np. pogrubienie tekstu.", - "@formattedMessagesDescription": {}, "verifyOtherUser": "🔐 Zweryfikuj innego użytkownika", - "@verifyOtherUser": {}, "knockRestricted": "Pukanie jest ograniczone", - "@knockRestricted": {}, "appLockDescription": "Zablokuj aplikację pinem kiedy nie jest używana", - "@appLockDescription": {}, "knocking": "Pukanie", - "@knocking": {}, "pleaseChooseAStrongPassword": "Proszę wybrać silne hasło", - "@pleaseChooseAStrongPassword": {}, "usersMustKnock": "Użytkownicy muszą zapukać", - "@usersMustKnock": {}, "noOneCanJoin": "Nikt nie może dołączyć", - "@noOneCanJoin": {}, "alwaysUse24HourFormat": "false", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, "swipeRightToLeftToReply": "Przeciągnij w lewo, by odpowiedzieć", - "@swipeRightToLeftToReply": {}, "presencesToggle": "Pokazuj zmiany statusów innych użytkowników", "@presencesToggle": { "type": "String", "placeholders": {} }, "hidePresences": "Ukryć listę statusów?", - "@hidePresences": {}, "pleaseEnterANumber": "Proszę podać liczbę większą od 0", - "@pleaseEnterANumber": {}, "commandHint_sendraw": "Wyślij zwykły JSON", - "@commandHint_sendraw": {}, "databaseMigrationBody": "Proszę czekać. Może to potrwać chwilę.", - "@databaseMigrationBody": {}, "leaveEmptyToClearStatus": "Pozostaw puste, aby wyczyścić swój status.", - "@leaveEmptyToClearStatus": {}, "sessionLostBody": "Twoja sesja została utracona. Prosimy zgłosić ten błąd autorom aplikacji na {url}. Treść błędu to: {error}", "@sessionLostBody": { "type": "String", @@ -3023,21 +2494,9 @@ } } }, - "forwardMessageTo": "Przekazać wiadomość do {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "publicChatAddresses": "Adresy publicznych czatów", - "@publicChatAddresses": {}, "createNewAddress": "Utwórz nowy adres", "@createNewAddress": {}, - "userRole": "Rola użytkownika/-czki", - "@userRole": {}, "completedKeyVerification": "{sender} zakończył/-a weryfikację kluczy", "@completedKeyVerification": { "type": "String", @@ -3048,33 +2507,15 @@ } }, "italicText": "Kursywa", - "@italicText": {}, "boldText": "Pogrubienie", - "@boldText": {}, "strikeThrough": "Przekreślenie", - "@strikeThrough": {}, "incomingMessages": "Wiadomości przychodzące", "@incomingMessages": {}, - "discoverHomeservers": "Odkrywaj serwery domowe", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "Czym jest serwer domowy?", - "@whatIsAHomeserver": {}, "loginWithMatrixId": "Zaloguj się identyfikatorem Matrix", - "@loginWithMatrixId": {}, "passwordsDoNotMatch": "Hasła się nie zgadzają", - "@passwordsDoNotMatch": {}, "unbanUserDescription": "Użytkownik będzie w stanie dołączyć do czatu ponownie.", - "@unbanUserDescription": {}, "roomUpgradeDescription": "Czat zostanie przeniesiony do pokoju w nowej wersji. Wszyscy użytkownicy zostaną powiadomieni o konieczności dołączenia do nowego czatu. Możesz dowiedzieć się więcej o wersjach pokojów na https://spec.matrix.org/latest/rooms/", "@roomUpgradeDescription": {}, - "userWouldLikeToChangeTheChat": "{user} chce dołączyć do czatu.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "requestedKeyVerification": "{sender} poprosił/-a o weryfikację kluczy", "@requestedKeyVerification": { "type": "String", @@ -3086,18 +2527,8 @@ }, "changeGeneralChatSettings": "Zmień ogólne ustawienia czatu", "@changeGeneralChatSettings": {}, - "youInvitedToBy": "Otrzymałeś/-aś link z zaproszeniem do:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "verifyOtherUserDescription": "Jeśli zweryfikujesz innego użytkownika, możesz być pewien/-na z kim naprawdę piszesz. 💪\n\nKiedy rozpoczniesz weryfikację, Ty i ta druga osoba zobaczycie okienko dialogowe. Zobaczycie w nim serię emotikonów lub numery do porównania.\n\nNajlepiej potwierdzić ich zgodność osobiście lub przez wideorozmowę. 👭", - "@verifyOtherUserDescription": {}, "verifyOtherDeviceDescription": "Jeśli zweryfikujesz inne urządzenie, będzie mogło ono wymienić klucze z dotychczasowym, zwiększając ogólne bezpieczeństwo. 💪 Kiedy rozpoczniesz weryfikację, na obu urządzeniach wyświetli się okno dialogowe. Zobaczysz w nim serię emotikonów lub numery do porównania. Najlepiej mieć oba urządzenia pod ręką przed rozpoczęciem weryfikacji. 🤳", - "@verifyOtherDeviceDescription": {}, "unreadChatsInApp": "{appname}: {unread} nieprzeczytanych czatów", "@unreadChatsInApp": { "type": "String", @@ -3111,62 +2542,25 @@ } }, "addLink": "Dodaj link", - "@addLink": {}, "unread": "Nieprzeczytane", - "@unread": {}, "space": "Przestrzeń", - "@space": {}, "spaces": "Przestrzenie", "@spaces": {}, - "countChatsAndCountParticipants": "{participants}{chats} czatów i {participants} uczestników", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Nie znaleziono więcej czatów...", "@noMoreChatsFound": {}, - "joinedChats": "Czaty, do których dołączono", - "@joinedChats": {}, "removeDevicesDescription": "Nastąpi wylogowanie z tego urządzenia. Nie będziesz w stanie odbierać na nim wiadomości.", - "@removeDevicesDescription": {}, "makeAdminDescription": "Kiedy użytkownik zostanie adminem, nie będziesz móc tego cofnąć, bo nabierze takich samych uprawnień, jak Ty.", - "@makeAdminDescription": {}, "searchChatsRooms": "Szukaj #czatów, @użytkowników...", - "@searchChatsRooms": {}, "createGroupAndInviteUsers": "Utwórz grupę i zaproś użytkowników", - "@createGroupAndInviteUsers": {}, "groupCanBeFoundViaSearch": "Grupa może być znaleziona poprzez wyszukiwanie", - "@groupCanBeFoundViaSearch": {}, "wrongRecoveryKey": "Niestety to nie wygląda na poprawny klucz odzyskiwania.", - "@wrongRecoveryKey": {}, "searchForUsers": "Szukaj @użytkowników...", - "@searchForUsers": {}, "pleaseEnterYourCurrentPassword": "Proszę podać swoje obecne hasło", - "@pleaseEnterYourCurrentPassword": {}, "passwordIsWrong": "Podano niepoprawne hasło", - "@passwordIsWrong": {}, "joinSpace": "Dołącz do przestrzeni", - "@joinSpace": {}, "addChatOrSubSpace": "Dodaj czat lub podprzestrzeń", - "@addChatOrSubSpace": {}, "initAppError": "Wystąpił błąd podczas inicjalizacji aplikacji", "@initAppError": {}, - "minimumPowerLevel": "{level} jest minimalnym poziomem uprawnień.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchIn": "Szukaj w czacie \"{chat}\"...", "@searchIn": { "type": "String", @@ -3177,7 +2571,6 @@ } }, "kickUserDescription": "Użytkownik jest wyrzucony z czatu, ale nie zbanowany. Do czatu publicznego może dołączyć ponownie.", - "@kickUserDescription": {}, "appWantsToUseForLogin": "Użyj serwera '{server}' do zalogowania się", "@appWantsToUseForLogin": { "type": "String", @@ -3188,83 +2581,44 @@ } }, "appWantsToUseForLoginDescription": "Niniejszym zezwalasz aplikacji i witrynie na udostępnianie informacji o sobie.", - "@appWantsToUseForLoginDescription": {}, "open": "Otwórz", - "@open": {}, "contentNotificationSettings": "Ustawienia powiadomień o treści", - "@contentNotificationSettings": {}, "generalNotificationSettings": "Ogólne ustawienia powiadomień", - "@generalNotificationSettings": {}, "roomNotificationSettings": "Ustawienia powiadomień w pokoju", - "@roomNotificationSettings": {}, "userSpecificNotificationSettings": "Ustawienia powiadomień dla użytkownika", - "@userSpecificNotificationSettings": {}, "otherNotificationSettings": "Inne ustawienia powiadomień", - "@otherNotificationSettings": {}, "notificationRuleContainsUserName": "Włącz dla wiadomości z nazwą użytkownika", - "@notificationRuleContainsUserName": {}, "notificationRuleContainsUserNameDescription": "Włącza powiadomienia kiedy wiadomość zawiera Twoją nazwę użytkownika.", - "@notificationRuleContainsUserNameDescription": {}, "notificationRuleMaster": "Wyłącz wszystkie powiadomienia", - "@notificationRuleMaster": {}, "notificationRuleMasterDescription": "Zastępuje inne reguły i wyłącza wszystkie powiadomienia.", - "@notificationRuleMasterDescription": {}, "notificationRuleSuppressNotices": "Wyłącz dla automatycznych wiadomości", - "@notificationRuleSuppressNotices": {}, "notificationRuleSuppressNoticesDescription": "Wyłącza powiadomienia z automatycznych klientów, takich jak boty.", - "@notificationRuleSuppressNoticesDescription": {}, "notificationRuleInviteForMe": "Włącz dla zaproszeń", - "@notificationRuleInviteForMe": {}, "notificationRuleInviteForMeDescription": "Włącza powiadomienia o zaproszeniach do pokoju.", - "@notificationRuleInviteForMeDescription": {}, "notificationRuleMemberEvent": "Wyłącz dla zmian członkostwa", - "@notificationRuleMemberEvent": {}, "notificationRuleMemberEventDescription": "Wyłącza powiadomienia o zmianach członkostwa w pokoju.", - "@notificationRuleMemberEventDescription": {}, "notificationRuleIsUserMention": "Włącz dla wzmianek", - "@notificationRuleIsUserMention": {}, "notificationRuleIsUserMentionDescription": "Włącza powiadomienia o byciu wzmiankowanym w wiadomości.", - "@notificationRuleIsUserMentionDescription": {}, "notificationRuleContainsDisplayName": "Włącz dla wiadomości z nazwą wyświetlaną", - "@notificationRuleContainsDisplayName": {}, "notificationRuleContainsDisplayNameDescription": "Włącza powiadomienia o wiadomościach zawierających Twoją nazwę wyświetlaną.", - "@notificationRuleContainsDisplayNameDescription": {}, "notificationRuleIsRoomMention": "Włącz dla wzmianek pokoju", - "@notificationRuleIsRoomMention": {}, "notificationRuleIsRoomMentionDescription": "Włącza powiadomienia o wzmiankowaniu całego pokoju.", - "@notificationRuleIsRoomMentionDescription": {}, "notificationRuleRoomnotif": "Włącz dla powiadomień w pokoju", - "@notificationRuleRoomnotif": {}, "notificationRuleRoomnotifDescription": "Włącza powiadomienia o wiadomościach zawierających „@room”.", - "@notificationRuleRoomnotifDescription": {}, "notificationRuleTombstone": "Włącz dla „nagrobków”", - "@notificationRuleTombstone": {}, "notificationRuleTombstoneDescription": "Włącza powiadomienia o komunikatach dezaktywacji pokojów.", - "@notificationRuleTombstoneDescription": {}, "notificationRuleReaction": "Wyłącz dla reakcji", - "@notificationRuleReaction": {}, "notificationRuleReactionDescription": "Wyłącza powiadomienia o reakcjach.", - "@notificationRuleReactionDescription": {}, "notificationRuleSuppressEdits": "Wyłącz dla edycji", - "@notificationRuleSuppressEdits": {}, "notificationRuleSuppressEditsDescription": "Wyłącza powiadomienia o edycjach wiadomości.", - "@notificationRuleSuppressEditsDescription": {}, "notificationRuleCall": "Włącz dla połączeń", - "@notificationRuleCall": {}, "notificationRuleRoomServerAclDescription": "Wyłącza powiadomienia dla list kontroli dostępu (ACL) serwera.", - "@notificationRuleRoomServerAclDescription": {}, "notificationRuleRoomServerAcl": "Wyłącz dla list kontroli dostępu serwera", - "@notificationRuleRoomServerAcl": {}, "notificationRuleEncryptedRoomOneToOne": "Włącz dla szyfrowanych pokojów „jeden na jeden”", - "@notificationRuleEncryptedRoomOneToOne": {}, "notificationRuleCallDescription": "Włącza powiadomienia o przychodzących połączeniach.", - "@notificationRuleCallDescription": {}, "notificationRuleRoomOneToOne": "Włącz dla pokojów „jeden na jeden”", - "@notificationRuleRoomOneToOne": {}, "notificationRuleRoomOneToOneDescription": "Włącza powiadomienia o wiadomościach w pokojach „jeden na jeden” (one-to-one).", - "@notificationRuleRoomOneToOneDescription": {}, "notificationRuleMessage": "Włącz dla wiadomości", - "@notificationRuleMessage": {}, "unknownPushRule": "Nieznana reguła: '{rule}'", "@unknownPushRule": { "type": "String", @@ -3275,23 +2629,14 @@ } }, "notificationRuleEncryptedRoomOneToOneDescription": "Włącza powiadomienia o wiadomościach w szyfrowanych pokojach „jeden na jeden” (one-to-one).", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, "notificationRuleEncrypted": "Włącz dla zaszyfrowanych pokojów", - "@notificationRuleEncrypted": {}, "notificationRuleJitsi": "Włącz dla Jitsi", - "@notificationRuleJitsi": {}, "notificationRuleServerAcl": "Wyłącz dla komunikatów o listach kontroli dostępu serwera", - "@notificationRuleServerAcl": {}, "notificationRuleJitsiDescription": "Włącza powiadomienia o komunikatach widżetów Jitsi.", - "@notificationRuleJitsiDescription": {}, "notificationRuleMessageDescription": "Włącza powiadomienia o ogólnych wiadomościach.", - "@notificationRuleMessageDescription": {}, "notificationRuleEncryptedDescription": "Włącza powiadomienia o wiadomościach w zaszyfrowanych pokojach.", - "@notificationRuleEncryptedDescription": {}, "notificationRuleServerAclDescription": "Wyłącza powiadomienia o komunikatach o listach kontroli dostępu (ACL) serwera.", - "@notificationRuleServerAclDescription": {}, "newChatRequest": "📩 Nowa prośba o czat", - "@newChatRequest": {}, "synchronizingPleaseWaitCounter": " Synchronizowanie… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -3303,40 +2648,22 @@ }, "waitingForServer": "Oczekiwanie na serwer...", "@waitingForServer": {}, - "appIntroduction": "FluffyChat umożliwia czatowanie ze znajomymi za pośrednictwem różnych komunikatorów. Dowiedz się więcej na stronie https://matrix.org lub kliknij na *Kontynuuj*.", - "@appIntroduction": {}, "previous": "Poprzedni", - "@previous": {}, "otherPartyNotLoggedIn": "Druga strona nie jest obecnie zalogowana i dlatego nie może odbierać wiadomości!", - "@otherPartyNotLoggedIn": {}, "deletePushRuleCanNotBeUndone": "Jeśli skasujesz to ustawienie powiadomień, nie będzie się dało tego cofnąć.", - "@deletePushRuleCanNotBeUndone": {}, "more": "Więcej", - "@more": {}, "shareKeysWith": "Udostępnij klucze...", - "@shareKeysWith": {}, "crossVerifiedDevicesIfEnabled": "Urządzenia zweryfikowane krzyżowo, jeśli włączone", - "@crossVerifiedDevicesIfEnabled": {}, "crossVerifiedDevices": "Urządzenia zweryfikowane krzyżowo", - "@crossVerifiedDevices": {}, "takeAPhoto": "Zrób zdjęcie", - "@takeAPhoto": {}, "recordAVideo": "Nagraj film", - "@recordAVideo": {}, "optionalMessage": "(Opcjonalna) wiadomość...", - "@optionalMessage": {}, "verifiedDevicesOnly": "Tylko zweryfikowane urządzenia", - "@verifiedDevicesOnly": {}, "shareKeysWithDescription": "Które urządzenia powinny być zaufane, aby mogły odczytywać Twoje wiadomości w zaszyfrowanych czatach?", - "@shareKeysWithDescription": {}, "allDevices": "Wszystkie urządzenia", - "@allDevices": {}, "notSupportedOnThisDevice": "Niewspierane na tym urządzeniu", - "@notSupportedOnThisDevice": {}, "commandHint_roomupgrade": "Zaktualizuj ten pokój do podanej wersji", - "@commandHint_roomupgrade": {}, "enterNewChat": "Dołącz do nowego czatu", - "@enterNewChat": {}, "countInvited": "{count} zaproszonych", "@countInvited": { "type": "String", @@ -3360,30 +2687,16 @@ }, "checkList": "Lista kontrolna", "@checkList": {}, - "setCustomPermissionLevel": "Ustaw własny poziom uprawnień", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Proszę wybrać predefiniowaną rolę poniżej, lub wprowadzić własny poziom uprawnień pomiędzy 0 a 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Ignoruj użytkownika", "@ignoreUser": {}, - "normalUser": "Zwykły użytkownik", - "@normalUser": {}, "approve": "Zaakceptuj", - "@approve": {}, "youHaveKnocked": "Zapukałeś/-aś", - "@youHaveKnocked": {}, "pleaseWaitUntilInvited": "Proszę zaczekać na zaproszenie przez kogoś z pokoju.", - "@pleaseWaitUntilInvited": {}, "commandHint_logout": "Wyloguj bieżące urządzenie", - "@commandHint_logout": {}, "commandHint_logoutall": "Wyloguj wszystkie aktywne urządzenia", - "@commandHint_logoutall": {}, "displayNavigationRail": "Pokazuj pasek nawigacyjny na urządzeniach mobilnych", - "@displayNavigationRail": {}, "customReaction": "Własna reakcja", - "@customReaction": {}, "moreEvents": "Więcej zdarzeń", - "@moreEvents": {}, "declineInvitation": "Odrzuć zaproszenie", "@declineInvitation": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 22ba7e66..c0b2dd21 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -57,21 +57,6 @@ } } }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "help": "Ajuda", "@help": { "type": "String", @@ -119,18 +104,6 @@ "type": "String", "placeholders": {} }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." @@ -138,9 +111,5 @@ "repeatPassword": "Repita a senha", "@repeatPassword": {}, "notAnImage": "Não é um arquivo de imagem.", - "@notAnImage": {}, - "setCustomPermissionLevel": "Definir nível de permissão personalizado", - "@setCustomPermissionLevel": {}, - "addChatDescription": "Adicionar uma descrição de chat...", - "@addChatDescription": {} -} + "@notAnImage": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index 65233922..dae54b88 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -128,18 +128,6 @@ } } }, - "badServerVersionsException": "O servidor suporta as versões de especificação:\n{serverVersions}\nMas este app suporta apenas {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Banir da conversa", "@banFromChat": { "type": "String", @@ -172,11 +160,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Mensagens de bots", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Cancelar", "@cancel": { "type": "String", @@ -401,7 +384,6 @@ "placeholders": {} }, "clearArchive": "Limpar arquivo", - "@clearArchive": {}, "close": "Fechar", "@close": { "type": "String", @@ -506,31 +488,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Confirmar", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Conectar", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "O contato foi convidado ao grupo", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Contém nome de exibição", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Contém nome de usuário", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "O conteúdo foi denunciado para os administradores do servidor", "@contentHasBeenReported": { "type": "String", @@ -610,33 +572,6 @@ } } }, - "dateWithoutYear": "{day}/{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Isto desativará a sua conta. Isto é irreversível! Tem certeza?", "@deactivateAccountWarning": { "type": "String", @@ -742,11 +677,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Você tem que escolher um código emoji e uma imagem!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Conversa vazia", "@emptyChat": { "type": "String", @@ -796,11 +726,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Digite o seu servidor", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Erro ao obter localização: {error}", "@errorObtainingLocation": { "type": "String", @@ -850,11 +775,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Ir para a sala nova", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupo", "@group": { "type": "String", @@ -926,11 +846,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identidade", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorar", "@ignore": { "type": "String", @@ -992,11 +907,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Convite para mim", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} convidou você para o FluffyChat.\n1. Visite fluffychat.im e instale o aplicativo\n2. Entre ou crie uma conta\n3. Abra o link do convite:\n{link}", "@inviteText": { "type": "String", @@ -1076,11 +986,6 @@ "type": "String", "placeholders": {} }, - "license": "Licença", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Claro", "@lightTheme": { "type": "String", @@ -1134,11 +1039,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Alterações de membros", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Mencionar", "@mention": { "type": "String", @@ -1246,11 +1146,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notificações ativadas para esta conta", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} usuários estão digitando…", "@numUsersTyping": { "type": "String", @@ -1350,11 +1245,6 @@ "type": "String", "placeholders": {} }, - "people": "Pessoas", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Selecione uma imagem", "@pickImage": { "type": "String", @@ -1374,11 +1264,6 @@ } } }, - "pleaseChoose": "Selecione", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Escolha um código", "@pleaseChooseAPasscode": { "type": "String", @@ -1472,11 +1357,6 @@ } } }, - "rejoin": "Entrar novamente", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Remover", "@remove": { "type": "String", @@ -1496,11 +1376,6 @@ } } }, - "removeDevice": "Remover dispositivo", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Desbanir da conversa", "@unbanFromChat": { "type": "String", @@ -1556,15 +1431,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Visto por {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Enviar", "@send": { "type": "String", @@ -1599,16 +1465,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Enviar original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Enviar figurinha", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Enviar vídeo", "@sendVideo": { "type": "String", @@ -1673,21 +1529,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Implantar emojis personalizados", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Enviar link de convite", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Configurar níveis de permissão", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Alterar estado", "@setStatus": { "type": "String", @@ -1722,11 +1563,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Entrada única", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Pular", "@skip": { "type": "String", @@ -1797,21 +1633,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Alternar favorito", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Alternar Silenciado", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Marcar lido/não lido", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Demasiadas requisições. Por favor, tente novamente mais tarde!", "@tooManyRequestsWarning": { "type": "String", @@ -1878,15 +1699,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 conversa não lida} other{{unreadCount} conversas não lidas}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} e mais {count} pessoas estão digitando…", "@userAndOthersAreTyping": { "type": "String", @@ -2011,11 +1823,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Plano de fundo:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Atenção!", "@warning": { "type": "String", @@ -2082,39 +1889,20 @@ "placeholders": {} }, "oneClientLoggedOut": "Um dos seus clientes foi desconectado", - "@oneClientLoggedOut": {}, "addAccount": "Adicionar conta", - "@addAccount": {}, "unverified": "Não verificado", - "@unverified": {}, "yourChatBackupHasBeenSetUp": "Seu backup de conversas foi configurado.", - "@yourChatBackupHasBeenSetUp": {}, "editBundlesForAccount": "Editar coleções para esta conta", - "@editBundlesForAccount": {}, "serverRequiresEmail": "Este servidor precisa validar seu e-mail para efetuar o cadastro.", - "@serverRequiresEmail": {}, "messageInfo": "Informações da mensagem", - "@messageInfo": {}, "sender": "Remetente", - "@sender": {}, - "publish": "Publicar", - "@publish": {}, "removeFromSpace": "Remover do espaço", - "@removeFromSpace": {}, "link": "Link", - "@link": {}, "start": "Iniciar", - "@start": {}, "repeatPassword": "Repita a senha", - "@repeatPassword": {}, "addToSpace": "Adicionar ao espaço", - "@addToSpace": {}, "sendOnEnter": "Enviar ao pressionar enter", - "@sendOnEnter": {}, "homeserver": "Servidor", - "@homeserver": {}, - "chatHasBeenAddedToThisSpace": "A conversa foi adicionada a este espaço", - "@chatHasBeenAddedToThisSpace": {}, "commandHint_clearcache": "Limpar dados temporários", "@commandHint_clearcache": { "type": "String", @@ -2136,54 +1924,19 @@ "description": "Usage hint for the command /dm" }, "scanQrCode": "Ler código QR", - "@scanQrCode": {}, - "openVideoCamera": "Abrir a câmera para um vídeo", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "addToBundle": "Adicionar à coleção", - "@addToBundle": {}, "removeFromBundle": "Remover desta coleção", - "@removeFromBundle": {}, "bundleName": "Nome da coleção", - "@bundleName": {}, "enableMultiAccounts": "(BETA) Ativar múltiplas contas neste dispositivo", - "@enableMultiAccounts": {}, "time": "Horário", - "@time": {}, "messageType": "Tipo da mensagem", - "@messageType": {}, "openGallery": "Abrir galeria", - "@openGallery": {}, - "addToSpaceDescription": "Selecione um espaço para adicionar esta conversa.", - "@addToSpaceDescription": {}, - "videoWithSize": "Vídeo ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "markAsRead": "Marcar como lido", - "@markAsRead": {}, "dismiss": "Descartar", - "@dismiss": {}, - "separateChatTypes": "Separar conversas diretas e grupos", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "openChat": "Abrir conversa", - "@openChat": {}, "reportUser": "Denunciar usuário", - "@reportUser": {}, "emojis": "Emojis", - "@emojis": {}, "placeCall": "Chamar", - "@placeCall": {}, "reactedWith": "{sender} reagiu com {reaction}", "@reactedWith": { "type": "String", @@ -2197,54 +1950,13 @@ } }, "confirmEventUnpin": "Tem certeza que quer desafixar o evento permanentemente?", - "@confirmEventUnpin": {}, "pinMessage": "Fixar na sala", - "@pinMessage": {}, "voiceCall": "Chamada de voz", - "@voiceCall": {}, "unsupportedAndroidVersion": "Versão Android sem suporte", - "@unsupportedAndroidVersion": {}, - "widgetNameError": "Forneça um nome de exibição.", - "@widgetNameError": {}, "unsupportedAndroidVersionLong": "Esta funcionalidade requer uma versão mais nova do Android. Verifique se há atualizações ou suporte ao LineageOS.", - "@unsupportedAndroidVersionLong": {}, - "emailOrUsername": "E-mail ou nome de usuário", - "@emailOrUsername": {}, "videoCallsBetaWarning": "Observe que chamadas de vídeo estão atualmente em teste. Podem não funcionar como esperado ou sequer funcionar em algumas plataformas.", - "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Vídeo chamadas experimentais", - "@experimentalVideoCalls": {}, - "widgetVideo": "Vídeo", - "@widgetVideo": {}, - "errorAddingWidget": "Erro ao adicionar o widget.", - "@errorAddingWidget": {}, - "addWidget": "Adicionar widget", - "@addWidget": {}, - "widgetEtherpad": "Anotação de texto", - "@widgetEtherpad": {}, - "widgetUrlError": "Isto não é uma URL válida.", - "@widgetUrlError": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Personalizado", - "@widgetCustom": {}, - "widgetName": "Nome", - "@widgetName": {}, - "switchToAccount": "Alternar para a conta {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Próxima conta", - "@nextAccount": {}, - "previousAccount": "Conta anterior", - "@previousAccount": {}, "youRejectedTheInvitation": "Você rejeitou o convite", - "@youRejectedTheInvitation": {}, "youBannedUser": "Você baniu {user}", "@youBannedUser": { "placeholders": { @@ -2278,9 +1990,7 @@ } }, "youAcceptedTheInvitation": "👍 Você aceitou o convite", - "@youAcceptedTheInvitation": {}, "youJoinedTheChat": "Você entrou na conversa", - "@youJoinedTheChat": {}, "youKicked": "👞 Você expulsou {user}", "@youKicked": { "placeholders": { @@ -2315,13 +2025,8 @@ } }, "pleaseEnterRecoveryKeyDescription": "Para desbloquear as suas mensagens antigas, digite a sua chave de recuperação gerada numa sessão prévia. Sua chave de recuperação NÃO é sua senha.", - "@pleaseEnterRecoveryKeyDescription": {}, - "indexedDbErrorLong": "Infelizmente, o armazenamento de mensagens não é ativado por padrão no modo privado.\nVisite\n- about:config\n- atribua \"true\" a \"dom.indexedDB.privateBrowsing.enabled\"\nSe não fizer isto, não será possível executar o FluffyChat.", - "@indexedDbErrorLong": {}, "users": "Usuários", - "@users": {}, "confirmMatrixId": "Confirme seu ID Matrix para apagar sua conta.", - "@confirmMatrixId": {}, "supposedMxid": "Isto deveria ser {mxid}", "@supposedMxid": { "type": "String", @@ -2331,18 +2036,11 @@ } } }, - "dehydrateTor": "Usuários TOR: Exportar sessão", - "@dehydrateTor": {}, "recoveryKey": "Chave de recuperação", - "@recoveryKey": {}, "recoveryKeyLost": "Perdeu a chave de recuperação?", - "@recoveryKeyLost": {}, "commandHint_cuddle": "Enviar um afago", - "@commandHint_cuddle": {}, "commandHint_hug": "Enviar um abraço", - "@commandHint_hug": {}, "commandHint_googly": "Enviar olhos arregalados", - "@commandHint_googly": {}, "googlyEyesContent": "{senderName} enviou olhos arregalados", "@googlyEyesContent": { "type": "String", @@ -2362,59 +2060,19 @@ } }, "commandHint_markasdm": "Marcar como sala de mensagens diretas para o ID Matrix fornecido", - "@commandHint_markasdm": {}, "commandHint_markasgroup": "Marcar como grupo", - "@commandHint_markasgroup": {}, - "hydrateTor": "Usuários TOR: Importar sessão", - "@hydrateTor": {}, - "hydrateTorLong": "Você exportou sua última sessão no TOR? Importe ela rapidamente e continue conversando.", - "@hydrateTorLong": {}, "hydrate": "Restaurar a partir de um arquivo de backup", - "@hydrate": {}, - "pleaseEnterRecoveryKey": "Digite sua chave de recuperação:", - "@pleaseEnterRecoveryKey": {}, - "indexedDbErrorTitle": "Problemas no modo privado", - "@indexedDbErrorTitle": {}, "storeInSecureStorageDescription": "Guardar a chave de recuperação no armazenamento seguro deste dispositivo.", - "@storeInSecureStorageDescription": {}, "saveKeyManuallyDescription": "Salvar esta chave manualmente via compartilhamento do sistema ou área de transferência.", - "@saveKeyManuallyDescription": {}, "storeInAndroidKeystore": "Guardar no cofre do Android (KeyStore)", - "@storeInAndroidKeystore": {}, "storeInAppleKeyChain": "Guardar no chaveiro da Apple", - "@storeInAppleKeyChain": {}, "storeSecurlyOnThisDevice": "Guardar de modo seguro neste dispositivo", - "@storeSecurlyOnThisDevice": {}, "user": "Usuário", - "@user": {}, "custom": "Personalizado", - "@custom": {}, "foregroundServiceRunning": "Esta notificação aparece quando o serviço de primeiro plano está sendo executado.", - "@foregroundServiceRunning": {}, - "callingPermissions": "Permissões de chamada", - "@callingPermissions": {}, - "callingAccount": "Conta para chamadas", - "@callingAccount": {}, - "callingAccountDetails": "Permitir que o FluffyChat use o app de chamadas nativo do Android.", - "@callingAccountDetails": {}, - "appearOnTop": "Aparecer no topo", - "@appearOnTop": {}, - "appearOnTopDetails": "Permite que o app apareça no topo (desnecessário caso o FluffyChat já esteja configurado como conta para chamadas)", - "@appearOnTopDetails": {}, - "otherCallingPermissions": "Microfone, câmera e outras permissões do FluffyChat", - "@otherCallingPermissions": {}, "newGroup": "Novo grupo", - "@newGroup": {}, "newSpace": "Novo espaço", - "@newSpace": {}, - "enterSpace": "Abrir espaço", - "@enterSpace": {}, - "enterRoom": "Abrir sala", - "@enterRoom": {}, "allSpaces": "Todos os espaços", - "@allSpaces": {}, - "hideUnimportantStateEvents": "Ocultar eventos de estado desimportantes", - "@hideUnimportantStateEvents": {}, "countFiles": "{count} arquivos", "@countFiles": { "placeholders": { @@ -2424,91 +2082,38 @@ } }, "doNotShowAgain": "Não mostrar novamente", - "@doNotShowAgain": {}, "unlockOldMessages": "Desbloquear mensagens antigas", - "@unlockOldMessages": {}, "dehydrate": "Exportar sessão e apagar dispositivo", - "@dehydrate": {}, "dehydrateWarning": "Esta ação não pode ser desfeita. Certifique-se de que o arquivo de backup está guardado e seguro.", - "@dehydrateWarning": {}, - "dehydrateTorLong": "Para usuários TOR, é recomendado exportar a sessão antes de fechar a janela.", - "@dehydrateTorLong": {}, "whyIsThisMessageEncrypted": "Por que não consigo ler esta mensagem?", - "@whyIsThisMessageEncrypted": {}, "screenSharingTitle": "compartilhamento de tela", - "@screenSharingTitle": {}, "screenSharingDetail": "Você está compartilhando sua tela no FluffyChat", - "@screenSharingDetail": {}, - "numChats": "{number} conversas", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "noKeyForThisMessage": "Isto pode ocorrer caso a mensagem tenha sido enviada antes de você ter se conectado à sua conta com este dispositivo.\n\nTambém é possível que o remetente tenha bloqueado o seu dispositivo ou ocorreu algum problema com a conexão.\n\nVocê consegue ler as mensagens em outra sessão? Então, pode transferir as mensagens de lá! Vá em Configurações > Dispositivos e confira se os dispositivos verificaram um ao outro. Quando abrir a sala da próxima vez e ambas as sessões estiverem abertas, as chaves serão transmitidas automaticamente.\n\nNão gostaria de perder suas chaves ao desconectar ou trocar de dispositivos? Certifique-se que o backup de conversas esteja ativado nas configurações.", - "@noKeyForThisMessage": {}, - "allRooms": "Todas as conversas em grupo", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "notAnImage": "Não é um arquivo de imagem.", - "@notAnImage": {}, "importNow": "Importar agora", - "@importNow": {}, "importEmojis": "Importar emojis", - "@importEmojis": {}, "importFromZipFile": "Importar de arquivo .zip", - "@importFromZipFile": {}, "sendTypingNotifications": "Enviar indicadores de digitação", - "@sendTypingNotifications": {}, - "startFirstChat": "Inicie sua primeira conversa", - "@startFirstChat": {}, "exportEmotePack": "Exportar pacote de emojis como .zip", - "@exportEmotePack": {}, "replace": "Substituir", - "@replace": {}, "jumpToLastReadMessage": "Pular para a última mensagem lida", - "@jumpToLastReadMessage": {}, "reportErrorDescription": "😭 Ah, não. Algo deu errado. Se quiser, pode relatar isto aos desenvolvedores.", - "@reportErrorDescription": {}, "setColorTheme": "Aplicar paleta de cor:", - "@setColorTheme": {}, "banUserDescription": "O usuário será banido da conversa e não poderá participar novamente até que sejam desbanidos.", - "@banUserDescription": {}, "removeDevicesDescription": "Você será desconectado deste dispositivo e não poderá mais receber mensagens.", - "@removeDevicesDescription": {}, "tryAgain": "Tentar novamente", - "@tryAgain": {}, "unbanUserDescription": "O usuário poderá entrar novamente na conversa, caso tente.", - "@unbanUserDescription": {}, "messagesStyle": "Mensagens:", - "@messagesStyle": {}, "newSpaceDescription": "Os espaços permitem que você consolide suas conversas e construa comunidades públicas ou privadas.", - "@newSpaceDescription": {}, "chatDescription": "Descrição da conversa", - "@chatDescription": {}, "encryptThisChat": "Criptografar esta conversa", - "@encryptThisChat": {}, "reopenChat": "Reabrir conversa", - "@reopenChat": {}, "pushNotificationsNotAvailable": "Notificações push não estão disponíveis", - "@pushNotificationsNotAvailable": {}, "invalidServerName": "Nome do servidor inválido", - "@invalidServerName": {}, "chatPermissions": "Permissões da conversa", - "@chatPermissions": {}, - "signInWithPassword": "Conectar com senha", - "@signInWithPassword": {}, "makeAdminDescription": "Assim que promover este usuário a administrador, não poderá desfazer isto e ele terá as mesmas permissões que você.", - "@makeAdminDescription": {}, "setChatDescription": "Configurar descrição da conversa", - "@setChatDescription": {}, "noOtherDevicesFound": "Nenhum outro dispositivo encontrado", - "@noOtherDevicesFound": {}, "redactedBy": "Apagado por {username}", "@redactedBy": { "type": "String", @@ -2518,25 +2123,10 @@ } } }, - "signInWith": "Conectar com {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "fileIsTooBigForServer": "Não foi possível enviar! O servidor suporta anexos somente até {max}.", - "@fileIsTooBigForServer": {}, "readUpToHere": "Lido até aqui", - "@readUpToHere": {}, "optionalRedactReason": "(Opcional) Motivo para apagar esta mensagem.", - "@optionalRedactReason": {}, "archiveRoomDescription": "A conversa será movida para o arquivo. Outros usuários verão que você deixou a conversa.", - "@archiveRoomDescription": {}, - "inviteContactToGroupQuestion": "Deseja convidar {contact} para a conversa \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, "redactedByBecause": "Apagado por {username}, pois: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2559,13 +2149,8 @@ } }, "redactMessageDescription": "A mensagem será apagada para todos os participantes desta conversa. Isto não poderá ser desfeito.", - "@redactMessageDescription": {}, "invalidInput": "Entrada inválida!", - "@invalidInput": {}, "report": "relatar", - "@report": {}, - "addChatDescription": "Adicionar uma descrição à conversa...", - "@addChatDescription": {}, "hasKnocked": "🚪 {user} bateu na porta", "@hasKnocked": { "placeholders": { @@ -2575,11 +2160,8 @@ } }, "openLinkInBrowser": "Abrir link no navegador", - "@openLinkInBrowser": {}, "disableEncryptionWarning": "Por razões de segurança, não é possível desativar a criptografada uma vez ativada.", - "@disableEncryptionWarning": {}, "directChat": "Conversa direta", - "@directChat": {}, "wrongPinEntered": "PIN incorreto! Tente novamente em {seconds} segundos...", "@wrongPinEntered": { "type": "String", @@ -2590,9 +2172,6 @@ } }, "inviteGroupChat": "📨 Convite para conversa em grupo", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Convite para conversa privada", - "@invitePrivateChat": {}, "wasDirectChatDisplayName": "Conversa vazia (era {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2603,62 +2182,31 @@ } }, "noChatDescriptionYet": "Nenhuma descrição para a conversa foi criada ainda.", - "@noChatDescriptionYet": {}, "learnMore": "Saiba mais", - "@learnMore": {}, "chatDescriptionHasBeenChanged": "Descrição da conversa alterada", - "@chatDescriptionHasBeenChanged": {}, "roomUpgradeDescription": "A conversa será recriada com a nova versão de sala. Todos participantes será notificados e terão que migrar para a nova sala. Você pode encontrar mais informações sobre versões de sala em https://spec.matrix.org/latest/room/", - "@roomUpgradeDescription": {}, "pleaseEnterANumber": "Digite um número maior que 0", - "@pleaseEnterANumber": {}, - "profileNotFound": "O usuário não foi encontrado neste servidor. Talvez um problema de conexão ou o usuário não existe.", - "@profileNotFound": {}, "jump": "Pular", - "@jump": {}, "sorryThatsNotPossible": "Desculpe... isto não é possível", - "@sorryThatsNotPossible": {}, "shareInviteLink": "Compartilhar link de convite", - "@shareInviteLink": {}, "deviceKeys": "Chaves de dispositivo:", - "@deviceKeys": {}, "emoteKeyboardNoRecents": "Emojis recentes aparecem aqui...", "@emoteKeyboardNoRecents": { "type": "String", "placeholders": {} }, - "setTheme": "Aplicar tema:", - "@setTheme": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Tente novamente mais tarde ou escolha um servidor diferente.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "createGroup": "Criar grupo", - "@createGroup": {}, "noBackupWarning": "Atenção! Se não ativar o backup de conversas, você perderá acesso a suas mensagens criptografadas. É altamente recomendável ativar o backup antes de sair.", - "@noBackupWarning": {}, "kickUserDescription": "O usuário foi expulso da conversa, mas não banido. Em conversas públicas, o usuário pode entrar novamente a qualquer momento.", - "@kickUserDescription": {}, "invite": "Convidar", - "@invite": {}, "blockListDescription": "Você pode bloquear usuários que estejam te perturbando. Você não receberá mensagens ou convites de usuários na sua lista pessoal de bloqueios.", - "@blockListDescription": {}, "createGroupAndInviteUsers": "Criar um grupo e convidar pessoas", - "@createGroupAndInviteUsers": {}, "thisDevice": "Este dispositivo:", - "@thisDevice": {}, - "startConversation": "Iniciar uma conversa", - "@startConversation": {}, "publicSpaces": "Espaços públicos", - "@publicSpaces": {}, "blockedUsers": "Usuários bloqueados", - "@blockedUsers": {}, "passwordIsWrong": "A senha digitada está incorreta", - "@passwordIsWrong": {}, "pleaseEnterYourCurrentPassword": "Digite sua senha atual", - "@pleaseEnterYourCurrentPassword": {}, "groupCanBeFoundViaSearch": "Grupos podem ser encontrados por pesquisa", - "@groupCanBeFoundViaSearch": {}, - "publicLink": "Link público", - "@publicLink": {}, "noUsersFoundWithQuery": "Infelizmente, não foi encontrado usuário com \"{query}\". Verifique se digitou corretamente.", "@noUsersFoundWithQuery": { "type": "String", @@ -2669,68 +2217,26 @@ } }, "block": "Bloquear", - "@block": {}, "nothingFound": "Nada foi encontrado...", - "@nothingFound": {}, "yourGlobalUserIdIs": "Seu ID global de usuário é: ", - "@yourGlobalUserIdIs": {}, - "decline": "Rejeitar", - "@decline": {}, "newPassword": "Nova senha", - "@newPassword": {}, "passwordsDoNotMatch": "As senhas não correspondem", - "@passwordsDoNotMatch": {}, "commandHint_sendraw": "Enviar JSON puro", - "@commandHint_sendraw": {}, "wrongRecoveryKey": "Desculpe... esta não parece ser a chave de recuperação correta.", - "@wrongRecoveryKey": {}, - "subspace": "Subespaço", - "@subspace": {}, "select": "Selecionar", - "@select": {}, "pleaseChooseAStrongPassword": "Escolha uma senha forte", - "@pleaseChooseAStrongPassword": {}, "blockUsername": "Ignorar nome de usuário", - "@blockUsername": {}, "addChatOrSubSpace": "Adicionar conversa ou subespaço", - "@addChatOrSubSpace": {}, "groupName": "Nome do grupo", - "@groupName": {}, "leaveEmptyToClearStatus": "Deixe em branco para limpar seu estado.", - "@leaveEmptyToClearStatus": {}, "joinSpace": "Entrar no espaço", - "@joinSpace": {}, "searchForUsers": "Pesquisar por @usuários...", - "@searchForUsers": {}, "databaseMigrationTitle": "O banco de dados está otimizado", - "@databaseMigrationTitle": {}, "searchChatsRooms": "Pesquisar por #conversas, @usuários...", - "@searchChatsRooms": {}, "databaseMigrationBody": "Aguarde. Isto pode demorar um pouco.", - "@databaseMigrationBody": {}, - "youInvitedToBy": "📩 Você foi convidado através do link para:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "forwardMessageTo": "Encaminhar mensagem para {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "formattedMessagesDescription": "Exibir conteúdo de mensagem rico, como texto em negrito usando markdown.", - "@formattedMessagesDescription": {}, "verifyOtherUser": "🔐 Verificar outro usuário", - "@verifyOtherUser": {}, "verifyOtherDevice": "🔐 Verificar outro dispositivo", - "@verifyOtherDevice": {}, "acceptedKeyVerification": "{sender} aceitou a verificação de chaves", "@acceptedKeyVerification": { "type": "String", @@ -2750,21 +2256,7 @@ } }, "transparent": "Transparente", - "@transparent": {}, - "databaseBuildErrorBody": "Não foi possível construir o banco de dados SQLite. O app tentará utilizar o banco de dados legado por enquanto. Relate este erro aos desenvolvedores em {url}. A mensagem de erro é: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "Ocorreu um erro enquanto o app era iniciado", - "@initAppError": {}, "restoreSessionBody": "O app tentará agora restaurar sua sessão a partir do backup. Relate isto ao desenvolvedor em {url}. A mensagem de erro é: {error}", "@restoreSessionBody": { "type": "String", @@ -2778,27 +2270,16 @@ } }, "sendReadReceipts": "Enviar recibos de leitura", - "@sendReadReceipts": {}, "sendTypingNotificationsDescription": "Outros participantes nesta conversa podem ver quando você está digitando uma nova mensagem.", - "@sendTypingNotificationsDescription": {}, "formattedMessages": "Mensagens formatadas", - "@formattedMessages": {}, - "presenceStyle": "Presença:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Mostrar as mensagens de estado de outros usuários", "@presencesToggle": { "type": "String", "placeholders": {} }, "commandHint_ignore": "Ignorar o ID Matrix especificado", - "@commandHint_ignore": {}, "commandHint_unignore": "Parar de ignorar o ID Matrix especificado", - "@commandHint_unignore": {}, "hidePresences": "Ocultar lista de estado?", - "@hidePresences": {}, "sessionLostBody": "Sua sessão foi desconectada. Relate este ao desenvolvedor em {url}. A mensagem de erro é: {error}", "@sessionLostBody": { "type": "String", @@ -2812,9 +2293,7 @@ } }, "sendReadReceiptsDescription": "Outros participantes nesta conversa podem ver quando você tiver lido uma mensagem.", - "@sendReadReceiptsDescription": {}, "verifyOtherUserDescription": "Se você verificar outro usuário, você terá certeza que você conhece com quem está conversando. 💪\n\nAo iniciar uma verificação, você e o outro usuário receberão um pop-up no app. Então vocês receberão uma série de emojis ou números para comparar um com o outro.\n\nA melhor maneira de fazer este procedimento é se encontrar pessoalmente ou através de uma chamada de vídeo. 👭", - "@verifyOtherUserDescription": {}, "requestedKeyVerification": "{sender} solicitou uma verificação de chaves", "@requestedKeyVerification": { "type": "String", @@ -2825,7 +2304,6 @@ } }, "verifyOtherDeviceDescription": "Ao verificar outro dispositivo, os dispositivos poderão trocar chaves, aumentando sua segurança. 💪 Ao iniciar a verificação, um pop-up aparecerá no app em ambos os aparelhos. Então você verá uma série de emojis ou números que você terá que comparar um com o outro. É melhor fazer esse procedimento com ambos os dispositivos em mãos antes de começar a verificação. 🤳", - "@verifyOtherDeviceDescription": {}, "canceledKeyVerification": "{sender} cancelou a verificação de chaves", "@canceledKeyVerification": { "type": "String", @@ -2854,11 +2332,8 @@ } }, "stickers": "Figurinhas", - "@stickers": {}, "discover": "Explorar", - "@discover": {}, "incomingMessages": "Mensagens recebidas", - "@incomingMessages": {}, "unreadChatsInApp": "{appname}: {unread} conversas não lidas", "@unreadChatsInApp": { "type": "String", @@ -2872,35 +2347,17 @@ } }, "appLockDescription": "Bloquear o app com um código PIN quando não estiver usando", - "@appLockDescription": {}, "accessAndVisibilityDescription": "Quem pode entrar nesta conversa e como a conversa pode ser descoberta.", - "@accessAndVisibilityDescription": {}, "calls": "Chamadas", - "@calls": {}, "customEmojisAndStickers": "Emojis e stickers customizados", - "@customEmojisAndStickers": {}, "customEmojisAndStickersBody": "Adicionar ou compartilhar emojis ou stickers customizados que podem ser usados em qualquer conversa.", - "@customEmojisAndStickersBody": {}, "hideRedactedMessages": "Ocultar mensagens apagadas", - "@hideRedactedMessages": {}, "hideRedactedMessagesBody": "Se alguém apagar uma mensagem, esta mensagem não será mais visível na conversa.", - "@hideRedactedMessagesBody": {}, "hideInvalidOrUnknownMessageFormats": "Ocultar formatos de mensagem inválidos ou desconhecidos", - "@hideInvalidOrUnknownMessageFormats": {}, - "hideMemberChangesInPublicChats": "Ocultar mudanças de membro em conversas públicas", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Não mostre se alguém entrou ou saiu da conversa para melhorar a legibilidade.", - "@hideMemberChangesInPublicChatsBody": {}, "overview": "Visão geral", - "@overview": {}, - "notifyMeFor": "Notificar me para", - "@notifyMeFor": {}, "usersMustKnock": "Usuários devem bater na porta", - "@usersMustKnock": {}, "noOneCanJoin": "Ninguém pode entrar", - "@noOneCanJoin": {}, "knocking": "Batendo na porta", - "@knocking": {}, "chatCanBeDiscoveredViaSearchOnServer": "A conversa pode ser descoberta por pesquisa em {server}", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2911,45 +2368,17 @@ } }, "publicChatAddresses": "Endereços de conversas públicas", - "@publicChatAddresses": {}, "thereAreCountUsersBlocked": "Nesse momento, há {count} usuários bloqueados.", "@thereAreCountUsersBlocked": { "type": "String", "count": {} }, "globalChatId": "ID global de conversa", - "@globalChatId": {}, "accessAndVisibility": "Acesso e visibilidade", - "@accessAndVisibility": {}, "passwordRecoverySettings": "Configurações de recuperação de senha", - "@passwordRecoverySettings": {}, - "userWouldLikeToChangeTheChat": "{user} gostaria de entrar na conversa.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Nenhum link público foi criado ainda", - "@noPublicLinkHasBeenCreatedYet": {}, - "userRole": "Cargo do usuário", - "@userRole": {}, - "minimumPowerLevel": "{level} é o nível mínimo de poder.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "noDatabaseEncryption": "A criptografia do banco de dados não é suportada nesta plataforma", - "@noDatabaseEncryption": {}, "createNewAddress": "Criar um novo endereço", - "@createNewAddress": {}, "knock": "Bater na porta", - "@knock": {}, "searchIn": "Procurar na conversa {chat}...", "@searchIn": { "type": "String", @@ -2960,63 +2389,34 @@ } }, "restricted": "Restrito", - "@restricted": {}, "knockRestricted": "Bater na porta restrito", - "@knockRestricted": {}, "searchMore": "Pesquisar mais...", - "@searchMore": {}, "gallery": "Galeria", - "@gallery": {}, "files": "Arquivos", - "@files": {}, "more": "Mais", - "@more": {}, "deletePushRuleCanNotBeUndone": "Se você apagar esta configuração de notificação, isso não poderá ser desfeito.", - "@deletePushRuleCanNotBeUndone": {}, "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, - "setPermissionsLevelDescription": "Selecione um cargo pré-definido abaixo ou digite um nível de permissão personalizado entre 0 e 100.", - "@setPermissionsLevelDescription": {}, "shareKeysWith": "Compartilhar chaves com...", - "@shareKeysWith": {}, - "setCustomPermissionLevel": "Configurar nível personalizado de permissão", - "@setCustomPermissionLevel": {}, "ignoreUser": "Ignorar usuário", - "@ignoreUser": {}, "contentNotificationSettings": "Configurações de notificações de conteúdo", - "@contentNotificationSettings": {}, "generalNotificationSettings": "Configurações de notificações gerais", - "@generalNotificationSettings": {}, "notificationRuleContainsUserNameDescription": "Notifica o usuário quando a mensagem contém o seu nome de usuário.", - "@notificationRuleContainsUserNameDescription": {}, "notificationRuleMaster": "Silenciar todas as notificações", - "@notificationRuleMaster": {}, "notificationRuleMasterDescription": "Sobrescreve todas as outras regras e desativa todas as notificações.", - "@notificationRuleMasterDescription": {}, "notificationRuleContainsDisplayName": "Contém o nome de exibição", - "@notificationRuleContainsDisplayName": {}, "notificationRuleRoomnotif": "Notificação de sala", - "@notificationRuleRoomnotif": {}, "notificationRuleIsRoomMentionDescription": "Notifica o usuário quando há uma menção de sala.", - "@notificationRuleIsRoomMentionDescription": {}, "notificationRuleRoomnotifDescription": "Notifica o usuário quando uma mensagem contém '@room'.", - "@notificationRuleRoomnotifDescription": {}, "notificationRuleTombstone": "Morte", - "@notificationRuleTombstone": {}, "notificationRuleReaction": "Reação", - "@notificationRuleReaction": {}, "notificationRuleSuppressEditsDescription": "Omite notificações de mensagens editadas.", - "@notificationRuleSuppressEditsDescription": {}, "notificationRuleEncryptedRoomOneToOneDescription": "Notifica o usuário de mensagens em salas criptografas de 2 pessoas.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, "notificationRuleRoomOneToOne": "Sala de 2 pessoas", - "@notificationRuleRoomOneToOne": {}, "notificationRuleMessageDescription": "Notifica o usuário de mensagens gerais.", - "@notificationRuleMessageDescription": {}, "notificationRuleEncrypted": "Criptografado", - "@notificationRuleEncrypted": {}, "unknownPushRule": "Regra de push desconhecida '{rule}'", "@unknownPushRule": { "type": "String", @@ -3027,25 +2427,15 @@ } }, "notificationRuleServerAclDescription": "Omite notificações de eventos de ACL de servidor.", - "@notificationRuleServerAclDescription": {}, "unread": "Não lido", - "@unread": {}, "changeTheCanonicalRoomAlias": "Alterar o endereço público principal da conversa", - "@changeTheCanonicalRoomAlias": {}, "doesNotSeemToBeAValidHomeserver": "Não parece ser um servidor compatível. URL errada?", - "@doesNotSeemToBeAValidHomeserver": {}, "website": "Site", - "@website": {}, "compress": "Comprimir", - "@compress": {}, "invalidUrl": "URL inválida", - "@invalidUrl": {}, "appWantsToUseForLoginDescription": "Aqui, você permite que o app e o site compartilhem informações sobre você.", - "@appWantsToUseForLoginDescription": {}, "notificationRuleMemberEvent": "Evento de membro", - "@notificationRuleMemberEvent": {}, "crossVerifiedDevicesIfEnabled": "Dispositivos verificados por ambos se ativado", - "@crossVerifiedDevicesIfEnabled": {}, "countInvited": "{count} convidados", "@countInvited": { "type": "String", @@ -3056,7 +2446,6 @@ } }, "checkList": "Lista de tarefas", - "@checkList": {}, "synchronizingPleaseWaitCounter": " Sincronizando… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -3075,7 +2464,6 @@ } }, "markAsUnread": "Marcar como não lido", - "@markAsUnread": {}, "updateInstalled": "🎉 Atualização da versão {version} instalada!", "@updateInstalled": { "type": "String", @@ -3086,39 +2474,21 @@ } }, "changelog": "Registro de mudanças", - "@changelog": {}, "sendCanceled": "Envio cancelado", - "@sendCanceled": {}, "unableToJoinChat": "Não foi possível entrar na conversa. Talvez a outra pessoa já fechou a conversa.", - "@unableToJoinChat": {}, - "whatIsAHomeserver": "O que é um servidor?", - "@whatIsAHomeserver": {}, "prepareSendingAttachment": "Preparando o envio do anexo...", - "@prepareSendingAttachment": {}, "sendingAttachment": "Enviando o anexo...", - "@sendingAttachment": {}, "noticeChatBackupDeviceVerification": "Observação: Quando você conecta todos os seus dispositivos ao backup de conversas, eles são verificados automaticamente.", - "@noticeChatBackupDeviceVerification": {}, "continueText": "Continuar", - "@continueText": {}, "blur": "Borrar:", - "@blur": {}, "opacity": "Opacidade:", - "@opacity": {}, "setWallpaper": "Configurar plano de fundo", - "@setWallpaper": {}, "noContactInformationProvided": "O servidor não fornece nenhuma informação válida de contato", - "@noContactInformationProvided": {}, "contactServerAdmin": "Contatar o administrador do servidor", - "@contactServerAdmin": {}, "contactServerSecurity": "Contatar a segurança do servidor", - "@contactServerSecurity": {}, "supportPage": "Página de ajuda", - "@supportPage": {}, "italicText": "Texto em itálico", - "@italicText": {}, "strikeThrough": "Risco", - "@strikeThrough": {}, "appWantsToUseForLogin": "Usar '{server}' para conectar", "@appWantsToUseForLogin": { "type": "String", @@ -3129,27 +2499,16 @@ } }, "open": "Abrir", - "@open": {}, "roomNotificationSettings": "Configurações de notificações de sala", - "@roomNotificationSettings": {}, "userSpecificNotificationSettings": "Configurações de notificações específicas ao usuário", - "@userSpecificNotificationSettings": {}, "otherNotificationSettings": "Configurações de outras notificações", - "@otherNotificationSettings": {}, "notificationRuleContainsUserName": "Contém o nome de usuário", - "@notificationRuleContainsUserName": {}, "notificationRuleSuppressNotices": "Omitir mensagens automáticas", - "@notificationRuleSuppressNotices": {}, "notificationRuleInviteForMe": "Convite para mim", - "@notificationRuleInviteForMe": {}, "notificationRuleMemberEventDescription": "Omite todas as notificações de eventos de membro.", - "@notificationRuleMemberEventDescription": {}, "notificationRuleIsUserMention": "Menção de usuário", - "@notificationRuleIsUserMention": {}, "notificationRuleContainsDisplayNameDescription": "Notifica o usuário quando uma mensagem contém seu nome de exibição.", - "@notificationRuleContainsDisplayNameDescription": {}, "notificationRuleCall": "Chamada", - "@notificationRuleCall": {}, "sentVoiceMessage": "🎙️ {duration} - Mensagem de voz de {sender}", "@sentVoiceMessage": { "type": "String", @@ -3163,15 +2522,10 @@ } }, "crossVerifiedDevices": "Dispositivos verificados por ambos", - "@crossVerifiedDevices": {}, "takeAPhoto": "Tirar uma foto", - "@takeAPhoto": {}, "youHaveKnocked": "Bateram na sua porta", - "@youHaveKnocked": {}, "changeGeneralChatSettings": "Alterar configurações gerais de conversa", - "@changeGeneralChatSettings": {}, "inviteOtherUsers": "Convidar outros usuários para esta conversa", - "@inviteOtherUsers": {}, "adminLevel": "{level} - Administrador", "@adminLevel": { "type": "String", @@ -3182,9 +2536,7 @@ } }, "changeTheChatPermissions": "Alterar as permissões da conversa", - "@changeTheChatPermissions": {}, "changeTheVisibilityOfChatHistory": "Alterar a visibilidade do histórico de conversa", - "@changeTheVisibilityOfChatHistory": {}, "sendImages": "Enviar {count} imagens", "@sendImages": { "type": "String", @@ -3199,18 +2551,11 @@ "type": "String", "space": {} }, - "discoverHomeservers": "Explorar servidores", - "@discoverHomeservers": {}, "loginWithMatrixId": "Conectar com ID Matrix", - "@loginWithMatrixId": {}, "calculatingFileSize": "Calculando o tamanho do arquivo...", - "@calculatingFileSize": {}, "compressVideo": "Comprimindo o vídeo...", - "@compressVideo": {}, "generatingVideoThumbnail": "Gerando a miniatura do vídeo...", - "@generatingVideoThumbnail": {}, "oneOfYourDevicesIsNotVerified": "Um dos seus dispositivos não está verificado", - "@oneOfYourDevicesIsNotVerified": {}, "serverLimitReached": "Limite do servidor alcançado! Esperando {seconds} segundos...", "@serverLimitReached": { "type": "integer", @@ -3221,9 +2566,7 @@ } }, "manageAccount": "Gerenciar conta", - "@manageAccount": {}, "newChatRequest": "📩 Nova solicitação de conversa", - "@newChatRequest": {}, "userLevel": "{level} - Usuário", "@userLevel": { "type": "String", @@ -3234,25 +2577,14 @@ } }, "enterNewChat": "Abrir a conversa nova", - "@enterNewChat": {}, "notificationRuleSuppressNoticesDescription": "Omite notificações de clientes automatizados, como bots.", - "@notificationRuleSuppressNoticesDescription": {}, "notificationRuleInviteForMeDescription": "Notifica o usuário quando for convidado para uma sala.", - "@notificationRuleInviteForMeDescription": {}, "approve": "Aprovar", - "@approve": {}, - "homeserverDescription": "Todos os seus dados são armazenados no servidor, parecido como um provedor de e-mail. Pode escolher qual servidor quer usar, enquanto ainda conversa com todo mundo. Aprenda mais em https://matrix.org.", - "@homeserverDescription": {}, "notificationRuleEncryptedRoomOneToOne": "Sala criptografada de 2 pessoas", - "@notificationRuleEncryptedRoomOneToOne": {}, "pleaseWaitUntilInvited": "Aguarde até que alguém da sala te convide.", - "@pleaseWaitUntilInvited": {}, "waitingForServer": "Aguardando o servidor...", - "@waitingForServer": {}, "notificationRuleEncryptedDescription": "Notifica o usuário de mensagens em salas criptografadas.", - "@notificationRuleEncryptedDescription": {}, "sendRoomNotifications": "Enviar notificações de @room", - "@sendRoomNotifications": {}, "sendingAttachmentCountOfCount": "Enviando o {index}° anexo de {length}...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3266,19 +2598,11 @@ } }, "welcomeText": "Olá! 👋 Este é o FluffyChat. Você pode se conectar com qualquer servidor que é compatível com o https://matrix.org. E então conversar com qualquer um. É uma rede gigante e descentralizada de conversa!", - "@welcomeText": {}, "notificationRuleRoomServerAclDescription": "Omite notificações de listas de controle de acesso de servidor de uma sala (ACL).", - "@notificationRuleRoomServerAclDescription": {}, - "appIntroduction": "O FluffyChat permite que você converse com os seus amigos entre mensageiros diferentes. Aprenda mais em https://matrix.org ou toque em *Continuar*.", - "@appIntroduction": {}, "notificationRuleIsUserMentionDescription": "Notifica o usuário quando é mencionado diretamente em uma mensagem.", - "@notificationRuleIsUserMentionDescription": {}, "notificationRuleSuppressEdits": "Omitir edições", - "@notificationRuleSuppressEdits": {}, "shareKeysWithDescription": "Quais dispositivos devem ser confiados para que possam ler suas mensagens em conversas criptografas?", - "@shareKeysWithDescription": {}, "allDevices": "Todos os dispositivos", - "@allDevices": {}, "aboutHomeserver": "Sobre {homeserver}", "@aboutHomeserver": { "type": "String", @@ -3289,43 +2613,16 @@ } }, "swipeRightToLeftToReply": "Deslizar da direita pra esquerda para responder", - "@swipeRightToLeftToReply": {}, "verifiedDevicesOnly": "Somente dispositivos verificados", - "@verifiedDevicesOnly": {}, "boldText": "Texto em negrito", - "@boldText": {}, "recordAVideo": "Gravar um vídeo", - "@recordAVideo": {}, "optionalMessage": "(Opcional) mensagem...", - "@optionalMessage": {}, - "joinedChats": "Conversas que entrou", - "@joinedChats": {}, "notSupportedOnThisDevice": "Não há suporte neste dispositivo", - "@notSupportedOnThisDevice": {}, - "normalUser": "Usuário normal", - "@normalUser": {}, "commandHint_roomupgrade": "Atualizar esta sala para a versão de sala especificada", - "@commandHint_roomupgrade": {}, - "countChatsAndCountParticipants": "{chats} conversas e {participants} participantes", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Mais nenhuma conversa foi encontrada...", - "@noMoreChatsFound": {}, "noChatsFoundHere": "Nenhuma conversa encontrada aqui ainda. Inicie uma nova conversa com alguém usando o botão abaixo. ⤵️", - "@noChatsFoundHere": {}, "space": "Espaço", - "@space": {}, "spaces": "Espaços", - "@spaces": {}, "moderatorLevel": "{level} - Moderador", "@moderatorLevel": { "type": "String", @@ -3336,73 +2633,35 @@ } }, "changeTheDescriptionOfTheGroup": "Alterar a descrição da conversa", - "@changeTheDescriptionOfTheGroup": {}, "chatPermissionsDescription": "Configurar qual o nível de poder é necessário para certas ações nesta conversa. Os níveis de poder 0, 50, e 100 são normalmente para representar usuários, moderadores, e administradores, mas qualquer configuração é possível.", - "@chatPermissionsDescription": {}, "serverInformation": "Informações do servidor:", - "@serverInformation": {}, "name": "Nome", - "@name": {}, "version": "Versão", - "@version": {}, "pleaseFillOut": "Preencha", - "@pleaseFillOut": {}, "addLink": "Adicionar link", - "@addLink": {}, "notificationRuleRoomServerAcl": "ACL de servidores de sala", - "@notificationRuleRoomServerAcl": {}, "notificationRuleCallDescription": "Notifica o usuário de chamadas.", - "@notificationRuleCallDescription": {}, "notificationRuleRoomOneToOneDescription": "Notifica o usuário de mensagens em salas de duas pessoas.", - "@notificationRuleRoomOneToOneDescription": {}, "notificationRuleMessage": "Mensagem", - "@notificationRuleMessage": {}, "notificationRuleJitsi": "Jitsi", - "@notificationRuleJitsi": {}, "notificationRuleJitsiDescription": "Notifica o usuário de eventos de widget do Jitsi.", - "@notificationRuleJitsiDescription": {}, "notificationRuleServerAcl": "Omitir eventos de ACL de servidor", - "@notificationRuleServerAcl": {}, "notificationRuleIsRoomMention": "Menção de sala", - "@notificationRuleIsRoomMention": {}, "notificationRuleTombstoneDescription": "Notifica o usuário de mensagens de desativação de salas.", - "@notificationRuleTombstoneDescription": {}, "notificationRuleReactionDescription": "Omite notificações de reações.", - "@notificationRuleReactionDescription": {}, "commandHint_logout": "Desconecte-se do seu dispositivo atual", - "@commandHint_logout": {}, "commandHint_logoutall": "Desconecte-se de todos os dispositivos ativos", - "@commandHint_logoutall": {}, "displayNavigationRail": "Mostrar trilha de navegação em dispositivo móvel", - "@displayNavigationRail": {}, "previous": "Anterior", - "@previous": {}, "otherPartyNotLoggedIn": "A outra pessoa não tem nenhum dispositivo conectado no momento e portanto não consegue receber mensagens!", - "@otherPartyNotLoggedIn": {}, "customReaction": "Reação personalizada", - "@customReaction": {}, "moreEvents": "Mais eventos", - "@moreEvents": {}, "declineInvitation": "Rejeitar convite", - "@declineInvitation": {}, "noMessagesYet": "Nenhuma mensagem ainda", - "@noMessagesYet": {}, "longPressToRecordVoiceMessage": "Segure para gravar uma mensagem de voz.", - "@longPressToRecordVoiceMessage": {}, "pause": "Pausar", - "@pause": {}, "resume": "Retomar", - "@resume": {}, - "newSubSpace": "Novo sub espaço", - "@newSubSpace": {}, - "moveToDifferentSpace": "Mover para espaço diferente", - "@moveToDifferentSpace": {}, - "moveUp": "Mover para cima", - "@moveUp": {}, - "moveDown": "Mover para baixo", - "@moveDown": {}, "removeFromSpaceDescription": "A conversa será removida do espaço mas ainda aparecerá na sua lista de conversas.", - "@removeFromSpaceDescription": {}, "countChats": "{chats} conversas", "@countChats": { "type": "String", @@ -3430,8 +2689,6 @@ } } }, - "donate": "Doar", - "@donate": {}, "startedAPoll": "{username} iniciou uma enquete.", "@startedAPoll": { "type": "String", @@ -3442,25 +2699,14 @@ } }, "poll": "Enquete", - "@poll": {}, "startPoll": "Abrir enquete", - "@startPoll": {}, "endPoll": "Fechar enquete", - "@endPoll": {}, "answersVisible": "Respostas visíveis", - "@answersVisible": {}, - "answersHidden": "Respostas ocultas", - "@answersHidden": {}, "pollQuestion": "Questão da enquete", - "@pollQuestion": {}, "answerOption": "Opção de resposta", - "@answerOption": {}, "addAnswerOption": "Adicionar opção de resposta", - "@addAnswerOption": {}, "allowMultipleAnswers": "Permitir várias respostas", - "@allowMultipleAnswers": {}, "pollHasBeenEnded": "A enquete terminou", - "@pollHasBeenEnded": {}, "countVotes": "{count, plural, =1{Um voto} other{{count} votos}}", "@countVotes": { "type": "int", @@ -3471,9 +2717,7 @@ } }, "answersWillBeVisibleWhenPollHasEnded": "As respostas ficarão visíveis quando a enquete terminar", - "@answersWillBeVisibleWhenPollHasEnded": {}, "replyInThread": "Responder no tópico", - "@replyInThread": {}, "countReplies": "{count, plural, =1{Uma resposta} other{{count} respostas}}", "@countReplies": { "type": "int", @@ -3484,35 +2728,30 @@ } }, "thread": "Tópico", - "@thread": {}, "backToMainChat": "Voltar à conversa principal", - "@backToMainChat": {}, "saveChanges": "Salvar alterações", - "@saveChanges": {}, "createSticker": "Criar figurinha ou emoji", - "@createSticker": {}, "useAsSticker": "Usar como figurinha", - "@useAsSticker": {}, "useAsEmoji": "Usar como emoji", - "@useAsEmoji": {}, "stickerPackNameAlreadyExists": "O nome do pacote de figurinhas já existe", - "@stickerPackNameAlreadyExists": {}, "newStickerPack": "Novo pacote de figurinhas", - "@newStickerPack": {}, "stickerPackName": "Nome do pacote de figurinhas", - "@stickerPackName": {}, "attribution": "Créditos", - "@attribution": {}, "skipChatBackup": "Pular backup de conversas", - "@skipChatBackup": {}, "skipChatBackupWarning": "Tem certeza? Se não ativar o backup de conversas, você pode perder o acesso às suas mensagens se trocar de dispositivo.", - "@skipChatBackupWarning": {}, "loadingMessages": "Carregando mensagens", - "@loadingMessages": {}, "setupChatBackup": "Configurar backup de conversas", - "@setupChatBackup": {}, "changedTheChatDescription": "{username} alterou a descrição da conversa", - "@changedTheChatDescription": {}, "changedTheChatName": "{username} alterou o nome da conversa", - "@changedTheChatName": {} -} + "versionWithNumber": "Versão: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "advancedConfigs": "", + "theProcessWasCanceled": "" +} \ No newline at end of file diff --git a/lib/l10n/intl_pt_PT.arb b/lib/l10n/intl_pt_PT.arb index c6a01d35..3a766fd1 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -116,18 +116,6 @@ }, "sendOnEnter": "Enviar com Enter", "@sendOnEnter": {}, - "badServerVersionsException": "O servidor suporta as versões Spec:\n{serverVersions}\nMas esta aplicação apenas suporta {suportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "badServerLoginTypesException": "O servidor suporta os tipos de início de sessão:\n{serverVersions}\nMas esta aplicação apenas suporta:\n{suportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -172,11 +160,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Mensagens de robôs", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Cancelar", "@cancel": { "type": "String", @@ -329,8 +312,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "A conversa foi adicionada a este espaço", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Conversas", "@chats": { "type": "String", @@ -447,31 +428,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Confirmar", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Ligar", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "O contacto foi convidado para o grupo", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Contém nome de exibição", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Contém nome de utilizador", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "O conteúdo foi denunciado aos admins do servidor", "@contentHasBeenReported": { "type": "String", @@ -551,33 +512,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Isto irá desativar a tua conta. Não é reversível! Tens a certeza?", "@deactivateAccountWarning": { "type": "String", @@ -683,11 +617,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Precisas de escolher um código de emote e uma imagem!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Conversa vazia", "@emptyChat": { "type": "String", @@ -739,11 +668,6 @@ }, "homeserver": "Servidor", "@homeserver": {}, - "enterYourHomeserver": "Insere o teu servidor", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Erro ao obter localização: {error}", "@errorObtainingLocation": { "type": "String", @@ -783,11 +707,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Ir para a nova sala", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grupo", "@group": { "type": "String", @@ -859,11 +778,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identidade", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorar", "@ignore": { "type": "String", @@ -925,11 +839,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Convite para mim", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} convidou-te para o FluffyChat.\n1. Instala o FluffyChat: https://fluffychat.im\n2. Regista-te ou inicia sessão.\n3. Abre a ligação de convite: {link}", "@inviteText": { "type": "String", @@ -1009,11 +918,6 @@ "type": "String", "placeholders": {} }, - "license": "Licença", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Claro", "@lightTheme": { "type": "String", @@ -1067,11 +971,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Alterações de membros", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Mencionar", "@mention": { "type": "String", @@ -1266,11 +1165,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notificações ativadas para esta conta", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "Estão {count} utilizadores(as) a escrever…", "@numUsersTyping": { "type": "String", @@ -1388,11 +1282,6 @@ "type": "String", "placeholders": {} }, - "people": "Pessoas", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Escolher uma imagem", "@pickImage": { "type": "String", @@ -1412,11 +1301,6 @@ } } }, - "pleaseChoose": "Por favor, escolhe", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Por favor, escolhe um código-passe", "@pleaseChooseAPasscode": { "type": "String", @@ -1505,11 +1389,6 @@ } } }, - "rejoin": "Reentrar", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Remover", "@remove": { "type": "String", @@ -1529,11 +1408,6 @@ } } }, - "removeDevice": "Remover dispositivo", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Perdoar nesta conversa", "@unbanFromChat": { "type": "String", @@ -1589,15 +1463,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Visto por {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "sendFile": "Enviar ficheiro", "@sendFile": { "type": "String", @@ -1613,16 +1478,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Enviar original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Enviar autocolante", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Enviar vídeo", "@sendVideo": { "type": "String", @@ -1697,14 +1552,6 @@ "@dehydrate": {}, "dehydrateWarning": "Esta ação não pode ser revertida. Assegura-te que guardas bem a cópia de segurança.", "@dehydrateWarning": {}, - "hydrateTorLong": "Exportaste a tua sessão na última vez que estiveste no TOR? Importa-a rapidamente e continua a conversar.", - "@hydrateTorLong": {}, - "dehydrateTor": "Utilizadores do TOR: Exportar sessão", - "@dehydrateTor": {}, "hydrate": "Restaurar a partir de cópia de segurança", - "@hydrate": {}, - "hydrateTor": "Utilizadores do TOR: Importar sessão", - "@hydrateTor": {}, - "dehydrateTorLong": "Para utilizadores do TOR, é recomendado exportar a sessão antes de fechar a janela.", - "@dehydrateTorLong": {} -} + "@hydrate": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 4fde7117..99522e52 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -197,11 +197,6 @@ } } }, - "enterYourHomeserver": "Introduceți homeserverul vostru", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "groupWith": "Grup cu {displayname}", "@groupWith": { "type": "String", @@ -221,11 +216,6 @@ "type": "String", "placeholders": {} }, - "rejoin": "Reintrați", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "sentCallInformations": "{senderName} a trimis informație de apel", "@sentCallInformations": { "type": "String", @@ -255,15 +245,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{Un chat necitit} other{{unreadCount} chaturi necitite}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "verifySuccess": "A reușit verificarea!", "@verifySuccess": { "type": "String", @@ -274,11 +255,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Imagine de fundal", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "reactedWith": "{sender} a reacționat cu {reaction}", "@reactedWith": { "type": "String", @@ -316,11 +292,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Deschideți camera pentru video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "openAppToReadMessages": "Deschideți aplicația să citiți mesajele", "@openAppToReadMessages": { "type": "String", @@ -340,11 +311,6 @@ } } }, - "removeDevice": "Eliminați dispozitivul", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "share": "Partajați", "@share": { "type": "String", @@ -375,11 +341,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Comutați favoritul", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "unblockDevice": "Debloca dispozitiv", "@unblockDevice": { "type": "String", @@ -410,16 +371,12 @@ "type": "String", "placeholders": {} }, - "addToSpaceDescription": "Alegeți un spațiu în care să adăugați acest chat.", - "@addToSpaceDescription": {}, "placeCall": "Faceți apel", "@placeCall": {}, "voiceCall": "Apel vocal", "@voiceCall": {}, "unsupportedAndroidVersion": "Versiune de Android nesuportat", "@unsupportedAndroidVersion": {}, - "previousAccount": "Contul anterior", - "@previousAccount": {}, "userIsTyping": "{username} tastează…", "@userIsTyping": { "type": "String", @@ -429,8 +386,6 @@ } } }, - "widgetCustom": "Personalizat", - "@widgetCustom": {}, "screenSharingTitle": "partajarea de ecran", "@screenSharingTitle": {}, "newGroup": "Grup nou", @@ -543,11 +498,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Invitați pentru mine", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "fluffychat": "FluffyChat", "@fluffychat": { "type": "String", @@ -599,8 +549,6 @@ }, "openChat": "Deschideți Chat", "@openChat": {}, - "emailOrUsername": "Email sau nume de utilizator", - "@emailOrUsername": {}, "youBannedUser": "Ați interzis pe {user}", "@youBannedUser": { "placeholders": { @@ -611,8 +559,6 @@ }, "fileIsTooBigForServer": "Serverul reportează că fișierul este prea mare să fie trimis.", "@fileIsTooBigForServer": {}, - "widgetName": "Nume", - "@widgetName": {}, "sorryThatsNotPossible": "Scuze... acest nu este posibil", "@sorryThatsNotPossible": {}, "enableEncryptionWarning": "Activând criptare, nu mai puteți să o dezactivați în viitor. Sunteți sigur?", @@ -635,11 +581,6 @@ "type": "String", "placeholders": {} }, - "connect": "Conectați", - "@connect": { - "type": "String", - "placeholders": {} - }, "you": "Voi", "@you": { "type": "String", @@ -689,18 +630,6 @@ "type": "String", "placeholders": {} }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "theyMatch": "Sunt asemănători", "@theyMatch": { "type": "String", @@ -712,11 +641,6 @@ "type": "String", "placeholders": {} }, - "toggleMuted": "Comutați amuțeștarea", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "scanQrCode": "Scanați cod QR", "@scanQrCode": {}, "addAccount": "Adăugați cont", @@ -727,45 +651,15 @@ "@confirmEventUnpin": {}, "emojis": "Emoji-uri", "@emojis": {}, - "switchToAccount": "Schimbați la contul {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Contul următor", - "@nextAccount": {}, - "indexedDbErrorTitle": "Probleme cu modul privat", - "@indexedDbErrorTitle": {}, "users": "Utilizatori", "@users": {}, - "startFirstChat": "Începeți primul chatul vostru", - "@startFirstChat": {}, - "callingPermissions": "Permisiuni de apel", - "@callingPermissions": {}, - "callingAccount": "Cont de apel", - "@callingAccount": {}, "foregroundServiceRunning": "Această notificare apare când serviciul de foreground rulează.", "@foregroundServiceRunning": {}, - "callingAccountDetails": "Permite FluffyChat să folosească aplicația de apeluri nativă android.", - "@callingAccountDetails": {}, - "appearOnTop": "Apare deasupra", - "@appearOnTop": {}, - "appearOnTopDetails": "Permite aplicația să apare deasupra (nu este necesar dacă aveți FluffyChat stabilit ca cont de apeluri)", - "@appearOnTopDetails": {}, "currentlyActive": "Activ acum", "@currentlyActive": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Conține displayname", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "isTyping": "tastează…", "@isTyping": { "type": "String", @@ -783,8 +677,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Chatul a fost adăugat la acest spațiu", - "@chatHasBeenAddedToThisSpace": {}, "clearArchive": "Ștergeți arhiva", "@clearArchive": {}, "commandHint_markasdm": "Marcați ca cameră de mesaje directe", @@ -893,26 +785,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "allRooms": "Toate chaturi de grup", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "forward": "Înainte", "@forward": { "type": "String", @@ -933,11 +805,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identitate", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Ignorați", "@ignore": { "type": "String", @@ -1029,11 +896,6 @@ "type": "String", "placeholders": {} }, - "license": "Permis", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Luminat", "@lightTheme": { "type": "String", @@ -1050,14 +912,6 @@ }, "dehydrate": "Exportați sesiunea și ștergeți dispozitivul", "@dehydrate": {}, - "dehydrateTor": "Utilizatori de TOR: Exportați sesiunea", - "@dehydrateTor": {}, - "dehydrateTorLong": "Pentru utilizatori de TOR, este recomandat să exportați sesiunea înainte de a închideți fereastra.", - "@dehydrateTorLong": {}, - "hydrateTor": "Utilizatori TOR: Importați sesiune exportată", - "@hydrateTor": {}, - "hydrateTorLong": "Ați exportat sesiunea vostră ultima dată pe TOR? Importați-o repede și continuați să conversați.", - "@hydrateTorLong": {}, "hydrate": "Restaurați din fișier backup", "@hydrate": {}, "loadMore": "Încarcă mai multe…", @@ -1110,11 +964,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Notificări activate pentru acest cont", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "obtainingLocation": "Obținând locație…", "@obtainingLocation": { "type": "String", @@ -1145,21 +994,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Stabiliți emoji-uri personalizate", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Stabiliți nivelul de permisii", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "singlesignon": "Autentificare unică", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "startedACall": "{senderName} a început un apel", "@startedACall": { "type": "String", @@ -1270,33 +1104,10 @@ "@openGallery": {}, "removeFromSpace": "Eliminați din spațiu", "@removeFromSpace": {}, - "publish": "Publicați", - "@publish": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "unsupportedAndroidVersionLong": "Această funcție are nevoie de o versiune de Android mai nouă. Vă rugăm să verificați dacă sunt actualizări sau suport de la Lineage OS.", "@unsupportedAndroidVersionLong": {}, "dismiss": "Respingeți", "@dismiss": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetEtherpad": "Notiță text", - "@widgetEtherpad": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetUrlError": "Acest URL nu este valibil.", - "@widgetUrlError": {}, - "widgetNameError": "Vă rugăm să introduceți un nume de afișare.", - "@widgetNameError": {}, - "errorAddingWidget": "Adăugarea widget-ului a eșuat.", - "@errorAddingWidget": {}, "youRejectedTheInvitation": "Ați respins invitația", "@youRejectedTheInvitation": {}, "youJoinedTheChat": "Va-ți alăturat la chat", @@ -1355,29 +1166,12 @@ "@screenSharingDetail": {}, "storeSecurlyOnThisDevice": "Stoca sigur pe acest dispozitiv", "@storeSecurlyOnThisDevice": {}, - "otherCallingPermissions": "Microfon, cameră și alte permisiuni lui FluffyChat", - "@otherCallingPermissions": {}, "whyIsThisMessageEncrypted": "De ce este acest mesaj ilizibil?", "@whyIsThisMessageEncrypted": {}, "newSpace": "Spațiu nou", "@newSpace": {}, - "enterSpace": "Intrați în spațiu", - "@enterSpace": {}, - "enterRoom": "Intrați în cameră", - "@enterRoom": {}, "allSpaces": "Toate spațiile", "@allSpaces": {}, - "numChats": "{number} chaturi", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Ascundeți evenimente de stare neimportante", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "Nu se mai apară din nou", "@doNotShowAgain": {}, "newSpaceDescription": "Spațiile vă permit să vă consolidați chaturile și să stabiliți comunități private sau publice.", @@ -1405,11 +1199,6 @@ "@report": {}, "jumpToLastReadMessage": "Săriți la ultimul citit mesaj", "@jumpToLastReadMessage": {}, - "memberChanges": "Schimbări de membri", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "guestsCanJoin": "Musafiri pot să se alăture", "@guestsCanJoin": { "type": "String", @@ -1435,11 +1224,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Mergeți la camera nouă", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grup", "@group": { "type": "String", @@ -1519,11 +1303,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Confirmați", - "@confirm": { - "type": "String", - "placeholders": {} - }, "or": "Sau", "@or": { "type": "String", @@ -1550,11 +1329,6 @@ } } }, - "setInvitationLink": "Stabiliți linkul de invitație", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "transferFromAnotherDevice": "Transfera de la alt dispozitiv", "@transferFromAnotherDevice": { "type": "String", @@ -1570,11 +1344,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Marcați Citit/Necitit", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tryToSendAgain": "Încercați să trimiteți din nou", "@tryToSendAgain": { "type": "String", @@ -1706,10 +1475,6 @@ } } }, - "indexedDbErrorLong": "Stocarea de mesaje nu este activat implicit în modul privat.\nVă rugăm să vizitați\n- about:config\n- stabiliți dom.indexedDB.privateBrowsing.enabled la true\nAstfel, nu este posibil să folosiți FluffyChat.", - "@indexedDbErrorLong": {}, - "addWidget": "Adăugați widget", - "@addWidget": {}, "locationPermissionDeniedNotice": "Permisiunea locației blocată. Vă rugăm să o dezblocați să împărțiți locația voastră.", "@locationPermissionDeniedNotice": { "type": "String", @@ -1809,18 +1574,6 @@ "@addToSpace": {}, "commandHint_hug": "Trimiteți o îmbrățișare", "@commandHint_hug": {}, - "badServerVersionsException": "Homeserver-ul suportă versiunele de Spec următoare:\n{serverVersions}\nDar această aplicație suportă numai {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "badServerLoginTypesException": "Homeserver-ul suportă următoarele feluri de login:\n{serverVersions}\nDar această aplicație suportă numai:\n{supportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -1924,11 +1677,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Conține nume de utilizator", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "copyToClipboard": "Copiați în clipboard", "@copyToClipboard": { "type": "String", @@ -2048,11 +1796,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Trebuie să alegeți shortcode pentru emote și o imagine!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "encryption": "Criptare", "@encryption": { "type": "String", @@ -2112,11 +1855,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Trimiteți original", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Trimiteți video", "@sendVideo": { "type": "String", @@ -2127,18 +1865,8 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Trimiteți sticker", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "pleaseEnterRecoveryKeyDescription": "Să vă deblocați mesajele vechi, vă rugăm să introduceți cheia de recuperare creată de o seșiune anterioră. Cheia de recuperare NU este parola voastră.", "@pleaseEnterRecoveryKeyDescription": {}, - "separateChatTypes": "Afișați chaturi directe și grupuri separat", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Stabiliți ca pseudonimul primar", "@setAsCanonicalAlias": { "type": "String", @@ -2194,21 +1922,11 @@ "type": "String", "placeholders": {} }, - "people": "Persoane", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Alegeți o imagine", "@pickImage": { "type": "String", "placeholders": {} }, - "pleaseChoose": "Vă rugăm să alegeți", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pin": "Fixați", "@pin": { "type": "String", @@ -2306,15 +2024,6 @@ "@recoveryKey": {}, "recoveryKeyLost": "Cheia de recuperare pierdută?", "@recoveryKeyLost": {}, - "seenByUser": "Văzut de {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "muteChat": "Amuțați chatul", "@muteChat": { "type": "String", @@ -2365,8 +2074,6 @@ }, "deviceKeys": "Cheile dispozitivului:", "@deviceKeys": {}, - "pleaseEnterRecoveryKey": "Vă rugăm să introduceți cheia voastră de recuperare:", - "@pleaseEnterRecoveryKey": {}, "newVerificationRequest": "Cerere de verificare nouă!", "@newVerificationRequest": { "type": "String", @@ -2448,11 +2155,6 @@ }, "commandHint_googly": "Trimiteți câțiva ochi googly", "@commandHint_googly": {}, - "botMessages": "Mesaje Bot", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "all": "Toate", "@all": { "type": "String", @@ -2504,9 +2206,5 @@ "placeholders": {} }, "reopenChat": "Deschide din nou chatul", - "@reopenChat": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Vă rugăm să încercați din nou mai târziu sau să alegeți un server diferit.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWithPassword": "Conectați-vă cu parolă", - "@signInWithPassword": {} -} + "@reopenChat": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index ad7856b4..7341066d 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -129,18 +129,6 @@ } } }, - "badServerVersionsException": "Домашний сервер поддерживает следующие версии спецификации:\n{serverVersions}\nНо это приложение поддерживает только {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Заблокировать в чате", "@banFromChat": { "type": "String", @@ -173,11 +161,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Сообщения ботов", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Отмена", "@cancel": { "type": "String", @@ -402,7 +385,6 @@ "placeholders": {} }, "clearArchive": "Очистить архив", - "@clearArchive": {}, "close": "Закрыть", "@close": { "type": "String", @@ -507,31 +489,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Подтвердить", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Присоединиться", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Контакт был приглашен в группу", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Содержит отображаемое имя", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Содержит имя пользователя", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "О контенте было сообщено администраторам сервера", "@contentHasBeenReported": { "type": "String", @@ -611,33 +573,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Это деактивирует вашу учётную запись пользователя. Данное действие не может быть отменено! Вы уверены?", "@deactivateAccountWarning": { "type": "String", @@ -743,11 +678,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Вам нужно задать код эмодзи и изображение!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Пустой чат", "@emptyChat": { "type": "String", @@ -797,11 +727,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Введите адрес вашего домашнего сервера", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Ошибка получения местоположения: {error}", "@errorObtainingLocation": { "type": "String", @@ -851,11 +776,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "В новую комнату", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Группа", "@group": { "type": "String", @@ -927,11 +847,6 @@ "type": "String", "placeholders": {} }, - "identity": "Идентификация", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Игнорировать", "@ignore": { "type": "String", @@ -993,11 +908,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Приглашение для меня", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} пригласил(а) вас в FluffyChat. \n1. Посетите https://fluffychat.im и установите приложение \n2. Зарегистрируйтесь или войдите \n3. Откройте ссылку приглашения: \n {link}", "@inviteText": { "type": "String", @@ -1077,11 +987,6 @@ "type": "String", "placeholders": {} }, - "license": "Лицензия", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Светлая", "@lightTheme": { "type": "String", @@ -1126,11 +1031,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Изменения участников", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Упомянуть", "@mention": { "type": "String", @@ -1238,11 +1138,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Уведомления включены для этой учётной записи", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} пользователей печатают…", "@numUsersTyping": { "type": "String", @@ -1342,11 +1237,6 @@ "type": "String", "placeholders": {} }, - "people": "Люди", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Выбрать изображение", "@pickImage": { "type": "String", @@ -1366,11 +1256,6 @@ } } }, - "pleaseChoose": "Пожалуйста, выберите", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Пожалуйста, выберите код доступа", "@pleaseChooseAPasscode": { "type": "String", @@ -1464,11 +1349,6 @@ } } }, - "rejoin": "Зайти повторно", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Удалить", "@remove": { "type": "String", @@ -1488,11 +1368,6 @@ } } }, - "removeDevice": "Удалить устройство", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Разблокировать в чате", "@unbanFromChat": { "type": "String", @@ -1548,15 +1423,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Просмотрено пользователем {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Прислать", "@send": { "type": "String", @@ -1591,16 +1457,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Отправить оригинал", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Отправить стикер", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Отправить видео", "@sendVideo": { "type": "String", @@ -1665,21 +1521,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Установить пользовательские эмодзи", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Установить ссылку для приглашения", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Установить уровень разрешений", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Задать статус", "@setStatus": { "type": "String", @@ -1714,11 +1555,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Единая точка входа", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Пропустить", "@skip": { "type": "String", @@ -1789,21 +1625,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Переключить избранное", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Переключить без звука", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Отметить как прочитанное/непрочитанное", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Слишком много запросов. Пожалуйста, повторите попытку позже!", "@tooManyRequestsWarning": { "type": "String", @@ -1994,11 +1815,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Обои:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Предупреждение!", "@warning": { "type": "String", @@ -2064,38 +1880,21 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Чат был добавлен в это пространство", - "@chatHasBeenAddedToThisSpace": {}, "addToSpace": "Добавить в пространство", - "@addToSpace": {}, "scanQrCode": "Сканировать QR-код", - "@scanQrCode": {}, "sendOnEnter": "Отправлять по Enter", - "@sendOnEnter": {}, "homeserver": "Домашний сервер", - "@homeserver": {}, "serverRequiresEmail": "Этот сервер должен подтвердить ваш адрес электронной почты для регистрации.", - "@serverRequiresEmail": {}, "enableMultiAccounts": "(БЕТА) Включить несколько учетных записей на этом устройстве", - "@enableMultiAccounts": {}, "bundleName": "Название пакета", - "@bundleName": {}, "removeFromBundle": "Удалить из этого пакета", - "@removeFromBundle": {}, "addToBundle": "Добавить в пакет", - "@addToBundle": {}, "editBundlesForAccount": "Изменить пакеты для этой учетной записи", - "@editBundlesForAccount": {}, "addAccount": "Добавить учетную запись", - "@addAccount": {}, "link": "Ссылка", - "@link": {}, "oneClientLoggedOut": "Один из ваших клиентов вышел", - "@oneClientLoggedOut": {}, "yourChatBackupHasBeenSetUp": "Резервное копирование чата настроено.", - "@yourChatBackupHasBeenSetUp": {}, "unverified": "Не проверено", - "@unverified": {}, "commandHint_clearcache": "Очистить кэш", "@commandHint_clearcache": { "type": "String", @@ -2112,52 +1911,22 @@ "description": "Usage hint for the command /dm" }, "messageInfo": "Информация о сообщении", - "@messageInfo": {}, "openGallery": "Открыть галерею", - "@openGallery": {}, "removeFromSpace": "Удалить из пространства", - "@removeFromSpace": {}, "commandHint_create": "Создайте пустой групповой чат\nИспользуйте --no-encryption, чтобы отключить шифрование", "@commandHint_create": { "type": "String", "description": "Usage hint for the command /create" }, "sender": "Отправитель", - "@sender": {}, - "addToSpaceDescription": "Выберите пространство, чтобы добавить к нему этот чат.", - "@addToSpaceDescription": {}, "start": "Начать", - "@start": {}, "time": "Время", - "@time": {}, "messageType": "Тип сообщения", - "@messageType": {}, "repeatPassword": "Повторите пароль", - "@repeatPassword": {}, - "openVideoCamera": "Открыть камеру для видео", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "videoWithSize": "Видео ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "publish": "Опубликовать", - "@publish": {}, "dismiss": "Отклонить", - "@dismiss": {}, "markAsRead": "Отметить как прочитанное", - "@markAsRead": {}, "reportUser": "Сообщить о пользователе", - "@reportUser": {}, "openChat": "Открыть чат", - "@openChat": {}, "reactedWith": "{sender} реагирует с {reaction}", "@reactedWith": { "type": "String", @@ -2171,65 +1940,16 @@ } }, "emojis": "Эмодзи", - "@emojis": {}, "voiceCall": "Голосовой звонок", - "@voiceCall": {}, "unsupportedAndroidVersion": "Неподдерживаемая версия Android", - "@unsupportedAndroidVersion": {}, "unsupportedAndroidVersionLong": "Для этой функции требуется более новая версия Android. Проверьте наличие обновлений или поддержку Lineage OS.", - "@unsupportedAndroidVersionLong": {}, "placeCall": "Совершить звонок", - "@placeCall": {}, "videoCallsBetaWarning": "Обратите внимание, что видеозвонки в настоящее время находятся в бета-версии. Они могут работать не так, как ожидалось, или вообще не работать на всех платформах.", - "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Экспериментальные видеозвонки", - "@experimentalVideoCalls": {}, - "emailOrUsername": "Адрес электронной почты или имя пользователя", - "@emailOrUsername": {}, "pinMessage": "Прикрепить к комнате", - "@pinMessage": {}, "confirmEventUnpin": "Вы уверены, что хотите навсегда открепить событие?", - "@confirmEventUnpin": {}, - "switchToAccount": "Переключиться на учётную запись {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Следующая учётная запись", - "@nextAccount": {}, - "previousAccount": "Предыдущая учётная запись", - "@previousAccount": {}, - "addWidget": "Добавить виджет", - "@addWidget": {}, - "widgetVideo": "Видео", - "@widgetVideo": {}, - "widgetEtherpad": "Текстовая записка", - "@widgetEtherpad": {}, - "widgetCustom": "Пользовательский", - "@widgetCustom": {}, - "widgetJitsi": "Совещание Jitsi", - "@widgetJitsi": {}, - "widgetName": "Имя", - "@widgetName": {}, - "widgetUrlError": "Этот URL не действителен.", - "@widgetUrlError": {}, - "widgetNameError": "Пожалуйста, укажите отображаемое имя.", - "@widgetNameError": {}, - "errorAddingWidget": "Ошибка при добавлении виджета.", - "@errorAddingWidget": {}, - "separateChatTypes": "Разделять личные чаты и группы", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youRejectedTheInvitation": "Вы отклонили приглашение", - "@youRejectedTheInvitation": {}, "youAcceptedTheInvitation": "👍 Вы приняли приглашение", - "@youAcceptedTheInvitation": {}, "youUnbannedUser": "Вы разблокировали {user}", "@youUnbannedUser": { "placeholders": { @@ -2239,7 +1959,6 @@ } }, "youJoinedTheChat": "Вы присоединились к чату", - "@youJoinedTheChat": {}, "youKickedAndBanned": "🙅 Вы выгнали и заблокировали {user}", "@youKickedAndBanned": { "placeholders": { @@ -2289,31 +2008,17 @@ } }, "recoveryKeyLost": "Ключ восстановления утерян?", - "@recoveryKeyLost": {}, "users": "Пользователи", - "@users": {}, "unlockOldMessages": "Разблокировать старые сообщения", - "@unlockOldMessages": {}, "storeInSecureStorageDescription": "Сохраните ключ восстановления в безопасном хранилище этого устройства.", - "@storeInSecureStorageDescription": {}, "storeSecurlyOnThisDevice": "Сохранить на этом устройстве", - "@storeSecurlyOnThisDevice": {}, "saveKeyManuallyDescription": "Сохраните этот ключ вручную, вызвав диалог общего доступа системы или буфера обмена.", - "@saveKeyManuallyDescription": {}, "recoveryKey": "Ключ восстановления", - "@recoveryKey": {}, - "pleaseEnterRecoveryKey": "Введите ключ восстановления:", - "@pleaseEnterRecoveryKey": {}, "pleaseEnterRecoveryKeyDescription": "Чтобы разблокировать старые сообщения, введите ключ восстановления, сгенерированный в предыдущем сеансе. Ваш ключ восстановления НЕ является вашим паролем.", - "@pleaseEnterRecoveryKeyDescription": {}, "storeInAndroidKeystore": "Сохранить в Android KeyStore", - "@storeInAndroidKeystore": {}, "storeInAppleKeyChain": "Сохранить в Apple KeyChain", - "@storeInAppleKeyChain": {}, "user": "Пользователь", - "@user": {}, "confirmMatrixId": "Пожалуйста, подтвердите Matrix ID, чтобы удалить свою учётную запись.", - "@confirmMatrixId": {}, "supposedMxid": "Это должно быть {mxid}", "@supposedMxid": { "type": "String", @@ -2323,79 +2028,23 @@ } } }, - "dehydrateTor": "Пользователи TOR: Экспорт сеанса", - "@dehydrateTor": {}, - "indexedDbErrorLong": "К сожалению, по умолчанию хранилище сообщений не включено в приватном режиме.\nПожалуйста, посетите\n- about:config\n- установите для dom.indexedDB.privateBrowsing.enabled значение true\nВ противном случае запуск FluffyChat будет невозможен.", - "@indexedDbErrorLong": {}, "custom": "Пользовательское", - "@custom": {}, "hydrate": "Восстановить из файла резервной копии", - "@hydrate": {}, - "hydrateTor": "Пользователи TOR: Импорт экспорта сессии", - "@hydrateTor": {}, - "hydrateTorLong": "В прошлый раз вы экспортировали свою сессию в TOR? Быстро импортируйте его и продолжайте общение.", - "@hydrateTorLong": {}, - "dehydrateTorLong": "Для пользователей TOR рекомендуется экспортировать сессию перед закрытием окна.", - "@dehydrateTorLong": {}, "dehydrate": "Экспорт сеанса и очистка устройства", - "@dehydrate": {}, "dehydrateWarning": "Это действие не может быть отменено. Убедитесь, что вы безопасно сохранили файл резервной копии.", - "@dehydrateWarning": {}, - "indexedDbErrorTitle": "Проблемы с приватным режимом", - "@indexedDbErrorTitle": {}, - "otherCallingPermissions": "Микрофон, камера и другие разрешения FluffyChat", - "@otherCallingPermissions": {}, - "enterSpace": "Войти в пространство", - "@enterSpace": {}, "screenSharingDetail": "Вы делитесь своим экраном в FuffyChat", - "@screenSharingDetail": {}, - "callingAccountDetails": "Позволяет FluffyChat использовать родное android приложение для звонков.", - "@callingAccountDetails": {}, "newSpace": "Новое пространство", - "@newSpace": {}, - "appearOnTop": "Появляться сверху", - "@appearOnTop": {}, "commandHint_markasdm": "Пометить как комнату личных сообщений", - "@commandHint_markasdm": {}, - "appearOnTopDetails": "Позволяет приложению отображаться сверху (не требуется, если у вас уже настроен Fluffychat как аккаунт для звонков)", - "@appearOnTopDetails": {}, "foregroundServiceRunning": "Это уведомление появляется, когда запущена основная служба.", - "@foregroundServiceRunning": {}, "newGroup": "Новая группа", - "@newGroup": {}, - "enterRoom": "Войти в комнату", - "@enterRoom": {}, "allSpaces": "Все пространства", - "@allSpaces": {}, - "callingPermissions": "Разрешения на звонки", - "@callingPermissions": {}, - "callingAccount": "Аккаунт для звонков", - "@callingAccount": {}, "commandHint_markasgroup": "Пометить как группу", - "@commandHint_markasgroup": {}, "whyIsThisMessageEncrypted": "Почему это сообщение нечитаемо?", - "@whyIsThisMessageEncrypted": {}, "noKeyForThisMessage": "Это может произойти, если сообщение было отправлено до того, как вы вошли в свою учетную запись на данном устройстве.\n\nТакже возможно, что отправитель заблокировал ваше устройство или что-то пошло не так с интернет-соединением.\n\nВы можете прочитать сообщение на другой сессии? Тогда вы можете перенести сообщение с неё! Перейдите в Настройки > Устройства и убедитесь, что ваши устройства проверили друг друга. Когда вы откроете комнату в следующий раз и обе сессии будут открыты, ключи будут переданы автоматически.\n\nВы не хотите потерять ключи при выходе из системы или переключении устройств? Убедитесь, что вы включили резервное копирование чата в настройках.", - "@noKeyForThisMessage": {}, "screenSharingTitle": "общий доступ к экрану", - "@screenSharingTitle": {}, - "numChats": "{number} чатов", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "fileIsTooBigForServer": "Отправка не удалась! Сервер поддерживает только вложения размером до {max}.", - "@fileIsTooBigForServer": {}, - "hideUnimportantStateEvents": "Скрыть необязательные события статуса", - "@hideUnimportantStateEvents": {}, "sorryThatsNotPossible": "Извините... это невозможно", - "@sorryThatsNotPossible": {}, "openLinkInBrowser": "Открыть ссылку в браузере", - "@openLinkInBrowser": {}, "fileHasBeenSavedAt": "Файл сохранён в {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2406,11 +2055,8 @@ } }, "commandHint_cuddle": "Отправить улыбку", - "@commandHint_cuddle": {}, "readUpToHere": "Непрочитанное", - "@readUpToHere": {}, "commandHint_hug": "Отправить обнимашки", - "@commandHint_hug": {}, "cuddleContent": "{senderName} обнимает вас", "@cuddleContent": { "type": "String", @@ -2430,32 +2076,15 @@ } }, "jump": "Перейти", - "@jump": {}, "doNotShowAgain": "Не показывать снова", - "@doNotShowAgain": {}, "newSpaceDescription": "Пространства позволяют объединять Ваши чаты и создавать частные или общедоступные сообщества.", - "@newSpaceDescription": {}, "disableEncryptionWarning": "В целях безопасности Вы не можете отключить шифрование в чате, где оно было включено.", - "@disableEncryptionWarning": {}, "deviceKeys": "Ключи устройств:", - "@deviceKeys": {}, "noBackupWarning": "Внимание! Без резервного копиирования, Вы потеряете доступ к своим зашифрованным сообщениям. Крайне рекомендуется включить резервное копирование перед выходом.", - "@noBackupWarning": {}, "noOtherDevicesFound": "Другие устройства не найдены", - "@noOtherDevicesFound": {}, "reportErrorDescription": "😭 О, нет. Что-то пошло не так. При желании вы можете сообщить об этой ошибке разработчикам.", - "@reportErrorDescription": {}, "report": "пожаловаться", - "@report": {}, - "allRooms": "Все группы", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "startFirstChat": "Начните Ваш первый чат", - "@startFirstChat": {}, "jumpToLastReadMessage": "Последнее прочитанное сообщение", - "@jumpToLastReadMessage": {}, "wasDirectChatDisplayName": "Пустой чат (был {oldDisplayName})", "@wasDirectChatDisplayName": { "type": "String", @@ -2466,32 +2095,14 @@ } }, "encryptThisChat": "Зашифровать этот чат", - "@encryptThisChat": {}, "reopenChat": "Открыть чат заново", - "@reopenChat": {}, "commandHint_googly": "Отправить выпученные глаза", - "@commandHint_googly": {}, - "signInWith": "Войти с {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Это не картинка.", - "@notAnImage": {}, "importNow": "Импортировать сейчас", - "@importNow": {}, "importEmojis": "Импортировать эмодзи", - "@importEmojis": {}, "importFromZipFile": "Импортировать из ZIP-файла", - "@importFromZipFile": {}, "exportEmotePack": "Экспортировать набор эмодзи как ZIP", - "@exportEmotePack": {}, "replace": "Заменить", - "@replace": {}, "googlyEyesContent": "{senderName} выпучил глаза", "@googlyEyesContent": { "type": "String", @@ -2501,38 +2112,18 @@ } } }, - "signInWithPassword": "Войти с помощью пароля", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Повторите попытку позже или выберите другой сервер.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "sendTypingNotifications": "Отправлять уведомления о наборе текста", - "@sendTypingNotifications": {}, "createGroup": "Создать группу", - "@createGroup": {}, - "inviteContactToGroupQuestion": "Вы хотите пригласить {contact} в чат \"{groupName}\"?", - "@inviteContactToGroupQuestion": {}, "tryAgain": "Повторите попытку", - "@tryAgain": {}, - "addChatDescription": "Добавить описание чата...", - "@addChatDescription": {}, "chatPermissions": "Права в чате", - "@chatPermissions": {}, "chatDescription": "Описание чата", - "@chatDescription": {}, "chatDescriptionHasBeenChanged": "Описание чата изменено", - "@chatDescriptionHasBeenChanged": {}, "noChatDescriptionYet": "Описание чата не создано.", - "@noChatDescriptionYet": {}, "invalidServerName": "Недопустимое имя сервера", - "@invalidServerName": {}, "optionalRedactReason": "(Необязательно) Причина редактирования...", - "@optionalRedactReason": {}, "redactMessageDescription": "Сообщение будет отредактировано для всех участников. Это необратимо.", - "@redactMessageDescription": {}, "messagesStyle": "Сообщения:", - "@messagesStyle": {}, "shareInviteLink": "Поделиться приглашением", - "@shareInviteLink": {}, "redactedBy": "{username} отредактировал это событие", "@redactedBy": { "type": "String", @@ -2543,11 +2134,6 @@ } }, "directChat": "Личный чат", - "@directChat": {}, - "profileNotFound": "Пользователь не найден на сервере. Это может быть проблемой подключения или пользователь не существует.", - "@profileNotFound": {}, - "setTheme": "Тема:", - "@setTheme": {}, "redactedByBecause": "{username} отредактировал это событие. Причина: \"{reason}\"", "@redactedByBecause": { "type": "String", @@ -2561,17 +2147,10 @@ } }, "setChatDescription": "Установить описание чата", - "@setChatDescription": {}, "setColorTheme": "Цветовая тема:", - "@setColorTheme": {}, "invite": "Пригласить", - "@invite": {}, - "invitePrivateChat": "📨 Вас пригласили в приватный чат", - "@invitePrivateChat": {}, "inviteGroupChat": "📨 Вас пригласили в групповой чат", - "@inviteGroupChat": {}, "invalidInput": "Недопустимый ввод!", - "@invalidInput": {}, "wrongPinEntered": "Wrong pin entered! Try again in {seconds} seconds...", "@wrongPinEntered": { "type": "String", @@ -2587,17 +2166,11 @@ "placeholders": {} }, "banUserDescription": "Заблокированные в чате пользователи не смогут перезайти в чат, пока они не будут разблокированны.", - "@banUserDescription": {}, "removeDevicesDescription": "Вы выйдете с этого устройства и больше не будете получать сообщения.", - "@removeDevicesDescription": {}, "unbanUserDescription": "Пользователь сможет при желании зайти в чат снова.", - "@unbanUserDescription": {}, "pushNotificationsNotAvailable": "Push-уведомления недоступны", - "@pushNotificationsNotAvailable": {}, "makeAdminDescription": "Как только вы назначите этого пользователя администратором, вы не сможете этого отменить, так как их права доступа и ваши будут одинаковы.", - "@makeAdminDescription": {}, "archiveRoomDescription": "Чат переместится в архив. Другим пользователям будет видно, что вы вышли из чата.", - "@archiveRoomDescription": {}, "hasKnocked": "🚪 {user} постучался", "@hasKnocked": { "placeholders": { @@ -2607,27 +2180,15 @@ } }, "learnMore": "Узнать больше", - "@learnMore": {}, "roomUpgradeDescription": "Затем чат будет воссоздан с новой версией комнаты. Все участники будут уведомлены о необходимости перейти в новый чат. Вы можете узнать больше о версиях комнат на https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, "pleaseEnterANumber": "Пожалуйста введите число больше 0", - "@pleaseEnterANumber": {}, "kickUserDescription": "Пользователь будет изгнан из чата, но не будет заблокирован. В публичных чатах пользователь может перезайти когда угодно.", - "@kickUserDescription": {}, "blockListDescription": "Вы можете заглушить тревожащих вас пользователей. Вы не будете получать сообщения или приглашения в комнату от пользователей из вашего личного чёрного списка.", - "@blockListDescription": {}, "blockedUsers": "Заглушённые пользователи", - "@blockedUsers": {}, "block": "Заглушить", - "@block": {}, "blockUsername": "Игнорировать имя пользователя", - "@blockUsername": {}, "createGroupAndInviteUsers": "Создать и начать приглашать", - "@createGroupAndInviteUsers": {}, - "startConversation": "Начать общение", - "@startConversation": {}, "groupCanBeFoundViaSearch": "Группа может быть найдена поиском", - "@groupCanBeFoundViaSearch": {}, "noUsersFoundWithQuery": "К сожалению пользователей с именем \"{query}\" не найдено. Убедитесь, что вы не совершили опечатку.", "@noUsersFoundWithQuery": { "type": "String", @@ -2638,61 +2199,25 @@ } }, "yourGlobalUserIdIs": "Ваш глобальный идентификатор - ", - "@yourGlobalUserIdIs": {}, "commandHint_sendraw": "Отправить сырой json", - "@commandHint_sendraw": {}, "wrongRecoveryKey": "Простите... судя по всему это неверный ключ восстановления.", - "@wrongRecoveryKey": {}, "groupName": "Название группы", - "@groupName": {}, "databaseMigrationTitle": "База данных оптимизированна", - "@databaseMigrationTitle": {}, "searchChatsRooms": "Поиск #чатов, @людей...", - "@searchChatsRooms": {}, "databaseMigrationBody": "Пожалуйста, подождите. Это может занять некоторое время.", - "@databaseMigrationBody": {}, "publicSpaces": "Публичные пространства", - "@publicSpaces": {}, "passwordIsWrong": "Вы ввели неверный пароль", - "@passwordIsWrong": {}, "pleaseEnterYourCurrentPassword": "Пожалуйста, введите свой текущий пароль", - "@pleaseEnterYourCurrentPassword": {}, - "publicLink": "Публичная ссылка", - "@publicLink": {}, "nothingFound": "Ничего не найдено...", - "@nothingFound": {}, "newPassword": "Новый пароль", - "@newPassword": {}, "passwordsDoNotMatch": "Пароли не совпадают", - "@passwordsDoNotMatch": {}, "select": "Выбрать", - "@select": {}, "pleaseChooseAStrongPassword": "Пожалуйста, подберите сильный пароль", - "@pleaseChooseAStrongPassword": {}, "leaveEmptyToClearStatus": "Чтобы очистить статус, оставьте поле пустым.", - "@leaveEmptyToClearStatus": {}, "joinSpace": "Присоединиться к пространству", - "@joinSpace": {}, "searchForUsers": "Поиск @пользователей...", - "@searchForUsers": {}, "thisDevice": "Данное устройство:", - "@thisDevice": {}, - "decline": "Отклонить", - "@decline": {}, - "databaseBuildErrorBody": "Невозможно собрать базу данных SQlite. Приложение пытается использовать старую базу данных. Пожалуйста, сообщите об этой ошибке разработчикам по адресу {url}. Сообщение об ошибке: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "Произошла ошибка при запуске приложения", - "@initAppError": {}, "sessionLostBody": "Ваш сеанс утерян. Пожалуйста, сообщите об этой ошибке разработчикам по адресу {url}. Сообщение об ошибке: {error}", "@sessionLostBody": { "type": "String", @@ -2717,43 +2242,15 @@ } } }, - "subspace": "Субпространство", - "@subspace": {}, "addChatOrSubSpace": "Добавить чат или субпространство", - "@addChatOrSubSpace": {}, - "youInvitedToBy": "📩 Вы были приглашены по ссылке на:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "sendReadReceipts": "Отправка квитанций о прочтении", - "@sendReadReceipts": {}, "verifyOtherUser": "🔐 Подтвердить другого пользователя", - "@verifyOtherUser": {}, "verifyOtherDevice": "🔐 Подтвердить другое устройство", - "@verifyOtherDevice": {}, - "forwardMessageTo": "Переслать сообщение в {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceiptsDescription": "Другие участники чата могут видеть, когда вы прочитали сообщение.", - "@sendReadReceiptsDescription": {}, "transparent": "Прозрачный", - "@transparent": {}, "verifyOtherUserDescription": "Если вы подтвердите другого пользователя, то вы можете быть уверены зная, кому вы действительно пишете. 💪\n\nКогда вы начинаете подтверждение, вы и другой пользователь увидите всплывающее окно в приложении. Там вы увидите ряд чисел или эмодзи, которые вы должны сравнить друг с другом.\n\nЛучший способ сделать это - встретиться в реальной жизни или по видео звонку. 👭", - "@verifyOtherUserDescription": {}, "verifyOtherDeviceDescription": "При подтверждении другого устройства эти устройства могут обмениваться ключами, повышая общую безопасность. 💪 При запуске подтверждения в приложении на обоих устройствах появится всплывающее окно. Там вы увидите ряд чисел или эмодзи, которые вы должны сравнить друг с другом. Лучше иметь оба устройства под рукой перед началом проверки. 🤳", - "@verifyOtherDeviceDescription": {}, "formattedMessagesDescription": "Отображать содержимое расширенных сообщений, такой как жирный текст, с помощью Markdown.", - "@formattedMessagesDescription": {}, "acceptedKeyVerification": "{sender} принял(а) подтверждение ключей", "@acceptedKeyVerification": { "type": "String", @@ -2773,9 +2270,7 @@ } }, "sendTypingNotificationsDescription": "Другие участники чата могут видеть, когда вы набираете новое сообщение.", - "@sendTypingNotificationsDescription": {}, "formattedMessages": "Форматированные сообщения", - "@formattedMessages": {}, "startedKeyVerification": "{sender} начал(а) подтверждение ключей", "@startedKeyVerification": { "type": "String", @@ -2813,77 +2308,32 @@ } }, "incomingMessages": "Входящие сообщения", - "@incomingMessages": {}, "presencesToggle": "Показывать сообщения в статусах других пользователей", "@presencesToggle": { "type": "String", "placeholders": {} }, - "presenceStyle": "Представление:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "hidePresences": "Скрыть список статусов?", - "@hidePresences": {}, "stickers": "Стикеры", - "@stickers": {}, "discover": "Исследовать", - "@discover": {}, "globalChatId": "ID глобального чата", - "@globalChatId": {}, "customEmojisAndStickersBody": "Добавить или поделиться пользовательскими эмодзи или стикерами, которые могут быть применены в любом чате.", - "@customEmojisAndStickersBody": {}, - "hideMemberChangesInPublicChatsBody": "Для улучшения читаемости не показывать на временной шкале входы и выходы из чата.", - "@hideMemberChangesInPublicChatsBody": {}, "knocking": "Стучаться", - "@knocking": {}, "accessAndVisibility": "Доступность и видимость", - "@accessAndVisibility": {}, "publicChatAddresses": "Адресы публичного чата", - "@publicChatAddresses": {}, "accessAndVisibilityDescription": "Кому разрешено войти в этот чат и как этот чат может быть обнаружен.", - "@accessAndVisibilityDescription": {}, - "userRole": "Роль пользователя", - "@userRole": {}, "noDatabaseEncryption": "Шифрование базы данных не поддерживается на этой платформе", - "@noDatabaseEncryption": {}, "appLockDescription": "Заблокировать приложение когда не используется пин код", - "@appLockDescription": {}, "calls": "Звонки", - "@calls": {}, "customEmojisAndStickers": "Пользовательские эмодзи и стикеры", - "@customEmojisAndStickers": {}, "hideRedactedMessages": "Скрыть редактированные сообщения", - "@hideRedactedMessages": {}, "hideInvalidOrUnknownMessageFormats": "Скрыть неправильные или неизвестные форматы сообщения", - "@hideInvalidOrUnknownMessageFormats": {}, "hideRedactedMessagesBody": "Если кто-то редактирует сообщение, оно будет скрыто в чате.", - "@hideRedactedMessagesBody": {}, - "hideMemberChangesInPublicChats": "Скрыть изменения участников в публичных чатах", - "@hideMemberChangesInPublicChats": {}, "overview": "Обзор", - "@overview": {}, - "notifyMeFor": "Уведомлять меня о", - "@notifyMeFor": {}, "passwordRecoverySettings": "Настройки восстановления пароля", - "@passwordRecoverySettings": {}, - "userWouldLikeToChangeTheChat": "{user} желает присоединиться к чату.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "knock": "Постучаться", - "@knock": {}, "usersMustKnock": "Пользователи должны постучаться", - "@usersMustKnock": {}, "noOneCanJoin": "Никто не может присоединиться", - "@noOneCanJoin": {}, - "noPublicLinkHasBeenCreatedYet": "Публичная ссылка еще не была создана", - "@noPublicLinkHasBeenCreatedYet": {}, "chatCanBeDiscoveredViaSearchOnServer": "Чат может быть обнаружен через поиск в {server}", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2894,24 +2344,10 @@ } }, "createNewAddress": "Создать новый адрес", - "@createNewAddress": {}, - "minimumPowerLevel": "{level} является минимальным уровнем.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "commandHint_ignore": "Игнорировать данный matrix ID", - "@commandHint_ignore": {}, "commandHint_unignore": "Не игнорировать данный matrix ID", - "@commandHint_unignore": {}, "restricted": "Запрещено", - "@restricted": {}, "knockRestricted": "Стук запрещен", - "@knockRestricted": {}, "searchIn": "Поиск в чате \"{chat}\"...", "@searchIn": { "type": "String", @@ -2922,13 +2358,9 @@ } }, "searchMore": "Найти еще...", - "@searchMore": {}, "gallery": "Галерея", - "@gallery": {}, "files": "Файлы", - "@files": {}, "swipeRightToLeftToReply": "Для ответа проведите справа налево", - "@swipeRightToLeftToReply": {}, "userLevel": "{level} - Пользователь", "@userLevel": { "type": "String", @@ -2957,32 +2389,21 @@ } }, "changeGeneralChatSettings": "Изменить общие настройки чата", - "@changeGeneralChatSettings": {}, "changeTheChatPermissions": "Изменить права доступа к чату", - "@changeTheChatPermissions": {}, "changeTheDescriptionOfTheGroup": "Изменить описание чата", - "@changeTheDescriptionOfTheGroup": {}, "inviteOtherUsers": "Пригласить других пользователей в этот чат", - "@inviteOtherUsers": {}, "changeTheVisibilityOfChatHistory": "Изменить видимость истории чата", - "@changeTheVisibilityOfChatHistory": {}, "unread": "Непрочитанные", - "@unread": {}, "space": "Пространство", - "@space": {}, "spaces": "Пространства", - "@spaces": {}, "markAsUnread": "Отметить как непрочитанное", - "@markAsUnread": {}, "goToSpace": "Перейти к пространству: {space}", "@goToSpace": { "type": "String", "space": {} }, "sendCanceled": "Отправка отменена", - "@sendCanceled": {}, "noChatsFoundHere": "Не было найдено ни одного чата. Начать с кем-нибудь новый чат можно, нажав кнопку ниже. ⤵️", - "@noChatsFoundHere": {}, "updateInstalled": "🎉 Обновление {version} успешно установлено!", "@updateInstalled": { "type": "String", @@ -2993,7 +2414,6 @@ } }, "changelog": "Список изменений", - "@changelog": {}, "invitedBy": "📩 Приглашен(а) {user}", "@invitedBy": { "placeholders": { @@ -3003,45 +2423,23 @@ } }, "doesNotSeemToBeAValidHomeserver": "Этот домашний сервер выглядит несовместимым. Нет ли в ссылке опечаток?", - "@doesNotSeemToBeAValidHomeserver": {}, "noMoreChatsFound": "Больше чатов не обнаружено...", - "@noMoreChatsFound": {}, "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, "compressVideo": "Сжатие видео...", - "@compressVideo": {}, "oneOfYourDevicesIsNotVerified": "Одно из ваших устройств не подтверждено", - "@oneOfYourDevicesIsNotVerified": {}, "chatPermissionsDescription": "Задайте уровень власти, необходимый для совершения определённых действий в этом чате. Уровни власти 0, 50 и 100 обычно означают пользователей, модераторов и администраторов соответственно, но любая градация также возможна.", - "@chatPermissionsDescription": {}, "prepareSendingAttachment": "Подготовка к отправке вложения...", - "@prepareSendingAttachment": {}, "sendRoomNotifications": "Упоминать @room", - "@sendRoomNotifications": {}, "calculatingFileSize": "Вычисление размера файла...", - "@calculatingFileSize": {}, "sendingAttachment": "Отправка вложения...", - "@sendingAttachment": {}, "generatingVideoThumbnail": "Создание превью видео...", - "@generatingVideoThumbnail": {}, "noticeChatBackupDeviceVerification": "Примечание: Если вы подключите все свои устройства к резервному копированию чатов, то они автоматически станут подтверждёнными.", - "@noticeChatBackupDeviceVerification": {}, "changeTheCanonicalRoomAlias": "Изменить основной общедоступный адрес чата", - "@changeTheCanonicalRoomAlias": {}, "loginWithMatrixId": "Войти через Matrix ID", - "@loginWithMatrixId": {}, - "whatIsAHomeserver": "Для чего нужен домашний сервер?", - "@whatIsAHomeserver": {}, - "homeserverDescription": "Все ваши данные хранятся на домашнем сервере, прямо как у вашего провайдера электронной почты. Вы можете выбрать, какому серверу вы их доверите, при этом сохраняя возможность общаться со всеми. Узнайте больше на https://matrix.org.", - "@homeserverDescription": {}, - "discoverHomeservers": "Список домашних серверов", - "@discoverHomeservers": {}, - "joinedChats": "Вступленные чаты", - "@joinedChats": {}, "serverInformation": "Информация о сервере:", - "@serverInformation": {}, "sendingAttachmentCountOfCount": "Отправляется вложение {index} из {length}...", "@sendingAttachmentCountOfCount": { "type": "integer", @@ -3055,9 +2453,7 @@ } }, "welcomeText": "Привет. Это FluffyChat. Вы можете подписаться на любой сервер, который совместим с https://matrix.org. А потом поболтать с кем нибудь. Это огромная децентрализованная сеть обмена сообщениями!", - "@welcomeText": {}, "noContactInformationProvided": "Сервер не предоставляет никакой правдивой контактной информации", - "@noContactInformationProvided": {}, "aboutHomeserver": "О сервере {homeserver}", "@aboutHomeserver": { "type": "String", @@ -3068,41 +2464,23 @@ } }, "boldText": "Жирный шрифт", - "@boldText": {}, "strikeThrough": "Перечёркнутый", - "@strikeThrough": {}, "pleaseFillOut": "Пожалуйста, заполните", - "@pleaseFillOut": {}, "invalidUrl": "Не верный URL", - "@invalidUrl": {}, "addLink": "Добавить ссылку", - "@addLink": {}, "italicText": "Italic", - "@italicText": {}, "unableToJoinChat": "Невозможно присоединиться к чату. Возможно, другая сторона уже закончила разговор.", - "@unableToJoinChat": {}, "continueText": "Продолжить", - "@continueText": {}, "blur": "Размытие:", - "@blur": {}, "opacity": "Прозрачность:", - "@opacity": {}, "setWallpaper": "Установить обои", - "@setWallpaper": {}, "manageAccount": "Управление аккаунтом", - "@manageAccount": {}, "contactServerAdmin": "Админ сервера", - "@contactServerAdmin": {}, "contactServerSecurity": "Безопасность контактов сервера", - "@contactServerSecurity": {}, "supportPage": "Поддержка", - "@supportPage": {}, "name": "Имя", - "@name": {}, "version": "Версия", - "@version": {}, "website": "Сайт", - "@website": {}, "sendImages": "Отправить {count} изображение", "@sendImages": { "type": "String", @@ -3113,39 +2491,22 @@ } }, "compress": "Сжатие", - "@compress": {}, "notificationRuleMessage": "Сообщение", - "@notificationRuleMessage": {}, "appWantsToUseForLoginDescription": "Вы позволяете приложению и веб-сайту делиться информацией о вас.", - "@appWantsToUseForLoginDescription": {}, "newChatRequest": "📩 Запрос нового чата", - "@newChatRequest": {}, "allDevices": "Все устройства", - "@allDevices": {}, "roomNotificationSettings": "Настройки уведомлений комнаты", - "@roomNotificationSettings": {}, "notificationRuleContainsUserName": "Содержит имя пользователя", - "@notificationRuleContainsUserName": {}, "notificationRuleMaster": "Отключить все уведомления", - "@notificationRuleMaster": {}, "notificationRuleSuppressNoticesDescription": "Отключить уведомления от автоматизированных клиентов, таких как боты.", - "@notificationRuleSuppressNoticesDescription": {}, "notificationRuleInviteForMe": "Приглашение для меня", - "@notificationRuleInviteForMe": {}, "notificationRuleMemberEventDescription": "Отключить уведомления о событиях о членстве.", - "@notificationRuleMemberEventDescription": {}, "notificationRuleIsRoomMention": "Упоминание комнаты", - "@notificationRuleIsRoomMention": {}, "notificationRuleReactionDescription": "Отключить уведомления о реакциях.", - "@notificationRuleReactionDescription": {}, "notificationRuleCall": "Звонок", - "@notificationRuleCall": {}, "notificationRuleSuppressEditsDescription": "Отключить уведомления о отредактированных сообщениях.", - "@notificationRuleSuppressEditsDescription": {}, "notificationRuleEncrypted": "Зашифровано", - "@notificationRuleEncrypted": {}, "more": "Больше", - "@more": {}, "synchronizingPleaseWaitCounter": " Синхронизация… ({percentage}%)", "@synchronizingPleaseWaitCounter": { "type": "String", @@ -3165,61 +2526,29 @@ } }, "contentNotificationSettings": "Настройки уведомлений по тексту", - "@contentNotificationSettings": {}, "generalNotificationSettings": "Общие настройки уведомлений", - "@generalNotificationSettings": {}, "userSpecificNotificationSettings": "Настроки уведомлений пользователя", - "@userSpecificNotificationSettings": {}, "otherNotificationSettings": "Другие настройки уведомлений", - "@otherNotificationSettings": {}, "notificationRuleContainsUserNameDescription": "Уведомляет пользователя, когда сообщение содержит его имя пользователя.", - "@notificationRuleContainsUserNameDescription": {}, "notificationRuleMasterDescription": "Перекрывает все другие правила и отключает все уведомления.", - "@notificationRuleMasterDescription": {}, "notificationRuleSuppressNotices": "Отключить автоматические сообщения", - "@notificationRuleSuppressNotices": {}, "notificationRuleIsUserMention": "Упоминание пользователя", - "@notificationRuleIsUserMention": {}, "notificationRuleContainsDisplayName": "Содержит отображаемое имя", - "@notificationRuleContainsDisplayName": {}, "notificationRuleReaction": "Реакция", - "@notificationRuleReaction": {}, "takeAPhoto": "Снять фото", - "@takeAPhoto": {}, "recordAVideo": "Записать видео", - "@recordAVideo": {}, "enterNewChat": "Введите новый чат", - "@enterNewChat": {}, "otherPartyNotLoggedIn": "Другая сторона в настоящее время не вошла в систему и поэтому не может получать сообщения!", - "@otherPartyNotLoggedIn": {}, "open": "Открыть", - "@open": {}, "waitingForServer": "Ожидание сервера...", - "@waitingForServer": {}, - "appIntroduction": "FluffyChat позволяет вам общаться с друзьями с разными мессенджерами. Узнайте больше на https://matrix.org или просто нажмите *Продолжить*.", - "@appIntroduction": {}, "previous": "Предыдущий", - "@previous": {}, "notificationRuleCallDescription": "Уведомляет пользователя про звонки.", - "@notificationRuleCallDescription": {}, "notificationRuleEncryptedRoomOneToOne": "Шифрованная комната «Один на один»", - "@notificationRuleEncryptedRoomOneToOne": {}, "notificationRuleEncryptedRoomOneToOneDescription": "Уведомляет пользователя про сообщение в зашифрованных комнатах «Один на один».", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, "notificationRuleRoomOneToOne": "Комната «Один на один»", - "@notificationRuleRoomOneToOne": {}, - "setCustomPermissionLevel": "Установить уровень пользовательских разрешений", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Выберите одну из стандартных ролей ниже или введите произвольный уровень прав от 0 до 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Заглушить пользователя", - "@ignoreUser": {}, - "normalUser": "Обычный пользователь", - "@normalUser": {}, "commandHint_roomupgrade": "Обновить комнату до указанной версии", - "@commandHint_roomupgrade": {}, "notificationRuleInviteForMeDescription": "Уведомляет пользователя, когда его приглашают в комнату.", - "@notificationRuleInviteForMeDescription": {}, "unknownPushRule": "Неизвестное правило оповещения '{rule}'", "@unknownPushRule": { "type": "String", @@ -3230,47 +2559,26 @@ } }, "checkList": "Контрольный список", - "@checkList": {}, "changedTheChatDescription": "{username} изменил описание чата", - "@changedTheChatDescription": {}, "changedTheChatName": "{username} изменил(а) имя чата", - "@changedTheChatName": {}, "notificationRuleMemberEvent": "Мероприятие участника", - "@notificationRuleMemberEvent": {}, "notificationRuleIsUserMentionDescription": "Уведомляет пользователя, когда он упоминается непосредственно в сообщении.", - "@notificationRuleIsUserMentionDescription": {}, "notificationRuleContainsDisplayNameDescription": "Уведомляет пользователя, когда сообщение содержит его имя отображения.", - "@notificationRuleContainsDisplayNameDescription": {}, "notificationRuleIsRoomMentionDescription": "Уведомляет пользователя о наличии упоминания о комнате.", - "@notificationRuleIsRoomMentionDescription": {}, "notificationRuleRoomnotif": "Уведомление о комнате", - "@notificationRuleRoomnotif": {}, "notificationRuleRoomnotifDescription": "Уведомляет пользователя, когда сообщение содержит '@room'.", - "@notificationRuleRoomnotifDescription": {}, "notificationRuleTombstone": "Надгробный камень", - "@notificationRuleTombstone": {}, "notificationRuleTombstoneDescription": "Уведомляет пользователя о сообщениях о деактивации комнаты.", - "@notificationRuleTombstoneDescription": {}, "notificationRuleRoomServerAcl": "ACL сервера комнаты", - "@notificationRuleRoomServerAcl": {}, "notificationRuleRoomServerAclDescription": "Удаляет уведомления о списках контроля доступа к серверу комнат (ACL).", - "@notificationRuleRoomServerAclDescription": {}, "notificationRuleSuppressEdits": "Подавление правки", - "@notificationRuleSuppressEdits": {}, "notificationRuleRoomOneToOneDescription": "Уведомляет пользователя о сообщениях в разделах один на один.", - "@notificationRuleRoomOneToOneDescription": {}, "notificationRuleMessageDescription": "Уведомляет пользователя об общих сообщениях.", - "@notificationRuleMessageDescription": {}, "notificationRuleEncryptedDescription": "Уведомляет пользователя о сообщениях в зашифрованных комнатах.", - "@notificationRuleEncryptedDescription": {}, "notificationRuleJitsi": "Джици", - "@notificationRuleJitsi": {}, "notificationRuleJitsiDescription": "Уведомляет пользователя о событиях виджета Jitsi.", - "@notificationRuleJitsiDescription": {}, "notificationRuleServerAcl": "Запретить события ACL сервера", - "@notificationRuleServerAcl": {}, "notificationRuleServerAclDescription": "Удаляет уведомления о событиях ACL сервера.", - "@notificationRuleServerAclDescription": {}, "sentVoiceMessage": "️🎙️ {duration} - Голосовое сообщение от {sender}", "@sentVoiceMessage": { "type": "String", @@ -3284,57 +2592,27 @@ } }, "deletePushRuleCanNotBeUndone": "Если вы удалите эту настройку уведомлений, это невозможно отменить.", - "@deletePushRuleCanNotBeUndone": {}, "shareKeysWith": "Поделиться ключами с...", - "@shareKeysWith": {}, "shareKeysWithDescription": "Каким устройствам следует доверять, чтобы они могли читать ваши сообщения в зашифрованных чатах?", - "@shareKeysWithDescription": {}, - "crossVerifiedDevicesIfEnabled": "Если включено, перекрестите проверенные устройства", - "@crossVerifiedDevicesIfEnabled": {}, + "crossVerifiedDevicesIfEnabled": "Кросс-верифицированные устройства, если они включены", "crossVerifiedDevices": "Кросс-верифицированные устройства", - "@crossVerifiedDevices": {}, "verifiedDevicesOnly": "Только проверенные устройства", - "@verifiedDevicesOnly": {}, "optionalMessage": "(Необязательно) сообщение...", - "@optionalMessage": {}, "notSupportedOnThisDevice": "Не поддерживается на этом устройстве", - "@notSupportedOnThisDevice": {}, "approve": "Утверждать", - "@approve": {}, "youHaveKnocked": "Вы постучали", - "@youHaveKnocked": {}, "pleaseWaitUntilInvited": "Пожалуйста, подождите, пока кто-нибудь из комнаты не пригласит вас.", - "@pleaseWaitUntilInvited": {}, "commandHint_logout": "Выйти из текущего устройства", - "@commandHint_logout": {}, "commandHint_logoutall": "Выйти из всех активных устройств", - "@commandHint_logoutall": {}, "displayNavigationRail": "Показать навигационный рельс на мобильном устройстве", - "@displayNavigationRail": {}, "customReaction": "Пользовательская реакция", - "@customReaction": {}, "moreEvents": "Больше событий", - "@moreEvents": {}, "declineInvitation": "Отказаться от приглашения", - "@declineInvitation": {}, "noMessagesYet": "Пока нет сообщений", - "@noMessagesYet": {}, "longPressToRecordVoiceMessage": "Нажмите длиннее, чтобы записать голосовое сообщение.", - "@longPressToRecordVoiceMessage": {}, "pause": "Пауза", - "@pause": {}, - "resume": "Резюмировать", - "@resume": {}, - "newSubSpace": "Новое подпространство", - "@newSubSpace": {}, - "moveToDifferentSpace": "Переместить в другое пространство", - "@moveToDifferentSpace": {}, - "moveUp": "Переместить вверх", - "@moveUp": {}, - "moveDown": "Переместить вниз", - "@moveDown": {}, + "resume": "Продолжить", "removeFromSpaceDescription": "Чат будет удален из пространства, но все равно появится в вашем списке чатов.", - "@removeFromSpaceDescription": {}, "countChats": "{chats} чатов", "@countChats": { "type": "String", @@ -3362,8 +2640,6 @@ } } }, - "donate": "Пожертвовать", - "@donate": {}, "startedAPoll": "{username} начал опрос.", "@startedAPoll": { "type": "String", @@ -3374,55 +2650,49 @@ } }, "poll": "Опрос", - "@poll": {}, "startPoll": "Начать опрос", - "@startPoll": {}, "endPoll": "Завершить опрос", - "@endPoll": {}, "answersVisible": "Ответы видны", - "@answersVisible": {}, - "answersHidden": "Ответы скрыты", - "@answersHidden": {}, "pollQuestion": "Вопрос по опросу", - "@pollQuestion": {}, "answerOption": "Вариант ответа", - "@answerOption": {}, "addAnswerOption": "Добавить вариант ответа", - "@addAnswerOption": {}, "allowMultipleAnswers": "Разрешить несколько ответов", - "@allowMultipleAnswers": {}, "pollHasBeenEnded": "Опрос завершен", - "@pollHasBeenEnded": {}, "answersWillBeVisibleWhenPollHasEnded": "Ответы будут видны после завершения опроса", - "@answersWillBeVisibleWhenPollHasEnded": {}, - "replyInThread": "Ответить в потоке", - "@replyInThread": {}, - "thread": "Нить", - "@thread": {}, + "replyInThread": "Ответить в ветке", + "thread": "Ветка", "backToMainChat": "Вернуться в основной чат", - "@backToMainChat": {}, "saveChanges": "Сохранить изменения", - "@saveChanges": {}, "createSticker": "Создать стикер или эмоджи", - "@createSticker": {}, "useAsSticker": "Использовать как стикер", - "@useAsSticker": {}, "useAsEmoji": "Использовать в качестве эмоджи", - "@useAsEmoji": {}, "stickerPackNameAlreadyExists": "Имя набора стикеров уже существует", - "@stickerPackNameAlreadyExists": {}, "newStickerPack": "Новая упаковка стикеров", - "@newStickerPack": {}, "stickerPackName": "Имя упаковки стикеров", - "@stickerPackName": {}, "attribution": "Атрибуция", - "@attribution": {}, "skipChatBackup": "Пропустить резервную копию чата", - "@skipChatBackup": {}, "skipChatBackupWarning": "Вы уверены? Без включения резервного копирования чата вы можете потерять доступ к своим сообщениям, если переключите устройство.", - "@skipChatBackupWarning": {}, "loadingMessages": "Загрузка сообщений", - "@loadingMessages": {}, "setupChatBackup": "Настроить резервную копию чата", - "@setupChatBackup": {} -} + "createNewAccount": "Создать новый аккаунт", + "theProcessWasCanceled": "Процесс был отменен.", + "noMoreResultsFound": "Ничего не найдено", + "countInvited": "{count} приглашенных", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "loadCountMoreParticipants": "Загрузить ещё {count} участников", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + } +} \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index 4645b333..59769a2c 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -304,16 +304,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Potvrdiť", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Pripojiť", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt bol pozvaný do skupiny", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -383,33 +373,6 @@ } } }, - "dateWithoutYear": "{day}.{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}.{month}.{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "delete": "Odstrániť", "@delete": { "type": "String", @@ -465,11 +428,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Musíte zvoliť kód emotikonu a obrázok!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Prázdny chat", "@emptyChat": { "type": "String", @@ -490,11 +448,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Zadajte svoj homeserver", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "fileName": "Názov súboru", "@fileName": { "type": "String", @@ -571,11 +524,6 @@ "type": "String", "placeholders": {} }, - "identity": "Identita", - "@identity": { - "type": "String", - "placeholders": {} - }, "incorrectPassphraseOrKey": "Nesprávna prístupová fráza alebo kľúč na obnovenie", "@incorrectPassphraseOrKey": { "type": "String", @@ -691,11 +639,6 @@ "type": "String", "placeholders": {} }, - "license": "Licencia", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Svetlá", "@lightTheme": { "type": "String", @@ -881,11 +824,6 @@ } } }, - "rejoin": "Vrátiť sa", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Odstrániť", "@remove": { "type": "String", @@ -905,11 +843,6 @@ } } }, - "removeDevice": "Odstráňiť zariadenie", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Odblokovať", "@unbanFromChat": { "type": "String", @@ -930,15 +863,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Videné užívateľom {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Odoslať", "@send": { "type": "String", @@ -1004,11 +928,6 @@ } } }, - "setInvitationLink": "Nastaviť odkaz pre pozvánku", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "Nastaviť status", "@setStatus": { "type": "String", @@ -1120,15 +1039,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, other{{unreadCount} neprečítaných chatov}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} a {count} dalších píšu…", "@userAndOthersAreTyping": { "type": "String", @@ -1248,11 +1158,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Pozadie", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "whoIsAllowedToJoinThisGroup": "Kto môže vstúpiť do tejto skupiny", "@whoIsAllowedToJoinThisGroup": { "type": "String", @@ -1283,11 +1188,6 @@ "type": "String", "placeholders": {} }, - "people": "Ľudia", - "@people": { - "type": "String", - "placeholders": {} - }, "chats": "Čety", "@chats": { "type": "String", @@ -1303,18 +1203,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "Domovský server podporuje verzie špecifikácie:\n{serverVersions}\nAle táto aplikácie podporuje iba {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "answeredTheCall": "{senderName} prevzal hovor", "@answeredTheCall": { "type": "String", @@ -1349,11 +1237,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Poslať nálepku", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "roomVersion": "Verzia miestnosti", "@roomVersion": { "type": "String", @@ -1369,11 +1252,6 @@ "type": "String", "placeholders": {} }, - "setPermissionsLevel": "Nastaviť úroveň oprávnení", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "badServerLoginTypesException": "Server podporuje tieto typy prihlásenia:\n{serverVersions}\nAle táto aplikácia podporuje iba:\n{supportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -1442,11 +1320,6 @@ "@sendAsText": { "type": "String" }, - "sendOriginal": "Poslať originál", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Poslať video", "@sendVideo": { "type": "String", @@ -1454,4 +1327,4 @@ }, "importNow": "Importovať teraz", "@importNow": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 4bf5f58a..4c139819 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -131,11 +131,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Botova sporočila", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Prekliči", "@cancel": { "type": "String", @@ -303,8 +298,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Klepet je bil dodan v ta prostor", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Klepeti", "@chats": { "type": "String", @@ -406,21 +399,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Potrdi", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Vsebuje prikazno ime", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Vsebuje uporabniško ime", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "archive": "Arhiv", "@archive": { "type": "String", @@ -467,18 +445,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "Domači strežnik podpira različice Spec:\n{serverVersions}\nToda ta aplikacija podpira samo {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "changedTheChatNameTo": "{username} je spremenil ime klepeta v: '{chatname}'", "@changedTheChatNameTo": { "type": "String", @@ -525,11 +491,6 @@ "type": "String", "description": "Usage hint for the command /myroomnick" }, - "connect": "Povežite se", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt je bil povabljen v skupino", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -603,33 +564,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "createdTheChat": "{username} je ustvaril klepet", "@createdTheChat": { "type": "String", @@ -656,4 +590,4 @@ "type": "String", "placeholders": {} } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_sq.arb b/lib/l10n/intl_sq.arb index 0967ef42..9e26dfee 100644 --- a/lib/l10n/intl_sq.arb +++ b/lib/l10n/intl_sq.arb @@ -1 +1 @@ -{} +{} \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 126b07a0..c78c2ec3 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -118,18 +118,6 @@ } } }, - "badServerVersionsException": "Домаћи сервер подржава верзије:\n{serverVersions}\nали ова апликација подржава само {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Забрани у ћаскању", "@banFromChat": { "type": "String", @@ -162,11 +150,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Поруке Бота", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Откажи", "@cancel": { "type": "String", @@ -468,31 +451,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Потврди", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Повежи се", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Особа је позвана у групу", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Садржи приказно име", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Садржи корисничко име", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Садржај је пријављен администраторима сервера", "@contentHasBeenReported": { "type": "String", @@ -567,33 +530,6 @@ } } }, - "dateWithoutYear": "{day} {month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day} {month} {year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Ово ће деактивирати ваш кориснички налог. Не може се повратити! Сигурни сте?", "@deactivateAccountWarning": { "type": "String", @@ -699,11 +635,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Морате да изаберете скраћеницу и слику за емоти!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "празно ћаскање", "@emptyChat": { "type": "String", @@ -753,11 +684,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Унесите свој домаћи сервер", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "Све је спремно!", "@everythingReady": { "type": "String", @@ -798,11 +724,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Иди у нову собу", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Група", "@group": { "type": "String", @@ -874,11 +795,6 @@ "type": "String", "placeholders": {} }, - "identity": "Идентитет", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Игнориши", "@ignore": { "type": "String", @@ -940,11 +856,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Позивнице за мене", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} вас позива у FluffyChat. \n1. Инсталирајте FluffyChat: https://fluffychat.im \n2. Региструјте се или пријавите \n3. Отворите везу позивнице: {link}", "@inviteText": { "type": "String", @@ -1024,11 +935,6 @@ "type": "String", "placeholders": {} }, - "license": "Лиценца", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "светли", "@lightTheme": { "type": "String", @@ -1072,11 +978,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Измене чланова", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Спомени", "@mention": { "type": "String", @@ -1172,11 +1073,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Обавештења укључена за овај налог", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} корисника куца…", "@numUsersTyping": { "type": "String", @@ -1266,11 +1162,6 @@ "type": "String", "placeholders": {} }, - "people": "Људи", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Избор слике", "@pickImage": { "type": "String", @@ -1290,11 +1181,6 @@ } } }, - "pleaseChoose": "Изаберите", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Изаберите код за пролаз", "@pleaseChooseAPasscode": { "type": "String", @@ -1388,11 +1274,6 @@ } } }, - "rejoin": "Поново се придружи", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Уклони", "@remove": { "type": "String", @@ -1412,11 +1293,6 @@ } } }, - "removeDevice": "Уклони уређај", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Уклони изгнанство", "@unbanFromChat": { "type": "String", @@ -1467,15 +1343,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username} прегледа", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Пошаљи", "@send": { "type": "String", @@ -1506,11 +1373,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Пошаљи оригинал", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Пошаљи видео", "@sendVideo": { "type": "String", @@ -1575,21 +1437,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "постави посебне емотије", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Поставља везу позивнице", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Одреди ниво дозволе", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Постави статус", "@setStatus": { "type": "String", @@ -1619,11 +1466,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Јединствена пријава", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Прескочи", "@skip": { "type": "String", @@ -1679,21 +1521,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Мењај омиљеност", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Мењај ућутканост", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Означи не/прочитано", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Превише упита. Покушајте касније!", "@tooManyRequestsWarning": { "type": "String", @@ -1760,15 +1587,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, other{непрочитаних ћаскања: {unreadCount}}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} и {count} корисника куцају…", "@userAndOthersAreTyping": { "type": "String", @@ -1893,11 +1711,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Тапета", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Упозорење!", "@warning": { "type": "String", @@ -1967,4 +1780,4 @@ "@repeatPassword": {}, "commandHint_cuddle": "Pošalji zagrljaj", "@commandHint_cuddle": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index c3e78d76..82fb566c 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1,2858 +1,2647 @@ { - "@@last_modified": "2021-08-14 12:41:09.835634", - "about": "Om", - "@about": { - "type": "String", - "placeholders": {} - }, - "accept": "Acceptera", - "@accept": { - "type": "String", - "placeholders": {} - }, - "acceptedTheInvitation": "👍 {username} accepterade inbjudan", - "@acceptedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "account": "Konto", - "@account": { - "type": "String", - "placeholders": {} - }, - "activatedEndToEndEncryption": "🔐 {username} aktiverade ändpunktskryptering", - "@activatedEndToEndEncryption": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "admin": "Admin", - "@admin": { - "type": "String", - "placeholders": {} - }, - "alias": "alias", - "@alias": { - "type": "String", - "placeholders": {} - }, - "all": "Alla", - "@all": { - "type": "String", - "placeholders": {} - }, - "answeredTheCall": "{senderName} besvarade samtalet", - "@answeredTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "anyoneCanJoin": "Vem som helst kan gå med", - "@anyoneCanJoin": { - "type": "String", - "placeholders": {} - }, - "appLock": "App-lås", - "@appLock": { - "type": "String", - "placeholders": {} - }, - "archive": "Arkiv", - "@archive": { - "type": "String", - "placeholders": {} - }, - "areGuestsAllowedToJoin": "Får gästanvändare gå med", - "@areGuestsAllowedToJoin": { - "type": "String", - "placeholders": {} - }, - "areYouSure": "Är du säker?", - "@areYouSure": { - "type": "String", - "placeholders": {} - }, - "areYouSureYouWantToLogout": "Är du säker på att du vill logga ut?", - "@areYouSureYouWantToLogout": { - "type": "String", - "placeholders": {} - }, - "askSSSSSign": "För att kunna signera den andra personen, vänligen ange din lösenfras eller återställningsnyckel för säker lagring.", - "@askSSSSSign": { - "type": "String", - "placeholders": {} - }, - "askVerificationRequest": "Acceptera denna verifikationsförfrågan från {username}?", - "@askVerificationRequest": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "badServerVersionsException": "Hemservern stöjder Spec-versionen:\n{serverVersions}\nMen denna app stödjer enbart {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "banFromChat": "Bannlys från chatt", - "@banFromChat": { - "type": "String", - "placeholders": {} - }, - "banned": "Bannlyst", - "@banned": { - "type": "String", - "placeholders": {} - }, - "bannedUser": "{username} bannlös {targetName}", - "@bannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "blockDevice": "Blockera Enhet", - "@blockDevice": { - "type": "String", - "placeholders": {} - }, - "botMessages": "Bot meddelanden", - "@botMessages": { - "type": "String", - "placeholders": {} - }, - "cancel": "Avbryt", - "@cancel": { - "type": "String", - "placeholders": {} - }, - "changeDeviceName": "Ändra enhetsnamn", - "@changeDeviceName": { - "type": "String", - "placeholders": {} - }, - "changedTheChatAvatar": "{username} ändrade sin chatt-avatar", - "@changedTheChatAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheChatDescriptionTo": "{username} ändrade chatt-beskrivningen till: '{description}'", - "@changedTheChatDescriptionTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "description": { - "type": "String" - } - } - }, - "changedTheChatNameTo": "{username} ändrade sitt chatt-namn till: '{chatname}'", - "@changedTheChatNameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "chatname": { - "type": "String" - } - } - }, - "changedTheChatPermissions": "{username} ändrade chatt-rättigheterna", - "@changedTheChatPermissions": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheDisplaynameTo": "{username} ändrade visningsnamnet till: '{displayname}'", - "@changedTheDisplaynameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "displayname": { - "type": "String" - } - } - }, - "changedTheGuestAccessRules": "{username} ändrade reglerna för gästaccess", - "@changedTheGuestAccessRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRulesTo": "{username} ändrade reglerna för gästaccess till: {rules}", - "@changedTheGuestAccessRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheHistoryVisibility": "{username} ändrade historikens synlighet", - "@changedTheHistoryVisibility": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheHistoryVisibilityTo": "{username} ändrade historikens synlighet till: {rules}", - "@changedTheHistoryVisibilityTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheJoinRules": "{username} ändrade anslutningsreglerna", - "@changedTheJoinRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheJoinRulesTo": "{username} ändrade anslutningsreglerna till {joinRules}", - "@changedTheJoinRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "joinRules": { - "type": "String" - } - } - }, - "changedTheProfileAvatar": "{username} ändrade sin avatar", - "@changedTheProfileAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomAliases": "{username} ändrade rummets alias", - "@changedTheRoomAliases": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomInvitationLink": "{username} ändrade inbjudningslänken", - "@changedTheRoomInvitationLink": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changePassword": "Ändra lösenord", - "@changePassword": { - "type": "String", - "placeholders": {} - }, - "changeTheHomeserver": "Ändra hemserver", - "@changeTheHomeserver": { - "type": "String", - "placeholders": {} - }, - "changeTheme": "Ändra din stil", - "@changeTheme": { - "type": "String", - "placeholders": {} - }, - "changeTheNameOfTheGroup": "Ändra namn på gruppen", - "@changeTheNameOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "channelCorruptedDecryptError": "Krypteringen har blivit korrupt", - "@channelCorruptedDecryptError": { - "type": "String", - "placeholders": {} - }, - "chat": "Chatt", - "@chat": { - "type": "String", - "placeholders": {} - }, - "chatDetails": "Chatt-detaljer", - "@chatDetails": { - "type": "String", - "placeholders": {} - }, - "chooseAStrongPassword": "Välj ett starkt lösenord", - "@chooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "close": "Stäng", - "@close": { - "type": "String", - "placeholders": {} - }, - "compareEmojiMatch": "Vänligen jämför uttryckssymbolerna", - "@compareEmojiMatch": { - "type": "String", - "placeholders": {} - }, - "compareNumbersMatch": "Vänligen jämför siffrorna", - "@compareNumbersMatch": { - "type": "String", - "placeholders": {} - }, - "configureChat": "Konfigurera chatt", - "@configureChat": { - "type": "String", - "placeholders": {} - }, - "confirm": "Bekräfta", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Anslut", - "@connect": { - "type": "String", - "placeholders": {} - }, - "contactHasBeenInvitedToTheGroup": "Kontakten har blivit inbjuden till gruppen", - "@contactHasBeenInvitedToTheGroup": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Innehåller visningsnamn", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Innehåller användarnamn", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "contentHasBeenReported": "Innehållet har rapporterats till server-admins", - "@contentHasBeenReported": { - "type": "String", - "placeholders": {} - }, - "copiedToClipboard": "Kopierat till urklipp", - "@copiedToClipboard": { - "type": "String", - "placeholders": {} - }, - "copy": "Kopiera", - "@copy": { - "type": "String", - "placeholders": {} - }, - "couldNotDecryptMessage": "Kunde ej avkoda meddelande: {error}", - "@couldNotDecryptMessage": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "countParticipants": "{count} deltagare", - "@countParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "create": "Skapa", - "@create": { - "type": "String", - "placeholders": {} - }, - "createdTheChat": "💬 {username} skapade chatten", - "@createdTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "currentlyActive": "För närvarande aktiv", - "@currentlyActive": { - "type": "String", - "placeholders": {} - }, - "darkTheme": "Mörkt", - "@darkTheme": { - "type": "String", - "placeholders": {} - }, - "dateAndTimeOfDay": "{date}, {timeOfDay}", - "@dateAndTimeOfDay": { - "type": "String", - "placeholders": { - "date": { - "type": "String" - }, - "timeOfDay": { - "type": "String" - } - } - }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "deactivateAccountWarning": "Detta kommer att avaktivera ditt konto. Det här går inte att ångra! Är du säker?", - "@deactivateAccountWarning": { - "type": "String", - "placeholders": {} - }, - "defaultPermissionLevel": "Standard behörighetsnivå", - "@defaultPermissionLevel": { - "type": "String", - "placeholders": {} - }, - "delete": "Radera", - "@delete": { - "type": "String", - "placeholders": {} - }, - "deleteAccount": "Ta bort konto", - "@deleteAccount": { - "type": "String", - "placeholders": {} - }, - "deleteMessage": "Ta bort meddelande", - "@deleteMessage": { - "type": "String", - "placeholders": {} - }, - "device": "Enhet", - "@device": { - "type": "String", - "placeholders": {} - }, - "deviceId": "Enhets-ID", - "@deviceId": { - "type": "String", - "placeholders": {} - }, - "devices": "Enheter", - "@devices": { - "type": "String", - "placeholders": {} - }, - "directChats": "Direkt chatt", - "@directChats": { - "type": "String", - "placeholders": {} - }, - "displaynameHasBeenChanged": "Visningsnamn har ändrats", - "@displaynameHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "downloadFile": "Ladda ner fil", - "@downloadFile": { - "type": "String", - "placeholders": {} - }, - "edit": "Ändra", - "@edit": { - "type": "String", - "placeholders": {} - }, - "editBlockedServers": "redigera blockerade servrar", - "@editBlockedServers": { - "type": "String", - "placeholders": {} - }, - "editDisplayname": "Ändra visningsnamn", - "@editDisplayname": { - "type": "String", - "placeholders": {} - }, - "editRoomAvatar": "redigera rumsavatar", - "@editRoomAvatar": { - "type": "String", - "placeholders": {} - }, - "emoteExists": "Dekalen existerar redan!", - "@emoteExists": { - "type": "String", - "placeholders": {} - }, - "emoteInvalid": "Ogiltig dekal-kod!", - "@emoteInvalid": { - "type": "String", - "placeholders": {} - }, - "emotePacks": "Dekalpaket för rummet", - "@emotePacks": { - "type": "String", - "placeholders": {} - }, - "emoteSettings": "Emote inställningar", - "@emoteSettings": { - "type": "String", - "placeholders": {} - }, - "emoteShortcode": "Dekal kod", - "@emoteShortcode": { - "type": "String", - "placeholders": {} - }, - "emoteWarnNeedToPick": "Du måste välja en dekal-kod och en bild!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, - "emptyChat": "Tom chatt", - "@emptyChat": { - "type": "String", - "placeholders": {} - }, - "enableEmotesGlobally": "Aktivera dekal-paket globalt", - "@enableEmotesGlobally": { - "type": "String", - "placeholders": {} - }, - "enableEncryption": "Aktivera kryptering", - "@enableEncryption": { - "type": "String", - "placeholders": {} - }, - "enableEncryptionWarning": "Du kommer inte ha fortsatt möjlighet till att inaktivera krypteringen. Är du säker?", - "@enableEncryptionWarning": { - "type": "String", - "placeholders": {} - }, - "encrypted": "Krypterad", - "@encrypted": { - "type": "String", - "placeholders": {} - }, - "encryption": "Kryptering", - "@encryption": { - "type": "String", - "placeholders": {} - }, - "encryptionNotEnabled": "Kryptering är ej aktiverad", - "@encryptionNotEnabled": { - "type": "String", - "placeholders": {} - }, - "endedTheCall": "{senderName} avslutade samtalet", - "@endedTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "enterAnEmailAddress": "Ange en e-postaddress", - "@enterAnEmailAddress": { - "type": "String", - "placeholders": {} - }, - "enterYourHomeserver": "Ange din hemserver", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "extremeOffensive": "Extremt stötande", - "@extremeOffensive": { - "type": "String", - "placeholders": {} - }, - "fileName": "Filnamn", - "@fileName": { - "type": "String", - "placeholders": {} - }, - "fluffychat": "FluffyChat", - "@fluffychat": { - "type": "String", - "placeholders": {} - }, - "forward": "Framåt", - "@forward": { - "type": "String", - "placeholders": {} - }, - "fromJoining": "Från att gå med", - "@fromJoining": { - "type": "String", - "placeholders": {} - }, - "fromTheInvitation": "Från inbjudan", - "@fromTheInvitation": { - "type": "String", - "placeholders": {} - }, - "group": "Grupp", - "@group": { - "type": "String", - "placeholders": {} - }, - "groupIsPublic": "Gruppen är publik", - "@groupIsPublic": { - "type": "String", - "placeholders": {} - }, - "groups": "Grupper", - "@groups": { - "type": "String", - "placeholders": {} - }, - "groupWith": "Gruppen med {displayname}", - "@groupWith": { - "type": "String", - "placeholders": { - "displayname": { - "type": "String" - } - } - }, - "guestsAreForbidden": "Gäster är förbjudna", - "@guestsAreForbidden": { - "type": "String", - "placeholders": {} - }, - "guestsCanJoin": "Gäster kan ansluta", - "@guestsCanJoin": { - "type": "String", - "placeholders": {} - }, - "hasWithdrawnTheInvitationFor": "{username} har tagit tillbaka inbjudan för {targetName}", - "@hasWithdrawnTheInvitationFor": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "help": "Hjälp", - "@help": { - "type": "String", - "placeholders": {} - }, - "hideRedactedEvents": "Göm redigerade händelser", - "@hideRedactedEvents": { - "type": "String", - "placeholders": {} - }, - "hideUnknownEvents": "Göm okända händelser", - "@hideUnknownEvents": { - "type": "String", - "placeholders": {} - }, - "howOffensiveIsThisContent": "Hur stötande är detta innehåll?", - "@howOffensiveIsThisContent": { - "type": "String", - "placeholders": {} - }, - "id": "ID", - "@id": { - "type": "String", - "placeholders": {} - }, - "identity": "Identitet", - "@identity": { - "type": "String", - "placeholders": {} - }, - "ignore": "Ignorera", - "@ignore": { - "type": "String", - "placeholders": {} - }, - "ignoredUsers": "Ignorera användare", - "@ignoredUsers": { - "type": "String", - "placeholders": {} - }, - "iHaveClickedOnLink": "Jag har klickat på länken", - "@iHaveClickedOnLink": { - "type": "String", - "placeholders": {} - }, - "incorrectPassphraseOrKey": "Felaktig lösenordsfras eller åsterställningsnyckel", - "@incorrectPassphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "inoffensive": "Oförargligt", - "@inoffensive": { - "type": "String", - "placeholders": {} - }, - "inviteContact": "Bjud in kontakt", - "@inviteContact": { - "type": "String", - "placeholders": {} - }, - "inviteContactToGroup": "Bjud in kontakt till {groupName}", - "@inviteContactToGroup": { - "type": "String", - "placeholders": { - "groupName": { - "type": "String" - } - } - }, - "invited": "Inbjuden", - "@invited": { - "type": "String", - "placeholders": {} - }, - "invitedUser": "📩 {username} bjöd in {targetName}", - "@invitedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "invitedUsersOnly": "Endast inbjudna användare", - "@invitedUsersOnly": { - "type": "String", - "placeholders": {} - }, - "inviteForMe": "Inbjudning till mig", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "inviteText": "{username} bjöd in dig till FluffyChat.\n1. Besök fluffychat.im och installera appen\n2. Registrera dig eller logga in\n3. Öppna inbjudningslänk:\n {link}", - "@inviteText": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "link": { - "type": "String" - } - } - }, - "isTyping": "skriver…", - "@isTyping": { - "type": "String", - "placeholders": {} - }, - "joinedTheChat": "👋 {username} anslöt till chatten", - "@joinedTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "joinRoom": "Anslut till rum", - "@joinRoom": { - "type": "String", - "placeholders": {} - }, - "kicked": "👞 {username} sparkade ut {targetName}", - "@kicked": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickedAndBanned": "🙅 {username} sparkade och bannade {targetName}", - "@kickedAndBanned": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "kickFromChat": "Sparka från chatt", - "@kickFromChat": { - "type": "String", - "placeholders": {} - }, - "lastActiveAgo": "Senast aktiv: {localizedTimeShort}", - "@lastActiveAgo": { - "type": "String", - "placeholders": { - "localizedTimeShort": { - "type": "String" - } - } - }, - "leave": "Lämna", - "@leave": { - "type": "String", - "placeholders": {} - }, - "leftTheChat": "Lämnade chatten", - "@leftTheChat": { - "type": "String", - "placeholders": {} - }, - "license": "Licens", - "@license": { - "type": "String", - "placeholders": {} - }, - "lightTheme": "Ljust", - "@lightTheme": { - "type": "String", - "placeholders": {} - }, - "loadCountMoreParticipants": "Ladda {count} mer deltagare", - "@loadCountMoreParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "loadingPleaseWait": "Laddar... Var god vänta.", - "@loadingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "loadMore": "Ladda mer…", - "@loadMore": { - "type": "String", - "placeholders": {} - }, - "login": "Logga in", - "@login": { - "type": "String", - "placeholders": {} - }, - "logInTo": "Logga in till {homeserver}", - "@logInTo": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "logout": "Logga ut", - "@logout": { - "type": "String", - "placeholders": {} - }, - "memberChanges": "Medlemsändringar", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "mention": "Nämn", - "@mention": { - "type": "String", - "placeholders": {} - }, - "messages": "Meddelanden", - "@messages": { - "type": "String", - "placeholders": {} - }, - "moderator": "Moderator", - "@moderator": { - "type": "String", - "placeholders": {} - }, - "muteChat": "Tysta chatt", - "@muteChat": { - "type": "String", - "placeholders": {} - }, - "needPantalaimonWarning": "Var medveten om att du behöver Pantalaimon för att använda ändpunktskryptering tillsvidare.", - "@needPantalaimonWarning": { - "type": "String", - "placeholders": {} - }, - "newChat": "Ny chatt", - "@newChat": { - "type": "String", - "placeholders": {} - }, - "newMessageInFluffyChat": "💬 Nya meddelanden i FluffyChat", - "@newMessageInFluffyChat": { - "type": "String", - "placeholders": {} - }, - "newVerificationRequest": "Ny verifikationsbegäran!", - "@newVerificationRequest": { - "type": "String", - "placeholders": {} - }, - "next": "Nästa", - "@next": { - "type": "String", - "placeholders": {} - }, - "no": "Nej", - "@no": { - "type": "String", - "placeholders": {} - }, - "noConnectionToTheServer": "Ingen anslutning till servern", - "@noConnectionToTheServer": { - "type": "String", - "placeholders": {} - }, - "noEmotesFound": "Hittade inga dekaler. 😕", - "@noEmotesFound": { - "type": "String", - "placeholders": {} - }, - "noGoogleServicesWarning": "De ser ut som att du inte har google-tjänster på din telefon. Det är ett bra beslut för din integritet! För att få aviseringar i FluffyChat rekommenderar vi att använda https://microg.org/ eller https://unifiedpush.org/ .", - "@noGoogleServicesWarning": { - "type": "String", - "placeholders": {} - }, - "none": "Ingen", - "@none": { - "type": "String", - "placeholders": {} - }, - "noPasswordRecoveryDescription": "Du har inte lagt till något sätt för att återställa ditt lösenord än.", - "@noPasswordRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "noPermission": "Ingen behörighet", - "@noPermission": { - "type": "String", - "placeholders": {} - }, - "noRoomsFound": "Hittade inga rum…", - "@noRoomsFound": { - "type": "String", - "placeholders": {} - }, - "notifications": "Aviseringar", - "@notifications": { - "type": "String", - "placeholders": {} - }, - "notificationsEnabledForThisAccount": "Aviseringar är påslaget för detta konto", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, - "numUsersTyping": "{count} användare skriver…", - "@numUsersTyping": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "offensive": "Stötande", - "@offensive": { - "type": "String", - "placeholders": {} - }, - "offline": "Offline", - "@offline": { - "type": "String", - "placeholders": {} - }, - "ok": "OK", - "@ok": { - "type": "String", - "placeholders": {} - }, - "online": "Online", - "@online": { - "type": "String", - "placeholders": {} - }, - "onlineKeyBackupEnabled": "Online Nyckel-backup är aktiverad", - "@onlineKeyBackupEnabled": { - "type": "String", - "placeholders": {} - }, - "oopsSomethingWentWrong": "Hoppsan, något gick fel…", - "@oopsSomethingWentWrong": { - "type": "String", - "placeholders": {} - }, - "openAppToReadMessages": "Öppna app för att lästa meddelanden", - "@openAppToReadMessages": { - "type": "String", - "placeholders": {} - }, - "openCamera": "Öppna kamera", - "@openCamera": { - "type": "String", - "placeholders": {} - }, - "participant": "Deltagare", - "@participant": { - "type": "String", - "placeholders": {} - }, - "passphraseOrKey": "lösenord eller återställningsnyckel", - "@passphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "password": "Lösenord", - "@password": { - "type": "String", - "placeholders": {} - }, - "passwordForgotten": "Glömt lösenord", - "@passwordForgotten": { - "type": "String", - "placeholders": {} - }, - "passwordHasBeenChanged": "Lösenordet har ändrats", - "@passwordHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "passwordRecovery": "Återställ lösenord", - "@passwordRecovery": { - "type": "String", - "placeholders": {} - }, - "pickImage": "Välj en bild", - "@pickImage": { - "type": "String", - "placeholders": {} - }, - "pin": "Nåla fast", - "@pin": { - "type": "String", - "placeholders": {} - }, - "play": "Spela {fileName}", - "@play": { - "type": "String", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "pleaseChooseAPasscode": "Ange ett lösenord", - "@pleaseChooseAPasscode": { - "type": "String", - "placeholders": {} - }, - "pleaseClickOnLink": "Klicka på länken i e-postmeddelandet för att sedan fortsätta.", - "@pleaseClickOnLink": { - "type": "String", - "placeholders": {} - }, - "pleaseEnter4Digits": "Ange 4 siffror eller lämna tom för att inaktivera app-lås.", - "@pleaseEnter4Digits": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPassword": "Ange ditt lösenord", - "@pleaseEnterYourPassword": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourUsername": "Ange ditt användarnamn", - "@pleaseEnterYourUsername": { - "type": "String", - "placeholders": {} - }, - "pleaseFollowInstructionsOnWeb": "Följ instruktionerna på hemsidan och tryck på nästa.", - "@pleaseFollowInstructionsOnWeb": { - "type": "String", - "placeholders": {} - }, - "privacy": "Integritet", - "@privacy": { - "type": "String", - "placeholders": {} - }, - "publicRooms": "Publika Rum", - "@publicRooms": { - "type": "String", - "placeholders": {} - }, - "pushRules": "Regler", - "@pushRules": { - "type": "String", - "placeholders": {} - }, - "reason": "Anledning", - "@reason": { - "type": "String", - "placeholders": {} - }, - "recording": "Spelar in", - "@recording": { - "type": "String", - "placeholders": {} - }, - "redactedAnEvent": "{username} redigerade en händelse", - "@redactedAnEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "redactMessage": "Redigera meddelande", - "@redactMessage": { - "type": "String", - "placeholders": {} - }, - "reject": "Avböj", - "@reject": { - "type": "String", - "placeholders": {} - }, - "rejectedTheInvitation": "{username} avböjde inbjudan", - "@rejectedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "rejoin": "Återanslut", - "@rejoin": { - "type": "String", - "placeholders": {} - }, - "remove": "Ta bort", - "@remove": { - "type": "String", - "placeholders": {} - }, - "removeAllOtherDevices": "Ta bort alla andra enheter", - "@removeAllOtherDevices": { - "type": "String", - "placeholders": {} - }, - "removedBy": "Bortagen av {username}", - "@removedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "removeDevice": "Ta bort enhet", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, - "unbanFromChat": "Ta bort chatt-blockering", - "@unbanFromChat": { - "type": "String", - "placeholders": {} - }, - "replaceRoomWithNewerVersion": "Ersätt rum med nyare version", - "@replaceRoomWithNewerVersion": { - "type": "String", - "placeholders": {} - }, - "reply": "Svara", - "@reply": { - "type": "String", - "placeholders": {} - }, - "reportMessage": "Rapportera meddelande", - "@reportMessage": { - "type": "String", - "placeholders": {} - }, - "requestPermission": "Begär behörighet", - "@requestPermission": { - "type": "String", - "placeholders": {} - }, - "roomHasBeenUpgraded": "Rummet har blivit uppgraderat", - "@roomHasBeenUpgraded": { - "type": "String", - "placeholders": {} - }, - "search": "Sök", - "@search": { - "type": "String", - "placeholders": {} - }, - "security": "Säkerhet", - "@security": { - "type": "String", - "placeholders": {} - }, - "seenByUser": "Sedd av {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "send": "Skicka", - "@send": { - "type": "String", - "placeholders": {} - }, - "sendAMessage": "Skicka ett meddelande", - "@sendAMessage": { - "type": "String", - "placeholders": {} - }, - "sendAudio": "Skicka ljud", - "@sendAudio": { - "type": "String", - "placeholders": {} - }, - "sendFile": "Skicka fil", - "@sendFile": { - "type": "String", - "placeholders": {} - }, - "sendImage": "Skicka bild", - "@sendImage": { - "type": "String", - "placeholders": {} - }, - "sendMessages": "Skickade meddelanden", - "@sendMessages": { - "type": "String", - "placeholders": {} - }, - "sendOriginal": "Skicka orginal", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendVideo": "Skicka video", - "@sendVideo": { - "type": "String", - "placeholders": {} - }, - "sentAFile": "📁 {username} skickade en fil", - "@sentAFile": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAnAudio": "🎤 {username} skickade ett ljudklipp", - "@sentAnAudio": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAPicture": "🖼️ {username} skickade en bild", - "@sentAPicture": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentASticker": "😊 {username} skickade ett klistermärke", - "@sentASticker": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAVideo": "🎥 {username} skickade en video", - "@sentAVideo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentCallInformations": "{senderName} skickade samtalsinformation", - "@sentCallInformations": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "setCustomEmotes": "Ställ in anpassade dekaler", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Ställ in inbjudningslänk", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Ställ in behörighetsnivå", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "setStatus": "Ställ in status", - "@setStatus": { - "type": "String", - "placeholders": {} - }, - "settings": "Inställningar", - "@settings": { - "type": "String", - "placeholders": {} - }, - "share": "Dela", - "@share": { - "type": "String", - "placeholders": {} - }, - "sharedTheLocation": "{username} delade sin position", - "@sharedTheLocation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "skip": "Hoppa över", - "@skip": { - "type": "String", - "placeholders": {} - }, - "sourceCode": "Källkod", - "@sourceCode": { - "type": "String", - "placeholders": {} - }, - "startedACall": "{senderName} startade ett samtal", - "@startedACall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "status": "Status", - "@status": { - "type": "String", - "placeholders": {} - }, - "statusExampleMessage": "Hur mår du i dag?", - "@statusExampleMessage": { - "type": "String", - "placeholders": {} - }, - "submit": "Skicka in", - "@submit": { - "type": "String", - "placeholders": {} - }, - "systemTheme": "System", - "@systemTheme": { - "type": "String", - "placeholders": {} - }, - "theyDontMatch": "Dom Matchar Inte", - "@theyDontMatch": { - "type": "String", - "placeholders": {} - }, - "theyMatch": "Dom Matchar", - "@theyMatch": { - "type": "String", - "placeholders": {} - }, - "title": "FluffyChat", - "@title": { - "description": "Title for the application", - "type": "String", - "placeholders": {} - }, - "toggleFavorite": "Växla favorit", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Växla tystad", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Markera läst/oläst", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "tooManyRequestsWarning": "För många förfrågningar. Vänligen försök senare!", - "@tooManyRequestsWarning": { - "type": "String", - "placeholders": {} - }, - "tryToSendAgain": "Försök att skicka igen", - "@tryToSendAgain": { - "type": "String", - "placeholders": {} - }, - "unavailable": "Upptagen", - "@unavailable": { - "type": "String", - "placeholders": {} - }, - "unbannedUser": "{username} avbannade {targetName}", - "@unbannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "unblockDevice": "Avblockera enhet", - "@unblockDevice": { - "type": "String", - "placeholders": {} - }, - "unknownDevice": "Okänd enhet", - "@unknownDevice": { - "type": "String", - "placeholders": {} - }, - "unknownEncryptionAlgorithm": "Okänd krypteringsalgoritm", - "@unknownEncryptionAlgorithm": { - "type": "String", - "placeholders": {} - }, - "unknownEvent": "Okänd händelse '{type}'", - "@unknownEvent": { - "type": "String", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "unmuteChat": "Slå på ljudet för chatten", - "@unmuteChat": { - "type": "String", - "placeholders": {} - }, - "unpin": "Avnåla", - "@unpin": { - "type": "String", - "placeholders": {} - }, - "unreadChats": "{unreadCount, plural, =1{en oläst chatt} other{{unreadCount} olästa chattar}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "userAndOthersAreTyping": "{username} och {count} andra skriver…", - "@userAndOthersAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "userAndUserAreTyping": "{username} och {username2} skriver…", - "@userAndUserAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "username2": { - "type": "String" - } - } - }, - "userIsTyping": "{username} skriver…", - "@userIsTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "userLeftTheChat": "🚪 {username} lämnade chatten", - "@userLeftTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "username": "Användarnamn", - "@username": { - "type": "String", - "placeholders": {} - }, - "userSentUnknownEvent": "{username} skickade en {type} händelse", - "@userSentUnknownEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "type": { - "type": "String" - } - } - }, - "verify": "Verifiera", - "@verify": { - "type": "String", - "placeholders": {} - }, - "verifyStart": "Starta verifiering", - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "verifySuccess": "Du har lyckats verifiera!", - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "verifyTitle": "Verifiera andra konton", - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "videoCall": "Videosamtal", - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "visibilityOfTheChatHistory": "Chatt-historikens synlighet", - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "visibleForAllParticipants": "Synlig för alla deltagare", - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "visibleForEveryone": "Synlig för alla", - "@visibleForEveryone": { - "type": "String", - "placeholders": {} - }, - "voiceMessage": "Röstmeddelande", - "@voiceMessage": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerAcceptRequest": "Väntar på att deltagaren accepterar begäran…", - "@waitingPartnerAcceptRequest": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerEmoji": "Väntar på att deltagaren accepterar emojien…", - "@waitingPartnerEmoji": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerNumbers": "Väntar på att deltagaren accepterar nummer…", - "@waitingPartnerNumbers": { - "type": "String", - "placeholders": {} - }, - "wallpaper": "Bakgrund:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "warning": "Varning!", - "@warning": { - "type": "String", - "placeholders": {} - }, - "weSentYouAnEmail": "Vi skickade dig ett e-postmeddelande", - "@weSentYouAnEmail": { - "type": "String", - "placeholders": {} - }, - "whoCanPerformWhichAction": "Vem kan utföra vilken åtgärd", - "@whoCanPerformWhichAction": { - "type": "String", - "placeholders": {} - }, - "whoIsAllowedToJoinThisGroup": "Vilka som är tilllåtna att ansluta till denna grupp", - "@whoIsAllowedToJoinThisGroup": { - "type": "String", - "placeholders": {} - }, - "whyDoYouWantToReportThis": "Varför vill du rapportera detta?", - "@whyDoYouWantToReportThis": { - "type": "String", - "placeholders": {} - }, - "withTheseAddressesRecoveryDescription": "Med dessa addresser kan du återställa ditt lösenord.", - "@withTheseAddressesRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "writeAMessage": "Skriv ett meddelande…", - "@writeAMessage": { - "type": "String", - "placeholders": {} - }, - "yes": "Ja", - "@yes": { - "type": "String", - "placeholders": {} - }, - "you": "Du", - "@you": { - "type": "String", - "placeholders": {} - }, - "youAreNoLongerParticipatingInThisChat": "Du deltar inte längre i denna chatt", - "@youAreNoLongerParticipatingInThisChat": { - "type": "String", - "placeholders": {} - }, - "youHaveBeenBannedFromThisChat": "Du har blivit bannad från denna chatt", - "@youHaveBeenBannedFromThisChat": { - "type": "String", - "placeholders": {} - }, - "yourPublicKey": "Din publika nyckel", - "@yourPublicKey": { - "type": "String", - "placeholders": {} - }, - "commandHint_html": "Skicka HTML-formatted text", - "@commandHint_html": { - "type": "String", - "description": "Usage hint for the command /html" - }, - "commandHint_ban": "Bannlys användaren från detta rum", - "@commandHint_ban": { - "type": "String", - "description": "Usage hint for the command /ban" - }, - "clearArchive": "Rensa arkiv", - "@clearArchive": {}, - "chats": "Chatter", - "@chats": { - "type": "String", - "placeholders": {} - }, - "chatHasBeenAddedToThisSpace": "Chatt har lagts till i detta utrymme", - "@chatHasBeenAddedToThisSpace": {}, - "chatBackup": "Chatt backup", - "@chatBackup": { - "type": "String", - "placeholders": {} - }, - "changeYourAvatar": "Ändra din avatar", - "@changeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "cantOpenUri": "Kan inte öppna URL {uri}", - "@cantOpenUri": { - "type": "String", - "placeholders": { - "uri": { - "type": "String" - } - } - }, - "blocked": "Blockerad", - "@blocked": { - "type": "String", - "placeholders": {} - }, - "badServerLoginTypesException": "Hemma servern stödjer följande inloggnings typer :\n {serverVersions}\nMen denna applikation stödjer enbart:\n{supportedVersions}", - "@badServerLoginTypesException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "autoplayImages": "Automatisk spela upp animerade klistermärken och emoji", - "@autoplayImages": { - "type": "String", - "placeholder": {} - }, - "allChats": "Alla chattar", - "@allChats": { - "type": "String", - "placeholders": {} - }, - "addToSpace": "Lägg till i utrymme", - "@addToSpace": {}, - "addEmail": "Lägg till e-post", - "@addEmail": { - "type": "String", - "placeholders": {} - }, - "commandHint_myroomavatar": "Sätt din bild för detta rum (by mxc-uri)", - "@commandHint_myroomavatar": { - "type": "String", - "description": "Usage hint for the command /myroomavatar" - }, - "commandHint_me": "Beskriv dig själv", - "@commandHint_me": { - "type": "String", - "description": "Usage hint for the command /me" - }, - "commandHint_leave": "Lämna detta rum", - "@commandHint_leave": { - "type": "String", - "description": "Usage hint for the command /leave" - }, - "commandHint_kick": "Ta bort användare från detta rum", - "@commandHint_kick": { - "type": "String", - "description": "Usage hint for the command /kick" - }, - "commandHint_join": "Gå med i rum", - "@commandHint_join": { - "type": "String", - "description": "Usage hint for the command /join" - }, - "commandHint_invite": "Bjud in användaren till detta rum", - "@commandHint_invite": { - "type": "String", - "description": "Usage hint for the command /invite" - }, - "locationPermissionDeniedNotice": "Plats åtkomst nekad. Var god godkän detta för att kunna dela din plats.", - "@locationPermissionDeniedNotice": { - "type": "String", - "placeholders": {} - }, - "locationDisabledNotice": "Platstjänster är inaktiverade. Var god aktivera dom för att kunna dela din plats.", - "@locationDisabledNotice": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "Gå till det nya rummet", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "fontSize": "Textstorlek", - "@fontSize": { - "type": "String", - "placeholders": {} - }, - "everythingReady": "Allt är klart!", - "@everythingReady": { - "type": "String", - "placeholders": {} - }, - "errorObtainingLocation": "Fel vid erhållande av plats: {error}", - "@errorObtainingLocation": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "editRoomAliases": "Redigera rum alias", - "@editRoomAliases": { - "type": "String", - "placeholders": {} - }, - "createNewSpace": "Nytt utrymme", - "@createNewSpace": { - "type": "String", - "placeholders": {} - }, - "copyToClipboard": "Kopiera till urklipp", - "@copyToClipboard": { - "type": "String", - "placeholders": {} - }, - "commandMissing": "{command} är inte ett kommando.", - "@commandMissing": { - "type": "String", - "placeholders": { - "command": { - "type": "String" - } + "@@last_modified": "2021-08-14 12:41:09.835634", + "about": "Om", + "@about": { + "type": "String", + "placeholders": {} }, - "description": "State that {command} is not a valid /command." - }, - "commandInvalid": "Felaktigt kommando", - "@commandInvalid": { - "type": "String" - }, - "commandHint_unban": "Tillåt användare i rummet", - "@commandHint_unban": { - "type": "String", - "description": "Usage hint for the command /unban" - }, - "commandHint_send": "Skicka text", - "@commandHint_send": { - "type": "String", - "description": "Usage hint for the command /send" - }, - "commandHint_react": "Skicka svar som reaktion", - "@commandHint_react": { - "type": "String", - "description": "Usage hint for the command /react" - }, - "commandHint_plain": "Skicka oformaterad text", - "@commandHint_plain": { - "type": "String", - "description": "Usage hint for the command /plain" - }, - "commandHint_op": "Sätt användarens kraft nivå ( standard: 50)", - "@commandHint_op": { - "type": "String", - "description": "Usage hint for the command /op" - }, - "commandHint_myroomnick": "Sätt ditt användarnamn för rummet", - "@commandHint_myroomnick": { - "type": "String", - "description": "Usage hint for the command /myroomnick" - }, - "noEncryptionForPublicRooms": "Du kan endast aktivera kryptering när rummet inte längre är publikt tillgängligt.", - "@noEncryptionForPublicRooms": { - "type": "String", - "placeholders": {} - }, - "noMatrixServer": "{server1} är inte en matrix server, använd {server2} istället?", - "@noMatrixServer": { - "type": "String", - "placeholders": { - "server1": { + "accept": "Acceptera", + "@accept": { + "type": "String", + "placeholders": {} + }, + "acceptedTheInvitation": "👍 {username} accepterade inbjudan", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "account": "Konto", + "@account": { + "type": "String", + "placeholders": {} + }, + "activatedEndToEndEncryption": "🔐 {username} aktiverade ändpunktskryptering", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "admin": "Admin", + "@admin": { + "type": "String", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "String", + "placeholders": {} + }, + "all": "Alla", + "@all": { + "type": "String", + "placeholders": {} + }, + "answeredTheCall": "{senderName} besvarade samtalet", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "anyoneCanJoin": "Vem som helst kan gå med", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + }, + "appLock": "App-lås", + "@appLock": { + "type": "String", + "placeholders": {} + }, + "archive": "Arkiv", + "@archive": { + "type": "String", + "placeholders": {} + }, + "areGuestsAllowedToJoin": "Får gästanvändare gå med", + "@areGuestsAllowedToJoin": { + "type": "String", + "placeholders": {} + }, + "areYouSure": "Är du säker?", + "@areYouSure": { + "type": "String", + "placeholders": {} + }, + "areYouSureYouWantToLogout": "Är du säker på att du vill logga ut?", + "@areYouSureYouWantToLogout": { + "type": "String", + "placeholders": {} + }, + "askSSSSSign": "För att kunna signera den andra personen, vänligen ange din lösenfras eller återställningsnyckel för säker lagring.", + "@askSSSSSign": { + "type": "String", + "placeholders": {} + }, + "askVerificationRequest": "Acceptera denna verifikationsförfrågan från {username}?", + "@askVerificationRequest": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "banFromChat": "Bannlys från chatt", + "@banFromChat": { + "type": "String", + "placeholders": {} + }, + "banned": "Bannlyst", + "@banned": { + "type": "String", + "placeholders": {} + }, + "bannedUser": "{username} bannlös {targetName}", + "@bannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "blockDevice": "Blockera Enhet", + "@blockDevice": { + "type": "String", + "placeholders": {} + }, + "cancel": "Avbryt", + "@cancel": { + "type": "String", + "placeholders": {} + }, + "changeDeviceName": "Ändra enhetsnamn", + "@changeDeviceName": { + "type": "String", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} ändrade sin chatt-avatar", + "@changedTheChatAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheChatDescriptionTo": "{username} ändrade chatt-beskrivningen till: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "description": { + "type": "String" + } + } + }, + "changedTheChatNameTo": "{username} ändrade sitt chatt-namn till: '{chatname}'", + "@changedTheChatNameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "chatname": { + "type": "String" + } + } + }, + "changedTheChatPermissions": "{username} ändrade chatt-rättigheterna", + "@changedTheChatPermissions": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheDisplaynameTo": "{username} ändrade visningsnamnet till: '{displayname}'", + "@changedTheDisplaynameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "displayname": { + "type": "String" + } + } + }, + "changedTheGuestAccessRules": "{username} ändrade reglerna för gästaccess", + "@changedTheGuestAccessRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRulesTo": "{username} ändrade reglerna för gästaccess till: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheHistoryVisibility": "{username} ändrade historikens synlighet", + "@changedTheHistoryVisibility": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheHistoryVisibilityTo": "{username} ändrade historikens synlighet till: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheJoinRules": "{username} ändrade anslutningsreglerna", + "@changedTheJoinRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheJoinRulesTo": "{username} ändrade anslutningsreglerna till {joinRules}", + "@changedTheJoinRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "joinRules": { + "type": "String" + } + } + }, + "changedTheProfileAvatar": "{username} ändrade sin avatar", + "@changedTheProfileAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomAliases": "{username} ändrade rummets alias", + "@changedTheRoomAliases": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomInvitationLink": "{username} ändrade inbjudningslänken", + "@changedTheRoomInvitationLink": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changePassword": "Ändra lösenord", + "@changePassword": { + "type": "String", + "placeholders": {} + }, + "changeTheHomeserver": "Ändra hemserver", + "@changeTheHomeserver": { + "type": "String", + "placeholders": {} + }, + "changeTheme": "Ändra din stil", + "@changeTheme": { + "type": "String", + "placeholders": {} + }, + "changeTheNameOfTheGroup": "Ändra namn på gruppen", + "@changeTheNameOfTheGroup": { + "type": "String", + "placeholders": {} + }, + "channelCorruptedDecryptError": "Krypteringen har blivit korrupt", + "@channelCorruptedDecryptError": { + "type": "String", + "placeholders": {} + }, + "chat": "Chatt", + "@chat": { + "type": "String", + "placeholders": {} + }, + "chatDetails": "Chatt-detaljer", + "@chatDetails": { + "type": "String", + "placeholders": {} + }, + "chooseAStrongPassword": "Välj ett starkt lösenord", + "@chooseAStrongPassword": { + "type": "String", + "placeholders": {} + }, + "close": "Stäng", + "@close": { + "type": "String", + "placeholders": {} + }, + "compareEmojiMatch": "Vänligen jämför uttryckssymbolerna", + "@compareEmojiMatch": { + "type": "String", + "placeholders": {} + }, + "compareNumbersMatch": "Vänligen jämför siffrorna", + "@compareNumbersMatch": { + "type": "String", + "placeholders": {} + }, + "configureChat": "Konfigurera chatt", + "@configureChat": { + "type": "String", + "placeholders": {} + }, + "contactHasBeenInvitedToTheGroup": "Kontakten har blivit inbjuden till gruppen", + "@contactHasBeenInvitedToTheGroup": { + "type": "String", + "placeholders": {} + }, + "contentHasBeenReported": "Innehållet har rapporterats till server-admins", + "@contentHasBeenReported": { + "type": "String", + "placeholders": {} + }, + "copiedToClipboard": "Kopierat till urklipp", + "@copiedToClipboard": { + "type": "String", + "placeholders": {} + }, + "copy": "Kopiera", + "@copy": { + "type": "String", + "placeholders": {} + }, + "couldNotDecryptMessage": "Kunde ej avkoda meddelande: {error}", + "@couldNotDecryptMessage": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "countParticipants": "{count} deltagare", + "@countParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "create": "Skapa", + "@create": { + "type": "String", + "placeholders": {} + }, + "createdTheChat": "💬 {username} skapade chatten", + "@createdTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "currentlyActive": "För närvarande aktiv", + "@currentlyActive": { + "type": "String", + "placeholders": {} + }, + "darkTheme": "Mörkt", + "@darkTheme": { + "type": "String", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "String", + "placeholders": { + "date": { + "type": "String" + }, + "timeOfDay": { + "type": "String" + } + } + }, + "deactivateAccountWarning": "Detta kommer att avaktivera ditt konto. Det här går inte att ångra! Är du säker?", + "@deactivateAccountWarning": { + "type": "String", + "placeholders": {} + }, + "defaultPermissionLevel": "Standard behörighetsnivå", + "@defaultPermissionLevel": { + "type": "String", + "placeholders": {} + }, + "delete": "Radera", + "@delete": { + "type": "String", + "placeholders": {} + }, + "deleteAccount": "Ta bort konto", + "@deleteAccount": { + "type": "String", + "placeholders": {} + }, + "deleteMessage": "Ta bort meddelande", + "@deleteMessage": { + "type": "String", + "placeholders": {} + }, + "device": "Enhet", + "@device": { + "type": "String", + "placeholders": {} + }, + "deviceId": "Enhets-ID", + "@deviceId": { + "type": "String", + "placeholders": {} + }, + "devices": "Enheter", + "@devices": { + "type": "String", + "placeholders": {} + }, + "directChats": "Direkt chatt", + "@directChats": { + "type": "String", + "placeholders": {} + }, + "displaynameHasBeenChanged": "Visningsnamn har ändrats", + "@displaynameHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "downloadFile": "Ladda ner fil", + "@downloadFile": { + "type": "String", + "placeholders": {} + }, + "edit": "Ändra", + "@edit": { + "type": "String", + "placeholders": {} + }, + "editBlockedServers": "redigera blockerade servrar", + "@editBlockedServers": { + "type": "String", + "placeholders": {} + }, + "editDisplayname": "Ändra visningsnamn", + "@editDisplayname": { + "type": "String", + "placeholders": {} + }, + "editRoomAvatar": "redigera rumsavatar", + "@editRoomAvatar": { + "type": "String", + "placeholders": {} + }, + "emoteExists": "Dekalen existerar redan!", + "@emoteExists": { + "type": "String", + "placeholders": {} + }, + "emoteInvalid": "Ogiltig dekal-kod!", + "@emoteInvalid": { + "type": "String", + "placeholders": {} + }, + "emotePacks": "Dekalpaket för rummet", + "@emotePacks": { + "type": "String", + "placeholders": {} + }, + "emoteSettings": "Emote inställningar", + "@emoteSettings": { + "type": "String", + "placeholders": {} + }, + "emoteShortcode": "Dekal kod", + "@emoteShortcode": { + "type": "String", + "placeholders": {} + }, + "emptyChat": "Tom chatt", + "@emptyChat": { + "type": "String", + "placeholders": {} + }, + "enableEmotesGlobally": "Aktivera dekal-paket globalt", + "@enableEmotesGlobally": { + "type": "String", + "placeholders": {} + }, + "enableEncryption": "Aktivera kryptering", + "@enableEncryption": { + "type": "String", + "placeholders": {} + }, + "enableEncryptionWarning": "Du kommer inte ha fortsatt möjlighet till att inaktivera krypteringen. Är du säker?", + "@enableEncryptionWarning": { + "type": "String", + "placeholders": {} + }, + "encrypted": "Krypterad", + "@encrypted": { + "type": "String", + "placeholders": {} + }, + "encryption": "Kryptering", + "@encryption": { + "type": "String", + "placeholders": {} + }, + "encryptionNotEnabled": "Kryptering är ej aktiverad", + "@encryptionNotEnabled": { + "type": "String", + "placeholders": {} + }, + "endedTheCall": "{senderName} avslutade samtalet", + "@endedTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "enterAnEmailAddress": "Ange en e-postaddress", + "@enterAnEmailAddress": { + "type": "String", + "placeholders": {} + }, + "extremeOffensive": "Extremt stötande", + "@extremeOffensive": { + "type": "String", + "placeholders": {} + }, + "fileName": "Filnamn", + "@fileName": { + "type": "String", + "placeholders": {} + }, + "fluffychat": "FluffyChat", + "@fluffychat": { + "type": "String", + "placeholders": {} + }, + "forward": "Framåt", + "@forward": { + "type": "String", + "placeholders": {} + }, + "fromJoining": "Från att gå med", + "@fromJoining": { + "type": "String", + "placeholders": {} + }, + "fromTheInvitation": "Från inbjudan", + "@fromTheInvitation": { + "type": "String", + "placeholders": {} + }, + "group": "Grupp", + "@group": { + "type": "String", + "placeholders": {} + }, + "groupIsPublic": "Gruppen är publik", + "@groupIsPublic": { + "type": "String", + "placeholders": {} + }, + "groups": "Grupper", + "@groups": { + "type": "String", + "placeholders": {} + }, + "groupWith": "Gruppen med {displayname}", + "@groupWith": { + "type": "String", + "placeholders": { + "displayname": { + "type": "String" + } + } + }, + "guestsAreForbidden": "Gäster är förbjudna", + "@guestsAreForbidden": { + "type": "String", + "placeholders": {} + }, + "guestsCanJoin": "Gäster kan ansluta", + "@guestsCanJoin": { + "type": "String", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} har tagit tillbaka inbjudan för {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "help": "Hjälp", + "@help": { + "type": "String", + "placeholders": {} + }, + "hideRedactedEvents": "Göm redigerade händelser", + "@hideRedactedEvents": { + "type": "String", + "placeholders": {} + }, + "hideUnknownEvents": "Göm okända händelser", + "@hideUnknownEvents": { + "type": "String", + "placeholders": {} + }, + "howOffensiveIsThisContent": "Hur stötande är detta innehåll?", + "@howOffensiveIsThisContent": { + "type": "String", + "placeholders": {} + }, + "id": "ID", + "@id": { + "type": "String", + "placeholders": {} + }, + "ignore": "Ignorera", + "@ignore": { + "type": "String", + "placeholders": {} + }, + "ignoredUsers": "Ignorera användare", + "@ignoredUsers": { + "type": "String", + "placeholders": {} + }, + "iHaveClickedOnLink": "Jag har klickat på länken", + "@iHaveClickedOnLink": { + "type": "String", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Felaktig lösenordsfras eller åsterställningsnyckel", + "@incorrectPassphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "inoffensive": "Oförargligt", + "@inoffensive": { + "type": "String", + "placeholders": {} + }, + "inviteContact": "Bjud in kontakt", + "@inviteContact": { + "type": "String", + "placeholders": {} + }, + "inviteContactToGroup": "Bjud in kontakt till {groupName}", + "@inviteContactToGroup": { + "type": "String", + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "invited": "Inbjuden", + "@invited": { + "type": "String", + "placeholders": {} + }, + "invitedUser": "📩 {username} bjöd in {targetName}", + "@invitedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "invitedUsersOnly": "Endast inbjudna användare", + "@invitedUsersOnly": { + "type": "String", + "placeholders": {} + }, + "inviteText": "{username} bjöd in dig till FluffyChat.\n1. Besök fluffychat.im och installera appen\n2. Registrera dig eller logga in\n3. Öppna inbjudningslänk:\n {link}", + "@inviteText": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "link": { + "type": "String" + } + } + }, + "isTyping": "skriver…", + "@isTyping": { + "type": "String", + "placeholders": {} + }, + "joinedTheChat": "👋 {username} anslöt till chatten", + "@joinedTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "joinRoom": "Anslut till rum", + "@joinRoom": { + "type": "String", + "placeholders": {} + }, + "kicked": "👞 {username} sparkade ut {targetName}", + "@kicked": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickedAndBanned": "🙅 {username} sparkade och bannade {targetName}", + "@kickedAndBanned": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "kickFromChat": "Sparka från chatt", + "@kickFromChat": { + "type": "String", + "placeholders": {} + }, + "lastActiveAgo": "Senast aktiv: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "String", + "placeholders": { + "localizedTimeShort": { + "type": "String" + } + } + }, + "leave": "Lämna", + "@leave": { + "type": "String", + "placeholders": {} + }, + "leftTheChat": "Lämnade chatten", + "@leftTheChat": { + "type": "String", + "placeholders": {} + }, + "lightTheme": "Ljust", + "@lightTheme": { + "type": "String", + "placeholders": {} + }, + "loadCountMoreParticipants": "Ladda {count} mer deltagare", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "loadingPleaseWait": "Laddar... Var god vänta.", + "@loadingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "loadMore": "Ladda mer…", + "@loadMore": { + "type": "String", + "placeholders": {} + }, + "login": "Logga in", + "@login": { + "type": "String", + "placeholders": {} + }, + "logInTo": "Logga in till {homeserver}", + "@logInTo": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "logout": "Logga ut", + "@logout": { + "type": "String", + "placeholders": {} + }, + "mention": "Nämn", + "@mention": { + "type": "String", + "placeholders": {} + }, + "messages": "Meddelanden", + "@messages": { + "type": "String", + "placeholders": {} + }, + "moderator": "Moderator", + "@moderator": { + "type": "String", + "placeholders": {} + }, + "muteChat": "Tysta chatt", + "@muteChat": { + "type": "String", + "placeholders": {} + }, + "needPantalaimonWarning": "Var medveten om att du behöver Pantalaimon för att använda ändpunktskryptering tillsvidare.", + "@needPantalaimonWarning": { + "type": "String", + "placeholders": {} + }, + "newChat": "Ny chatt", + "@newChat": { + "type": "String", + "placeholders": {} + }, + "newMessageInFluffyChat": "💬 Nya meddelanden i FluffyChat", + "@newMessageInFluffyChat": { + "type": "String", + "placeholders": {} + }, + "newVerificationRequest": "Ny verifikationsbegäran!", + "@newVerificationRequest": { + "type": "String", + "placeholders": {} + }, + "next": "Nästa", + "@next": { + "type": "String", + "placeholders": {} + }, + "no": "Nej", + "@no": { + "type": "String", + "placeholders": {} + }, + "noConnectionToTheServer": "Ingen anslutning till servern", + "@noConnectionToTheServer": { + "type": "String", + "placeholders": {} + }, + "noEmotesFound": "Hittade inga dekaler. 😕", + "@noEmotesFound": { + "type": "String", + "placeholders": {} + }, + "noGoogleServicesWarning": "De ser ut som att du inte har google-tjänster på din telefon. Det är ett bra beslut för din integritet! För att få aviseringar i FluffyChat rekommenderar vi att använda https://microg.org/ eller https://unifiedpush.org/ .", + "@noGoogleServicesWarning": { + "type": "String", + "placeholders": {} + }, + "none": "Ingen", + "@none": { + "type": "String", + "placeholders": {} + }, + "noPasswordRecoveryDescription": "Du har inte lagt till något sätt för att återställa ditt lösenord än.", + "@noPasswordRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "noPermission": "Ingen behörighet", + "@noPermission": { + "type": "String", + "placeholders": {} + }, + "noRoomsFound": "Hittade inga rum…", + "@noRoomsFound": { + "type": "String", + "placeholders": {} + }, + "notifications": "Aviseringar", + "@notifications": { + "type": "String", + "placeholders": {} + }, + "numUsersTyping": "{count} användare skriver…", + "@numUsersTyping": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "offensive": "Stötande", + "@offensive": { + "type": "String", + "placeholders": {} + }, + "offline": "Offline", + "@offline": { + "type": "String", + "placeholders": {} + }, + "ok": "OK", + "@ok": { + "type": "String", + "placeholders": {} + }, + "online": "Online", + "@online": { + "type": "String", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online Nyckel-backup är aktiverad", + "@onlineKeyBackupEnabled": { + "type": "String", + "placeholders": {} + }, + "oopsSomethingWentWrong": "Hoppsan, något gick fel…", + "@oopsSomethingWentWrong": { + "type": "String", + "placeholders": {} + }, + "openAppToReadMessages": "Öppna app för att lästa meddelanden", + "@openAppToReadMessages": { + "type": "String", + "placeholders": {} + }, + "openCamera": "Öppna kamera", + "@openCamera": { + "type": "String", + "placeholders": {} + }, + "participant": "Deltagare", + "@participant": { + "type": "String", + "placeholders": {} + }, + "passphraseOrKey": "lösenord eller återställningsnyckel", + "@passphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "password": "Lösenord", + "@password": { + "type": "String", + "placeholders": {} + }, + "passwordForgotten": "Glömt lösenord", + "@passwordForgotten": { + "type": "String", + "placeholders": {} + }, + "passwordHasBeenChanged": "Lösenordet har ändrats", + "@passwordHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "passwordRecovery": "Återställ lösenord", + "@passwordRecovery": { + "type": "String", + "placeholders": {} + }, + "pickImage": "Välj en bild", + "@pickImage": { + "type": "String", + "placeholders": {} + }, + "pin": "Nåla fast", + "@pin": { + "type": "String", + "placeholders": {} + }, + "play": "Spela {fileName}", + "@play": { + "type": "String", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pleaseChooseAPasscode": "Ange ett lösenord", + "@pleaseChooseAPasscode": { + "type": "String", + "placeholders": {} + }, + "pleaseClickOnLink": "Klicka på länken i e-postmeddelandet för att sedan fortsätta.", + "@pleaseClickOnLink": { + "type": "String", + "placeholders": {} + }, + "pleaseEnter4Digits": "Ange 4 siffror eller lämna tom för att inaktivera app-lås.", + "@pleaseEnter4Digits": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPassword": "Ange ditt lösenord", + "@pleaseEnterYourPassword": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourUsername": "Ange ditt användarnamn", + "@pleaseEnterYourUsername": { + "type": "String", + "placeholders": {} + }, + "pleaseFollowInstructionsOnWeb": "Följ instruktionerna på hemsidan och tryck på nästa.", + "@pleaseFollowInstructionsOnWeb": { + "type": "String", + "placeholders": {} + }, + "privacy": "Integritet", + "@privacy": { + "type": "String", + "placeholders": {} + }, + "publicRooms": "Publika Rum", + "@publicRooms": { + "type": "String", + "placeholders": {} + }, + "pushRules": "Regler", + "@pushRules": { + "type": "String", + "placeholders": {} + }, + "reason": "Anledning", + "@reason": { + "type": "String", + "placeholders": {} + }, + "recording": "Spelar in", + "@recording": { + "type": "String", + "placeholders": {} + }, + "redactedAnEvent": "{username} redigerade en händelse", + "@redactedAnEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "redactMessage": "Redigera meddelande", + "@redactMessage": { + "type": "String", + "placeholders": {} + }, + "reject": "Avböj", + "@reject": { + "type": "String", + "placeholders": {} + }, + "rejectedTheInvitation": "{username} avböjde inbjudan", + "@rejectedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "remove": "Ta bort", + "@remove": { + "type": "String", + "placeholders": {} + }, + "removeAllOtherDevices": "Ta bort alla andra enheter", + "@removeAllOtherDevices": { + "type": "String", + "placeholders": {} + }, + "removedBy": "Bortagen av {username}", + "@removedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "unbanFromChat": "Ta bort chatt-blockering", + "@unbanFromChat": { + "type": "String", + "placeholders": {} + }, + "replaceRoomWithNewerVersion": "Ersätt rum med nyare version", + "@replaceRoomWithNewerVersion": { + "type": "String", + "placeholders": {} + }, + "reply": "Svara", + "@reply": { + "type": "String", + "placeholders": {} + }, + "reportMessage": "Rapportera meddelande", + "@reportMessage": { + "type": "String", + "placeholders": {} + }, + "requestPermission": "Begär behörighet", + "@requestPermission": { + "type": "String", + "placeholders": {} + }, + "roomHasBeenUpgraded": "Rummet har blivit uppgraderat", + "@roomHasBeenUpgraded": { + "type": "String", + "placeholders": {} + }, + "search": "Sök", + "@search": { + "type": "String", + "placeholders": {} + }, + "security": "Säkerhet", + "@security": { + "type": "String", + "placeholders": {} + }, + "send": "Skicka", + "@send": { + "type": "String", + "placeholders": {} + }, + "sendAMessage": "Skicka ett meddelande", + "@sendAMessage": { + "type": "String", + "placeholders": {} + }, + "sendAudio": "Skicka ljud", + "@sendAudio": { + "type": "String", + "placeholders": {} + }, + "sendFile": "Skicka fil", + "@sendFile": { + "type": "String", + "placeholders": {} + }, + "sendImage": "Skicka bild", + "@sendImage": { + "type": "String", + "placeholders": {} + }, + "sendMessages": "Skickade meddelanden", + "@sendMessages": { + "type": "String", + "placeholders": {} + }, + "sendVideo": "Skicka video", + "@sendVideo": { + "type": "String", + "placeholders": {} + }, + "sentAFile": "📁 {username} skickade en fil", + "@sentAFile": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAnAudio": "🎤 {username} skickade ett ljudklipp", + "@sentAnAudio": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAPicture": "🖼️ {username} skickade en bild", + "@sentAPicture": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentASticker": "😊 {username} skickade ett klistermärke", + "@sentASticker": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAVideo": "🎥 {username} skickade en video", + "@sentAVideo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentCallInformations": "{senderName} skickade samtalsinformation", + "@sentCallInformations": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "setStatus": "Ställ in status", + "@setStatus": { + "type": "String", + "placeholders": {} + }, + "settings": "Inställningar", + "@settings": { + "type": "String", + "placeholders": {} + }, + "share": "Dela", + "@share": { + "type": "String", + "placeholders": {} + }, + "sharedTheLocation": "{username} delade sin position", + "@sharedTheLocation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "skip": "Hoppa över", + "@skip": { + "type": "String", + "placeholders": {} + }, + "sourceCode": "Källkod", + "@sourceCode": { + "type": "String", + "placeholders": {} + }, + "startedACall": "{senderName} startade ett samtal", + "@startedACall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "status": "Status", + "@status": { + "type": "String", + "placeholders": {} + }, + "statusExampleMessage": "Hur mår du i dag?", + "@statusExampleMessage": { + "type": "String", + "placeholders": {} + }, + "submit": "Skicka in", + "@submit": { + "type": "String", + "placeholders": {} + }, + "systemTheme": "System", + "@systemTheme": { + "type": "String", + "placeholders": {} + }, + "theyDontMatch": "Dom Matchar Inte", + "@theyDontMatch": { + "type": "String", + "placeholders": {} + }, + "theyMatch": "Dom Matchar", + "@theyMatch": { + "type": "String", + "placeholders": {} + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "String", + "placeholders": {} + }, + "tooManyRequestsWarning": "För många förfrågningar. Vänligen försök senare!", + "@tooManyRequestsWarning": { + "type": "String", + "placeholders": {} + }, + "tryToSendAgain": "Försök att skicka igen", + "@tryToSendAgain": { + "type": "String", + "placeholders": {} + }, + "unavailable": "Upptagen", + "@unavailable": { + "type": "String", + "placeholders": {} + }, + "unbannedUser": "{username} avbannade {targetName}", + "@unbannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "unblockDevice": "Avblockera enhet", + "@unblockDevice": { + "type": "String", + "placeholders": {} + }, + "unknownDevice": "Okänd enhet", + "@unknownDevice": { + "type": "String", + "placeholders": {} + }, + "unknownEncryptionAlgorithm": "Okänd krypteringsalgoritm", + "@unknownEncryptionAlgorithm": { + "type": "String", + "placeholders": {} + }, + "unknownEvent": "Okänd händelse '{type}'", + "@unknownEvent": { + "type": "String", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "unmuteChat": "Slå på ljudet för chatten", + "@unmuteChat": { + "type": "String", + "placeholders": {} + }, + "unpin": "Avnåla", + "@unpin": { + "type": "String", + "placeholders": {} + }, + "userAndOthersAreTyping": "{username} och {count} andra skriver…", + "@userAndOthersAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "userAndUserAreTyping": "{username} och {username2} skriver…", + "@userAndUserAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "username2": { + "type": "String" + } + } + }, + "userIsTyping": "{username} skriver…", + "@userIsTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "userLeftTheChat": "🚪 {username} lämnade chatten", + "@userLeftTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "username": "Användarnamn", + "@username": { + "type": "String", + "placeholders": {} + }, + "userSentUnknownEvent": "{username} skickade en {type} händelse", + "@userSentUnknownEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "type": { + "type": "String" + } + } + }, + "verify": "Verifiera", + "@verify": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "Starta verifiering", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "Du har lyckats verifiera!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "verifyTitle": "Verifiera andra konton", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "videoCall": "Videosamtal", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "visibilityOfTheChatHistory": "Chatt-historikens synlighet", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "Synlig för alla deltagare", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "visibleForEveryone": "Synlig för alla", + "@visibleForEveryone": { + "type": "String", + "placeholders": {} + }, + "voiceMessage": "Röstmeddelande", + "@voiceMessage": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Väntar på att deltagaren accepterar begäran…", + "@waitingPartnerAcceptRequest": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerEmoji": "Väntar på att deltagaren accepterar emojien…", + "@waitingPartnerEmoji": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerNumbers": "Väntar på att deltagaren accepterar nummer…", + "@waitingPartnerNumbers": { + "type": "String", + "placeholders": {} + }, + "warning": "Varning!", + "@warning": { + "type": "String", + "placeholders": {} + }, + "weSentYouAnEmail": "Vi skickade dig ett e-postmeddelande", + "@weSentYouAnEmail": { + "type": "String", + "placeholders": {} + }, + "whoCanPerformWhichAction": "Vem kan utföra vilken åtgärd", + "@whoCanPerformWhichAction": { + "type": "String", + "placeholders": {} + }, + "whoIsAllowedToJoinThisGroup": "Vilka som är tilllåtna att ansluta till denna grupp", + "@whoIsAllowedToJoinThisGroup": { + "type": "String", + "placeholders": {} + }, + "whyDoYouWantToReportThis": "Varför vill du rapportera detta?", + "@whyDoYouWantToReportThis": { + "type": "String", + "placeholders": {} + }, + "withTheseAddressesRecoveryDescription": "Med dessa addresser kan du återställa ditt lösenord.", + "@withTheseAddressesRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "writeAMessage": "Skriv ett meddelande…", + "@writeAMessage": { + "type": "String", + "placeholders": {} + }, + "yes": "Ja", + "@yes": { + "type": "String", + "placeholders": {} + }, + "you": "Du", + "@you": { + "type": "String", + "placeholders": {} + }, + "youAreNoLongerParticipatingInThisChat": "Du deltar inte längre i denna chatt", + "@youAreNoLongerParticipatingInThisChat": { + "type": "String", + "placeholders": {} + }, + "youHaveBeenBannedFromThisChat": "Du har blivit bannad från denna chatt", + "@youHaveBeenBannedFromThisChat": { + "type": "String", + "placeholders": {} + }, + "yourPublicKey": "Din publika nyckel", + "@yourPublicKey": { + "type": "String", + "placeholders": {} + }, + "commandHint_html": "Skicka HTML-formatted text", + "@commandHint_html": { + "type": "String", + "description": "Usage hint for the command /html" + }, + "commandHint_ban": "Bannlys användaren från detta rum", + "@commandHint_ban": { + "type": "String", + "description": "Usage hint for the command /ban" + }, + "clearArchive": "Rensa arkiv", + "chats": "Chatter", + "@chats": { + "type": "String", + "placeholders": {} + }, + "chatBackup": "Chatt backup", + "@chatBackup": { + "type": "String", + "placeholders": {} + }, + "changeYourAvatar": "Ändra din avatar", + "@changeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "cantOpenUri": "Kan inte öppna URL {uri}", + "@cantOpenUri": { + "type": "String", + "placeholders": { + "uri": { + "type": "String" + } + } + }, + "blocked": "Blockerad", + "@blocked": { + "type": "String", + "placeholders": {} + }, + "badServerLoginTypesException": "Hemma servern stödjer följande inloggnings typer :\n {serverVersions}\nMen denna applikation stödjer enbart:\n{supportedVersions}", + "@badServerLoginTypesException": { + "type": "String", + "placeholders": { + "serverVersions": { + "type": "String" + }, + "supportedVersions": { + "type": "String" + } + } + }, + "autoplayImages": "Automatisk spela upp animerade klistermärken och emoji", + "@autoplayImages": { + "type": "String", + "placeholder": {} + }, + "allChats": "Alla chattar", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "addToSpace": "Lägg till i utrymme", + "addEmail": "Lägg till e-post", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "commandHint_myroomavatar": "Sätt din bild för detta rum (by mxc-uri)", + "@commandHint_myroomavatar": { + "type": "String", + "description": "Usage hint for the command /myroomavatar" + }, + "commandHint_me": "Beskriv dig själv", + "@commandHint_me": { + "type": "String", + "description": "Usage hint for the command /me" + }, + "commandHint_leave": "Lämna detta rum", + "@commandHint_leave": { + "type": "String", + "description": "Usage hint for the command /leave" + }, + "commandHint_kick": "Ta bort användare från detta rum", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "commandHint_join": "Gå med i rum", + "@commandHint_join": { + "type": "String", + "description": "Usage hint for the command /join" + }, + "commandHint_invite": "Bjud in användaren till detta rum", + "@commandHint_invite": { + "type": "String", + "description": "Usage hint for the command /invite" + }, + "locationPermissionDeniedNotice": "Plats åtkomst nekad. Var god godkän detta för att kunna dela din plats.", + "@locationPermissionDeniedNotice": { + "type": "String", + "placeholders": {} + }, + "locationDisabledNotice": "Platstjänster är inaktiverade. Var god aktivera dom för att kunna dela din plats.", + "@locationDisabledNotice": { + "type": "String", + "placeholders": {} + }, + "fontSize": "Textstorlek", + "@fontSize": { + "type": "String", + "placeholders": {} + }, + "everythingReady": "Allt är klart!", + "@everythingReady": { + "type": "String", + "placeholders": {} + }, + "errorObtainingLocation": "Fel vid erhållande av plats: {error}", + "@errorObtainingLocation": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "editRoomAliases": "Redigera rum alias", + "@editRoomAliases": { + "type": "String", + "placeholders": {} + }, + "createNewSpace": "Nytt utrymme", + "@createNewSpace": { + "type": "String", + "placeholders": {} + }, + "copyToClipboard": "Kopiera till urklipp", + "@copyToClipboard": { + "type": "String", + "placeholders": {} + }, + "commandMissing": "{command} är inte ett kommando.", + "@commandMissing": { + "type": "String", + "placeholders": { + "command": { + "type": "String" + } + }, + "description": "State that {command} is not a valid /command." + }, + "commandInvalid": "Felaktigt kommando", + "@commandInvalid": { "type": "String" - }, - "server2": { + }, + "commandHint_unban": "Tillåt användare i rummet", + "@commandHint_unban": { + "type": "String", + "description": "Usage hint for the command /unban" + }, + "commandHint_send": "Skicka text", + "@commandHint_send": { + "type": "String", + "description": "Usage hint for the command /send" + }, + "commandHint_react": "Skicka svar som reaktion", + "@commandHint_react": { + "type": "String", + "description": "Usage hint for the command /react" + }, + "commandHint_plain": "Skicka oformaterad text", + "@commandHint_plain": { + "type": "String", + "description": "Usage hint for the command /plain" + }, + "commandHint_op": "Sätt användarens kraft nivå ( standard: 50)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "commandHint_myroomnick": "Sätt ditt användarnamn för rummet", + "@commandHint_myroomnick": { + "type": "String", + "description": "Usage hint for the command /myroomnick" + }, + "noEncryptionForPublicRooms": "Du kan endast aktivera kryptering när rummet inte längre är publikt tillgängligt.", + "@noEncryptionForPublicRooms": { + "type": "String", + "placeholders": {} + }, + "noMatrixServer": "{server1} är inte en matrix server, använd {server2} istället?", + "@noMatrixServer": { + "type": "String", + "placeholders": { + "server1": { + "type": "String" + }, + "server2": { + "type": "String" + } + } + }, + "obtainingLocation": "Erhåller plats…", + "@obtainingLocation": { + "type": "String", + "placeholders": {} + }, + "or": "Eller", + "@or": { + "type": "String", + "placeholders": {} + }, + "openInMaps": "Öppna i karta", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "oopsPushError": "Oj! Tyvärr gick inte aviseringar att slå på.", + "@oopsPushError": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWait": "Synkroniserar… Var god vänta.", + "@synchronizingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "spaceName": "Utrymmes namn", + "@spaceName": { + "type": "String", + "placeholders": {} + }, + "spaceIsPublic": "Utrymme är publikt", + "@spaceIsPublic": { + "type": "String", + "placeholders": {} + }, + "showPassword": "Visa lösenord", + "@showPassword": { + "type": "String", + "placeholders": {} + }, + "shareLocation": "Dela plats", + "@shareLocation": { + "type": "String", + "placeholders": {} + }, + "setAsCanonicalAlias": "Sätt som primärt alias", + "@setAsCanonicalAlias": { + "type": "String", + "placeholders": {} + }, + "sendAsText": "Skicka som text", + "@sendAsText": { "type": "String" - } - } - }, - "obtainingLocation": "Erhåller plats…", - "@obtainingLocation": { - "type": "String", - "placeholders": {} - }, - "pleaseChoose": "Var god välj", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, - "people": "Människor", - "@people": { - "type": "String", - "placeholders": {} - }, - "or": "Eller", - "@or": { - "type": "String", - "placeholders": {} - }, - "openInMaps": "Öppna i karta", - "@openInMaps": { - "type": "String", - "placeholders": {} - }, - "oopsPushError": "Oj! Tyvärr gick inte aviseringar att slå på.", - "@oopsPushError": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWait": "Synkroniserar… Var god vänta.", - "@synchronizingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "spaceName": "Utrymmes namn", - "@spaceName": { - "type": "String", - "placeholders": {} - }, - "spaceIsPublic": "Utrymme är publikt", - "@spaceIsPublic": { - "type": "String", - "placeholders": {} - }, - "showPassword": "Visa lösenord", - "@showPassword": { - "type": "String", - "placeholders": {} - }, - "shareLocation": "Dela plats", - "@shareLocation": { - "type": "String", - "placeholders": {} - }, - "setAsCanonicalAlias": "Sätt som primärt alias", - "@setAsCanonicalAlias": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Skicka klistermärke", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendAsText": "Skicka som text", - "@sendAsText": { - "type": "String" - }, - "saveFile": "Spara fil", - "@saveFile": { - "type": "String", - "placeholders": {} - }, - "roomVersion": "Rum version", - "@roomVersion": { - "type": "String", - "placeholders": {} - }, - "removeYourAvatar": "Ta bort din avatar", - "@removeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "register": "Registrera", - "@register": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPin": "Ange din pin-kod", - "@pleaseEnterYourPin": { - "type": "String", - "placeholders": {} - }, - "wipeChatBackup": "Radera din chatt-backup för att skapa en ny återställningsnyckel?", - "@wipeChatBackup": { - "type": "String", - "placeholders": {} - }, - "verified": "Verifierad", - "@verified": { - "type": "String", - "placeholders": {} - }, - "transferFromAnotherDevice": "Överför till annan enhet", - "@transferFromAnotherDevice": { - "type": "String", - "placeholders": {} - }, - "chatBackupDescription": "Din chatt backup är skyddad av en säkerhetsnyckel. Se till att du inte förlorar den.", - "@chatBackupDescription": { - "type": "String", - "placeholders": {} - }, - "commandHint_create": "Skapa en tom grupp-chatt\nAnvänd --no-encryption för att inaktivera kryptering", - "@commandHint_create": { - "type": "String", - "description": "Usage hint for the command /create" - }, - "commandHint_discardsession": "Kasta bort sessionen", - "@commandHint_discardsession": { - "type": "String", - "description": "Usage hint for the command /discardsession" - }, - "commandHint_dm": "Starta en direkt-chatt\nAnvänd --no-encryption för att inaktivera kryptering", - "@commandHint_dm": { - "type": "String", - "description": "Usage hint for the command /dm" - }, - "homeserver": "Hemserver", - "@homeserver": {}, - "oneClientLoggedOut": "En av dina klienter har loggats ut", - "@oneClientLoggedOut": {}, - "addAccount": "Lägg till konto", - "@addAccount": {}, - "editBundlesForAccount": "Lägg till paket för detta konto", - "@editBundlesForAccount": {}, - "addToBundle": "Utöka paket", - "@addToBundle": {}, - "bundleName": "Paketnamn", - "@bundleName": {}, - "serverRequiresEmail": "Servern behöver validera din e-postadress för registrering.", - "@serverRequiresEmail": {}, - "singlesignon": "Single Sign On", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "unverified": "Ej verifierad", - "@unverified": {}, - "messageInfo": "Meddelandeinformation", - "@messageInfo": {}, - "messageType": "Meddelandetyp", - "@messageType": {}, - "time": "Tid", - "@time": {}, - "sender": "Avsändare", - "@sender": {}, - "removeFromSpace": "Ta bort från utrymme", - "@removeFromSpace": {}, - "addToSpaceDescription": "Välj ett utrymme som chatten skall läggas till i.", - "@addToSpaceDescription": {}, - "start": "Starta", - "@start": {}, - "openGallery": "Öppna galleri", - "@openGallery": {}, - "repeatPassword": "Upprepa lösenord", - "@repeatPassword": {}, - "markAsRead": "Markera som läst", - "@markAsRead": {}, - "commandHint_clearcache": "Rensa cache", - "@commandHint_clearcache": { - "type": "String", - "description": "Usage hint for the command /clearcache" - }, - "openVideoCamera": "Aktivera kamera för video", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "link": "Länk", - "@link": {}, - "publish": "Publicera", - "@publish": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "reportUser": "Rapportera användare", - "@reportUser": {}, - "openChat": "Öppna Chatt", - "@openChat": {}, - "sendOnEnter": "Skicka med Enter", - "@sendOnEnter": {}, - "scanQrCode": "Skanna QR-kod", - "@scanQrCode": {}, - "yourChatBackupHasBeenSetUp": "Din chatt-backup har konfigurerats.", - "@yourChatBackupHasBeenSetUp": {}, - "removeFromBundle": "Ta bort från paket", - "@removeFromBundle": {}, - "enableMultiAccounts": "(BETA) Aktivera multi-konton på denna enhet", - "@enableMultiAccounts": {}, - "emojis": "Uttryckssymboler", - "@emojis": {}, - "placeCall": "Ring", - "@placeCall": {}, - "voiceCall": "Röstsamtal", - "@voiceCall": {}, - "unsupportedAndroidVersion": "Inget stöd för denna version av Android", - "@unsupportedAndroidVersion": {}, - "videoCallsBetaWarning": "Videosamtal är för närvarande under testning. De kanske inte fungerar som det är tänkt eller på alla plattformar.", - "@videoCallsBetaWarning": {}, - "unsupportedAndroidVersionLong": "Denna funktion kräver en senare version av Android.", - "@unsupportedAndroidVersionLong": {}, - "dismiss": "Avfärda", - "@dismiss": {}, - "reactedWith": "{sender} reagerade med {reaction}", - "@reactedWith": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "reaction": { - "type": "String" - } - } - }, - "pinMessage": "Fäst i rum", - "@pinMessage": {}, - "confirmEventUnpin": "Är du säker på att händelsen inte längre skall vara fastnålad?", - "@confirmEventUnpin": {}, - "experimentalVideoCalls": "Experimentella videosamtal", - "@experimentalVideoCalls": {}, - "switchToAccount": "Byt till konto {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Nästa konto", - "@nextAccount": {}, - "previousAccount": "Föregående konto", - "@previousAccount": {}, - "emailOrUsername": "Användarnamn eller e-postadress", - "@emailOrUsername": {}, - "addWidget": "Lägg till widget", - "@addWidget": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "widgetEtherpad": "Anteckning", - "@widgetEtherpad": {}, - "widgetCustom": "Anpassad", - "@widgetCustom": {}, - "widgetName": "Namn", - "@widgetName": {}, - "widgetUrlError": "Detta är inte en giltig URL.", - "@widgetUrlError": {}, - "errorAddingWidget": "Ett fel uppstod när widgeten skulle läggas till.", - "@errorAddingWidget": {}, - "widgetJitsi": "Jitsi-möte", - "@widgetJitsi": {}, - "widgetNameError": "Vänligen ange ett visningsnamn.", - "@widgetNameError": {}, - "storeSecurlyOnThisDevice": "Lagra säkert på denna enhet", - "@storeSecurlyOnThisDevice": {}, - "youJoinedTheChat": "Du gick med i chatten", - "@youJoinedTheChat": {}, - "youAcceptedTheInvitation": "👍 Du accepterade inbjudan", - "@youAcceptedTheInvitation": {}, - "youKicked": "👞 Du sparkade ut {user}", - "@youKicked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "hugContent": "{senderName} kramar dig", - "@hugContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "commandHint_markasgroup": "Märk som grupp", - "@commandHint_markasgroup": {}, - "recoveryKeyLost": "Borttappad återställningsnyckel?", - "@recoveryKeyLost": {}, - "indexedDbErrorTitle": "Problem med privat läge", - "@indexedDbErrorTitle": {}, - "youHaveWithdrawnTheInvitationFor": "Du har återkallat inbjudan till {user}", - "@youHaveWithdrawnTheInvitationFor": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youUnbannedUser": "Du återkallade förbudet för {user}", - "@youUnbannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "unlockOldMessages": "Lås upp äldre meddelanden", - "@unlockOldMessages": {}, - "newSpace": "Nytt utrymme", - "@newSpace": {}, - "googlyEyesContent": "{senderName} skickar dig googly ögon", - "@googlyEyesContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "dehydrate": "Exportera sessionen och rensa enheten", - "@dehydrate": {}, - "dehydrateWarning": "Denna åtgärd kan inte ångras. Försäkra dig om att backupen är i säkert förvar.", - "@dehydrateWarning": {}, - "dehydrateTor": "TOR-användare: Exportera session", - "@dehydrateTor": {}, - "hydrateTor": "TOR-användare: Importera session från tidigare export", - "@hydrateTor": {}, - "hydrateTorLong": "Exporterade du sessionen när du senast använde TOR? Importera den enkelt och fortsätt chatta.", - "@hydrateTorLong": {}, - "recoveryKey": "Återställningsnyckel", - "@recoveryKey": {}, - "separateChatTypes": "Separata direktchattar och grupper", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "startFirstChat": "Starta din första chatt", - "@startFirstChat": {}, - "pleaseEnterRecoveryKeyDescription": "Ange din återställningsnyckel från en tidigare session för att låsa upp äldre meddelanden. Din återställningsnyckel är INTE ditt lösenord.", - "@pleaseEnterRecoveryKeyDescription": {}, - "encryptThisChat": "Kryptera denna chatt", - "@encryptThisChat": {}, - "dehydrateTorLong": "TOR-användare rekommenderas att exportera sessionen innan fönstret stängs.", - "@dehydrateTorLong": {}, - "noBackupWarning": "Varning! Om du inte aktiverar säkerhetskopiering av chattar så tappar du åtkomst till krypterade meddelanden. Det är rekommenderat att du aktiverar säkerhetskopiering innan du loggar ut.", - "@noBackupWarning": {}, - "noOtherDevicesFound": "Inga andra enheter hittades", - "@noOtherDevicesFound": {}, - "disableEncryptionWarning": "Av säkerhetsskäl kan du inte stänga av kryptering i en chatt där det tidigare aktiverats.", - "@disableEncryptionWarning": {}, - "sorryThatsNotPossible": "Det där är inte möjligt", - "@sorryThatsNotPossible": {}, - "confirmMatrixId": "Bekräfta ditt Matrix-ID för att radera ditt konto.", - "@confirmMatrixId": {}, - "supposedMxid": "Detta bör vara {mxid}", - "@supposedMxid": { - "type": "String", - "placeholders": { - "mxid": { - "type": "String" - } - } - }, - "pleaseEnterRecoveryKey": "Ange din återställningsnyckel:", - "@pleaseEnterRecoveryKey": {}, - "commandHint_markasdm": "Märk som rum för direktmeddelanden för det givante Matrix ID", - "@commandHint_markasdm": {}, - "user": "Användare", - "@user": {}, - "indexedDbErrorLong": "Meddelandelagring är tyvärr inte aktiverat i privat läge som standard.\nGå till\n - about:config\n - sätt dom.indexedDB.privateBrowsing.enabled till true\nAnnars går det inte att använda FluffyChat.", - "@indexedDbErrorLong": {}, - "storeInSecureStorageDescription": "Lagra återställningsnyckeln på säker plats på denna enhet.", - "@storeInSecureStorageDescription": {}, - "storeInAppleKeyChain": "Lagra i Apples nyckelkedja (KeyChain)", - "@storeInAppleKeyChain": {}, - "foregroundServiceRunning": "Denna avisering visas när förgrundstjänsten körs.", - "@foregroundServiceRunning": {}, - "custom": "Anpassad", - "@custom": {}, - "countFiles": "{count} filer", - "@countFiles": { - "placeholders": { - "count": { - "type": "int" - } - } - }, - "screenSharingTitle": "skärmdelning", - "@screenSharingTitle": {}, - "noKeyForThisMessage": "Detta kan hända om meddelandet skickades innan du loggade in på ditt konto i den här enheten.\n\nDet kan också vara så att avsändaren har blockerat din enhet eller att något gick fel med internetanslutningen.\n\nKan du läsa meddelandet i en annan session? I sådana fall kan du överföra meddelandet från den sessionen! Gå till Inställningar > Enhet och säkerställ att dina enheter har verifierat varandra. När du öppnar rummet nästa gång och båda sessionerna är i förgrunden, så kommer nycklarna att överföras automatiskt.\n\nVill du inte förlora nycklarna vid utloggning eller när du byter enhet? Säkerställ att du har aktiverat säkerhetskopiering för chatten i inställningarna.", - "@noKeyForThisMessage": {}, - "fileIsTooBigForServer": "Servern informerar om att filen är för stor för att skickas.", - "@fileIsTooBigForServer": {}, - "deviceKeys": "Enhetsnycklar:", - "@deviceKeys": {}, - "enterSpace": "Gå till utrymme", - "@enterSpace": {}, - "commandHint_googly": "Skicka några googly ögon", - "@commandHint_googly": {}, - "commandHint_cuddle": "Skicka en omfamning", - "@commandHint_cuddle": {}, - "commandHint_hug": "Skicka en kram", - "@commandHint_hug": {}, - "users": "Användare", - "@users": {}, - "cuddleContent": "{senderName} omfamnar dig", - "@cuddleContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "hydrate": "Återställ från säkerhetskopia", - "@hydrate": {}, - "screenSharingDetail": "Du delar din skärm i FluffyChat", - "@screenSharingDetail": {}, - "youRejectedTheInvitation": "Du avvisade inbjudan", - "@youRejectedTheInvitation": {}, - "youBannedUser": "Du förbjöd {user}", - "@youBannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedBy": "📩 Du har blivit inbjuden av {user}", - "@youInvitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedUser": "📩 Du bjöd in {user}", - "@youInvitedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youKickedAndBanned": "🙅 Du sparkade ut och förbjöd {user}", - "@youKickedAndBanned": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "saveKeyManuallyDescription": "Spara nyckeln manuellt genom att aktivera dela-funktionen eller urklippshanteraren på enheten.", - "@saveKeyManuallyDescription": {}, - "storeInAndroidKeystore": "Lagra i Androids nyckellagring (KeyStore)", - "@storeInAndroidKeystore": {}, - "callingPermissions": "Samtalsbehörighet", - "@callingPermissions": {}, - "callingAccount": "Samtalskonto", - "@callingAccount": {}, - "callingAccountDetails": "Tillåt FluffyChat att använda Androids ring-app.", - "@callingAccountDetails": {}, - "appearOnTop": "Visa ovanpå", - "@appearOnTop": {}, - "appearOnTopDetails": "Tillåt att appen visas ovanpå (behövs inte om du redan har FluffyChat konfigurerat som ett samtalskonto)", - "@appearOnTopDetails": {}, - "otherCallingPermissions": "Mikrofon, kamera och andra behörigheter för FluffyChat", - "@otherCallingPermissions": {}, - "whyIsThisMessageEncrypted": "Varför kan inte detta meddelande läsas?", - "@whyIsThisMessageEncrypted": {}, - "newGroup": "Ny grupp", - "@newGroup": {}, - "enterRoom": "Gå till rummet", - "@enterRoom": {}, - "allSpaces": "Alla utrymmen", - "@allSpaces": {}, - "numChats": "{number} chattar", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Göm oviktiga tillståndshändelser", - "@hideUnimportantStateEvents": {}, - "doNotShowAgain": "Visa inte igen", - "@doNotShowAgain": {}, - "wasDirectChatDisplayName": "Tom chatt (var {oldDisplayName})", - "@wasDirectChatDisplayName": { - "type": "String", - "placeholders": { - "oldDisplayName": { - "type": "String" - } - } - }, - "newSpaceDescription": "Utrymmen möjliggör konsolidering av chattar och att bygga privata eller offentliga gemenskaper.", - "@newSpaceDescription": {}, - "reopenChat": "Återöppna chatt", - "@reopenChat": {}, - "jumpToLastReadMessage": "Hoppa till det senast lästa meddelandet", - "@jumpToLastReadMessage": {}, - "readUpToHere": "Läs upp till hit", - "@readUpToHere": {}, - "fileHasBeenSavedAt": "Filen har sparats i {path}", - "@fileHasBeenSavedAt": { - "type": "String", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "allRooms": "Alla gruppchattar", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "reportErrorDescription": "😭 Åh nej. Något gick fel. Om du vill ian du rapportera denna bugg till utvecklarna.", - "@reportErrorDescription": {}, - "setColorTheme": "Välj färgtema:", - "@setColorTheme": {}, - "banUserDescription": "Användaren kommer bannlysas från chatten och kommer inte kunna gå med i chatten igen tills bannlysningen avslutas.", - "@banUserDescription": {}, - "removeDevicesDescription": "Du kommer att bli utloggad från den här enheten och kommer inte längre kunna få meddelanden.", - "@removeDevicesDescription": {}, - "tryAgain": "Försök igen", - "@tryAgain": {}, - "unbanUserDescription": "Användaren kommer kunna gå med i chatten igen om den försöker.", - "@unbanUserDescription": {}, - "messagesStyle": "Meddelanden:", - "@messagesStyle": {}, - "chatDescription": "Chattbeskrivning", - "@chatDescription": {}, - "pushNotificationsNotAvailable": "Aviseringar är inte tillgängligt", - "@pushNotificationsNotAvailable": {}, - "invalidServerName": "Ogiltigt servernamn", - "@invalidServerName": {}, - "chatPermissions": "Chatt-behörigheter", - "@chatPermissions": {}, - "signInWithPassword": "Logga in med lösenord", - "@signInWithPassword": {}, - "makeAdminDescription": "När du gör denna användare till administratör kommer du inte kunna ångra det eftersom de kommer ha samma behörigheter som du.", - "@makeAdminDescription": {}, - "setChatDescription": "Ändra chattens beskrivning", - "@setChatDescription": {}, - "importFromZipFile": "Importera från .zip-fil", - "@importFromZipFile": {}, - "redactedBy": "Borttaget av {username}", - "@redactedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "signInWith": "Logga in med {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "optionalRedactReason": "(Frivilligt) Anledning till att ta bort det här meddelandet…", - "@optionalRedactReason": {}, - "archiveRoomDescription": "Den här chatten kommer flyttas till arkivet. Andra användare kommer kunna se att du har lämnat chatten.", - "@archiveRoomDescription": {}, - "exportEmotePack": "Exportera Emote-pack som .zip", - "@exportEmotePack": {}, - "inviteContactToGroupQuestion": "Vill du bjuda in {contact} till chatten ”{groupName}”?", - "@inviteContactToGroupQuestion": {}, - "redactedByBecause": "Borttaget av {username} på grund av: ”{reason}”", - "@redactedByBecause": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "reason": { - "type": "String" - } - } - }, - "redactMessageDescription": "Meddelandet kommer tas bort för alla medlemmar i denna konversation. Detta kan inte ångras.", - "@redactMessageDescription": {}, - "invalidInput": "Ogiltig input!", - "@invalidInput": {}, - "report": "rapportera", - "@report": {}, - "addChatDescription": "Lägg till en chattbeskrivning…", - "@addChatDescription": {}, - "hasKnocked": "{user} har knackat", - "@hasKnocked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "openLinkInBrowser": "Öppna länk i webbläsare", - "@openLinkInBrowser": {}, - "directChat": "Direktchatt", - "@directChat": {}, - "wrongPinEntered": "Fel pin-kod inslagen! Försök igen om {seconds} sekunder…", - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "sendTypingNotifications": "Skicka skrivnotifikationer", - "@sendTypingNotifications": {}, - "inviteGroupChat": "📨 Bjud in gruppchatt", - "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Bjud in privat chatt", - "@invitePrivateChat": {}, - "importEmojis": "Importera emojier", - "@importEmojis": {}, - "noChatDescriptionYet": "Ingen chatt-beskrivning än.", - "@noChatDescriptionYet": {}, - "learnMore": "Lär dig mer", - "@learnMore": {}, - "notAnImage": "Inte en bildfil.", - "@notAnImage": {}, - "chatDescriptionHasBeenChanged": "Chattbeskrivningen ändrades", - "@chatDescriptionHasBeenChanged": {}, - "roomUpgradeDescription": "Chatten kommer då att återskapas med den nya rumversionen. Alla medlemmar kommer bli påminda om att de måste byta till den nya chatten. Du kan läsa mer om rumversioner på https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, - "pleaseEnterANumber": "Vänligen ange ett nummer större än 0", - "@pleaseEnterANumber": {}, - "profileNotFound": "Användaren kunde onte hittas på servern. Kanske är det ett anslutningsproblem eller så finns inte användaren.", - "@profileNotFound": {}, - "jump": "Hoppa", - "@jump": {}, - "shareInviteLink": "Dela inbjudningslänk", - "@shareInviteLink": {}, - "emoteKeyboardNoRecents": "Nyligen använda emotes kommer dyka upp här…", - "@emoteKeyboardNoRecents": { - "type": "String", - "placeholders": {} - }, - "setTheme": "Välj tema:", - "@setTheme": {}, - "replace": "Ersätt", - "@replace": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Vänligen försök igen eller välj en annan server.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "createGroup": "Skapa grupp", - "@createGroup": {}, - "kickUserDescription": "Användaren sparkas ut ur chatten men bannlyses inte. I offentliga chattar kan användaren gå med igen när som helst.", - "@kickUserDescription": {}, - "importNow": "Importera nu", - "@importNow": {}, - "invite": "Bjud in", - "@invite": {}, - "databaseBuildErrorBody": "Kan inte bygga SQlite-databasen. Appen försöker använda den gamla databasen för nu. Vänligen rapportera problemet till utvecklarna här: {url}. Felmeddelandet är: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "blockListDescription": "Du kan blockera användare som stör dig. Du kommer inte få några meddelanden eller rum-inbjudningar från användarna på din personliga blocklista.", - "@blockListDescription": {}, - "createGroupAndInviteUsers": "Skapa en grupp och bjud in användare", - "@createGroupAndInviteUsers": {}, - "initAppError": "Ett problem skedde när appen initierades", - "@initAppError": {}, - "thisDevice": "Denna enhet:", - "@thisDevice": {}, - "startConversation": "Starta konversation", - "@startConversation": {}, - "publicSpaces": "Offentliga utrymmen", - "@publicSpaces": {}, - "blockedUsers": "Blockerade användare", - "@blockedUsers": {}, - "passwordIsWrong": "Det angivna lösenordet är fel", - "@passwordIsWrong": {}, - "pleaseEnterYourCurrentPassword": "Vänligen skriv ditt nuvarande lösenord", - "@pleaseEnterYourCurrentPassword": {}, - "groupCanBeFoundViaSearch": "Gruppen kan hittas genom sökning", - "@groupCanBeFoundViaSearch": {}, - "publicLink": "Offentlig länk", - "@publicLink": {}, - "noUsersFoundWithQuery": "Tyvärr kunde ingen användare hittas med ”{query}”. Vänligen kontrollera om du gjort ett stavfel.", - "@noUsersFoundWithQuery": { - "type": "String", - "placeholders": { - "query": { - "type": "String" - } - } - }, - "block": "blockera", - "@block": {}, - "nothingFound": "Inget hittades…", - "@nothingFound": {}, - "yourGlobalUserIdIs": "Ditt globala användar-ID är: ", - "@yourGlobalUserIdIs": {}, - "decline": "Neka", - "@decline": {}, - "newPassword": "Nytt lösenord", - "@newPassword": {}, - "passwordsDoNotMatch": "Lösenorden passar inte", - "@passwordsDoNotMatch": {}, - "commandHint_sendraw": "Skicka rå json", - "@commandHint_sendraw": {}, - "wrongRecoveryKey": "Tyvärr verkar detta inte vara den korrekta återställningsnyckeln.", - "@wrongRecoveryKey": {}, - "subspace": "Underutrymme", - "@subspace": {}, - "select": "Ange val", - "@select": {}, - "sessionLostBody": "Din session är förlorad. Vänligen rapportera detta fel till utvecklarna här: {url}. Felmeddelandet är: {error}", - "@sessionLostBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "pleaseChooseAStrongPassword": "Vänligen välj ett starkt lösenord", - "@pleaseChooseAStrongPassword": {}, - "blockUsername": "Ignorera användarnamn", - "@blockUsername": {}, - "addChatOrSubSpace": "Lägg till chatt eller underutrymme", - "@addChatOrSubSpace": {}, - "groupName": "Gruppnamn", - "@groupName": {}, - "leaveEmptyToClearStatus": "Lämna tom för att ta bort din status.", - "@leaveEmptyToClearStatus": {}, - "joinSpace": "Gå med i utrymme", - "@joinSpace": {}, - "searchForUsers": "Sök efter @användare…", - "@searchForUsers": {}, - "restoreSessionBody": "Appen försöker nu få tillbaks din session från backupen. Vänligen rapportera detta problem till utvecklarna här: {url}. Felmeddelandet är: {error}", - "@restoreSessionBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "databaseMigrationTitle": "Databasen är optimerad", - "@databaseMigrationTitle": {}, - "searchChatsRooms": "Sök efter #chattar, @användare…", - "@searchChatsRooms": {}, - "databaseMigrationBody": "Var vänlig vänta. Detta kan ta en stund.", - "@databaseMigrationBody": {}, - "youInvitedToBy": "📩 Du har blivit inbjuden via länk till:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "sendTypingNotificationsDescription": "Andra deltagare i en diskussion kan se när du skriver.", - "@sendTypingNotificationsDescription": {}, - "formattedMessagesDescription": "Visa formaterat meddelandeinnehåll som fet stil med markdown.", - "@formattedMessagesDescription": {}, - "verifyOtherUser": "🔐 Verifiera användaren", - "@verifyOtherUser": {}, - "formattedMessages": "Formaterade meddelanden", - "@formattedMessages": {}, - "canceledKeyVerification": "{sender} avbröt nyckelverifieringen", - "@canceledKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "completedKeyVerification": "{sender} fullbordade nyckelverifieringen", - "@completedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "requestedKeyVerification": "{sender} begärde nyckelverifiering", - "@requestedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "transparent": "Transparent", - "@transparent": {}, - "startedKeyVerification": "{sender} påbörjade nyckelverifiering", - "@startedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "presenceStyle": "Närvaro:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "presencesToggle": "Visa statusmeddelanden från andra användare", - "@presencesToggle": { - "type": "String", - "placeholders": {} - }, - "hidePresences": "Dölj statuslista?", - "@hidePresences": {}, - "sendReadReceipts": "Skicka läskvitton", - "@sendReadReceipts": {}, - "verifyOtherDevice": "🔐 Verifiera enhet", - "@verifyOtherDevice": {}, - "acceptedKeyVerification": "{sender} accepterade nyckelverifieringen", - "@acceptedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "incomingMessages": "Inkommande meddelanden", - "@incomingMessages": {}, - "forwardMessageTo": "Vidarebefordra meddelandet till {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "verifyOtherUserDescription": "Om du verifierar en användare så kan du vara säker på vem du verkligen skriver till. 💪\n\nNär du påbörjar en verifiering så ser du och den andra användaren en popup-ruta i appen. I den rutan ser du ett antal tecken som du jämför med vad den andra användaren ser.\n\nDet bästa sättet att göra detta är att träffas fysiskt, eller genom att starta ett videosamtal. 👭", - "@verifyOtherUserDescription": {}, - "verifyOtherDeviceDescription": "När du verifierar en enhet så kan era enheter utväxla nycklar, vilket förbättrar säkerheten. 💪 När du påbörjar en verifiering så ser du en popup-ruta på båda enheterna. I den rutan ser du ett antal tecken som du jämför med det som visas på den andra enheten. Det är bäst att ha båda enheterna till hands innan du påbörjar verifieringen. 🤳", - "@verifyOtherDeviceDescription": {}, - "isReadyForKeyVerification": "{sender} är redo för nyckelverifiering", - "@isReadyForKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "sendReadReceiptsDescription": "Andra deltagare i en diskussion kan se när du läst ett meddelande.", - "@sendReadReceiptsDescription": {}, - "stickers": "Klistermärken", - "@stickers": {}, - "discover": "Upptäck", - "@discover": {} -} + }, + "saveFile": "Spara fil", + "@saveFile": { + "type": "String", + "placeholders": {} + }, + "roomVersion": "Rum version", + "@roomVersion": { + "type": "String", + "placeholders": {} + }, + "removeYourAvatar": "Ta bort din avatar", + "@removeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "register": "Registrera", + "@register": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPin": "Ange din pin-kod", + "@pleaseEnterYourPin": { + "type": "String", + "placeholders": {} + }, + "wipeChatBackup": "Radera din chatt-backup för att skapa en ny återställningsnyckel?", + "@wipeChatBackup": { + "type": "String", + "placeholders": {} + }, + "verified": "Verifierad", + "@verified": { + "type": "String", + "placeholders": {} + }, + "transferFromAnotherDevice": "Överför till annan enhet", + "@transferFromAnotherDevice": { + "type": "String", + "placeholders": {} + }, + "chatBackupDescription": "Dina meddelanden är skyddad av en säkerhetsnyckel. Se till att du inte förlorar den.", + "@chatBackupDescription": { + "type": "String", + "placeholders": {} + }, + "commandHint_create": "Skapa en tom grupp-chatt\nAnvänd --no-encryption för att inaktivera kryptering", + "@commandHint_create": { + "type": "String", + "description": "Usage hint for the command /create" + }, + "commandHint_discardsession": "Kasta bort sessionen", + "@commandHint_discardsession": { + "type": "String", + "description": "Usage hint for the command /discardsession" + }, + "commandHint_dm": "Starta en direkt-chatt\nAnvänd --no-encryption för att inaktivera kryptering", + "@commandHint_dm": { + "type": "String", + "description": "Usage hint for the command /dm" + }, + "homeserver": "Hemserver", + "oneClientLoggedOut": "En av dina klienter har loggats ut", + "addAccount": "Lägg till konto", + "editBundlesForAccount": "Lägg till paket för detta konto", + "addToBundle": "Utöka paket", + "bundleName": "Paketnamn", + "serverRequiresEmail": "Servern behöver validera din e-postadress för registrering.", + "unverified": "Ej verifierad", + "messageInfo": "Meddelandeinformation", + "messageType": "Meddelandetyp", + "time": "Tid", + "sender": "Avsändare", + "removeFromSpace": "Ta bort från utrymme", + "start": "Starta", + "openGallery": "Öppna galleri", + "repeatPassword": "Upprepa lösenord", + "markAsRead": "Markera som läst", + "commandHint_clearcache": "Rensa cache", + "@commandHint_clearcache": { + "type": "String", + "description": "Usage hint for the command /clearcache" + }, + "link": "Länk", + "reportUser": "Rapportera användare", + "openChat": "Öppna Chatt", + "sendOnEnter": "Skicka med Enter", + "scanQrCode": "Skanna QR-kod", + "yourChatBackupHasBeenSetUp": "Din chatt-backup har konfigurerats.", + "removeFromBundle": "Ta bort från paket", + "enableMultiAccounts": "(BETA) Aktivera multi-konton på denna enhet", + "emojis": "Uttryckssymboler", + "placeCall": "Ring", + "voiceCall": "Röstsamtal", + "unsupportedAndroidVersion": "Inget stöd för denna version av Android", + "videoCallsBetaWarning": "Videosamtal är för närvarande under testning. De kanske inte fungerar som det är tänkt eller på alla plattformar.", + "unsupportedAndroidVersionLong": "Denna funktion kräver en senare version av Android.", + "dismiss": "Avfärda", + "reactedWith": "{sender} reagerade med {reaction}", + "@reactedWith": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "reaction": { + "type": "String" + } + } + }, + "pinMessage": "Fäst i rum", + "confirmEventUnpin": "Är du säker på att händelsen inte längre skall vara fastnålad?", + "experimentalVideoCalls": "Experimentella videosamtal", + "storeSecurlyOnThisDevice": "Lagra säkert på denna enhet", + "youJoinedTheChat": "Du gick med i chatten", + "youAcceptedTheInvitation": "👍 Du accepterade inbjudan", + "youKicked": "👞 Du sparkade ut {user}", + "@youKicked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "hugContent": "{senderName} kramar dig", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "commandHint_markasgroup": "Märk som grupp", + "recoveryKeyLost": "Borttappad återställningsnyckel?", + "youHaveWithdrawnTheInvitationFor": "Du har återkallat inbjudan till {user}", + "@youHaveWithdrawnTheInvitationFor": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youUnbannedUser": "Du återkallade förbudet för {user}", + "@youUnbannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "unlockOldMessages": "Lås upp äldre meddelanden", + "newSpace": "Nytt utrymme", + "googlyEyesContent": "{senderName} skickar dig googly ögon", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "dehydrate": "Exportera sessionen och rensa enheten", + "dehydrateWarning": "Denna åtgärd kan inte ångras. Försäkra dig om att backupen är i säkert förvar.", + "recoveryKey": "Återställningsnyckel", + "pleaseEnterRecoveryKeyDescription": "Ange din återställningsnyckel från en tidigare session för att låsa upp äldre meddelanden. Din återställningsnyckel är INTE ditt lösenord.", + "encryptThisChat": "Kryptera denna chatt", + "noBackupWarning": "Varning! Om du inte aktiverar säkerhetskopiering av chattar så tappar du åtkomst till krypterade meddelanden. Det är rekommenderat att du aktiverar säkerhetskopiering innan du loggar ut.", + "noOtherDevicesFound": "Inga andra enheter hittades", + "disableEncryptionWarning": "Av säkerhetsskäl kan du inte stänga av kryptering i en chatt där det tidigare aktiverats.", + "sorryThatsNotPossible": "Det där är inte möjligt", + "confirmMatrixId": "Bekräfta ditt Matrix-ID för att radera ditt konto.", + "supposedMxid": "Detta bör vara {mxid}", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "commandHint_markasdm": "Märk som rum för direktmeddelanden för det givante Matrix ID", + "user": "Användare", + "storeInSecureStorageDescription": "Lagra återställningsnyckeln på säker plats på denna enhet.", + "storeInAppleKeyChain": "Lagra i Apples nyckelkedja (KeyChain)", + "foregroundServiceRunning": "Denna avisering visas när förgrundstjänsten körs.", + "custom": "Anpassad", + "countFiles": "{count} filer", + "@countFiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "screenSharingTitle": "skärmdelning", + "noKeyForThisMessage": "Detta kan hända om meddelandet skickades innan du loggade in på ditt konto i den här enheten.\n\nDet kan också vara så att avsändaren har blockerat din enhet eller att något gick fel med internetanslutningen.\n\nKan du läsa meddelandet i en annan session? I sådana fall kan du överföra meddelandet från den sessionen! Gå till Inställningar > Enhet och säkerställ att dina enheter har verifierat varandra. När du öppnar rummet nästa gång och båda sessionerna är i förgrunden, så kommer nycklarna att överföras automatiskt.\n\nVill du inte förlora nycklarna vid utloggning eller när du byter enhet? Säkerställ att du har aktiverat säkerhetskopiering för chatten i inställningarna.", + "fileIsTooBigForServer": "Gick inte att skicka! Servern stödjer endast bilagor upp till{max}.", + "deviceKeys": "Enhetsnycklar:", + "commandHint_googly": "Skicka några googly ögon", + "commandHint_cuddle": "Skicka en omfamning", + "commandHint_hug": "Skicka en kram", + "users": "Användare", + "cuddleContent": "{senderName} omfamnar dig", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "hydrate": "Återställ från säkerhetskopia", + "screenSharingDetail": "Du delar din skärm i FluffyChat", + "youRejectedTheInvitation": "Du avvisade inbjudan", + "youBannedUser": "Du förbjöd {user}", + "@youBannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedBy": "📩 Du har blivit inbjuden av {user}", + "@youInvitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedUser": "📩 Du bjöd in {user}", + "@youInvitedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKickedAndBanned": "🙅 Du sparkade ut och förbjöd {user}", + "@youKickedAndBanned": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "saveKeyManuallyDescription": "Spara nyckeln manuellt genom att aktivera dela-funktionen eller urklippshanteraren på enheten.", + "storeInAndroidKeystore": "Lagra i Androids nyckellagring (KeyStore)", + "whyIsThisMessageEncrypted": "Varför kan inte detta meddelande läsas?", + "newGroup": "Ny grupp", + "allSpaces": "Alla utrymmen", + "doNotShowAgain": "Visa inte igen", + "wasDirectChatDisplayName": "Tom chatt (var {oldDisplayName})", + "@wasDirectChatDisplayName": { + "type": "String", + "placeholders": { + "oldDisplayName": { + "type": "String" + } + } + }, + "newSpaceDescription": "Utrymmen möjliggör konsolidering av chattar och att bygga privata eller offentliga gemenskaper.", + "reopenChat": "Återöppna chatt", + "jumpToLastReadMessage": "Hoppa till det senast lästa meddelandet", + "readUpToHere": "Läs upp till hit", + "fileHasBeenSavedAt": "Filen har sparats i {path}", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "reportErrorDescription": "😭 Åh nej. Något gick fel. Om du vill ian du rapportera denna bugg till utvecklarna.", + "setColorTheme": "Välj färgtema:", + "banUserDescription": "Användaren kommer bannlysas från chatten och kommer inte kunna gå med i chatten igen tills bannlysningen avslutas.", + "removeDevicesDescription": "Du kommer att bli utloggad från den här enheten och kommer inte längre kunna få meddelanden.", + "tryAgain": "Försök igen", + "unbanUserDescription": "Användaren kommer kunna gå med i chatten igen om den försöker.", + "messagesStyle": "Meddelanden:", + "chatDescription": "Chattbeskrivning", + "pushNotificationsNotAvailable": "Aviseringar är inte tillgängligt", + "invalidServerName": "Ogiltigt servernamn", + "chatPermissions": "Chatt-behörigheter", + "makeAdminDescription": "När du gör denna användare till administratör kommer du inte kunna ångra det eftersom de kommer ha samma behörigheter som du.", + "setChatDescription": "Ändra chattens beskrivning", + "importFromZipFile": "Importera från .zip-fil", + "redactedBy": "Borttaget av {username}", + "@redactedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "optionalRedactReason": "(Frivilligt) Anledning till att ta bort det här meddelandet…", + "archiveRoomDescription": "Den här chatten kommer flyttas till arkivet. Andra användare kommer kunna se att du har lämnat chatten.", + "exportEmotePack": "Exportera Emote-pack som .zip", + "redactedByBecause": "Borttaget av {username} på grund av: ”{reason}”", + "@redactedByBecause": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "reason": { + "type": "String" + } + } + }, + "redactMessageDescription": "Meddelandet kommer tas bort för alla medlemmar i denna konversation. Detta kan inte ångras.", + "invalidInput": "Ogiltig input!", + "report": "rapportera", + "hasKnocked": "{user} har knackat", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "openLinkInBrowser": "Öppna länk i webbläsare", + "directChat": "Direktchatt", + "wrongPinEntered": "Fel pin-kod inslagen! Försök igen om {seconds} sekunder…", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "sendTypingNotifications": "Skicka skrivnotifikationer", + "inviteGroupChat": "📨 Gruppchattsinbjudan", + "importEmojis": "Importera emojier", + "noChatDescriptionYet": "Ingen chatt-beskrivning än.", + "learnMore": "Lär dig mer", + "notAnImage": "Inte en bildfil.", + "chatDescriptionHasBeenChanged": "Chattbeskrivningen ändrades", + "roomUpgradeDescription": "Chatten kommer då att återskapas med den nya rumversionen. Alla medlemmar kommer bli påminda om att de måste byta till den nya chatten. Du kan läsa mer om rumversioner på https://spec.matrix.org/latest/rooms/", + "pleaseEnterANumber": "Vänligen ange ett nummer större än 0", + "jump": "Hoppa", + "shareInviteLink": "Dela inbjudningslänk", + "emoteKeyboardNoRecents": "Nyligen använda emotes kommer dyka upp här…", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "replace": "Ersätt", + "createGroup": "Skapa grupp", + "kickUserDescription": "Användaren sparkas ut ur chatten men bannlyses inte. I offentliga chattar kan användaren gå med igen när som helst.", + "importNow": "Importera nu", + "invite": "Bjud in", + "blockListDescription": "Du kan blockera användare som stör dig. Du kommer inte få några meddelanden eller rum-inbjudningar från användarna på din personliga blocklista.", + "createGroupAndInviteUsers": "Skapa en grupp och bjud in användare", + "initAppError": "Ett problem skedde när appen initierades", + "thisDevice": "Denna enhet:", + "publicSpaces": "Offentliga utrymmen", + "blockedUsers": "Blockerade användare", + "passwordIsWrong": "Det angivna lösenordet är fel", + "pleaseEnterYourCurrentPassword": "Vänligen skriv ditt nuvarande lösenord", + "groupCanBeFoundViaSearch": "Gruppen kan hittas genom sökning", + "noUsersFoundWithQuery": "Tyvärr kunde ingen användare hittas med ”{query}”. Vänligen kontrollera om du gjort ett stavfel.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "block": "blockera", + "nothingFound": "Inget hittades…", + "yourGlobalUserIdIs": "Ditt globala användar-ID är: ", + "newPassword": "Nytt lösenord", + "passwordsDoNotMatch": "Lösenorden passar inte", + "commandHint_sendraw": "Skicka rå json", + "wrongRecoveryKey": "Tyvärr verkar detta inte vara den korrekta återställningsnyckeln.", + "select": "Ange val", + "sessionLostBody": "Din session är förlorad. Vänligen rapportera detta fel till utvecklarna här: {url}. Felmeddelandet är: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "pleaseChooseAStrongPassword": "Vänligen välj ett starkt lösenord", + "blockUsername": "Ignorera användarnamn", + "addChatOrSubSpace": "Lägg till chatt eller underutrymme", + "groupName": "Gruppnamn", + "leaveEmptyToClearStatus": "Lämna tom för att ta bort din status.", + "joinSpace": "Gå med i utrymme", + "searchForUsers": "Sök efter @användare…", + "restoreSessionBody": "Appen försöker nu få tillbaks din session från backupen. Vänligen rapportera detta problem till utvecklarna här: {url}. Felmeddelandet är: {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "databaseMigrationTitle": "Databasen är optimerad", + "searchChatsRooms": "Sök efter #chattar, @användare…", + "databaseMigrationBody": "Var vänlig vänta. Detta kan ta en stund.", + "sendTypingNotificationsDescription": "Andra deltagare i en diskussion kan se när du skriver.", + "formattedMessagesDescription": "Visa formaterat meddelandeinnehåll som fet stil med markdown.", + "verifyOtherUser": "🔐 Verifiera användaren", + "formattedMessages": "Formaterade meddelanden", + "canceledKeyVerification": "{sender} avbröt nyckelverifieringen", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "completedKeyVerification": "{sender} fullbordade nyckelverifieringen", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "requestedKeyVerification": "{sender} begärde nyckelverifiering", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "transparent": "Transparent", + "startedKeyVerification": "{sender} påbörjade nyckelverifiering", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "presencesToggle": "Visa statusmeddelanden från andra användare", + "@presencesToggle": { + "type": "String", + "placeholders": {} + }, + "hidePresences": "Dölj statuslista?", + "sendReadReceipts": "Skicka läskvitton", + "verifyOtherDevice": "🔐 Verifiera enhet", + "acceptedKeyVerification": "{sender} accepterade nyckelverifieringen", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "incomingMessages": "Inkommande meddelanden", + "verifyOtherUserDescription": "Om du verifierar en användare så kan du vara säker på vem du verkligen skriver till. 💪\n\nNär du påbörjar en verifiering så ser du och den andra användaren en popup-ruta i appen. I den rutan ser du ett antal tecken som du jämför med vad den andra användaren ser.\n\nDet bästa sättet att göra detta är att träffas fysiskt, eller genom att starta ett videosamtal. 👭", + "verifyOtherDeviceDescription": "När du verifierar en enhet så kan era enheter utväxla nycklar, vilket förbättrar säkerheten. 💪 När du påbörjar en verifiering så ser du en popup-ruta på båda enheterna. I den rutan ser du ett antal tecken som du jämför med det som visas på den andra enheten. Det är bäst att ha båda enheterna till hands innan du påbörjar verifieringen. 🤳", + "isReadyForKeyVerification": "{sender} är redo för nyckelverifiering", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "sendReadReceiptsDescription": "Andra deltagare i en diskussion kan se när du läst ett meddelande.", + "stickers": "Klistermärken", + "discover": "Upptäck", + "ignoreUser": "Ignorera användare", + "aboutHomeserver": "Om{homeserver}", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "commandHint_roomupgrade": "Uppgradera detta rum till den givna rumsversionen", + "appLockDescription": "Lås appen när den inte används med en pin-kod", + "swipeRightToLeftToReply": "Svep från höger till vänster för att svara", + "noMoreChatsFound": "Inga fler chattar hittades...", + "noChatsFoundHere": "Inga chattar kunde hittas här ännu. Starta en ny chatt med någon genom att använda knappen nedan. ⤵️", + "unread": "Olästa", + "space": "Utrymme", + "spaces": "Utrymmen", + "changedTheChatDescription": "{username} ändrade chattens beskrivning", + "changedTheChatName": "{username} ändrade chattens namn", + "checkList": "Att-göra lista", + "countInvited": "{count} inbjudna", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "globalChatId": "Globalt chat-ID", + "accessAndVisibility": "Tillgänglighet och synlighet", + "accessAndVisibilityDescription": "Vem som är tillåten att gå med i chatten och hur chatten kan upptäckas.", + "calls": "Samtal", + "customEmojisAndStickers": "Egna emojis och klistermärken", + "customEmojisAndStickersBody": "Lägg till eller dela egna emojis eller klistermärken som kan användas i alla chattar.", + "alwaysUse24HourFormat": "falskt", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." + }, + "hideRedactedMessages": "Dölj tillbakatagna meddelanden", + "hideRedactedMessagesBody": "Om någon tar tillbaka ett meddelande, kommer meddelandet inte längre vara synligt i chatten.", + "hideInvalidOrUnknownMessageFormats": "Dölj ogiltiga eller okända meddelande-format", + "overview": "Översikt", + "passwordRecoverySettings": "Lösenordsåterställnings-inställningar", + "sendImages": "Skicka {count} bild", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "synchronizingPleaseWaitCounter": " Synkroniserar… ({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "invitedBy": "📩Inbjuden av{user}", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "usersMustKnock": "Användare måste knacka", + "noOneCanJoin": "Ingen kan gå med", + "knock": "Knacka", + "knocking": "Knackar", + "chatCanBeDiscoveredViaSearchOnServer": "Chatten kan upptäckas via sökfunktionen på {server}", + "@chatCanBeDiscoveredViaSearchOnServer": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "publicChatAddresses": "Offentlig chatt-adress", + "createNewAddress": "Skapa ny adress", + "searchIn": "Sök i chatten \"{chat}\"...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "searchMore": "Sök mer...", + "gallery": "Galleri", + "files": "Filer", + "commandHint_ignore": "Ignorera det givna matrix-ID:et", + "commandHint_unignore": "Sluta ignorera det givna matrix-ID:et", + "unreadChatsInApp": "{appname}: {unread} olästa chattar", + "@unreadChatsInApp": { + "type": "String", + "placeholders": { + "appname": { + "type": "String" + }, + "unread": { + "type": "String" + } + } + }, + "noDatabaseEncryption": "Databaskryptering stöds inte på denna platform", + "thereAreCountUsersBlocked": "Just nu är {count} användare blockade.", + "@thereAreCountUsersBlocked": { + "type": "String", + "count": {} + }, + "restricted": "Begränsad", + "knockRestricted": "Knacka begränsade", + "goToSpace": "Gå till utrymme:{space}", + "@goToSpace": { + "type": "String", + "space": {} + }, + "markAsUnread": "Markera oläst", + "userLevel": "{level} - Användare", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "moderatorLevel": "{level} - Moderator", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "adminLevel": "{level} - Admin", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "Ändra allmäna chatt-inställningar", + "inviteOtherUsers": "Bjud in andra användare till chatten", + "changeTheChatPermissions": "Ändra chattbehörigheterna", + "changeTheVisibilityOfChatHistory": "Ändra synligheten på chatt-historiken", + "changeTheCanonicalRoomAlias": "Ändra den huvudsakliga offenliga chatt-adressen", + "sendRoomNotifications": "Skicka en @rum notis", + "changeTheDescriptionOfTheGroup": "Ändra beskrivningen på chatten", + "chatPermissionsDescription": "Definiera vilket tillståndsnivå som krävs för vissa handlingar i chatten. Tillståndsnivåerna 0, 50 och 100 representerar ofta användare, moderatorer och admins, men vilken gradering som helst fungerar.", + "updateInstalled": "🎉 Uppdatering {version} installerad!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "changelog": "Ändringslogg", + "sendCanceled": "Skickande avbröts", + "loginWithMatrixId": "Logga in med Matrix-ID", + "doesNotSeemToBeAValidHomeserver": "Verkar inte vara en kompatibel hemserver. Fel URL?", + "calculatingFileSize": "Beräknar filstorlek...", + "prepareSendingAttachment": "Förbered skickar bilaga...", + "sendingAttachment": "Skickar bilaga...", + "generatingVideoThumbnail": "Genererar förhandsvisning...", + "compressVideo": "Komprimerar video...", + "sendingAttachmentCountOfCount": "Skickar bilaga {index} om {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "Servergräns nådd! Väntar {seconds} sekunder...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "En av dina enheter är inte verifierade", + "noticeChatBackupDeviceVerification": "Notis: När du ansluter alla dina enheter till chatt-backupen, är de automatiskt verifierade.", + "continueText": "Fortsätt", + "welcomeText": "Hej Hej 👋 Det här är FluffyChat. Du kan logga in på vilken hemserver du vill, som är kompatibel med https://matrix.org. Och sen chatta med vemsomhelst. Det är ett enormt decentraliserat chatt-nätverk!", + "blur": "Blurra:", + "opacity": "Opacitet:", + "setWallpaper": "Ställ in bakgrundsbild", + "manageAccount": "Hantera konto", + "noContactInformationProvided": "Servern bistår inte med någon giltig kontaktinformation", + "contactServerAdmin": "Kontakta server-admin", + "contactServerSecurity": "Kontakta server-säkerheten", + "supportPage": "Stödsida", + "serverInformation": "Serverinformation:", + "name": "Namn", + "version": "Version", + "website": "Hemsida", + "compress": "Komprimera", + "boldText": "Fetstilt", + "italicText": "Kursiv", + "strikeThrough": "Genomstryk", + "pleaseFillOut": "Fyll i", + "invalidUrl": "Ogiltig url", + "addLink": "Lägg till länk", + "unableToJoinChat": "Kunde inte gå med i chatten. Kanske har den andra parten redan stängt konversationen.", + "previous": "Föregående", + "otherPartyNotLoggedIn": "Den andra parten är för närvarande inte inloggad, och kan därför inte ta emot meddelanden!", + "appWantsToUseForLogin": "Använd '{server}' för att logga in", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "appWantsToUseForLoginDescription": "Du tillåter härmed appen och hemsidan att dela information om dig.", + "open": "Öppna", + "waitingForServer": "Väntar på server...", + "newChatRequest": "📩 Ny chatt förfrågan", + "contentNotificationSettings": "Innehållsnotis-inställningar", + "generalNotificationSettings": "Allmänna notis-inställningar", + "roomNotificationSettings": "rumsnotis-inställningar", + "userSpecificNotificationSettings": "Användarspecifika notis-inställningar", + "otherNotificationSettings": "Andra notis-inställningar", + "notificationRuleContainsUserName": "Innehåller Användarnamn", + "notificationRuleContainsUserNameDescription": "Avisera användaren när ett meddelande innehåller deras användarnamn.", + "notificationRuleMaster": "Tysta alla notiser", + "notificationRuleMasterDescription": "Åsidosätter alla andra regler och tystar alla notiser.", + "notificationRuleMemberEvent": "Medlemshändelse", + "notificationRuleContainsDisplayName": "Innehåller visningsnamn", + "notificationRuleReaction": "Reaktion", + "notificationRuleCall": "Samtal", + "notificationRuleJitsi": "Jitsi", + "takeAPhoto": "Ta ett foto", + "recordAVideo": "Spela in en video", + "more": "Mer", + "allDevices": "Alla enheter", + "optionalMessage": "(Valfritt) meddelande ...", + "enterNewChat": "Gå med i ny chatt", + "approve": "Godkänn", + "customReaction": "Anpassad reaktion", + "moreEvents": "Fler händelser", + "noMessagesYet": "Inga meddelanden än", + "pause": "Pausa", + "resume": "Fortsätt", + "countChats": "{chats} chattar", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "answerOption": "Svarsalternativ", + "addAnswerOption": "Lägg till svarsalternativ", + "allowMultipleAnswers": "Tillåt flera svar", + "countVotes": "{count, plural, =1{En röst} other{{count} röster}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replyInThread": "Svara i tråd", + "thread": "Tråd", + "countReplies": "{count, plural, =1{Ett svar} other{{count} svar}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "saveChanges": "Spara ändringar", + "loadingMessages": "Läser in meddelanden", + "noMoreResultsFound": "Inga fler resultat hittades", + "versionWithNumber": "Version: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "Loggar", + "signIn": "Logga in", + "createNewAccount": "Skapa nytt konto" +} \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 3484d7bc..cfbff0b0 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -1,3380 +1,2787 @@ { - "@@last_modified": "2021-08-14 12:41:09.826673", - "acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது", - "@acceptedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "accept": "ஏற்றுக்கொள்", - "@accept": { - "type": "String", - "placeholders": {} - }, - "about": "பற்றி", - "@about": { - "type": "String", - "placeholders": {} - }, - "sendCanceled": "அனுப்பப்பட்டது ரத்து செய்யப்பட்டது", - "@sendCanceled": {}, - "chatDetails": "அரட்டை விவரங்கள்", - "@chatDetails": { - "type": "String", - "placeholders": {} - }, - "globalChatId": "உலகளாவிய அரட்டை ஐடி", - "@globalChatId": {}, - "accessAndVisibility": "அணுகல் மற்றும் தெரிவுநிலை", - "@accessAndVisibility": {}, - "enterYourHomeserver": "உங்கள் ஓம்சர்வரை உள்ளிடவும்", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "onlineKeyBackupEnabled": "நிகழ்நிலை விசை காப்புப்பிரதி இயக்கப்பட்டது", - "@onlineKeyBackupEnabled": { - "type": "String", - "placeholders": {} - }, - "recoveryKey": "மீட்பு விசை", - "@recoveryKey": {}, - "setStatus": "நிலையை அமைக்கவும்", - "@setStatus": { - "type": "String", - "placeholders": {} - }, - "title": "பஞ்சுபோன்ற", - "@title": { - "description": "Title for the application", - "type": "String", - "placeholders": {} - }, - "verify": "சரிபார்க்கவும்", - "@verify": { - "type": "String", - "placeholders": {} - }, - "verifyStart": "சரிபார்ப்பைத் தொடங்கவும்", - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "unsupportedAndroidVersion": "ஆதரிக்கப்படாத ஆண்ட்ராய்டு பதிப்பு", - "@unsupportedAndroidVersion": {}, - "invitedBy": "{user} அழைத்தார்", - "@invitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "startConversation": "உரையாடலைத் தொடங்குங்கள்", - "@startConversation": {}, - "commandHint_sendraw": "மூல சாதொபொகு ஐ அனுப்புங்கள்", - "@commandHint_sendraw": {}, - "passwordIsWrong": "நீங்கள் உள்ளிட்ட கடவுச்சொல் தவறு", - "@passwordIsWrong": {}, - "publicLink": "பொது இணைப்பு", - "@publicLink": {}, - "forwardMessageTo": "செய்தியை {roomName}க்கு அனுப்பவா?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "completedKeyVerification": "{sender} நிறைவு செய்யப்பட்ட விசை சரிபார்ப்பு", - "@completedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "incomingMessages": "உள்வரும் செய்திகள்", - "@incomingMessages": {}, - "password": "கடவுச்சொல்", - "@password": { - "type": "String", - "placeholders": {} - }, - "emptyChat": "வெற்று அரட்டை", - "@emptyChat": { - "type": "String", - "placeholders": {} - }, - "encrypted": "குறியாக்கப்பட்டது", - "@encrypted": { - "type": "String", - "placeholders": {} - }, - "reject": "நிராகரிக்கவும்", - "@reject": { - "type": "String", - "placeholders": {} - }, - "importNow": "இப்போது இறக்குமதி செய்யுங்கள்", - "@importNow": {}, - "changedTheChatAvatar": "{username} அரட்டை அவதாரத்தை மாற்றியது", - "@changedTheChatAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "widgetName": "பெயர்", - "@widgetName": {}, - "chooseAStrongPassword": "வலுவான கடவுச்சொல்லைத் தேர்வுசெய்க", - "@chooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "commandHint_me": "உங்களை விவரிக்கவும்", - "@commandHint_me": { - "type": "String", - "description": "Usage hint for the command /me" - }, - "commandHint_unban": "இந்த அறையிலிருந்து கொடுக்கப்பட்ட பயனரைத் தடுக்கிறது", - "@commandHint_unban": { - "type": "String", - "description": "Usage hint for the command /unban" - }, - "countParticipants": "{count} பங்கேற்பாளர்கள்", - "@countParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "editDisplayname": "காட்சி பெயர் திருத்து", - "@editDisplayname": { - "type": "String", - "placeholders": {} - }, - "fileName": "கோப்பு பெயர்", - "@fileName": { - "type": "String", - "placeholders": {} - }, - "hasWithdrawnTheInvitationFor": "{targetName} க்கான அழைப்பை {username} திரும்பப் பெற்றுள்ளார்", - "@hasWithdrawnTheInvitationFor": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "identity": "முற்றொருமை", - "@identity": { - "type": "String", - "placeholders": {} - }, - "removedBy": "{username} ஆல் அகற்றப்பட்டது", - "@removedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "requestPermission": "இசைவு கோருங்கள்", - "@requestPermission": { - "type": "String", - "placeholders": {} - }, - "user": "பயனர்", - "@user": {}, - "optionalRedactReason": "(விரும்பினால்) இந்த செய்தியை மாற்றியமைப்பதற்கான காரணம் ...", - "@optionalRedactReason": {}, - "device": "சாதனம்", - "@device": { - "type": "String", - "placeholders": {} - }, - "license": "உரிமம்", - "@license": { - "type": "String", - "placeholders": {} - }, - "contactHasBeenInvitedToTheGroup": "குழுவிற்கு தொடர்பு அழைக்கப்பட்டுள்ளது", - "@contactHasBeenInvitedToTheGroup": { - "type": "String", - "placeholders": {} - }, - "passphraseOrKey": "கடவுச்சொல் அல்லது மீட்பு விசை", - "@passphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "widgetNameError": "காட்சி பெயரை வழங்கவும்.", - "@widgetNameError": {}, - "select": "தேர்ந்தெடு", - "@select": {}, - "compareEmojiMatch": "தயவுசெய்து ஈமோசிகளை ஒப்பிடுக", - "@compareEmojiMatch": { - "type": "String", - "placeholders": {} - }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "fromTheInvitation": "அழைப்பிலிருந்து", - "@fromTheInvitation": { - "type": "String", - "placeholders": {} - }, - "help": "உதவி", - "@help": { - "type": "String", - "placeholders": {} - }, - "invited": "அழைக்கப்பட்டார்", - "@invited": { - "type": "String", - "placeholders": {} - }, - "invitedUsersOnly": "பயனர்களை மட்டுமே அழைத்தது", - "@invitedUsersOnly": { - "type": "String", - "placeholders": {} - }, - "kickedAndBanned": "🙅 {username} உதைத்து {targetName} ஐத் தடை செய்தார்", - "@kickedAndBanned": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "mention": "குறிப்பு", - "@mention": { - "type": "String", - "placeholders": {} - }, - "newVerificationRequest": "புதிய சரிபார்ப்பு கோரிக்கை!", - "@newVerificationRequest": { - "type": "String", - "placeholders": {} - }, - "shareInviteLink": "இணைப்பைப் பகிரவும்", - "@shareInviteLink": {}, - "pickImage": "ஒரு படத்தைத் தேர்ந்தெடுக்கவும்", - "@pickImage": { - "type": "String", - "placeholders": {} - }, - "pin": "முள்", - "@pin": { - "type": "String", - "placeholders": {} - }, - "unavailable": "கிடைக்கவில்லை", - "@unavailable": { - "type": "String", - "placeholders": {} - }, - "voiceCall": "குரல் அழைப்பு", - "@voiceCall": {}, - "youKickedAndBanned": "🙅 நீங்கள் உதைத்து தடைசெய்துள்ளீர்கள் {user}", - "@youKickedAndBanned": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youKicked": "👞 {user}ஐ உதைத்துள்ளீர்கள்", - "@youKicked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "storeInAppleKeyChain": "ஆப்பிள் கீச்சினில் சேமிக்கவும்", - "@storeInAppleKeyChain": {}, - "searchForUsers": "@Users ஐத் தேடுங்கள் ...", - "@searchForUsers": {}, - "pleaseEnterYourCurrentPassword": "உங்கள் தற்போதைய கடவுச்சொல்லை உள்ளிடவும்", - "@pleaseEnterYourCurrentPassword": {}, - "anyoneCanJoin": "யார் வேண்டுமானாலும் சேரலாம்", - "@anyoneCanJoin": { - "type": "String", - "placeholders": {} - }, - "archive": "காப்பகம்", - "@archive": { - "type": "String", - "placeholders": {} - }, - "banFromChat": "அரட்டையிலிருந்து தடை", - "@banFromChat": { - "type": "String", - "placeholders": {} - }, - "cancel": "ரத்துசெய்", - "@cancel": { - "type": "String", - "placeholders": {} - }, - "edit": "தொகு", - "@edit": { - "type": "String", - "placeholders": {} - }, - "iHaveClickedOnLink": "நான் இணைப்பைக் சொடுக்கு செய்துள்ளேன்", - "@iHaveClickedOnLink": { - "type": "String", - "placeholders": {} - }, - "pleaseClickOnLink": "மின்னஞ்சலில் உள்ள இணைப்பைக் சொடுக்கு செய்து தொடரவும்.", - "@pleaseClickOnLink": { - "type": "String", - "placeholders": {} - }, - "changeTheme": "உங்கள் பாணியை மாற்றவும்", - "@changeTheme": { - "type": "String", - "placeholders": {} - }, - "fontSize": "எழுத்துரு அளவு", - "@fontSize": { - "type": "String", - "placeholders": {} - }, - "cantOpenUri": "யூரி {uri} வேலை ஐ திறக்க முடியாது", - "@cantOpenUri": { - "type": "String", - "placeholders": { - "uri": { - "type": "String" - } - } - }, - "repeatPassword": "கடவுச்சொல்லை மீண்டும் செய்யவும்", - "@repeatPassword": {}, - "youRejectedTheInvitation": "நீங்கள் அழைப்பை நிராகரித்தீர்கள்", - "@youRejectedTheInvitation": {}, - "confirmMatrixId": "உங்கள் கணக்கை நீக்க உங்கள் மேட்ரிக்ச் ஐடியை உறுதிப்படுத்தவும்.", - "@confirmMatrixId": {}, - "supposedMxid": "இது {mxid} be ஆக இருக்க வேண்டும்", - "@supposedMxid": { - "type": "String", - "placeholders": { - "mxid": { - "type": "String" - } - } - }, - "commandHint_googly": "சில கூகிள் கண்களை அனுப்பவும்", - "@commandHint_googly": {}, - "commandHint_cuddle": "ஒரு கசப்பு அனுப்பவும்", - "@commandHint_cuddle": {}, - "startFirstChat": "உங்கள் முதல் அரட்டையைத் தொடங்கவும்", - "@startFirstChat": {}, - "importEmojis": "ஈமோசிகளை இறக்குமதி செய்யுங்கள்", - "@importEmojis": {}, - "exportEmotePack": "எமோட் பேக் .zip என ஏற்றுமதி செய்யுங்கள்", - "@exportEmotePack": {}, - "replace": "மாற்றவும்", - "@replace": {}, - "tryAgain": "மீண்டும் முயற்சிக்கவும்", - "@tryAgain": {}, - "pushNotificationsNotAvailable": "புச் அறிவிப்புகள் கிடைக்கவில்லை", - "@pushNotificationsNotAvailable": {}, - "blockUsername": "பயனர்பெயரை புறக்கணிக்கவும்", - "@blockUsername": {}, - "start": "தொடங்கு", - "@start": {}, - "chatBackup": "அரட்டை காப்புப்பிரதி", - "@chatBackup": { - "type": "String", - "placeholders": {} - }, - "send": "அனுப்பு", - "@send": { - "type": "String", - "placeholders": {} - }, - "theyDontMatch": "அவர்கள் பொருந்தவில்லை", - "@theyDontMatch": { - "type": "String", - "placeholders": {} - }, - "sendMessages": "செய்திகளை அனுப்பவும்", - "@sendMessages": { - "type": "String", - "placeholders": {} - }, - "fluffychat": "பஞ்சுபோன்ற", - "@fluffychat": { - "type": "String", - "placeholders": {} - }, - "downloadFile": "கோப்பைப் பதிவிறக்கவும்", - "@downloadFile": { - "type": "String", - "placeholders": {} - }, - "createNewSpace": "புதிய இடம்", - "@createNewSpace": { - "type": "String", - "placeholders": {} - }, - "synchronizingPleaseWait": "ஒத்திசைத்தல்… தயவுசெய்து காத்திருங்கள்.", - "@synchronizingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "unknownEncryptionAlgorithm": "அறியப்படாத குறியாக்க வழிமுறை", - "@unknownEncryptionAlgorithm": { - "type": "String", - "placeholders": {} - }, - "unverified": "சரிபார்க்கப்படாதது", - "@unverified": {}, - "unmuteChat": "மாறுதல் அரட்டை", - "@unmuteChat": { - "type": "String", - "placeholders": {} - }, - "unreadChats": "{unreadCount, plural, =1{1 unread chat} other{{unreadCount} unread chats}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, - "verifyTitle": "பிற கணக்கை சரிபார்க்கிறது", - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "videoCall": "வீடியோ அழைப்பு", - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "visibleForAllParticipants": "பங்கேற்பாளர்கள் அனைவருக்கும் தெரியும்", - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "voiceMessage": "குரல் செய்தி", - "@voiceMessage": { - "type": "String", - "placeholders": {} - }, - "reopenChat": "அரட்டையை மீண்டும் திறக்கவும்", - "@reopenChat": {}, - "formattedMessages": "வடிவமைக்கப்பட்ட செய்திகள்", - "@formattedMessages": {}, - "darkTheme": "இருண்ட", - "@darkTheme": { - "type": "String", - "placeholders": {} - }, - "guestsAreForbidden": "விருந்தினர்கள் தடைசெய்யப்பட்டுள்ளனர்", - "@guestsAreForbidden": { - "type": "String", - "placeholders": {} - }, - "guestsCanJoin": "விருந்தினர்கள் சேரலாம்", - "@guestsCanJoin": { - "type": "String", - "placeholders": {} - }, - "widgetUrlError": "இது சரியான முகவரி அல்ல.", - "@widgetUrlError": {}, - "commandHint_invite": "கொடுக்கப்பட்ட பயனரை இந்த அறைக்கு அழைக்கவும்", - "@commandHint_invite": { - "type": "String", - "description": "Usage hint for the command /invite" - }, - "commandHint_op": "கொடுக்கப்பட்ட பயனரின் ஆற்றல் மட்டத்தை அமைக்கவும் (இயல்புநிலை: 50)", - "@commandHint_op": { - "type": "String", - "description": "Usage hint for the command /op" - }, - "commandHint_plain": "வடிவமைக்கப்படாத உரையை அனுப்பவும்", - "@commandHint_plain": { - "type": "String", - "description": "Usage hint for the command /plain" - }, - "commandMissing": "{command} என்பது கட்டளை அல்ல.", - "@commandMissing": { - "type": "String", - "placeholders": { - "command": { - "type": "String" - } + "@@last_modified": "2021-08-14 12:41:09.826673", + "acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது", + "@acceptedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } }, - "description": "State that {command} is not a valid /command." - }, - "inviteForMe": "எனக்கு அழைக்கவும்", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, - "moderator": "மதிப்பீட்டாளர்", - "@moderator": { - "type": "String", - "placeholders": {} - }, - "shareLocation": "இருப்பிடத்தைப் பகிரவும்", - "@shareLocation": { - "type": "String", - "placeholders": {} - }, - "addEmail": "மின்னஞ்சல் சேர்க்கவும்", - "@addEmail": { - "type": "String", - "placeholders": {} - }, - "all": "அனைத்தும்", - "@all": { - "type": "String", - "placeholders": {} - }, - "lightTheme": "ஒளி", - "@lightTheme": { - "type": "String", - "placeholders": {} - }, - "allChats": "அனைத்து அரட்டைகளும்", - "@allChats": { - "type": "String", - "placeholders": {} - }, - "sendOnEnter": "Enter ஐ அனுப்பவும்", - "@sendOnEnter": {}, - "pleaseEnterRecoveryKey": "உங்கள் மீட்பு விசையை உள்ளிடவும்:", - "@pleaseEnterRecoveryKey": {}, - "dehydrate": "ஏற்றுமதி அமர்வு மற்றும் சாதனத்தை துடைக்கவும்", - "@dehydrate": {}, - "ok": "சரி", - "@ok": { - "type": "String", - "placeholders": {} - }, - "configureChat": "அரட்டையை உள்ளமைக்கவும்", - "@configureChat": { - "type": "String", - "placeholders": {} - }, - "deviceId": "சாதன ஐடி", - "@deviceId": { - "type": "String", - "placeholders": {} - }, - "isTyping": "தட்டச்சு செய்கிறது…", - "@isTyping": { - "type": "String", - "placeholders": {} - }, - "joinedTheChat": "👋 {username} அரட்டையில் சேர்ந்தார்", - "@joinedTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "noConnectionToTheServer": "சேவையகத்துடன் எந்த தொடர்பும் இல்லை", - "@noConnectionToTheServer": { - "type": "String", - "placeholders": {} - }, - "noEmotesFound": "உணர்ச்சிகள் எதுவும் காணப்படவில்லை. 😕", - "@noEmotesFound": { - "type": "String", - "placeholders": {} - }, - "notifications": "அறிவிப்புகள்", - "@notifications": { - "type": "String", - "placeholders": {} - }, - "oopsPushError": "அச்சச்சோ! துரதிர்ச்டவசமாக, புச் அறிவிப்புகளை அமைக்கும் போது பிழை ஏற்பட்டது.", - "@oopsPushError": { - "type": "String", - "placeholders": {} - }, - "oopsSomethingWentWrong": "அச்சச்சோ, ஏதோ தவறு நடந்தது…", - "@oopsSomethingWentWrong": { - "type": "String", - "placeholders": {} - }, - "bundleName": "மூட்டை பெயர்", - "@bundleName": {}, - "enableMultiAccounts": "(பீட்டா) இந்த சாதனத்தில் பல கணக்குகளை இயக்கவும்", - "@enableMultiAccounts": {}, - "remove": "அகற்று", - "@remove": { - "type": "String", - "placeholders": {} - }, - "recoveryKeyLost": "மீட்பு விசை இழந்ததா?", - "@recoveryKeyLost": {}, - "sendAMessage": "ஒரு செய்தியை அனுப்பவும்", - "@sendAMessage": { - "type": "String", - "placeholders": {} - }, - "spaceIsPublic": "இடம் பொது", - "@spaceIsPublic": { - "type": "String", - "placeholders": {} - }, - "transferFromAnotherDevice": "மற்றொரு சாதனத்திலிருந்து மாற்றவும்", - "@transferFromAnotherDevice": { - "type": "String", - "placeholders": {} - }, - "visibleForEveryone": "அனைவருக்கும் தெரியும்", - "@visibleForEveryone": { - "type": "String", - "placeholders": {} - }, - "weSentYouAnEmail": "நாங்கள் உங்களுக்கு ஒரு மின்னஞ்சல் அனுப்பினோம்", - "@weSentYouAnEmail": { - "type": "String", - "placeholders": {} - }, - "enterRoom": "அறையை உள்ளிடவும்", - "@enterRoom": {}, - "report": "அறிக்கை", - "@report": {}, - "verifyOtherDevice": "Sevice பிற சாதனத்தை சரிபார்க்கவும்", - "@verifyOtherDevice": {}, - "startedACall": "{senderName} அழைப்பைத் தொடங்கினார்", - "@startedACall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "toggleFavorite": "பிடித்ததை மாற்றவும்", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "userSentUnknownEvent": "{username} ஒரு {type} நிகழ்வை அனுப்பியது", - "@userSentUnknownEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "type": { - "type": "String" - } - } - }, - "verified": "சரிபார்க்கப்பட்டது", - "@verified": { - "type": "String", - "placeholders": {} - }, - "verifySuccess": "நீங்கள் வெற்றிகரமாக சரிபார்த்தீர்கள்!", - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerNumbers": "பங்குதாரர் எண்களை ஏற்றுக்கொள்வதற்காக காத்திருக்கிறார்…", - "@waitingPartnerNumbers": { - "type": "String", - "placeholders": {} - }, - "warning": "எச்சரிக்கை!", - "@warning": { - "type": "String", - "placeholders": {} - }, - "pinMessage": "அறைக்கு முள்", - "@pinMessage": {}, - "addWidget": "விட்செட்டைச் சேர்க்கவும்", - "@addWidget": {}, - "widgetEtherpad": "உரை குறிப்பு", - "@widgetEtherpad": {}, - "widgetCustom": "தனிப்பயன்", - "@widgetCustom": {}, - "unlockOldMessages": "பழைய செய்திகளைத் திறக்கவும்", - "@unlockOldMessages": {}, - "appearOnTop": "மேலே தோன்றும்", - "@appearOnTop": {}, - "serverLimitReached": "சேவையக வரம்பு அடைந்தது! {seconds} விநாடிகள் காத்திருக்கிறது ...", - "@serverLimitReached": { - "type": "integer", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "acceptedKeyVerification": "{sender} ஏற்றுக்கொள்ளப்பட்ட விசை சரிபார்ப்பு", - "@acceptedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "copyToClipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கவும்", - "@copyToClipboard": { - "type": "String", - "placeholders": {} - }, - "createGroup": "குழுவை உருவாக்கவும்", - "@createGroup": {}, - "editBundlesForAccount": "இந்த கணக்கிற்கான மூட்டைகளைத் திருத்தவும்", - "@editBundlesForAccount": {}, - "seenByUser": "{username} ஆல் பார்த்தது", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "unpin": "மூள்நீக்கு", - "@unpin": { - "type": "String", - "placeholders": {} - }, - "emojis": "ஈமோசிகள்", - "@emojis": {}, - "indexedDbErrorTitle": "தனியார் பயன்முறை சிக்கல்கள்", - "@indexedDbErrorTitle": {}, - "jumpToLastReadMessage": "கடைசி வாசிப்பு செய்திக்கு செல்லவும்", - "@jumpToLastReadMessage": {}, - "commandHint_markasgroup": "குழுவாக குறி", - "@commandHint_markasgroup": {}, - "commandHint_html": "உஉகுமொ வடிவமைக்கப்பட்ட உரையை அனுப்பவும்", - "@commandHint_html": { - "type": "String", - "description": "Usage hint for the command /html" - }, - "commandHint_kick": "இந்த அறையிலிருந்து கொடுக்கப்பட்ட பயனரை அகற்றவும்", - "@commandHint_kick": { - "type": "String", - "description": "Usage hint for the command /kick" - }, - "deleteMessage": "செய்தியை நீக்கு", - "@deleteMessage": { - "type": "String", - "placeholders": {} - }, - "messageInfo": "செய்தி தகவல்", - "@messageInfo": {}, - "sentAFile": "📁 {username} கோப்பை அனுப்பியுள்ளார்", - "@sentAFile": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "videoWithSize": "வீடியோ ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "readUpToHere": "இங்கே படிக்கவும்", - "@readUpToHere": {}, - "chatDescriptionHasBeenChanged": "அரட்டை விளக்கம் மாற்றப்பட்டது", - "@chatDescriptionHasBeenChanged": {}, - "reportMessage": "செய்தி அறிக்கை", - "@reportMessage": { - "type": "String", - "placeholders": {} - }, - "kickFromChat": "அரட்டையிலிருந்து கிக்", - "@kickFromChat": { - "type": "String", - "placeholders": {} - }, - "widgetVideo": "ஒளிதோற்றம்", - "@widgetVideo": {}, - "redactedAnEvent": "{username} ஒரு நிகழ்வை மறுவடிவமைத்தது", - "@redactedAnEvent": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "opacity": "ஒளிபுகாநிலை:", - "@opacity": {}, - "blur": "மங்கலானது:", - "@blur": {}, - "setWallpaper": "வால்பேப்பரை அமைக்கவும்", - "@setWallpaper": {}, - "statusExampleMessage": "இன்று நீங்கள் எப்படி இருக்கிறீர்கள்?", - "@statusExampleMessage": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "மார்க் படிக்க/படிக்கவில்லை", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, - "tooManyRequestsWarning": "பல கோரிக்கைகள். தயவுசெய்து பின்னர் மீண்டும் முயற்சிக்கவும்!", - "@tooManyRequestsWarning": { - "type": "String", - "placeholders": {} - }, - "unblockDevice": "சாதனத்தைத் தடைசெய்க", - "@unblockDevice": { - "type": "String", - "placeholders": {} - }, - "unknownDevice": "தெரியாத சாதனம்", - "@unknownDevice": { - "type": "String", - "placeholders": {} - }, - "addToSpaceDescription": "இந்த அரட்டையைச் சேர்க்க ஒரு இடத்தைத் தேர்ந்தெடுக்கவும்.", - "@addToSpaceDescription": {}, - "errorAddingWidget": "விட்செட்டைச் சேர்ப்பதில் பிழை.", - "@errorAddingWidget": {}, - "youInvitedToBy": "In இணைப்பு வழியாக நீங்கள் அழைக்கப்பட்டுள்ளீர்கள்:\n {alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "storeSecurlyOnThisDevice": "இந்த சாதனத்தில் பாதுகாப்பாக சேமிக்கவும்", - "@storeSecurlyOnThisDevice": {}, - "screenSharingTitle": "திரை பகிர்வு", - "@screenSharingTitle": {}, - "appearOnTopDetails": "பயன்பாடு மேலே தோன்ற அனுமதிக்கிறது (நீங்கள் ஏற்கனவே ஒரு அழைப்பு கணக்காக பஞ்சுபோன்ற அமைப்பைக் கொண்டிருந்தால் தேவையில்லை)", - "@appearOnTopDetails": {}, - "newGroup": "புதிய குழு", - "@newGroup": {}, - "noOtherDevicesFound": "வேறு சாதனங்கள் எதுவும் கிடைக்கவில்லை", - "@noOtherDevicesFound": {}, - "sendRoomNotifications": "ஒரு @ROOM அறிவிப்புகளை அனுப்பவும்", - "@sendRoomNotifications": {}, - "generatingVideoThumbnail": "வீடியோ சிறு உருவத்தை உருவாக்குதல் ...", - "@generatingVideoThumbnail": {}, - "reply": "பதில்", - "@reply": { - "type": "String", - "placeholders": {} - }, - "askSSSSSign": "மற்ற நபரில் கையெழுத்திட, தயவுசெய்து உங்கள் பாதுகாப்பான கடை பாச்ஃபிரேச் அல்லது மீட்பு விசையை உள்ளிடவும்.", - "@askSSSSSign": { - "type": "String", - "placeholders": {} - }, - "areGuestsAllowedToJoin": "விருந்தினர் பயனர்கள் சேர அனுமதிக்கப்படுகிறார்களா", - "@areGuestsAllowedToJoin": { - "type": "String", - "placeholders": {} - }, - "areYouSureYouWantToLogout": "நீங்கள் நிச்சயமாக வெளியேற விரும்புகிறீர்களா?", - "@areYouSureYouWantToLogout": { - "type": "String", - "placeholders": {} - }, - "aboutHomeserver": "{homeserver} பற்றி", - "@aboutHomeserver": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "swipeRightToLeftToReply": "பதிலளிக்க வலமிருந்து இடமாக ச்வைப் செய்யவும்", - "@swipeRightToLeftToReply": {}, - "unread": "படிக்காதது", - "@unread": {}, - "changedTheChatDescriptionTo": "{username} பயனர்பெயர் the அரட்டை விளக்கத்தை மாற்றியது: '{description}'", - "@changedTheChatDescriptionTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "description": { - "type": "String" - } - } - }, - "dateAndTimeOfDay": "{date}, {timeOfDay}", - "@dateAndTimeOfDay": { - "type": "String", - "placeholders": { - "date": { - "type": "String" - }, - "timeOfDay": { - "type": "String" - } - } - }, - "deleteAccount": "கணக்கை நீக்கு", - "@deleteAccount": { - "type": "String", - "placeholders": {} - }, - "deviceKeys": "சாதன விசைகள்:", - "@deviceKeys": {}, - "noUsersFoundWithQuery": "துரதிர்ச்டவசமாக \"{query}\" உடன் எந்த பயனரையும் காண முடியவில்லை. நீங்கள் ஒரு எழுத்துப்பிழை செய்தீர்களா என்பதை சரிபார்க்கவும்.", - "@noUsersFoundWithQuery": { - "type": "String", - "placeholders": { - "query": { - "type": "String" - } - } - }, - "jump": "தாவு", - "@jump": {}, - "yourGlobalUserIdIs": "உங்கள் உலகளாவிய பயனர் ஐடி: ", - "@yourGlobalUserIdIs": {}, - "publicSpaces": "பொது இடங்கள்", - "@publicSpaces": {}, - "discover": "கண்டுபிடி", - "@discover": {}, - "commandHint_unignore": "கொடுக்கப்பட்ட மேட்ரிக்ச் ஐடியை இணைக்கவும்", - "@commandHint_unignore": {}, - "prepareSendingAttachment": "அனுப்பும் இணைப்பைத் தயாரிக்கவும் ...", - "@prepareSendingAttachment": {}, - "sendingAttachment": "இணைப்பை அனுப்புகிறது ...", - "@sendingAttachment": {}, - "continueText": "தொடரவும்", - "@continueText": {}, - "welcomeText": "ஏய் ஏய் 👋 இது பஞ்சுபோன்றது. Https://matrix.org உடன் இணக்கமான எந்த ஓம்சர்வரில் நீங்கள் உள்நுழையலாம். பின்னர் யாருடனும் அரட்டையடிக்கவும். இது ஒரு பெரிய பரவலாக்கப்பட்ட செய்தியிடல் நெட்வொர்க்!", - "@welcomeText": {}, - "name": "பெயர்", - "@name": {}, - "username": "பயனர்பெயர்", - "@username": { - "type": "String", - "placeholders": {} - }, - "whoCanPerformWhichAction": "எந்த செயலைச் செய்ய முடியும்", - "@whoCanPerformWhichAction": { - "type": "String", - "placeholders": {} - }, - "whoIsAllowedToJoinThisGroup": "இந்த குழுவில் சேர யார் அனுமதிக்கப்படுகிறார்கள்", - "@whoIsAllowedToJoinThisGroup": { - "type": "String", - "placeholders": {} - }, - "youAreNoLongerParticipatingInThisChat": "இந்த அரட்டையில் நீங்கள் இனி பங்கேற்கவில்லை", - "@youAreNoLongerParticipatingInThisChat": { - "type": "String", - "placeholders": {} - }, - "yourPublicKey": "உங்கள் பொது விசை", - "@yourPublicKey": { - "type": "String", - "placeholders": {} - }, - "time": "நேரம்", - "@time": {}, - "publish": "வெளியிடுங்கள்", - "@publish": {}, - "openChat": "திறந்த அரட்டை", - "@openChat": {}, - "markAsRead": "படித்தபடி குறி", - "@markAsRead": {}, - "reportUser": "பயனர் புகாரளிக்கவும்", - "@reportUser": {}, - "dismiss": "தள்ளுபடி", - "@dismiss": {}, - "reactedWith": "{sender} {reaction} உடன் பதிலளித்தார்", - "@reactedWith": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "reaction": { - "type": "String" - } - } - }, - "placeCall": "அழைப்பு இடு", - "@placeCall": {}, - "videoCallsBetaWarning": "வீடியோ அழைப்புகள் தற்போது பீட்டாவில் உள்ளன என்பதை நினைவில் கொள்க. அவர்கள் எதிர்பார்த்தபடி வேலை செய்யக்கூடாது அல்லது எல்லா தளங்களிலும் வேலை செய்யக்கூடாது.", - "@videoCallsBetaWarning": {}, - "experimentalVideoCalls": "சோதனை வீடியோ அழைப்புகள்", - "@experimentalVideoCalls": {}, - "emailOrUsername": "மின்னஞ்சல் அல்லது பயனர்பெயர்", - "@emailOrUsername": {}, - "previousAccount": "முந்தைய கணக்கு", - "@previousAccount": {}, - "noOneCanJoin": "யாரும் சேர முடியாது", - "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} அரட்டையில் சேர விரும்புகிறார்.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "newSpace": "புதிய இடம்", - "@newSpace": {}, - "enterSpace": "இடத்தை உள்ளிடவும்", - "@enterSpace": {}, - "wasDirectChatDisplayName": "வெற்று அரட்டை ({oldDisplayName})", - "@wasDirectChatDisplayName": { - "type": "String", - "placeholders": { - "oldDisplayName": { - "type": "String" - } - } - }, - "openLinkInBrowser": "உலாவியில் திறந்த இணைப்பை திறக்கவும்", - "@openLinkInBrowser": {}, - "reportErrorDescription": "😭 ஓ இல்லை. ஏதோ தவறு நடந்தது. நீங்கள் விரும்பினால், இந்த பிழையை டெவலப்பர்களிடம் புகாரளிக்கலாம்.", - "@reportErrorDescription": {}, - "setTheme": "கருப்பொருள் அமைக்கவும்:", - "@setTheme": {}, - "invite": "அழைக்கவும்", - "@invite": {}, - "wrongPinEntered": "தவறான முள் நுழைந்தது! {seconds} விநாடிகளில் மீண்டும் முயற்சிக்கவும் ...", - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "pleaseEnterANumber": "தயவுசெய்து 0 ஐ விட அதிகமான எண்ணை உள்ளிடவும்", - "@pleaseEnterANumber": {}, - "kickUserDescription": "பயனர் அரட்டையிலிருந்து வெளியேற்றப்படுகிறார், ஆனால் தடை செய்யப்படவில்லை. பொது அரட்டைகளில், பயனர் எந்த நேரத்திலும் மீண்டும் சேரலாம்.", - "@kickUserDescription": {}, - "learnMore": "மேலும் அறிக", - "@learnMore": {}, - "chatCanBeDiscoveredViaSearchOnServer": "{server}", - "@chatCanBeDiscoveredViaSearchOnServer": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "knockRestricted": "நாக் தடை", - "@knockRestricted": {}, - "bannedUser": "{username} தடைசெய்யப்பட்ட {targetName}", - "@bannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "blockDevice": "தொகுதி சாதனம்", - "@blockDevice": { - "type": "String", - "placeholders": {} - }, - "blocked": "தடுக்கப்பட்டது", - "@blocked": { - "type": "String", - "placeholders": {} - }, - "changeDeviceName": "சாதனத்தின் பெயரை மாற்றவும்", - "@changeDeviceName": { - "type": "String", - "placeholders": {} - }, - "changedTheDisplaynameTo": "{username} அவற்றின் காட்சி பெயர்: '{displayname}'", - "@changedTheDisplaynameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "displayname": { - "type": "String" - } - } - }, - "changedTheGuestAccessRules": "{username} விருந்தினர் அணுகல் விதிகளை மாற்றியது", - "@changedTheGuestAccessRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheProfileAvatar": "{username} அவர்களின் அவதாரத்தை மாற்றியது", - "@changedTheProfileAvatar": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheRoomAliases": "{username} அறை மாற்றுப்பெயர்களை மாற்றியது", - "@changedTheRoomAliases": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changeTheNameOfTheGroup": "குழுவின் பெயரை மாற்றவும்", - "@changeTheNameOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "chats": "அரட்டைகள்", - "@chats": { - "type": "String", - "placeholders": {} - }, - "clearArchive": "தெளிவான காப்பகம்", - "@clearArchive": {}, - "close": "மூடு", - "@close": { - "type": "String", - "placeholders": {} - }, - "commandHint_create": "வெற்று குழு அரட்டையை உருவாக்கவும்\n குறியாக்கத்தை முடக்க-இல்லை-குறியாக்கத்தைப் பயன்படுத்தவும்", - "@commandHint_create": { - "type": "String", - "description": "Usage hint for the command /create" - }, - "compareNumbersMatch": "எண்களை ஒப்பிடுக", - "@compareNumbersMatch": { - "type": "String", - "placeholders": {} - }, - "connect": "இணை", - "@connect": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "பயனர்பெயர் உள்ளது", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "copiedToClipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது", - "@copiedToClipboard": { - "type": "String", - "placeholders": {} - }, - "copy": "நகலெடு", - "@copy": { - "type": "String", - "placeholders": {} - }, - "couldNotDecryptMessage": "செய்தியை மறைகுறியாக்க முடியவில்லை: {error}", - "@couldNotDecryptMessage": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "create": "உருவாக்கு", - "@create": { - "type": "String", - "placeholders": {} - }, - "chatPermissions": "அரட்டை அனுமதிகள்", - "@chatPermissions": {}, - "editRoomAliases": "அறை மாற்றுப்பெயர்களைத் திருத்து", - "@editRoomAliases": { - "type": "String", - "placeholders": {} - }, - "editRoomAvatar": "அறை அவதார் திருத்து", - "@editRoomAvatar": { - "type": "String", - "placeholders": {} - }, - "forward": "முன்னோக்கி", - "@forward": { - "type": "String", - "placeholders": {} - }, - "fromJoining": "சேருவதிலிருந்து", - "@fromJoining": { - "type": "String", - "placeholders": {} - }, - "groupWith": "{displayname} உடன் குழு", - "@groupWith": { - "type": "String", - "placeholders": { - "displayname": { - "type": "String" - } - } - }, - "hideRedactedMessages": "சரிசெய்யப்பட்ட செய்திகளை மறைக்கவும்", - "@hideRedactedMessages": {}, - "hideRedactedMessagesBody": "யாராவது ஒரு செய்தியை மாற்றியமைத்தால், இந்த செய்தி இனி அரட்டையில் காணப்படாது.", - "@hideRedactedMessagesBody": {}, - "howOffensiveIsThisContent": "இந்த உள்ளடக்கம் எவ்வளவு ஆபத்தானது?", - "@howOffensiveIsThisContent": { - "type": "String", - "placeholders": {} - }, - "inoffensive": "செயலற்றது", - "@inoffensive": { - "type": "String", - "placeholders": {} - }, - "inviteContact": "தொடர்பை அழைக்கவும்", - "@inviteContact": { - "type": "String", - "placeholders": {} - }, - "kicked": "👞 {username} {targetName} ஐ உதைத்தார்", - "@kicked": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "lastActiveAgo": "கடைசியாக செயலில்: {localizedTimeShort}", - "@lastActiveAgo": { - "type": "String", - "placeholders": { - "localizedTimeShort": { - "type": "String" - } - } - }, - "leftTheChat": "அரட்டையை விட்டு வெளியேறினார்", - "@leftTheChat": { - "type": "String", - "placeholders": {} - }, - "loadCountMoreParticipants": "ஏற்றவும் {count} மேலும் பங்கேற்பாளர்கள்", - "@loadCountMoreParticipants": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "dehydrateWarning": "இந்த செயலை செயல்தவிர்க்க முடியாது. காப்புப்பிரதி கோப்பை பாதுகாப்பாக சேமித்து வைக்கவும்.", - "@dehydrateWarning": {}, - "dehydrateTor": "டோர் பயனர்கள்: ஏற்றுமதி அமர்வு", - "@dehydrateTor": {}, - "hydrateTor": "டோர் பயனர்கள்: இறக்குமதி அமர்வு ஏற்றுமதி", - "@hydrateTor": {}, - "loadMore": "மேலும் ஏற்றவும்…", - "@loadMore": { - "type": "String", - "placeholders": {} - }, - "logout": "வெளியேற்றம்", - "@logout": { - "type": "String", - "placeholders": {} - }, - "memberChanges": "உறுப்பினர் மாற்றங்கள்", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "messagesStyle": "செய்திகள்:", - "@messagesStyle": {}, - "needPantalaimonWarning": "இப்போதைக்கு இறுதி முதல் இறுதி குறியாக்கத்தைப் பயன்படுத்த உங்களுக்கு பாண்டலாயமன் தேவை என்பதை நினைவில் கொள்க.", - "@needPantalaimonWarning": { - "type": "String", - "placeholders": {} - }, - "newMessageInFluffyChat": "Fuf பஞ்சுபோன்ற புதிய செய்தி", - "@newMessageInFluffyChat": { - "type": "String", - "placeholders": {} - }, - "noEncryptionForPublicRooms": "அறை இனி பகிரங்கமாக அணுக முடியாதவுடன் மட்டுமே நீங்கள் குறியாக்கத்தை செயல்படுத்த முடியும்.", - "@noEncryptionForPublicRooms": { - "type": "String", - "placeholders": {} - }, - "noMatrixServer": "{server1} என்பது மேட்ரிக்ஸ் சர்வர் இல்லை, அதற்கு பதிலாக {server2} ஐ பயன்படுத்தவா?", - "@noMatrixServer": { - "type": "String", - "placeholders": { - "server1": { - "type": "String" - }, - "server2": { - "type": "String" - } - } - }, - "noPermission": "இசைவு இல்லை", - "@noPermission": { - "type": "String", - "placeholders": {} - }, - "noRoomsFound": "அறைகள் எதுவும் கிடைக்கவில்லை…", - "@noRoomsFound": { - "type": "String", - "placeholders": {} - }, - "notificationsEnabledForThisAccount": "இந்த கணக்கிற்கு அறிவிப்புகள் இயக்கப்பட்டன", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, - "numUsersTyping": "{count} பயனர்கள் தட்டச்சு செய்கிறார்கள்…", - "@numUsersTyping": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "offensive": "தாக்குதல்", - "@offensive": { - "type": "String", - "placeholders": {} - }, - "openCamera": "திறந்த கேமரா", - "@openCamera": { - "type": "String", - "placeholders": {} - }, - "openVideoCamera": "வீடியோவுக்கு கேமரா திறக்கவும்", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "addAccount": "கணக்கைச் சேர்க்கவும்", - "@addAccount": {}, - "openInMaps": "வரைபடங்களில் திறந்திருக்கும்", - "@openInMaps": { - "type": "String", - "placeholders": {} - }, - "link": "இணைப்பு", - "@link": {}, - "serverRequiresEmail": "இந்த சேவையகம் பதிவுக்கு உங்கள் மின்னஞ்சல் முகவரியை சரிபார்க்க வேண்டும்.", - "@serverRequiresEmail": {}, - "passwordForgotten": "கடவுச்சொல் மறந்துவிட்டது", - "@passwordForgotten": { - "type": "String", - "placeholders": {} - }, - "passwordHasBeenChanged": "கடவுச்சொல் மாற்றப்பட்டுள்ளது", - "@passwordHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "pleaseChooseAPasscode": "பாச் குறியீட்டைத் தேர்வுசெய்க", - "@pleaseChooseAPasscode": { - "type": "String", - "placeholders": {} - }, - "publicRooms": "பொது அறைகள்", - "@publicRooms": { - "type": "String", - "placeholders": {} - }, - "removeAllOtherDevices": "மற்ற எல்லா சாதனங்களையும் அகற்றவும்", - "@removeAllOtherDevices": { - "type": "String", - "placeholders": {} - }, - "roomHasBeenUpgraded": "அறை மேம்படுத்தப்பட்டுள்ளது", - "@roomHasBeenUpgraded": { - "type": "String", - "placeholders": {} - }, - "roomVersion": "அறை பதிப்பு", - "@roomVersion": { - "type": "String", - "placeholders": {} - }, - "saveFile": "கோப்பை சேமி", - "@saveFile": { - "type": "String", - "placeholders": {} - }, - "sentAnAudio": "🎤 {username} ஆடியோவை அனுப்பியுள்ளார்", - "@sentAnAudio": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAPicture": "🖼️ {username} படத்தை அனுப்பியுள்ளார்", - "@sentAPicture": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentAVideo": "🎥 {username} ஒரு வீடியோவை அனுப்பியுள்ளார்", - "@sentAVideo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "setPermissionsLevel": "இசைவு அளவை அமைக்கவும்", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, - "settings": "அமைப்புகள்", - "@settings": { - "type": "String", - "placeholders": {} - }, - "sharedTheLocation": "{username} அவற்றின் இருப்பிடத்தைப் பகிர்ந்து கொண்டது", - "@sharedTheLocation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "showPassword": "கடவுச்சொல்லைக் காட்டு", - "@showPassword": { - "type": "String", - "placeholders": {} - }, - "submit": "சமர்ப்பிக்கவும்", - "@submit": { - "type": "String", - "placeholders": {} - }, - "tryToSendAgain": "மீண்டும் அனுப்ப முயற்சிக்கவும்", - "@tryToSendAgain": { - "type": "String", - "placeholders": {} - }, - "sendTypingNotifications": "தட்டச்சு அறிவிப்புகளை அனுப்பவும்", - "@sendTypingNotifications": {}, - "enterAnEmailAddress": "மின்னஞ்சல் முகவரியை உள்ளிடவும்", - "@enterAnEmailAddress": { - "type": "String", - "placeholders": {} - }, - "blockListDescription": "உங்களை தொந்தரவு செய்யும் பயனர்களைத் தடுக்கலாம். உங்கள் தனிப்பட்ட தொகுதி பட்டியலில் பயனர்களிடமிருந்து எந்த செய்திகளையும் அல்லது அறை அழைப்புகளையும் நீங்கள் பெற முடியாது.", - "@blockListDescription": {}, - "incorrectPassphraseOrKey": "தவறான கடவுச்சொல் அல்லது மீட்பு விசை", - "@incorrectPassphraseOrKey": { - "type": "String", - "placeholders": {} - }, - "loadingPleaseWait": "ஏற்றுகிறது… தயவுசெய்து காத்திருங்கள்.", - "@loadingPleaseWait": { - "type": "String", - "placeholders": {} - }, - "no": "இல்லை", - "@no": { - "type": "String", - "placeholders": {} - }, - "people": "மக்கள்", - "@people": { - "type": "String", - "placeholders": {} - }, - "youHaveBeenBannedFromThisChat": "இந்த அரட்டையிலிருந்து உங்களுக்கு தடை விதிக்கப்பட்டுள்ளது", - "@youHaveBeenBannedFromThisChat": { - "type": "String", - "placeholders": {} - }, - "messageType": "செய்தி வகை", - "@messageType": {}, - "databaseMigrationTitle": "தரவுத்தளம் உகந்ததாக உள்ளது", - "@databaseMigrationTitle": {}, - "usersMustKnock": "பயனர்கள் தட்ட வேண்டும்", - "@usersMustKnock": {}, - "allSpaces": "அனைத்து இடங்களும்", - "@allSpaces": {}, - "importFromZipFile": ".Zip கோப்பிலிருந்து இறக்குமதி செய்யுங்கள்", - "@importFromZipFile": {}, - "activatedEndToEndEncryption": "{username} இறுதி குறியாக்கத்திற்கு செயல்படுத்தப்பட்ட முடிவு", - "@activatedEndToEndEncryption": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "addChatDescription": "அரட்டை விளக்கத்தைச் சேர்க்கவும் ...", - "@addChatDescription": {}, - "addToSpace": "விண்வெளியில் சேர்க்கவும்", - "@addToSpace": {}, - "commandHint_hug": "கட்டிப்பிடிக்கவும்", - "@commandHint_hug": {}, - "cuddleContent": "{senderName} பெயர் you உங்களை கசக்குகிறது", - "@cuddleContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "hugContent": "{senderName} உங்களை அணைத்துக்கொள்கிறது", - "@hugContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "appLock": "பயன்பாட்டு பூட்டு", - "@appLock": { - "type": "String", - "placeholders": {} - }, - "appLockDescription": "முள் குறியீட்டைக் கொண்டு பயன்படுத்தாதபோது பயன்பாட்டைப் பூட்டவும்", - "@appLockDescription": {}, - "googlyEyesContent": "{senderName} உங்களுக்கு கூகிள் கண்களை அனுப்புகிறது", - "@googlyEyesContent": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "areYouSure": "நீங்கள் உறுதியாக இருக்கிறீர்களா?", - "@areYouSure": { - "type": "String", - "placeholders": {} - }, - "askVerificationRequest": "{username}பயனர்பெயர் இருந்து இலிருந்து இந்த சரிபார்ப்பு கோரிக்கையை ஏற்றுக்கொள்ளவா?", - "@askVerificationRequest": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "autoplayImages": "அனிமேசன் செய்யப்பட்ட ச்டிக்கர்கள் மற்றும் உணர்ச்சிகளை தானாக இயக்கவும்", - "@autoplayImages": { - "type": "String", - "placeholder": {} - }, - "badServerLoginTypesException": "உள்நாட்டு வகைகளை ஓம்சர்வர் ஆதரிக்கிறது:\n {serverVersions}\n ஆனால் இந்த பயன்பாடு மட்டுமே ஆதரிக்கிறது:\n {supportedVersions}", - "@badServerLoginTypesException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "badServerVersionsException": "ஓம்சர்வர் ச்பெக் பதிப்புகளை ஆதரிக்கிறது:\n {serverVersions}\n ஆனால் இந்த பயன்பாடு {supportedVersions} மட்டுமே ஆதரிக்கிறது", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "noChatsFoundHere": "இங்கே அரட்டைகள் எதுவும் காணப்படவில்லை. கீழே உள்ள பொத்தானைப் பயன்படுத்தி ஒருவருடன் புதிய அரட்டையைத் தொடங்கவும். ⤵️", - "@noChatsFoundHere": {}, - "space": "இடைவெளி", - "@space": {}, - "banned": "தடைசெய்யப்பட்டது", - "@banned": { - "type": "String", - "placeholders": {} - }, - "botMessages": "போட் செய்திகள்", - "@botMessages": { - "type": "String", - "placeholders": {} - }, - "changedTheChatNameTo": "{username} அரட்டை பெயரை மாற்றியது: '{chatname}'", - "@changedTheChatNameTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "chatname": { - "type": "String" - } - } - }, - "changedTheHistoryVisibilityTo": "{username} வரலாற்று தெரிவுநிலையை மாற்றியது: {rules}", - "@changedTheHistoryVisibilityTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheJoinRules": "{username} சேர விதிகளை மாற்றியது", - "@changedTheJoinRules": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheJoinRulesTo": "{username} சேர விதிகளை மாற்றியது: {joinRules}", - "@changedTheJoinRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "joinRules": { - "type": "String" - } - } - }, - "changedTheRoomInvitationLink": "{username} அழைப்பிதழ் இணைப்பை மாற்றியது", - "@changedTheRoomInvitationLink": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changePassword": "கடவுச்சொல்லை மாற்றவும்", - "@changePassword": { - "type": "String", - "placeholders": {} - }, - "changeTheHomeserver": "ஓம்சர்வரை மாற்றவும்", - "@changeTheHomeserver": { - "type": "String", - "placeholders": {} - }, - "changeYourAvatar": "உங்கள் அவதாரத்தை மாற்றவும்", - "@changeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "channelCorruptedDecryptError": "குறியாக்கம் சிதைந்துள்ளது", - "@channelCorruptedDecryptError": { - "type": "String", - "placeholders": {} - }, - "chat": "அரட்டை", - "@chat": { - "type": "String", - "placeholders": {} - }, - "yourChatBackupHasBeenSetUp": "உங்கள் அரட்டை காப்புப்பிரதி அமைக்கப்பட்டுள்ளது.", - "@yourChatBackupHasBeenSetUp": {}, - "chatBackupDescription": "உங்கள் பழைய செய்திகள் மீட்பு விசையுடன் பாதுகாக்கப்படுகின்றன. நீங்கள் அதை இழக்கவில்லை என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.", - "@chatBackupDescription": { - "type": "String", - "placeholders": {} - }, - "chatHasBeenAddedToThisSpace": "இந்த இடத்தில் அரட்டை சேர்க்கப்பட்டுள்ளது", - "@chatHasBeenAddedToThisSpace": {}, - "commandHint_markasdm": "கொடுக்கப்பட்ட மேட்ரிக்சிற்கான நேரடி செய்தி அறையாக குறிக்கவும்", - "@commandHint_markasdm": {}, - "commandHint_ban": "கொடுக்கப்பட்ட பயனரை இந்த அறையிலிருந்து தடை செய்யுங்கள்", - "@commandHint_ban": { - "type": "String", - "description": "Usage hint for the command /ban" - }, - "commandHint_clearcache": "தெளிவான தற்காலிக சேமிப்பு", - "@commandHint_clearcache": { - "type": "String", - "description": "Usage hint for the command /clearcache" - }, - "commandHint_discardsession": "அமர்வை நிராகரிக்கவும்", - "@commandHint_discardsession": { - "type": "String", - "description": "Usage hint for the command /discardsession" - }, - "commandHint_myroomavatar": "இந்த அறைக்கு உங்கள் படத்தை அமைக்கவும் (MXC-URI எழுதியது)", - "@commandHint_myroomavatar": { - "type": "String", - "description": "Usage hint for the command /myroomavatar" - }, - "commandHint_myroomnick": "இந்த அறைக்கு உங்கள் காட்சி பெயரை அமைக்கவும்", - "@commandHint_myroomnick": { - "type": "String", - "description": "Usage hint for the command /myroomnick" - }, - "commandInvalid": "கட்டளை தவறானது", - "@commandInvalid": { - "type": "String" - }, - "confirm": "உறுதிப்படுத்தவும்", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "contentHasBeenReported": "உள்ளடக்கம் சேவையக நிர்வாகிகளுக்கு தெரிவிக்கப்பட்டுள்ளது", - "@contentHasBeenReported": { - "type": "String", - "placeholders": {} - }, - "createdTheChat": "💬 {username} அரட்டையை உருவாக்கினார்", - "@createdTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "currentlyActive": "தற்போது செயலில் உள்ளது", - "@currentlyActive": { - "type": "String", - "placeholders": {} - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "deactivateAccountWarning": "இது உங்கள் பயனர் கணக்கை செயலிழக்கச் செய்யும். இதை செயல்தவிர்க்க முடியாது! நீங்கள் உறுதியாக இருக்கிறீர்களா?", - "@deactivateAccountWarning": { - "type": "String", - "placeholders": {} - }, - "defaultPermissionLevel": "புதிய பயனர்களுக்கான இயல்புநிலை இசைவு நிலை", - "@defaultPermissionLevel": { - "type": "String", - "placeholders": {} - }, - "delete": "நீக்கு", - "@delete": { - "type": "String", - "placeholders": {} - }, - "devices": "சாதனங்கள்", - "@devices": { - "type": "String", - "placeholders": {} - }, - "directChats": "நேரடி அரட்டைகள்", - "@directChats": { - "type": "String", - "placeholders": {} - }, - "allRooms": "அனைத்து குழு அரட்டைகளும்", - "@allRooms": { - "type": "String", - "placeholders": {} - }, - "displaynameHasBeenChanged": "காட்சி பெயர் மாற்றப்பட்டுள்ளது", - "@displaynameHasBeenChanged": { - "type": "String", - "placeholders": {} - }, - "editBlockedServers": "தடுக்கப்பட்ட சேவையகங்களைத் திருத்து", - "@editBlockedServers": { - "type": "String", - "placeholders": {} - }, - "emoteExists": "எமோட் ஏற்கனவே உள்ளது!", - "@emoteExists": { - "type": "String", - "placeholders": {} - }, - "emoteInvalid": "தவறான எமோட் சார்ட்கோட்!", - "@emoteInvalid": { - "type": "String", - "placeholders": {} - }, - "emoteKeyboardNoRecents": "அண்மைக் காலத்தில் பயன்படுத்தப்பட்ட உணர்ச்சிகள் இங்கே தோன்றும் ...", - "@emoteKeyboardNoRecents": { - "type": "String", - "placeholders": {} - }, - "emotePacks": "அறைக்கு எமோட் பொதிகள்", - "@emotePacks": { - "type": "String", - "placeholders": {} - }, - "emoteSettings": "எமோட் அமைப்புகள்", - "@emoteSettings": { - "type": "String", - "placeholders": {} - }, - "accessAndVisibilityDescription": "இந்த அரட்டையில் யார் சேர அனுமதிக்கப்படுகிறார்கள், அரட்டையை எவ்வாறு கண்டுபிடிப்பது.", - "@accessAndVisibilityDescription": {}, - "calls": "அழைப்புகள்", - "@calls": {}, - "customEmojisAndStickers": "தனிப்பயன் ஈமோசிகள் மற்றும் ச்டிக்கர்கள்", - "@customEmojisAndStickers": {}, - "customEmojisAndStickersBody": "எந்தவொரு அரட்டையிலும் பயன்படுத்தக்கூடிய தனிப்பயன் ஈமோசிகள் அல்லது ச்டிக்கர்களைச் சேர்க்கவும் அல்லது பகிரவும்.", - "@customEmojisAndStickersBody": {}, - "emoteShortcode": "சார்ட்கோட் எமோட்", - "@emoteShortcode": { - "type": "String", - "placeholders": {} - }, - "emoteWarnNeedToPick": "நீங்கள் ஒரு எமோட் சார்ட்கோட் மற்றும் ஒரு படத்தை எடுக்க வேண்டும்!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, - "enableEmotesGlobally": "உலகளவில் எமோட் பேக்கை இயக்கவும்", - "@enableEmotesGlobally": { - "type": "String", - "placeholders": {} - }, - "enableEncryption": "குறியாக்கத்தை இயக்கவும்", - "@enableEncryption": { - "type": "String", - "placeholders": {} - }, - "enableEncryptionWarning": "நீங்கள் இனி குறியாக்கத்தை முடக்க முடியாது. நீங்கள் உறுதியாக இருக்கிறீர்களா?", - "@enableEncryptionWarning": { - "type": "String", - "placeholders": {} - }, - "encryptionNotEnabled": "குறியாக்கம் இயக்கப்படவில்லை", - "@encryptionNotEnabled": { - "type": "String", - "placeholders": {} - }, - "encryption": "குறியாக்கம்", - "@encryption": { - "type": "String", - "placeholders": {} - }, - "endedTheCall": "{senderName} அழைப்பை முடித்தார்", - "@endedTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "homeserver": "ஓம்சர்வர்", - "@homeserver": {}, - "errorObtainingLocation": "இருப்பிடத்தைப் பெறுவதில் பிழை: {error}", - "@errorObtainingLocation": { - "type": "String", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "everythingReady": "எல்லாம் தயாராக!", - "@everythingReady": { - "type": "String", - "placeholders": {} - }, - "extremeOffensive": "மிகவும் தாக்குதல்", - "@extremeOffensive": { - "type": "String", - "placeholders": {} - }, - "goToTheNewRoom": "புதிய அறைக்குச் செல்லுங்கள்", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, - "group": "குழு", - "@group": { - "type": "String", - "placeholders": {} - }, - "chatDescription": "அரட்டை விளக்கம்", - "@chatDescription": {}, - "groupIsPublic": "குழு பொது", - "@groupIsPublic": { - "type": "String", - "placeholders": {} - }, - "hideRedactedEvents": "திருத்தப்பட்ட நிகழ்வுகளை மறைக்கவும்", - "@hideRedactedEvents": { - "type": "String", - "placeholders": {} - }, - "hideInvalidOrUnknownMessageFormats": "தவறான அல்லது அறியப்படாத செய்தி வடிவங்களை மறைக்கவும்", - "@hideInvalidOrUnknownMessageFormats": {}, - "id": "ஐடி", - "@id": { - "type": "String", - "placeholders": {} - }, - "block": "தொகுதி", - "@block": {}, - "inviteContactToGroupQuestion": "\"{groupName}\" அரட்டைக்கு {contact} ஐ அழைக்க விரும்புகிறீர்களா?", - "@inviteContactToGroupQuestion": {}, - "inviteContactToGroup": "{groupName} க்கு தொடர்பை அழை", - "@inviteContactToGroup": { - "type": "String", - "placeholders": { - "groupName": { - "type": "String" - } - } - }, - "noChatDescriptionYet": "அரட்டை விளக்கம் இதுவரை உருவாக்கப்படவில்லை.", - "@noChatDescriptionYet": {}, - "invalidServerName": "தவறான சேவையக பெயர்", - "@invalidServerName": {}, - "redactMessageDescription": "இந்த உரையாடலில் பங்கேற்பாளர்கள் அனைவருக்கும் செய்தி திருத்தப்படும். இதை செயல்தவிர்க்க முடியாது.", - "@redactMessageDescription": {}, - "invitedUser": "📩 {username} {targetName} அழைக்கப்பட்டார்", - "@invitedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "inviteText": "{username} உங்களை பஞ்சுபோன்றதாக அழைத்தது.\n 1. FulufyChat.im ஐப் பார்வையிட்டு பயன்பாட்டை நிறுவவும்\n 2. பதிவு செய்யுங்கள் அல்லது உள்நுழைக\n 3. அழைப்பிதழ் இணைப்பைத் திறக்கவும்:\n {link}", - "@inviteText": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "link": { - "type": "String" - } - } - }, - "joinRoom": "அறையில் சேரவும்", - "@joinRoom": { - "type": "String", - "placeholders": {} - }, - "leave": "விடுப்பு", - "@leave": { - "type": "String", - "placeholders": {} - }, - "dehydrateTorLong": "TOR பயனர்களுக்கு, சாளரத்தை மூடுவதற்கு முன் அமர்வை ஏற்றுமதி செய்ய பரிந்துரைக்கப்படுகிறது.", - "@dehydrateTorLong": {}, - "hydrateTorLong": "உங்கள் அமர்வை கடைசியாக டோரில் ஏற்றுமதி செய்தீர்களா? விரைவாக அதை இறக்குமதி செய்து அரட்டையடிக்கவும்.", - "@hydrateTorLong": {}, - "hydrate": "காப்பு கோப்பிலிருந்து மீட்டமைக்கவும்", - "@hydrate": {}, - "locationDisabledNotice": "இருப்பிட சேவைகள் முடக்கப்பட்டுள்ளன. தயவுசெய்து உங்கள் இருப்பிடத்தைப் பகிர்ந்து கொள்ள அவர்களுக்கு உதவவும்.", - "@locationDisabledNotice": { - "type": "String", - "placeholders": {} - }, - "locationPermissionDeniedNotice": "இருப்பிட இசைவு மறுக்கப்பட்டது. உங்கள் இருப்பிடத்தைப் பகிர்ந்து கொள்ள தயவுசெய்து அவர்களுக்கு வழங்குங்கள்.", - "@locationPermissionDeniedNotice": { - "type": "String", - "placeholders": {} - }, - "login": "புகுபதிவு", - "@login": { - "type": "String", - "placeholders": {} - }, - "logInTo": "{homeserver} இல் உள்நுழைக", - "@logInTo": { - "type": "String", - "placeholders": { - "homeserver": { - "type": "String" - } - } - }, - "messages": "செய்திகள்", - "@messages": { - "type": "String", - "placeholders": {} - }, - "muteChat": "முடக்கு அரட்டை", - "@muteChat": { - "type": "String", - "placeholders": {} - }, - "newChat": "புதிய அரட்டை", - "@newChat": { - "type": "String", - "placeholders": {} - }, - "next": "அடுத்தது", - "@next": { - "type": "String", - "placeholders": {} - }, - "none": "எதுவுமில்லை", - "@none": { - "type": "String", - "placeholders": {} - }, - "noPasswordRecoveryDescription": "உங்கள் கடவுச்சொல்லை மீட்டெடுப்பதற்கான வழியை நீங்கள் இன்னும் சேர்க்கவில்லை.", - "@noPasswordRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "openAppToReadMessages": "செய்திகளைப் படிக்க பயன்பாட்டைத் திறக்கவும்", - "@openAppToReadMessages": { - "type": "String", - "placeholders": {} - }, - "oneClientLoggedOut": "உங்கள் வாடிக்கையாளர்களில் ஒருவர் உள்நுழைந்துள்ளார்", - "@oneClientLoggedOut": {}, - "addToBundle": "மூட்டையில் சேர்க்கவும்", - "@addToBundle": {}, - "or": "அல்லது", - "@or": { - "type": "String", - "placeholders": {} - }, - "hideMemberChangesInPublicChats": "பொது அரட்டைகளில் உறுப்பினர் மாற்றங்களை மறைக்கவும்", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "வாசிப்புத்திறனை மேம்படுத்த யாராவது ஒரு பொது அரட்டையில் சேர்ந்தால் அல்லது விட்டுவிட்டால் அரட்டை காலவரிசையில் காட்ட வேண்டாம்.", - "@hideMemberChangesInPublicChatsBody": {}, - "overview": "கண்ணோட்டம்", - "@overview": {}, - "notifyMeFor": "எனக்கு அறிவிக்கவும்", - "@notifyMeFor": {}, - "passwordRecoverySettings": "கடவுச்சொல் மீட்பு அமைப்புகள்", - "@passwordRecoverySettings": {}, - "passwordRecovery": "கடவுச்சொல் மீட்பு", - "@passwordRecovery": { - "type": "String", - "placeholders": {} - }, - "pleaseChoose": "தயவுசெய்து தேர்வு செய்யவும்", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, - "play": "{fileName} இயக்கு", - "@play": { - "type": "String", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "pleaseEnter4Digits": "பயன்பாட்டு பூட்டை முடக்க 4 இலக்கங்களை உள்ளிடவும் அல்லது காலியாக விடவும்.", - "@pleaseEnter4Digits": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPassword": "உங்கள் கடவுச்சொல்லை உள்ளிடவும்", - "@pleaseEnterYourPassword": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourPin": "உங்கள் முள் உள்ளிடவும்", - "@pleaseEnterYourPin": { - "type": "String", - "placeholders": {} - }, - "pleaseEnterYourUsername": "உங்கள் பயனர்பெயரை உள்ளிடவும்", - "@pleaseEnterYourUsername": { - "type": "String", - "placeholders": {} - }, - "pleaseFollowInstructionsOnWeb": "வலைத்தளத்தின் வழிமுறைகளைப் பின்பற்றி அடுத்து தட்டவும்.", - "@pleaseFollowInstructionsOnWeb": { - "type": "String", - "placeholders": {} - }, - "privacy": "தனியுரிமை", - "@privacy": { - "type": "String", - "placeholders": {} - }, - "reason": "காரணம்", - "@reason": { - "type": "String", - "placeholders": {} - }, - "redactedByBecause": "{username} ஆல் திருத்தப்பட்டது ஏனெனில்: \"{reason}\"", - "@redactedByBecause": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "reason": { - "type": "String" - } - } - }, - "register": "பதிவு செய்யுங்கள்", - "@register": { - "type": "String", - "placeholders": {} - }, - "rejectedTheInvitation": "{username} அழைப்பை நிராகரித்தது", - "@rejectedTheInvitation": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "rejoin": "மீண்டும் சேரவும்", - "@rejoin": { - "type": "String", - "placeholders": {} - }, - "unbanFromChat": "அரட்டையிலிருந்து தடையின்றி", - "@unbanFromChat": { - "type": "String", - "placeholders": {} - }, - "removeYourAvatar": "உங்கள் அவதாரத்தை அகற்று", - "@removeYourAvatar": { - "type": "String", - "placeholders": {} - }, - "replaceRoomWithNewerVersion": "புதிய பதிப்போடு அறையை மாற்றவும்", - "@replaceRoomWithNewerVersion": { - "type": "String", - "placeholders": {} - }, - "sendAsText": "உரையாக அனுப்பவும்", - "@sendAsText": { - "type": "String" - }, - "sendAudio": "ஆடியோ அனுப்பவும்", - "@sendAudio": { - "type": "String", - "placeholders": {} - }, - "sendImage": "படத்தை அனுப்பு", - "@sendImage": { - "type": "String", - "placeholders": {} - }, - "sendImages": "{count} படத்தை அனுப்பு", - "@sendImages": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "sendOriginal": "அசல் அனுப்பு", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "ச்டிக்கரை அனுப்பவும்", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "sendVideo": "வீடியோ அனுப்பவும்", - "@sendVideo": { - "type": "String", - "placeholders": {} - }, - "sentASticker": "😊 {username} ஒரு ச்டிக்கரை அனுப்பியது", - "@sentASticker": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "sentCallInformations": "{senderName} அனுப்பப்பட்ட அழைப்பு செய்தி", - "@sentCallInformations": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "separateChatTypes": "நேரடி அரட்டைகள் மற்றும் குழுக்களை பிரிக்கவும்", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, - "setAsCanonicalAlias": "முதன்மையான மாற்றுப்பெயராக அமைக்கவும்", - "@setAsCanonicalAlias": { - "type": "String", - "placeholders": {} - }, - "setCustomEmotes": "தனிப்பயன் உணர்ச்சிகளை அமைக்கவும்", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setChatDescription": "அரட்டை விளக்கத்தை அமைக்கவும்", - "@setChatDescription": {}, - "setInvitationLink": "அழைப்பிதழ் இணைப்பை அமைக்கவும்", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "share": "பங்கு", - "@share": { - "type": "String", - "placeholders": {} - }, - "presenceStyle": "இருப்பு:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, - "presencesToggle": "பிற பயனர்களிடமிருந்து நிலை செய்திகளைக் காட்டு", - "@presencesToggle": { - "type": "String", - "placeholders": {} - }, - "singlesignon": "ஒற்றை அடையாளம்", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "skip": "தவிர்", - "@skip": { - "type": "String", - "placeholders": {} - }, - "sourceCode": "மூலக் குறியீடு", - "@sourceCode": { - "type": "String", - "placeholders": {} - }, - "spaceName": "விண்வெளி பெயர்", - "@spaceName": { - "type": "String", - "placeholders": {} - }, - "status": "நிலை", - "@status": { - "type": "String", - "placeholders": {} - }, - "systemTheme": "மண்டலம்", - "@systemTheme": { - "type": "String", - "placeholders": {} - }, - "theyMatch": "அவர்கள் பொருந்துகிறார்கள்", - "@theyMatch": { - "type": "String", - "placeholders": {} - }, - "unbannedUser": "{username} தடைசெய்யப்படாத {targetName}", - "@unbannedUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "unknownEvent": "அறியப்படாத நிகழ்வு '{type}'", - "@unknownEvent": { - "type": "String", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "userAndOthersAreTyping": "{username} மற்றும் {count} மற்றவர்கள் தட்டச்சு செய்கிறார்கள்…", - "@userAndOthersAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "userIsTyping": "{username} தட்டச்சு செய்கிறது…", - "@userIsTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "waitingPartnerAcceptRequest": "கூட்டாளர் கோரிக்கையை ஏற்றுக்கொள்வதற்காக காத்திருக்கிறார்…", - "@waitingPartnerAcceptRequest": { - "type": "String", - "placeholders": {} - }, - "waitingPartnerEmoji": "பங்குதாரர் ஈமோசியை ஏற்றுக்கொள்வதற்காக காத்திருக்கிறார்…", - "@waitingPartnerEmoji": { - "type": "String", - "placeholders": {} - }, - "sender": "அனுப்புநர்", - "@sender": {}, - "openGallery": "திறந்த கேலரி", - "@openGallery": {}, - "wallpaper": "வால்பேப்பர்:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "whyDoYouWantToReportThis": "இதை ஏன் புகாரளிக்க விரும்புகிறீர்கள்?", - "@whyDoYouWantToReportThis": { - "type": "String", - "placeholders": {} - }, - "wipeChatBackup": "புதிய மீட்பு விசையை உருவாக்க உங்கள் அரட்டை காப்புப்பிரதியைத் துடைக்கவா?", - "@wipeChatBackup": { - "type": "String", - "placeholders": {} - }, - "withTheseAddressesRecoveryDescription": "இந்த முகவரிகள் மூலம் உங்கள் கடவுச்சொல்லை மீட்டெடுக்கலாம்.", - "@withTheseAddressesRecoveryDescription": { - "type": "String", - "placeholders": {} - }, - "writeAMessage": "ஒரு செய்தியை எழுதுங்கள்…", - "@writeAMessage": { - "type": "String", - "placeholders": {} - }, - "yes": "ஆம்", - "@yes": { - "type": "String", - "placeholders": {} - }, - "removeFromSpace": "இடத்திலிருந்து அகற்று", - "@removeFromSpace": {}, - "pleaseEnterRecoveryKeyDescription": "உங்கள் பழைய செய்திகளைத் திறக்க, முந்தைய அமர்வில் உருவாக்கப்பட்ட உங்கள் மீட்பு விசையை உள்ளிடவும். உங்கள் மீட்பு விசை உங்கள் கடவுச்சொல் அல்ல.", - "@pleaseEnterRecoveryKeyDescription": {}, - "confirmEventUnpin": "நிகழ்வை நிரந்தரமாக அவிழ்ப்பது உறுதி?", - "@confirmEventUnpin": {}, - "switchToAccount": "கணக்குக்கு மாறவும் {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "அடுத்த கணக்கு", - "@nextAccount": {}, - "youJoinedTheChat": "நீங்கள் அரட்டையில் சேர்ந்தீர்கள்", - "@youJoinedTheChat": {}, - "indexedDbErrorLong": "செய்தி சேமிப்பு துரதிர்ச்டவசமாக இயல்புநிலையாக தனிப்பட்ட பயன்முறையில் இயக்கப்படவில்லை.\n தயவுசெய்து பார்வையிடவும்\n - பற்றி: கட்டமைப்பு\n - கணம் dom.indexedDB.privateBrowsing.enabled பெறுநர் true\n இல்லையெனில், பஞ்சுபோன்றவை இயக்க முடியாது.", - "@indexedDbErrorLong": {}, - "youAcceptedTheInvitation": "👍 நீங்கள் அழைப்பை ஏற்றுக்கொண்டீர்கள்", - "@youAcceptedTheInvitation": {}, - "youBannedUser": "நீங்கள் {user} தடை செய்தீர்கள்", - "@youBannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youHaveWithdrawnTheInvitationFor": "{user}க்கான அழைப்பை திரும்பப் பெற்றுவிட்டீர்கள்", - "@youHaveWithdrawnTheInvitationFor": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedBy": "📩 நீங்கள் {user} ஆல் அழைக்கப்பட்டுள்ளீர்கள்", - "@youInvitedBy": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youInvitedUser": "📩 {user} ஐ அழைத்தீர்கள்", - "@youInvitedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "youUnbannedUser": "நீங்கள் {user} தடைசெய்யவில்லை", - "@youUnbannedUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "hasKnocked": "🚪 {user} தட்டியது", - "@hasKnocked": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "பொது இணைப்பு இதுவரை உருவாக்கப்படவில்லை", - "@noPublicLinkHasBeenCreatedYet": {}, - "knock": "தட்டவும்", - "@knock": {}, - "users": "பயனர்கள்", - "@users": {}, - "storeInSecureStorageDescription": "மீட்பு விசையை இந்த சாதனத்தின் பாதுகாப்பான சேமிப்பகத்தில் சேமிக்கவும்.", - "@storeInSecureStorageDescription": {}, - "saveKeyManuallyDescription": "கணினி பகிர்வு உரையாடல் அல்லது கிளிப்போர்டைத் தூண்டுவதன் மூலம் இந்த விசையை கைமுறையாக சேமிக்கவும்.", - "@saveKeyManuallyDescription": {}, - "storeInAndroidKeystore": "ஆண்ட்ராய்டு கீச்டோரில் சேமிக்கவும்", - "@storeInAndroidKeystore": {}, - "countFiles": "{count} கோப்புகள்", - "@countFiles": { - "placeholders": { - "count": { - "type": "int" - } - } - }, - "custom": "தனிப்பயன்", - "@custom": {}, - "foregroundServiceRunning": "முன்புற பணி இயங்கும்போது இந்த அறிவிப்பு தோன்றும்.", - "@foregroundServiceRunning": {}, - "screenSharingDetail": "உங்கள் திரையை FUFFYCHAT இல் பகிர்கிறீர்கள்", - "@screenSharingDetail": {}, - "callingPermissions": "அழைப்பு அனுமதிகள்", - "@callingPermissions": {}, - "callingAccount": "அழைப்பு கணக்கு", - "@callingAccount": {}, - "callingAccountDetails": "சொந்த ஆண்ட்ராய்டு டயலர் பயன்பாட்டைப் பயன்படுத்த பஞ்சுபோன்றது அனுமதிக்கிறது.", - "@callingAccountDetails": {}, - "otherCallingPermissions": "மைக்ரோஃபோன், கேமரா மற்றும் பிற பஞ்சுபோன்ற அனுமதிகள்", - "@otherCallingPermissions": {}, - "numChats": "{number} அரட்டைகள்", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "முக்கியமற்ற மாநில நிகழ்வுகளை மறைக்கவும்", - "@hideUnimportantStateEvents": {}, - "whyIsThisMessageEncrypted": "இந்த செய்தி ஏன் படிக்க முடியாதது?", - "@whyIsThisMessageEncrypted": {}, - "noKeyForThisMessage": "இந்த சாதனத்தில் உங்கள் கணக்கில் கையொப்பமிடுவதற்கு முன்பு செய்தி அனுப்பப்பட்டால் இது நிகழலாம்.\n\n அனுப்புநர் உங்கள் சாதனத்தைத் தடுத்துள்ளார் அல்லது இணைய இணைப்பில் ஏதேனும் தவறு ஏற்பட்டுள்ளது.\n\n மற்றொரு அமர்வில் செய்தியைப் படிக்க முடியுமா? அதிலிருந்து செய்தியை மாற்றலாம்! அமைப்புகள்> சாதனங்களுக்குச் சென்று, உங்கள் சாதனங்கள் ஒருவருக்கொருவர் சரிபார்த்துள்ளன என்பதை உறுதிப்படுத்தவும். அடுத்த முறை நீங்கள் அறையைத் திறக்கும்போது, இரண்டு அமர்வுகளும் முன்னணியில் இருக்கும்போது, விசைகள் தானாகவே அனுப்பப்படும்.\n\n வெளியேறும்போது அல்லது சாதனங்களை மாற்றும்போது விசைகளை இழக்க நீங்கள் விரும்பவில்லையா? அமைப்புகளில் அரட்டை காப்புப்பிரதியை நீங்கள் இயக்கியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.", - "@noKeyForThisMessage": {}, - "hidePresences": "நிலை பட்டியலை மறைக்கவா?", - "@hidePresences": {}, - "doNotShowAgain": "மீண்டும் காட்ட வேண்டாம்", - "@doNotShowAgain": {}, - "newSpaceDescription": "உங்கள் அரட்டைகளை ஒருங்கிணைத்து தனியார் அல்லது பொது சமூகங்களை உருவாக்க இடைவெளிகள் உங்களை அனுமதிக்கிறது.", - "@newSpaceDescription": {}, - "disableEncryptionWarning": "பாதுகாப்பு காரணங்களுக்காக நீங்கள் ஒரு அரட்டையில் குறியாக்கத்தை முடக்க முடியாது, அது இதற்கு முன்பு இயக்கப்பட்டிருக்கிறது.", - "@disableEncryptionWarning": {}, - "sorryThatsNotPossible": "மன்னிக்கவும் ... அது சாத்தியமில்லை", - "@sorryThatsNotPossible": {}, - "noBackupWarning": "எச்சரிக்கை! அரட்டை காப்புப்பிரதியை இயக்காமல், உங்கள் மறைகுறியாக்கப்பட்ட செய்திகளுக்கான அணுகலை இழப்பீர்கள். வெளியேறுவதற்கு முன் முதலில் அரட்டை காப்புப்பிரதியை இயக்க மிகவும் பரிந்துரைக்கப்படுகிறது.", - "@noBackupWarning": {}, - "fileIsTooBigForServer": "அனுப்ப முடியவில்லை! சேவையகம் {max} வரை இணைப்புகளை மட்டுமே ஆதரிக்கிறது.", - "@fileIsTooBigForServer": { - "type": "String", - "placeholders": { - "max": { - "type": "String" - } - } - }, - "fileHasBeenSavedAt": "கோப்பு {path}", - "@fileHasBeenSavedAt": { - "type": "String", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "pleaseTryAgainLaterOrChooseDifferentServer": "தயவுசெய்து பின்னர் மீண்டும் முயற்சிக்கவும் அல்லது வேறு சேவையகத்தைத் தேர்வுசெய்க.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "{provider} மூலம் உள்நுழையவும்", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "profileNotFound": "பயனரை சேவையகத்தில் காண முடியவில்லை. ஒரு இணைப்பு சிக்கல் இருக்கலாம் அல்லது பயனர் இல்லை.", - "@profileNotFound": {}, - "inviteGroupChat": "📨 குழு அரட்டை அழைப்பு", - "@inviteGroupChat": {}, - "invitePrivateChat": "Sative தனியார் அரட்டை அழைப்பு", - "@invitePrivateChat": {}, - "invalidInput": "தவறான உள்ளீடு!", - "@invalidInput": {}, - "archiveRoomDescription": "அரட்டை காப்பகத்திற்கு நகர்த்தப்படும். மற்ற பயனர்கள் நீங்கள் அரட்டையை விட்டுவிட்டீர்கள் என்பதைக் காண முடியும்.", - "@archiveRoomDescription": {}, - "removeDevicesDescription": "நீங்கள் இந்த சாதனத்திலிருந்து வெளியேறுவீர்கள், இனி செய்திகளைப் பெற முடியாது.", - "@removeDevicesDescription": {}, - "banUserDescription": "பயனர் அரட்டையிலிருந்து தடைசெய்யப்படுவார், மேலும் அவை தடைசெய்யப்படாத வரை மீண்டும் அரட்டையில் நுழைய முடியாது.", - "@banUserDescription": {}, - "makeAdminDescription": "இந்த பயனர் நிர்வாகியை நீங்கள் செய்தவுடன், இதை நீங்கள் செயல்தவிர்க்க முடியாமல் போகலாம், ஏனெனில் அவை உங்களைப் போன்ற அதே அனுமதிகளைக் கொண்டிருக்கும்.", - "@makeAdminDescription": {}, - "knocking": "தட்டுதல்", - "@knocking": {}, - "searchChatsRooms": "#Chats, Us பயனர்களைத் தேடுங்கள் ...", - "@searchChatsRooms": {}, - "nothingFound": "எதுவும் கிடைக்கவில்லை ...", - "@nothingFound": {}, - "groupName": "குழு பெயர்", - "@groupName": {}, - "createGroupAndInviteUsers": "ஒரு குழுவை உருவாக்கி பயனர்களை அழைக்கவும்", - "@createGroupAndInviteUsers": {}, - "groupCanBeFoundViaSearch": "தேடல் வழியாக குழுவை காணலாம்", - "@groupCanBeFoundViaSearch": {}, - "wrongRecoveryKey": "மன்னிக்கவும் ... இது சரியான மீட்பு விசையாகத் தெரியவில்லை.", - "@wrongRecoveryKey": {}, - "databaseMigrationBody": "தயவுசெய்து காத்திருங்கள். இது ஒரு கணம் ஆகலாம்.", - "@databaseMigrationBody": {}, - "newPassword": "புதிய கடவுச்சொல்", - "@newPassword": {}, - "pleaseChooseAStrongPassword": "வலுவான கடவுச்சொல்லைத் தேர்வுசெய்க", - "@pleaseChooseAStrongPassword": {}, - "passwordsDoNotMatch": "கடவுச்சொற்கள் பொருந்தவில்லை", - "@passwordsDoNotMatch": {}, - "joinSpace": "விண்வெளியில் சேரவும்", - "@joinSpace": {}, - "addChatOrSubSpace": "அரட்டை அல்லது துணை இடத்தைச் சேர்க்கவும்", - "@addChatOrSubSpace": {}, - "initAppError": "பயன்பாட்டைத் தொடங்கும்போது பிழை ஏற்பட்டது", - "@initAppError": {}, - "databaseBuildErrorBody": "SQlite தரவுத்தளத்தை உருவாக்க முடியவில்லை. ஆப்ஸ் தற்போதைக்கு மரபு தரவுத்தளத்தைப் பயன்படுத்த முயற்சிக்கிறது. {url} இல் டெவலப்பர்களிடம் இந்தப் பிழையைப் புகாரளிக்கவும். பிழை செய்தி: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "sessionLostBody": "உங்கள் அமர்வு தொலைந்துவிட்டது. {url} இல் டெவலப்பர்களிடம் இந்தப் பிழையைப் புகாரளிக்கவும். பிழை செய்தி: {error}", - "@sessionLostBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "sendTypingNotificationsDescription": "அரட்டையில் பங்கேற்பாளர்கள் நீங்கள் ஒரு புதிய செய்தியைத் தட்டச்சு செய்யும் போது காணலாம்.", - "@sendTypingNotificationsDescription": {}, - "sendReadReceiptsDescription": "அரட்டையில் பங்கேற்பாளர்கள் நீங்கள் ஒரு செய்தியைப் படிக்கும்போது பார்க்கலாம்.", - "@sendReadReceiptsDescription": {}, - "formattedMessagesDescription": "மார்க் டவுனைப் பயன்படுத்தி தைரியமான உரை போன்ற பணக்கார செய்தி உள்ளடக்கத்தைக் காண்பி.", - "@formattedMessagesDescription": {}, - "verifyOtherUser": "Poser மற்ற பயனரை சரிபார்க்கவும்", - "@verifyOtherUser": {}, - "verifyOtherUserDescription": "நீங்கள் மற்றொரு பயனரைச் சரிபார்த்தால், நீங்கள் உண்மையில் யாருக்கு எழுதுகிறீர்கள் என்பது உங்களுக்குத் தெரியும் என்பதை நீங்கள் உறுதியாக நம்பலாம். 💪\n\nநீங்கள் ஒரு சரிபார்ப்பைத் தொடங்கும்போது, நீங்களும் மற்ற பயனரும் பயன்பாட்டில் ஒரு பாப்அப்பைக் காண்பீர்கள். நீங்கள் ஒருவருக்கொருவர் ஒப்பிட வேண்டிய தொடர்ச்சியான ஈமோசிகள் அல்லது எண்களைக் காண்பீர்கள்.\n\nஇதைச் செய்வதற்கான சிறந்த வழி வீடியோ அழைப்பைச் சந்திப்பது அல்லது தொடங்குவது. 👭", - "@verifyOtherUserDescription": {}, - "verifyOtherDeviceDescription": "நீங்கள் மற்றொரு சாதனத்தைச் சரிபார்க்கும்போது, அந்தச் சாதனங்கள் விசைகளைப் பரிமாறிக்கொள்ளலாம், உங்கள் ஒட்டுமொத்த பாதுகாப்பை அதிகரிக்கும். 💪 நீங்கள் ஒரு சரிபார்ப்பைத் தொடங்கும்போது, இரண்டு சாதனங்களிலும் பயன்பாட்டில் ஒரு பாப்அப் தோன்றும். நீங்கள் ஒருவருக்கொருவர் ஒப்பிட வேண்டிய தொடர்ச்சியான ஈமோசிகள் அல்லது எண்களைக் காண்பீர்கள். நீங்கள் சரிபார்ப்பைத் தொடங்குவதற்கு முன்பு இரண்டு சாதனங்களையும் எளிதில் வைத்திருப்பது நல்லது. 🤳", - "@verifyOtherDeviceDescription": {}, - "canceledKeyVerification": "{sender} ரத்து செய்யப்பட்ட விசை சரிபார்ப்பு", - "@canceledKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "isReadyForKeyVerification": "விசை சரிபார்ப்பிற்கு {sender} தயாராக உள்ளார்", - "@isReadyForKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "requestedKeyVerification": "{sender} கோரப்பட்ட விசை சரிபார்ப்பு", - "@requestedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "transparent": "வெளிப்படையானது", - "@transparent": {}, - "stickers": "ச்டிக்கர்கள்", - "@stickers": {}, - "commandHint_ignore": "கொடுக்கப்பட்ட மேட்ரிக்ச் ஐடியை புறக்கணிக்கவும்", - "@commandHint_ignore": {}, - "unreadChatsInApp": "{appname}: {unread} படிக்காத அரட்டைகள்", - "@unreadChatsInApp": { - "type": "String", - "placeholders": { - "appname": { - "type": "String" - }, - "unread": { - "type": "String" - } - } - }, - "thereAreCountUsersBlocked": "இப்போது {count} பயனர்கள் தடுக்கப்பட்டுள்ளனர்.", - "@thereAreCountUsersBlocked": { - "type": "String", - "count": {} - }, - "restricted": "தடைசெய்யப்பட்டது", - "@restricted": {}, - "moderatorLevel": "{level} - மதிப்பீட்டாளர்", - "@moderatorLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "adminLevel": "{level} - நிர்வாகி", - "@adminLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "changeGeneralChatSettings": "பொது அரட்டை அமைப்புகளை மாற்றவும்", - "@changeGeneralChatSettings": {}, - "inviteOtherUsers": "இந்த அரட்டைக்கு மற்ற பயனர்களை அழைக்கவும்", - "@inviteOtherUsers": {}, - "changeTheChatPermissions": "அரட்டை அனுமதிகளை மாற்றவும்", - "@changeTheChatPermissions": {}, - "changeTheVisibilityOfChatHistory": "அரட்டை வரலாற்றின் தெரிவுநிலையை மாற்றவும்", - "@changeTheVisibilityOfChatHistory": {}, - "changeTheCanonicalRoomAlias": "முக்கிய பொது அரட்டை முகவரியை மாற்றவும்", - "@changeTheCanonicalRoomAlias": {}, - "changeTheDescriptionOfTheGroup": "அரட்டையின் விளக்கத்தை மாற்றவும்", - "@changeTheDescriptionOfTheGroup": {}, - "chatPermissionsDescription": "இந்த அரட்டையில் சில செயல்களுக்கு எந்த ஆற்றல் நிலை தேவை என்பதை வரையறுக்கவும். 0, 50 மற்றும் 100 ஆற்றல் நிலைகள் பொதுவாக பயனர்கள், மதிப்பீட்டாளர்கள் மற்றும் நிர்வாகிகளைக் குறிக்கின்றன, ஆனால் எந்த தரமும் சாத்தியமாகும்.", - "@chatPermissionsDescription": {}, - "updateInstalled": "🎉 புதுப்பிப்பு {version} நிறுவப்பட்டது!", - "@updateInstalled": { - "type": "String", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "changelog": "மாற்றபதிவு", - "@changelog": {}, - "homeserverDescription": "உங்கள் எல்லா தரவுகளும் ஒரு மின்னஞ்சல் வழங்குநரைப் போலவே ஓம்சர்வரில் சேமிக்கப்படுகின்றன. நீங்கள் எந்த ஓம்சர்வரை பயன்படுத்த விரும்புகிறீர்கள் என்பதை நீங்கள் தேர்வு செய்யலாம், அதே நேரத்தில் நீங்கள் எல்லோரிடமும் தொடர்பு கொள்ளலாம். Https://matrix.org இல் மேலும் அறிக.", - "@homeserverDescription": {}, - "calculatingFileSize": "கோப்பு அளவைக் கணக்கிடுகிறது ...", - "@calculatingFileSize": {}, - "compressVideo": "அமைக்கும் வீடியோ ...", - "@compressVideo": {}, - "sendingAttachmentCountOfCount": "{length} இன் இணைப்பு {index}ஐ அனுப்புகிறது...", - "@sendingAttachmentCountOfCount": { - "type": "integer", - "placeholders": { - "index": { - "type": "int" - }, - "length": { - "type": "int" - } - } - }, - "oneOfYourDevicesIsNotVerified": "உங்கள் சாதனங்களில் ஒன்று சரிபார்க்கப்படவில்லை", - "@oneOfYourDevicesIsNotVerified": {}, - "noticeChatBackupDeviceVerification": "குறிப்பு: உங்கள் எல்லா சாதனங்களையும் அரட்டை காப்புப்பிரதியுடன் இணைக்கும்போது, அவை தானாகவே சரிபார்க்கப்படும்.", - "@noticeChatBackupDeviceVerification": {}, - "manageAccount": "கணக்கை நிர்வகிக்கவும்", - "@manageAccount": {}, - "noContactInformationProvided": "சேவையகம் எந்த சரியான தொடர்பு தகவலையும் வழங்காது", - "@noContactInformationProvided": {}, - "contactServerAdmin": "சேவையக நிர்வாகி தொடர்பு", - "@contactServerAdmin": {}, - "contactServerSecurity": "சேவையக பாதுகாப்பைத் தொடர்பு கொள்ளுங்கள்", - "@contactServerSecurity": {}, - "supportPage": "உதவி பக்கம்", - "@supportPage": {}, - "serverInformation": "சேவையக தகவல்:", - "@serverInformation": {}, - "version": "பதிப்பு", - "@version": {}, - "website": "வலைத்தளம்", - "@website": {}, - "compress": "சுருக்க", - "@compress": {}, - "alwaysUse24HourFormat": "தவறு", - "@alwaysUse24HourFormat": { - "description": "Set to true to always display time of day in 24 hour format." - }, - "admin": "நிர்வாகி", - "@admin": { - "type": "String", - "placeholders": {} - }, - "alias": "மாற்றுப்பெயர்", - "@alias": { - "type": "String", - "placeholders": {} - }, - "answeredTheCall": "{senderName} அழைப்புக்கு பதிலளித்தார்", - "@answeredTheCall": { - "type": "String", - "placeholders": { - "senderName": { - "type": "String" - } - } - }, - "commandHint_react": "ஒரு எதிர்வினையாக பதிலை அனுப்பவும்", - "@commandHint_react": { - "type": "String", - "description": "Usage hint for the command /react" - }, - "commandHint_send": "உரையை அனுப்பவும்", - "@commandHint_send": { - "type": "String", - "description": "Usage hint for the command /send" - }, - "containsDisplayName": "காட்சி பெயரைக் கொண்டுள்ளது", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "removeFromBundle": "இந்த மூட்டையிலிருந்து அகற்றவும்", - "@removeFromBundle": {}, - "pushRules": "தள்ளி விதிகள்", - "@pushRules": { - "type": "String", - "placeholders": {} - }, - "recording": "பதிவு", - "@recording": { - "type": "String", - "placeholders": {} - }, - "redactedBy": "{username} ஆல் திருத்தப்பட்டது", - "@redactedBy": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "directChat": "நேரடி அரட்டை", - "@directChat": {}, - "redactMessage": "திருத்தும் செய்தி", - "@redactMessage": { - "type": "String", - "placeholders": {} - }, - "userAndUserAreTyping": "{username} மற்றும் {username2} தட்டச்சு செய்கின்றன…", - "@userAndUserAreTyping": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "username2": { - "type": "String" - } - } - }, - "userLeftTheChat": "🚪 {username} அரட்டையை விட்டு வெளியேறினார்", - "@userLeftTheChat": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "visibilityOfTheChatHistory": "அரட்டை வரலாற்றின் தெரிவுநிலை", - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "you": "நீங்கள்", - "@you": { - "type": "String", - "placeholders": {} - }, - "unsupportedAndroidVersionLong": "இந்த அம்சத்திற்கு புதிய ஆண்ட்ராய்டு பதிப்பு தேவைப்படுகிறது. புதுப்பிப்புகள் அல்லது பரம்பரை OS ஆதரவை சரிபார்க்கவும்.", - "@unsupportedAndroidVersionLong": {}, - "widgetJitsi": "சிட்சி சந்திக்கிறார்", - "@widgetJitsi": {}, - "signInWithPassword": "கடவுச்சொல்லுடன் உள்நுழைக", - "@signInWithPassword": {}, - "setColorTheme": "வண்ண கருப்பொருள் அமைக்கவும்:", - "@setColorTheme": {}, - "roomUpgradeDescription": "அரட்டை பின்னர் புதிய அறை பதிப்பில் மீண்டும் உருவாக்கப்படும். பங்கேற்பாளர்கள் அனைவருக்கும் புதிய அரட்டைக்கு மாற வேண்டும் என்று அறிவிக்கப்படும். அறை பதிப்புகள் பற்றி மேலும் அறிய https://spec.matrix.org/latest/rooms/", - "@roomUpgradeDescription": {}, - "account": "கணக்கு", - "@account": { - "type": "String", - "placeholders": {} - }, - "groups": "குழுக்கள்", - "@groups": { - "type": "String", - "placeholders": {} - }, - "blockedUsers": "தடுக்கப்பட்ட பயனர்கள்", - "@blockedUsers": {}, - "leaveEmptyToClearStatus": "உங்கள் நிலையை அழிக்க காலியாக விடவும்.", - "@leaveEmptyToClearStatus": {}, - "subspace": "துணை", - "@subspace": {}, - "decline": "வீழ்ச்சி", - "@decline": {}, - "thisDevice": "இந்த சாதனம்:", - "@thisDevice": {}, - "minimumPowerLevel": "{level} என்பது குறைந்தபட்ச ஆற்றல் நிலை.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, - "gallery": "கேலரி", - "@gallery": {}, - "files": "கோப்புகள்", - "@files": {}, - "noDatabaseEncryption": "இந்த மேடையில் தரவுத்தள குறியாக்கம் ஆதரிக்கப்படவில்லை", - "@noDatabaseEncryption": {}, - "goToSpace": "விண்வெளிக்குச் செல்லுங்கள்: {space}", - "@goToSpace": { - "type": "String", - "space": {} - }, - "markAsUnread": "படிக்காத எனக் குறிக்கவும்", - "@markAsUnread": {}, - "userLevel": "{level} - பயனர்", - "@userLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "notAnImage": "படக் கோப்பு அல்ல.", - "@notAnImage": {}, - "encryptThisChat": "இந்த அரட்டையை குறியாக்கவும்", - "@encryptThisChat": {}, - "userRole": "பயனர் பங்கு", - "@userRole": {}, - "publicChatAddresses": "பொது அரட்டை முகவரிகள்", - "@publicChatAddresses": {}, - "createNewAddress": "புதிய முகவரியை உருவாக்கவும்", - "@createNewAddress": {}, - "boldText": "தைரியமான உரை", - "@boldText": {}, - "italicText": "சாய்வு உரை", - "@italicText": {}, - "strikeThrough": "ச்ட்ரைகெத்ரோ", - "@strikeThrough": {}, - "pleaseFillOut": "தயவுசெய்து நிரப்பவும்", - "@pleaseFillOut": {}, - "invalidUrl": "தவறான முகவரி", - "@invalidUrl": {}, - "addLink": "இணைப்பைச் சேர்க்கவும்", - "@addLink": {}, - "searchIn": "அரட்டையில் தேடு \"{chat}\" ...", - "@searchIn": { - "type": "String", - "placeholders": { - "chat": { - "type": "String" - } - } - }, - "searchMore": "மேலும் தேடுங்கள் ...", - "@searchMore": {}, - "startedKeyVerification": "{sender} விசை சரிபார்ப்பைத் தொடங்கினார்", - "@startedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "loginWithMatrixId": "மேட்ரிக்ச்-ஐடியுடன் உள்நுழைக", - "@loginWithMatrixId": {}, - "discoverHomeservers": "ஓம்சர்சர்களைக் கண்டறியவும்", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "ஓம்சர்வர் என்றால் என்ன?", - "@whatIsAHomeserver": {}, - "doesNotSeemToBeAValidHomeserver": "இணக்கமான ஓம்சர்வர் என்று தெரியவில்லை. தவறான URL?", - "@doesNotSeemToBeAValidHomeserver": {}, - "countChatsAndCountParticipants": "{chats} அரட்டைகள் மற்றும் {participants} பங்கேற்பாளர்கள்", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "noMoreChatsFound": "இனி அரட்டைகள் கிடைக்கவில்லை ...", - "@noMoreChatsFound": {}, - "joinedChats": "இணைந்த அரட்டைகள்", - "@joinedChats": {}, - "spaces": "இடங்கள்", - "@spaces": {}, - "changedTheChatPermissions": "{username} அரட்டை அனுமதிகளை மாற்றியுள்ளார்", - "@changedTheChatPermissions": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "changedTheGuestAccessRulesTo": "{username} விருந்தினர் அணுகல் விதிகளை மாற்றியது: {rules}", - "@changedTheGuestAccessRulesTo": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - }, - "rules": { - "type": "String" - } - } - }, - "changedTheHistoryVisibility": "{username} வரலாற்று தெரிவுநிலையை மாற்றியது", - "@changedTheHistoryVisibility": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, - "commandHint_join": "கொடுக்கப்பட்ட அறையில் சேரவும்", - "@commandHint_join": { - "type": "String", - "description": "Usage hint for the command /join" - }, - "commandHint_dm": "நேரடி அரட்டையைத் தொடங்கவும்\n குறியாக்கத்தை முடக்க-இல்லை-குறியாக்கத்தைப் பயன்படுத்தவும்", - "@commandHint_dm": { - "type": "String", - "description": "Usage hint for the command /dm" - }, - "commandHint_leave": "இந்த அறையை விட்டு விடுங்கள்", - "@commandHint_leave": { - "type": "String", - "description": "Usage hint for the command /leave" - }, - "toggleMuted": "முடக்கியது", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "unbanUserDescription": "அவர்கள் முயற்சித்தால் பயனர் மீண்டும் அரட்டையை உள்ளிட முடியும்.", - "@unbanUserDescription": {}, - "restoreSessionBody": "ஆப்ஸ் இப்போது உங்கள் அமர்வை காப்புப்பிரதியிலிருந்து மீட்டெடுக்க முயற்சிக்கிறது. {url} இல் டெவலப்பர்களிடம் இந்தப் பிழையைப் புகாரளிக்கவும். பிழை செய்தி: {error}", - "@restoreSessionBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "sendReadReceipts": "வாசிப்பு ரசீதுகளை அனுப்பவும்", - "@sendReadReceipts": {}, - "unableToJoinChat": "அரட்டையில் சேர முடியவில்லை. ஒருவேளை மற்ற கட்சி ஏற்கனவே உரையாடலை மூடியிருக்கலாம்.", - "@unableToJoinChat": {}, - "noGoogleServicesWarning": "ஃபயர்பேச் முகில் செய்தி உங்கள் சாதனத்தில் கிடைக்கவில்லை. இன்னும் புச் அறிவிப்புகளைப் பெற, NTFY ஐ நிறுவ பரிந்துரைக்கிறோம். NTFY அல்லது மற்றொரு ஒருங்கிணைந்த புச் வழங்குநருடன் நீங்கள் தரவு பாதுகாப்பான வழியில் புச் அறிவிப்புகளைப் பெறலாம். நீங்கள் பிளேச்டோரிலிருந்து அல்லது எஃப்-டிராய்டிலிருந்து NTFY ஐ பதிவிறக்கம் செய்யலாம்.", - "@noGoogleServicesWarning": { - "type": "String", - "placeholders": {} - }, - "scanQrCode": "QR குறியீட்டை ச்கேன் செய்யுங்கள்", - "@scanQrCode": {}, - "obtainingLocation": "இருப்பிடத்தைப் பெறுதல்…", - "@obtainingLocation": { - "type": "String", - "placeholders": {} - }, - "offline": "இணையமில்லாமல்", - "@offline": { - "type": "String", - "placeholders": {} - }, - "online": "ஆன்லைனில்", - "@online": { - "type": "String", - "placeholders": {} - }, - "participant": "பங்கேற்பாளர்", - "@participant": { - "type": "String", - "placeholders": {} - }, - "removeDevice": "சாதனத்தை அகற்று", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, - "search": "தேடல்", - "@search": { - "type": "String", - "placeholders": {} - }, - "security": "பாதுகாப்பு", - "@security": { - "type": "String", - "placeholders": {} - }, - "sendFile": "கோப்பு அனுப்பவும்", - "@sendFile": { - "type": "String", - "placeholders": {} - }, - "setCustomPermissionLevel": "தனிப்பயன் இசைவு அளவை அமைக்கவும்", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "தயவுசெய்து கீழே ஒரு முன் வரையறுக்கப்பட்ட பாத்திரத்தைத் தேர்வுசெய்க அல்லது 0 மற்றும் 100 க்கு இடையில் தனிப்பயன் இசைவு நிலையை உள்ளிடவும்.", - "@setPermissionsLevelDescription": {}, - "ignoreUser": "பயனரை புறக்கணிக்கவும்", - "@ignoreUser": {}, - "normalUser": "சாதாரண பயனர்", - "@normalUser": {}, - "commandHint_roomupgrade": "கொடுக்கப்பட்ட அறை பதிப்பிற்கு இந்த அறையை மேம்படுத்தவும்", - "@commandHint_roomupgrade": {}, - "checkList": "சரிபார்ப்பு பட்டியல்", - "@checkList": {}, - "countInvited": "{count} அழைக்கப்பட்டது", - "@countInvited": { - "type": "String", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "synchronizingPleaseWaitCounter": " ஒத்திசைத்தல்… ({percentage}%)", - "@synchronizingPleaseWaitCounter": { - "type": "String", - "placeholders": { - "percentage": { - "type": "String" - } - } - }, - "previous": "முந்தைய", - "@previous": {}, - "otherPartyNotLoggedIn": "மற்ற கட்சி தற்போது உள்நுழைந்திருக்கவில்லை, எனவே செய்திகளைப் பெற முடியாது!", - "@otherPartyNotLoggedIn": {}, - "appWantsToUseForLogin": "உள்நுழைய '{server}' ஐப் பயன்படுத்தவும்", - "@appWantsToUseForLogin": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "appWantsToUseForLoginDescription": "உங்களைப் பற்றிய தகவல்களைப் பகிர பயன்பாடு மற்றும் வலைத்தளத்தை இதன்மூலம் அனுமதிக்கிறீர்கள்.", - "@appWantsToUseForLoginDescription": {}, - "open": "திற", - "@open": {}, - "waitingForServer": "சேவையகத்திற்காக காத்திருக்கிறது ...", - "@waitingForServer": {}, - "appIntroduction": "வெவ்வேறு தூதர்களில் உங்கள் நண்பர்களுடன் அரட்டையடிக்க உங்களை பஞ்சுபோன்றது உங்களை அனுமதிக்கிறது. Https://matrix.org இல் மேலும் அறிக அல்லது *தொடரவும் *தட்டவும்.", - "@appIntroduction": {}, - "newChatRequest": "அரட்டை கோரிக்கை", - "@newChatRequest": {}, - "contentNotificationSettings": "உள்ளடக்க அறிவிப்பு அமைப்புகள்", - "@contentNotificationSettings": {}, - "generalNotificationSettings": "பொது அறிவிப்பு அமைப்புகள்", - "@generalNotificationSettings": {}, - "roomNotificationSettings": "அறை அறிவிப்பு அமைப்புகள்", - "@roomNotificationSettings": {}, - "userSpecificNotificationSettings": "பயனர் குறிப்பிட்ட அறிவிப்பு அமைப்புகள்", - "@userSpecificNotificationSettings": {}, - "otherNotificationSettings": "பிற அறிவிப்பு அமைப்புகள்", - "@otherNotificationSettings": {}, - "notificationRuleContainsUserName": "பயனர் பெயரைக் கொண்டுள்ளது", - "@notificationRuleContainsUserName": {}, - "notificationRuleContainsUserNameDescription": "ஒரு செய்தியில் அவற்றின் பயனர்பெயர் இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleContainsUserNameDescription": {}, - "notificationRuleMaster": "அனைத்து அறிவிப்புகளையும் முடக்குகிறது", - "@notificationRuleMaster": {}, - "notificationRuleMasterDescription": "மற்ற எல்லா விதிகளையும் மீறி அனைத்து அறிவிப்புகளையும் முடக்குகிறது.", - "@notificationRuleMasterDescription": {}, - "notificationRuleSuppressNotices": "தானியங்கு செய்திகளை அடக்கவும்", - "@notificationRuleSuppressNotices": {}, - "notificationRuleSuppressNoticesDescription": "போட்ச் போன்ற தானியங்கி வாடிக்கையாளர்களிடமிருந்து அறிவிப்புகளை அடக்குகிறது.", - "@notificationRuleSuppressNoticesDescription": {}, - "notificationRuleInviteForMe": "எனக்கு அழைக்கவும்", - "@notificationRuleInviteForMe": {}, - "notificationRuleInviteForMeDescription": "ஒரு அறைக்கு அழைக்கப்படும்போது பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleInviteForMeDescription": {}, - "notificationRuleMemberEvent": "உறுப்பினர் நிகழ்வு", - "@notificationRuleMemberEvent": {}, - "notificationRuleMemberEventDescription": "உறுப்பினர் நிகழ்வுகளுக்கான அறிவிப்புகளை அடக்குகிறது.", - "@notificationRuleMemberEventDescription": {}, - "notificationRuleIsUserMention": "பயனர் குறிப்பு", - "@notificationRuleIsUserMention": {}, - "notificationRuleIsUserMentionDescription": "ஒரு செய்தியில் நேரடியாக குறிப்பிடப்படும்போது பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleIsUserMentionDescription": {}, - "notificationRuleContainsDisplayName": "காட்சி பெயரைக் கொண்டுள்ளது", - "@notificationRuleContainsDisplayName": {}, - "notificationRuleContainsDisplayNameDescription": "ஒரு செய்தியில் அவற்றின் காட்சி பெயர் இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleContainsDisplayNameDescription": {}, - "notificationRuleIsRoomMention": "அறை குறிப்பு", - "@notificationRuleIsRoomMention": {}, - "notificationRuleIsRoomMentionDescription": "ஒரு அறை குறிப்பு இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleIsRoomMentionDescription": {}, - "notificationRuleRoomnotif": "அறை அறிவிப்பு", - "@notificationRuleRoomnotif": {}, - "notificationRuleRoomnotifDescription": "ஒரு செய்தியில் '@ROOM' இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleRoomnotifDescription": {}, - "notificationRuleTombstone": "கல்லறை", - "@notificationRuleTombstone": {}, - "notificationRuleTombstoneDescription": "அறை செயலிழக்கச் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleTombstoneDescription": {}, - "notificationRuleReaction": "எதிர்வினை", - "@notificationRuleReaction": {}, - "notificationRuleReactionDescription": "எதிர்வினைகளுக்கான அறிவிப்புகளை அடக்குகிறது.", - "@notificationRuleReactionDescription": {}, - "notificationRuleRoomServerAcl": "அறை சேவையகம் ACL", - "@notificationRuleRoomServerAcl": {}, - "notificationRuleRoomServerAclDescription": "அறை சேவையக அணுகல் கட்டுப்பாட்டு பட்டியல்களுக்கான (ACL) அறிவிப்புகளை அடக்குகிறது.", - "@notificationRuleRoomServerAclDescription": {}, - "notificationRuleSuppressEdits": "திருத்தங்களை அடக்கவும்", - "@notificationRuleSuppressEdits": {}, - "notificationRuleSuppressEditsDescription": "திருத்தப்பட்ட செய்திகளுக்கான அறிவிப்புகளை அடக்குகிறது.", - "@notificationRuleSuppressEditsDescription": {}, - "notificationRuleCall": "அழை", - "@notificationRuleCall": {}, - "notificationRuleCallDescription": "அழைப்புகள் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleCallDescription": {}, - "notificationRuleEncryptedRoomOneToOne": "மறைகுறியாக்கப்பட்ட அறை ஒன்றுக்கு ஒன்று", - "@notificationRuleEncryptedRoomOneToOne": {}, - "notificationRuleEncryptedRoomOneToOneDescription": "மறைகுறியாக்கப்பட்ட ஒன்றுக்கு ஒன்று அறைகளில் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleEncryptedRoomOneToOneDescription": {}, - "notificationRuleRoomOneToOne": "அறை ஒன்று", - "@notificationRuleRoomOneToOne": {}, - "notificationRuleRoomOneToOneDescription": "ஒருவருக்கு ஒன்று அறைகளில் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleRoomOneToOneDescription": {}, - "notificationRuleMessage": "செய்தி", - "@notificationRuleMessage": {}, - "notificationRuleMessageDescription": "பொதுவான செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleMessageDescription": {}, - "notificationRuleEncrypted": "குறியாக்கப்பட்டது", - "@notificationRuleEncrypted": {}, - "notificationRuleEncryptedDescription": "மறைகுறியாக்கப்பட்ட அறைகளில் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleEncryptedDescription": {}, - "notificationRuleJitsi": "சியோட்ச்", - "@notificationRuleJitsi": {}, - "notificationRuleJitsiDescription": "சிட்சி விட்செட் நிகழ்வுகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", - "@notificationRuleJitsiDescription": {}, - "notificationRuleServerAcl": "சேவையக ACL நிகழ்வுகளை அடக்கவும்", - "@notificationRuleServerAcl": {}, - "notificationRuleServerAclDescription": "சேவையக ACL நிகழ்வுகளுக்கான அறிவிப்புகளை அடக்குகிறது.", - "@notificationRuleServerAclDescription": {}, - "unknownPushRule": "அறியப்படாத புச் விதி '{rule}'", - "@unknownPushRule": { - "type": "String", - "placeholders": { - "rule": { - "type": "String" - } - } - }, - "sentVoiceMessage": "🎙️{duration} - {sender} இலிருந்து குரல் செய்தி", - "@sentVoiceMessage": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - }, - "duration": { - "type": "String" - } - } - }, - "deletePushRuleCanNotBeUndone": "இந்த அறிவிப்பு அமைப்பை நீங்கள் நீக்கினால், இதை செயல்தவிர்க்க முடியாது.", - "@deletePushRuleCanNotBeUndone": {}, - "more": "மேலும்", - "@more": {}, - "shareKeysWith": "விசைகளைப் பகிரவும் ...", - "@shareKeysWith": {}, - "shareKeysWithDescription": "மறைகுறியாக்கப்பட்ட அரட்டைகளில் உங்கள் செய்திகளுடன் படிக்க எந்த சாதனங்களை நம்ப வேண்டும்?", - "@shareKeysWithDescription": {}, - "allDevices": "அனைத்து சாதனங்களும்", - "@allDevices": {}, - "crossVerifiedDevicesIfEnabled": "இயக்கப்பட்டால் சரிபார்க்கப்பட்ட சாதனங்களை குறுக்கு", - "@crossVerifiedDevicesIfEnabled": {}, - "crossVerifiedDevices": "குறுக்கு சரிபார்க்கப்பட்ட சாதனங்கள்", - "@crossVerifiedDevices": {}, - "verifiedDevicesOnly": "சரிபார்க்கப்பட்ட சாதனங்கள் மட்டுமே", - "@verifiedDevicesOnly": {}, - "takeAPhoto": "புகைப்படம் எடுக்கவும்", - "@takeAPhoto": {}, - "recordAVideo": "வீடியோவைப் பதிவுசெய்க", - "@recordAVideo": {}, - "optionalMessage": "(விரும்பினால்) செய்தி ...", - "@optionalMessage": {}, - "notSupportedOnThisDevice": "இந்த சாதனத்தில் ஆதரிக்கப்படவில்லை", - "@notSupportedOnThisDevice": {}, - "enterNewChat": "புதிய அரட்டையை உள்ளிடவும்", - "@enterNewChat": {}, - "approve": "ஒப்புதல்", - "@approve": {}, - "youHaveKnocked": "நீங்கள் தட்டிவிட்டீர்கள்", - "@youHaveKnocked": {}, - "pleaseWaitUntilInvited": "அறையில் இருந்து யாராவது உங்களை அழைக்கும் வரை தயவுசெய்து இப்போது காத்திருங்கள்.", - "@pleaseWaitUntilInvited": {}, - "commandHint_logout": "உங்கள் தற்போதைய சாதனத்தை பதிவு செய்க", - "@commandHint_logout": {}, - "commandHint_logoutall": "அனைத்து செயலில் உள்ள சாதனங்களையும் அனுப்புகிறது", - "@commandHint_logoutall": {}, - "displayNavigationRail": "மொபைலில் வழிசெலுத்தல் ரெயிலைக் காட்டு", - "@displayNavigationRail": {}, - "customReaction": "தனிப்பயன் எதிர்வினை", - "@customReaction": {}, - "moreEvents": "மேலும் நிகழ்வுகள்", - "@moreEvents": {}, - "declineInvitation": "அழைப்பை நிராகரிக்கவும்", - "@declineInvitation": {} -} + "accept": "ஏற்றுக்கொள்", + "@accept": { + "type": "String", + "placeholders": {} + }, + "about": "பற்றி", + "@about": { + "type": "String", + "placeholders": {} + }, + "sendCanceled": "அனுப்பப்பட்டது ரத்து செய்யப்பட்டது", + "chatDetails": "அரட்டை விவரங்கள்", + "@chatDetails": { + "type": "String", + "placeholders": {} + }, + "globalChatId": "உலகளாவிய அரட்டை ஐடி", + "accessAndVisibility": "அணுகல் மற்றும் தெரிவுநிலை", + "onlineKeyBackupEnabled": "நிகழ்நிலை விசை காப்புப்பிரதி இயக்கப்பட்டது", + "@onlineKeyBackupEnabled": { + "type": "String", + "placeholders": {} + }, + "recoveryKey": "மீட்பு விசை", + "setStatus": "நிலையை அமைக்கவும்", + "@setStatus": { + "type": "String", + "placeholders": {} + }, + "title": "பஞ்சுபோன்ற", + "@title": { + "description": "Title for the application", + "type": "String", + "placeholders": {} + }, + "verify": "சரிபார்க்கவும்", + "@verify": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "சரிபார்ப்பைத் தொடங்கவும்", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "unsupportedAndroidVersion": "ஆதரிக்கப்படாத ஆண்ட்ராய்டு பதிப்பு", + "invitedBy": "{user} அழைத்தார்", + "@invitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "commandHint_sendraw": "மூல சாதொபொகு ஐ அனுப்புங்கள்", + "passwordIsWrong": "நீங்கள் உள்ளிட்ட கடவுச்சொல் தவறு", + "completedKeyVerification": "{sender} நிறைவு செய்யப்பட்ட விசை சரிபார்ப்பு", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "incomingMessages": "உள்வரும் செய்திகள்", + "password": "கடவுச்சொல்", + "@password": { + "type": "String", + "placeholders": {} + }, + "emptyChat": "வெற்று அரட்டை", + "@emptyChat": { + "type": "String", + "placeholders": {} + }, + "encrypted": "குறியாக்கப்பட்டது", + "@encrypted": { + "type": "String", + "placeholders": {} + }, + "reject": "நிராகரிக்கவும்", + "@reject": { + "type": "String", + "placeholders": {} + }, + "importNow": "இப்போது இறக்குமதி", + "changedTheChatAvatar": "{username} அரட்டை அவதாரத்தை மாற்றியது", + "@changedTheChatAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "chooseAStrongPassword": "வலுவான கடவுச்சொல்லைத் தேர்வுசெய்க", + "@chooseAStrongPassword": { + "type": "String", + "placeholders": {} + }, + "commandHint_me": "உங்களை விவரிக்கவும்", + "@commandHint_me": { + "type": "String", + "description": "Usage hint for the command /me" + }, + "commandHint_unban": "இந்த அறையிலிருந்து கொடுக்கப்பட்ட பயனரைத் தடுக்கிறது", + "@commandHint_unban": { + "type": "String", + "description": "Usage hint for the command /unban" + }, + "countParticipants": "{count} பங்கேற்பாளர்கள்", + "@countParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "editDisplayname": "காட்சி பெயர் திருத்து", + "@editDisplayname": { + "type": "String", + "placeholders": {} + }, + "fileName": "கோப்பு பெயர்", + "@fileName": { + "type": "String", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{targetName} க்கான அழைப்பை {username} திரும்பப் பெற்றுள்ளார்", + "@hasWithdrawnTheInvitationFor": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "removedBy": "{username} ஆல் அகற்றப்பட்டது", + "@removedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "requestPermission": "இசைவு கோருங்கள்", + "@requestPermission": { + "type": "String", + "placeholders": {} + }, + "user": "பயனர்", + "optionalRedactReason": "(விரும்பினால்) இந்த செய்தியை மாற்றியமைப்பதற்கான காரணம் ...", + "device": "சாதனம்", + "@device": { + "type": "String", + "placeholders": {} + }, + "contactHasBeenInvitedToTheGroup": "குழுவிற்கு தொடர்பு அழைக்கப்பட்டுள்ளது", + "@contactHasBeenInvitedToTheGroup": { + "type": "String", + "placeholders": {} + }, + "passphraseOrKey": "கடவுச்சொல் அல்லது மீட்பு விசை", + "@passphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "select": "தேர்ந்தெடு", + "compareEmojiMatch": "தயவுசெய்து ஈமோசிகளை ஒப்பிடுக", + "@compareEmojiMatch": { + "type": "String", + "placeholders": {} + }, + "fromTheInvitation": "அழைப்பிலிருந்து", + "@fromTheInvitation": { + "type": "String", + "placeholders": {} + }, + "help": "உதவி", + "@help": { + "type": "String", + "placeholders": {} + }, + "invited": "அழைக்கப்பட்டார்", + "@invited": { + "type": "String", + "placeholders": {} + }, + "invitedUsersOnly": "பயனர்களை மட்டுமே அழைத்தது", + "@invitedUsersOnly": { + "type": "String", + "placeholders": {} + }, + "kickedAndBanned": "🙅 {username} உதைத்து {targetName} ஐத் தடை செய்தார்", + "@kickedAndBanned": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "mention": "குறிப்பு", + "@mention": { + "type": "String", + "placeholders": {} + }, + "newVerificationRequest": "புதிய சரிபார்ப்பு கோரிக்கை!", + "@newVerificationRequest": { + "type": "String", + "placeholders": {} + }, + "shareInviteLink": "இணைப்பைப் பகிரவும்", + "pickImage": "ஒரு படத்தைத் தேர்ந்தெடுக்கவும்", + "@pickImage": { + "type": "String", + "placeholders": {} + }, + "pin": "முள்", + "@pin": { + "type": "String", + "placeholders": {} + }, + "unavailable": "கிடைக்கவில்லை", + "@unavailable": { + "type": "String", + "placeholders": {} + }, + "voiceCall": "குரல் அழைப்பு", + "youKickedAndBanned": "🙅 நீங்கள் உதைத்து தடைசெய்துள்ளீர்கள் {user}", + "@youKickedAndBanned": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youKicked": "👞 {user}ஐ உதைத்துள்ளீர்கள்", + "@youKicked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "storeInAppleKeyChain": "ஆப்பிள் கீச்சினில் சேமிக்கவும்", + "searchForUsers": "@Users ஐத் தேடுங்கள் ...", + "pleaseEnterYourCurrentPassword": "உங்கள் தற்போதைய கடவுச்சொல்லை உள்ளிடவும்", + "anyoneCanJoin": "யார் வேண்டுமானாலும் சேரலாம்", + "@anyoneCanJoin": { + "type": "String", + "placeholders": {} + }, + "archive": "காப்பகம்", + "@archive": { + "type": "String", + "placeholders": {} + }, + "banFromChat": "அரட்டையிலிருந்து தடை", + "@banFromChat": { + "type": "String", + "placeholders": {} + }, + "cancel": "ரத்துசெய்", + "@cancel": { + "type": "String", + "placeholders": {} + }, + "edit": "தொகு", + "@edit": { + "type": "String", + "placeholders": {} + }, + "iHaveClickedOnLink": "நான் இணைப்பைக் சொடுக்கு செய்துள்ளேன்", + "@iHaveClickedOnLink": { + "type": "String", + "placeholders": {} + }, + "pleaseClickOnLink": "மின்னஞ்சலில் உள்ள இணைப்பைக் சொடுக்கு செய்து தொடரவும்.", + "@pleaseClickOnLink": { + "type": "String", + "placeholders": {} + }, + "changeTheme": "உங்கள் பாணியை மாற்றவும்", + "@changeTheme": { + "type": "String", + "placeholders": {} + }, + "fontSize": "எழுத்துரு அளவு", + "@fontSize": { + "type": "String", + "placeholders": {} + }, + "cantOpenUri": "யூரி {uri} வேலை ஐ திறக்க முடியாது", + "@cantOpenUri": { + "type": "String", + "placeholders": { + "uri": { + "type": "String" + } + } + }, + "repeatPassword": "மீண்டும் கடவுச்சொல்", + "youRejectedTheInvitation": "நீங்கள் அழைப்பை நிராகரித்தீர்கள்", + "confirmMatrixId": "உங்கள் கணக்கை நீக்க உங்கள் மேட்ரிக்ச் ஐடியை உறுதிப்படுத்தவும்.", + "supposedMxid": "இது {mxid} be ஆக இருக்க வேண்டும்", + "@supposedMxid": { + "type": "String", + "placeholders": { + "mxid": { + "type": "String" + } + } + }, + "commandHint_googly": "சில கூகிள் கண்களை அனுப்பவும்", + "commandHint_cuddle": "ஒரு கசப்பு அனுப்பவும்", + "importEmojis": "ஈமோசிகளை இறக்குமதி", + "exportEmotePack": "எமோட் பேக் .zip என ஏற்றுமதி", + "replace": "மாற்று", + "tryAgain": "மீண்டும் முயற்சிக்கவும்", + "pushNotificationsNotAvailable": "புச் அறிவிப்புகள் கிடைக்கவில்லை", + "blockUsername": "பயனர்பெயரை புறக்கணிக்கவும்", + "start": "தொடங்கு", + "chatBackup": "அரட்டை காப்புப்பிரதி", + "@chatBackup": { + "type": "String", + "placeholders": {} + }, + "send": "அனுப்பு", + "@send": { + "type": "String", + "placeholders": {} + }, + "theyDontMatch": "அவர்கள் பொருந்தவில்லை", + "@theyDontMatch": { + "type": "String", + "placeholders": {} + }, + "sendMessages": "செய்திகளை அனுப்பவும்", + "@sendMessages": { + "type": "String", + "placeholders": {} + }, + "fluffychat": "பஞ்சுபோன்ற", + "@fluffychat": { + "type": "String", + "placeholders": {} + }, + "downloadFile": "கோப்பைப் பதிவிறக்கவும்", + "@downloadFile": { + "type": "String", + "placeholders": {} + }, + "createNewSpace": "புதிய இடம்", + "@createNewSpace": { + "type": "String", + "placeholders": {} + }, + "synchronizingPleaseWait": "ஒத்திசைத்தல்… தயவுசெய்து காத்திருங்கள்.", + "@synchronizingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "unknownEncryptionAlgorithm": "அறியப்படாத குறியாக்க வழிமுறை", + "@unknownEncryptionAlgorithm": { + "type": "String", + "placeholders": {} + }, + "unverified": "சரிபார்க்கப்படாதது", + "unmuteChat": "மாறுதல் அரட்டை", + "@unmuteChat": { + "type": "String", + "placeholders": {} + }, + "verifyTitle": "பிற கணக்கை சரிபார்க்கிறது", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "videoCall": "வீடியோ அழைப்பு", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "பங்கேற்பாளர்கள் அனைவருக்கும் தெரியும்", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "voiceMessage": "குரல் செய்தி", + "@voiceMessage": { + "type": "String", + "placeholders": {} + }, + "reopenChat": "அரட்டையை மீண்டும் திறக்கவும்", + "formattedMessages": "வடிவமைக்கப்பட்ட செய்திகள்", + "darkTheme": "இருண்ட", + "@darkTheme": { + "type": "String", + "placeholders": {} + }, + "guestsAreForbidden": "விருந்தினர்கள் தடைசெய்யப்பட்டுள்ளனர்", + "@guestsAreForbidden": { + "type": "String", + "placeholders": {} + }, + "guestsCanJoin": "விருந்தினர்கள் சேரலாம்", + "@guestsCanJoin": { + "type": "String", + "placeholders": {} + }, + "commandHint_invite": "கொடுக்கப்பட்ட பயனரை இந்த அறைக்கு அழைக்கவும்", + "@commandHint_invite": { + "type": "String", + "description": "Usage hint for the command /invite" + }, + "commandHint_op": "கொடுக்கப்பட்ட பயனரின் ஆற்றல் மட்டத்தை அமைக்கவும் (இயல்புநிலை: 50)", + "@commandHint_op": { + "type": "String", + "description": "Usage hint for the command /op" + }, + "commandHint_plain": "வடிவமைக்கப்படாத உரையை அனுப்பவும்", + "@commandHint_plain": { + "type": "String", + "description": "Usage hint for the command /plain" + }, + "commandMissing": "{command} என்பது கட்டளை அல்ல.", + "@commandMissing": { + "type": "String", + "placeholders": { + "command": { + "type": "String" + } + }, + "description": "State that {command} is not a valid /command." + }, + "moderator": "மதிப்பீட்டாளர்", + "@moderator": { + "type": "String", + "placeholders": {} + }, + "shareLocation": "இருப்பிடத்தைப் பகிரவும்", + "@shareLocation": { + "type": "String", + "placeholders": {} + }, + "addEmail": "மின்னஞ்சல் சேர்க்கவும்", + "@addEmail": { + "type": "String", + "placeholders": {} + }, + "all": "அனைத்தும்", + "@all": { + "type": "String", + "placeholders": {} + }, + "lightTheme": "ஒளி", + "@lightTheme": { + "type": "String", + "placeholders": {} + }, + "allChats": "அனைத்து அரட்டைகளும்", + "@allChats": { + "type": "String", + "placeholders": {} + }, + "sendOnEnter": "Enter ஐ அனுப்பவும்", + "dehydrate": "ஏற்றுமதி அமர்வு மற்றும் சாதனத்தை துடைக்கவும்", + "ok": "சரி", + "@ok": { + "type": "String", + "placeholders": {} + }, + "configureChat": "அரட்டையை உள்ளமைக்கவும்", + "@configureChat": { + "type": "String", + "placeholders": {} + }, + "deviceId": "சாதன ஐடி", + "@deviceId": { + "type": "String", + "placeholders": {} + }, + "isTyping": "தட்டச்சு செய்கிறது…", + "@isTyping": { + "type": "String", + "placeholders": {} + }, + "joinedTheChat": "👋 {username} அரட்டையில் சேர்ந்தார்", + "@joinedTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "noConnectionToTheServer": "சேவையகத்துடன் எந்த தொடர்பும் இல்லை", + "@noConnectionToTheServer": { + "type": "String", + "placeholders": {} + }, + "noEmotesFound": "உணர்ச்சிகள் எதுவும் காணப்படவில்லை. 😕", + "@noEmotesFound": { + "type": "String", + "placeholders": {} + }, + "notifications": "அறிவிப்புகள்", + "@notifications": { + "type": "String", + "placeholders": {} + }, + "oopsPushError": "அச்சச்சோ! துரதிர்ச்டவசமாக, புச் அறிவிப்புகளை அமைக்கும் போது பிழை ஏற்பட்டது.", + "@oopsPushError": { + "type": "String", + "placeholders": {} + }, + "oopsSomethingWentWrong": "அச்சச்சோ, ஏதோ தவறு நடந்தது…", + "@oopsSomethingWentWrong": { + "type": "String", + "placeholders": {} + }, + "bundleName": "மூட்டை பெயர்", + "enableMultiAccounts": "(பீட்டா) இந்த சாதனத்தில் பல கணக்குகளை இயக்கவும்", + "remove": "அகற்று", + "@remove": { + "type": "String", + "placeholders": {} + }, + "recoveryKeyLost": "மீட்பு விசை இழந்ததா?", + "sendAMessage": "ஒரு செய்தியை அனுப்பவும்", + "@sendAMessage": { + "type": "String", + "placeholders": {} + }, + "spaceIsPublic": "இடம் பொது", + "@spaceIsPublic": { + "type": "String", + "placeholders": {} + }, + "transferFromAnotherDevice": "மற்றொரு சாதனத்திலிருந்து மாற்றவும்", + "@transferFromAnotherDevice": { + "type": "String", + "placeholders": {} + }, + "visibleForEveryone": "அனைவருக்கும் தெரியும்", + "@visibleForEveryone": { + "type": "String", + "placeholders": {} + }, + "weSentYouAnEmail": "நாங்கள் உங்களுக்கு ஒரு மின்னஞ்சல் அனுப்பினோம்", + "@weSentYouAnEmail": { + "type": "String", + "placeholders": {} + }, + "report": "அறிக்கை", + "verifyOtherDevice": "Sevice பிற சாதனத்தை சரிபார்க்கவும்", + "startedACall": "{senderName} அழைப்பைத் தொடங்கினார்", + "@startedACall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "userSentUnknownEvent": "{username} ஒரு {type} நிகழ்வை அனுப்பியது", + "@userSentUnknownEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "type": { + "type": "String" + } + } + }, + "verified": "சரிபார்க்கப்பட்டது", + "@verified": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "நீங்கள் வெற்றிகரமாக சரிபார்த்தீர்கள்!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerNumbers": "பங்குதாரர் எண்களை ஏற்றுக்கொள்வதற்காக காத்திருக்கிறார்…", + "@waitingPartnerNumbers": { + "type": "String", + "placeholders": {} + }, + "warning": "எச்சரிக்கை!", + "@warning": { + "type": "String", + "placeholders": {} + }, + "pinMessage": "அறைக்கு முள்", + "unlockOldMessages": "பழைய செய்திகளைத் திறக்கவும்", + "serverLimitReached": "சேவையக வரம்பு அடைந்தது! {seconds} விநாடிகள் காத்திருக்கிறது ...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "acceptedKeyVerification": "{sender} ஏற்றுக்கொள்ளப்பட்ட விசை சரிபார்ப்பு", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "copyToClipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கவும்", + "@copyToClipboard": { + "type": "String", + "placeholders": {} + }, + "createGroup": "குழுவை உருவாக்கவும்", + "editBundlesForAccount": "இந்த கணக்கிற்கான மூட்டைகளைத் திருத்தவும்", + "unpin": "மூள்நீக்கு", + "@unpin": { + "type": "String", + "placeholders": {} + }, + "emojis": "ஈமோசிகள்", + "jumpToLastReadMessage": "கடைசி வாசிப்பு செய்திக்கு செல்லவும்", + "commandHint_markasgroup": "குழுவாக குறி", + "commandHint_html": "உஉகுமொ வடிவமைக்கப்பட்ட உரையை அனுப்பவும்", + "@commandHint_html": { + "type": "String", + "description": "Usage hint for the command /html" + }, + "commandHint_kick": "இந்த அறையிலிருந்து கொடுக்கப்பட்ட பயனரை அகற்றவும்", + "@commandHint_kick": { + "type": "String", + "description": "Usage hint for the command /kick" + }, + "deleteMessage": "செய்தியை நீக்கு", + "@deleteMessage": { + "type": "String", + "placeholders": {} + }, + "messageInfo": "செய்தி தகவல்", + "sentAFile": "📁 {username} கோப்பை அனுப்பியுள்ளார்", + "@sentAFile": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "readUpToHere": "இங்கே படிக்கவும்", + "chatDescriptionHasBeenChanged": "அரட்டை விளக்கம் மாற்றப்பட்டது", + "reportMessage": "செய்தி அறிக்கை", + "@reportMessage": { + "type": "String", + "placeholders": {} + }, + "kickFromChat": "அரட்டையிலிருந்து கிக்", + "@kickFromChat": { + "type": "String", + "placeholders": {} + }, + "redactedAnEvent": "{username} ஒரு நிகழ்வை மறுவடிவமைத்தது", + "@redactedAnEvent": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "opacity": "ஒளிபுகாநிலை:", + "blur": "மங்கலானது:", + "setWallpaper": "வால்பேப்பரை அமைக்கவும்", + "statusExampleMessage": "இன்று நீங்கள் எப்படி இருக்கிறீர்கள்?", + "@statusExampleMessage": { + "type": "String", + "placeholders": {} + }, + "tooManyRequestsWarning": "பல கோரிக்கைகள். தயவுசெய்து பின்னர் மீண்டும் முயற்சிக்கவும்!", + "@tooManyRequestsWarning": { + "type": "String", + "placeholders": {} + }, + "unblockDevice": "சாதனத்தைத் தடைசெய்க", + "@unblockDevice": { + "type": "String", + "placeholders": {} + }, + "unknownDevice": "தெரியாத சாதனம்", + "@unknownDevice": { + "type": "String", + "placeholders": {} + }, + "storeSecurlyOnThisDevice": "இந்த சாதனத்தில் பாதுகாப்பாக சேமிக்கவும்", + "screenSharingTitle": "திரை பகிர்வு", + "newGroup": "புதிய குழு", + "noOtherDevicesFound": "வேறு சாதனங்கள் எதுவும் கிடைக்கவில்லை", + "sendRoomNotifications": "ஒரு @room அறிவிப்புகளை அனுப்பவும்", + "generatingVideoThumbnail": "வீடியோ சிறு உருவத்தை உருவாக்குதல் ...", + "reply": "பதில்", + "@reply": { + "type": "String", + "placeholders": {} + }, + "askSSSSSign": "மற்ற நபரில் கையெழுத்திட, தயவுசெய்து உங்கள் பாதுகாப்பான கடை பாச்ஃபிரேச் அல்லது மீட்பு விசையை உள்ளிடவும்.", + "@askSSSSSign": { + "type": "String", + "placeholders": {} + }, + "areGuestsAllowedToJoin": "விருந்தினர் பயனர்கள் சேர அனுமதிக்கப்படுகிறார்களா?", + "@areGuestsAllowedToJoin": { + "type": "String", + "placeholders": {} + }, + "areYouSureYouWantToLogout": "நீங்கள் நிச்சயமாக வெளியேற விரும்புகிறீர்களா?", + "@areYouSureYouWantToLogout": { + "type": "String", + "placeholders": {} + }, + "aboutHomeserver": "{homeserver} பற்றி", + "@aboutHomeserver": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "swipeRightToLeftToReply": "பதிலளிக்க வலமிருந்து இடமாக ச்வைப் செய்யவும்", + "unread": "படிக்காதது", + "changedTheChatDescriptionTo": "{username} பயனர்பெயர் the அரட்டை விளக்கத்தை மாற்றியது: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "description": { + "type": "String" + } + } + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "String", + "placeholders": { + "date": { + "type": "String" + }, + "timeOfDay": { + "type": "String" + } + } + }, + "deleteAccount": "கணக்கை நீக்கு", + "@deleteAccount": { + "type": "String", + "placeholders": {} + }, + "deviceKeys": "சாதன விசைகள்:", + "noUsersFoundWithQuery": "துரதிர்ச்டவசமாக \"{query}\" உடன் எந்த பயனரையும் காண முடியவில்லை. நீங்கள் ஒரு எழுத்துப்பிழை செய்தீர்களா என்பதை சரிபார்க்கவும்.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "jump": "தாவு", + "yourGlobalUserIdIs": "உங்கள் உலகளாவிய பயனர் ஐடி: ", + "publicSpaces": "பொது இடங்கள்", + "discover": "கண்டுபிடி", + "commandHint_unignore": "கொடுக்கப்பட்ட மேட்ரிக்ச் ஐடியை இணைக்கவும்", + "prepareSendingAttachment": "அனுப்பும் இணைப்பைத் தயாரிக்கவும் ...", + "sendingAttachment": "இணைப்பை அனுப்புகிறது ...", + "continueText": "தொடரவும்", + "welcomeText": "ஏய் ஏய் 👋 இது பஞ்சுபோன்றது. Https://matrix.org உடன் இணக்கமான எந்த ஓம்சர்வரில் நீங்கள் உள்நுழையலாம். பின்னர் யாருடனும் அரட்டையடிக்கவும். இது ஒரு பெரிய பரவலாக்கப்பட்ட செய்தியிடல் நெட்வொர்க்!", + "name": "பெயர்", + "username": "பயனர்பெயர்", + "@username": { + "type": "String", + "placeholders": {} + }, + "whoCanPerformWhichAction": "எந்த செயலைச் செய்ய முடியும்", + "@whoCanPerformWhichAction": { + "type": "String", + "placeholders": {} + }, + "whoIsAllowedToJoinThisGroup": "இந்த குழுவில் சேர யார் அனுமதிக்கப்படுகிறார்கள்", + "@whoIsAllowedToJoinThisGroup": { + "type": "String", + "placeholders": {} + }, + "youAreNoLongerParticipatingInThisChat": "இந்த அரட்டையில் நீங்கள் இனி பங்கேற்கவில்லை", + "@youAreNoLongerParticipatingInThisChat": { + "type": "String", + "placeholders": {} + }, + "yourPublicKey": "உங்கள் பொது விசை", + "@yourPublicKey": { + "type": "String", + "placeholders": {} + }, + "time": "நேரம்", + "openChat": "திறந்த அரட்டை", + "markAsRead": "படித்தபடி குறி", + "reportUser": "பயனர் புகாரளிக்கவும்", + "dismiss": "தள்ளுபடி", + "reactedWith": "{sender} {reaction} உடன் பதிலளித்தார்", + "@reactedWith": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "reaction": { + "type": "String" + } + } + }, + "placeCall": "அழைப்பு இடு", + "videoCallsBetaWarning": "வீடியோ அழைப்புகள் தற்போது பீட்டாவில் உள்ளன என்பதை நினைவில் கொள்க. அவர்கள் எதிர்பார்த்தபடி வேலை செய்யக்கூடாது அல்லது எல்லா தளங்களிலும் வேலை செய்யக்கூடாது.", + "experimentalVideoCalls": "சோதனை வீடியோ அழைப்புகள்", + "noOneCanJoin": "யாரும் சேர முடியாது", + "newSpace": "புதிய இடம்", + "wasDirectChatDisplayName": "வெற்று அரட்டை ({oldDisplayName})", + "@wasDirectChatDisplayName": { + "type": "String", + "placeholders": { + "oldDisplayName": { + "type": "String" + } + } + }, + "openLinkInBrowser": "உலாவியில் திறந்த இணைப்பை திறக்கவும்", + "reportErrorDescription": "😭 ஓ இல்லை. ஏதோ தவறு நடந்தது. நீங்கள் விரும்பினால், இந்த பிழையை டெவலப்பர்களிடம் புகாரளிக்கலாம்.", + "invite": "அழைக்கவும்", + "wrongPinEntered": "தவறான முள் நுழைந்தது! {seconds} விநாடிகளில் மீண்டும் முயற்சிக்கவும் ...", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "pleaseEnterANumber": "தயவுசெய்து 0 ஐ விட அதிகமான எண்ணை உள்ளிடவும்", + "kickUserDescription": "பயனர் அரட்டையிலிருந்து வெளியேற்றப்படுகிறார், ஆனால் தடை செய்யப்படவில்லை. பொது அரட்டைகளில், பயனர் எந்த நேரத்திலும் மீண்டும் சேரலாம்.", + "learnMore": "மேலும் அறிக", + "chatCanBeDiscoveredViaSearchOnServer": "{server}", + "@chatCanBeDiscoveredViaSearchOnServer": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "knockRestricted": "நாக் தடை", + "bannedUser": "{username} தடைசெய்யப்பட்ட {targetName}", + "@bannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "blockDevice": "தொகுதி சாதனம்", + "@blockDevice": { + "type": "String", + "placeholders": {} + }, + "blocked": "தடுக்கப்பட்டது", + "@blocked": { + "type": "String", + "placeholders": {} + }, + "changeDeviceName": "சாதனத்தின் பெயரை மாற்றவும்", + "@changeDeviceName": { + "type": "String", + "placeholders": {} + }, + "changedTheDisplaynameTo": "{username} அவற்றின் காட்சி பெயர்: '{displayname}'", + "@changedTheDisplaynameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "displayname": { + "type": "String" + } + } + }, + "changedTheGuestAccessRules": "{username} விருந்தினர் அணுகல் விதிகளை மாற்றியது", + "@changedTheGuestAccessRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheProfileAvatar": "{username} அவர்களின் அவதாரத்தை மாற்றியது", + "@changedTheProfileAvatar": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheRoomAliases": "{username} அறை மாற்றுப்பெயர்களை மாற்றியது", + "@changedTheRoomAliases": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changeTheNameOfTheGroup": "குழுவின் பெயரை மாற்றவும்", + "@changeTheNameOfTheGroup": { + "type": "String", + "placeholders": {} + }, + "chats": "அரட்டைகள்", + "@chats": { + "type": "String", + "placeholders": {} + }, + "clearArchive": "தெளிவான காப்பகம்", + "close": "மூடு", + "@close": { + "type": "String", + "placeholders": {} + }, + "commandHint_create": "வெற்று குழு அரட்டையை உருவாக்கவும்\n குறியாக்கத்தை முடக்க-இல்லை-குறியாக்கத்தைப் பயன்படுத்தவும்", + "@commandHint_create": { + "type": "String", + "description": "Usage hint for the command /create" + }, + "compareNumbersMatch": "எண்களை ஒப்பிடுக", + "@compareNumbersMatch": { + "type": "String", + "placeholders": {} + }, + "copiedToClipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது", + "@copiedToClipboard": { + "type": "String", + "placeholders": {} + }, + "copy": "நகலெடு", + "@copy": { + "type": "String", + "placeholders": {} + }, + "couldNotDecryptMessage": "செய்தியை மறைகுறியாக்க முடியவில்லை: {error}", + "@couldNotDecryptMessage": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "create": "உருவாக்கு", + "@create": { + "type": "String", + "placeholders": {} + }, + "chatPermissions": "அரட்டை அனுமதிகள்", + "editRoomAliases": "அறை மாற்றுப்பெயர்களைத் திருத்து", + "@editRoomAliases": { + "type": "String", + "placeholders": {} + }, + "editRoomAvatar": "அறை அவதார் திருத்து", + "@editRoomAvatar": { + "type": "String", + "placeholders": {} + }, + "forward": "முன்னோக்கி", + "@forward": { + "type": "String", + "placeholders": {} + }, + "fromJoining": "சேருவதிலிருந்து", + "@fromJoining": { + "type": "String", + "placeholders": {} + }, + "groupWith": "{displayname} உடன் குழு", + "@groupWith": { + "type": "String", + "placeholders": { + "displayname": { + "type": "String" + } + } + }, + "hideRedactedMessages": "சரிசெய்யப்பட்ட செய்திகளை மறைக்கவும்", + "hideRedactedMessagesBody": "யாராவது ஒரு செய்தியை மாற்றியமைத்தால், இந்த செய்தி இனி அரட்டையில் காணப்படாது.", + "howOffensiveIsThisContent": "இந்த உள்ளடக்கம் எவ்வளவு ஆபத்தானது?", + "@howOffensiveIsThisContent": { + "type": "String", + "placeholders": {} + }, + "inoffensive": "செயலற்றது", + "@inoffensive": { + "type": "String", + "placeholders": {} + }, + "inviteContact": "தொடர்பை அழைக்கவும்", + "@inviteContact": { + "type": "String", + "placeholders": {} + }, + "kicked": "👞 {username} {targetName} ஐ உதைத்தார்", + "@kicked": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "lastActiveAgo": "கடைசியாக செயலில்: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "String", + "placeholders": { + "localizedTimeShort": { + "type": "String" + } + } + }, + "leftTheChat": "அரட்டையை விட்டு வெளியேறினார்", + "@leftTheChat": { + "type": "String", + "placeholders": {} + }, + "loadCountMoreParticipants": "ஏற்றவும் {count} மேலும் பங்கேற்பாளர்கள்", + "@loadCountMoreParticipants": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dehydrateWarning": "இந்த செயலை செயல்தவிர்க்க முடியாது. காப்புப்பிரதி கோப்பை பாதுகாப்பாக சேமித்து வைக்கவும்.", + "loadMore": "மேலும் ஏற்றவும்…", + "@loadMore": { + "type": "String", + "placeholders": {} + }, + "logout": "வெளியேற்றம்", + "@logout": { + "type": "String", + "placeholders": {} + }, + "messagesStyle": "செய்திகள்:", + "needPantalaimonWarning": "இப்போதைக்கு இறுதி முதல் இறுதி குறியாக்கத்தைப் பயன்படுத்த உங்களுக்கு பாண்டலாயமன் தேவை என்பதை நினைவில் கொள்க.", + "@needPantalaimonWarning": { + "type": "String", + "placeholders": {} + }, + "newMessageInFluffyChat": "Fuf பஞ்சுபோன்ற புதிய செய்தி", + "@newMessageInFluffyChat": { + "type": "String", + "placeholders": {} + }, + "noEncryptionForPublicRooms": "அறை இனி பகிரங்கமாக அணுக முடியாதவுடன் மட்டுமே நீங்கள் குறியாக்கத்தை செயல்படுத்த முடியும்.", + "@noEncryptionForPublicRooms": { + "type": "String", + "placeholders": {} + }, + "noMatrixServer": "{server1} என்பது மேட்ரிக்ஸ் சர்வர் இல்லை, அதற்கு பதிலாக {server2} ஐ பயன்படுத்தவா?", + "@noMatrixServer": { + "type": "String", + "placeholders": { + "server1": { + "type": "String" + }, + "server2": { + "type": "String" + } + } + }, + "noPermission": "இசைவு இல்லை", + "@noPermission": { + "type": "String", + "placeholders": {} + }, + "noRoomsFound": "அறைகள் எதுவும் கிடைக்கவில்லை…", + "@noRoomsFound": { + "type": "String", + "placeholders": {} + }, + "numUsersTyping": "{count} பயனர்கள் தட்டச்சு செய்கிறார்கள்…", + "@numUsersTyping": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "offensive": "தாக்குதல்", + "@offensive": { + "type": "String", + "placeholders": {} + }, + "openCamera": "திறந்த கேமரா", + "@openCamera": { + "type": "String", + "placeholders": {} + }, + "addAccount": "கணக்கைச் சேர்க்கவும்", + "openInMaps": "வரைபடங்களில் திறந்திருக்கும்", + "@openInMaps": { + "type": "String", + "placeholders": {} + }, + "link": "இணைப்பு", + "serverRequiresEmail": "இந்த சேவையகம் பதிவுக்கு உங்கள் மின்னஞ்சல் முகவரியை சரிபார்க்க வேண்டும்.", + "passwordForgotten": "கடவுச்சொல் மறந்துவிட்டது", + "@passwordForgotten": { + "type": "String", + "placeholders": {} + }, + "passwordHasBeenChanged": "கடவுச்சொல் மாற்றப்பட்டுள்ளது", + "@passwordHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "pleaseChooseAPasscode": "பாச் குறியீட்டைத் தேர்வுசெய்க", + "@pleaseChooseAPasscode": { + "type": "String", + "placeholders": {} + }, + "publicRooms": "பொது அறைகள்", + "@publicRooms": { + "type": "String", + "placeholders": {} + }, + "removeAllOtherDevices": "மற்ற எல்லா சாதனங்களையும் அகற்றவும்", + "@removeAllOtherDevices": { + "type": "String", + "placeholders": {} + }, + "roomHasBeenUpgraded": "அறை மேம்படுத்தப்பட்டுள்ளது", + "@roomHasBeenUpgraded": { + "type": "String", + "placeholders": {} + }, + "roomVersion": "அறை பதிப்பு", + "@roomVersion": { + "type": "String", + "placeholders": {} + }, + "saveFile": "கோப்பை சேமி", + "@saveFile": { + "type": "String", + "placeholders": {} + }, + "sentAnAudio": "🎤 {username} ஆடியோவை அனுப்பியுள்ளார்", + "@sentAnAudio": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAPicture": "🖼️ {username} படத்தை அனுப்பியுள்ளார்", + "@sentAPicture": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentAVideo": "🎥 {username} ஒரு வீடியோவை அனுப்பியுள்ளார்", + "@sentAVideo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "settings": "அமைப்புகள்", + "@settings": { + "type": "String", + "placeholders": {} + }, + "sharedTheLocation": "{username} அவற்றின் இருப்பிடத்தைப் பகிர்ந்து கொண்டது", + "@sharedTheLocation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "showPassword": "கடவுச்சொல்லைக் காட்டு", + "@showPassword": { + "type": "String", + "placeholders": {} + }, + "submit": "சமர்ப்பிக்கவும்", + "@submit": { + "type": "String", + "placeholders": {} + }, + "tryToSendAgain": "மீண்டும் அனுப்ப முயற்சிக்கவும்", + "@tryToSendAgain": { + "type": "String", + "placeholders": {} + }, + "sendTypingNotifications": "தட்டச்சு அறிவிப்புகளை அனுப்பவும்", + "enterAnEmailAddress": "மின்னஞ்சல் முகவரியை உள்ளிடவும்", + "@enterAnEmailAddress": { + "type": "String", + "placeholders": {} + }, + "blockListDescription": "உங்களை தொந்தரவு செய்யும் பயனர்களைத் தடுக்கலாம். உங்கள் தனிப்பட்ட தொகுதி பட்டியலில் பயனர்களிடமிருந்து எந்த செய்திகளையும் அல்லது அறை அழைப்புகளையும் நீங்கள் பெற முடியாது.", + "incorrectPassphraseOrKey": "தவறான கடவுச்சொல் அல்லது மீட்பு விசை", + "@incorrectPassphraseOrKey": { + "type": "String", + "placeholders": {} + }, + "loadingPleaseWait": "ஏற்றுகிறது… தயவுசெய்து காத்திருங்கள்.", + "@loadingPleaseWait": { + "type": "String", + "placeholders": {} + }, + "no": "இல்லை", + "@no": { + "type": "String", + "placeholders": {} + }, + "youHaveBeenBannedFromThisChat": "இந்த அரட்டையிலிருந்து உங்களுக்கு தடை விதிக்கப்பட்டுள்ளது", + "@youHaveBeenBannedFromThisChat": { + "type": "String", + "placeholders": {} + }, + "messageType": "செய்தி வகை", + "databaseMigrationTitle": "தரவுத்தளம் உகந்ததாக உள்ளது", + "usersMustKnock": "பயனர்கள் தட்ட வேண்டும்", + "allSpaces": "அனைத்து இடங்களும்", + "importFromZipFile": ".சிப் கோப்பிலிருந்து இறக்குமதி", + "activatedEndToEndEncryption": "{username} இறுதி குறியாக்கத்திற்கு செயல்படுத்தப்பட்ட முடிவு", + "@activatedEndToEndEncryption": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "addToSpace": "விண்வெளியில் சேர்க்கவும்", + "commandHint_hug": "கட்டிப்பிடிக்கவும்", + "cuddleContent": "{senderName} பெயர் you உங்களை கசக்குகிறது", + "@cuddleContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "hugContent": "{senderName} உங்களை அணைத்துக்கொள்கிறது", + "@hugContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "appLock": "பயன்பாட்டு பூட்டு", + "@appLock": { + "type": "String", + "placeholders": {} + }, + "appLockDescription": "முள் குறியீட்டைக் கொண்டு பயன்படுத்தாதபோது பயன்பாட்டைப் பூட்டவும்", + "googlyEyesContent": "{senderName} உங்களுக்கு கூகிள் கண்களை அனுப்புகிறது", + "@googlyEyesContent": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "areYouSure": "நீங்கள் உறுதியாக இருக்கிறீர்களா?", + "@areYouSure": { + "type": "String", + "placeholders": {} + }, + "askVerificationRequest": "{username}பயனர்பெயர் இருந்து இலிருந்து இந்த சரிபார்ப்பு கோரிக்கையை ஏற்றுக்கொள்ளவா?", + "@askVerificationRequest": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "autoplayImages": "அனிமேசன் செய்யப்பட்ட ச்டிக்கர்கள் மற்றும் உணர்ச்சிகளை தானாக இயக்கவும்", + "@autoplayImages": { + "type": "String", + "placeholder": {} + }, + "badServerLoginTypesException": "உள்நாட்டு வகைகளை ஓம்சர்வர் ஆதரிக்கிறது:\n {serverVersions}\n ஆனால் இந்த பயன்பாடு மட்டுமே ஆதரிக்கிறது:\n {supportedVersions}", + "@badServerLoginTypesException": { + "type": "String", + "placeholders": { + "serverVersions": { + "type": "String" + }, + "supportedVersions": { + "type": "String" + } + } + }, + "noChatsFoundHere": "இங்கே அரட்டைகள் எதுவும் காணப்படவில்லை. கீழே உள்ள பொத்தானைப் பயன்படுத்தி ஒருவருடன் புதிய அரட்டையைத் தொடங்கவும். ⤵️", + "space": "இடைவெளி", + "banned": "தடைசெய்யப்பட்டது", + "@banned": { + "type": "String", + "placeholders": {} + }, + "changedTheChatNameTo": "{username} அரட்டை பெயரை மாற்றியது: '{chatname}'", + "@changedTheChatNameTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "chatname": { + "type": "String" + } + } + }, + "changedTheHistoryVisibilityTo": "{username} வரலாற்று தெரிவுநிலையை மாற்றியது: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheJoinRules": "{username} சேர விதிகளை மாற்றியது", + "@changedTheJoinRules": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheJoinRulesTo": "{username} சேர விதிகளை மாற்றியது: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "joinRules": { + "type": "String" + } + } + }, + "changedTheRoomInvitationLink": "{username} அழைப்பிதழ் இணைப்பை மாற்றியது", + "@changedTheRoomInvitationLink": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changePassword": "கடவுச்சொல்லை மாற்றவும்", + "@changePassword": { + "type": "String", + "placeholders": {} + }, + "changeTheHomeserver": "ஓம்சர்வரை மாற்றவும்", + "@changeTheHomeserver": { + "type": "String", + "placeholders": {} + }, + "changeYourAvatar": "உங்கள் அவதாரத்தை மாற்றவும்", + "@changeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "channelCorruptedDecryptError": "குறியாக்கம் சிதைந்துள்ளது", + "@channelCorruptedDecryptError": { + "type": "String", + "placeholders": {} + }, + "chat": "அரட்டை", + "@chat": { + "type": "String", + "placeholders": {} + }, + "yourChatBackupHasBeenSetUp": "உங்கள் அரட்டை காப்புப்பிரதி அமைக்கப்பட்டுள்ளது.", + "chatBackupDescription": "உங்கள் செய்திகள் மீட்பு விசையுடன் பாதுகாக்கப்பட்டுள்ளன. தயவு செய்து அதை இழக்காமல் பார்த்துக் கொள்ளுங்கள்.", + "@chatBackupDescription": { + "type": "String", + "placeholders": {} + }, + "commandHint_markasdm": "கொடுக்கப்பட்ட மேட்ரிக்சிற்கான நேரடி செய்தி அறையாக குறிக்கவும்", + "commandHint_ban": "கொடுக்கப்பட்ட பயனரை இந்த அறையிலிருந்து தடை செய்யுங்கள்", + "@commandHint_ban": { + "type": "String", + "description": "Usage hint for the command /ban" + }, + "commandHint_clearcache": "தெளிவான தற்காலிக சேமிப்பு", + "@commandHint_clearcache": { + "type": "String", + "description": "Usage hint for the command /clearcache" + }, + "commandHint_discardsession": "அமர்வை நிராகரிக்கவும்", + "@commandHint_discardsession": { + "type": "String", + "description": "Usage hint for the command /discardsession" + }, + "commandHint_myroomavatar": "இந்த அறைக்கு உங்கள் படத்தை அமைக்கவும் (mxc-uri எழுதியது)", + "@commandHint_myroomavatar": { + "type": "String", + "description": "Usage hint for the command /myroomavatar" + }, + "commandHint_myroomnick": "இந்த அறைக்கு உங்கள் காட்சி பெயரை அமைக்கவும்", + "@commandHint_myroomnick": { + "type": "String", + "description": "Usage hint for the command /myroomnick" + }, + "commandInvalid": "கட்டளை தவறானது", + "@commandInvalid": { + "type": "String" + }, + "contentHasBeenReported": "உள்ளடக்கம் சேவையக நிர்வாகிகளுக்கு தெரிவிக்கப்பட்டுள்ளது", + "@contentHasBeenReported": { + "type": "String", + "placeholders": {} + }, + "createdTheChat": "💬 {username} அரட்டையை உருவாக்கினார்", + "@createdTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "currentlyActive": "தற்போது செயலில் உள்ளது", + "@currentlyActive": { + "type": "String", + "placeholders": {} + }, + "deactivateAccountWarning": "இது உங்கள் பயனர் கணக்கை செயலிழக்கச் செய்யும். இதை செயல்தவிர்க்க முடியாது! நீங்கள் உறுதியாக இருக்கிறீர்களா?", + "@deactivateAccountWarning": { + "type": "String", + "placeholders": {} + }, + "defaultPermissionLevel": "புதிய பயனர்களுக்கான இயல்புநிலை இசைவு நிலை", + "@defaultPermissionLevel": { + "type": "String", + "placeholders": {} + }, + "delete": "நீக்கு", + "@delete": { + "type": "String", + "placeholders": {} + }, + "devices": "சாதனங்கள்", + "@devices": { + "type": "String", + "placeholders": {} + }, + "directChats": "நேரடி அரட்டைகள்", + "@directChats": { + "type": "String", + "placeholders": {} + }, + "displaynameHasBeenChanged": "காட்சி பெயர் மாற்றப்பட்டுள்ளது", + "@displaynameHasBeenChanged": { + "type": "String", + "placeholders": {} + }, + "editBlockedServers": "தடுக்கப்பட்ட சேவையகங்களைத் திருத்து", + "@editBlockedServers": { + "type": "String", + "placeholders": {} + }, + "emoteExists": "எமோட் ஏற்கனவே உள்ளது!", + "@emoteExists": { + "type": "String", + "placeholders": {} + }, + "emoteInvalid": "தவறான எமோட் சார்ட்கோட்!", + "@emoteInvalid": { + "type": "String", + "placeholders": {} + }, + "emoteKeyboardNoRecents": "அண்மைக் காலத்தில் பயன்படுத்தப்பட்ட உணர்ச்சிகள் இங்கே தோன்றும் ...", + "@emoteKeyboardNoRecents": { + "type": "String", + "placeholders": {} + }, + "emotePacks": "அறைக்கு எமோட் பொதிகள்", + "@emotePacks": { + "type": "String", + "placeholders": {} + }, + "emoteSettings": "எமோட் அமைப்புகள்", + "@emoteSettings": { + "type": "String", + "placeholders": {} + }, + "accessAndVisibilityDescription": "இந்த அரட்டையில் யார் சேர அனுமதிக்கப்படுகிறார்கள், அரட்டையை எவ்வாறு கண்டுபிடிப்பது.", + "calls": "அழைப்புகள்", + "customEmojisAndStickers": "தனிப்பயன் ஈமோசிகள் மற்றும் ச்டிக்கர்கள்", + "customEmojisAndStickersBody": "எந்தவொரு அரட்டையிலும் பயன்படுத்தக்கூடிய தனிப்பயன் ஈமோசிகள் அல்லது ச்டிக்கர்களைச் சேர்க்கவும் அல்லது பகிரவும்.", + "emoteShortcode": "சார்ட்கோட் எமோட்", + "@emoteShortcode": { + "type": "String", + "placeholders": {} + }, + "enableEmotesGlobally": "உலகளவில் எமோட் பேக்கை இயக்கவும்", + "@enableEmotesGlobally": { + "type": "String", + "placeholders": {} + }, + "enableEncryption": "குறியாக்கத்தை இயக்கவும்", + "@enableEncryption": { + "type": "String", + "placeholders": {} + }, + "enableEncryptionWarning": "நீங்கள் இனி குறியாக்கத்தை முடக்க முடியாது. நீங்கள் உறுதியாக இருக்கிறீர்களா?", + "@enableEncryptionWarning": { + "type": "String", + "placeholders": {} + }, + "encryptionNotEnabled": "குறியாக்கம் இயக்கப்படவில்லை", + "@encryptionNotEnabled": { + "type": "String", + "placeholders": {} + }, + "encryption": "குறியாக்கம்", + "@encryption": { + "type": "String", + "placeholders": {} + }, + "endedTheCall": "{senderName} அழைப்பை முடித்தார்", + "@endedTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "homeserver": "ஓம்சர்வர்", + "errorObtainingLocation": "இருப்பிடத்தைப் பெறுவதில் பிழை: {error}", + "@errorObtainingLocation": { + "type": "String", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "everythingReady": "எல்லாம் தயாராக!", + "@everythingReady": { + "type": "String", + "placeholders": {} + }, + "extremeOffensive": "மிகவும் தாக்குதல்", + "@extremeOffensive": { + "type": "String", + "placeholders": {} + }, + "group": "குழு", + "@group": { + "type": "String", + "placeholders": {} + }, + "chatDescription": "அரட்டை விளக்கம்", + "groupIsPublic": "குழு பொது", + "@groupIsPublic": { + "type": "String", + "placeholders": {} + }, + "hideRedactedEvents": "திருத்தப்பட்ட நிகழ்வுகளை மறைக்கவும்", + "@hideRedactedEvents": { + "type": "String", + "placeholders": {} + }, + "hideInvalidOrUnknownMessageFormats": "தவறான அல்லது அறியப்படாத செய்தி வடிவங்களை மறைக்கவும்", + "id": "ஐடி", + "@id": { + "type": "String", + "placeholders": {} + }, + "block": "தொகுதி", + "inviteContactToGroup": "{groupName} க்கு தொடர்பை அழை", + "@inviteContactToGroup": { + "type": "String", + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "noChatDescriptionYet": "அரட்டை விளக்கம் இதுவரை உருவாக்கப்படவில்லை.", + "invalidServerName": "தவறான சேவையக பெயர்", + "redactMessageDescription": "இந்த உரையாடலில் பங்கேற்பாளர்கள் அனைவருக்கும் செய்தி திருத்தப்படும். இதை செயல்தவிர்க்க முடியாது.", + "invitedUser": "📩 {username} {targetName} அழைக்கப்பட்டார்", + "@invitedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "inviteText": "{username} உங்களை பஞ்சுபோன்றதாக அழைத்தது.\n 1. FulufyChat.im ஐப் பார்வையிட்டு பயன்பாட்டை நிறுவவும்\n 2. பதிவு செய்யுங்கள் அல்லது உள்நுழைக\n 3. அழைப்பிதழ் இணைப்பைத் திறக்கவும்:\n {link}", + "@inviteText": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "link": { + "type": "String" + } + } + }, + "joinRoom": "அறையில் சேரவும்", + "@joinRoom": { + "type": "String", + "placeholders": {} + }, + "leave": "விடுப்பு", + "@leave": { + "type": "String", + "placeholders": {} + }, + "hydrate": "காப்பு கோப்பிலிருந்து மீட்டமைக்கவும்", + "locationDisabledNotice": "இருப்பிட சேவைகள் முடக்கப்பட்டுள்ளன. தயவுசெய்து உங்கள் இருப்பிடத்தைப் பகிர்ந்து கொள்ள அவர்களுக்கு உதவவும்.", + "@locationDisabledNotice": { + "type": "String", + "placeholders": {} + }, + "locationPermissionDeniedNotice": "இருப்பிட இசைவு மறுக்கப்பட்டது. உங்கள் இருப்பிடத்தைப் பகிர்ந்து கொள்ள தயவுசெய்து அவர்களுக்கு வழங்குங்கள்.", + "@locationPermissionDeniedNotice": { + "type": "String", + "placeholders": {} + }, + "login": "புகுபதிவு", + "@login": { + "type": "String", + "placeholders": {} + }, + "logInTo": "{homeserver} இல் உள்நுழைக", + "@logInTo": { + "type": "String", + "placeholders": { + "homeserver": { + "type": "String" + } + } + }, + "messages": "செய்திகள்", + "@messages": { + "type": "String", + "placeholders": {} + }, + "muteChat": "முடக்கு அரட்டை", + "@muteChat": { + "type": "String", + "placeholders": {} + }, + "newChat": "புதிய அரட்டை", + "@newChat": { + "type": "String", + "placeholders": {} + }, + "next": "அடுத்தது", + "@next": { + "type": "String", + "placeholders": {} + }, + "none": "எதுவுமில்லை", + "@none": { + "type": "String", + "placeholders": {} + }, + "noPasswordRecoveryDescription": "உங்கள் கடவுச்சொல்லை மீட்டெடுப்பதற்கான வழியை நீங்கள் இன்னும் சேர்க்கவில்லை.", + "@noPasswordRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "openAppToReadMessages": "செய்திகளைப் படிக்க பயன்பாட்டைத் திறக்கவும்", + "@openAppToReadMessages": { + "type": "String", + "placeholders": {} + }, + "oneClientLoggedOut": "உங்கள் வாடிக்கையாளர்களில் ஒருவர் உள்நுழைந்துள்ளார்", + "addToBundle": "மூட்டையில் சேர்க்கவும்", + "or": "அல்லது", + "@or": { + "type": "String", + "placeholders": {} + }, + "overview": "கண்ணோட்டம்", + "passwordRecoverySettings": "கடவுச்சொல் மீட்பு அமைப்புகள்", + "passwordRecovery": "கடவுச்சொல் மீட்பு", + "@passwordRecovery": { + "type": "String", + "placeholders": {} + }, + "play": "{fileName} இயக்கு", + "@play": { + "type": "String", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pleaseEnter4Digits": "பயன்பாட்டு பூட்டை முடக்க 4 இலக்கங்களை உள்ளிடவும் அல்லது காலியாக விடவும்.", + "@pleaseEnter4Digits": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPassword": "உங்கள் கடவுச்சொல்லை உள்ளிடவும்", + "@pleaseEnterYourPassword": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourPin": "உங்கள் முள் உள்ளிடவும்", + "@pleaseEnterYourPin": { + "type": "String", + "placeholders": {} + }, + "pleaseEnterYourUsername": "உங்கள் பயனர்பெயரை உள்ளிடவும்", + "@pleaseEnterYourUsername": { + "type": "String", + "placeholders": {} + }, + "pleaseFollowInstructionsOnWeb": "வலைத்தளத்தின் வழிமுறைகளைப் பின்பற்றி அடுத்து தட்டவும்.", + "@pleaseFollowInstructionsOnWeb": { + "type": "String", + "placeholders": {} + }, + "privacy": "தனியுரிமை", + "@privacy": { + "type": "String", + "placeholders": {} + }, + "reason": "காரணம்", + "@reason": { + "type": "String", + "placeholders": {} + }, + "redactedByBecause": "{username} ஆல் திருத்தப்பட்டது ஏனெனில்: \"{reason}\"", + "@redactedByBecause": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "reason": { + "type": "String" + } + } + }, + "register": "பதிவு செய்யுங்கள்", + "@register": { + "type": "String", + "placeholders": {} + }, + "rejectedTheInvitation": "{username} அழைப்பை நிராகரித்தது", + "@rejectedTheInvitation": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "unbanFromChat": "அரட்டையிலிருந்து தடையின்றி", + "@unbanFromChat": { + "type": "String", + "placeholders": {} + }, + "removeYourAvatar": "உங்கள் அவதாரத்தை அகற்று", + "@removeYourAvatar": { + "type": "String", + "placeholders": {} + }, + "replaceRoomWithNewerVersion": "புதிய பதிப்போடு அறையை மாற்றவும்", + "@replaceRoomWithNewerVersion": { + "type": "String", + "placeholders": {} + }, + "sendAsText": "உரையாக அனுப்பவும்", + "@sendAsText": { + "type": "String" + }, + "sendAudio": "ஆடியோ அனுப்பவும்", + "@sendAudio": { + "type": "String", + "placeholders": {} + }, + "sendImage": "படத்தை அனுப்பு", + "@sendImage": { + "type": "String", + "placeholders": {} + }, + "sendImages": "{count} படத்தை அனுப்பு", + "@sendImages": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sendVideo": "வீடியோ அனுப்பவும்", + "@sendVideo": { + "type": "String", + "placeholders": {} + }, + "sentASticker": "😊 {username} ஒரு ச்டிக்கரை அனுப்பியது", + "@sentASticker": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "sentCallInformations": "{senderName} அனுப்பப்பட்ட அழைப்பு செய்தி", + "@sentCallInformations": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "setAsCanonicalAlias": "முதன்மையான மாற்றுப்பெயராக அமைக்கவும்", + "@setAsCanonicalAlias": { + "type": "String", + "placeholders": {} + }, + "setChatDescription": "அரட்டை விளக்கத்தை அமைக்கவும்", + "share": "பங்கு", + "@share": { + "type": "String", + "placeholders": {} + }, + "presencesToggle": "பிற பயனர்களிடமிருந்து நிலை செய்திகளைக் காட்டு", + "@presencesToggle": { + "type": "String", + "placeholders": {} + }, + "skip": "தவிர்", + "@skip": { + "type": "String", + "placeholders": {} + }, + "sourceCode": "மூலக் குறியீடு", + "@sourceCode": { + "type": "String", + "placeholders": {} + }, + "spaceName": "விண்வெளி பெயர்", + "@spaceName": { + "type": "String", + "placeholders": {} + }, + "status": "நிலை", + "@status": { + "type": "String", + "placeholders": {} + }, + "systemTheme": "மண்டலம்", + "@systemTheme": { + "type": "String", + "placeholders": {} + }, + "theyMatch": "அவர்கள் பொருந்துகிறார்கள்", + "@theyMatch": { + "type": "String", + "placeholders": {} + }, + "unbannedUser": "{username} தடைசெய்யப்படாத {targetName}", + "@unbannedUser": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "unknownEvent": "அறியப்படாத நிகழ்வு '{type}'", + "@unknownEvent": { + "type": "String", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "userAndOthersAreTyping": "{username} மற்றும் {count} மற்றவர்கள் தட்டச்சு செய்கிறார்கள்…", + "@userAndOthersAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "userIsTyping": "{username} தட்டச்சு செய்கிறது…", + "@userIsTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "waitingPartnerAcceptRequest": "கூட்டாளர் கோரிக்கையை ஏற்றுக்கொள்வதற்காக காத்திருக்கிறார்…", + "@waitingPartnerAcceptRequest": { + "type": "String", + "placeholders": {} + }, + "waitingPartnerEmoji": "பங்குதாரர் ஈமோசியை ஏற்றுக்கொள்வதற்காக காத்திருக்கிறார்…", + "@waitingPartnerEmoji": { + "type": "String", + "placeholders": {} + }, + "sender": "அனுப்புநர்", + "openGallery": "திறந்த கேலரி", + "whyDoYouWantToReportThis": "இதை ஏன் புகாரளிக்க விரும்புகிறீர்கள்?", + "@whyDoYouWantToReportThis": { + "type": "String", + "placeholders": {} + }, + "wipeChatBackup": "புதிய மீட்பு விசையை உருவாக்க உங்கள் அரட்டை காப்புப்பிரதியைத் துடைக்கவா?", + "@wipeChatBackup": { + "type": "String", + "placeholders": {} + }, + "withTheseAddressesRecoveryDescription": "இந்த முகவரிகள் மூலம் உங்கள் கடவுச்சொல்லை மீட்டெடுக்கலாம்.", + "@withTheseAddressesRecoveryDescription": { + "type": "String", + "placeholders": {} + }, + "writeAMessage": "ஒரு செய்தியை எழுதுங்கள்…", + "@writeAMessage": { + "type": "String", + "placeholders": {} + }, + "yes": "ஆம்", + "@yes": { + "type": "String", + "placeholders": {} + }, + "removeFromSpace": "இடத்திலிருந்து அகற்று", + "pleaseEnterRecoveryKeyDescription": "உங்கள் பழைய செய்திகளைத் திறக்க, முந்தைய அமர்வில் உருவாக்கப்பட்ட உங்கள் மீட்பு விசையை உள்ளிடவும். உங்கள் மீட்பு விசை உங்கள் கடவுச்சொல் அல்ல.", + "confirmEventUnpin": "நிகழ்வை நிரந்தரமாக அவிழ்ப்பது உறுதி?", + "youJoinedTheChat": "நீங்கள் அரட்டையில் சேர்ந்தீர்கள்", + "youAcceptedTheInvitation": "👍 நீங்கள் அழைப்பை ஏற்றுக்கொண்டீர்கள்", + "youBannedUser": "நீங்கள் {user} தடை செய்தீர்கள்", + "@youBannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youHaveWithdrawnTheInvitationFor": "{user}க்கான அழைப்பை திரும்பப் பெற்றுவிட்டீர்கள்", + "@youHaveWithdrawnTheInvitationFor": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedBy": "📩 நீங்கள் {user} ஆல் அழைக்கப்பட்டுள்ளீர்கள்", + "@youInvitedBy": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youInvitedUser": "📩 {user} ஐ அழைத்தீர்கள்", + "@youInvitedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "youUnbannedUser": "நீங்கள் {user} தடைசெய்யவில்லை", + "@youUnbannedUser": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "hasKnocked": "🚪 {user} தட்டியது", + "@hasKnocked": { + "placeholders": { + "user": { + "type": "String" + } + } + }, + "knock": "தட்டவும்", + "users": "பயனர்கள்", + "storeInSecureStorageDescription": "மீட்பு விசையை இந்த சாதனத்தின் பாதுகாப்பான சேமிப்பகத்தில் சேமிக்கவும்.", + "saveKeyManuallyDescription": "கணினி பகிர்வு உரையாடல் அல்லது கிளிப்போர்டைத் தூண்டுவதன் மூலம் இந்த விசையை கைமுறையாக சேமிக்கவும்.", + "storeInAndroidKeystore": "ஆண்ட்ராய்டு கீச்டோரில் சேமிக்கவும்", + "countFiles": "{count} கோப்புகள்", + "@countFiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "custom": "தனிப்பயன்", + "foregroundServiceRunning": "முன்புற பணி இயங்கும்போது இந்த அறிவிப்பு தோன்றும்.", + "screenSharingDetail": "உங்கள் திரையை FuffyChat இல் பகிர்கிறீர்கள்", + "whyIsThisMessageEncrypted": "இந்த செய்தி ஏன் படிக்க முடியாதது?", + "noKeyForThisMessage": "இந்த சாதனத்தில் உங்கள் கணக்கில் கையொப்பமிடுவதற்கு முன்பு செய்தி அனுப்பப்பட்டால் இது நிகழலாம்.\n\n அனுப்புநர் உங்கள் சாதனத்தைத் தடுத்துள்ளார் அல்லது இணைய இணைப்பில் ஏதேனும் தவறு ஏற்பட்டுள்ளது.\n\n மற்றொரு அமர்வில் செய்தியைப் படிக்க முடியுமா? அதிலிருந்து செய்தியை மாற்றலாம்! அமைப்புகள்> சாதனங்களுக்குச் சென்று, உங்கள் சாதனங்கள் ஒருவருக்கொருவர் சரிபார்த்துள்ளன என்பதை உறுதிப்படுத்தவும். அடுத்த முறை நீங்கள் அறையைத் திறக்கும்போது, இரண்டு அமர்வுகளும் முன்னணியில் இருக்கும்போது, விசைகள் தானாகவே அனுப்பப்படும்.\n\n வெளியேறும்போது அல்லது சாதனங்களை மாற்றும்போது விசைகளை இழக்க நீங்கள் விரும்பவில்லையா? அமைப்புகளில் அரட்டை காப்புப்பிரதியை நீங்கள் இயக்கியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.", + "hidePresences": "நிலை பட்டியலை மறைக்கவா?", + "doNotShowAgain": "மீண்டும் காட்ட வேண்டாம்", + "newSpaceDescription": "உங்கள் அரட்டைகளை ஒருங்கிணைத்து தனியார் அல்லது பொது சமூகங்களை உருவாக்க இடைவெளிகள் உங்களை அனுமதிக்கிறது.", + "disableEncryptionWarning": "பாதுகாப்பு காரணங்களுக்காக நீங்கள் ஒரு அரட்டையில் குறியாக்கத்தை முடக்க முடியாது, அது இதற்கு முன்பு இயக்கப்பட்டிருக்கிறது.", + "sorryThatsNotPossible": "மன்னிக்கவும் ... அது சாத்தியமில்லை", + "noBackupWarning": "எச்சரிக்கை! அரட்டை காப்புப்பிரதியை இயக்காமல், உங்கள் மறைகுறியாக்கப்பட்ட செய்திகளுக்கான அணுகலை இழப்பீர்கள். வெளியேறுவதற்கு முன் முதலில் அரட்டை காப்புப்பிரதியை இயக்க மிகவும் பரிந்துரைக்கப்படுகிறது.", + "fileIsTooBigForServer": "அனுப்ப முடியவில்லை! சேவையகம் {max} வரை இணைப்புகளை மட்டுமே ஆதரிக்கிறது.", + "@fileIsTooBigForServer": { + "type": "String", + "placeholders": { + "max": { + "type": "String" + } + } + }, + "fileHasBeenSavedAt": "கோப்பு {path}", + "@fileHasBeenSavedAt": { + "type": "String", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "inviteGroupChat": "📨 குழு அரட்டை அழைப்பு", + "invalidInput": "தவறான உள்ளீடு!", + "archiveRoomDescription": "அரட்டை காப்பகத்திற்கு நகர்த்தப்படும். மற்ற பயனர்கள் நீங்கள் அரட்டையை விட்டுவிட்டீர்கள் என்பதைக் காண முடியும்.", + "removeDevicesDescription": "நீங்கள் இந்த சாதனத்திலிருந்து வெளியேறுவீர்கள், இனி செய்திகளைப் பெற முடியாது.", + "banUserDescription": "பயனர் அரட்டையிலிருந்து தடைசெய்யப்படுவார், மேலும் அவை தடைசெய்யப்படாத வரை மீண்டும் அரட்டையில் நுழைய முடியாது.", + "makeAdminDescription": "இந்த பயனர் நிர்வாகியை நீங்கள் செய்தவுடன், இதை நீங்கள் செயல்தவிர்க்க முடியாமல் போகலாம், ஏனெனில் அவை உங்களைப் போன்ற அதே அனுமதிகளைக் கொண்டிருக்கும்.", + "knocking": "தட்டுதல்", + "searchChatsRooms": "#Chats, Us பயனர்களைத் தேடுங்கள் ...", + "nothingFound": "எதுவும் கிடைக்கவில்லை ...", + "groupName": "குழு பெயர்", + "createGroupAndInviteUsers": "ஒரு குழுவை உருவாக்கி பயனர்களை அழைக்கவும்", + "groupCanBeFoundViaSearch": "தேடல் வழியாக குழுவை காணலாம்", + "wrongRecoveryKey": "மன்னிக்கவும் ... இது சரியான மீட்பு விசையாகத் தெரியவில்லை.", + "databaseMigrationBody": "தயவுசெய்து காத்திருங்கள். இது ஒரு கணம் ஆகலாம்.", + "newPassword": "புதிய கடவுச்சொல்", + "pleaseChooseAStrongPassword": "வலுவான கடவுச்சொல்லைத் தேர்வுசெய்க", + "passwordsDoNotMatch": "கடவுச்சொற்கள் பொருந்தவில்லை", + "joinSpace": "விண்வெளியில் சேரவும்", + "addChatOrSubSpace": "அரட்டை அல்லது துணை இடத்தைச் சேர்க்கவும்", + "initAppError": "பயன்பாட்டைத் தொடங்கும்போது பிழை ஏற்பட்டது", + "sessionLostBody": "உங்கள் அமர்வு தொலைந்துவிட்டது. {url} இல் டெவலப்பர்களிடம் இந்தப் பிழையைப் புகாரளிக்கவும். பிழை செய்தி: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "sendTypingNotificationsDescription": "அரட்டையில் பங்கேற்பாளர்கள் நீங்கள் ஒரு புதிய செய்தியைத் தட்டச்சு செய்யும் போது காணலாம்.", + "sendReadReceiptsDescription": "அரட்டையில் பங்கேற்பாளர்கள் நீங்கள் ஒரு செய்தியைப் படிக்கும்போது பார்க்கலாம்.", + "formattedMessagesDescription": "மார்க் டவுனைப் பயன்படுத்தி தைரியமான உரை போன்ற பணக்கார செய்தி உள்ளடக்கத்தைக் காண்பி.", + "verifyOtherUser": "Poser மற்ற பயனரை சரிபார்க்கவும்", + "verifyOtherUserDescription": "நீங்கள் மற்றொரு பயனரைச் சரிபார்த்தால், நீங்கள் உண்மையில் யாருக்கு எழுதுகிறீர்கள் என்பது உங்களுக்குத் தெரியும் என்பதை நீங்கள் உறுதியாக நம்பலாம். 💪\n\nநீங்கள் ஒரு சரிபார்ப்பைத் தொடங்கும்போது, நீங்களும் மற்ற பயனரும் பயன்பாட்டில் ஒரு பாப்அப்பைக் காண்பீர்கள். நீங்கள் ஒருவருக்கொருவர் ஒப்பிட வேண்டிய தொடர்ச்சியான ஈமோசிகள் அல்லது எண்களைக் காண்பீர்கள்.\n\nஇதைச் செய்வதற்கான சிறந்த வழி வீடியோ அழைப்பைச் சந்திப்பது அல்லது தொடங்குவது. 👭", + "verifyOtherDeviceDescription": "நீங்கள் மற்றொரு சாதனத்தைச் சரிபார்க்கும்போது, அந்தச் சாதனங்கள் விசைகளைப் பரிமாறிக்கொள்ளலாம், உங்கள் ஒட்டுமொத்த பாதுகாப்பை அதிகரிக்கும். 💪 நீங்கள் ஒரு சரிபார்ப்பைத் தொடங்கும்போது, இரண்டு சாதனங்களிலும் பயன்பாட்டில் ஒரு பாப்அப் தோன்றும். நீங்கள் ஒருவருக்கொருவர் ஒப்பிட வேண்டிய தொடர்ச்சியான ஈமோசிகள் அல்லது எண்களைக் காண்பீர்கள். நீங்கள் சரிபார்ப்பைத் தொடங்குவதற்கு முன்பு இரண்டு சாதனங்களையும் எளிதில் வைத்திருப்பது நல்லது. 🤳", + "canceledKeyVerification": "{sender} ரத்து செய்யப்பட்ட விசை சரிபார்ப்பு", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "isReadyForKeyVerification": "விசை சரிபார்ப்பிற்கு {sender} தயாராக உள்ளார்", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "requestedKeyVerification": "{sender} கோரப்பட்ட விசை சரிபார்ப்பு", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "transparent": "வெளிப்படையானது", + "stickers": "ச்டிக்கர்கள்", + "commandHint_ignore": "கொடுக்கப்பட்ட மேட்ரிக்ச் ஐடியை புறக்கணிக்கவும்", + "unreadChatsInApp": "{appname}: {unread} படிக்காத அரட்டைகள்", + "@unreadChatsInApp": { + "type": "String", + "placeholders": { + "appname": { + "type": "String" + }, + "unread": { + "type": "String" + } + } + }, + "thereAreCountUsersBlocked": "இப்போது {count} பயனர்கள் தடுக்கப்பட்டுள்ளனர்.", + "@thereAreCountUsersBlocked": { + "type": "String", + "count": {} + }, + "restricted": "தடைசெய்யப்பட்டது", + "moderatorLevel": "{level} - மதிப்பீட்டாளர்", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "adminLevel": "{level} - நிர்வாகி", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "பொது அரட்டை அமைப்புகளை மாற்றவும்", + "inviteOtherUsers": "இந்த அரட்டைக்கு மற்ற பயனர்களை அழைக்கவும்", + "changeTheChatPermissions": "அரட்டை அனுமதிகளை மாற்றவும்", + "changeTheVisibilityOfChatHistory": "அரட்டை வரலாற்றின் தெரிவுநிலையை மாற்றவும்", + "changeTheCanonicalRoomAlias": "முக்கிய பொது அரட்டை முகவரியை மாற்றவும்", + "changeTheDescriptionOfTheGroup": "அரட்டையின் விளக்கத்தை மாற்றவும்", + "chatPermissionsDescription": "இந்த அரட்டையில் சில செயல்களுக்கு எந்த ஆற்றல் நிலை தேவை என்பதை வரையறுக்கவும். 0, 50 மற்றும் 100 ஆற்றல் நிலைகள் பொதுவாக பயனர்கள், மதிப்பீட்டாளர்கள் மற்றும் நிர்வாகிகளைக் குறிக்கின்றன, ஆனால் எந்த தரமும் சாத்தியமாகும்.", + "updateInstalled": "🎉 புதுப்பிப்பு {version} நிறுவப்பட்டது!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "changelog": "மாற்றபதிவு", + "calculatingFileSize": "கோப்பு அளவைக் கணக்கிடுகிறது ...", + "compressVideo": "அமைக்கும் வீடியோ ...", + "sendingAttachmentCountOfCount": "{length} இன் இணைப்பு {index}ஐ அனுப்புகிறது...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "உங்கள் சாதனங்களில் ஒன்று சரிபார்க்கப்படவில்லை", + "noticeChatBackupDeviceVerification": "குறிப்பு: உங்கள் எல்லா சாதனங்களையும் அரட்டை காப்புப்பிரதியுடன் இணைக்கும்போது, அவை தானாகவே சரிபார்க்கப்படும்.", + "manageAccount": "கணக்கை நிர்வகிக்கவும்", + "noContactInformationProvided": "சேவையகம் எந்த சரியான தொடர்பு தகவலையும் வழங்காது", + "contactServerAdmin": "சேவையக நிர்வாகி தொடர்பு", + "contactServerSecurity": "சேவையக பாதுகாப்பைத் தொடர்பு கொள்ளுங்கள்", + "supportPage": "உதவி பக்கம்", + "serverInformation": "சேவையக தகவல்:", + "version": "பதிப்பு", + "website": "வலைத்தளம்", + "compress": "சுருக்க", + "alwaysUse24HourFormat": "தவறு", + "@alwaysUse24HourFormat": { + "description": "Set to true to always display time of day in 24 hour format." + }, + "admin": "நிர்வாகி", + "@admin": { + "type": "String", + "placeholders": {} + }, + "alias": "மாற்றுப்பெயர்", + "@alias": { + "type": "String", + "placeholders": {} + }, + "answeredTheCall": "{senderName} அழைப்புக்கு பதிலளித்தார்", + "@answeredTheCall": { + "type": "String", + "placeholders": { + "senderName": { + "type": "String" + } + } + }, + "commandHint_react": "ஒரு எதிர்வினையாக பதிலை அனுப்பவும்", + "@commandHint_react": { + "type": "String", + "description": "Usage hint for the command /react" + }, + "commandHint_send": "உரையை அனுப்பவும்", + "@commandHint_send": { + "type": "String", + "description": "Usage hint for the command /send" + }, + "removeFromBundle": "இந்த மூட்டையிலிருந்து அகற்றவும்", + "pushRules": "தள்ளி விதிகள்", + "@pushRules": { + "type": "String", + "placeholders": {} + }, + "recording": "பதிவு", + "@recording": { + "type": "String", + "placeholders": {} + }, + "redactedBy": "{username} ஆல் திருத்தப்பட்டது", + "@redactedBy": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "directChat": "நேரடி அரட்டை", + "redactMessage": "திருத்தும் செய்தி", + "@redactMessage": { + "type": "String", + "placeholders": {} + }, + "userAndUserAreTyping": "{username} மற்றும் {username2} தட்டச்சு செய்கின்றன…", + "@userAndUserAreTyping": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "username2": { + "type": "String" + } + } + }, + "userLeftTheChat": "🚪 {username} அரட்டையை விட்டு வெளியேறினார்", + "@userLeftTheChat": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "visibilityOfTheChatHistory": "அரட்டை வரலாற்றின் தெரிவுநிலை", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "you": "நீங்கள்", + "@you": { + "type": "String", + "placeholders": {} + }, + "unsupportedAndroidVersionLong": "இந்த அம்சத்திற்கு புதிய ஆண்ட்ராய்டு பதிப்பு தேவைப்படுகிறது. புதுப்பிப்புகள் அல்லது பரம்பரை OS ஆதரவை சரிபார்க்கவும்.", + "setColorTheme": "வண்ண கருப்பொருள் அமைக்கவும்:", + "roomUpgradeDescription": "அரட்டை பின்னர் புதிய அறை பதிப்பில் மீண்டும் உருவாக்கப்படும். பங்கேற்பாளர்கள் அனைவருக்கும் புதிய அரட்டைக்கு மாற வேண்டும் என்று அறிவிக்கப்படும். அறை பதிப்புகள் பற்றி மேலும் அறிய https://spec.matrix.org/latest/rooms/", + "account": "கணக்கு", + "@account": { + "type": "String", + "placeholders": {} + }, + "groups": "குழுக்கள்", + "@groups": { + "type": "String", + "placeholders": {} + }, + "blockedUsers": "தடுக்கப்பட்ட பயனர்கள்", + "leaveEmptyToClearStatus": "உங்கள் நிலையை அழிக்க காலியாக விடவும்.", + "thisDevice": "இந்த சாதனம்:", + "gallery": "கேலரி", + "files": "கோப்புகள்", + "noDatabaseEncryption": "இந்த மேடையில் தரவுத்தள குறியாக்கம் ஆதரிக்கப்படவில்லை", + "goToSpace": "விண்வெளிக்குச் செல்லுங்கள்: {space}", + "@goToSpace": { + "type": "String", + "space": {} + }, + "markAsUnread": "படிக்காத எனக் குறிக்கவும்", + "userLevel": "{level} - பயனர்", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "notAnImage": "படக் கோப்பு அல்ல.", + "encryptThisChat": "இந்த அரட்டையை குறியாக்கவும்", + "publicChatAddresses": "பொது அரட்டை முகவரிகள்", + "createNewAddress": "புதிய முகவரியை உருவாக்கவும்", + "boldText": "தைரியமான உரை", + "italicText": "சாய்வு உரை", + "strikeThrough": "ச்ட்ரைகெத்ரோ", + "pleaseFillOut": "தயவுசெய்து நிரப்பவும்", + "invalidUrl": "தவறான முகவரி", + "addLink": "இணைப்பைச் சேர்க்கவும்", + "searchIn": "அரட்டையில் தேடு \"{chat}\" ...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "searchMore": "மேலும் தேடுங்கள் ...", + "startedKeyVerification": "{sender} விசை சரிபார்ப்பைத் தொடங்கினார்", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "loginWithMatrixId": "மேட்ரிக்ச்-ஐடியுடன் உள்நுழைக", + "doesNotSeemToBeAValidHomeserver": "இணக்கமான ஓம்சர்வர் என்று தெரியவில்லை. தவறான URL?", + "noMoreChatsFound": "இனி அரட்டைகள் கிடைக்கவில்லை ...", + "spaces": "இடங்கள்", + "changedTheChatPermissions": "{username} அரட்டை அனுமதிகளை மாற்றியுள்ளார்", + "@changedTheChatPermissions": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "changedTheGuestAccessRulesTo": "{username} விருந்தினர் அணுகல் விதிகளை மாற்றியது: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + }, + "rules": { + "type": "String" + } + } + }, + "changedTheHistoryVisibility": "{username} வரலாற்று தெரிவுநிலையை மாற்றியது", + "@changedTheHistoryVisibility": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "commandHint_join": "கொடுக்கப்பட்ட அறையில் சேரவும்", + "@commandHint_join": { + "type": "String", + "description": "Usage hint for the command /join" + }, + "commandHint_dm": "நேரடி அரட்டையைத் தொடங்கவும்\n குறியாக்கத்தை முடக்க-இல்லை-குறியாக்கத்தைப் பயன்படுத்தவும்", + "@commandHint_dm": { + "type": "String", + "description": "Usage hint for the command /dm" + }, + "commandHint_leave": "இந்த அறையை விட்டு விடுங்கள்", + "@commandHint_leave": { + "type": "String", + "description": "Usage hint for the command /leave" + }, + "unbanUserDescription": "அவர்கள் முயற்சித்தால் பயனர் மீண்டும் அரட்டையை உள்ளிட முடியும்.", + "restoreSessionBody": "ஆப்ஸ் இப்போது உங்கள் அமர்வை காப்புப்பிரதியிலிருந்து மீட்டெடுக்க முயற்சிக்கிறது. {url} இல் டெவலப்பர்களிடம் இந்தப் பிழையைப் புகாரளிக்கவும். பிழை செய்தி: {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "sendReadReceipts": "வாசிப்பு ரசீதுகளை அனுப்பவும்", + "unableToJoinChat": "அரட்டையில் சேர முடியவில்லை. ஒருவேளை மற்ற கட்சி ஏற்கனவே உரையாடலை மூடியிருக்கலாம்.", + "noGoogleServicesWarning": "ஃபயர்பேச் முகில் செய்தி உங்கள் சாதனத்தில் கிடைக்கவில்லை. இன்னும் புச் அறிவிப்புகளைப் பெற, ntfy ஐ நிறுவப் பரிந்துரைக்கிறோம். ntfy அல்லது மற்றொரு ஒருங்கிணைந்த புச் வழங்குநருடன் நீங்கள் தரவு பாதுகாப்பான வழியில் புச் அறிவிப்புகளைப் பெறலாம். நீங்கள் பிளேச்டோரிலிருந்து அல்லது எஃப்-டிராய்டிலிருந்து ntfy ஐ பதிவிறக்கம் செய்யலாம்.", + "@noGoogleServicesWarning": { + "type": "String", + "placeholders": {} + }, + "scanQrCode": "QR குறியீட்டை ச்கேன் செய்யுங்கள்", + "obtainingLocation": "இருப்பிடத்தைப் பெறுதல்…", + "@obtainingLocation": { + "type": "String", + "placeholders": {} + }, + "offline": "இணையமில்லாமல்", + "@offline": { + "type": "String", + "placeholders": {} + }, + "online": "ஆன்லைனில்", + "@online": { + "type": "String", + "placeholders": {} + }, + "participant": "பங்கேற்பாளர்", + "@participant": { + "type": "String", + "placeholders": {} + }, + "search": "தேடல்", + "@search": { + "type": "String", + "placeholders": {} + }, + "security": "பாதுகாப்பு", + "@security": { + "type": "String", + "placeholders": {} + }, + "sendFile": "கோப்பு அனுப்பவும்", + "@sendFile": { + "type": "String", + "placeholders": {} + }, + "ignoreUser": "பயனரைப் புறக்கணி", + "commandHint_roomupgrade": "கொடுக்கப்பட்ட அறை பதிப்பிற்கு இந்த அறையை மேம்படுத்தவும்", + "checkList": "சரிபார்ப்பு பட்டியல்", + "countInvited": "{count} அழைக்கப்பட்டது", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "synchronizingPleaseWaitCounter": " ஒத்திசைத்தல்… ({percentage}%)", + "@synchronizingPleaseWaitCounter": { + "type": "String", + "placeholders": { + "percentage": { + "type": "String" + } + } + }, + "previous": "முந்தைய", + "otherPartyNotLoggedIn": "மற்ற கட்சி தற்போது உள்நுழைந்திருக்கவில்லை, எனவே செய்திகளைப் பெற முடியாது!", + "appWantsToUseForLogin": "உள்நுழைய '{server}' ஐப் பயன்படுத்தவும்", + "@appWantsToUseForLogin": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "appWantsToUseForLoginDescription": "உங்களைப் பற்றிய தகவல்களைப் பகிர பயன்பாடு மற்றும் வலைத்தளத்தை இதன்மூலம் அனுமதிக்கிறீர்கள்.", + "open": "திற", + "waitingForServer": "சேவையகத்திற்காக காத்திருக்கிறது ...", + "newChatRequest": "அரட்டை கோரிக்கை", + "contentNotificationSettings": "உள்ளடக்க அறிவிப்பு அமைப்புகள்", + "generalNotificationSettings": "பொது அறிவிப்பு அமைப்புகள்", + "roomNotificationSettings": "அறை அறிவிப்பு அமைப்புகள்", + "userSpecificNotificationSettings": "பயனர் குறிப்பிட்ட அறிவிப்பு அமைப்புகள்", + "otherNotificationSettings": "பிற அறிவிப்பு அமைப்புகள்", + "notificationRuleContainsUserName": "பயனர் பெயரைக் கொண்டுள்ளது", + "notificationRuleContainsUserNameDescription": "ஒரு செய்தியில் அவற்றின் பயனர்பெயர் இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", + "notificationRuleMaster": "அனைத்து அறிவிப்புகளையும் முடக்குகிறது", + "notificationRuleMasterDescription": "மற்ற எல்லா விதிகளையும் மீறி அனைத்து அறிவிப்புகளையும் முடக்குகிறது.", + "notificationRuleSuppressNotices": "தானியங்கு செய்திகளை அடக்கவும்", + "notificationRuleSuppressNoticesDescription": "போட்ச் போன்ற தானியங்கி வாடிக்கையாளர்களிடமிருந்து அறிவிப்புகளை அடக்குகிறது.", + "notificationRuleInviteForMe": "எனக்கு அழைக்கவும்", + "notificationRuleInviteForMeDescription": "ஒரு அறைக்கு அழைக்கப்படும்போது பயனருக்கு அறிவிக்கிறது.", + "notificationRuleMemberEvent": "உறுப்பினர் நிகழ்வு", + "notificationRuleMemberEventDescription": "உறுப்பினர் நிகழ்வுகளுக்கான அறிவிப்புகளை அடக்குகிறது.", + "notificationRuleIsUserMention": "பயனர் குறிப்பு", + "notificationRuleIsUserMentionDescription": "ஒரு செய்தியில் நேரடியாக குறிப்பிடப்படும்போது பயனருக்கு அறிவிக்கிறது.", + "notificationRuleContainsDisplayName": "காட்சி பெயரைக் கொண்டுள்ளது", + "notificationRuleContainsDisplayNameDescription": "ஒரு செய்தியில் அவற்றின் காட்சி பெயர் இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", + "notificationRuleIsRoomMention": "அறை குறிப்பு", + "notificationRuleIsRoomMentionDescription": "ஒரு அறை குறிப்பு இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", + "notificationRuleRoomnotif": "அறை அறிவிப்பு", + "notificationRuleRoomnotifDescription": "ஒரு செய்தியில் '@room' இருக்கும்போது பயனருக்கு அறிவிக்கிறது.", + "notificationRuleTombstone": "கல்லறை", + "notificationRuleTombstoneDescription": "அறை செயலிழக்கச் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleReaction": "எதிர்வினை", + "notificationRuleReactionDescription": "எதிர்வினைகளுக்கான அறிவிப்புகளை அடக்குகிறது.", + "notificationRuleRoomServerAcl": "அறை சேவையகம் ACL", + "notificationRuleRoomServerAclDescription": "அறை சேவையக அணுகல் கட்டுப்பாட்டு பட்டியல்களுக்கான (ACL) அறிவிப்புகளை அடக்குகிறது.", + "notificationRuleSuppressEdits": "திருத்தங்களை அடக்கவும்", + "notificationRuleSuppressEditsDescription": "திருத்தப்பட்ட செய்திகளுக்கான அறிவிப்புகளை அடக்குகிறது.", + "notificationRuleCall": "அழை", + "notificationRuleCallDescription": "அழைப்புகள் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleEncryptedRoomOneToOne": "மறைகுறியாக்கப்பட்ட அறை ஒன்றுக்கு ஒன்று", + "notificationRuleEncryptedRoomOneToOneDescription": "மறைகுறியாக்கப்பட்ட ஒன்றுக்கு ஒன்று அறைகளில் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleRoomOneToOne": "அறை ஒன்று", + "notificationRuleRoomOneToOneDescription": "ஒருவருக்கு ஒன்று அறைகளில் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleMessage": "செய்தி", + "notificationRuleMessageDescription": "பொதுவான செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleEncrypted": "குறியாக்கப்பட்டது", + "notificationRuleEncryptedDescription": "மறைகுறியாக்கப்பட்ட அறைகளில் செய்திகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleJitsi": "சியோட்ச்", + "notificationRuleJitsiDescription": "சிட்சி விட்செட் நிகழ்வுகளைப் பற்றி பயனருக்கு அறிவிக்கிறது.", + "notificationRuleServerAcl": "சேவையக ACL நிகழ்வுகளை அடக்கவும்", + "notificationRuleServerAclDescription": "சேவையக ACL நிகழ்வுகளுக்கான அறிவிப்புகளை அடக்குகிறது.", + "unknownPushRule": "அறியப்படாத புச் விதி '{rule}'", + "@unknownPushRule": { + "type": "String", + "placeholders": { + "rule": { + "type": "String" + } + } + }, + "sentVoiceMessage": "🎙️{duration} - {sender} இலிருந்து குரல் செய்தி", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "deletePushRuleCanNotBeUndone": "இந்த அறிவிப்பு அமைப்பை நீங்கள் நீக்கினால், இதை செயல்தவிர்க்க முடியாது.", + "more": "மேலும்", + "shareKeysWith": "விசைகளைப் பகிரவும் ...", + "shareKeysWithDescription": "மறைகுறியாக்கப்பட்ட அரட்டைகளில் உங்கள் செய்திகளுடன் படிக்க எந்த சாதனங்களை நம்ப வேண்டும்?", + "allDevices": "அனைத்து சாதனங்களும்", + "crossVerifiedDevicesIfEnabled": "இயக்கப்பட்டால் சரிபார்க்கப்பட்ட சாதனங்களை குறுக்கு", + "crossVerifiedDevices": "குறுக்கு சரிபார்க்கப்பட்ட சாதனங்கள்", + "verifiedDevicesOnly": "சரிபார்க்கப்பட்ட சாதனங்கள் மட்டுமே", + "takeAPhoto": "புகைப்படம் எடுக்கவும்", + "recordAVideo": "வீடியோவைப் பதிவுசெய்க", + "optionalMessage": "(விரும்பினால்) செய்தி ...", + "notSupportedOnThisDevice": "இந்த சாதனத்தில் ஆதரிக்கப்படவில்லை", + "enterNewChat": "புதிய அரட்டையை உள்ளிடவும்", + "approve": "ஒப்புதல்", + "youHaveKnocked": "நீங்கள் தட்டிவிட்டீர்கள்", + "pleaseWaitUntilInvited": "அறையில் இருந்து யாராவது உங்களை அழைக்கும் வரை தயவுசெய்து இப்போது காத்திருங்கள்.", + "commandHint_logout": "உங்கள் தற்போதைய சாதனத்தை பதிவு செய்க", + "commandHint_logoutall": "அனைத்து செயலில் உள்ள சாதனங்களையும் அனுப்புகிறது", + "displayNavigationRail": "மொபைலில் வழிசெலுத்தல் ரெயிலைக் காட்டு", + "customReaction": "தனிப்பயன் எதிர்வினை", + "moreEvents": "மேலும் நிகழ்வுகள்", + "declineInvitation": "அழைப்பை நிராகரிக்கவும்", + "changedTheChatDescription": "{username} அரட்டை விளக்கத்தை மாற்றியுள்ளார்", + "changedTheChatName": "{username} அரட்டை பெயரை மாற்றியுள்ளார்", + "noMessagesYet": "இதுவரை செய்திகள் இல்லை", + "longPressToRecordVoiceMessage": "குரல் செய்தியை பதிவு செய்ய நீண்ட நேரம் அழுத்தவும்.", + "pause": "இடைநிறுத்தம்", + "resume": "ரெச்யூம்", + "removeFromSpaceDescription": "அரட்டை ச்பேசிலிருந்து அகற்றப்படும், ஆனால் உங்கள் அரட்டைப் பட்டியலில் தொடர்ந்து தோன்றும்.", + "countChats": "{chats} பூனைகள்", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "{spaces} இன் விண்வெளி உறுப்பினர்", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "{spaces} இன் ச்பேச் உறுப்பினர் தட்டலாம்", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "startedAPoll": "{username} ஒரு வாக்கெடுப்பைத் தொடங்கினார்.", + "@startedAPoll": { + "type": "String", + "placeholders": { + "username": { + "type": "String" + } + } + }, + "poll": "கருத்துக்கணிப்பு", + "startPoll": "வாக்கெடுப்பைத் தொடங்கவும்", + "endPoll": "முடிவு வாக்கெடுப்பு", + "answersVisible": "பதில்கள் தெரியும்", + "pollQuestion": "கருத்துக்கணிப்பு கேள்வி", + "answerOption": "பதில் விருப்பம்", + "addAnswerOption": "பதில் விருப்பத்தைச் சேர்க்கவும்", + "allowMultipleAnswers": "பல பதில்களை அனுமதிக்கவும்", + "pollHasBeenEnded": "கருத்துக்கணிப்பு முடிந்தது", + "countVotes": "{count, plural, =1{வாக்கு} other{{count} வாக்குகள்}}", + "@countVotes": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "answersWillBeVisibleWhenPollHasEnded": "வாக்கெடுப்பு முடிந்ததும் பதில்கள் தெரியும்", + "replyInThread": "இழையில் பதிலளிக்கவும்", + "countReplies": "{count, plural, =1{பதில்} other{{count} பதில்கள்}}", + "@countReplies": { + "type": "int", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "thread": "நூல்", + "backToMainChat": "முதன்மை அரட்டைக்குத் திரும்பு", + "saveChanges": "மாற்றங்களைச் சேமிக்கவும்", + "createSticker": "ச்டிக்கர் அல்லது ஈமோசியை உருவாக்கவும்", + "useAsSticker": "ச்டிக்கராக பயன்படுத்தவும்", + "useAsEmoji": "ஈமோசியாக பயன்படுத்தவும்", + "stickerPackNameAlreadyExists": "ச்டிக்கர் பேக் பெயர் ஏற்கனவே உள்ளது", + "newStickerPack": "புதிய ச்டிக்கர் பேக்", + "stickerPackName": "ச்டிக்கர் பேக் பெயர்", + "attribution": "பண்புக்கூறு", + "skipChatBackup": "அரட்டை காப்புப்பிரதியைத் தவிர்க்கவும்", + "skipChatBackupWarning": "நீங்கள் உறுதியாக இருக்கிறீர்களா? அரட்டை காப்புப்பிரதியை இயக்காமல், உங்கள் சாதனத்தை மாற்றினால், உங்கள் செய்திகளுக்கான அணுகலை இழக்க நேரிடும்.", + "loadingMessages": "செய்திகளை ஏற்றுகிறது", + "setupChatBackup": "அரட்டை காப்புப்பிரதியை அமைக்கவும்", + "noMoreResultsFound": "மேலும் முடிவுகள் கிடைக்கவில்லை", + "chatSearchedUntil": "அரட்டை {time} வரை தேடப்பட்டது", + "@chatSearchedUntil": { + "type": "String", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "federationBaseUrl": "கூட்டமைப்பு அடிப்படை முகவரி", + "clientWellKnownInformation": "வாடிக்கையாளர் நன்கு அறியப்பட்ட தகவல்:", + "baseUrl": "அடிப்படை முகவரி", + "identityServer": "அடையாள சேவையகம்:", + "versionWithNumber": "பதிப்பு: {version}", + "@versionWithNumber": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "logs": "பதிவுகள்", + "advancedConfigs": "மேம்பட்ட கட்டமைப்புகள்", + "advancedConfigurations": "மேம்பட்ட கட்டமைப்புகள்", + "signIn": "விடுபதிகை", + "createNewAccount": "புதிய கணக்கை உருவாக்கவும்", + "signUpGreeting": "FluffyChat பரவலாக்கப்பட்டது! உங்கள் கணக்கை உருவாக்க விரும்பும் சேவையகத்தைத் தேர்ந்தெடுத்து, செல்லலாம்!", + "signInGreeting": "உங்களிடம் ஏற்கனவே அணி இல் கணக்கு உள்ளதா? மீண்டும் வருக! உங்கள் ஓம் சர்வரைத் தேர்ந்தெடுத்து உள்நுழையவும்.", + "appIntro": "FluffyChat மூலம் நீங்கள் உங்கள் நண்பர்களுடன் அரட்டையடிக்கலாம். இது ஒரு பாதுகாப்பான பரவலாக்கப்பட்ட [மேட்ரிக்ச்] தூதுவர்! நீங்கள் விரும்பினால் https://matrix.org இல் மேலும் அறியவும் அல்லது பதிவு செய்யவும்.", + "theProcessWasCanceled": "செயல்முறை ரத்து செய்யப்பட்டது.", + "join": "சேருங்கள்", + "searchOrEnterHomeserverAddress": "ஓம்சர்வர் முகவரியைத் தேடவும் அல்லது உள்ளிடவும்", + "matrixId": "மேட்ரிக்ச் அடையாளம்", + "setPowerLevel": "ஆற்றல் அளவை அமைக்கவும்", + "makeModerator": "மதிப்பீட்டாளராக ஆக்குங்கள்", + "makeAdmin": "நிர்வாகியாக்கு", + "removeModeratorRights": "மதிப்பீட்டாளர் உரிமைகளை அகற்று", + "removeAdminRights": "நிர்வாகி உரிமைகளை அகற்று", + "powerLevel": "ஆற்றல் நிலை", + "setPowerLevelDescription": "இந்த அறையில் ஒரு உறுப்பினர் என்ன செய்ய அனுமதிக்கப்படுகிறார் என்பதை அதிகார நிலைகள் வரையறுக்கின்றன மற்றும் பொதுவாக 0 முதல் 100 வரை இருக்கும்.", + "owner": "உரிமையாளர்", + "mute": "முடக்கு", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "புதிய அரட்டையை உருவாக்கு" +} \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index 21289814..c896417e 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -12,4 +12,4 @@ "type": "String", "placeholders": {} } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index 1d4371f2..0a283aad 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -172,8 +172,6 @@ } } }, - "addChatDescription": "เพิ่มคำอธิบายการแชท", - "@addChatDescription": {}, "appLock": "ล็อคแอป", "@appLock": { "type": "String", @@ -263,15 +261,7 @@ "type": "String", "placeholders": {} }, - "@connect": { - "type": "String", - "placeholders": {} - }, "@jumpToLastReadMessage": {}, - "@allRooms": { - "type": "String", - "placeholders": {} - }, "@obtainingLocation": { "type": "String", "placeholders": {} @@ -280,7 +270,6 @@ "type": "String", "placeholders": {} }, - "@widgetVideo": {}, "@dismiss": {}, "@unknownDevice": { "type": "String", @@ -299,10 +288,6 @@ "type": "String", "placeholders": {} }, - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "@inviteContactToGroup": { "type": "String", "placeholders": { @@ -320,7 +305,6 @@ "type": "String", "placeholders": {} }, - "@chatHasBeenAddedToThisSpace": {}, "@reply": { "type": "String", "placeholders": {} @@ -346,7 +330,6 @@ "type": "String", "description": "Usage hint for the command /html" }, - "@widgetJitsi": {}, "@youAreNoLongerParticipatingInThisChat": { "type": "String", "placeholders": {} @@ -356,12 +339,7 @@ "placeholders": {} }, "@messageType": {}, - "@indexedDbErrorLong": {}, "@oneClientLoggedOut": {}, - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "@unsupportedAndroidVersionLong": {}, "@kicked": { "type": "String", @@ -403,8 +381,6 @@ "type": "String", "placeholders": {} }, - "@startFirstChat": {}, - "@callingAccount": {}, "@requestPermission": { "type": "String", "placeholders": {} @@ -433,15 +409,10 @@ } }, "@setColorTheme": {}, - "@nextAccount": {}, "@commandHint_create": { "type": "String", "description": "Usage hint for the command /create" }, - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "@warning": { "type": "String", "placeholders": {} @@ -531,7 +502,6 @@ "type": "String", "placeholders": {} }, - "@widgetEtherpad": {}, "@waitingPartnerAcceptRequest": { "type": "String", "placeholders": {} @@ -568,10 +538,6 @@ } } }, - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "@tryAgain": {}, "@blocked": { "type": "String", @@ -584,21 +550,6 @@ } } }, - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "@unbanUserDescription": {}, "@userAndUserAreTyping": { "type": "String", @@ -624,7 +575,6 @@ "placeholders": {} }, "@youRejectedTheInvitation": {}, - "@otherCallingPermissions": {}, "@messagesStyle": {}, "@couldNotDecryptMessage": { "type": "String", @@ -639,11 +589,8 @@ "placeholders": {} }, "@link": {}, - "@widgetUrlError": {}, - "@emailOrUsername": {}, "@newSpaceDescription": {}, "@chatDescription": {}, - "@callingAccountDetails": {}, "@next": { "type": "String", "placeholders": {} @@ -660,25 +607,10 @@ } } }, - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "@editRoomAliases": { "type": "String", "placeholders": {} }, - "@enterSpace": {}, "@encryptThisChat": {}, "@fileName": { "type": "String", @@ -688,7 +620,6 @@ "type": "String", "placeholders": {} }, - "@previousAccount": {}, "@publicRooms": { "type": "String", "placeholders": {} @@ -705,25 +636,15 @@ "type": "String", "placeholders": {} }, - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "@reopenChat": {}, - "@pleaseEnterRecoveryKey": {}, "@create": { "type": "String", "placeholders": {} }, - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "@no": { "type": "String", "placeholders": {} }, - "@widgetNameError": {}, "@inoffensive": { "type": "String", "placeholders": {} @@ -741,7 +662,6 @@ "type": "String", "placeholders": {} }, - "@addWidget": {}, "@removeAllOtherDevices": { "type": "String", "placeholders": {} @@ -790,7 +710,6 @@ } } }, - "@hydrateTor": {}, "@pushNotificationsNotAvailable": {}, "@passwordRecovery": { "type": "String", @@ -830,7 +749,6 @@ "type": "String", "placeholders": {} }, - "@signInWithPassword": {}, "@ignoredUsers": { "type": "String", "placeholders": {} @@ -891,10 +809,6 @@ "type": "String", "placeholders": {} }, - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "@commandHint_clearcache": { "type": "String", "description": "Usage hint for the command /clearcache" @@ -914,14 +828,6 @@ "placeholders": {} }, "@whyIsThisMessageEncrypted": {}, - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "@rejectedTheInvitation": { "type": "String", "placeholders": { @@ -943,19 +849,11 @@ "type": "String", "placeholders": {} }, - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "@or": { "type": "String", "placeholders": {} }, "@dehydrateWarning": {}, - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "@noOtherDevicesFound": {}, "@whoIsAllowedToJoinThisGroup": { "type": "String", @@ -965,14 +863,6 @@ "type": "String", "placeholders": {} }, - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "@storeSecurlyOnThisDevice": {}, "@yourChatBackupHasBeenSetUp": {}, "@chatBackup": { @@ -1032,18 +922,6 @@ "type": "String", "placeholders": {} }, - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "@username": { "type": "String", "placeholders": {} @@ -1058,10 +936,6 @@ }, "@fileIsTooBigForServer": {}, "@homeserver": {}, - "@people": { - "type": "String", - "placeholders": {} - }, "@changedTheHistoryVisibilityTo": { "type": "String", "placeholders": { @@ -1093,7 +967,6 @@ } } }, - "@callingPermissions": {}, "@newMessageInFluffyChat": { "type": "String", "placeholders": {} @@ -1113,18 +986,6 @@ "placeholders": {} }, "@unlockOldMessages": {}, - "@identity": { - "type": "String", - "placeholders": {} - }, - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "@changedTheJoinRulesTo": { "type": "String", "placeholders": { @@ -1212,10 +1073,6 @@ "@sendAsText": { "type": "String" }, - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "@archiveRoomDescription": {}, "@changedTheChatNameTo": { "type": "String", @@ -1228,18 +1085,6 @@ } } }, - "@sendSticker": { - "type": "String", - "placeholders": {} - }, - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "@commandInvalid": { "type": "String" }, @@ -1310,7 +1155,6 @@ "type": "String", "placeholders": {} }, - "@inviteContactToGroupQuestion": {}, "@emoteExists": { "type": "String", "placeholders": {} @@ -1349,12 +1193,10 @@ "type": "String", "placeholders": {} }, - "@appearOnTopDetails": {}, "@roomHasBeenUpgraded": { "type": "String", "placeholders": {} }, - "@enterRoom": {}, "@enableEmotesGlobally": { "type": "String", "placeholders": {} @@ -1404,17 +1246,6 @@ } }, "@confirmEventUnpin": {}, - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "@youInvitedUser": { "placeholders": { "user": { @@ -1445,10 +1276,6 @@ } } }, - "@license": { - "type": "String", - "placeholders": {} - }, "@unbanFromChat": { "type": "String", "placeholders": {} @@ -1463,10 +1290,6 @@ "description": "State that {command} is not a valid /command." }, "@redactMessageDescription": {}, - "@rejoin": { - "type": "String", - "placeholders": {} - }, "@recoveryKey": {}, "@redactMessage": { "type": "String", @@ -1489,7 +1312,6 @@ "type": "String", "placeholders": {} }, - "@dehydrateTorLong": {}, "@yourPublicKey": { "type": "String", "placeholders": {} @@ -1543,10 +1365,6 @@ "type": "String", "placeholders": {} }, - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "@joinRoom": { "type": "String", "placeholders": {} @@ -1557,9 +1375,7 @@ "placeholders": {} }, "@serverRequiresEmail": {}, - "@hideUnimportantStateEvents": {}, "@screenSharingTitle": {}, - "@widgetCustom": {}, "@sentCallInformations": { "type": "String", "placeholders": { @@ -1568,7 +1384,6 @@ } } }, - "@addToSpaceDescription": {}, "@youBannedUser": { "placeholders": { "user": { @@ -1623,7 +1438,6 @@ } } }, - "@publish": {}, "@openLinkInBrowser": {}, "@clearArchive": {}, "@commandHint_react": { @@ -1666,8 +1480,6 @@ "placeholders": {} }, "@inviteGroupChat": {}, - "@appearOnTop": {}, - "@invitePrivateChat": {}, "@verifyTitle": { "type": "String", "placeholders": {} @@ -1702,10 +1514,6 @@ "type": "String", "description": "Usage hint for the command /ban" }, - "@confirm": { - "type": "String", - "placeholders": {} - }, "@wasDirectChatDisplayName": { "type": "String", "placeholders": { @@ -1754,7 +1562,6 @@ }, "@newGroup": {}, "@bundleName": {}, - "@dehydrateTor": {}, "@removeFromSpace": {}, "@dateAndTimeOfDay": { "type": "String", @@ -1820,7 +1627,6 @@ } } }, - "@profileNotFound": {}, "@jump": {}, "@groups": { "type": "String", @@ -1849,14 +1655,6 @@ } }, "@sorryThatsNotPossible": {}, - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "@oopsSomethingWentWrong": { "type": "String", "placeholders": {} @@ -1872,10 +1670,6 @@ "@shareInviteLink": {}, "@commandHint_markasdm": {}, "@recoveryKeyLost": {}, - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "@messages": { "type": "String", "placeholders": {} @@ -1901,10 +1695,6 @@ "type": "String", "placeholders": {} }, - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "@startedACall": { "type": "String", "placeholders": { @@ -1921,10 +1711,6 @@ "type": "String", "placeholders": {} }, - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "@deleteMessage": { "type": "String", "placeholders": {} @@ -1937,20 +1723,11 @@ "type": "String", "placeholders": {} }, - "@setTheme": {}, "@changeTheHomeserver": { "type": "String", "placeholders": {} }, "@youJoinedTheChat": {}, - "@wallpaper": { - "type": "String", - "placeholders": {} - }, - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "@play": { "type": "String", "placeholders": { @@ -1984,7 +1761,6 @@ "type": "String", "placeholders": {} }, - "@widgetName": {}, "@sentASticker": { "type": "String", "placeholders": { @@ -1993,7 +1769,6 @@ } } }, - "@errorAddingWidget": {}, "@commandHint_dm": { "type": "String", "description": "Usage hint for the command /dm" @@ -2063,15 +1838,10 @@ "type": "String", "placeholders": {} }, - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "@share": { "type": "String", "placeholders": {} }, - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "@createGroup": {}, "@privacy": { "type": "String", @@ -2085,16 +1855,7 @@ "type": "String", "placeholders": {} }, - "@hydrateTorLong": {}, "@time": {}, - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, - "@botMessages": { - "type": "String", - "placeholders": {} - }, "@contentHasBeenReported": { "type": "String", "placeholders": {} @@ -2124,10 +1885,6 @@ "type": "String", "placeholders": {} }, - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "@pinMessage": {}, "@screenSharingDetail": {}, "@muteChat": { @@ -2140,7 +1897,6 @@ "type": "String", "placeholders": {} }, - "@indexedDbErrorTitle": {}, "@endedTheCall": { "type": "String", "placeholders": { @@ -2149,4 +1905,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index a59752e0..f5fc04ef 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -131,18 +131,6 @@ } } }, - "badServerVersionsException": "Ana sunucu aşağıdaki Spec sürümlerini destekliyor:\n{serverVersions}\nAncak bu uygulama yalnızca {supportedVersions} destekliyor", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "Sohbetten engelle", "@banFromChat": { "type": "String", @@ -175,11 +163,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bot mesajları", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "İptal", "@cancel": { "type": "String", @@ -393,8 +376,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Sohbet bu alana eklendi", - "@chatHasBeenAddedToThisSpace": {}, "chats": "Sohbetler", "@chats": { "type": "String", @@ -511,31 +492,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Onayla", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Bağlan", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kişi gruba davet edildi", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Görünen ad içerir", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Kullanıcı adı içerir", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "İçerik, sunucu yöneticilerine bildirildi", "@contentHasBeenReported": { "type": "String", @@ -615,33 +576,6 @@ } } }, - "dateWithoutYear": "{day} {month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Bu, kullanıcı hesabınızı devre dışı bırakacak. Bu geri alınamaz! Emin misiniz?", "@deactivateAccountWarning": { "type": "String", @@ -747,11 +681,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Bir ifade kısa kodu ve bir resim seçmeniz gerekiyor!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Boş sohbet", "@emptyChat": { "type": "String", @@ -801,11 +730,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "Ana sunucunuzu girin", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Konum alınırken hata oluştu: {error}", "@errorObtainingLocation": { "type": "String", @@ -855,11 +779,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Yeni odaya git", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Grup", "@group": { "type": "String", @@ -931,11 +850,6 @@ "type": "String", "placeholders": {} }, - "identity": "Kimlik", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "Yok say", "@ignore": { "type": "String", @@ -997,11 +911,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Benim için davet et", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} sizi FluffyChat'e davet etti.\n1. fluffychat.im adresini ziyaret edin ve uygulamayı kurun \n2. Kaydolun veya oturum açın \n3. Davet bağlantısını açın: \n {link}", "@inviteText": { "type": "String", @@ -1081,11 +990,6 @@ "type": "String", "placeholders": {} }, - "license": "Lisans", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Açık", "@lightTheme": { "type": "String", @@ -1139,11 +1043,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Üye değişiklikleri", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Bahset", "@mention": { "type": "String", @@ -1251,11 +1150,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Bu hesap için bildirimler etkinleştirildi", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} kullanıcı yazıyor…", "@numUsersTyping": { "type": "String", @@ -1355,11 +1249,6 @@ "type": "String", "placeholders": {} }, - "people": "İnsanlar", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Bir resim seç", "@pickImage": { "type": "String", @@ -1379,11 +1268,6 @@ } } }, - "pleaseChoose": "Lütfen seçin", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Lütfen bir geçiş kodu seçin", "@pleaseChooseAPasscode": { "type": "String", @@ -1477,11 +1361,6 @@ } } }, - "rejoin": "Yeniden katıl", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Kaldır", "@remove": { "type": "String", @@ -1501,11 +1380,6 @@ } } }, - "removeDevice": "Aygıtı kaldır", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Sohbet engelini kaldır", "@unbanFromChat": { "type": "String", @@ -1561,15 +1435,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username} tarafından görüldü", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Gönder", "@send": { "type": "String", @@ -1604,16 +1469,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Orijinali gönder", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Çıkartma gönder", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Video gönder", "@sendVideo": { "type": "String", @@ -1678,21 +1533,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Özel ifadeler ayarla", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "Davet bağlantısı ayarla", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "İzin seviyesini ayarla", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Durumu ayarla", "@setStatus": { "type": "String", @@ -1727,11 +1567,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "Tek oturum açma", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Atla", "@skip": { "type": "String", @@ -1802,21 +1637,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Sık Kullanılanlara Ekle/Çıkar", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "Sessize Al/Sessizden Çıkar", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "Okundu/Okunmadı Olarak İşaretle", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Çok fazla istek. Lütfen daha sonra tekrar deneyin!", "@tooManyRequestsWarning": { "type": "String", @@ -1883,15 +1703,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 okunmamış sohbet} other{{unreadCount} okunmamış sohbet}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} ve {count} diğer kişi yazıyor…", "@userAndOthersAreTyping": { "type": "String", @@ -2016,11 +1827,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Duvar kağıdı:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Uyarı!", "@warning": { "type": "String", @@ -2128,8 +1934,6 @@ "@openGallery": {}, "removeFromSpace": "Alandan kaldır", "@removeFromSpace": {}, - "addToSpaceDescription": "Bu sohbeti eklemek için bir alan seçin.", - "@addToSpaceDescription": {}, "start": "Başla", "@start": {}, "commandHint_clearcache": "Önbelleği temizleyin", @@ -2152,22 +1956,6 @@ "type": "String", "description": "Usage hint for the command /discardsession" }, - "openVideoCamera": "Bir video için kamerayı aç", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "Yayınla", - "@publish": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "dismiss": "Kapat", "@dismiss": {}, "markAsRead": "Okundu olarak işaretle", @@ -2206,44 +1994,6 @@ "@videoCallsBetaWarning": {}, "experimentalVideoCalls": "Deneysel görüntülü aramalar", "@experimentalVideoCalls": {}, - "emailOrUsername": "E-posta veya kullanıcı adı", - "@emailOrUsername": {}, - "switchToAccount": "{number}. hesaba geç", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Sonraki hesap", - "@nextAccount": {}, - "previousAccount": "Önceki hesap", - "@previousAccount": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, - "widgetCustom": "Özel", - "@widgetCustom": {}, - "widgetUrlError": "Bu geçerli bir URL değil.", - "@widgetUrlError": {}, - "widgetNameError": "Lütfen görünecek bir ad girin.", - "@widgetNameError": {}, - "errorAddingWidget": "Widget eklenirken hata oluştu.", - "@errorAddingWidget": {}, - "widgetVideo": "Video", - "@widgetVideo": {}, - "addWidget": "Widget ekle", - "@addWidget": {}, - "widgetEtherpad": "Metin notu", - "@widgetEtherpad": {}, - "widgetName": "Ad", - "@widgetName": {}, - "separateChatTypes": "Doğrudan Sohbetleri ve Grupları Ayır", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youJoinedTheChat": "Sohbete katıldınız", "@youJoinedTheChat": {}, "youAcceptedTheInvitation": "👍 Daveti kabul ettiniz", @@ -2308,8 +2058,6 @@ }, "storeInAppleKeyChain": "Apple KeyChain'de sakla", "@storeInAppleKeyChain": {}, - "pleaseEnterRecoveryKey": "Lütfen kurtarma anahtarınızı girin:", - "@pleaseEnterRecoveryKey": {}, "recoveryKeyLost": "Kurtarma anahtarı kayıp mı?", "@recoveryKeyLost": {}, "pleaseEnterRecoveryKeyDescription": "Eski mesajlarınızın kilidini açmak için lütfen önceki bir oturumda oluşturulan kurtarma anahtarınızı girin. Kurtarma anahtarınız parolanız DEĞİLDİR.", @@ -2338,22 +2086,10 @@ }, "dehydrate": "Oturumu dışa aktar ve aygıtı sil", "@dehydrate": {}, - "dehydrateTorLong": "TOR kullanıcıları için, pencereyi kapatmadan önce oturumu dışa aktarmaları tavsiye edilir.", - "@dehydrateTorLong": {}, - "dehydrateTor": "TOR Kullanıcıları: Oturumu dışa aktar", - "@dehydrateTor": {}, - "hydrateTor": "TOR Kullanıcıları: Dışa aktarılan oturumu içe aktar", - "@hydrateTor": {}, "hydrate": "Yedekleme dosyasından geri yükle", "@hydrate": {}, - "indexedDbErrorTitle": "Gizli mod sorunları", - "@indexedDbErrorTitle": {}, "dehydrateWarning": "Bu eylem geri alınamaz. Yedekleme dosyasını güvenli bir şekilde sakladığınızdan emin olun.", "@dehydrateWarning": {}, - "hydrateTorLong": "TOR'da en son oturumunuzu dışa aktardınız mı? Hızlıca içe aktarın ve sohbete devam edin.", - "@hydrateTorLong": {}, - "indexedDbErrorLong": "Mesaj saklama özelliği ne yazık ki öntanımlı olarak gizli modda etkin değildir.\nLütfen\n - about:config sayfasına gidin ve\n - dom.indexedDB.privateBrowsing.enabled seçeneğini true olarak ayarlayın\nAksi takdirde FluffyChat çalıştırılamaz.", - "@indexedDbErrorLong": {}, "user": "Kullanıcı", "@user": {}, "custom": "Özel", @@ -2379,43 +2115,16 @@ "@noKeyForThisMessage": {}, "screenSharingTitle": "ekran paylaşımı", "@screenSharingTitle": {}, - "callingPermissions": "Arama izinleri", - "@callingPermissions": {}, - "callingAccountDetails": "FluffyChat'in yerel android telefon uygulamasını kullanmasına izin verir.", - "@callingAccountDetails": {}, - "appearOnTop": "Üstte görün", - "@appearOnTop": {}, - "enterSpace": "Alana gir", - "@enterSpace": {}, - "enterRoom": "Odaya gir", - "@enterRoom": {}, "allSpaces": "Tüm alanlar", "@allSpaces": {}, - "otherCallingPermissions": "Mikrofon, kamera ve diğer FluffyChat izinleri", - "@otherCallingPermissions": {}, "foregroundServiceRunning": "Bu bildirim, ön plan hizmeti çalışırken görünür.", "@foregroundServiceRunning": {}, - "callingAccount": "Arama hesabı", - "@callingAccount": {}, - "appearOnTopDetails": "Uygulamanın üstte görünmesine izin verir (Fluffychat'ı zaten bir arama hesabı olarak ayarladıysanız gerekli değildir)", - "@appearOnTopDetails": {}, "newGroup": "Yeni grup", "@newGroup": {}, "newSpace": "Yeni alan", "@newSpace": {}, "screenSharingDetail": "Ekranınızı FuffyChat'te paylaşıyorsunuz", "@screenSharingDetail": {}, - "numChats": "{number} sohbet", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Önemsiz durum etkinliklerini gizle", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "Tekrar gösterme", "@doNotShowAgain": {}, "googlyEyesContent": "{senderName} size şaşkın gözler gönderiyor", @@ -2460,8 +2169,6 @@ } } }, - "startFirstChat": "İlk sohbetinizi başlatın", - "@startFirstChat": {}, "newSpaceDescription": "Alanlar, sohbetlerinizi birleştirmenize ve özel veya genel topluluklar oluşturmanıza olanak tanır.", "@newSpaceDescription": {}, "encryptThisChat": "Bu sohbeti şifrele", @@ -2497,28 +2204,10 @@ "@jump": {}, "openLinkInBrowser": "Bağlantıyı tarayıcıda aç", "@openLinkInBrowser": {}, - "allRooms": "Tüm Grup Sohbetleri", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "reportErrorDescription": "😭 Olamaz. Bir şeyler yanlış gitti. İsterseniz bu hatayı geliştiricilere bildirebilirsiniz.", "@reportErrorDescription": {}, "report": "bildir", "@report": {}, - "signInWithPassword": "Parola ile oturum aç", - "@signInWithPassword": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Lütfen daha sonra tekrar deneyin veya farklı bir sunucu seçin.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "{provider} ile oturum aç", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Bir resim dosyası değil.", "@notAnImage": {}, "importNow": "Şimdi içe aktar", @@ -2539,14 +2228,8 @@ "@createGroup": {}, "shareInviteLink": "Davet bağlantısını paylaş", "@shareInviteLink": {}, - "profileNotFound": "Kullanıcı sunucuda bulunamadı. Belki bir bağlantı sorunu vardır veya kullanıcı mevcut değildir.", - "@profileNotFound": {}, - "setTheme": "Temayı ayarla:", - "@setTheme": {}, "setColorTheme": "Renk temasını ayarla:", "@setColorTheme": {}, - "inviteContactToGroupQuestion": "{contact} kişisini \"{groupName}\" sohbetine davet etmek istiyor musunuz?", - "@inviteContactToGroupQuestion": {}, "tryAgain": "Tekrar deneyin", "@tryAgain": {}, "redactMessageDescription": "Bu mesaj bu görüşmedeki herkes için düzenlenecek. Bu işlem geri alınamaz.", @@ -2555,8 +2238,6 @@ "@optionalRedactReason": {}, "invite": "Davet et", "@invite": {}, - "addChatDescription": "Sohbet açıklaması ekle...", - "@addChatDescription": {}, "chatPermissions": "Sohbet izinleri", "@chatPermissions": {}, "chatDescription": "Sohbet açıklaması", @@ -2594,8 +2275,6 @@ "@directChat": {}, "inviteGroupChat": "📨 Grup sohbetine davet et", "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Gizli sohbete davet et", - "@invitePrivateChat": {}, "emoteKeyboardNoRecents": "Son kullanılan ifadeler burada görünecek...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2661,8 +2340,6 @@ "@searchChatsRooms": {}, "blockListDescription": "Sizi rahatsız eden kullanıcıları engelleyebilirsiniz. Kişisel engelleme listenizdeki kullanıcılardan herhangi bir mesaj veya oda daveti alamazsınız.", "@blockListDescription": {}, - "startConversation": "Görüşme başlat", - "@startConversation": {}, "blockedUsers": "Engellenen kullanıcılar", "@blockedUsers": {}, "block": "Engelle", @@ -2677,14 +2354,6 @@ "@databaseMigrationTitle": {}, "databaseMigrationBody": "Lütfen bekleyin. Bu biraz zaman alabilir.", "@databaseMigrationBody": {}, - "youInvitedToBy": "📩 Bağlantı aracılığıyla davet edildiniz:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "pleaseEnterYourCurrentPassword": "Lütfen geçerli parolanızı girin", "@pleaseEnterYourCurrentPassword": {}, "pleaseChooseAStrongPassword": "Lütfen güçlü bir parola seçin", @@ -2700,24 +2369,10 @@ } } }, - "publicLink": "Herkese açık bağlantı", - "@publicLink": {}, "joinSpace": "Alana katıl", "@joinSpace": {}, "newPassword": "Yeni parola", "@newPassword": {}, - "databaseBuildErrorBody": "SQlite veri tabanı oluşturulamadı. Uygulama şimdilik eski veri tabanını kullanmaya çalışıyor. Lütfen bu hatayı {url} adresinde geliştiricilere bildirin. Hata mesajı: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Oturumunuz kayboldu. Lütfen bu hatayı {url} adresinde geliştiricilere bildirin. Hata mesajı: {error}", "@sessionLostBody": { "type": "String", @@ -2730,8 +2385,6 @@ } } }, - "subspace": "Alt alan", - "@subspace": {}, "thisDevice": "Bu aygıt:", "@thisDevice": {}, "formattedMessagesDescription": "Markdown kullanarak kalın metin gibi zengin mesaj içeriğini görüntüle.", @@ -2743,11 +2396,6 @@ "type": "String", "placeholders": {} }, - "presenceStyle": "Bulunma:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "searchForUsers": "@kullanıcıları ara...", "@searchForUsers": {}, "commandHint_ignore": "Verilen matrix kimliğini görmezden gel", @@ -2772,22 +2420,8 @@ "@hideRedactedMessages": {}, "hideRedactedMessagesBody": "Birisi bir mesajı düzenlerse, bu mesaj artık sohbette görünmeyecektir.", "@hideRedactedMessagesBody": {}, - "hideMemberChangesInPublicChats": "Herkese açık sohbetlerde üye değişikliklerini gizle", - "@hideMemberChangesInPublicChats": {}, - "hideMemberChangesInPublicChatsBody": "Okunabilirliği artırmak için birisi herkese açık bir sohbete katıldığında veya sohbetten ayrıldığında sohbet zaman çizelgesinde gösterme.", - "@hideMemberChangesInPublicChatsBody": {}, "passwordRecoverySettings": "Parola kurtarma ayarları", "@passwordRecoverySettings": {}, - "userWouldLikeToChangeTheChat": "{user} sohbete katılmak istiyor.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Henüz herkese açık bir bağlantı oluşturulmadı", - "@noPublicLinkHasBeenCreatedYet": {}, "knock": "Tıklat", "@knock": {}, "knocking": "Tıklat", @@ -2813,18 +2447,12 @@ "@publicSpaces": {}, "initAppError": "Uygulama başlatılırken bir hata oluştu", "@initAppError": {}, - "userRole": "Kullanıcı rolü", - "@userRole": {}, "hideInvalidOrUnknownMessageFormats": "Geçersiz veya bilinmeyen mesaj biçimlerini gizle", "@hideInvalidOrUnknownMessageFormats": {}, "hidePresences": "Durum listesi gizlensin mi?", "@hidePresences": {}, "overview": "Genel görünüm", "@overview": {}, - "decline": "Reddet", - "@decline": {}, - "notifyMeFor": "Beni bilgilendir", - "@notifyMeFor": {}, "chatCanBeDiscoveredViaSearchOnServer": "Sohbet {server} üzerinde aranarak keşfedilebilir", "@chatCanBeDiscoveredViaSearchOnServer": { "type": "String", @@ -2838,15 +2466,6 @@ "@leaveEmptyToClearStatus": {}, "select": "Seç", "@select": {}, - "minimumPowerLevel": "{level} en düşük güç seviyesidir.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "passwordsDoNotMatch": "Parolalar eşleşmiyor", "@passwordsDoNotMatch": {}, "passwordIsWrong": "Girdiğiniz parola yanlış", @@ -2855,15 +2474,6 @@ "@publicChatAddresses": {}, "createNewAddress": "Yeni adres oluştur", "@createNewAddress": {}, - "forwardMessageTo": "Mesajlar {roomName} kişisine iletilsin mi?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "acceptedKeyVerification": "{sender} anahtar doğrulamayı kabul etti", "@acceptedKeyVerification": { "type": "String", @@ -2976,18 +2586,6 @@ "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, - "countChatsAndCountParticipants": "{chats} sohbet ve {participants} katılımcı", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Başka sohbet bulunamadı...", "@noMoreChatsFound": {}, "goToSpace": "Alana git: {space}", @@ -2995,8 +2593,6 @@ "type": "String", "space": {} }, - "joinedChats": "Katılınan sohbetler", - "@joinedChats": {}, "unread": "Okunmadı", "@unread": {}, "markAsUnread": "Okunmadı olarak işaretle", @@ -3073,12 +2669,6 @@ "@noChatsFoundHere": {}, "loginWithMatrixId": "Matrix kimliği ile oturum aç", "@loginWithMatrixId": {}, - "discoverHomeservers": "Ana sunucuları keşfet", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "Ana sunucu nedir?", - "@whatIsAHomeserver": {}, - "homeserverDescription": "Tüm verileriniz tıpkı bir e-posta sağlayıcısı gibi ana sunucuda saklanır. Hangi ana sunucuyu kullanmak istediğinizi seçebilir ve herkesle iletişim kurmaya devam edebilirsiniz. https://matrix.org adresinden daha fazla bilgi edinin.", - "@homeserverDescription": {}, "doesNotSeemToBeAValidHomeserver": "Uyumlu bir ana sunucu gibi görünmüyor. Yanlış URL mi?", "@doesNotSeemToBeAValidHomeserver": {}, "prepareSendingAttachment": "Ek gönderilmeye hazırlanıyor...", @@ -3178,14 +2768,8 @@ }, "welcomeText": "Hey Hey 👋 Karşınızda FluffyChat. https://matrix.org ile uyumlu herhangi bir homeserver'a giriş yapabilirsiniz. Ve herkesle konuşabilirsiniz. Bu koca bir merkeziyetsiz mesajlaşma ağı!", "@welcomeText": {}, - "setCustomPermissionLevel": "Özel izin düzeyi ayarla", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Lütfen aşağıdan önceden tanımlanmış bir rol seçin veya 0 ile 100 arasında bir özel izin seviyesi girin.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Kullanıcıyı yok say", "@ignoreUser": {}, - "normalUser": "Normal kullanıcı", - "@normalUser": {}, "commandHint_roomupgrade": "Bu odayı belirtilen oda sürümüne yükseltin", "@commandHint_roomupgrade": {}, "checkList": "Kontrol listesi", @@ -3208,4 +2792,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index 59dd7ace..72b90b9a 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -313,16 +313,6 @@ "type": "String", "placeholders": {} }, - "confirm": "Підтвердити", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Під'єднатись", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Контакт був запрошений в групу", "@contactHasBeenInvitedToTheGroup": { "type": "String", @@ -392,33 +382,6 @@ } } }, - "dateWithoutYear": "{day}-{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{day}-{month}-{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "delete": "Видалити", "@delete": { "type": "String", @@ -474,11 +437,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Укажіть короткий код емодзі та зображення!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Порожня бесіда", "@emptyChat": { "type": "String", @@ -508,11 +466,6 @@ } } }, - "enterYourHomeserver": "Введіть адресу домашнього сервера", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "fileName": "Назва файлу", "@fileName": { "type": "String", @@ -589,11 +542,6 @@ "type": "String", "placeholders": {} }, - "identity": "Ідентифікація", - "@identity": { - "type": "String", - "placeholders": {} - }, "incorrectPassphraseOrKey": "Неправильна парольна фраза або ключ відновлення", "@incorrectPassphraseOrKey": { "type": "String", @@ -709,11 +657,6 @@ "type": "String", "placeholders": {} }, - "license": "Ліцензія", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Світлий", "@lightTheme": { "type": "String", @@ -899,11 +842,6 @@ } } }, - "rejoin": "Приєднатися знову", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "Вилучити", "@remove": { "type": "String", @@ -923,11 +861,6 @@ } } }, - "removeDevice": "Вилучити пристрій", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Розблокувати у бесіді", "@unbanFromChat": { "type": "String", @@ -948,15 +881,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "Переглянуто {username}", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Надіслати", "@send": { "type": "String", @@ -1022,11 +946,6 @@ } } }, - "setInvitationLink": "Указати посилання для запрошення", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, "setStatus": "Указати статус", "@setStatus": { "type": "String", @@ -1257,11 +1176,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Шпалери:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "whoIsAllowedToJoinThisGroup": "Кому дозволено приєднуватися до цієї групи", "@whoIsAllowedToJoinThisGroup": { "type": "String", @@ -1297,26 +1211,11 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Сповіщення ввімкнені для цього облікового запису", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "notifications": "Сповіщення", "@notifications": { "type": "String", "placeholders": {} }, - "memberChanges": "Зміни учасників", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, - "inviteForMe": "Запрошення для мене", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "enterAnEmailAddress": "Введіть адресу е-пошти", "@enterAnEmailAddress": { "type": "String", @@ -1362,16 +1261,6 @@ "type": "String", "placeholders": {} }, - "containsUserName": "Містить ім’я користувача", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, - "containsDisplayName": "Містить показуване ім’я", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, "changePassword": "Змінити пароль", "@changePassword": { "type": "String", @@ -1382,11 +1271,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Повідомлення ботів", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "or": "Або", "@or": { "type": "String", @@ -1508,11 +1392,6 @@ "type": "String", "placeholders": {} }, - "pleaseChoose": "Виберіть", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseEnter4Digits": "Введіть 4 цифри або залиште порожнім, щоб вимкнути блокування застосунку.", "@pleaseEnter4Digits": { "type": "String", @@ -1543,11 +1422,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "Встановити власні емодзі", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "weSentYouAnEmail": "Ми надіслали вам електронний лист", "@weSentYouAnEmail": { "type": "String", @@ -1617,18 +1491,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "Домашній сервер підтримує такі версії специфікацій:\n{serverVersions}\nАле цей застосунок підтримує лише {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "areYouSureYouWantToLogout": "Ви впевнені, що хочете вийти?", "@areYouSureYouWantToLogout": { "type": "String", @@ -1677,11 +1539,6 @@ "type": "String", "placeholders": {} }, - "sendSticker": "Надіслати наліпку", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Помилка під час отримання розташування: {error}", "@errorObtainingLocation": { "type": "String", @@ -1747,11 +1604,6 @@ "type": "String", "placeholders": {} }, - "toggleUnread": "Позначити прочитаним/непрочитаним", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "transferFromAnotherDevice": "Перенесення з іншого пристрою", "@transferFromAnotherDevice": { "type": "String", @@ -1762,11 +1614,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Надіслати оригінал", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "whoCanPerformWhichAction": "Хто і яку дію може виконувати", "@whoCanPerformWhichAction": { "type": "String", @@ -1793,11 +1640,6 @@ "placeholders": {} }, "homeserver": "Домашній сервер", - "goToTheNewRoom": "Перейти до нової кімнати", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "groups": "Групи", "@groups": { "type": "String", @@ -1813,7 +1655,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Бесіду додано до цього простору", "chatBackupDescription": "Ваші повідомлення захищені ключем відновлення. Переконайтеся, що ви не втратите його.", "@chatBackupDescription": { "type": "String", @@ -1899,21 +1740,11 @@ "type": "String", "placeholders": {} }, - "setPermissionsLevel": "Указати рівні дозволів", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "shareLocation": "Поділитися місцеперебуванням", "@shareLocation": { "type": "String", "placeholders": {} }, - "singlesignon": "Єдиний вхід", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Забагато запитів. Спробуйте пізніше!", "@tooManyRequestsWarning": { "type": "String", @@ -1924,15 +1755,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 непрочитана бесіда} few{{unreadCount} непрочитані бесіди} many{{unreadCount} непрочитаних бесід} other{{unreadCount} непрочитані бесіди}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "withTheseAddressesRecoveryDescription": "За допомогою цих адрес ви можете відновити свій пароль.", "@withTheseAddressesRecoveryDescription": { "type": "String", @@ -2031,11 +1853,6 @@ "type": "String", "placeholders": {} }, - "people": "Люди", - "@people": { - "type": "String", - "placeholders": {} - }, "pin": "Закріпити", "@pin": { "type": "String", @@ -2084,17 +1901,7 @@ }, "oneClientLoggedOut": "На одному з ваших клієнтів виконано вихід із системи", "bundleName": "Назва вузла", - "toggleFavorite": "Перемикнути вибране", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, "removeFromBundle": "Вилучити з цього вузла", - "toggleMuted": "Увімкнути/вимкнути звук", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, "editBundlesForAccount": "Змінити вузол для цього облікового запису", "addToBundle": "Додати до вузлів", "repeatPassword": "Повторіть пароль", @@ -2103,7 +1910,6 @@ "messageType": "Тип повідомлення", "openGallery": "Відкрити галерею", "sender": "Відправник", - "addToSpaceDescription": "Виберіть простір, щоб додати до нього цю бесіду.", "removeFromSpace": "Вилучити з простору", "start": "Почати", "commandHint_discardsession": "Відкинути сеанс", @@ -2126,21 +1932,6 @@ "type": "String", "description": "Usage hint for the command /dm" }, - "openVideoCamera": "Відкрити камеру для відео", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "Опублікувати", - "videoWithSize": "Відео ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "dismiss": "Відхилити", "markAsRead": "Позначити прочитаним", "reportUser": "Поскаржився на користувача", @@ -2165,33 +1956,7 @@ "voiceCall": "Голосовий виклик", "unsupportedAndroidVersionLong": "Для цієї функції потрібна новіша версія Android. Перевірте наявність оновлень або підтримку Lineage OS.", "videoCallsBetaWarning": "Зауважте, що відеовиклики на ранньому етапі розробки. Вони можуть працювати не так, як очікувалося, або взагалі не працювати на всіх платформах.", - "emailOrUsername": "Електронна адреса або ім’я користувача", "experimentalVideoCalls": "Експериментальні відеовиклики", - "switchToAccount": "Перемкнутися на обліковий запис {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Наступний обліковий запис", - "previousAccount": "Попередній обліковий запис", - "addWidget": "Додати віджет", - "widgetVideo": "Відео", - "widgetCustom": "Користувацький", - "widgetName": "Назва", - "widgetNameError": "Укажіть коротку назву.", - "widgetEtherpad": "Текстова примітка", - "widgetJitsi": "Jitsi Meet", - "widgetUrlError": "Це недійсна URL-адреса.", - "errorAddingWidget": "Помилка додавання віджета.", - "separateChatTypes": "Розділіть особисті бесіди та групи", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youInvitedBy": "📩 Ви були запрошені {user}", "@youInvitedBy": { "placeholders": { @@ -2256,7 +2021,6 @@ "storeInAppleKeyChain": "Зберегти в Apple KeyChain", "storeSecurlyOnThisDevice": "Зберегти безпечно на цей пристрій", "pleaseEnterRecoveryKeyDescription": "Щоб розблокувати старі повідомлення, введіть ключ відновлення, згенерований у попередньому сеансі. Ваш ключ відновлення це НЕ ваш пароль.", - "pleaseEnterRecoveryKey": "Введіть ключ відновлення:", "recoveryKey": "Ключ відновлення", "recoveryKeyLost": "Ключ відновлення втрачено?", "users": "Користувачі", @@ -2271,14 +2035,8 @@ } }, "hydrate": "Відновлення з файлу резервної копії", - "hydrateTorLong": "Минулого разу ви експортували свій сеанс із TOR? Швидко імпортуйте його та продовжуйте спілкування.", - "indexedDbErrorTitle": "Проблеми приватного режиму", - "indexedDbErrorLong": "На жаль, сховище повідомлень не ввімкнуто у приватному режимі типово.\nВідкрийте\n - about:config\n - установіть для dom.indexedDB.privateBrowsing.enabled значення true\nІнакше запустити FluffyChat буде неможливо.", "dehydrate": "Експортувати сеанс та очистити пристрій", "dehydrateWarning": "Цю дію не можна скасувати. Переконайтеся, що ви безпечно зберігаєте файл резервної копії.", - "dehydrateTor": "Користувачі TOR: експорт сеансу", - "dehydrateTorLong": "Для користувачів TOR рекомендується експортувати сеанс перед закриттям вікна.", - "hydrateTor": "Користувачі TOR: імпорт експортованого сеансу", "user": "Користувач", "custom": "Користувацький", "supposedMxid": "Це має бути {mxid}", @@ -2297,28 +2055,10 @@ "noKeyForThisMessage": "Це може статися, якщо повідомлення було надіслано до того, як ви ввійшли у свій обліковий запис на цьому пристрої.\n\nТакож можливо, що відправник заблокував ваш пристрій або щось пішло не так з під'єднанням до інтернету.\n\nЧи можете ви прочитати повідомлення на іншому сеансі? Тоді ви зможете перенести повідомлення з нього! Перейдіть до Налаштування > Пристрої та переконайтеся, що ваші пристрої перевірили один одного. Коли ви відкриєте кімнату наступного разу й обидва сеанси будуть на активні, ключі будуть передані автоматично.\n\nВи ж не хочете втрачати ключі після виходу або зміни пристроїв? Переконайтеся, що ви ввімкнули резервне копіювання бесід у налаштуваннях.", "foregroundServiceRunning": "Це сповіщення з'являється під час роботи основної служби.", "screenSharingTitle": "спільний доступ до екрана", - "callingPermissions": "Дозволи на виклик", - "callingAccount": "Обліковий запис для виклику", - "callingAccountDetails": "Дозволяє FluffyChat використовувати основний застосунок Android для набору номера.", - "appearOnTop": "З'являтися зверху", - "appearOnTopDetails": "Дозволяє застосунку показуватися зверху (не потрібно, якщо Fluffychat вже налаштований обліковим записом для викликів)", "newGroup": "Нова група", "newSpace": "Новий простір", - "enterSpace": "Увійти в простір", - "enterRoom": "Увійти в кімнату", - "otherCallingPermissions": "Мікрофон, камера та інші дозволи FluffyChat", "allSpaces": "Усі простори", "screenSharingDetail": "Ви ділитеся своїм екраном FuffyChat", - "numChats": "{number} бесід", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Сховати неважливі державні свята", "doNotShowAgain": "Не показувати знову", "commandHint_cuddle": "Надіслати пригортайку", "googlyEyesContent": "{senderName} надсилає вам гугл-очі", @@ -2359,7 +2099,6 @@ } } }, - "startFirstChat": "Розпочніть свою першу бесіду", "newSpaceDescription": "Простори дозволяють об'єднувати ваші бесіди та створювати приватні або загальнодоступні спільноти.", "encryptThisChat": "Зашифрувати цю бесіду", "disableEncryptionWarning": "З міркувань безпеки ви не можете вимкнути шифрування в бесіді, ув якій воно було ввімкнене раніше.", @@ -2382,24 +2121,8 @@ "readUpToHere": "Читати тут", "jump": "Перейти", "openLinkInBrowser": "Відкрити посилання у браузері", - "allRooms": "Усі групові бесіди", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "reportErrorDescription": "О, ні. Щось пішло не так. Якщо хочете, можете повідомити про помилку розробникам.", "report": "повідомити", - "pleaseTryAgainLaterOrChooseDifferentServer": "Спробуйте пізніше або виберіть інший сервер.", - "signInWithPassword": "Увійти за допомогою пароля", - "signInWith": "Увійти через {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Не файл зображення.", "importNow": "Імпортувати зараз", "importEmojis": "Імпорт емодзі", @@ -2408,13 +2131,10 @@ "exportEmotePack": "Експортувати набір смайликів у форматі .zip", "sendTypingNotifications": "Надсилати сповіщення про ввід тексту", "createGroup": "Створити групу", - "inviteContactToGroupQuestion": "Хочете запросити {contact} до бесіди \"{groupName}\"?", "messagesStyle": "Повідомлення:", "shareInviteLink": "Надіслати запрошувальне посилання", "tryAgain": "Повторіть спробу", - "setTheme": "Налаштувати тему:", "setColorTheme": "Налаштувати колірну тему:", - "addChatDescription": "Додати опис бесіди...", "chatPermissions": "Дозволи бесіди", "chatDescription": "Опис бесіди", "chatDescriptionHasBeenChanged": "Опис бесіди змінено", @@ -2443,12 +2163,10 @@ } } }, - "profileNotFound": "Не вдалося знайти користувача на сервері. Можливо, проблема зі з'єднанням або користувач не існує.", "invite": "Запросити", "redactMessageDescription": "Повідомлення буде відредаговано для всіх учасників цієї розмови. Це не можна скасувати.", "setChatDescription": "Налаштувати опис бесіди", "inviteGroupChat": "📨 Запрошення до групової бесіди", - "invitePrivateChat": "📨 Запрошення до приватної бесіди", "emoteKeyboardNoRecents": "Тут з'являться нещодавно використані смайлики...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2484,7 +2202,6 @@ "kickUserDescription": "Користувача вигнали з бесіди, але не заблокували. До загальнодоступних бесід користувач може приєднатися будь-коли.", "blockListDescription": "Ви можете заблокувати користувачів, які вас турбують. Ви не зможете отримувати жодних повідомлень або запрошень до кімнати від користувачів з вашого персонального списку блокування.", "createGroupAndInviteUsers": "Створити групу та запросити користувачів", - "startConversation": "Розпочати розмову", "blockedUsers": "Заблоковані користувачі", "groupCanBeFoundViaSearch": "Групу можна знайти через пошук", "noUsersFoundWithQuery": "На жаль, не знайдено жодного користувача з запитом \"{query}\".Перевірте, чи не було допущено помилки.", @@ -2509,12 +2226,9 @@ "publicSpaces": "Загальнодоступний простір", "passwordIsWrong": "Введений пароль неправильний", "pleaseEnterYourCurrentPassword": "Введіть поточний пароль", - "publicLink": "Загальнодоступне посилання", "nothingFound": "Нічого не знайдено...", - "decline": "Відхилити", "newPassword": "Новий пароль", "passwordsDoNotMatch": "Паролі відрізняються", - "subspace": "Підпростір", "select": "Вибрати", "pleaseChooseAStrongPassword": "Виберіть надійний пароль", "addChatOrSubSpace": "Додати бесіду або підпростір", @@ -2533,18 +2247,6 @@ } } }, - "databaseBuildErrorBody": "Не вдалося створити базу даних SQlite. Застосунок намагається використовувати стару базу даних. Будь ласка, повідомте про цю помилку розробникам за адресою {url}. Текст помилки: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "Виникла помилка під час запуску застосунку", "restoreSessionBody": "Наразі застосунок намагається відновити ваш сеанс з резервної копії. Будь ласка, повідомте про цю помилку розробникам за адресою {url}. Текст помилки: {error}", "@restoreSessionBody": { @@ -2558,14 +2260,6 @@ } } }, - "youInvitedToBy": "📩 Вас запрошено за посиланням на:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "acceptedKeyVerification": "{sender} погоджується звірити ключі", "@acceptedKeyVerification": { "type": "String", @@ -2596,15 +2290,6 @@ "transparent": "Прозорий", "sendReadReceiptsDescription": "Інші учасники бесіди бачитимуть, що ви прочитали повідомлення.", "formattedMessages": "Форматовані повідомлення", - "forwardMessageTo": "Переслати повідомлення до {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Надіслати підтвердження прочитання", "sendTypingNotificationsDescription": "Інші учасники бесіди бачитимуть, коли ви набираєте нове повідомлення.", "formattedMessagesDescription": "Показувати розширений вміст повідомлень, наприклад, жирний текст, використовуючи markdown.", @@ -2639,11 +2324,6 @@ } } }, - "presenceStyle": "Присутність:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Показувати повідомлення про стан від інших користувачів", "@presencesToggle": { "type": "String", @@ -2672,36 +2352,14 @@ "customEmojisAndStickers": "Власні емодзі та наліпки", "customEmojisAndStickersBody": "Додавайте або діліться власними емодзі або наліпками, які можна використовувати в будь-якій бесіді.", "createNewAddress": "Створити нову адресу", - "userRole": "Роль користувача", - "minimumPowerLevel": "{level} — це найнижчий рівень повноважень.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "commandHint_unignore": "Не ігнорувати цей Matrix ID", "knockRestricted": "Стук обмежено", "appLockDescription": "Блокувати застосунок, коли не використовується ПІН-код", "hideRedactedMessages": "Сховати змінені повідомлення", "hideRedactedMessagesBody": "Якщо хтось змінить повідомлення, його більше не буде видно в бесіді.", "hideInvalidOrUnknownMessageFormats": "Сховати недійсні або невідомі формати повідомлень", - "hideMemberChangesInPublicChats": "Сховати зміни користувачів у загальнодоступних бесідах", - "hideMemberChangesInPublicChatsBody": "Не показувати в хронології бесіди, якщо хтось приєднується до загальнодоступної бесіди або виходить з неї, щоб покращити її читабельність.", "overview": "Огляд", - "notifyMeFor": "Сповіщати мене про", "passwordRecoverySettings": "Налаштування відновлення пароля", - "userWouldLikeToChangeTheChat": "{user} хоче приєднатися до бесіди.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Загальнодоступне посилання ще не створено", "knock": "Постукатись", "knocking": "Стукаються", "noDatabaseEncryption": "Шифрування бази даних не підтримується на цій платформі", @@ -2778,7 +2436,7 @@ "space": {} }, "markAsUnread": "Позначити непрочитаним", - "alwaysUse24HourFormat": "вимкнено", + "alwaysUse24HourFormat": "false", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, @@ -2802,27 +2460,11 @@ }, "changelog": "Зміни", "chatPermissionsDescription": "Визначте, який рівень повноважень необхідний для певних дій у цьому чаті. Рівні повноважень 0, 50 і 100 зазвичай представляють користувачів, модераторів та адміністраторів, але можливі будь-які градації.", - "countChatsAndCountParticipants": "{chats} чати та {participants} учасників", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Більше чатів не знайдено...", - "joinedChats": "Приєднані чати", "unread": "Непрочитані", "sendCanceled": "Надсилання скасовано", "noChatsFoundHere": "Бесід ще немає. Розпочніть спілкування натиснувши кнопку нижче. ⤵️", "loginWithMatrixId": "Увійти за допомогою Matrix-ID", - "discoverHomeservers": "Знайти домашні сервери", - "whatIsAHomeserver": "Що таке домашній сервер?", - "homeserverDescription": "Усі ваші дані зберігаються на домашньому сервері, так само як у постачальника послуг електронної пошти. Ви можете вибрати, який домашній сервер ви хочете використовувати, водночас ви можете спілкуватися з усіма. Докладніше на https://matrix.org.", "doesNotSeemToBeAValidHomeserver": "Здається, це несумісний домашній сервер. Неправильна URL-адреса?", "calculatingFileSize": "Обчислення розміру файлу...", "prepareSendingAttachment": "Підготовка до надсилання вкладення...", @@ -2919,7 +2561,6 @@ "appWantsToUseForLoginDescription": "Цим ви дозволяєте застосунку та вебсайту ділитися інформацією про вас.", "open": "Відкрити", "waitingForServer": "Очікування сервера...", - "appIntroduction": "FluffyChat дає змогу спілкуватися з друзями у різних месенджерах. Дізнайтеся більше на https://matrix.org або просто натисніть *Продовжити*.", "shareKeysWithDescription": "Яким пристроям довіряти, щоб вони могли читати ваші повідомлення в зашифрованих бесідах?", "verifiedDevicesOnly": "Лише верифіковані пристрої", "contentNotificationSettings": "Налаштування сповіщень про вміст", @@ -2981,10 +2622,7 @@ "notificationRuleEncryptedRoomOneToOne": "Зашифрована кімната \"Один на один\"", "deletePushRuleCanNotBeUndone": "Якщо ви видалите це налаштування сповіщень, відновити його буде неможливо.", "ignoreUser": "Ігнорувати користувача", - "setCustomPermissionLevel": "Встановити рівень користувацьких прав", - "normalUser": "Звичайний користувач", "notificationRuleEncryptedDescription": "Повідомляє користувача про повідомлення в зашифрованих кімнатах.", - "setPermissionsLevelDescription": "Будь ласка, виберіть заздалегідь визначену роль нижче або введіть користувацький рівень прав від 0 до 100.", "notificationRuleRoomServerAclDescription": "Приховує сповіщення про списки контролю доступу (ACL) сервера кімнати.", "notificationRuleReaction": "Реакція", "notificationRuleCallDescription": "Повідомляє користувача про виклики.", @@ -3021,13 +2659,9 @@ "moreEvents": "Інші події", "declineInvitation": "Відхилити запрошення", "noMessagesYet": "Поки немає повідомлень", - "longPressToRecordVoiceMessage": "Довге натискання, щоби записати голосове повідомлення.", + "longPressToRecordVoiceMessage": "Затисніть, щоб записати голосове повідомлення.", "pause": "Призупинити", "resume": "Продовжити", - "newSubSpace": "Новий вкладений простір", - "moveToDifferentSpace": "Перемістити в інший простір", - "moveUp": "Перемістити вище", - "moveDown": "Переместити нижче", "removeFromSpaceDescription": "Бесіду буде видалено з простору, та вона залишиться у вашому списку бесід.", "countChats": "{chats} бесід", "@countChats": { @@ -3056,7 +2690,6 @@ } } }, - "donate": "Задонатити", "startedAPoll": "Нове опитування від {username}.", "@startedAPoll": { "type": "String", @@ -3069,9 +2702,8 @@ "poll": "Опитування", "startPoll": "Розпочати опитування", "endPoll": "Завершити опитування", - "answersVisible": "Публічні відповіді", - "answersHidden": "Приховані відповіді", - "pollQuestion": "Запитання", + "answersVisible": "Відповіді видимі", + "pollQuestion": "Питання опитування", "answerOption": "Варіант відповіді", "addAnswerOption": "Додати варіант відповіді", "allowMultipleAnswers": "Дозволити декілька варіантів відповіді", @@ -3134,9 +2766,14 @@ "logs": "Журнали", "advancedConfigs": "Розширені налаштування", "advancedConfigurations": "Розширені налаштування", - "signInWithLabel": "Увійти через:", "identityServer": "Сервер профілів:", "clientWellKnownInformation": "Дані клієнту із .well-known:", "federationBaseUrl": "Основний URL федерації", - "baseUrl": "Основний URL" -} + "baseUrl": "Основний URL", + "signIn": "Увійти", + "createNewAccount": "Створити новий обліковий запис", + "signUpGreeting": "FluffyChat децентралізований! Виберіть сервер, на якому ви хочете створити свій обліковий запис, і почнімо!", + "signInGreeting": "Ви вже маєте обліковий запис у Matrix? Ласкаво просимо! Виберіть свій домашній сервер і ввійдіть.", + "appIntro": "За допомогою FluffyChat ви можете спілкуватися зі своїми друзями. Це безпечний децентралізований месенджер [matrix]! Дізнайтеся більше на сайті https://matrix.org або просто зареєструйтеся.", + "theProcessWasCanceled": "Процес скасовано." +} \ No newline at end of file diff --git a/lib/l10n/intl_uz.arb b/lib/l10n/intl_uz.arb index a4df2898..96343138 100644 --- a/lib/l10n/intl_uz.arb +++ b/lib/l10n/intl_uz.arb @@ -1,13 +1,10 @@ { "repeatPassword": "Parolni takrorlang", - "normalUser": "Oddiy foydalanuvchi", "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, "notAnImage": "Rasm fayli emas.", - "setCustomPermissionLevel": "Maxsus ruxsatlar darajasini sozlash", - "setPermissionsLevelDescription": "Quyidagi oldindan belgilangan rolni tanlang yoki 0-100 orasidagi maxsus ruxsatlar darajasini kiriting.", "ignoreUser": "Foydalanuvchini e’tiborsiz qoldirish", "remove": "O‘chirish", "@remove": { @@ -72,7 +69,6 @@ } } }, - "addChatDescription": "Suhbat tavsifini kiriting...", "addToSpace": "Maydonga qo‘shish", "admin": "Admin", "@admin": { @@ -199,33 +195,8 @@ } }, "sendOnEnter": "Enterda yuborish", - "badServerVersionsException": "Homeserver quyidagi Spec versiyalarini qo'llab-quvvatlaydi:\n{serverVersions}\nLekin bu ilova faqat {supportedVersions} versiyalarini qo'llab-quvvatlaydi", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, - "countChatsAndCountParticipants": "{chats} suhbatlar va {participants} ishtirokchilar", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "Boshqa chatlar topilmadi...", "noChatsFoundHere": "Bu yerda hali chat topilmadi. Quyidagi tugmadan foydalanib, kimdir bilan yangi suhbat boshlang. ⤵️", - "joinedChats": "Qo'shilgan suhbatlar", "unread": "Oʻqilmagan", "space": "Boʻshliq", "spaces": "Boʻshliqlar", @@ -261,11 +232,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "Bot xabarlari", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "Bekor qilish", "@cancel": { "type": "String", @@ -471,7 +437,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "Suhbat bu maydonga kiritildi", "changedTheRoomAliases": "{username} xona taxalluslarini oʻzgartirdi", "@changedTheRoomAliases": { "type": "String", @@ -613,31 +578,11 @@ "type": "String", "placeholders": {} }, - "confirm": "Tasdiqlash", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "Ulanish", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "Kontakt guruhga taklif qilindi", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "Displey nomni oʻz ichiga oladi", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "Foydalanuvchi nomini oʻz ichiga oladi", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "Kontent server administratorlariga xabar qilindi", "@contentHasBeenReported": { "type": "String", @@ -733,33 +678,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "Bu sizning foydalanuvchi hisobingizni oʻchirib qoʻyadi. Buni qaytarib boʻlmaydi! Ishonchingiz komilmi?", "@deactivateAccountWarning": { "type": "String", @@ -805,11 +723,6 @@ "type": "String", "placeholders": {} }, - "allRooms": "Barcha guruh suhbatlar", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "emotePacks": "Guruh uchun Emote toʻplamlar", "@emotePacks": { "type": "String", @@ -831,11 +744,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Siz emote qisqa kodi va rasmni tanlashingiz kerak!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "Boʻsh suhbat", "@emptyChat": { "type": "String", @@ -891,11 +799,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "Yangi guruhga oʻtish", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "Guruh", "@group": { "type": "String", @@ -991,7 +894,6 @@ "type": "String", "placeholders": {} }, - "inviteContactToGroupQuestion": "{contact} ni \"{groupName}\" suhbatiga taklif qilishni istaysizmi?", "inviteContactToGroup": "Kontaktni {groupName} ga taklif qiling", "@inviteContactToGroup": { "type": "String", @@ -1028,11 +930,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "Men uchun taklif qilish", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} sizni FluffyChat’ga taklif qildi.\n1. fluffychat.im saytiga tashrif buyuring va ilovani oʻrnating.\n2. Roʻyxatdan oʻting yoki tizimga kiring.\n3. Taklif havolasini oching:\n{link}", "@inviteText": { "type": "String", @@ -1121,11 +1018,6 @@ "placeholders": {} }, "homeserver": "Uy serveri", - "enterYourHomeserver": "Uy serveriga kiring", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "errorObtainingLocation": "Joylashuv axboroti olinmadi: {error}", "@errorObtainingLocation": { "type": "String", @@ -1212,11 +1104,6 @@ "type": "String", "placeholders": {} }, - "license": "Litsenziya", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "Yorugʻlik", "@lightTheme": { "type": "String", @@ -1233,10 +1120,6 @@ }, "dehydrate": "Sessiyani eksport qilish va qurilmani oʻchirish", "dehydrateWarning": "Bu amalni bekor qilib boʻlmaydi. Zaxira faylini xavfsiz saqlang.", - "dehydrateTor": "TOR foydalanuvchilari: Seansni eksport qilish", - "dehydrateTorLong": "TOR foydalanuvchilari uchun oynani yopishdan oldin seansni eksport qilish tavsiya etiladi.", - "hydrateTor": "TOR foydalanuvchilari: Seans eksportini import qilish", - "hydrateTorLong": "Seansingizni oxirgi marta TOR’da eksport qildingizmi? Uni tezda import qiling va suhbatni davom ettiring.", "hydrate": "Zaxira faylidan tiklash", "loadingPleaseWait": "Yuklanmoqda… Iltimos, kuting.", "@loadingPleaseWait": { @@ -1277,11 +1160,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "Aʼzo oʻzgarishlari", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "Qayd etmoq", "@mention": { "type": "String", @@ -1392,11 +1270,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "Ushbu hisob uchun bildirishnomalar yoqildi", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} foydalanuvchilar yozmoqda…", "@numUsersTyping": { "type": "String", @@ -1456,11 +1329,6 @@ "type": "String", "placeholders": {} }, - "openVideoCamera": "Video uchun kamerani oching", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "oneClientLoggedOut": "Mijozlaringizdan biri tizimdan chiqdi", "addAccount": "Hisob qoʻshish", "editBundlesForAccount": "Bu hisob uchun toʻplamlarni tahrirlash", @@ -1505,21 +1373,13 @@ "type": "String", "placeholders": {} }, - "hideMemberChangesInPublicChats": "Ommaviy suhbatlarda aʼzolarga oʻzgartirishlarni yashirish", - "hideMemberChangesInPublicChatsBody": "Oʻqish qulayligini oshirish uchun kimdir ochiq suhbatga qoʻshilsa yoki undan chiqsa, suhbat vaqt jadvalida koʻrsatilmasin.", "overview": "Umumiy ma'lumot", - "notifyMeFor": "Menga bildirishnoma yuborish", "passwordRecoverySettings": "Parolni qayta tiklash sozlamalari", "passwordRecovery": "Parolni qayta tiklash", "@passwordRecovery": { "type": "String", "placeholders": {} }, - "people": "Odamlar", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "Rasm tanlash", "@pickImage": { "type": "String", @@ -1539,11 +1399,6 @@ } } }, - "pleaseChoose": "Iltimos tanlang", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "Iltimos, kirish kodini tanlang", "@pleaseChooseAPasscode": { "type": "String", @@ -1559,7 +1414,6 @@ "type": "String", "placeholders": {} }, - "pleaseEnterRecoveryKey": "Iltimos, tiklash kalitingizni kiriting:", "pleaseEnterYourPassword": "Iltimos parolingizni kiriting", "@pleaseEnterYourPassword": { "type": "String", @@ -1660,11 +1514,6 @@ } } }, - "rejoin": "Qayta qoʻshilish", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "removeAllOtherDevices": "Qolgan barcha qurilmalarni oʻchirish", "@removeAllOtherDevices": { "type": "String", @@ -1679,11 +1528,6 @@ } } }, - "removeDevice": "Qurilmani oʻchirish", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "Suhbat blokidan chiqazish", "@unbanFromChat": { "type": "String", @@ -1741,15 +1585,6 @@ }, "recoveryKey": "Tiklash kaliti", "recoveryKeyLost": "Tiklash kaliti yo‘qolib qoldimi?", - "seenByUser": "{username} ko‘rgan", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "Yuborish", "@send": { "type": "String", @@ -1793,16 +1628,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "Asl nusxani yuborish", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "Stiker yuborish", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "Video yuborish", "@sendVideo": { "type": "String", @@ -1862,32 +1687,12 @@ } } }, - "separateChatTypes": "To‘g‘ridan-to‘g‘ri suhbatlar va guruhlarni alohida ajratish", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "setAsCanonicalAlias": "Asosiy taxallus sifatida belgilash", "@setAsCanonicalAlias": { "type": "String", "placeholders": {} }, - "setCustomEmotes": "Maxsus hissiyotlarni sozlash", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, "setChatDescription": "Suhbat tavsifini sozlash", - "setInvitationLink": "Taklif havolasini sozlash", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "Ruxsatlar darajasini belgilash", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "Holatni sozlash", "@setStatus": { "type": "String", @@ -1922,21 +1727,11 @@ "type": "String", "placeholders": {} }, - "presenceStyle": "Mavjudlik:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "Boshqa foydalanuvchilarning holat xabarlarini ko‘rsatish", "@presencesToggle": { "type": "String", "placeholders": {} }, - "singlesignon": "Yagona kirish", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "Tashlab ketish", "@skip": { "type": "String", @@ -1966,7 +1761,6 @@ } } }, - "startFirstChat": "Birinchi suhbatni boshlash", "status": "Holati", "@status": { "type": "String", @@ -2017,21 +1811,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "Saralanganni almashtirish", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "O‘chirib qo‘yish", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "O‘qilgan/O‘qilmaganni belgilash", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "Talablar soni oshib ketdi. Keyinroq qayta urining!", "@tooManyRequestsWarning": { "type": "String", @@ -2098,15 +1877,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 ta oʻqilmagan suhbat} other{{unreadCount} ta o‘qilmagan chat}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} va yana {count} kishi yozmoqda…", "@userAndOthersAreTyping": { "type": "String", @@ -2232,11 +2002,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "Fon rasmi:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "Ogohlantirish!", "@warning": { "type": "String", @@ -2308,19 +2073,9 @@ "sender": "Yuboruvchi", "openGallery": "Galereyani ochish", "removeFromSpace": "Guruhdan olib tashlash", - "addToSpaceDescription": "Bu suhbatni unga kiritish uchun guruhni tanlang.", "start": "Boshlash", "usersMustKnock": "Foydalanuvchilar taqillatishi kerak", "noOneCanJoin": "Hech kim qoʻshila olmaydi", - "userWouldLikeToChangeTheChat": "{user} suhbatga qoʻshilmoqchi.", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "Hech qanday ochiq havola yaratilmagan", "knock": "Taqillating", "users": "Foydalanuvchilar", "unlockOldMessages": "Eski xabarlarni qulfdan chiqaring", @@ -2342,29 +2097,11 @@ "foregroundServiceRunning": "Bu bildirishnoma old plan xizmati ishlab turgan paytda paydo bo‘ladi.", "screenSharingTitle": "Ekranni ulashish", "screenSharingDetail": "Siz ekraningizni FuffyChat’da ulashmoqdasiz", - "callingPermissions": "Qoʻngʻiroq qilish ruxsatlar", - "callingAccount": "Qoʻngʻiroq qilishi hisobi", - "callingAccountDetails": "FluffyChat’ga mahalliy android terish ilovasidan foydalanishga ruxsat beradi.", - "appearOnTop": "Teppada paydo boʻladi", - "appearOnTopDetails": "Ilovaning yuqori qismida koʻrinishiga ruxsat beradi (agar sizda Fluffychat qoʻngʻiroq qiluvchi hisobi sifatida oʻrnatilgan boʻlsa, kerak emas)", - "otherCallingPermissions": "Mikrofon, kamera va boshqa FluffyChat ruxsatnomalari", "whyIsThisMessageEncrypted": "Nima uchun bu xabarni oʻqib boʻlmaydi?", "noKeyForThisMessage": "Bu xabar siz ushbu qurilmada hisobingizga kirishdan oldin yuborilgan boʻlsa sodir boʻlishi mumkin.\n\nShuningdek, joʻnatuvchi qurilmangizni bloklagan yoki internet ulanishida biron bir muammo yuzaga kelgan boʻlishi mumkin.\n\nXabarni boshqa sessiyada oʻqiy olasizmi? Keyin xabarni undan uzatishingiz mumkin! Sozlamalar > Qurilmalar boʻlimiga oʻting va qurilmalaringiz bir-birini tasdiqlaganligiga ishonch hosil qiling. Keyingi safar xonani ochganingizda va ikkala sessiya ham oldinda boʻlganda, kalitlar avtomatik ravishda uzatiladi.\n\nTizimdan chiqishda yoki qurilmalarni almashtirishda kalitlarni yoʻqotishni xohlamaysizmi? Sozlamalarda suhbatning zaxira nusxasini yoqganingizga ishonch hosil qiling.", "newGroup": "Yangi guruh", "newSpace": "Yangi maydon", - "enterSpace": "Maydonga kirish", - "enterRoom": "Guruhga kirish", "allSpaces": "Barcha maydonlar", - "numChats": "{number} suhbatlar", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "Muhim boʻlmagan shtat tadbirlarini yashirish", "hidePresences": "Holat roʻyxati yashirilsinmi?", "doNotShowAgain": "Qaytib koʻrsatilmasin", "wasDirectChatDisplayName": "Boʻsh suhbat ({oldDisplayName} edi)", @@ -2378,14 +2115,12 @@ }, "newSpaceDescription": "Maydonlar sizga suhbatlaringizni birlashtirish va shaxsiy yoki ommaviy hamjamiyatlarni yaratish imkonini beradi.", "openChat": "Suhbatni ochish", - "indexedDbErrorLong": "Xabarlarni saqlash, afsuski, sukut bo'yicha maxfiy rejimda yoqilmagan.\nIltimos, tashrif buyuring\n- about:config\n- dom.indexedDB.privateBrowsing.enabled ga true berilgan\nAks holda, FluffyChat ni ishga tushirish mumkin emas.", "youJoinedTheChat": "Siz suhbatga qoʻshildingiz", "encryptThisChat": "Bu suhbatni shifrlash", "disableEncryptionWarning": "Xavfsizlik nuqtai nazaridan, agar u ilgari yoqilgan boʻlsa, suhbatda shifrlashni oʻchirib qoʻyolmaysiz.", "reopenChat": "Suhbatni qayta ochish", "noBackupWarning": "Diqqat! Suhbatni zaxiralashni yoqmasangiz, shifrlangan xabarlaringizga kirish huquqini yoʻqotasiz. Tizimdan chiqishdan oldin chatni zaxiralashni yoqishingiz tavsiya etiladi.", "inviteGroupChat": "📨 Guruh suhbatiga taklif", - "invitePrivateChat": "📨 Shaxsiy suhbatga taklif", "archiveRoomDescription": "Suhbat arxivga koʻchiriladi. Boshqa foydalanuvchilar sizning suhbatdan chiqqaningizni koʻra oladilar.", "roomUpgradeDescription": "Keyin suhbat yangi guruh versiyasi bilan qayta yaratiladi. Barcha ishtirokchilarga yangi suhbatga oʻtishlari kerakligi haqida xabar beriladi. Guruh versiyalari haqida koʻproq maʼlumotni https://spec.matrix.org/latest/rooms/ manzilida topishingiz mumkin", "banUserDescription": "Foydalanuvchi suhbatdan bloklanadi va blokdan chiqarilmaguncha suhbatga qayta kira olmaydi.", @@ -2436,7 +2171,6 @@ "noticeChatBackupDeviceVerification": "Eslatma: Barcha qurilmalaringizni suhbat zaxira nusxasiga ulaganingizda, ular avtomatik ravishda tasdiqlanadi.", "welcomeText": "Hey Hey 👋 Bu FluffyChat. Siz https://matrix.org bilan mos keladigan istalgan uy serveriga kirishingiz mumkin. Va keyin istalgan kishi bilan suhbatlashishingiz mumkin. Bu ulkan markazlashtirilmagan xabar almashish tarmog'i!", "unableToJoinChat": "Chatga qoʻshilib boʻlmadi. Ehtimol, boshqa tomon suhbatni allaqachon yopib qoʻygan.", - "appIntroduction": "FluffyChat sizga turli messenjerlar orqali doʻstlaringiz bilan suhbatlashish imkonini beradi. Batafsil maʼlumotni https://matrix.org saytidan oling yoki shunchaki *Davom etish* tugmasini bosing.", "newChatRequest": "📩 Yangi suhbat uchun soʻrov", "shareKeysWithDescription": "Shifrlangan suhbatlarda xabarlaringizni oʻqishlari uchun qaysi qurilmalarga ishonish kerak?", "enterNewChat": "Yangi suhbatga kirish", @@ -2452,16 +2186,6 @@ }, "backToMainChat": "Asosiy suhbatga qaytish", "pleaseEnterRecoveryKeyDescription": "Eski xabarlaringizni qulfdan chiqarish uchun, iltimos, avvalgi seansdan yaratilgan tiklash kalitingizni kiriting. Sizning tiklash kalitingiz parolingiz EMAS.", - "publish": "Nashr qilish", - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "markAsRead": "Oʻqilgan sifatida belgilash", "reportUser": "Foydalanuvchi haqida xabar berish", "dismiss": "Rad qilmoq", @@ -2485,21 +2209,6 @@ "unsupportedAndroidVersionLong": "Bu funksiya Androidning yangi versiyasini talab qiladi. Iltimos, yangilanishlar yoki Lineage OS qoʻllab-quvvatlashini tekshiring.", "videoCallsBetaWarning": "Iltimos, video qoʻngʻiroqlar hozirda beta-versiyada ekanligini unutmang. Ular kutilganidek ishlamasligi yoki barcha platformalarda umuman ishlamasligi mumkin.", "experimentalVideoCalls": "Tajriba video qoʻngʻiroqlar", - "emailOrUsername": "Elektron pochta yoki foydalanuvchi nomi", - "indexedDbErrorTitle": "Shaxsiy rejim bilan bogʻliq muammolar", - "switchToAccount": "{number} hisobiga oʻtish", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "Keyingi hisob", - "previousAccount": "Oldingi hisob", - "addWidget": "Vidjet qoʻshish", - "widgetVideo": "Video", "sorryThatsNotPossible": "Kechirasiz... bu mumkin emas", "deviceKeys": "Qurilma kalitlari:", "noOtherDevicesFound": "Boshqa qurilma topilmadi", @@ -2527,19 +2236,6 @@ "openLinkInBrowser": "Havolani brauzerda ochish", "reportErrorDescription": "😭 Voy yo‘q. Nimadir xato ketdi. Agar xohlasangiz, bu xato haqida dasturchilarga xabar berishingiz mumkin.", "report": "hisobot", - "signInWithPassword": "Parol bilan kirish", - "pleaseTryAgainLaterOrChooseDifferentServer": "Keyinroq qayta urining yoki boshqa serverni tanlang.", - "signInWith": "{provider} bilan kiring", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "profileNotFound": "Foydalanuvchi serverda topilmadi. Ehtimol, ulanishda muammo bor yoki foydalanuvchi mavjud emas.", - "setTheme": "Mavzu tanlash:", "setColorTheme": "Rang mavzusini sozlash:", "invite": "Taklif qilish", "invalidInput": "Xato kiritildi!", @@ -2569,7 +2265,6 @@ "createGroupAndInviteUsers": "Guruh yaratish va foydalanuvchilarni taklif qilish", "groupCanBeFoundViaSearch": "Guruh qidiruv orqali topilishi mumkin", "wrongRecoveryKey": "Kechirasiz... bu toʻgʻri tiklash kaliti emasga oʻxshaydi.", - "startConversation": "Suhbat boshlash", "commandHint_sendraw": "Xom jsonni yuborish", "databaseMigrationTitle": "Maʼlumotlar bazasi optimallashtirilgan", "databaseMigrationBody": "Iltimos, kuting. Bu biroz vaqt olishi mumkin.", @@ -2581,39 +2276,14 @@ "pleaseChooseAStrongPassword": "Iltimos kuchli maxfiy soʻz tanlang", "passwordsDoNotMatch": "Maxfiy soʻzlar mos kelmadi", "passwordIsWrong": "Siz kiritgan maxfiy soʻz xato", - "publicLink": "Ommaviy havola", "createNewAddress": "Yangi manzil yarating", "joinSpace": "Maydonga qoʻshiling", "publicSpaces": "Ommaviy maydonlar", - "subspace": "Sub-maydonlar", - "decline": "Rad qilish", "thisDevice": "Ushbu qurilma:", "initAppError": "Ilovani ishga tushirishda xatolik yuz berdi", - "userRole": "Foydalanuvchi roli", - "minimumPowerLevel": "{level} minimal quvvat darajasidir.", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "searchMore": "Koʻproq qidirish...", "gallery": "Galereya", "files": "Fayllar", - "databaseBuildErrorBody": "SQlite maʼlumotlar bazasini yaratib boʻlmadi. Ilova hozircha eski maʼlumotlar bazasidan foydalanishga harakat qilmoqda. Iltimos, ushbu xato haqida {url} manzilidagi dasturchilarga xabar bering. Xato xabari: {error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sessionLostBody": "Seansingiz yoʻqoldi. Iltimos, ushbu xato haqida {url} manzilidagi dasturchilarga xabar bering. Xato xabari: {error}", "@sessionLostBody": { "type": "String", @@ -2638,15 +2308,6 @@ } } }, - "forwardMessageTo": "Xabarni {roomName}ga yoʻnaltirilsinmi?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceipts": "Oʻqilganlik haqida xabarnomalarni yuborish", "formattedMessages": "Formatlangan xabarlar", "formattedMessagesDescription": "Markdown yordamida qalin matn kabi boy xabar mazmunini koʻrsating.", @@ -2793,9 +2454,6 @@ "changelog": "O‘zgarishlar jurnali", "sendCanceled": "Yuborish bekor qilindi", "loginWithMatrixId": "Matriks-ID bilan kirish", - "discoverHomeservers": "Uy serverlarini kashf eting", - "whatIsAHomeserver": "Uy serveri nima?", - "homeserverDescription": "Barcha ma’lumotlaringiz xuddi elektron pochta provayderi kabi uy serverda saqlanadi. Siz qaysi uy serveridan foydalanishni tanlashingiz mumkin, shu bilan birga siz hamma bilan muloqot qilishingiz mumkin. Batafsil: https://matrix.org.", "doesNotSeemToBeAValidHomeserver": "Uy serveri mos emasga o‘xshaydi. URL xato kiritilganmi?", "calculatingFileSize": "Fayl hajmi hisoblanmoqda...", "prepareSendingAttachment": "Yuborish uchun biriktirmani tayyorlang...", @@ -2922,10 +2580,6 @@ "longPressToRecordVoiceMessage": "Ovozli xabarni yozib olish uchun uzoq bosing.", "pause": "Pauza", "resume": "Davom etish", - "newSubSpace": "Yangi quyi maydon", - "moveToDifferentSpace": "Boshqa maydonga o‘tish", - "moveUp": "Yuqoriga surish", - "moveDown": "Pastga surish", "spaceMemberOf": "{spaces} maydoni a’zosi", "@spaceMemberOf": { "type": "String", @@ -2944,7 +2598,6 @@ } } }, - "donate": "Xayriya qilmoq", "startedAPoll": "{username} so‘rovnoma boshladi.", "@startedAPoll": { "type": "String", @@ -2958,7 +2611,6 @@ "startPoll": "So‘rovni boshlash", "endPoll": "So‘rovnomani yakunlash", "answersVisible": "Javoblar ko‘rinadi", - "answersHidden": "Javoblar berkitildi", "pollQuestion": "So‘rovnoma savoli", "answerOption": "Javob varianti", "addAnswerOption": "Javob variantini kiritish", @@ -2985,13 +2637,6 @@ } }, "thread": "Sahifa", - "widgetEtherpad": "Matnli qayd", - "widgetJitsi": "Jitsi Meet", - "widgetCustom": "Maxsus", - "widgetName": "Nomi", - "widgetUrlError": "Bu yaroqli URL emas.", - "widgetNameError": "Iltimos, displey nomini kiriting.", - "errorAddingWidget": "Vidjet kiritilmadi.", "youRejectedTheInvitation": "Taklifni rad etdingiz", "youAcceptedTheInvitation": "👍 Taklifni qabul qildingiz", "youBannedUser": "Siz {user}ni blokladingiz", @@ -3010,14 +2655,6 @@ } } }, - "youInvitedToBy": "📩 Sizni quyidagi havola orqali taklif qilishdi:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "youInvitedBy": "📩 Sizni {user} taklif qildi", "@youInvitedBy": { "placeholders": { @@ -3079,11 +2716,6 @@ "learnMore": "Batafsil", "yourGlobalUserIdIs": "Global foydalanuvchi ID raqamingiz: ", "notificationRuleTombstone": "Qabrtosh", - "identity": "Shaxs", - "@identity": { - "type": "String", - "placeholders": {} - }, "emojis": "Emojilar", "changedTheChatDescription": "{username} chat tavsifini o‘zgartirdi", "changedTheChatName": "{username} chat nomini o‘zgartirdi", @@ -3124,6 +2756,5 @@ }, "logs": "Jurnallar", "advancedConfigs": "Kengaytirilgan konfiguratsiyalar", - "advancedConfigurations": "Kengaytirilgan sozlamalar", - "signInWithLabel": "Kirish:" -} + "advancedConfigurations": "Kengaytirilgan sozlamalar" +} \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index 584c2990..0897f5cd 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -167,33 +167,6 @@ "type": "String", "placeholders": {} }, - "dateWithYear": "{day}/{month}/{year}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithoutYear": "{day}/{month}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "dateAndTimeOfDay": "{date}, {timeOfDay}", "@dateAndTimeOfDay": { "type": "String", @@ -253,16 +226,6 @@ "type": "String", "placeholders": {} }, - "connect": "Kết nối", - "@connect": { - "type": "String", - "placeholders": {} - }, - "confirm": "Xác nhận", - "@confirm": { - "type": "String", - "placeholders": {} - }, "compareNumbersMatch": "So sánh và đảm bảo các số sau đây giống trên máy còn lại", "@compareNumbersMatch": { "type": "String", @@ -445,18 +408,6 @@ "type": "String", "placeholders": {} }, - "badServerVersionsException": "Máy chủ hỗ trợ Spec phiên bản:\n{serverVerions}\nNhưng ứng dụng này chỉ hỗ trợ {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "badServerLoginTypesException": "Máy chủ nhà hỗ trợ kiểu đăng nhập:\n{serverVersions}\nNhưng ứng dụng này chỉ hỗ trợ:\n{supportedVersions}", "@badServerLoginTypesException": { "type": "String", @@ -505,14 +456,8 @@ "@makeAdminDescription": {}, "setColorTheme": "Chọn màu giao diện:", "@setColorTheme": {}, - "callingAccount": "Gọi tài khoản", - "@callingAccount": {}, "openLinkInBrowser": "Mở đường dẫn trong trình duyệt", "@openLinkInBrowser": {}, - "setTheme": "Chọn giao diện:", - "@setTheme": {}, - "invitePrivateChat": "📨 Mời trò chuyện riêng tư", - "@invitePrivateChat": {}, "inviteGroupChat": "📨 Mời nhóm trò chuyện", "@inviteGroupChat": {}, "addToSpace": "Thêm vào không gian", @@ -523,12 +468,8 @@ "@importFromZipFile": {}, "exportEmotePack": "Xuất gói biểu cảm bằng tệp .zip", "@exportEmotePack": {}, - "hideUnimportantStateEvents": "Ẩn các sự kiện không quan trọng", - "@hideUnimportantStateEvents": {}, "replace": "Thay thế", "@replace": {}, - "addChatDescription": "Thêm mô tả hội thoại...", - "@addChatDescription": {}, "report": "báo cáo", "@report": {}, "remove": "Loại bỏ", @@ -540,10 +481,6 @@ "@restricted": {}, "newSpace": "Không gian mới", "@newSpace": {}, - "enterRoom": "Nhập phòng", - "@enterRoom": {}, - "signInWithPassword": "Đăng nhập với mật khẩu", - "@signInWithPassword": {}, "all": "Tất cả", "@all": { "type": "String", @@ -587,8 +524,6 @@ }, "reportErrorDescription": "😭 Ôi. Có lỗi xảy ra. Bạn có thể báo cáo lỗi tới nhà phát triển nếu muốn.", "@reportErrorDescription": {}, - "profileNotFound": "Không tìm thấy người dùng này tại máy chủ. Có thể do lỗi kết nối hoặc người dùng không tồn tại.", - "@profileNotFound": {}, "banUserDescription": "Người dùng sẽ bị cấm khỏi cuộc trò chuyện và không thể tham gia lại cho tới khi được gỡ cấm.", "@banUserDescription": {}, "learnMore": "Tìm hiểu thêm", @@ -601,43 +536,23 @@ "@noOtherDevicesFound": {}, "fileIsTooBigForServer": "Máy chủ báo cáo rằng tệp tin quá lớn để gửi.", "@fileIsTooBigForServer": {}, - "signInWith": "Đăng nhập với {provider}", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "notAnImage": "Không phải tệp ảnh.", "@notAnImage": {}, "importNow": "Nhập vào", "@importNow": {}, "allSpaces": "Tất cả không gian", "@allSpaces": {}, - "enterSpace": "Nhập không gian", - "@enterSpace": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "Hãy thử lại sau hoặc chọn 1 máy chủ khác.", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, "jumpToLastReadMessage": "Đi tới tin nhắn đã đọc mới nhất", "@jumpToLastReadMessage": {}, "commandHint_ignore": "Phớt lờ matrix ID này", "@commandHint_ignore": {}, "appLockDescription": "Khoá ứng dụng khi không dùng bằng mã pin", "@appLockDescription": {}, - "notifyMeFor": "Bật thông báo cho", - "@notifyMeFor": {}, "settings": "Cài đặt", "@settings": { "type": "String", "placeholders": {} }, - "sendSticker": "Gửi nhãn dán", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "fileHasBeenSavedAt": "Tệp đã được lưu tại {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -651,17 +566,6 @@ "@readUpToHere": {}, "jump": "Đi tới", "@jump": {}, - "callingPermissions": "Quyền gọi điện", - "@callingPermissions": {}, - "numChats": "{number} cuộc hội thoại", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, "hidePresences": "Ẩn danh sách trạng thái?", "@hidePresences": {}, "sorryThatsNotPossible": "Xin lỗi... không khả dụng", @@ -732,14 +636,8 @@ } } }, - "setCustomPermissionLevel": "Cài mức phân quyền", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "Vui lòng chọn vai trò được xác định trước bên dưới hoặc nhập mức quyền tùy chỉnh từ 0 đến 100.", - "@setPermissionsLevelDescription": {}, "ignoreUser": "Chặn người dùng", "@ignoreUser": {}, - "normalUser": "Người dùng thường", - "@normalUser": {}, "commandHint_roomupgrade": "Nâng cấp phòng lên phiên bản mặc định", "@commandHint_roomupgrade": {}, "commandHint_cuddle": "Gửi cái ôm", @@ -780,15 +678,6 @@ "@sendOnEnter": {}, "continueText": "Tiếp", "@continueText": {}, - "videoWithSize": "Video ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "markAsRead": "Đánh dấu đã đọc", "@markAsRead": {}, "reportUser": "Báo cáo người dùng", @@ -811,4 +700,4 @@ "@pinMessage": {}, "confirmEventUnpin": "Bạn có muốn bỏ ghim sự kiện?", "@confirmEventUnpin": {} -} +} \ No newline at end of file diff --git a/lib/l10n/intl_yue_Hant.arb b/lib/l10n/intl_yue_Hant.arb index cce50f37..8e3c8b25 100644 --- a/lib/l10n/intl_yue_Hant.arb +++ b/lib/l10n/intl_yue_Hant.arb @@ -1,7 +1,5 @@ { "@@locale": "yue", - "normalUser": "正常用家", - "@normalUser": {}, "areYouSureYouWantToLogout": "係咪確定要 log out?", "@areYouSureYouWantToLogout": { "type": "String", @@ -38,18 +36,6 @@ } } }, - "badServerVersionsException": "呢個 Homeserver 支持以下 Spec 版本:\n{serverVersions}\n但係個 App 淨係支持 {supoortedVersions} 版本", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "喺傾偈入面 Ban 咗佢", "@banFromChat": { "type": "String", @@ -171,8 +157,6 @@ } } }, - "addChatDescription": "講下關於呢個偈係傾嘅乜嘢……", - "@addChatDescription": {}, "addToSpace": "加落去空間嗰度", "@addToSpace": {}, "admin": "Admin", @@ -265,22 +249,8 @@ "@swipeRightToLeftToReply": {}, "sendOnEnter": "撳 Enter 即 Send", "@sendOnEnter": {}, - "countChatsAndCountParticipants": "{chats} 間房同 {participants} 條友", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "noMoreChatsFound": "搵唔到更多偈傾啦…", "@noMoreChatsFound": {}, - "joinedChats": "入咗嘅房間", - "@joinedChats": {}, "unread": "未讀", "@unread": {}, "space": "空間", @@ -302,11 +272,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "機械人訊息", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "取消", "@cancel": { "type": "String", @@ -328,10 +293,6 @@ }, "confirmMatrixId": "Confirm 你嘅 Matrix ID ,我哋先至可以刪除你嘅 Account。", "@confirmMatrixId": {}, - "setCustomPermissionLevel": "自訂權限級別", - "@setCustomPermissionLevel": {}, "importFromZipFile": "喺 .zip 檔案導入", - "@importFromZipFile": {}, - "setPermissionsLevelDescription": "請喺下面選擇一個預定義嘅角色,或輸入介乎0同100之間嘅自定義權限級別。", - "@setPermissionsLevelDescription": {} -} + "@importFromZipFile": {} +} \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 3f8cb470..0a678588 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -78,7 +78,7 @@ "type": "String", "placeholders": {} }, - "areGuestsAllowedToJoin": "是否允许访客加入", + "areGuestsAllowedToJoin": "允许访客加入吗?", "@areGuestsAllowedToJoin": { "type": "String", "placeholders": {} @@ -119,18 +119,6 @@ } } }, - "badServerVersionsException": "主服务器支持的 Spec 版本:\n{serverVersions}\n但此应用仅支持 {supportedVersions} 版本", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "从聊天中封禁", "@banFromChat": { "type": "String", @@ -163,11 +151,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "机器人消息", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "取消", "@cancel": { "type": "String", @@ -487,31 +470,11 @@ "type": "String", "placeholders": {} }, - "confirm": "确认", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "连接", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "联系人已被邀请至群组", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "包含昵称", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "包含用户名", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "此内容已被报告至服务器管理员处", "@contentHasBeenReported": { "type": "String", @@ -586,33 +549,6 @@ } } }, - "dateWithoutYear": "{month}-{day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year}-{month}-{day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "这将停用你的用户账户。这不能被撤销!你确定吗?", "@deactivateAccountWarning": { "type": "String", @@ -718,11 +654,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "你需要选择一个表情快捷码和一张图片!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "空聊天", "@emptyChat": { "type": "String", @@ -772,11 +703,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "输入你的主服务器地址", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "一切就绪!", "@everythingReady": { "type": "String", @@ -817,11 +743,6 @@ "type": "String", "placeholders": {} }, - "goToTheNewRoom": "前往新的聊天室", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "group": "群组", "@group": { "type": "String", @@ -893,11 +814,6 @@ "type": "String", "placeholders": {} }, - "identity": "身份", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "忽略", "@ignore": { "type": "String", @@ -959,11 +875,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "发给我的邀请", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} 邀请你使用 FluffyChat。 \n1. 安装 FluffyChat:https://fluffychat.im \n2. 注册或登录 \n3. 打开邀请链接:\n {link}", "@inviteText": { "type": "String", @@ -1043,11 +954,6 @@ "type": "String", "placeholders": {} }, - "license": "许可证", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "浅色", "@lightTheme": { "type": "String", @@ -1091,11 +997,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "成员变更", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "提及", "@mention": { "type": "String", @@ -1191,11 +1092,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "已为此账户启用通知", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} 人正在输入…", "@numUsersTyping": { "type": "String", @@ -1285,11 +1181,6 @@ "type": "String", "placeholders": {} }, - "people": "联系人", - "@people": { - "type": "String", - "placeholders": {} - }, "pickImage": "选择图像", "@pickImage": { "type": "String", @@ -1309,11 +1200,6 @@ } } }, - "pleaseChoose": "请选择", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "pleaseChooseAPasscode": "请选择一个密码", "@pleaseChooseAPasscode": { "type": "String", @@ -1407,11 +1293,6 @@ } } }, - "rejoin": "重新加入", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "移除", "@remove": { "type": "String", @@ -1431,11 +1312,6 @@ } } }, - "removeDevice": "移除设备", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "从聊天中解封", "@unbanFromChat": { "type": "String", @@ -1491,15 +1367,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "被 {username} 看见", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "发送", "@send": { "type": "String", @@ -1534,16 +1401,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "发送原图", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, - "sendSticker": "发送贴纸", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "sendVideo": "发送视频", "@sendVideo": { "type": "String", @@ -1608,21 +1465,6 @@ "type": "String", "placeholders": {} }, - "setCustomEmotes": "设置自定义表情", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "设置邀请链接", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "设置权限级别", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "设置状态", "@setStatus": { "type": "String", @@ -1652,11 +1494,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "单点登录", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, "skip": "跳过", "@skip": { "type": "String", @@ -1717,21 +1554,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "切换收藏", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "切换静音", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "标记已读/未读", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "请求过多。请稍后再试!", "@tooManyRequestsWarning": { "type": "String", @@ -1798,15 +1620,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1{1 个未读聊天} other{{unreadCount} 个未读聊天}}", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} 和其他 {count} 人正在输入…", "@userAndOthersAreTyping": { "type": "String", @@ -1931,11 +1744,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "壁纸:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "警告!", "@warning": { "type": "String", @@ -2085,7 +1893,6 @@ "sendOnEnter": "按 Enter 键发送", "yourChatBackupHasBeenSetUp": "你的聊天记录备份已设置。", "scanQrCode": "扫描二维码", - "chatHasBeenAddedToThisSpace": "聊天已添加到此空间", "homeserver": "服务器", "oneClientLoggedOut": "你的一个客户端已登出", "removeFromBundle": "从此集合中移除", @@ -2103,7 +1910,6 @@ "openGallery": "打开图库", "messageInfo": "消息信息", "time": "时间", - "addToSpaceDescription": "选择一个空间以添加此聊天。", "removeFromSpace": "从此空间中移除", "start": "开始", "commandHint_discardsession": "丢弃会话", @@ -2126,21 +1932,6 @@ "type": "String", "description": "Usage hint for the command /create" }, - "openVideoCamera": "打开相机拍摄视频", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, - "publish": "发布", - "videoWithSize": "视频 ({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "dismiss": "忽略", "markAsRead": "标为已读", "reportUser": "举报用户", @@ -2166,32 +1957,6 @@ "placeCall": "发起通话", "videoCallsBetaWarning": "请注意,视频通话目前处于测试阶段。它们可能不能像预期的那样工作,或者在所有平台上都不能工作。", "experimentalVideoCalls": "实验性的视频通话", - "emailOrUsername": "电子邮箱或用户名", - "switchToAccount": "切换到账户 {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "nextAccount": "下个账户", - "previousAccount": "上个账户", - "widgetVideo": "视频", - "widgetJitsi": "Jitsi Meet", - "widgetCustom": "自定义", - "widgetNameError": "请提供昵称。", - "errorAddingWidget": "添加小部件出错。", - "addWidget": "添加小部件", - "widgetEtherpad": "文本笔记", - "widgetName": "名称", - "widgetUrlError": "这不是有效的 URL。", - "separateChatTypes": "分开私聊和群组", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "youRejectedTheInvitation": "你拒绝了邀请", "youJoinedTheChat": "你加入了聊天", "youBannedUser": "你封禁了 {user}", @@ -2254,7 +2019,6 @@ "storeInSecureStorageDescription": "将恢复密钥存储在此设备的安全存储中。", "storeInAppleKeyChain": "存储在 Apple KeyChain 中", "unlockOldMessages": "解锁旧消息", - "pleaseEnterRecoveryKey": "请输入你的恢复密钥:", "recoveryKey": "恢复密钥", "recoveryKeyLost": "丢失了恢复密钥?", "pleaseEnterRecoveryKeyDescription": "要解锁你的旧邮件,请输入你在之前会话中生成的恢复密钥。 你的恢复密钥不是你的密码。", @@ -2270,15 +2034,9 @@ } } }, - "dehydrateTor": "TOR 用户:导出会话", - "dehydrateTorLong": "建议 TOR 用户在关闭窗口之前导出会话。", - "hydrateTor": "TOR 用户:导入会话导出", "hydrate": "从备份文件恢复", "dehydrate": "导出会话并擦除设备", "dehydrateWarning": "此操作无法撤消。 确保你安全地存储备份文件。", - "indexedDbErrorTitle": "私有模式问题", - "indexedDbErrorLong": "遗憾的是,默认情况下未在私有模式下启用消息存储。\n请访问\n - about:config\n - 将 dom.indexedDB.privateBrowsing.enabled 设置为 true\n否则,无法运行 FluffyChat。", - "hydrateTorLong": "你上次是否导出 TOR 会话? 快速导入它并继续聊天。", "user": "用户", "custom": "自定义", "confirmMatrixId": "请确认你的 Matrix ID 以删除账户。", @@ -2297,28 +2055,10 @@ "noKeyForThisMessage": "如果消息是在你在此设备上登录账户前发送的,就可能发生这种情况。\n\n也有可能是发送者屏蔽了你的设备或网络连接出了问题。\n\n你能在另一个会话中读取消息吗?如果是的话,你可以从它那里传递信息!点击设置 > 设备,并确保你的设备已经相互验证。当你下次打开聊天室,且两个会话都在前台,密钥就会自动传输。\n\n你不想在退出登录或切换设备时丢失密钥?请确保在设置中启用了聊天备份。", "newGroup": "新群组", "newSpace": "新的空间", - "enterSpace": "进入空间", - "enterRoom": "进入聊天室", "allSpaces": "所有空间", - "appearOnTop": "显示在其它应用上方", - "appearOnTopDetails": "允许应用显示在顶部(如果你已经将 Fluffychat 设置为呼叫账户,则不需要授予此权限)", - "otherCallingPermissions": "麦克风、摄像头和其它 FluffyChat 权限", - "callingPermissions": "呼叫权限", - "callingAccountDetails": "允许 FluffyChat 使用本机 android 拨号器应用。", "foregroundServiceRunning": "此通知在前台服务运行时出现。", "screenSharingTitle": "屏幕共享", - "callingAccount": "呼叫账户", "screenSharingDetail": "你正在 FluffyChat 中共享屏幕", - "numChats": "{number} 个聊天", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "隐藏不重要的状态事件", "doNotShowAgain": "不再显示", "googlyEyesContent": "{senderName} 向你发送了“大眼”表情", "@googlyEyesContent": { @@ -2359,7 +2099,6 @@ } } }, - "startFirstChat": "发起你的第一个聊天", "newSpaceDescription": "空间让你可以整合聊天并建立私人或公共社区。", "encryptThisChat": "加密此聊天", "disableEncryptionWarning": "出于安全考虑 ,你不能在之前已启用加密的聊天中禁用加密。", @@ -2372,20 +2111,6 @@ "readUpToHere": "读到此处", "jump": "跳转", "openLinkInBrowser": "在浏览器中打开链接", - "signInWith": "使用 {provider} 登录", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "allRooms": "所有群聊", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "fileHasBeenSavedAt": "文件已保存在 {path}", "@fileHasBeenSavedAt": { "type": "String", @@ -2397,8 +2122,6 @@ }, "reportErrorDescription": "😭 哦不。出了点差错。如果你愿意,可以向开发人员报告此错误。", "noBackupWarning": "警告!如果不启用聊天备份,你将无法访问加密消息。强烈建议在退出登录前先启用聊天备份。", - "signInWithPassword": "使用密码登录", - "pleaseTryAgainLaterOrChooseDifferentServer": "请稍后再试或选择其它服务器。", "reopenChat": "重新打开聊天", "importEmojis": "导入表情包", "notAnImage": "不是图像文件。", @@ -2409,10 +2132,7 @@ "sendTypingNotifications": "发送正在输入通知", "createGroup": "创建群组", "shareInviteLink": "分享邀请链接", - "profileNotFound": "服务器上找不到此用户。可能是连接有问题或者用户不存在。", - "inviteContactToGroupQuestion": "你是否要邀请 {contact} 参与聊天 \"{groupName}\"?", "tryAgain": "重试", - "addChatDescription": "添加聊天说明…", "chatPermissions": "聊天权限", "chatDescription": "聊天描述", "chatDescriptionHasBeenChanged": "聊天描述已被更改", @@ -2421,7 +2141,6 @@ "redactMessageDescription": "消息将为此对话中所有参与者删除。此操作无法撤销。", "optionalRedactReason": "(可选)删除此消息的原因...", "setChatDescription": "设置聊天描述", - "setTheme": "设置主题:", "setColorTheme": "设置主题颜色:", "invite": "邀请", "messagesStyle": "消息:", @@ -2448,7 +2167,6 @@ } }, "inviteGroupChat": "📨 群聊邀请", - "invitePrivateChat": "📨 私聊邀请", "emoteKeyboardNoRecents": "最近使用过的表情会出现在这里...", "@emoteKeyboardNoRecents": { "type": "String", @@ -2484,7 +2202,6 @@ "kickUserDescription": "该用户会被踢出聊天但没被封禁。在公开聊天中,该用户可以随时重新加入。", "blockListDescription": "你可以屏蔽打扰你的用户。你将不会收到来自屏蔽列表中用户的任何消息或聊天室邀请。", "createGroupAndInviteUsers": "创建群组并邀请用户", - "startConversation": "开始对话", "blockedUsers": "已屏蔽的用户", "groupCanBeFoundViaSearch": "可通过搜索找到该群组", "noUsersFoundWithQuery": "很遗憾,没有找到有关\"{query}\"的用户。请检查是否输入错误。", @@ -2509,30 +2226,15 @@ "publicSpaces": "公开空间", "passwordIsWrong": "你输入的密码有误", "pleaseEnterYourCurrentPassword": "请输入你当前的密码", - "publicLink": "公开链接", "nothingFound": "未找到任何内容…", - "decline": "拒绝", "newPassword": "新的密码", "passwordsDoNotMatch": "密码不匹配", - "subspace": "子空间", "select": "选择", "pleaseChooseAStrongPassword": "请选择一个强密码", "addChatOrSubSpace": "添加聊天或子空间", "leaveEmptyToClearStatus": "留空以清除你的状态。", "joinSpace": "加入空间", "searchForUsers": "搜索 @用户…", - "databaseBuildErrorBody": "无法构建 SQLite 数据库。目前应用尝试使用旧数据库。请将此错误报告给开发者,网址为 {url}。错误消息为:{error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "initAppError": "在初始化应用时发生错误", "sessionLostBody": "你的会话已丢失。请将此错误报告给开发者,网址为 {url}。错误消息为:{error}", "@sessionLostBody": { @@ -2575,15 +2277,6 @@ "formattedMessages": "格式化的消息", "verifyOtherDevice": "🔐 验证其它设备", "verifyOtherUser": "🔐 验证其他用户", - "forwardMessageTo": "转发消息至 {roomName} ?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendReadReceiptsDescription": "聊天中的其他参与者可以看到你是否读过消息。", "acceptedKeyVerification": "{sender} 接受了密钥验证", "@acceptedKeyVerification": { @@ -2631,24 +2324,11 @@ } }, "transparent": "透明", - "youInvitedToBy": "📩 你已通过链接被邀请到:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, "presencesToggle": "显示其他用户的状态消息", "@presencesToggle": { "type": "String", "placeholders": {} }, - "presenceStyle": "是否在线:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "hidePresences": "隐藏状态列表?", "incomingMessages": "传入消息", "stickers": "贴纸", @@ -2675,9 +2355,7 @@ "customEmojisAndStickers": "自定义表情符号和贴纸", "hideRedactedMessages": "隐藏被涂黑的消息", "overview": "概览", - "notifyMeFor": "提示内容", "passwordRecoverySettings": "密码发现设置", - "noPublicLinkHasBeenCreatedYet": "尚未创建公开链接", "knock": "请求", "noOneCanJoin": "无人可以加入", "knocking": "正在请求", @@ -2697,29 +2375,9 @@ }, "hideRedactedMessagesBody": "如果某人涂黑了一条消息,那么在聊天中再也看不到这条消息。", "hideInvalidOrUnknownMessageFormats": "隐藏无效或未知的消息格式", - "hideMemberChangesInPublicChats": "在公开聊天中隐藏成员变化", - "hideMemberChangesInPublicChatsBody": "不在聊天时间线中显示某人是否加入或离开了公开聊天来改进可读性。", - "userWouldLikeToChangeTheChat": "{user} 想加入聊天。", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, "customEmojisAndStickersBody": "添加或分享可用于任何聊天的表情符号或贴纸。", "usersMustKnock": "用户必须请求加入", "noDatabaseEncryption": "数据库加密在此平台上不受支持", - "userRole": "用户角色", - "minimumPowerLevel": "{level} 是最低权限等级。", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "publicChatAddresses": "公开聊天的地址", "createNewAddress": "新建地址", "searchMore": "搜索更多…", @@ -2742,7 +2400,6 @@ "description": "Set to true to always display time of day in 24 hour format." }, "noMoreChatsFound": "找不到更多聊天…", - "joinedChats": "已加入的聊天", "space": "空间", "spaces": "空间", "goToSpace": "转到空间:{space}", @@ -2751,18 +2408,6 @@ "space": {} }, "markAsUnread": "标为未读", - "countChatsAndCountParticipants": "{chats} 个聊天和 {participants} 名参与者", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, "unread": "未读", "userLevel": "{level} - 用户", "@userLevel": { @@ -2820,9 +2465,6 @@ "sendCanceled": "发送被取消", "noChatsFoundHere": "此处尚未找到聊天。使用下方按钮 ⤵️ 开始和某人的新聊天", "loginWithMatrixId": "使用 Matrix-ID 登录", - "discoverHomeservers": "发现主服务器", - "whatIsAHomeserver": "什么是主服务器?", - "homeserverDescription": "主服务器上就像电子邮件提供商,你的所有数据都存储在上面。你可以选择你想使用哪个主服务器。在 https://matrix.org 上了解更多信息。", "doesNotSeemToBeAValidHomeserver": "似乎不是兼容的主服务器。URL 不正确?", "prepareSendingAttachment": "准备发送附件…", "sendingAttachment": "发送附件中…", @@ -2915,7 +2557,6 @@ } } }, - "appIntroduction": "FluffyChat 让使用不同即时通信工具的你和你的好友得以聊天。 访问 https://matrix.org 了解详情或轻按 *继续*。", "newChatRequest": "📩 新的聊天请求", "generalNotificationSettings": "常规通知设置", "userSpecificNotificationSettings": "使用特定通知设置", @@ -2985,10 +2626,7 @@ "notSupportedOnThisDevice": "此设备上不受支持", "enterNewChat": "进入新聊天", "commandHint_roomupgrade": "将此聊天室升级到给定的聊天室版本", - "setCustomPermissionLevel": "设置自定义权限等级", - "setPermissionsLevelDescription": "请在下方选择预定义的角色或输入 0 到 100 间的自定义权限等级。", "ignoreUser": "忽略用户", - "normalUser": "正常用户", "approve": "批准", "youHaveKnocked": "你已请求加入", "pleaseWaitUntilInvited": "在来自该聊天室的某人邀请你之前请等待。", @@ -3024,10 +2662,6 @@ "longPressToRecordVoiceMessage": "长按录制语音消息。", "pause": "暂停", "resume": "继续", - "newSubSpace": "新建子空间", - "moveToDifferentSpace": "移动到别的空间", - "moveUp": "上移", - "moveDown": "下移", "removeFromSpaceDescription": "将从空间移除该聊天,但仍出现在聊天列表中。", "countChats": "{chats} 个聊天", "@countChats": { @@ -3056,7 +2690,6 @@ } } }, - "donate": "捐赠", "startedAPoll": "{username} 启动了投票。", "@startedAPoll": { "type": "String", @@ -3070,7 +2703,6 @@ "startPoll": "启动投票", "endPoll": "结束投票", "answersVisible": "结果可见", - "answersHidden": "结果隐藏", "pollQuestion": "投票问题", "answerOption": "结果选项", "addAnswerOption": "添加结果选项", @@ -3138,5 +2770,43 @@ "logs": "日志", "advancedConfigs": "高级配置", "advancedConfigurations": "高级配置", - "signInWithLabel": "登录方式:" + "signIn": "登录", + "createNewAccount": "创建新账户", + "signUpGreeting": "FluffyChat 是去中心化的!选择您希望创建账户的服务器!", + "signInGreeting": "已经有 Matrix 账户了?欢迎回来!选择 homeserver 登录。", + "appIntro": "借助 FluffyChat,您可以和好友聊天。它是安全的去中心化 [matrix] 消息收发应用!如果愿意,可以在 https://matrix.org 了解更多信息,也可直接注册账户。", + "theProcessWasCanceled": "过程被取消。", + "join": "加入", + "searchOrEnterHomeserverAddress": "搜索或输入 homeserver 地址", + "matrixId": "Matrix ID", + "setPowerLevel": "设置权限级别", + "makeModerator": "协管员", + "makeAdmin": "管理员", + "removeModeratorRights": "删除协管员权限", + "removeAdminRights": "删除管理员权限", + "powerLevel": "权限级别", + "setPowerLevelDescription": "权限级别定义群成员在这个聊天室中可以做什么,取值范围 0 到 100。", + "owner": "所有者", + "mute": "静音", + "@mute": { + "description": "This should be a very short string because there is not much space in the button!" + }, + "createNewChat": "新建聊天", + "reset": "重置", + "supportFluffyChat": "支持 FluffyChat", + "support": "支持", + "fluffyChatSupportBannerMessage": "FluffyChat 需要您的帮助!\n❤️❤️❤️\nFluffyChat 将始终免费,但开发和托管仍然要花钱。\n项目的未来仰赖像您这样的人的支持。", + "skipSupportingFluffyChat": "跳过支持 FluffyChar", + "iDoNotWantToSupport": "我不想支持", + "iAlreadySupportFluffyChat": "我已支持 FluffyChat", + "setLowPriority": "设置低优先级", + "unsetLowPriority": "取消设置低优先级", + "removeCallFromChat": "从聊天中删除通话", + "removeCallFromChatDescription": "要为所有成员从聊天中删除通话吗?", + "removeCallForEveryone": "为所有人删除通话", + "startVoiceCall": "开始语音通话", + "startVideoCall": "开始视频通话", + "joinVoiceCall": "加入语音通话", + "joinVideoCall": "加入视频通话", + "live": "实时" } diff --git a/lib/l10n/intl_zh_Hant.arb b/lib/l10n/intl_zh_Hant.arb index ea0cd6bf..0e5c1321 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -118,18 +118,6 @@ } } }, - "badServerVersionsException": "目前伺服器支援的協議版本:\n{serverVersions}\n但本應用程式僅支援 {supportedVersions}", - "@badServerVersionsException": { - "type": "String", - "placeholders": { - "serverVersions": { - "type": "String" - }, - "supportedVersions": { - "type": "String" - } - } - }, "banFromChat": "已從聊天室中封鎖", "@banFromChat": { "type": "String", @@ -162,11 +150,6 @@ "type": "String", "placeholders": {} }, - "botMessages": "機器人訊息", - "@botMessages": { - "type": "String", - "placeholders": {} - }, "cancel": "取消", "@cancel": { "type": "String", @@ -391,31 +374,11 @@ "type": "String", "placeholders": {} }, - "confirm": "確認", - "@confirm": { - "type": "String", - "placeholders": {} - }, - "connect": "連接", - "@connect": { - "type": "String", - "placeholders": {} - }, "contactHasBeenInvitedToTheGroup": "聯絡人已被邀請至群組", "@contactHasBeenInvitedToTheGroup": { "type": "String", "placeholders": {} }, - "containsDisplayName": "包含顯示名稱", - "@containsDisplayName": { - "type": "String", - "placeholders": {} - }, - "containsUserName": "包含使用者名稱", - "@containsUserName": { - "type": "String", - "placeholders": {} - }, "contentHasBeenReported": "此內容已被回報給伺服器管理員們", "@contentHasBeenReported": { "type": "String", @@ -490,33 +453,6 @@ } } }, - "dateWithoutYear": "{month} - {day}", - "@dateWithoutYear": { - "type": "String", - "placeholders": { - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, - "dateWithYear": "{year} - {month} - {day}", - "@dateWithYear": { - "type": "String", - "placeholders": { - "year": { - "type": "String" - }, - "month": { - "type": "String" - }, - "day": { - "type": "String" - } - } - }, "deactivateAccountWarning": "這將停用您的帳號。這個決定是不能挽回的!您確定嗎?", "@deactivateAccountWarning": { "type": "String", @@ -617,11 +553,6 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "您需要選取一個表情快捷鍵和一張圖片!", - "@emoteWarnNeedToPick": { - "type": "String", - "placeholders": {} - }, "emptyChat": "空的聊天室", "@emptyChat": { "type": "String", @@ -671,11 +602,6 @@ "type": "String", "placeholders": {} }, - "enterYourHomeserver": "輸入伺服器位址", - "@enterYourHomeserver": { - "type": "String", - "placeholders": {} - }, "everythingReady": "一切就緒!", "@everythingReady": { "type": "String", @@ -787,11 +713,6 @@ "type": "String", "placeholders": {} }, - "identity": "身份", - "@identity": { - "type": "String", - "placeholders": {} - }, "ignore": "無視", "@ignore": { "type": "String", @@ -853,11 +774,6 @@ "type": "String", "placeholders": {} }, - "inviteForMe": "來自我的邀請", - "@inviteForMe": { - "type": "String", - "placeholders": {} - }, "inviteText": "{username} 邀請您使用 FluffyChat\n1. 安裝 FluffyChat:https://fluffychat.im\n2. 登入或註冊\n3. 打開該邀請網址:\n{link}", "@inviteText": { "type": "String", @@ -937,11 +853,6 @@ "type": "String", "placeholders": {} }, - "license": "授權", - "@license": { - "type": "String", - "placeholders": {} - }, "lightTheme": "日間模式", "@lightTheme": { "type": "String", @@ -985,11 +896,6 @@ "type": "String", "placeholders": {} }, - "memberChanges": "變更成員", - "@memberChanges": { - "type": "String", - "placeholders": {} - }, "mention": "提及", "@mention": { "type": "String", @@ -1085,11 +991,6 @@ "type": "String", "placeholders": {} }, - "notificationsEnabledForThisAccount": "已為此帳號啟用通知", - "@notificationsEnabledForThisAccount": { - "type": "String", - "placeholders": {} - }, "numUsersTyping": "{count} 個人正在輸入...…", "@numUsersTyping": { "type": "String", @@ -1271,11 +1172,6 @@ } } }, - "rejoin": "重新加入", - "@rejoin": { - "type": "String", - "placeholders": {} - }, "remove": "移除", "@remove": { "type": "String", @@ -1295,11 +1191,6 @@ } } }, - "removeDevice": "移除裝置", - "@removeDevice": { - "type": "String", - "placeholders": {} - }, "unbanFromChat": "解封聊天室", "@unbanFromChat": { "type": "String", @@ -1340,15 +1231,6 @@ "type": "String", "placeholders": {} }, - "seenByUser": "{username} 已讀", - "@seenByUser": { - "type": "String", - "placeholders": { - "username": { - "type": "String" - } - } - }, "send": "傳送", "@send": { "type": "String", @@ -1379,11 +1261,6 @@ "type": "String", "placeholders": {} }, - "sendOriginal": "傳送原始內容", - "@sendOriginal": { - "type": "String", - "placeholders": {} - }, "sendVideo": "傳送影片", "@sendVideo": { "type": "String", @@ -1443,21 +1320,6 @@ } } }, - "setCustomEmotes": "自訂表情符號", - "@setCustomEmotes": { - "type": "String", - "placeholders": {} - }, - "setInvitationLink": "設定邀請連結", - "@setInvitationLink": { - "type": "String", - "placeholders": {} - }, - "setPermissionsLevel": "設定權限等級", - "@setPermissionsLevel": { - "type": "String", - "placeholders": {} - }, "setStatus": "設定狀態", "@setStatus": { "type": "String", @@ -1542,21 +1404,6 @@ "type": "String", "placeholders": {} }, - "toggleFavorite": "切換收藏夾", - "@toggleFavorite": { - "type": "String", - "placeholders": {} - }, - "toggleMuted": "切換靜音", - "@toggleMuted": { - "type": "String", - "placeholders": {} - }, - "toggleUnread": "標示為已讀/未讀", - "@toggleUnread": { - "type": "String", - "placeholders": {} - }, "tooManyRequestsWarning": "太多請求了。請稍候再試!", "@tooManyRequestsWarning": { "type": "String", @@ -1623,15 +1470,6 @@ "type": "String", "placeholders": {} }, - "unreadChats": "{unreadCount, plural, =1 {1 unread chat} other { {unreadCount} 個未讀聊天室} }", - "@unreadChats": { - "type": "String", - "placeholders": { - "unreadCount": { - "type": "int" - } - } - }, "userAndOthersAreTyping": "{username} 和其他 {count} 個人正在輸入...…", "@userAndOthersAreTyping": { "type": "String", @@ -1756,11 +1594,6 @@ "type": "String", "placeholders": {} }, - "wallpaper": "桌布:", - "@wallpaper": { - "type": "String", - "placeholders": {} - }, "warning": "警告!", "@warning": { "type": "String", @@ -1826,11 +1659,6 @@ "type": "String", "placeholders": {} }, - "people": "人", - "@people": { - "type": "String", - "placeholders": {} - }, "chats": "聊天室", "@chats": { "type": "String", @@ -1916,11 +1744,6 @@ "@repeatPassword": {}, "yourChatBackupHasBeenSetUp": "您的聊天室記錄備份已設定。", "@yourChatBackupHasBeenSetUp": {}, - "goToTheNewRoom": "前往新聊天室", - "@goToTheNewRoom": { - "type": "String", - "placeholders": {} - }, "commandHint_myroomavatar": "設定您的聊天室頭貼(通過 mxc-uri)", "@commandHint_myroomavatar": { "type": "String", @@ -1943,8 +1766,6 @@ "type": "String", "placeholders": {} }, - "chatHasBeenAddedToThisSpace": "聊天室已新增到此空間", - "@chatHasBeenAddedToThisSpace": {}, "clearArchive": "清除存檔", "@clearArchive": {}, "hugContent": "{senderName} 擁抱您", @@ -1998,8 +1819,6 @@ } } }, - "addChatDescription": "新增聊天室描述......", - "@addChatDescription": {}, "sendTypingNotifications": "傳送「輸入中」通知", "@sendTypingNotifications": {}, "importEmojis": "匯入表情包", @@ -2049,11 +1868,6 @@ "@addChatOrSubSpace": {}, "thisDevice": "這個裝置:", "@thisDevice": {}, - "separateChatTypes": "分開私訊和群組", - "@separateChatTypes": { - "type": "String", - "placeholders": {} - }, "commandHint_markasdm": "將給定的 Matrix ID 標示為直接訊息房間", "@commandHint_markasdm": {}, "commandHint_html": "傳送 HTML 格式的文字", @@ -2077,8 +1891,6 @@ "@optionalRedactReason": {}, "dehydrateWarning": "此操作不能反悔。請確保安全地存儲備份文件。", "@dehydrateWarning": {}, - "hydrateTorLong": "上次在 TOR 上匯出會話了嗎?快速匯入它已繼續使用聊天室。", - "@hydrateTorLong": {}, "hydrate": "從備份文件恢復", "@hydrate": {}, "locationDisabledNotice": "位置服務被停用。請啟用它們以能夠分享您的位置。", @@ -2124,8 +1936,6 @@ "type": "String", "placeholders": {} }, - "publish": "發布", - "@publish": {}, "hasKnocked": "🚪 {user} 敲門了", "@hasKnocked": { "placeholders": { @@ -2136,8 +1946,6 @@ }, "unlockOldMessages": "解鎖舊消息", "@unlockOldMessages": {}, - "callingAccountDetails": "允許 FluffyChat 使用原生 Android 撥號應用程式。", - "@callingAccountDetails": {}, "noOtherDevicesFound": "未找到其他裝置", "@noOtherDevicesFound": {}, "noUsersFoundWithQuery": "很遺憾,找不到與「{query}」相符的使用者。請檢查是否有打錯字。", @@ -2149,20 +1957,12 @@ } } }, - "publicLink": "公開網址", - "@publicLink": {}, "dehydrate": "匯出會話並清除裝置", "@dehydrate": {}, - "dehydrateTor": "TOR 使用者:匯出會話", - "@dehydrateTor": {}, "reopenChat": "重新開啟聊天室", "@reopenChat": {}, - "widgetNameError": "請提供一個顯示名稱。", - "@widgetNameError": {}, "yourGlobalUserIdIs": "您的全域使用者ID是: ", "@yourGlobalUserIdIs": {}, - "startFirstChat": "開始您的第一次聊天室", - "@startFirstChat": {}, "experimentalVideoCalls": "實驗性視訊通話", "@experimentalVideoCalls": {}, "youAcceptedTheInvitation": "👍 您接受了邀請", @@ -2194,8 +1994,6 @@ "@banUserDescription": {}, "searchChatsRooms": "搜尋 #chats, @users...", "@searchChatsRooms": {}, - "decline": "拒絕", - "@decline": {}, "sendReadReceipts": "傳送已讀回條", "@sendReadReceipts": {}, "formattedMessagesDescription": "使用 markdown 顯示豐富的訊息內容,如粗體文字。", @@ -2222,19 +2020,10 @@ }, "users": "使用者", "@users": {}, - "pleaseChoose": "請選擇", - "@pleaseChoose": { - "type": "String", - "placeholders": {} - }, "youRejectedTheInvitation": "您拒絕了邀請", "@youRejectedTheInvitation": {}, - "enterRoom": "進入房間", - "@enterRoom": {}, "allSpaces": "所有空間", "@allSpaces": {}, - "indexedDbErrorLong": "預設情況下,私密模式不啟用消息存儲。\n請訪問\n - about:config\n - 將 dom.indexedDB.privateBrowsing.enabled 設定為 true\n否則,無法運行 FluffyChat。", - "@indexedDbErrorLong": {}, "youKickedAndBanned": "🙅 您踢出並封鎖了 {user}", "@youKickedAndBanned": { "placeholders": { @@ -2249,8 +2038,6 @@ "@custom": {}, "hidePresences": "隱藏狀態列表?", "@hidePresences": {}, - "signInWithPassword": "使用密碼登入", - "@signInWithPassword": {}, "setColorTheme": "設定主題顏色:", "@setColorTheme": {}, "makeAdminDescription": "一旦您讓這個使用者成為管理員,您可能無法撤銷此操作,因為他們將擁有與您相同的權限。", @@ -2261,25 +2048,17 @@ "@groupCanBeFoundViaSearch": {}, "pleaseEnterYourCurrentPassword": "請輸入您當前的密碼", "@pleaseEnterYourCurrentPassword": {}, - "widgetCustom": "自訂", - "@widgetCustom": {}, "createGroup": "建立群組", "@createGroup": {}, - "enterSpace": "進入空間", - "@enterSpace": {}, "shareLocation": "分享位置", "@shareLocation": { "type": "String", "placeholders": {} }, - "widgetVideo": "影片", - "@widgetVideo": {}, "redactMessageDescription": "該訊息將對此對話中的所有參與者收回。這不能被反悔。", "@redactMessageDescription": {}, "removeFromBundle": "從此套組中移除", "@removeFromBundle": {}, - "widgetName": "名稱", - "@widgetName": {}, "jump": "跳轉", "@jump": {}, "commandHint_unignore": "取消無視已提供的 Matrix ID", @@ -2306,11 +2085,6 @@ "type": "String", "placeholders": {} }, - "allRooms": "所有群組聊天室", - "@allRooms": { - "type": "String", - "placeholders": {} - }, "chatPermissions": "聊天室權限", "@chatPermissions": {}, "customEmojisAndStickersBody": "新增或分享可在任何聊天室中使用的自訂表情符號或貼圖。", @@ -2328,21 +2102,12 @@ "@hideRedactedMessages": {}, "hideInvalidOrUnknownMessageFormats": "隱藏無效或未知的訊息格式", "@hideInvalidOrUnknownMessageFormats": {}, - "dehydrateTorLong": "對 TOR 使用者,建議在關閉窗口前匯出會話。", - "@dehydrateTorLong": {}, - "hydrateTor": "TOR 使用者:匯入會話", - "@hydrateTor": {}, "messagesStyle": "訊息樣式:", "@messagesStyle": {}, "shareInviteLink": "分享邀請網址", "@shareInviteLink": {}, "scanQrCode": "掃描 QR 碼", "@scanQrCode": {}, - "openVideoCamera": "打開錄影", - "@openVideoCamera": { - "type": "String", - "placeholders": {} - }, "oneClientLoggedOut": "您的一個客戶端已登出", "@oneClientLoggedOut": {}, "addAccount": "新增帳號", @@ -2361,12 +2126,8 @@ "type": "String", "placeholders": {} }, - "hideMemberChangesInPublicChatsBody": "若有人加入或離開公開聊天室,將不在聊天室時間軸顯示,以提升資訊可讀性。", - "@hideMemberChangesInPublicChatsBody": {}, "overview": "概觀", "@overview": {}, - "notifyMeFor": "通知我", - "@notifyMeFor": {}, "passwordRecoverySettings": "恢復密碼設定", "@passwordRecoverySettings": {}, "redactedBy": "由 {username} 編輯", @@ -2394,19 +2155,8 @@ "@messageInfo": {}, "removeFromSpace": "從空間中移除", "@removeFromSpace": {}, - "addToSpaceDescription": "選擇一個空間將此聊天室加入。", - "@addToSpaceDescription": {}, "pleaseEnterRecoveryKeyDescription": "要解鎖您的舊訊息,請輸入在之前的會話中生成的恢復密鑰。您的恢復密鑰不是您的密碼。", "@pleaseEnterRecoveryKeyDescription": {}, - "videoWithSize": "影片({size})", - "@videoWithSize": { - "type": "String", - "placeholders": { - "size": { - "type": "String" - } - } - }, "emojis": "表情符號", "@emojis": {}, "placeCall": "發起通話", @@ -2415,16 +2165,6 @@ "@unsupportedAndroidVersion": {}, "videoCallsBetaWarning": "請注意,視訊通話目前處於測試階段。它們可能不會按預期工作,或者在所有平台上都不工作。", "@videoCallsBetaWarning": {}, - "widgetUrlError": "這不是一個有效的URL。", - "@widgetUrlError": {}, - "nextAccount": "下一個帳戶", - "@nextAccount": {}, - "previousAccount": "上一個帳戶", - "@previousAccount": {}, - "addWidget": "新增小工具", - "@addWidget": {}, - "errorAddingWidget": "新增小工具時發生錯誤。", - "@errorAddingWidget": {}, "youJoinedTheChat": "您加入了聊天室", "@youJoinedTheChat": {}, "youBannedUser": "您封鎖了 {user}", @@ -2459,47 +2199,18 @@ } } }, - "youInvitedToBy": "📩 您通過網址被邀請至:\n{alias}", - "@youInvitedToBy": { - "placeholders": { - "alias": { - "type": "String" - } - } - }, - "callingPermissions": "通話權限", - "@callingPermissions": {}, - "callingAccount": "通話帳戶", - "@callingAccount": {}, - "appearOnTop": "顯示在最上層", - "@appearOnTop": {}, "newGroup": "新群組", "@newGroup": {}, "newSpace": "新空間", "@newSpace": {}, - "numChats": "{number} 個聊天室", - "@numChats": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "hideUnimportantStateEvents": "隱藏不重要的狀態事件", - "@hideUnimportantStateEvents": {}, "doNotShowAgain": "不再顯示", "@doNotShowAgain": {}, "encryptThisChat": "加密此聊天室", "@encryptThisChat": {}, "sorryThatsNotPossible": "抱歉......這是不可能的", "@sorryThatsNotPossible": {}, - "profileNotFound": "在伺服器上找不到該使用者。可能是連接問題或該使用者不存在。", - "@profileNotFound": {}, "invite": "邀請", "@invite": {}, - "invitePrivateChat": "📨 邀請私人聊天室", - "@invitePrivateChat": {}, "removeDevicesDescription": "您將從這個裝置登出,並將不再能夠接收消息。", "@removeDevicesDescription": {}, "unbanUserDescription": "如果該使用者嘗試,他們將能夠再次進入聊天室。", @@ -2512,8 +2223,6 @@ "@learnMore": {}, "nothingFound": "什麼都沒找到......", "@nothingFound": {}, - "startConversation": "開始對話", - "@startConversation": {}, "databaseMigrationBody": "請稍候。這可能需要一點時間。", "@databaseMigrationBody": {}, "pleaseChooseAStrongPassword": "請選擇一個強密碼", @@ -2522,32 +2231,12 @@ "@passwordIsWrong": {}, "publicChatAddresses": "公開聊天室地址", "@publicChatAddresses": {}, - "userRole": "使用者角色", - "@userRole": {}, - "minimumPowerLevel": "{level} 是最低權限等級。", - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, "leaveEmptyToClearStatus": "留空以清除您的狀態。", "@leaveEmptyToClearStatus": {}, "select": "選擇", "@select": {}, "files": "文件", "@files": {}, - "forwardMessageTo": "將訊息轉發至 {roomName}?", - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, "sendTypingNotificationsDescription": "聊天室中的其他參與者可以看到您正在輸入新訊息。", "@sendTypingNotificationsDescription": {}, "verifyOtherDeviceDescription": "當您驗證另一個裝置時,這些裝置可以交換密鑰,提升您的整體安全性。💪 當您開始驗證時,一個彈出視窗將在兩個裝置上的應用程式中出現。在那裡,您將看到一系列的表情符號或數字,您需要相互比較。在開始驗證之前最好有兩個裝置在手邊。🤳", @@ -2602,8 +2291,6 @@ "@chatDescriptionHasBeenChanged": {}, "tryAgain": "再試一次", "@tryAgain": {}, - "pleaseEnterRecoveryKey": "請輸入您的恢復金鑰:", - "@pleaseEnterRecoveryKey": {}, "directChat": "私訊", "@directChat": {}, "register": "註冊", @@ -2624,8 +2311,6 @@ "@searchForUsers": {}, "inviteGroupChat": "📨 邀請群組聊天室", "@inviteGroupChat": {}, - "setTheme": "設定主題:", - "@setTheme": {}, "knocking": "敲門", "@knocking": {}, "sessionLostBody": "您的會話已丟失。請將此錯誤報告給開發人員,網址為 {url}。錯誤訊息為:{error}", @@ -2661,16 +2346,6 @@ "type": "String", "placeholders": {} }, - "singlesignon": "單一登入", - "@singlesignon": { - "type": "String", - "placeholders": {} - }, - "presenceStyle": "目前狀態:", - "@presenceStyle": { - "type": "String", - "placeholders": {} - }, "presencesToggle": "顯示其他使用者的狀態訊息", "@presencesToggle": { "type": "String", @@ -2697,29 +2372,8 @@ }, "confirmEventUnpin": "您確定要永久取消釘選該事件嗎?", "@confirmEventUnpin": {}, - "switchToAccount": "切換到帳戶 {number}", - "@switchToAccount": { - "type": "number", - "placeholders": { - "number": { - "type": "String" - } - } - }, - "widgetEtherpad": "文字筆記", - "@widgetEtherpad": {}, "noOneCanJoin": "沒有人可以加入", "@noOneCanJoin": {}, - "userWouldLikeToChangeTheChat": "{user} 想要加入聊天室。", - "@userWouldLikeToChangeTheChat": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "noPublicLinkHasBeenCreatedYet": "尚未建立公開網址", - "@noPublicLinkHasBeenCreatedYet": {}, "saveKeyManuallyDescription": "通過觸發系統分享對話框或剪貼板手動保存此密鑰。", "@saveKeyManuallyDescription": {}, "storeInAndroidKeystore": "存儲在 Android KeyStore", @@ -2739,8 +2393,6 @@ } } }, - "otherCallingPermissions": "麥克風、相機和其他 FluffyChat 權限", - "@otherCallingPermissions": {}, "disableEncryptionWarning": "出於安全原因,您不能在之前已加密的聊天室中停用加密。", "@disableEncryptionWarning": {}, "deviceKeys": "裝置密鑰:", @@ -2776,8 +2428,6 @@ "@passwordsDoNotMatch": {}, "publicSpaces": "公共空間", "@publicSpaces": {}, - "subspace": "子空間", - "@subspace": {}, "initAppError": "初始化應用時發生錯誤", "@initAppError": {}, "canceledKeyVerification": "{sender} 取消了密鑰驗證", @@ -2834,23 +2484,14 @@ "type": "String", "placeholders": {} }, - "inviteContactToGroupQuestion": "您想邀請 {contact} 加入 「{groupName}」 聊天室嗎?", - "@inviteContactToGroupQuestion": {}, "enableMultiAccounts": "(實驗性功能)在此裝置上啟用多個帳號", "@enableMultiAccounts": {}, - "hideMemberChangesInPublicChats": "在公開聊天室中隱藏成員變動", - "@hideMemberChangesInPublicChats": {}, "recoveryKeyLost": "遺失恢復金鑰?", "@recoveryKeyLost": {}, "sendAsText": "以文字傳送", "@sendAsText": { "type": "String" }, - "sendSticker": "傳送貼圖", - "@sendSticker": { - "type": "String", - "placeholders": {} - }, "unverified": "尚未驗證", "@unverified": {}, "time": "時間", @@ -2883,18 +2524,6 @@ "@searchMore": {}, "gallery": "畫廊", "@gallery": {}, - "databaseBuildErrorBody": "無法建立 SQLite 資料庫。應用程式目前嘗試使用遺留資料庫。請將此錯誤報告給開發人員,網址為 {url}。錯誤訊息為:{error}", - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, "sendReadReceiptsDescription": "聊天室中的其他參與者可以看到您已讀取一條訊息。", "@sendReadReceiptsDescription": {}, "formattedMessages": "格式化訊息", @@ -2920,37 +2549,18 @@ "@reportUser": {}, "unsupportedAndroidVersionLong": "此功能需要較新的 Android 版本。請檢查更新或 Lineage OS 支持。", "@unsupportedAndroidVersionLong": {}, - "emailOrUsername": "電子郵件或使用者名", - "@emailOrUsername": {}, - "indexedDbErrorTitle": "私密模式問題", - "@indexedDbErrorTitle": {}, - "widgetJitsi": "Jitsi Meet", - "@widgetJitsi": {}, "usersMustKnock": "使用者必須敲門", "@usersMustKnock": {}, "knock": "敲門", "@knock": {}, "storeInSecureStorageDescription": "將恢復密鑰存儲在此裝置的安全存儲中。", "@storeInSecureStorageDescription": {}, - "appearOnTopDetails": "允許應用程式顯示在最上層(如果您已將 Fluffychat 設定為通話帳戶則不需要)", - "@appearOnTopDetails": {}, "whyIsThisMessageEncrypted": "為什麼這條訊息無法讀取?", "@whyIsThisMessageEncrypted": {}, "noKeyForThisMessage": "如果訊息是在您登入此裝置之前傳送的,就可能會發生這種情況。\n\n也有可能是傳送者已經封鎖了您的裝置,或者網絡連接出了問題。\n\n如果您能在另一個會話中讀取該訊息,那麼您可以從中轉移訊息!前往設定 > 裝置,並確保您的裝置已相互驗證。當您下次打開房間且兩個會話都在前景時,密鑰將自動傳輸。\n\n不想在登出或切換裝置時丟失密鑰?請確保您已在設定中啟用了聊天室備份。", "@noKeyForThisMessage": {}, "newSpaceDescription": "空間允許您整合您的聊天室並建立私人或公開社群。", "@newSpaceDescription": {}, - "pleaseTryAgainLaterOrChooseDifferentServer": "請稍後再試,或選擇不同的伺服器。", - "@pleaseTryAgainLaterOrChooseDifferentServer": {}, - "signInWith": "使用 {provider} 登入", - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, "invalidInput": "無效的輸入!", "@invalidInput": {}, "verifyOtherUser": "🔐 驗證其他使用者", @@ -2968,20 +2578,6 @@ }, "commandHint_ignore": "無視已提供的 Matrix ID", "@commandHint_ignore": {}, - "countChatsAndCountParticipants": "{chats} 個聊天室和 {participants} 位參與者", - "@countChatsAndCountParticipants": { - "type": "String", - "placeholders": { - "chats": { - "type": "int" - }, - "participants": { - "type": "int" - } - } - }, - "joinedChats": "已加入的聊天室", - "@joinedChats": {}, "unread": "未讀", "@unread": {}, "space": "空間", @@ -3085,8 +2681,6 @@ "@changeTheChatPermissions": {}, "changeTheVisibilityOfChatHistory": "變更過往聊天記錄可見度", "@changeTheVisibilityOfChatHistory": {}, - "homeserverDescription": "您的所有資料都儲存在歸屬伺服器上,就像電子郵件提供商一樣。 您可以選擇要使用的歸屬伺服器,同時您仍然可以與每個人溝通。 請訪問https://matrix.org瞭解更多資訊。", - "@homeserverDescription": {}, "sendingAttachment": "附件傳送中…", "@sendingAttachment": {}, "compressVideo": "影片壓縮中…", @@ -3106,10 +2700,6 @@ "@noChatsFoundHere": {}, "changeTheDescriptionOfTheGroup": "變更聊天室說明", "@changeTheDescriptionOfTheGroup": {}, - "discoverHomeservers": "探索歸屬伺服器", - "@discoverHomeservers": {}, - "whatIsAHomeserver": "什麼是歸屬伺服器?", - "@whatIsAHomeserver": {}, "calculatingFileSize": "正在計算檔案大小…", "@calculatingFileSize": {}, "prepareSendingAttachment": "準備傳送附件…", @@ -3235,8 +2825,6 @@ "@open": {}, "waitingForServer": "等待伺服器中...", "@waitingForServer": {}, - "appIntroduction": "FluffyChat 讓你和你的朋友跨越工具聊天。在 https://matrix.org 了解更多或*繼續*。", - "@appIntroduction": {}, "previous": "上一個", "@previous": {}, "otherPartyNotLoggedIn": "對方現未登入,未能接收訊息 !", @@ -3308,10 +2896,6 @@ "@crossVerifiedDevices": {}, "crossVerifiedDevicesIfEnabled": "交叉驗證裝置(如啟用)", "@crossVerifiedDevicesIfEnabled": {}, - "setCustomPermissionLevel": "設置自定義權限等級", - "@setCustomPermissionLevel": {}, - "setPermissionsLevelDescription": "請在下方選擇預先定義的角色,或輸入在 0 到 100 之間的自訂權限等級。", - "@setPermissionsLevelDescription": {}, "recordAVideo": "錄製影像", "@recordAVideo": {}, "takeAPhoto": "拍攝照片", @@ -3322,8 +2906,6 @@ "@notSupportedOnThisDevice": {}, "ignoreUser": "忽略用户", "@ignoreUser": {}, - "normalUser": "正常用户", - "@normalUser": {}, "notificationRuleTombstoneDescription": "通知用户有關房間解散的訊息。", "@notificationRuleTombstoneDescription": {}, "notificationRuleReaction": "心情回應", @@ -3359,4 +2941,4 @@ } } } -} +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index d173f77e..75dd92b7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,24 +1,27 @@ import 'dart:isolate'; import 'dart:ui'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod; -import 'package:matrix/matrix.dart'; -import 'package:shared_preferences/shared_preferences.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/notification_background_handler.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod; +import 'package:matrix/matrix.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:universal_html/universal_html.dart' as web; + import 'config/setting_keys.dart'; import 'utils/background_push.dart'; import 'widgets/fluffy_chat_app.dart'; ReceivePort? mainIsolateReceivePort; +bool _vodozemacInitialized = false; + void main() async { if (PlatformInfos.isAndroid) { final port = mainIsolateReceivePort = ReceivePort(); @@ -30,6 +33,14 @@ void main() async { await waitForPushIsolateDone(); } + // Sanitize hash for OIDC: + if (kIsWeb) { + final hash = web.window.location.hash; + if (hash.isNotEmpty && !hash.startsWith('/')) { + web.window.location.hash = hash.replaceFirst('#', '#?'); + } + } + // Our background push shared isolate accesses flutter-internal things very early in the startup proccess // To make sure that the parts of flutter needed are started up already, we need to ensure that the // widget bindings are initialized already. @@ -38,7 +49,10 @@ void main() async { final store = await AppSettings.init(); Logs().i('Welcome to ${AppSettings.applicationName.value} <3'); - await vod.init(wasmPath: './assets/assets/vodozemac/'); + if (!_vodozemacInitialized) { + await vod.init(wasmPath: './assets/assets/vodozemac/'); + _vodozemacInitialized = true; + } Logs().nativeColors = !PlatformInfos.isIOS; final clients = await ClientManager.getClients(store: store); diff --git a/lib/pages/archive/archive.dart b/lib/pages/archive/archive.dart index a39840a3..7e22c861 100644 --- a/lib/pages/archive/archive.dart +++ b/lib/pages/archive/archive.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/archive/archive_view.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class Archive extends StatefulWidget { const Archive({super.key}); @@ -23,7 +21,7 @@ class ArchiveController extends State { return archive = await Matrix.of(context).client.loadArchive(); } - void forgetRoomAction(int i) async { + Future forgetRoomAction(int i) async { await showFutureLoadingDialog( context: context, future: () async { @@ -35,7 +33,7 @@ class ArchiveController extends State { setState(() {}); } - void forgetAllAction() async { + Future forgetAllAction() async { final archive = this.archive; final client = Matrix.of(context).client; if (archive.isEmpty) return; @@ -50,6 +48,7 @@ class ArchiveController extends State { OkCancelResult.ok) { return; } + if (!mounted) return; await showFutureLoadingDialog( context: context, futureWithProgress: (onProgress) async { diff --git a/lib/pages/archive/archive_view.dart b/lib/pages/archive/archive_view.dart index 5ef4176f..e8f9b7f1 100644 --- a/lib/pages/archive/archive_view.dart +++ b/lib/pages/archive/archive_view.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/archive/archive.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class ArchiveView extends StatelessWidget { final ArchiveController controller; diff --git a/lib/pages/bootstrap/bootstrap_dialog.dart b/lib/pages/bootstrap/bootstrap_dialog.dart index 9d2b5fab..2e3af6a8 100644 --- a/lib/pages/bootstrap/bootstrap_dialog.dart +++ b/lib/pages/bootstrap/bootstrap_dialog.dart @@ -1,10 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/encryption.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/error_reporter.dart'; @@ -16,6 +9,12 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog. import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart'; + import '../key_verification/key_verification_dialog.dart'; class BootstrapDialog extends StatefulWidget { @@ -71,7 +70,7 @@ class BootstrapDialogState extends State { _createBootstrap(widget.wipe); } - void _cancelAction() async { + Future _cancelAction() async { final consent = await showOkCancelAlertDialog( context: context, title: L10n.of(context).skipChatBackup, @@ -90,7 +89,7 @@ class BootstrapDialogState extends State { context.canPop() ? context.pop(success) : context.go('/rooms'); } - void _decryptLastEvents() async { + void _decryptLastEvents() { for (final room in client.rooms) { final event = room.lastEvent; if (event != null && @@ -110,7 +109,7 @@ class BootstrapDialogState extends State { } } - void _createBootstrap(bool wipe) async { + Future _createBootstrap(bool wipe) async { await client.roomsLoading; await client.accountDataLoading; await client.userDeviceKeysLoading; @@ -224,7 +223,7 @@ class BootstrapDialogState extends State { value: _recoveryKeyCopied, activeColor: theme.colorScheme.primary, onChanged: (b) { - FluffyShare.share(key!, context); + FluffyShare.share(key!, context, copyOnly: true); setState(() => _recoveryKeyCopied = true); }, title: Text(L10n.of(context).copyToClipboard), @@ -383,6 +382,7 @@ class BootstrapDialogState extends State { ).wrongRecoveryKey, ); } catch (e, s) { + if (!context.mounted) return; ErrorReporter( context, 'Unable to open SSSS with recovery key', @@ -426,6 +426,7 @@ class BootstrapDialogState extends State { cancelLabel: L10n.of(context).cancel, ); if (consent != OkCancelResult.ok) return; + if (!context.mounted) return; final req = await showFutureLoadingDialog( context: context, delay: false, @@ -436,11 +437,12 @@ class BootstrapDialogState extends State { }, ); if (req.error != null) return; + if (!context.mounted) return; final success = await KeyVerificationDialog( request: req.result!, ).show(context); if (success != true) return; - if (!mounted) return; + if (!context.mounted) return; final result = await showFutureLoadingDialog( context: context, diff --git a/lib/pages/chat/add_widget_tile.dart b/lib/pages/chat/add_widget_tile.dart deleted file mode 100644 index 88a4022d..00000000 --- a/lib/pages/chat/add_widget_tile.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/chat/add_widget_tile_view.dart'; - -class AddWidgetTile extends StatefulWidget { - final Room room; - - const AddWidgetTile({super.key, required this.room}); - - @override - State createState() => AddWidgetTileState(); -} - -class AddWidgetTileState extends State { - final TextEditingController urlController = TextEditingController(); - final TextEditingController nameController = TextEditingController(); - String widgetType = 'm.etherpad'; - - late final bool initiallyExpanded; - - String? nameError; - String? urlError; - - @override - void initState() { - initiallyExpanded = widget.room.widgets.isEmpty; - super.initState(); - } - - void setWidgetType(String value) => setState(() => widgetType = value); - - void addWidget() { - try { - nameError = null; - urlError = null; - - final room = widget.room; - final name = nameController.text; - final uri = Uri.tryParse(urlController.text); - - if (name.length < 3) { - setState(() { - nameError = L10n.of(context).widgetNameError; - }); - return; - } - - if (uri == null || uri.scheme != 'https') { - setState(() { - urlError = L10n.of(context).widgetUrlError; - }); - return; - } - setState(() {}); - - late MatrixWidget matrixWidget; - switch (widgetType) { - case 'm.etherpad': - matrixWidget = MatrixWidget.etherpad(room, name, uri); - break; - case 'm.jitsi': - matrixWidget = MatrixWidget.jitsi(room, name, uri); - break; - case 'm.video': - matrixWidget = MatrixWidget.video(room, name, uri); - break; - default: - matrixWidget = MatrixWidget.custom(room, name, uri); - break; - } - widget.room.addWidget(matrixWidget); - Navigator.of(context).pop(); - } catch (e) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).errorAddingWidget)), - ); - } - } - - @override - Widget build(BuildContext context) => AddWidgetTileView(controller: this); -} diff --git a/lib/pages/chat/add_widget_tile_view.dart b/lib/pages/chat/add_widget_tile_view.dart deleted file mode 100644 index c69968d6..00000000 --- a/lib/pages/chat/add_widget_tile_view.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/chat/add_widget_tile.dart'; - -class AddWidgetTileView extends StatelessWidget { - final AddWidgetTileState controller; - - const AddWidgetTileView({super.key, required this.controller}); - - @override - Widget build(BuildContext context) { - return ExpansionTile( - title: Text(L10n.of(context).addWidget), - leading: const Icon(Icons.add), - initiallyExpanded: controller.initiallyExpanded, - children: [ - CupertinoSegmentedControl( - groupValue: controller.widgetType, - padding: const EdgeInsets.all(8), - children: - { - 'm.etherpad': Text(L10n.of(context).widgetEtherpad), - 'm.jitsi': Text(L10n.of(context).widgetJitsi), - 'm.video': Text(L10n.of(context).widgetVideo), - 'm.custom': Text(L10n.of(context).widgetCustom), - }.map( - (key, value) => MapEntry( - key, - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4.0), - child: value, - ), - ), - ), - onValueChanged: controller.setWidgetType, - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: TextField( - controller: controller.nameController, - autofocus: true, - decoration: InputDecoration( - prefixIcon: const Icon(Icons.label), - label: Text(L10n.of(context).widgetName), - errorText: controller.nameError, - ), - ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: TextField( - controller: controller.urlController, - decoration: InputDecoration( - prefixIcon: const Icon(Icons.add_link), - label: Text(L10n.of(context).link), - errorText: controller.urlError, - ), - ), - ), - OverflowBar( - children: [ - TextButton( - onPressed: controller.addWidget, - child: Text(L10n.of(context).addWidget), - ), - ], - ), - ], - ); - } -} diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index bbd4b25a..7572566a 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1,20 +1,11 @@ import 'dart:async'; import 'dart:io'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:collection/collection.dart'; import 'package:desktop_drop/desktop_drop.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:go_router/go_router.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:matrix/matrix.dart'; -import 'package:scroll_to_index/scroll_to_index.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -37,6 +28,15 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart' import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/share_scaffold_dialog.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:go_router/go_router.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:matrix/matrix.dart'; +import 'package:mime/mime.dart'; +import 'package:scroll_to_index/scroll_to_index.dart'; + import '../../utils/account_bundles.dart'; import '../../utils/localized_exception_extension.dart'; import 'send_file_dialog.dart'; @@ -104,6 +104,8 @@ class ChatController extends State String? activeThreadId; + late final Set bigEmojis; + late final String readMarkerEventId; String get roomId => widget.room.id; @@ -117,11 +119,11 @@ class ChatController extends State bool currentlyTyping = false; bool dragging = false; - void onDragEntered(dynamic _) => setState(() => dragging = true); + void onDragEntered(_) => setState(() => dragging = true); - void onDragExited(dynamic _) => setState(() => dragging = false); + void onDragExited(_) => setState(() => dragging = false); - void onDragDone(DropDoneDetails details) async { + Future onDragDone(DropDoneDetails details) async { setState(() => dragging = false); if (details.files.isEmpty) return; @@ -190,7 +192,7 @@ class ChatController extends State selectedEvents.clear(); }); - void recreateChat() async { + Future recreateChat() async { final room = this.room; final userId = room.directChatMatrixID; if (userId == null) { @@ -204,21 +206,22 @@ class ChatController extends State ); } - void leaveChat() async { + Future leaveChat() async { final success = await showFutureLoadingDialog( context: context, future: room.leave, ); + if (!mounted) return; if (success.error != null) return; context.go('/rooms'); } - void requestHistory([dynamic _]) async { + Future requestHistory([_]) async { Logs().v('Requesting history...'); await timeline?.requestHistory(historyCount: _loadHistoryCount); } - void requestFuture() async { + Future requestFuture() async { final timeline = this.timeline; if (timeline == null) return; Logs().v('Requesting future...'); @@ -257,7 +260,7 @@ class ChatController extends State } } - void _loadDraft() async { + void _loadDraft() { final prefs = Matrix.of(context).store; final draft = prefs.getString('draft_$roomId'); if (draft != null && draft.isNotEmpty) { @@ -265,7 +268,7 @@ class ChatController extends State } } - void _shareItems([dynamic _]) { + void _shareItems([_]) { final shareItems = widget.shareItems; if (shareItems == null || shareItems.isEmpty) return; if (!room.otherPartyCanReceiveMessages) { @@ -360,6 +363,14 @@ class ChatController extends State AppSettings.displayChatDetailsColumn.value, ); + bigEmojis = defaultEmojiSet.fold( + {}, + (emojis, category) => { + ...emojis, + ...(category.emoji.map((emoji) => emoji.emoji)), + }, + ); + sendingClient = Matrix.of(context).client; final lastEventThreadId = room.lastEvent?.relationshipType == RelationshipTypes.thread @@ -392,7 +403,7 @@ class ChatController extends State }); } - void _tryLoadTimeline() async { + Future _tryLoadTimeline() async { final initialEventId = widget.eventId; loadTimelineFuture = _getTimeline(); try { @@ -452,24 +463,22 @@ class ChatController extends State scrollUpBannerEventId = eventId; }); + bool firstUpdateReceived = false; + void updateView() { if (!mounted) return; setReadMarker(); - setState(() {}); + setState(() { + firstUpdateReceived = true; + }); } Future? loadTimelineFuture; - int? animateInEventIndex; - - void onInsert(int i) { - // setState will be called by updateView() anyway - if (timeline?.allowNewEvent == true) animateInEventIndex = i; - } - Future _getTimeline({String? eventContextId}) async { - await Matrix.of(context).client.roomsLoading; - await Matrix.of(context).client.accountDataLoading; + final matrix = Matrix.of(context); + await matrix.client.roomsLoading; + await matrix.client.accountDataLoading; if (eventContextId != null && (!eventContextId.isValidMatrixId || eventContextId.sigil != '\$')) { eventContextId = null; @@ -479,15 +488,11 @@ class ChatController extends State timeline = await room.getTimeline( onUpdate: updateView, eventContextId: eventContextId, - onInsert: onInsert, ); } catch (e, s) { Logs().w('Unable to load timeline on event ID $eventContextId', e, s); if (!mounted) return; - timeline = await room.getTimeline( - onUpdate: updateView, - onInsert: onInsert, - ); + timeline = await room.getTimeline(onUpdate: updateView); if (!mounted) return; if (e is TimeoutException || e is IOException) { _showScrollUpMaterialBanner(eventContextId!); @@ -550,6 +555,7 @@ class ChatController extends State timeline?.cancelSubscriptions(); timeline = null; inputFocus.removeListener(_inputFocusListener); + if (currentlyTyping) room.setTyping(false); super.dispose(); } @@ -625,9 +631,10 @@ class ChatController extends State }); } - void sendFileAction({FileType type = FileType.any}) async { + Future sendFileAction({FileType type = FileType.any}) async { final files = await selectFiles(context, allowMultiple: true, type: type); if (files.isEmpty) return; + if (!mounted) return; await showAdaptiveDialog( context: context, builder: (c) => SendFileDialog( @@ -640,7 +647,7 @@ class ChatController extends State ); } - void sendImageFromClipBoard(Uint8List? image) async { + Future sendImageFromClipBoard(Uint8List? image) async { if (image == null) return; await showAdaptiveDialog( context: context, @@ -654,11 +661,12 @@ class ChatController extends State ); } - void openCameraAction() async { + Future openCameraAction() async { // Make sure the textfield is unfocused before opening the camera FocusScope.of(context).requestFocus(FocusNode()); final file = await ImagePicker().pickImage(source: ImageSource.camera); if (file == null) return; + if (!mounted) return; await showAdaptiveDialog( context: context, @@ -672,7 +680,7 @@ class ChatController extends State ); } - void openVideoCameraAction() async { + Future openVideoCameraAction() async { // Make sure the textfield is unfocused before opening the camera FocusScope.of(context).requestFocus(FocusNode()); final file = await ImagePicker().pickVideo( @@ -680,6 +688,7 @@ class ChatController extends State maxDuration: const Duration(minutes: 1), ); if (file == null) return; + if (!mounted) return; await showAdaptiveDialog( context: context, @@ -697,7 +706,7 @@ class ChatController extends State String path, int duration, List waveform, - String? fileName, + String fileName, ) async { final scaffoldMessenger = ScaffoldMessenger.of(context); final audioFile = XFile(path); @@ -709,31 +718,40 @@ class ChatController extends State final bytes = bytesResult.result; if (bytes == null) return; + final mimeType = lookupMimeType(fileName, headerBytes: bytes); + final extension = mimeType == null ? null : extensionFromMime(mimeType); + if (extension != null) { + fileName = + 'voice_message_${DateTime.now().millisecondsSinceEpoch}.$extension'; + } + final file = MatrixAudioFile( bytes: bytes, - name: fileName ?? audioFile.path, + name: fileName, + mimeType: mimeType, ); - room - .sendFileEvent( - file, - inReplyTo: replyEvent, - threadRootEventId: activeThreadId, - extraContent: { - 'info': {...file.info, 'duration': duration}, - 'org.matrix.msc3245.voice': {}, - 'org.matrix.msc1767.audio': { - 'duration': duration, - 'waveform': waveform, - }, + try { + await room.sendFileEvent( + file, + inReplyTo: replyEvent, + threadRootEventId: activeThreadId, + extraContent: { + 'info': {...file.info, 'duration': duration}, + 'org.matrix.msc3245.voice': {}, + 'org.matrix.msc1767.audio': { + 'duration': duration, + 'waveform': waveform, }, - ) - .catchError((e) { - scaffoldMessenger.showSnackBar( - SnackBar(content: Text((e as Object).toLocalizedString(context))), - ); - return null; - }); + }, + ); + } catch (e) { + if (!mounted) return; + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(e.toLocalizedString(context))), + ); + return; + } setState(() { replyEvent = null; }); @@ -759,7 +777,7 @@ class ChatController extends State } } - void sendLocationAction() async { + Future sendLocationAction() async { await showAdaptiveDialog( context: context, builder: (c) => SendLocationDialog(room: room), @@ -793,31 +811,32 @@ class ChatController extends State }); } - void reportEventAction() async { + Future reportEventAction() async { final event = selectedEvents.single; + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final score = await showModalActionPopup( context: context, - title: L10n.of(context).reportMessage, - message: L10n.of(context).howOffensiveIsThisContent, - cancelLabel: L10n.of(context).cancel, + title: l10n.reportMessage, + message: l10n.howOffensiveIsThisContent, + cancelLabel: l10n.cancel, actions: [ - AdaptiveModalAction( - value: -100, - label: L10n.of(context).extremeOffensive, - ), - AdaptiveModalAction(value: -50, label: L10n.of(context).offensive), - AdaptiveModalAction(value: 0, label: L10n.of(context).inoffensive), + AdaptiveModalAction(value: -100, label: l10n.extremeOffensive), + AdaptiveModalAction(value: -50, label: l10n.offensive), + AdaptiveModalAction(value: 0, label: l10n.inoffensive), ], ); if (score == null) return; + if (!mounted) return; final reason = await showTextInputDialog( context: context, - title: L10n.of(context).whyDoYouWantToReportThis, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - hintText: L10n.of(context).reason, + title: l10n.whyDoYouWantToReportThis, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + hintText: l10n.reason, ); if (reason == null || reason.isEmpty) return; + if (!mounted) return; final result = await showFutureLoadingDialog( context: context, future: () => Matrix.of(context).client.reportEvent( @@ -828,16 +847,17 @@ class ChatController extends State ), ); if (result.error != null) return; + if (!mounted) return; setState(() { showEmojiPicker = false; selectedEvents.clear(); }); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).contentHasBeenReported)), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.contentHasBeenReported)), ); } - void deleteErrorEventsAction() async { + Future deleteErrorEventsAction() async { try { if (selectedEvents.any((event) => event.status != EventStatus.error)) { throw Exception( @@ -849,6 +869,7 @@ class ChatController extends State } setState(selectedEvents.clear); } catch (e, s) { + if (!mounted) return; ErrorReporter( context, 'Error while delete error events action', @@ -856,7 +877,7 @@ class ChatController extends State } } - void redactEventsAction() async { + Future redactEventsAction() async { final reasonInput = selectedEvents.any((event) => event.status.isSent) ? await showTextInputDialog( context: context, @@ -873,6 +894,7 @@ class ChatController extends State : null; if (reasonInput == null) return; final reason = reasonInput.isEmpty ? null : reasonInput; + if (!mounted) return; await showFutureLoadingDialog( context: context, futureWithProgress: (onProgress) async { @@ -949,7 +971,7 @@ class ChatController extends State ); } - void forwardEventsAction() async { + Future forwardEventsAction() async { if (selectedEvents.isEmpty) return; final timeline = this.timeline; if (timeline == null) return; @@ -992,7 +1014,10 @@ class ChatController extends State inputFocus.requestFocus(); } - void scrollToEventId(String eventId, {bool highlightEvent = true}) async { + Future scrollToEventId( + String eventId, { + bool highlightEvent = true, + }) async { final foundEvent = timeline!.events.firstWhereOrNull( (event) => event.eventId == eventId, ); @@ -1036,7 +1061,7 @@ class ChatController extends State _updateScrollController(); } - void scrollDown() async { + Future scrollDown() async { if (!timeline!.allowNewEvent) { setState(() { timeline = null; @@ -1053,7 +1078,7 @@ class ChatController extends State scrollController.jumpTo(0); } - void onEmojiSelected(dynamic _, Emoji? emoji) { + void onEmojiSelected(_, Emoji? emoji) { typeEmoji(emoji); onInputBarChanged(sendController.text); } @@ -1117,7 +1142,7 @@ class ChatController extends State inputFocus.requestFocus(); } - void goToNewRoomAction() async { + Future goToNewRoomAction() async { final result = await showFutureLoadingDialog( context: context, future: () async { @@ -1216,7 +1241,7 @@ class ChatController extends State } } - void unpinEvent(String eventId) async { + Future unpinEvent(String eventId) async { final response = await showOkCancelAlertDialog( context: context, title: L10n.of(context).unpin, @@ -1224,6 +1249,7 @@ class ChatController extends State okLabel: L10n.of(context).unpin, cancelLabel: L10n.of(context).cancel, ); + if (!mounted) return; if (response == OkCancelResult.ok) { final events = room.pinnedEventIds ..removeWhere((oldEvent) => oldEvent == eventId); @@ -1283,6 +1309,7 @@ class ChatController extends State if (AppSettings.sendTypingNotifications.value) { typingCoolDown?.cancel(); typingCoolDown = Timer(const Duration(seconds: 2), () { + if (!mounted) return; typingCoolDown = null; currentlyTyping = false; room.setTyping(false); @@ -1309,20 +1336,21 @@ class ChatController extends State void showEventInfo([Event? event]) => (event ?? selectedEvents.single).showInfoDialog(context); - void onPhoneButtonTap() async { + Future onPhoneButtonTap() async { // VoIP required Android SDK 21 if (PlatformInfos.isAndroid) { - DeviceInfoPlugin().androidInfo.then((value) { - if (value.version.sdkInt < 21) { - Navigator.pop(context); - showOkAlertDialog( - context: context, - title: L10n.of(context).unsupportedAndroidVersion, - message: L10n.of(context).unsupportedAndroidVersionLong, - okLabel: L10n.of(context).close, - ); - } - }); + final androidInfo = await DeviceInfoPlugin().androidInfo; + if (!mounted) return; + if (androidInfo.version.sdkInt < 21) { + Navigator.pop(context); + await showOkAlertDialog( + context: context, + title: L10n.of(context).unsupportedAndroidVersion, + message: L10n.of(context).unsupportedAndroidVersionLong, + okLabel: L10n.of(context).close, + ); + return; + } } final callType = await showModalActionPopup( context: context, @@ -1343,11 +1371,13 @@ class ChatController extends State ], ); if (callType == null) return; + if (!mounted) return; final voipPlugin = Matrix.of(context).voipPlugin; try { await voipPlugin!.voip.inviteToCall(room, callType); } catch (e) { + if (!mounted) return; ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(e.toLocalizedString(context)))); @@ -1365,7 +1395,7 @@ class ChatController extends State late final ValueNotifier _displayChatDetailsColumn; - void toggleDisplayChatDetailsColumn() async { + Future toggleDisplayChatDetailsColumn() async { await AppSettings.displayChatDetailsColumn.setItem( !_displayChatDetailsColumn.value, ); diff --git a/lib/pages/chat/chat_app_bar_list_tile.dart b/lib/pages/chat/chat_app_bar_list_tile.dart index a1fc21b4..f3bf9cd1 100644 --- a/lib/pages/chat/chat_app_bar_list_tile.dart +++ b/lib/pages/chat/chat_app_bar_list_tile.dart @@ -1,8 +1,6 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; - import 'package:fluffychat/utils/url_launcher.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; class ChatAppBarListTile extends StatelessWidget { final Widget? leading; @@ -31,7 +29,7 @@ class ChatAppBarListTile extends StatelessWidget { onTap: onTap, child: Row( children: [ - if (leading != null) leading, + ?leading, Expanded( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 4.0), @@ -56,7 +54,7 @@ class ChatAppBarListTile extends StatelessWidget { ), ), ), - if (trailing != null) trailing, + ?trailing, ], ), ), diff --git a/lib/pages/chat/chat_app_bar_title.dart b/lib/pages/chat/chat_app_bar_title.dart index cce3a0d8..6ce556fb 100644 --- a/lib/pages/chat/chat_app_bar_title.dart +++ b/lib/pages/chat/chat_app_bar_title.dart @@ -1,8 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; @@ -11,6 +6,9 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/sync_status_localization.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/presence_builder.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class ChatAppBarTitle extends StatelessWidget { final ChatController controller; @@ -78,10 +76,7 @@ class ChatAppBarTitle extends StatelessWidget { builder: (context, presence) { final lastActiveTimestamp = presence?.lastActiveTimestamp; - final style = TextStyle( - fontSize: 12, - color: Theme.of(context).colorScheme.outline, - ); + final style = TextStyle(fontSize: 11); if (presence?.currentlyActive == true) { return Text( L10n.of(context).currentlyActive, @@ -108,23 +103,13 @@ class ChatAppBarTitle extends StatelessWidget { child: CircularProgressIndicator.adaptive( strokeWidth: 1, value: status.progress, - valueColor: status.error != null - ? AlwaysStoppedAnimation( - Theme.of(context).colorScheme.error, - ) - : null, ), ), const SizedBox(width: 4), Expanded( child: Text( status.calcLocalizedString(context), - style: TextStyle( - fontSize: 12, - color: status.error != null - ? Theme.of(context).colorScheme.error - : null, - ), + style: TextStyle(fontSize: 12), ), ), ], diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart index be845bdd..8173734c 100644 --- a/lib/pages/chat/chat_emoji_picker.dart +++ b/lib/pages/chat/chat_emoji_picker.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/sticker_picker_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import 'chat.dart'; class ChatEmojiPicker extends StatelessWidget { diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index a6898f51..d4ff1163 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -1,9 +1,4 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; -import 'package:scroll_to_index/scroll_to_index.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; @@ -13,6 +8,9 @@ import 'package:fluffychat/pages/chat/typing_indicators.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:scroll_to_index/scroll_to_index.dart'; class ChatEventList extends StatelessWidget { final ChatController controller; @@ -35,7 +33,6 @@ class ChatEventList extends StatelessWidget { final events = timeline.events.filterByVisibleInGui( threadId: controller.activeThreadId, ); - final animateInEventIndex = controller.animateInEventIndex; // create a map of eventId --> index to greatly improve performance of // ListView's findChildIndexCallback @@ -79,7 +76,10 @@ class ChatEventList extends StatelessWidget { } return Column( mainAxisSize: .min, - children: [SeenByRow(controller), TypingIndicators(controller)], + children: [ + SeenByRow(event: events.first), + TypingIndicators(controller), + ], ); } @@ -118,9 +118,8 @@ class ChatEventList extends StatelessWidget { // The message at this index: final event = events[i]; final animateIn = - animateInEventIndex != null && - timeline.events.length > animateInEventIndex && - event == timeline.events[animateInEventIndex]; + event.eventId == timeline.events.first.eventId && + controller.firstUpdateReceived; final nextEvent = i + 1 < events.length ? events[i + 1] : null; final previousEvent = i > 0 ? events[i - 1] : null; @@ -136,15 +135,13 @@ class ChatEventList extends StatelessWidget { !controller.expandedEventIds.contains(event.eventId); return AutoScrollTag( - key: ValueKey(event.eventId), + key: ValueKey(event.transactionId ?? event.eventId), index: i, controller: controller.scrollController, child: Message( event, + bigEmojis: controller.bigEmojis, animateIn: animateIn, - resetAnimateIn: () { - controller.animateInEventIndex = null; - }, onSwipe: () => controller.replyAction(replyTo: event), onInfoTab: controller.showEventInfo, onMention: () => controller.sendController.text += @@ -152,8 +149,7 @@ class ChatEventList extends StatelessWidget { highlightMarker: controller.scrollToEventIdMarker == event.eventId, onSelect: controller.onSelectMessage, - scrollToEventId: (String eventId) => - controller.scrollToEventId(eventId), + scrollToEventId: controller.scrollToEventId, longPressSelect: controller.selectedEvents.isNotEmpty, selected: controller.selectedEvents.any( (e) => e.eventId == event.eventId, @@ -161,7 +157,7 @@ class ChatEventList extends StatelessWidget { singleSelected: controller.selectedEvents.singleOrNull?.eventId == event.eventId, - onEdit: () => controller.editSelectedEventAction(), + onEdit: controller.editSelectedEventAction, timeline: timeline, displayReadMarker: i > 0 && controller.readMarkerEventId == event.eventId, diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index 57eb5f27..c0a664f6 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -1,9 +1,4 @@ -import 'package:flutter/material.dart'; - -import 'package:animations/animations.dart'; import 'package:emoji_picker_flutter/locales/default_emoji_set_locale.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/recording_input_row.dart'; @@ -11,7 +6,11 @@ import 'package:fluffychat/pages/chat/recording_view_model.dart'; import 'package:fluffychat/utils/other_party_can_receive.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; import 'chat.dart'; import 'input_bar.dart'; @@ -19,13 +18,17 @@ import 'input_bar.dart'; class ChatInputRow extends StatelessWidget { final ChatController controller; + static const double height = 56.0; + const ChatInputRow(this.controller, {super.key}); @override Widget build(BuildContext context) { final theme = Theme.of(context); - - const height = 48.0; + final textMessageOnly = + controller.sendController.text.isNotEmpty || + controller.replyEvent != null || + controller.editEvent != null; if (!controller.room.otherPartyCanReceiveMessages) { return Center( @@ -124,13 +127,11 @@ class ChatInputRow extends StatelessWidget { : const SizedBox.shrink(), ] : [ - const SizedBox(width: 4), + const SizedBox(width: 8), AnimatedContainer( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, - width: controller.sendController.text.isNotEmpty - ? 0 - : height, + width: textMessageOnly ? 0 : 48, height: height, alignment: Alignment.center, decoration: const BoxDecoration(), @@ -221,9 +222,7 @@ class ChatInputRow extends StatelessWidget { AnimatedContainer( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, - width: controller.sendController.text.isNotEmpty - ? 0 - : height, + width: textMessageOnly ? 0 : 48, height: height, alignment: Alignment.center, decoration: const BoxDecoration(), @@ -267,32 +266,16 @@ class ChatInputRow extends StatelessWidget { ), Container( height: height, - width: height, + width: 48, alignment: Alignment.center, child: IconButton( tooltip: L10n.of(context).emojis, color: theme.colorScheme.onPrimaryContainer, - icon: PageTransitionSwitcher( - transitionBuilder: - ( - Widget child, - Animation primaryAnimation, - Animation secondaryAnimation, - ) { - return SharedAxisTransition( - animation: primaryAnimation, - secondaryAnimation: secondaryAnimation, - transitionType: SharedAxisTransitionType.scaled, - fillColor: Colors.transparent, - child: child, - ); - }, - child: Icon( - controller.showEmojiPicker - ? Icons.keyboard - : Icons.add_reaction_outlined, - key: ValueKey(controller.showEmojiPicker), - ), + icon: Icon( + controller.showEmojiPicker + ? Icons.keyboard + : Icons.add_reaction_outlined, + key: ValueKey(controller.showEmojiPicker), ), onPressed: controller.emojiPickerAction, ), @@ -302,13 +285,13 @@ class ChatInputRow extends StatelessWidget { Matrix.of(context).currentBundle!.length > 1) Container( height: height, - width: height, + width: 48, alignment: Alignment.center, child: _ChatAccountPicker(controller), ), Expanded( child: Padding( - padding: const EdgeInsets.symmetric(vertical: 0.0), + padding: const EdgeInsets.symmetric(vertical: 2.0), child: InputBar( room: controller.room, minLines: 1, @@ -360,28 +343,45 @@ class ChatInputRow extends StatelessWidget { alignment: Alignment.center, child: PlatformInfos.platformCanRecord && - controller.sendController.text.isEmpty - ? IconButton( - tooltip: L10n.of(context).voiceMessage, - onPressed: () => - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - L10n.of( - context, - ).longPressToRecordVoiceMessage, - ), - ), - ), - onLongPress: () => recordingViewModel - .startRecording(controller.room), - style: IconButton.styleFrom( - backgroundColor: theme.bubbleColor, - foregroundColor: theme.onBubbleColor, + !controller.sendController.text.isNotEmpty && + controller.editEvent == null + ? HoverBuilder( + builder: (context, hovered) => IconButton( + tooltip: L10n.of(context).voiceMessage, + onPressed: hovered + ? () => recordingViewModel.startRecording( + controller.room, + ) + : () => ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + margin: EdgeInsets.only( + bottom: height + 16, + left: 16, + right: 16, + top: 16, + ), + showCloseIcon: true, + content: Text( + L10n.of( + context, + ).longPressToRecordVoiceMessage, + ), + ), + ), + onLongPress: () => recordingViewModel + .startRecording(controller.room), + style: IconButton.styleFrom( + backgroundColor: theme.bubbleColor, + foregroundColor: theme.onBubbleColor, + ), + icon: Icon( + hovered ? Icons.mic : Icons.mic_none_outlined, + ), ), - icon: const Icon(Icons.mic_none_outlined), ) : IconButton( + key: Key('send_button'), tooltip: L10n.of(context).send, onPressed: controller.send, style: IconButton.styleFrom( diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index dfe81d56..39a2c8f3 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -1,11 +1,7 @@ import 'dart:ui' as ui; -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart'; import 'package:desktop_drop/desktop_drop.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -14,6 +10,7 @@ import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_title.dart'; import 'package:fluffychat/pages/chat/chat_event_list.dart'; import 'package:fluffychat/pages/chat/encryption_button.dart'; +import 'package:fluffychat/pages/chat/jitsi_popup_button.dart'; import 'package:fluffychat/pages/chat/pinned_events.dart'; import 'package:fluffychat/pages/chat/reply_display.dart'; import 'package:fluffychat/utils/account_config.dart'; @@ -23,6 +20,9 @@ import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/unread_rooms_badge.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/stream_extension.dart'; import 'chat_emoji_picker.dart'; import 'chat_input_row.dart'; @@ -34,120 +34,6 @@ class ChatView extends StatelessWidget { const ChatView(this.controller, {super.key}); - List _appBarActions(BuildContext context) { - if (controller.selectMode) { - return [ - if (controller.canEditSelectedEvents) - IconButton( - icon: const Icon(Icons.edit_outlined), - tooltip: L10n.of(context).edit, - onPressed: controller.editSelectedEventAction, - ), - if (controller.selectedEvents.length == 1 && - controller.activeThreadId == null && - controller.room.canSendDefaultMessages) - IconButton( - icon: const Icon(Icons.message_outlined), - tooltip: L10n.of(context).replyInThread, - onPressed: () => controller.enterThread( - controller.selectedEvents.single.eventId, - ), - ), - IconButton( - icon: const Icon(Icons.copy_outlined), - tooltip: L10n.of(context).copyToClipboard, - onPressed: controller.copyEventsAction, - ), - if (controller.canRedactSelectedEvents) - IconButton( - icon: const Icon(Icons.delete_outlined), - tooltip: L10n.of(context).redactMessage, - onPressed: controller.redactEventsAction, - ), - if (controller.selectedEvents.length == 1) - PopupMenuButton<_EventContextAction>( - useRootNavigator: true, - onSelected: (action) { - switch (action) { - case _EventContextAction.info: - controller.showEventInfo(); - controller.clearSelectedEvents(); - break; - case _EventContextAction.report: - controller.reportEventAction(); - break; - } - }, - itemBuilder: (context) => [ - if (controller.canPinSelectedEvents) - PopupMenuItem( - onTap: controller.pinEvent, - value: null, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.push_pin_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).pinMessage), - ], - ), - ), - if (controller.canSaveSelectedEvent) - PopupMenuItem( - onTap: () => controller.saveSelectedEvent(context), - value: null, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.download_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).downloadFile), - ], - ), - ), - PopupMenuItem( - value: _EventContextAction.info, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.info_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).messageInfo), - ], - ), - ), - if (controller.selectedEvents.single.status.isSent) - PopupMenuItem( - value: _EventContextAction.report, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.shield_outlined, color: Colors.red), - const SizedBox(width: 12), - Text(L10n.of(context).reportMessage), - ], - ), - ), - ], - ), - ]; - } else if (!controller.room.isArchived) { - return [ - if (AppSettings.experimentalVoip.value && - Matrix.of(context).voipPlugin != null && - controller.room.isDirectChat) - IconButton( - onPressed: controller.onPhoneButtonTap, - icon: const Icon(Icons.call_outlined), - tooltip: L10n.of(context).placeCall, - ), - EncryptionButton(controller.room), - ChatSettingsPopupMenu(controller.room, true), - ]; - } - return []; - } - @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -238,7 +124,120 @@ class ChatView extends StatelessWidget { ), titleSpacing: FluffyThemes.isColumnMode(context) ? 24 : 0, title: ChatAppBarTitle(controller), - actions: _appBarActions(context), + actions: [ + if (controller.selectMode) ...[ + if (controller.canEditSelectedEvents) + IconButton( + icon: const Icon(Icons.edit_outlined), + tooltip: L10n.of(context).edit, + onPressed: controller.editSelectedEventAction, + ), + if (controller.selectedEvents.length == 1 && + controller.activeThreadId == null && + controller.room.canSendDefaultMessages) + IconButton( + icon: const Icon(Icons.message_outlined), + tooltip: L10n.of(context).replyInThread, + onPressed: () => controller.enterThread( + controller.selectedEvents.single.eventId, + ), + ), + IconButton( + icon: const Icon(Icons.copy_outlined), + tooltip: L10n.of(context).copyToClipboard, + onPressed: controller.copyEventsAction, + ), + if (controller.canRedactSelectedEvents) + IconButton( + icon: const Icon(Icons.delete_outlined), + tooltip: L10n.of(context).redactMessage, + onPressed: controller.redactEventsAction, + ), + if (controller.selectedEvents.length == 1) + PopupMenuButton<_EventContextAction>( + useRootNavigator: true, + onSelected: (action) { + switch (action) { + case _EventContextAction.info: + controller.showEventInfo(); + controller.clearSelectedEvents(); + break; + case _EventContextAction.report: + controller.reportEventAction(); + break; + } + }, + itemBuilder: (context) => [ + if (controller.canPinSelectedEvents) + PopupMenuItem( + onTap: controller.pinEvent, + value: null, + child: Row( + mainAxisSize: .min, + children: [ + const Icon(Icons.push_pin_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).pinMessage), + ], + ), + ), + if (controller.canSaveSelectedEvent) + PopupMenuItem( + onTap: () => + controller.saveSelectedEvent(context), + value: null, + child: Row( + mainAxisSize: .min, + children: [ + const Icon(Icons.download_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).downloadFile), + ], + ), + ), + PopupMenuItem( + value: _EventContextAction.info, + child: Row( + mainAxisSize: .min, + children: [ + const Icon(Icons.info_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).messageInfo), + ], + ), + ), + if (controller.selectedEvents.single.status.isSent) + PopupMenuItem( + value: _EventContextAction.report, + child: Row( + mainAxisSize: .min, + children: [ + const Icon( + Icons.shield_outlined, + color: Colors.red, + ), + const SizedBox(width: 12), + Text(L10n.of(context).reportMessage), + ], + ), + ), + ], + ), + ] else if (!controller.room.isArchived) ...[ + if ((AppSettings.experimentalVoip.value && + Matrix.of(context).voipPlugin != null && + controller.room.isDirectChat)) + IconButton( + onPressed: controller.onPhoneButtonTap, + icon: const Icon(Icons.call_outlined), + tooltip: L10n.of(context).placeCall, + ) + else if (AppSettings.jitsiFeature.value) + JitsiPopupButton(controller.room), + EncryptionButton(controller.room), + ChatSettingsPopupMenu(controller.room, true), + ], + ], bottom: PreferredSize( preferredSize: Size.fromHeight(appbarBottomHeight), child: Column( @@ -363,9 +362,7 @@ class ChatView extends StatelessWidget { color: controller.selectedEvents.isNotEmpty ? theme.colorScheme.tertiaryContainer : theme.colorScheme.surfaceContainerHigh, - borderRadius: const BorderRadius.all( - Radius.circular(24), - ), + borderRadius: BorderRadius.circular(32), child: controller.room.isAbandonedDMRoom == true ? Row( mainAxisAlignment: .spaceEvenly, diff --git a/lib/pages/chat/command_hints.dart b/lib/pages/chat/command_hints.dart index 212bdf4d..75bc1400 100644 --- a/lib/pages/chat/command_hints.dart +++ b/lib/pages/chat/command_hints.dart @@ -26,41 +26,41 @@ String commandExample(String command) { String commandHint(L10n l10n, String command) { switch (command) { - case "ban": + case 'ban': return l10n.commandHint_ban; - case "clearcache": + case 'clearcache': return l10n.commandHint_clearcache; - case "create": + case 'create': return l10n.commandHint_create; - case "discardsession": + case 'discardsession': return l10n.commandHint_discardsession; - case "dm": + case 'dm': return l10n.commandHint_dm; - case "html": + case 'html': return l10n.commandHint_html; - case "invite": + case 'invite': return l10n.commandHint_invite; - case "join": + case 'join': return l10n.commandHint_join; - case "kick": + case 'kick': return l10n.commandHint_kick; - case "leave": + case 'leave': return l10n.commandHint_leave; - case "me": + case 'me': return l10n.commandHint_me; - case "myroomavatar": + case 'myroomavatar': return l10n.commandHint_myroomavatar; - case "myroomnick": + case 'myroomnick': return l10n.commandHint_myroomnick; - case "op": + case 'op': return l10n.commandHint_op; - case "plain": + case 'plain': return l10n.commandHint_plain; - case "react": + case 'react': return l10n.commandHint_react; - case "send": + case 'send': return l10n.commandHint_send; - case "unban": + case 'unban': return l10n.commandHint_unban; case 'markasdm': return l10n.commandHint_markasdm; @@ -85,6 +85,6 @@ String commandHint(L10n l10n, String command) { case 'logoutall': return l10n.commandHint_logoutall; default: - return ""; + return ''; } } diff --git a/lib/pages/chat/encryption_button.dart b/lib/pages/chat/encryption_button.dart index 594ec4e4..d6495f6f 100644 --- a/lib/pages/chat/encryption_button.dart +++ b/lib/pages/chat/encryption_button.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart' as b; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import '../../widgets/matrix.dart'; class EncryptionButton extends StatelessWidget { diff --git a/lib/pages/chat/event_info_dialog.dart b/lib/pages/chat/event_info_dialog.dart index 9dd0e7bb..e7c75965 100644 --- a/lib/pages/chat/event_info_dialog.dart +++ b/lib/pages/chat/event_info_dialog.dart @@ -1,14 +1,12 @@ import 'dart:convert'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; extension EventInfoDialogExtension on Event { void showInfoDialog(BuildContext context) => showAdaptiveBottomSheet( diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index ffccea6c..413aef01 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -1,22 +1,21 @@ import 'dart:async'; import 'dart:io'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:async/async.dart'; -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:just_audio/just_audio.dart'; -import 'package:matrix/matrix.dart'; -import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart'; -import 'package:path_provider/path_provider.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/file_description.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/url_launcher.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:matrix/matrix.dart'; +import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart'; +import 'package:path_provider/path_provider.dart'; + import '../../../utils/matrix_sdk_extensions/event_extension.dart'; import '../../../widgets/fluffy_chat_app.dart'; import '../../../widgets/matrix.dart'; @@ -123,7 +122,7 @@ class AudioPlayerState extends State { } } - void _onButtonTap() async { + Future _onButtonTap() async { WidgetsBinding.instance.addPostFrameCallback((_) { ScaffoldMessenger.of(matrix.context).clearMaterialBanners(); }); @@ -131,10 +130,8 @@ class AudioPlayerState extends State { matrix.voiceMessageEventId.value != widget.event.eventId ? null : matrix.audioPlayer; - if (currentPlayer != null) { - if (currentPlayer.isAtEndPosition) { - currentPlayer.seek(Duration.zero); - } else if (currentPlayer.playing) { + if (currentPlayer != null && !currentPlayer.isAtEndPosition) { + if (currentPlayer.playing) { currentPlayer.pause(); } else { currentPlayer.play(); @@ -152,7 +149,7 @@ class AudioPlayerState extends State { setState(() => status = AudioPlayerStatus.downloading); try { final fileSize = widget.event.content - .tryGetMap('info') + .tryGetMap('info') ?.tryGet('size'); matrixFile = await widget.event.downloadAndDecryptAttachment( onDownloadProgress: fileSize != null && fileSize > 0 @@ -167,11 +164,11 @@ class AudioPlayerState extends State { : null, ); - if (!kIsWeb) { + final attachmentUrl = widget.event.attachmentOrThumbnailMxcUrl(); + + if (!kIsWeb && attachmentUrl != null) { final tempDir = await getTemporaryDirectory(); - final fileName = Uri.encodeComponent( - widget.event.attachmentOrThumbnailMxcUrl()!.pathSegments.last, - ); + final fileName = Uri.encodeComponent(attachmentUrl.pathSegments.last); file = File('${tempDir.path}/${fileName}_${matrixFile.name}'); await file.writeAsBytes(matrixFile.bytes); @@ -192,6 +189,7 @@ class AudioPlayerState extends State { }); } catch (e, s) { Logs().v('Could not download audio file', e, s); + if (!mounted) rethrow; ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(e.toLocalizedString(context)))); @@ -205,15 +203,20 @@ class AudioPlayerState extends State { if (file != null) { audioPlayer.setFilePath(file.path); } else { - await audioPlayer.setAudioSource(MatrixFileAudioSource(matrixFile)); + await audioPlayer.setAudioSource( + AudioSource.uri( + Uri.dataFromBytes(matrixFile.bytes, mimeType: matrixFile.mimeType), + ), + ); } + if (!mounted) return; audioPlayer.play().onError( ErrorReporter(context, 'Unable to play audio message').onErrorCallback, ); } - void _toggleSpeed() async { + Future _toggleSpeed() async { final audioPlayer = matrix.audioPlayer; if (audioPlayer == null) return; switch (audioPlayer.speed) { @@ -239,7 +242,7 @@ class AudioPlayerState extends State { List? _getWaveform() { final eventWaveForm = widget.event.content - .tryGetMap('org.matrix.msc1767.audio') + .tryGetMap('org.matrix.msc1767.audio') ?.tryGetList('waveform'); if (eventWaveForm == null || eventWaveForm.isEmpty) { return null; @@ -272,7 +275,7 @@ class AudioPlayerState extends State { } final durationInt = widget.event.content - .tryGetMap('info') + .tryGetMap('info') ?.tryGet('duration'); if (durationInt != null) { final duration = Duration(milliseconds: durationInt); @@ -456,7 +459,7 @@ class AudioPlayerState extends State { height: 20, child: Center( child: Text( - '${audioPlayer?.speed.toString()}x', + '${audioPlayer?.speed}x', style: TextStyle( color: widget.color, fontSize: 9, @@ -513,26 +516,6 @@ class AudioPlayerState extends State { } } -/// To use a MatrixFile as an AudioSource for the just_audio package -class MatrixFileAudioSource extends StreamAudioSource { - final MatrixFile file; - - MatrixFileAudioSource(this.file); - - @override - Future request([int? start, int? end]) async { - start ??= 0; - end ??= file.bytes.length; - return StreamAudioResponse( - sourceLength: file.bytes.length, - contentLength: end - start, - offset: start, - stream: Stream.value(file.bytes.sublist(start, end)), - contentType: file.mimeType, - ); - } -} - extension on AudioPlayer { bool get isAtEndPosition { final duration = this.duration; diff --git a/lib/pages/chat/events/cute_events.dart b/lib/pages/chat/events/cute_events.dart index 60453771..1c84f59f 100644 --- a/lib/pages/chat/events/cute_events.dart +++ b/lib/pages/chat/events/cute_events.dart @@ -1,11 +1,9 @@ import 'dart:math'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class CuteContent extends StatefulWidget { final Event event; @@ -52,6 +50,7 @@ class _CuteContentState extends State { Future addOverlay() async { _isOverlayShown = true; await Future.delayed(const Duration(milliseconds: 50)); + if (!mounted) return; OverlayEntry? overlay; overlay = OverlayEntry( diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index 668a16ae..e4ded6f1 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -1,18 +1,17 @@ +import 'package:collection/collection.dart'; +import 'package:fluffychat/utils/code_highlight_theme.dart'; +import 'package:fluffychat/utils/event_checkbox_extension.dart'; +import 'package:fluffychat/widgets/avatar.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:highlight/highlight.dart' show highlight; import 'package:html/dom.dart' as dom; import 'package:html/parser.dart' as parser; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/utils/code_highlight_theme.dart'; -import 'package:fluffychat/utils/event_checkbox_extension.dart'; -import 'package:fluffychat/widgets/avatar.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/mxc_image.dart'; import '../../../utils/url_launcher.dart'; class HtmlMessage extends StatelessWidget { @@ -253,9 +252,8 @@ class HtmlMessage extends StatelessWidget { : checkboxCheckedEvents?.firstWhereOrNull( (event) => event.checkedCheckboxId == checkboxIndex, ); - final staticallyChecked = !isCheckbox - ? false - : node.children.first.attributes['checked'] == 'true'; + final staticallyChecked = + isCheckbox && node.children.first.attributes['checked'] == 'true'; return WidgetSpan( child: Padding( diff --git a/lib/pages/chat/events/image_bubble.dart b/lib/pages/chat/events/image_bubble.dart index 845814fc..af703f05 100644 --- a/lib/pages/chat/events/image_bubble.dart +++ b/lib/pages/chat/events/image_bubble.dart @@ -1,13 +1,12 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/file_description.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:matrix/matrix.dart'; + import '../../../widgets/blur_hash.dart'; class ImageBubble extends StatelessWidget { diff --git a/lib/pages/chat/events/map_bubble.dart b/lib/pages/chat/events/map_bubble.dart index 4a2befae..a23dc7a8 100644 --- a/lib/pages/chat/events/map_bubble.dart +++ b/lib/pages/chat/events/map_bubble.dart @@ -3,6 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:latlong2/latlong.dart'; +import '../../../config/app_config.dart'; + class MapBubble extends StatelessWidget { final double latitude; final double longitude; @@ -43,6 +45,7 @@ class MapBubble extends StatelessWidget { minZoom: 0, urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + userAgentPackageName: AppConfig.appId, subdomains: const ['a', 'b', 'c'], ), MarkerLayer( diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 69cb567a..9bcd39a9 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -1,12 +1,6 @@ import 'dart:ui' as ui; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; -import 'package:matrix/matrix.dart'; -import 'package:swipe_to_action/swipe_to_action.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -18,6 +12,11 @@ import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; +import 'package:swipe_to_action/swipe_to_action.dart'; + import '../../../config/app_config.dart'; import 'message_content.dart'; import 'message_reactions.dart'; @@ -42,12 +41,12 @@ class Message extends StatelessWidget { final Timeline timeline; final bool highlightMarker; final bool animateIn; - final void Function()? resetAnimateIn; final bool wallpaperMode; final ScrollController scrollController; final List colors; final void Function()? onExpand; final bool isCollapsed; + final Set bigEmojis; const Message( this.event, { @@ -55,6 +54,7 @@ class Message extends StatelessWidget { this.previousEvent, this.displayReadMarker = false, this.longPressSelect = false, + required this.bigEmojis, required this.onSelect, required this.onInfoTab, required this.scrollToEventId, @@ -65,7 +65,6 @@ class Message extends StatelessWidget { required this.timeline, this.highlightMarker = false, this.animateIn = false, - this.resetAnimateIn, this.wallpaperMode = false, required this.onMention, required this.scrollController, @@ -156,17 +155,12 @@ class Message extends StatelessWidget { ); final noBubble = ({ - MessageTypes.Video, - MessageTypes.Image, - MessageTypes.Sticker, - }.contains(event.messageType) && - event.fileDescription == null && - !event.redacted) || - (event.messageType == MessageTypes.Text && - event.relationshipType == null && - event.onlyEmotes && - event.numberEmotes > 0 && - event.numberEmotes <= 3); + MessageTypes.Video, + MessageTypes.Image, + MessageTypes.Sticker, + }.contains(event.messageType) && + event.fileDescription == null && + !event.redacted); if (ownMessage) { color = displayEvent.status.isError @@ -174,9 +168,6 @@ class Message extends StatelessWidget { : theme.bubbleColor; } - final resetAnimateIn = this.resetAnimateIn; - var animateIn = this.animateIn; - final sentReactions = {}; if (singleSelected) { sentReactions.addAll( @@ -196,7 +187,7 @@ class Message extends StatelessWidget { ); } - final showReceiptsRow = event.hasAggregatedEvents( + final hasReactions = event.hasAggregatedEvents( timeline, RelationshipTypes.reaction, ); @@ -210,728 +201,663 @@ class Message extends StatelessWidget { singleSelected && event.room.canSendDefaultMessages; final enterThread = this.enterThread; + final sender = event.senderFromMemoryOrFallback; - return Center( - child: Swipeable( - key: ValueKey(event.eventId), - background: const Padding( - padding: EdgeInsets.symmetric(horizontal: 12.0), - child: Center(child: Icon(Icons.check_outlined)), - ), - direction: AppSettings.swipeRightToLeftToReply.value - ? SwipeDirection.endToStart - : SwipeDirection.startToEnd, - onSwipe: (_) => onSwipe(), - child: Container( - constraints: const BoxConstraints( - maxWidth: FluffyThemes.maxTimelineWidth, + return _AnimateIn( + animateIn: animateIn, + child: Center( + child: Swipeable( + key: ValueKey(event.eventId), + background: const Padding( + padding: EdgeInsets.symmetric(horizontal: 12.0), + child: Center(child: Icon(Icons.check_outlined)), ), - padding: EdgeInsets.only( - left: 8.0, - right: 8.0, - top: nextEventSameSender ? 1.0 : 4.0, - bottom: previousEventSameSender ? 1.0 : 4.0, - ), - child: Column( - mainAxisSize: .min, - crossAxisAlignment: ownMessage ? .end : .start, - children: [ - if (displayTime || selected) - Padding( - padding: displayTime - ? const EdgeInsets.symmetric(vertical: 8.0) - : EdgeInsets.zero, - child: Center( - child: Padding( - padding: const EdgeInsets.only(top: 4.0), - child: Material( - borderRadius: BorderRadius.circular( - AppConfig.borderRadius * 2, - ), - color: theme.colorScheme.surface.withAlpha(128), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - vertical: 2.0, + direction: AppSettings.swipeRightToLeftToReply.value + ? SwipeDirection.endToStart + : SwipeDirection.startToEnd, + onSwipe: (_) => onSwipe(), + child: Container( + constraints: const BoxConstraints( + maxWidth: FluffyThemes.maxTimelineWidth, + ), + padding: EdgeInsets.only( + left: 8.0, + right: 8.0, + top: nextEventSameSender ? 1.0 : 4.0, + bottom: previousEventSameSender ? 1.0 : 4.0, + ), + child: Column( + mainAxisSize: .min, + crossAxisAlignment: ownMessage ? .end : .start, + children: [ + if (displayTime || selected) + Padding( + padding: displayTime + ? const EdgeInsets.symmetric(vertical: 8.0) + : EdgeInsets.zero, + child: Center( + child: Padding( + padding: const EdgeInsets.only(top: 4.0), + child: Material( + borderRadius: BorderRadius.circular( + AppConfig.borderRadius * 2, ), - child: Text( - event.originServerTs.localizedTime(context), - style: TextStyle( - fontSize: 12 * AppSettings.fontSizeFactor.value, - fontWeight: FontWeight.bold, - color: theme.colorScheme.secondary, + color: theme.colorScheme.surface.withAlpha(128), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 2.0, + ), + child: Text( + event.originServerTs.localizedTime(context), + style: TextStyle( + fontSize: 12 * AppSettings.fontSizeFactor.value, + fontWeight: FontWeight.bold, + color: theme.colorScheme.secondary, + ), ), ), ), ), ), ), - ), - StatefulBuilder( - builder: (context, setState) { - if (animateIn && resetAnimateIn != null) { - WidgetsBinding.instance.addPostFrameCallback((timeStamp) { - animateIn = false; - setState(resetAnimateIn); - }); - } - return AnimatedSize( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - clipBehavior: Clip.none, - alignment: ownMessage - ? Alignment.bottomRight - : Alignment.bottomLeft, - child: animateIn - ? const SizedBox(height: 0, width: double.infinity) - : Stack( - clipBehavior: Clip.none, + Stack( + clipBehavior: Clip.none, + children: [ + Positioned( + top: 0, + bottom: 0, + left: 0, + right: 0, + child: InkWell( + hoverColor: longPressSelect ? Colors.transparent : null, + enableFeedback: !selected, + onTap: longPressSelect ? null : () => onSelect(event), + borderRadius: BorderRadius.circular( + AppConfig.borderRadius / 2, + ), + child: Material( + borderRadius: BorderRadius.circular( + AppConfig.borderRadius / 2, + ), + color: selected || highlightMarker + ? theme.colorScheme.secondaryContainer.withAlpha( + 128, + ) + : Colors.transparent, + ), + ), + ), + Row( + crossAxisAlignment: .start, + mainAxisAlignment: rowMainAxisAlignment, + children: [ + if (longPressSelect && !event.redacted) + SizedBox( + height: 32, + width: Avatar.defaultSize, + child: IconButton( + padding: EdgeInsets.zero, + tooltip: L10n.of(context).select, + icon: Icon( + selected + ? Icons.check_circle + : Icons.circle_outlined, + ), + onPressed: () => onSelect(event), + ), + ) + else if (nextEventSameSender || ownMessage) + SizedBox( + width: Avatar.defaultSize, + child: Center( + child: SizedBox( + width: 16, + height: 16, + child: event.status == EventStatus.error + ? const Icon(Icons.error, color: Colors.red) + : event.fileSendingStatus != null + ? const CircularProgressIndicator.adaptive( + strokeWidth: 1, + ) + : null, + ), + ), + ) + else + FutureBuilder( + future: event.fetchSenderUser(), + builder: (context, snapshot) { + final user = snapshot.data ?? sender; + return Avatar( + mxContent: user.avatarUrl, + name: user.calcDisplayname(), + onTap: () => showMemberActionsPopupMenu( + context: context, + user: user, + onMention: onMention, + ), + presenceUserId: user.stateKey, + presenceBackgroundColor: wallpaperMode + ? Colors.transparent + : null, + ); + }, + ), + Expanded( + child: Column( + crossAxisAlignment: .start, + mainAxisSize: .min, children: [ - Positioned( - top: 0, - bottom: 0, - left: 0, - right: 0, - child: InkWell( - hoverColor: longPressSelect - ? Colors.transparent - : null, - enableFeedback: !selected, - onTap: longPressSelect - ? null - : () => onSelect(event), - borderRadius: BorderRadius.circular( - AppConfig.borderRadius / 2, + if (!nextEventSameSender) + Padding( + padding: const EdgeInsets.only( + left: 8.0, + bottom: 4, ), - child: Material( - borderRadius: BorderRadius.circular( - AppConfig.borderRadius / 2, + child: ownMessage || event.room.isDirectChat + ? const SizedBox(height: 12) + : Row( + children: [ + if (sender.powerLevel >= 50) + Padding( + padding: const EdgeInsets.only( + right: 2.0, + ), + child: Icon( + sender.powerLevel >= 100 + ? Icons + .admin_panel_settings + : Icons + .add_moderator_outlined, + size: 14, + color: theme + .colorScheme + .onPrimaryContainer, + ), + ), + Expanded( + child: FutureBuilder( + future: event.fetchSenderUser(), + builder: (context, snapshot) { + final displayname = + snapshot.data + ?.calcDisplayname() ?? + sender.calcDisplayname(); + return Text( + displayname, + style: TextStyle( + fontSize: 11, + fontWeight: + FontWeight.bold, + color: + (theme.brightness == + Brightness.light + ? displayname.color + : displayname + .lightColorText), + shadows: !wallpaperMode + ? null + : [ + const Shadow( + offset: Offset( + 0.0, + 0.0, + ), + blurRadius: 3, + color: Colors + .black, + ), + ], + ), + maxLines: 1, + overflow: + TextOverflow.ellipsis, + ); + }, + ), + ), + ], + ), + ), + Container( + alignment: alignment, + padding: const EdgeInsets.only(left: 8), + child: GestureDetector( + onLongPress: longPressSelect + ? null + : () { + HapticFeedback.heavyImpact(); + onSelect(event); + }, + child: Container( + decoration: BoxDecoration( + color: noBubble + ? Colors.transparent + : color, + borderRadius: borderRadius, + ), + clipBehavior: Clip.antiAlias, + child: BubbleBackground( + colors: colors, + ignore: + noBubble || + !ownMessage || + MediaQuery.highContrastOf(context), + scrollController: scrollController, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + AppConfig.borderRadius, + ), + ), + constraints: const BoxConstraints( + maxWidth: + FluffyThemes.columnWidth * 1.5, + ), + child: Column( + mainAxisSize: .min, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + if (event.inReplyToEventId( + includingFallback: false, + ) != + null) + FutureBuilder( + future: event.getReplyEvent( + timeline, + ), + builder: (BuildContext context, snapshot) { + final replyEvent = + snapshot.hasData + ? snapshot.data! + : Event( + eventId: + event + .inReplyToEventId() ?? + '\$fake_event_id', + content: { + 'msgtype': 'm.text', + 'body': '...', + }, + senderId: + event.senderId, + type: + 'm.room.message', + room: event.room, + status: + EventStatus.sent, + originServerTs: + DateTime.now(), + ); + return Padding( + padding: + const EdgeInsets.only( + left: 16, + right: 16, + top: 8, + ), + child: Material( + color: Colors.transparent, + borderRadius: ReplyContent + .borderRadius, + child: InkWell( + borderRadius: + ReplyContent + .borderRadius, + onTap: () => + scrollToEventId( + replyEvent + .eventId, + ), + child: AbsorbPointer( + child: ReplyContent( + replyEvent, + ownMessage: + ownMessage, + timeline: timeline, + ), + ), + ), + ), + ); + }, + ), + MessageContent( + displayEvent, + textColor: textColor, + linkColor: linkColor, + onInfoTab: onInfoTab, + borderRadius: borderRadius, + timeline: timeline, + selected: selected, + bigEmojis: bigEmojis, + ), + if (event.hasAggregatedEvents( + timeline, + RelationshipTypes.edit, + )) + Padding( + padding: const EdgeInsets.only( + bottom: 8.0, + left: 16.0, + right: 16.0, + ), + child: Row( + mainAxisSize: + MainAxisSize.min, + spacing: 4.0, + children: [ + Icon( + Icons.edit_outlined, + color: textColor + .withAlpha(164), + size: 14, + ), + Text( + displayEvent + .originServerTs + .localizedTimeShort( + context, + ), + style: TextStyle( + color: textColor + .withAlpha(164), + fontSize: 11, + ), + ), + ], + ), + ), + ], + ), + ), ), - color: selected || highlightMarker - ? theme.colorScheme.secondaryContainer - .withAlpha(128) - : Colors.transparent, ), ), ), - Row( - crossAxisAlignment: .start, - mainAxisAlignment: rowMainAxisAlignment, - children: [ - if (longPressSelect && !event.redacted) - SizedBox( - height: 32, - width: Avatar.defaultSize, - child: IconButton( - padding: EdgeInsets.zero, - tooltip: L10n.of(context).select, - icon: Icon( - selected - ? Icons.check_circle - : Icons.circle_outlined, - ), - onPressed: () => onSelect(event), - ), - ) - else if (nextEventSameSender || ownMessage) - SizedBox( - width: Avatar.defaultSize, - child: Center( - child: SizedBox( - width: 16, - height: 16, - child: - event.status == EventStatus.error - ? const Icon( - Icons.error, - color: Colors.red, - ) - : event.fileSendingStatus != null - ? const CircularProgressIndicator.adaptive( - strokeWidth: 1, - ) - : null, - ), - ), - ) - else - FutureBuilder( - future: event.fetchSenderUser(), - builder: (context, snapshot) { - final user = - snapshot.data ?? - event.senderFromMemoryOrFallback; - return Avatar( - mxContent: user.avatarUrl, - name: user.calcDisplayname(), - onTap: () => - showMemberActionsPopupMenu( - context: context, - user: user, - onMention: onMention, - ), - presenceUserId: user.stateKey, - presenceBackgroundColor: wallpaperMode - ? Colors.transparent - : null, - ); - }, - ), - Expanded( - child: Column( - crossAxisAlignment: .start, - mainAxisSize: .min, - children: [ - if (!nextEventSameSender) - Padding( - padding: const EdgeInsets.only( - left: 8.0, - bottom: 4, + Align( + alignment: ownMessage + ? Alignment.bottomRight + : Alignment.bottomLeft, + child: AnimatedSize( + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + child: showReactionPicker + ? Padding( + padding: const EdgeInsets.all(4.0), + child: Material( + elevation: 4, + borderRadius: BorderRadius.circular( + AppConfig.borderRadius, ), - child: - ownMessage || - event.room.isDirectChat - ? const SizedBox(height: 12) - : FutureBuilder( - future: event - .fetchSenderUser(), - builder: (context, snapshot) { - final displayname = - snapshot.data - ?.calcDisplayname() ?? - event - .senderFromMemoryOrFallback - .calcDisplayname(); - return Text( - displayname, - style: TextStyle( - fontSize: 11, - fontWeight: - FontWeight.bold, - color: - (theme.brightness == - Brightness - .light - ? displayname - .color - : displayname - .lightColorText), - shadows: - !wallpaperMode - ? null - : [ - const Shadow( - offset: - Offset( - 0.0, - 0.0, - ), - blurRadius: - 3, - color: Colors - .black, - ), - ], + shadowColor: theme + .colorScheme + .surface + .withAlpha(128), + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + mainAxisSize: .min, + children: [ + ...AppConfig.defaultReactions.map( + (emoji) => IconButton( + padding: EdgeInsets.zero, + icon: Center( + child: Opacity( + opacity: + sentReactions + .contains( + emoji, + ) + ? 0.33 + : 1, + child: Text( + emoji, + style: + const TextStyle( + fontSize: 20, + ), + textAlign: TextAlign + .center, + ), ), - maxLines: 1, - overflow: TextOverflow - .ellipsis, - ); - }, - ), - ), - Container( - alignment: alignment, - padding: const EdgeInsets.only( - left: 8, - ), - child: GestureDetector( - onLongPress: longPressSelect - ? null - : () { - HapticFeedback.heavyImpact(); - onSelect(event); - }, - child: AnimatedOpacity( - opacity: animateIn - ? 0 - : event.messageType == - MessageTypes - .BadEncrypted || - event.status.isSending - ? 0.5 - : 1, - duration: FluffyThemes - .animationDuration, - curve: - FluffyThemes.animationCurve, - child: Container( - decoration: BoxDecoration( - color: noBubble - ? Colors.transparent - : color, - borderRadius: borderRadius, - ), - clipBehavior: Clip.antiAlias, - child: BubbleBackground( - colors: colors, - ignore: - noBubble || - !ownMessage || - MediaQuery.highContrastOf( - context, ), - scrollController: - scrollController, - child: Container( - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular( - AppConfig - .borderRadius, - ), - ), - constraints: - const BoxConstraints( - maxWidth: - FluffyThemes - .columnWidth * - 1.5, - ), - child: Column( - mainAxisSize: .min, - crossAxisAlignment: - CrossAxisAlignment - .start, - children: [ - if (event.inReplyToEventId( - includingFallback: - false, - ) != - null) - FutureBuilder( - future: event - .getReplyEvent( - timeline, - ), - builder: - ( - BuildContext - context, - snapshot, - ) { - final replyEvent = - snapshot - .hasData - ? snapshot - .data! - : Event( - eventId: - event.inReplyToEventId() ?? - '\$fake_event_id', - content: { - 'msgtype': - 'm.text', - 'body': - '...', - }, - senderId: - event.senderId, - type: - 'm.room.message', - room: - event.room, - status: - EventStatus.sent, - originServerTs: - DateTime.now(), - ); - return Padding( - padding: - const EdgeInsets.only( - left: - 16, - right: - 16, - top: - 8, - ), - child: Material( - color: Colors - .transparent, - borderRadius: - ReplyContent - .borderRadius, - child: InkWell( - borderRadius: - ReplyContent.borderRadius, - onTap: () => scrollToEventId( - replyEvent - .eventId, - ), - child: AbsorbPointer( - child: ReplyContent( - replyEvent, - ownMessage: - ownMessage, - timeline: - timeline, - ), - ), - ), - ), + onPressed: + sentReactions + .contains(emoji) + ? null + : () { + onSelect(event); + event.room + .sendReaction( + event + .eventId, + emoji, ); - }, - ), - MessageContent( - displayEvent, - textColor: textColor, - linkColor: linkColor, - onInfoTab: onInfoTab, - borderRadius: - borderRadius, - timeline: timeline, - selected: selected, - ), - if (event - .hasAggregatedEvents( - timeline, - RelationshipTypes - .edit, - )) - Padding( - padding: - const EdgeInsets.only( - bottom: 8.0, - left: 16.0, - right: 16.0, - ), - child: Row( - mainAxisSize: - MainAxisSize - .min, - spacing: 4.0, - children: [ - Icon( - Icons - .edit_outlined, - color: textColor - .withAlpha( - 164, - ), - size: 14, - ), - Text( - displayEvent - .originServerTs - .localizedTimeShort( - context, - ), - style: TextStyle( - color: textColor - .withAlpha( - 164, - ), - fontSize: - 11, - ), - ), - ], - ), - ), - ], + }, ), ), - ), - ), - ), - ), - ), - Align( - alignment: ownMessage - ? Alignment.bottomRight - : Alignment.bottomLeft, - child: AnimatedSize( - duration: - FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - child: showReactionPicker - ? Padding( - padding: - const EdgeInsets.all( - 4.0, - ), - child: Material( - elevation: 4, - borderRadius: - BorderRadius.circular( - AppConfig - .borderRadius, - ), - shadowColor: theme - .colorScheme - .surface - .withAlpha(128), - child: SingleChildScrollView( - scrollDirection: - Axis.horizontal, - child: Row( - mainAxisSize: .min, - children: [ - ...AppConfig.defaultReactions.map( - ( - emoji, - ) => IconButton( - padding: - EdgeInsets - .zero, - icon: Center( - child: Opacity( - opacity: - sentReactions.contains( - emoji, - ) - ? 0.33 - : 1, - child: Text( - emoji, - style: const TextStyle( - fontSize: - 20, - ), - textAlign: - TextAlign - .center, - ), - ), - ), - onPressed: - sentReactions - .contains( - emoji, - ) - ? null - : () { - onSelect( - event, - ); - event.room.sendReaction( - event - .eventId, - emoji, - ); - }, - ), - ), - IconButton( - icon: const Icon( - Icons - .add_reaction_outlined, - ), - tooltip: L10n.of( + IconButton( + icon: const Icon( + Icons + .add_reaction_outlined, + ), + tooltip: L10n.of( + context, + ).customReaction, + onPressed: () async { + final emoji = await showAdaptiveBottomSheet( + context: context, + builder: (context) => Scaffold( + appBar: AppBar( + title: Text( + L10n.of( context, ).customReaction, - onPressed: () async { - final emoji = await showAdaptiveBottomSheet( - context: - context, - builder: (context) => Scaffold( - appBar: AppBar( - title: Text( - L10n.of( - context, - ).customReaction, - ), - leading: CloseButton( - onPressed: () => Navigator.of( - context, - ).pop(null), - ), - ), - body: SizedBox( - height: double - .infinity, - child: EmojiPicker( - onEmojiSelected: - ( - _, - emoji, - ) => - Navigator.of( - context, - ).pop( - emoji.emoji, - ), - config: Config( - locale: Localizations.localeOf( - context, - ), - emojiViewConfig: const EmojiViewConfig( - backgroundColor: - Colors.transparent, - ), - bottomActionBarConfig: const BottomActionBarConfig( - enabled: - false, - ), - categoryViewConfig: CategoryViewConfig( - initCategory: - Category.SMILEYS, - backspaceColor: - theme.colorScheme.primary, - iconColor: theme.colorScheme.primary.withAlpha( - 128, - ), - iconColorSelected: - theme.colorScheme.primary, - indicatorColor: - theme.colorScheme.primary, - backgroundColor: - theme.colorScheme.surface, - ), - skinToneConfig: SkinToneConfig( - dialogBackgroundColor: Color.lerp( - theme.colorScheme.surface, - theme.colorScheme.primaryContainer, - 0.75, - )!, - indicatorColor: - theme.colorScheme.onSurface, - ), - ), - ), - ), - ), - ); - if (emoji == - null) { - return; - } - if (sentReactions - .contains( - emoji, - )) { - return; - } - onSelect(event); - - await event.room - .sendReaction( - event - .eventId, - emoji, - ); - }, ), - ], + leading: CloseButton( + onPressed: () => + Navigator.of( + context, + ).pop(null), + ), + ), + body: SizedBox( + height: + double.infinity, + child: EmojiPicker( + onEmojiSelected: + (_, emoji) => + Navigator.of( + context, + ).pop( + emoji + .emoji, + ), + config: Config( + locale: + Localizations.localeOf( + context, + ), + emojiViewConfig: + const EmojiViewConfig( + backgroundColor: + Colors + .transparent, + ), + bottomActionBarConfig: + const BottomActionBarConfig( + enabled: + false, + ), + categoryViewConfig: CategoryViewConfig( + initCategory: + Category + .SMILEYS, + backspaceColor: theme + .colorScheme + .primary, + iconColor: theme + .colorScheme + .primary + .withAlpha( + 128, + ), + iconColorSelected: theme + .colorScheme + .primary, + indicatorColor: theme + .colorScheme + .primary, + backgroundColor: theme + .colorScheme + .surface, + ), + skinToneConfig: SkinToneConfig( + dialogBackgroundColor: Color.lerp( + theme + .colorScheme + .surface, + theme + .colorScheme + .primaryContainer, + 0.75, + )!, + indicatorColor: theme + .colorScheme + .onSurface, + ), + ), + ), + ), ), - ), - ), - ) - : const SizedBox.shrink(), + ); + if (emoji == null) { + return; + } + if (sentReactions + .contains(emoji)) { + return; + } + onSelect(event); + + await event.room + .sendReaction( + event.eventId, + emoji, + ); + }, + ), + ], + ), + ), ), - ), - ], - ), - ), - ], + ) + : const SizedBox.shrink(), + ), ), ], ), - ); - }, - ), - AnimatedSize( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - alignment: Alignment.bottomCenter, - child: !showReceiptsRow - ? const SizedBox.shrink() - : Padding( - padding: EdgeInsets.only( - top: 4.0, - left: (ownMessage ? 0 : Avatar.defaultSize) + 12.0, - right: ownMessage ? 0 : 12.0, ), - child: MessageReactions(event, timeline), - ), - ), - if (enterThread != null) + ], + ), + ], + ), + AnimatedSize( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, alignment: Alignment.bottomCenter, - child: threadChildren.isEmpty + child: !hasReactions ? const SizedBox.shrink() : Padding( - padding: const EdgeInsets.only( - top: 2.0, - bottom: 8.0, - left: Avatar.defaultSize + 8, + padding: EdgeInsets.only( + top: 1.0, + left: (ownMessage ? 0 : Avatar.defaultSize) + 12.0, + right: ownMessage ? 0 : 12.0, ), - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: FluffyThemes.columnWidth * 1.5, + child: MessageReactions(event, timeline), + ), + ), + if (enterThread != null) + AnimatedSize( + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + alignment: Alignment.bottomCenter, + child: threadChildren.isEmpty + ? const SizedBox.shrink() + : Padding( + padding: const EdgeInsets.only( + top: 2.0, + bottom: 8.0, + left: Avatar.defaultSize + 8, ), - child: TextButton.icon( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(4), + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: FluffyThemes.columnWidth * 1.5, + ), + child: TextButton.icon( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4), + ), + foregroundColor: + theme.colorScheme.onSecondaryContainer, + backgroundColor: + theme.colorScheme.secondaryContainer, + ), + onPressed: () => enterThread(event.eventId), + icon: const Icon(Icons.message), + label: Text( + '${L10n.of(context).countReplies(threadChildren.length)} | ${threadChildren.first.calcLocalizedBodyFallback(MatrixLocals(L10n.of(context)), withSenderNamePrefix: true)}', + maxLines: 1, + overflow: TextOverflow.ellipsis, ), - foregroundColor: - theme.colorScheme.onSecondaryContainer, - backgroundColor: - theme.colorScheme.secondaryContainer, - ), - onPressed: () => enterThread(event.eventId), - icon: const Icon(Icons.message), - label: Text( - '${L10n.of(context).countReplies(threadChildren.length)} | ${threadChildren.first.calcLocalizedBodyFallback(MatrixLocals(L10n.of(context)), withSenderNamePrefix: true)}', - maxLines: 1, - overflow: TextOverflow.ellipsis, ), ), ), - ), - ), - if (displayReadMarker) - Row( - children: [ - Expanded( - child: Divider( - color: theme.colorScheme.surfaceContainerHighest, - ), - ), - Container( - margin: const EdgeInsets.symmetric( - horizontal: 4, - vertical: 16.0, - ), - padding: const EdgeInsets.symmetric( - horizontal: 8, - vertical: 2, - ), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular( - AppConfig.borderRadius / 3, - ), - color: theme.colorScheme.surface.withAlpha(128), - ), - child: Text( - L10n.of(context).readUpToHere, - style: TextStyle( - fontSize: 12 * AppSettings.fontSizeFactor.value, + ), + if (displayReadMarker) + Row( + children: [ + Expanded( + child: Divider( + color: theme.colorScheme.surfaceContainerHighest, ), ), - ), - Expanded( - child: Divider( - color: theme.colorScheme.surfaceContainerHighest, + Container( + margin: const EdgeInsets.symmetric( + horizontal: 4, + vertical: 16.0, + ), + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 2, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + AppConfig.borderRadius / 3, + ), + color: theme.colorScheme.surface.withAlpha(128), + ), + child: Text( + L10n.of(context).readUpToHere, + style: TextStyle( + fontSize: 12 * AppSettings.fontSizeFactor.value, + ), + ), ), - ), - ], - ), - ], + Expanded( + child: Divider( + color: theme.colorScheme.surfaceContainerHighest, + ), + ), + ], + ), + ], + ), ), ), ), @@ -1009,3 +935,37 @@ class BubblePainter extends CustomPainter { return scrollable.position != oldScrollable?.position; } } + +class _AnimateIn extends StatefulWidget { + final bool animateIn; + final Widget child; + const _AnimateIn({required this.animateIn, required this.child}); + + @override + State<_AnimateIn> createState() => __AnimateInState(); +} + +class __AnimateInState extends State<_AnimateIn> { + bool _animationFinished = false; + @override + Widget build(BuildContext context) { + if (!widget.animateIn) return widget.child; + if (!_animationFinished) { + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() { + _animationFinished = true; + }); + }); + } + return AnimatedOpacity( + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + opacity: _animationFinished ? 1 : 0, + child: AnimatedSize( + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + child: _animationFinished ? widget.child : const SizedBox.shrink(), + ), + ); + } +} diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index ef28b964..1ec5f5f0 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -1,10 +1,5 @@ import 'dart:math'; -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/events/poll.dart'; @@ -15,6 +10,11 @@ import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart'; + import '../../../config/app_config.dart'; import '../../../utils/event_checkbox_extension.dart'; import '../../../utils/platform_infos.dart'; @@ -34,6 +34,7 @@ class MessageContent extends StatelessWidget { final BorderRadius borderRadius; final Timeline timeline; final bool selected; + final Set bigEmojis; const MessageContent( this.event, { @@ -44,9 +45,10 @@ class MessageContent extends StatelessWidget { required this.linkColor, required this.borderRadius, required this.selected, + required this.bigEmojis, }); - void _verifyOrRequestKey(BuildContext context) async { + Future _verifyOrRequestKey(BuildContext context) async { final l10n = L10n.of(context); if (event.content['can_request_session'] != true) { ScaffoldMessenger.of(context).showSnackBar( @@ -57,10 +59,13 @@ class MessageContent extends StatelessWidget { return; } final client = Matrix.of(context).client; - if (client.isUnknownSession && client.encryption!.crossSigning.enabled) { + final state = await client.getCryptoIdentityState(); + if (!state.connected) { + if (!context.mounted) return; final success = await context.push('/backup'); if (success != true) return; } + if (!context.mounted) return; event.requestKey(); final sender = event.senderFromMemoryOrFallback; await showAdaptiveBottomSheet( @@ -205,7 +210,7 @@ class MessageContent extends StatelessWidget { .split(';') .first .split(',') - .map((s) => double.tryParse(s)) + .map(double.tryParse) .toList(); if (latlong.length == 2 && latlong.first != null && @@ -256,9 +261,8 @@ class MessageContent extends StatelessWidget { } final bigEmotes = - event.onlyEmotes && - event.numberEmotes > 0 && - event.numberEmotes <= 3; + !event.isRichMessage && bigEmojis.contains(event.body); + return Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: HtmlMessage( diff --git a/lib/pages/chat/events/message_download_content.dart b/lib/pages/chat/events/message_download_content.dart index 46d5167c..1d555567 100644 --- a/lib/pages/chat/events/message_download_content.dart +++ b/lib/pages/chat/events/message_download_content.dart @@ -1,13 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/file_description.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; import 'package:fluffychat/utils/url_launcher.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:matrix/matrix.dart'; class MessageDownloadContent extends StatelessWidget { final Event event; @@ -27,7 +25,7 @@ class MessageDownloadContent extends StatelessWidget { final filetype = (filename.contains('.') ? filename.split('.').last.toUpperCase() : event.content - .tryGetMap('info') + .tryGetMap('info') ?.tryGet('mimetype') ?.toUpperCase() ?? 'UNKNOWN'); diff --git a/lib/pages/chat/events/message_reactions.dart b/lib/pages/chat/events/message_reactions.dart index 5f5b4aa2..2ea76cdd 100644 --- a/lib/pages/chat/events/message_reactions.dart +++ b/lib/pages/chat/events/message_reactions.dart @@ -1,13 +1,11 @@ -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart' show IterableExtension; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class MessageReactions extends StatelessWidget { final Event event; @@ -26,7 +24,7 @@ class MessageReactions extends StatelessWidget { for (final e in allReactionEvents) { final key = e.content - .tryGetMap('m.relates_to') + .tryGetMap('m.relates_to') ?.tryGet('key'); if (key != null) { if (!reactionMap.containsKey(key)) { @@ -66,7 +64,7 @@ class MessageReactions extends StatelessWidget { if (evt != null) { showFutureLoadingDialog( context: context, - future: () => evt.redactEvent(), + future: evt.redactEvent, ); } } else { diff --git a/lib/pages/chat/events/poll.dart b/lib/pages/chat/events/poll.dart index e6baeb7c..db81eb8a 100644 --- a/lib/pages/chat/events/poll.dart +++ b/lib/pages/chat/events/poll.dart @@ -1,15 +1,13 @@ -import 'package:flutter/material.dart'; - import 'package:async/async.dart'; -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:matrix/matrix.dart' hide Result; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:matrix/matrix.dart' hide Result; class PollWidget extends StatelessWidget { final Event event; @@ -25,13 +23,9 @@ class PollWidget extends StatelessWidget { }); void _endPoll(BuildContext context) => - showFutureLoadingDialog(context: context, future: () => event.endPoll()); + showFutureLoadingDialog(context: context, future: event.endPoll); - void _toggleVote( - BuildContext context, - String answerId, - int maxSelection, - ) async { + void _toggleVote(BuildContext context, String answerId, int maxSelection) { final userId = event.room.client.userID!; final answerIds = event.getPollResponses(timeline)[userId] ?? {}; if (!answerIds.remove(answerId)) { diff --git a/lib/pages/chat/events/reply_content.dart b/lib/pages/chat/events/reply_content.dart index 8211e431..31070a31 100644 --- a/lib/pages/chat/events/reply_content.dart +++ b/lib/pages/chat/events/reply_content.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../../config/app_config.dart'; class ReplyContent extends StatelessWidget { diff --git a/lib/pages/chat/events/state_message.dart b/lib/pages/chat/events/state_message.dart index 9c8ad3da..e0dd359a 100644 --- a/lib/pages/chat/events/state_message.dart +++ b/lib/pages/chat/events/state_message.dart @@ -1,12 +1,11 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../../config/app_config.dart'; class StateMessage extends StatelessWidget { diff --git a/lib/pages/chat/events/video_player.dart b/lib/pages/chat/events/video_player.dart index d0593cb4..4330da28 100644 --- a/lib/pages/chat/events/video_player.dart +++ b/lib/pages/chat/events/video_player.dart @@ -1,10 +1,5 @@ import 'dart:math'; -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/file_description.dart'; @@ -13,6 +8,10 @@ import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/blur_hash.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:matrix/matrix.dart'; + import '../../image_viewer/image_viewer.dart'; class EventVideoPlayer extends StatelessWidget { diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart index a6e52549..a8944107 100644 --- a/lib/pages/chat/input_bar.dart +++ b/lib/pages/chat/input_bar.dart @@ -1,15 +1,14 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; -import 'package:matrix/matrix.dart'; -import 'package:slugify/slugify.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/markdown_context_builder.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; +import 'package:slugify/slugify.dart'; + import '../../widgets/avatar.dart'; import '../../widgets/matrix.dart'; import 'command_hints.dart'; @@ -159,7 +158,7 @@ class InputBar extends StatelessWidget { slugify( user.displayName!.toLowerCase(), ).contains(userSearch))) || - user.id.split(':')[0].toLowerCase().contains(userSearch)) { + user.id.localpart!.toLowerCase().contains(userSearch)) { ret.add({ 'type': 'user', 'mxid': user.id, @@ -185,17 +184,14 @@ class InputBar extends StatelessWidget { ((state.content['alias'] is String && state.content .tryGet('alias')! - .split(':')[0] + .localpart! .toLowerCase() .contains(roomSearch)) || (state.content['alt_aliases'] is List && (state.content['alt_aliases'] as List).any( (l) => l is String && - l - .split(':')[0] - .toLowerCase() - .contains(roomSearch), + l.localpart!.toLowerCase().contains(roomSearch), )))) || (r.name.toLowerCase().contains(roomSearch))) { ret.add({ @@ -388,6 +384,7 @@ class InputBar extends StatelessWidget { Widget build(BuildContext context) { final theme = Theme.of(context); return Autocomplete>( + key: Key('chat_input_field'), focusNode: focusNode, textEditingController: controller, optionsBuilder: getSuggestions, @@ -395,7 +392,10 @@ class InputBar extends StatelessWidget { controller: controller, focusNode: focusNode, readOnly: readOnly, - contextMenuBuilder: (c, e) => markdownContextBuilder(c, e, controller), + contextMenuBuilder: (c, e) => MarkdownContextBuilder( + editableTextState: e, + controller: controller, + ), contentInsertionConfiguration: ContentInsertionConfiguration( onContentInserted: (KeyboardInsertedContent content) { final data = content.data; @@ -411,7 +411,7 @@ class InputBar extends StatelessWidget { ), minLines: minLines, maxLines: maxLines, - keyboardType: keyboardType!, + keyboardType: keyboardType, textInputAction: textInputAction, autofocus: autofocus!, inputFormatters: [ diff --git a/lib/pages/chat/jitsi_popup_button.dart b/lib/pages/chat/jitsi_popup_button.dart new file mode 100644 index 00000000..28343fd2 --- /dev/null +++ b/lib/pages/chat/jitsi_popup_button.dart @@ -0,0 +1,175 @@ +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class JitsiPopupButton extends StatelessWidget { + final Room room; + const JitsiPopupButton(this.room, {super.key}); + + Future _startCall(BuildContext context, bool isAudioOnly) async { + final l10n = L10n.of(context); + final urlResult = await showFutureLoadingDialog( + context: context, + future: () async { + final conferenceId = room.client.generateUniqueTransactionId(); + final domain = AppSettings.jitsiDomain.value; + final uri = Uri( + scheme: 'https', + host: domain, + path: conferenceId, + fragment: isAudioOnly ? 'config.startWithVideoMuted=true' : null, + ); + await room.addWidget( + MatrixWidget( + room: room, + name: 'Jitsi Meet', + type: 'jitsi', + url: uri.toString(), + data: { + 'domain': domain, + 'isAudioOnly': isAudioOnly, + 'conferenceId': conferenceId, + 'roomName': room.getLocalizedDisplayname( + MatrixLocals(L10n.of(context)), + ), + }, + ), + ); + return uri; + }, + ); + final url = urlResult.result; + if (url == null) return; + await launchUrl(url); + + if (!context.mounted) return; + final consent = await showOkCancelAlertDialog( + context: context, + title: l10n.removeCallFromChat, + message: l10n.removeCallFromChatDescription, + okLabel: l10n.remove, + ); + + if (consent != OkCancelResult.ok) return; + if (!context.mounted) return; + + await _endAllCalls(context); + } + + Future _endAllCalls(BuildContext context) => showFutureLoadingDialog( + context: context, + future: () async { + final activeJitsiCalls = room.states['im.vector.modular.widgets']?.values + .where((state) => state.content['type'] == 'jitsi'); + if (activeJitsiCalls == null) return; + for (final call in activeJitsiCalls) { + await room.deleteWidget(call.stateKey!); + } + }, + ); + + @override + Widget build(BuildContext context) { + final l10n = L10n.of(context); + final activeJitsiCalls = room.widgets + .where((widget) => widget.type == 'jitsi') + .map((widget) { + final isAudioOnly = widget.data?.tryGet('isAudioOnly') ?? false; + final domain = widget.data?.tryGet('domain'); + final conferenceId = widget.data?.tryGet('conferenceId'); + return ( + isAudioOnly: isAudioOnly, + domain: domain, + conferenceId: conferenceId, + ); + }) + .toList(); + final canEditCalls = room.canChangeStateEvent('im.vector.modular.widgets'); + if (activeJitsiCalls.isEmpty && !canEditCalls) { + return const SizedBox.shrink(); + } + return PopupMenuButton( + itemBuilder: (context) => [ + ...activeJitsiCalls.map( + (call) => PopupMenuItem( + onTap: () => launchUrl( + Uri( + scheme: 'https', + host: call.domain, + path: call.conferenceId, + fragment: call.isAudioOnly + ? 'config.startWithVideoMuted=true' + : null, + ), + ), + child: Row( + mainAxisSize: .min, + children: [ + Icon(call.isAudioOnly ? Icons.add_call : Icons.video_call), + const SizedBox(width: 12), + Text( + call.isAudioOnly ? l10n.joinVoiceCall : l10n.joinVideoCall, + ), + ], + ), + ), + ), + if (canEditCalls) ...[ + if (activeJitsiCalls.isEmpty) ...[ + PopupMenuItem( + onTap: () => _startCall(context, true), + child: Row( + mainAxisSize: .min, + children: [ + const Icon(Icons.add_call), + const SizedBox(width: 12), + Text(l10n.startVoiceCall), + ], + ), + ), + PopupMenuItem( + onTap: () => _startCall(context, false), + child: Row( + mainAxisSize: .min, + children: [ + const Icon(Icons.video_call), + const SizedBox(width: 12), + Text(l10n.startVideoCall), + ], + ), + ), + ] else + PopupMenuItem( + onTap: () => _endAllCalls(context), + child: Row( + mainAxisSize: .min, + children: [ + Icon( + Icons.call_end_outlined, + color: Theme.of(context).colorScheme.error, + ), + const SizedBox(width: 12), + Text( + l10n.removeCallForEveryone, + style: TextStyle( + color: Theme.of(context).colorScheme.error, + ), + ), + ], + ), + ), + ], + ], + icon: Badge( + label: Text(l10n.live), + isLabelVisible: activeJitsiCalls.isNotEmpty, + child: Icon(Icons.video_call_outlined), + ), + ); + } +} diff --git a/lib/pages/chat/pinned_events.dart b/lib/pages/chat/pinned_events.dart index da600a22..e183e918 100644 --- a/lib/pages/chat/pinned_events.dart +++ b/lib/pages/chat/pinned_events.dart @@ -1,15 +1,13 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class PinnedEvents extends StatelessWidget { final ChatController controller; @@ -17,6 +15,7 @@ class PinnedEvents extends StatelessWidget { const PinnedEvents(this.controller, {super.key}); Future _displayPinnedEventsDialog(BuildContext context) async { + final l10n = L10n.of(context); final eventsResult = await showFutureLoadingDialog( context: context, future: () => Future.wait( @@ -27,13 +26,14 @@ class PinnedEvents extends StatelessWidget { ); final events = eventsResult.result; if (events == null) return; + if (!context.mounted) return; final eventId = events.length == 1 ? events.single?.eventId : await showModalActionPopup( context: context, - title: L10n.of(context).pin, - cancelLabel: L10n.of(context).cancel, + title: l10n.pin, + cancelLabel: l10n.cancel, actions: events .map( (event) => AdaptiveModalAction( @@ -41,7 +41,7 @@ class PinnedEvents extends StatelessWidget { icon: const Icon(Icons.push_pin_outlined), label: event?.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)), + MatrixLocals(l10n), withSenderNamePrefix: true, hideReply: true, ) ?? diff --git a/lib/pages/chat/recording_input_row.dart b/lib/pages/chat/recording_input_row.dart index 2a88a784..ff295e88 100644 --- a/lib/pages/chat/recording_input_row.dart +++ b/lib/pages/chat/recording_input_row.dart @@ -1,12 +1,12 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat/chat_input_row.dart'; import 'package:fluffychat/pages/chat/recording_view_model.dart'; +import 'package:flutter/material.dart'; class RecordingInputRow extends StatelessWidget { final RecordingViewModelState state; - final Future Function(String, int, List, String?) onSend; + final Future Function(String, int, List, String) onSend; const RecordingInputRow({ required this.state, required this.onSend, @@ -19,71 +19,89 @@ class RecordingInputRow extends StatelessWidget { const maxDecibalWidth = 36.0; final time = '${state.duration.inMinutes.toString().padLeft(2, '0')}:${(state.duration.inSeconds % 60).toString().padLeft(2, '0')}'; - return Row( - children: [ - IconButton( - tooltip: L10n.of(context).cancel, - icon: const Icon(Icons.delete_outlined), - color: theme.colorScheme.error, - onPressed: state.cancel, - ), - if (state.isPaused) - IconButton( - tooltip: L10n.of(context).resume, - icon: const Icon(Icons.play_circle_outline_outlined), - onPressed: state.resume, - ) - else - IconButton( - tooltip: L10n.of(context).pause, - icon: const Icon(Icons.pause_circle_outline_outlined), - onPressed: state.pause, + return SizedBox( + height: ChatInputRow.height, + child: Row( + crossAxisAlignment: .center, + mainAxisAlignment: .spaceBetween, + children: [ + const SizedBox(width: 8), + Container( + alignment: .center, + width: 48, + child: IconButton( + tooltip: L10n.of(context).cancel, + icon: const Icon(Icons.delete_outlined), + color: theme.colorScheme.error, + onPressed: state.cancel, + ), ), - Text(time), - const SizedBox(width: 8), - Expanded( - child: LayoutBuilder( - builder: (context, constraints) { - const width = 4; - return Row( - mainAxisSize: .min, - mainAxisAlignment: .end, - children: state.amplitudeTimeline.reversed - .take((constraints.maxWidth / (width + 2)).floor()) - .toList() - .reversed - .map( - (amplitude) => Container( - margin: const EdgeInsets.only(left: 2), - width: width.toDouble(), - decoration: BoxDecoration( - color: theme.colorScheme.primary, - borderRadius: BorderRadius.circular(2), + if (state.isPaused) + Container( + alignment: .center, + width: 48, + child: IconButton( + tooltip: L10n.of(context).resume, + icon: const Icon(Icons.play_circle_outline_outlined), + onPressed: state.resume, + ), + ) + else + Container( + alignment: .center, + width: 48, + child: IconButton( + tooltip: L10n.of(context).pause, + icon: const Icon(Icons.pause_circle_outline_outlined), + onPressed: state.pause, + ), + ), + Text(time), + Expanded( + child: LayoutBuilder( + builder: (context, constraints) { + const width = 4; + return Row( + mainAxisSize: .min, + mainAxisAlignment: .end, + children: state.amplitudeTimeline.reversed + .take((constraints.maxWidth / (width + 2)).floor()) + .toList() + .reversed + .map( + (amplitude) => Container( + margin: const EdgeInsets.only(left: 2), + width: width.toDouble(), + decoration: BoxDecoration( + color: theme.colorScheme.primary, + borderRadius: BorderRadius.circular(2), + ), + height: maxDecibalWidth * (amplitude / 100), ), - height: maxDecibalWidth * (amplitude / 100), - ), - ) - .toList(), - ); - }, + ) + .toList(), + ); + }, + ), ), - ), - IconButton( - style: IconButton.styleFrom( - disabledBackgroundColor: theme.bubbleColor.withAlpha(128), - backgroundColor: theme.bubbleColor, - foregroundColor: theme.onBubbleColor, + IconButton( + style: IconButton.styleFrom( + disabledBackgroundColor: theme.bubbleColor.withAlpha(128), + backgroundColor: theme.bubbleColor, + foregroundColor: theme.onBubbleColor, + ), + tooltip: L10n.of(context).sendAudio, + icon: state.isSending + ? const SizedBox.square( + dimension: 24, + child: CircularProgressIndicator.adaptive(), + ) + : const Icon(Icons.send_outlined), + onPressed: state.isSending ? null : () => state.stopAndSend(onSend), ), - tooltip: L10n.of(context).sendAudio, - icon: state.isSending - ? const SizedBox.square( - dimension: 24, - child: CircularProgressIndicator.adaptive(), - ) - : const Icon(Icons.send_outlined), - onPressed: state.isSending ? null : () => state.stopAndSend(onSend), - ), - ], + const SizedBox(width: 4), + ], + ), ); } } diff --git a/lib/pages/chat/recording_view_model.dart b/lib/pages/chat/recording_view_model.dart index 3898c489..e7d85e0d 100644 --- a/lib/pages/chat/recording_view_model.dart +++ b/lib/pages/chat/recording_view_model.dart @@ -1,20 +1,19 @@ import 'dart:async'; +import 'package:device_info_plus/device_info_plus.dart'; +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - -import 'package:device_info_plus/device_info_plus.dart'; import 'package:matrix/matrix.dart'; import 'package:path/path.dart' as path_lib; import 'package:path_provider/path_provider.dart'; import 'package:record/record.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; -import 'package:fluffychat/config/setting_keys.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'events/audio_player.dart'; class RecordingViewModel extends StatefulWidget { @@ -45,6 +44,7 @@ class RecordingViewModelState extends State { room.client.getConfig(); // Preload server file configuration. if (PlatformInfos.isAndroid) { final info = await DeviceInfoPlugin().androidInfo; + if (!mounted) return; if (info.version.sdkInt < 19) { showOkAlertDialog( context: context, @@ -61,18 +61,14 @@ class RecordingViewModelState extends State { setState(() {}); try { - final codec = kIsWeb - // Web seems to create webm instead of ogg when using opus encoder - // which does not play on iOS right now. So we use wav for now: - ? AudioEncoder.wav - // Everywhere else we use opus if supported by the platform: - : !PlatformInfos - .isIOS && // Blocked by https://github.com/llfbandit/record/issues/560 - await audioRecorder.isEncoderSupported(AudioEncoder.opus) + final codec = + !PlatformInfos + .isIOS && // Blocked by https://github.com/llfbandit/record/issues/560 + await audioRecorder.isEncoderSupported(AudioEncoder.opus) ? AudioEncoder.opus : AudioEncoder.aacLc; fileName = - 'recording${DateTime.now().microsecondsSinceEpoch}.${codec.fileExtension}'; + 'voice_message_${DateTime.now().millisecondsSinceEpoch}.${codec.fileExtension}'; String? path; if (!kIsWeb) { final tempDir = await getTemporaryDirectory(); @@ -81,6 +77,7 @@ class RecordingViewModelState extends State { final result = await audioRecorder.hasPermission(); if (result != true) { + if (!mounted) return; showOkAlertDialog( context: context, title: L10n.of(context).oopsSomethingWentWrong, @@ -102,10 +99,12 @@ class RecordingViewModelState extends State { ), path: path ?? '', ); + if (!mounted) return; setState(() => duration = Duration.zero); _subscribe(); } catch (e, s) { Logs().w('Unable to start voice message recording', e, s); + if (!mounted) return; showOkAlertDialog( context: context, title: L10n.of(context).oopsSomethingWentWrong, @@ -149,9 +148,7 @@ class RecordingViewModelState extends State { } void cancel() { - setState(() { - _reset(); - }); + setState(_reset); } void pause() { @@ -170,12 +167,12 @@ class RecordingViewModelState extends State { }); } - void stopAndSend( + Future stopAndSend( Future Function( String path, int duration, List waveform, - String? fileName, + String fileName, ) onSend, ) async { @@ -196,7 +193,7 @@ class RecordingViewModelState extends State { isSending = true; }); try { - await onSend(path, duration.inMilliseconds, waveform, fileName); + await onSend(path, duration.inMilliseconds, waveform, fileName!); } catch (e, s) { Logs().e('Unable to send voice message', e, s); setState(() { diff --git a/lib/pages/chat/reply_display.dart b/lib/pages/chat/reply_display.dart index 3e9fe0c2..1c416e89 100644 --- a/lib/pages/chat/reply_display.dart +++ b/lib/pages/chat/reply_display.dart @@ -1,9 +1,8 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; import 'chat.dart'; import 'events/reply_content.dart'; @@ -35,7 +34,7 @@ class ReplyDisplay extends StatelessWidget { child: controller.replyEvent != null ? ReplyContent( controller.replyEvent!, - timeline: controller.timeline!, + timeline: controller.timeline, ) : _EditContent( controller.editEvent?.getDisplayEvent(controller.timeline!), diff --git a/lib/pages/chat/seen_by_row.dart b/lib/pages/chat/seen_by_row.dart index c55c0736..b791cfb2 100644 --- a/lib/pages/chat/seen_by_row.dart +++ b/lib/pages/chat/seen_by_row.dart @@ -1,71 +1,89 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/utils/room_status_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class SeenByRow extends StatelessWidget { - final ChatController controller; - const SeenByRow(this.controller, {super.key}); + final Event event; + const SeenByRow({super.key, required this.event}); @override Widget build(BuildContext context) { final theme = Theme.of(context); - final seenByUsers = controller.room.getSeenByUsers(controller.timeline!); const maxAvatars = 7; - return Container( - width: double.infinity, - alignment: Alignment.center, - child: AnimatedContainer( - constraints: const BoxConstraints( - maxWidth: FluffyThemes.maxTimelineWidth, - ), - height: seenByUsers.isEmpty ? 0 : 24, - duration: seenByUsers.isEmpty - ? Duration.zero - : FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - alignment: - controller.timeline!.events.isNotEmpty && - controller.timeline!.events.first.senderId == - Matrix.of(context).client.userID - ? Alignment.topRight - : Alignment.topLeft, - padding: const EdgeInsets.only(left: 8, right: 8, bottom: 4), - child: Wrap( - spacing: 4, - children: [ - ...(seenByUsers.length > maxAvatars - ? seenByUsers.sublist(0, maxAvatars) - : seenByUsers) - .map( - (user) => Avatar( - mxContent: user.avatarUrl, - name: user.calcDisplayname(), - size: 16, - ), - ), - if (seenByUsers.length > maxAvatars) - SizedBox( - width: 16, - height: 16, - child: Material( - color: theme.colorScheme.surface, - borderRadius: BorderRadius.circular(32), - child: Center( - child: Text( - '+${seenByUsers.length - maxAvatars}', - style: const TextStyle(fontSize: 9), + return StreamBuilder( + stream: event.room.client.onSync.stream.where( + (syncUpdate) => + syncUpdate.rooms?.join?[event.room.id]?.ephemeral?.any( + (ephemeral) => ephemeral.type == 'm.receipt', + ) ?? + false, + ), + builder: (context, asyncSnapshot) { + final seenByUsers = event.receipts + .map((r) => r.user) + .where( + (user) => + user.id != event.room.client.userID && + user.id != event.senderId, + ) + .toList(); + return Container( + width: double.infinity, + alignment: Alignment.center, + child: AnimatedContainer( + constraints: const BoxConstraints( + maxWidth: FluffyThemes.maxTimelineWidth, + ), + height: seenByUsers.isEmpty ? 0 : 24, + duration: seenByUsers.isEmpty + ? Duration.zero + : FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + alignment: event.senderId == Matrix.of(context).client.userID + ? Alignment.topRight + : Alignment.topLeft, + padding: const EdgeInsets.only( + bottom: 4, + top: 1, + left: 8, + right: 8, + ), + child: Wrap( + spacing: 4, + children: [ + ...(seenByUsers.length > maxAvatars + ? seenByUsers.sublist(0, maxAvatars) + : seenByUsers) + .map( + (user) => Avatar( + mxContent: user.avatarUrl, + name: user.calcDisplayname(), + size: 16, + ), + ), + if (seenByUsers.length > maxAvatars) + SizedBox( + width: 16, + height: 16, + child: Material( + color: theme.colorScheme.surface, + borderRadius: BorderRadius.circular(32), + child: Center( + child: Text( + '+${seenByUsers.length - maxAvatars}', + style: const TextStyle(fontSize: 9), + ), + ), ), ), - ), - ), - ], - ), - ), + ], + ), + ), + ); + }, ); } } diff --git a/lib/pages/chat/send_file_dialog.dart b/lib/pages/chat/send_file_dialog.dart index 57f124b2..0b6d14f3 100644 --- a/lib/pages/chat/send_file_dialog.dart +++ b/lib/pages/chat/send_file_dialog.dart @@ -1,10 +1,5 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - +import 'package:async/async.dart' show Result; import 'package:cross_file/cross_file.dart'; -import 'package:matrix/matrix.dart'; -import 'package:mime/mime.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -14,6 +9,11 @@ import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/size_string.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/dialog_text_field.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart' hide Result; +import 'package:mime/mime.dart'; + import '../../utils/resize_video.dart'; class SendFileDialog extends StatefulWidget { @@ -53,8 +53,9 @@ class SendFileDialogState extends State { } scaffoldMessenger.showLoadingSnackBar(l10n.prepareSendingAttachment); Navigator.of(context, rootNavigator: false).pop(); - final clientConfig = await widget.room.client.getConfig(); - final maxUploadSize = clientConfig.mUploadSize ?? 100 * 1000 * 1000; + final clientConfig = await Result.capture(widget.room.client.getConfig()); + final maxUploadSize = + clientConfig.asValue?.value.mUploadSize ?? 100 * 1000 * 1000; for (final xfile in widget.files) { final MatrixFile file; @@ -145,6 +146,7 @@ class SendFileDialogState extends State { scaffoldMessenger.clearSnackBars(); } catch (e) { scaffoldMessenger.clearSnackBars(); + if (!mounted || !widget.outerContext.mounted) rethrow; final theme = Theme.of(context); scaffoldMessenger.showSnackBar( SnackBar( diff --git a/lib/pages/chat/send_location_dialog.dart b/lib/pages/chat/send_location_dialog.dart index 8efc2cb6..b5cde79e 100644 --- a/lib/pages/chat/send_location_dialog.dart +++ b/lib/pages/chat/send_location_dialog.dart @@ -1,15 +1,13 @@ import 'dart:async'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:geolocator/geolocator.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/events/map_bubble.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:matrix/matrix.dart'; class SendLocationDialog extends StatefulWidget { final Room room; @@ -73,7 +71,7 @@ class SendLocationDialogState extends State { } } - void sendAction() async { + Future sendAction() async { setState(() => isSending = true); final body = 'https://www.openstreetmap.org/?mlat=${position!.latitude}&mlon=${position!.longitude}#map=16/${position!.latitude}/${position!.longitude}'; @@ -83,6 +81,7 @@ class SendLocationDialogState extends State { context: context, future: () => widget.room.sendLocation(body, uri), ); + if (!mounted) return; Navigator.of(context, rootNavigator: false).pop(); } diff --git a/lib/pages/chat/start_poll_bottom_sheet.dart b/lib/pages/chat/start_poll_bottom_sheet.dart index b90dc473..eb054dd7 100644 --- a/lib/pages/chat/start_poll_bottom_sheet.dart +++ b/lib/pages/chat/start_poll_bottom_sheet.dart @@ -1,9 +1,7 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class StartPollBottomSheet extends StatefulWidget { final Room room; @@ -28,7 +26,7 @@ class _StartPollBottomSheetState extends State { String? _txid; - void _createPoll() async { + Future _createPoll() async { try { var id = 0; _txid ??= widget.room.client.generateUniqueTransactionId(); @@ -46,6 +44,7 @@ class _StartPollBottomSheetState extends State { maxSelections: _allowMultipleAnswers ? _answers.length : 1, txid: _txid, ); + if (!mounted) return; Navigator.of(context).pop(); } catch (e, s) { Logs().w('Unable to create poll', e, s); @@ -56,7 +55,7 @@ class _StartPollBottomSheetState extends State { } } - void _updateCanCreate([dynamic _]) { + void _updateCanCreate([_]) { final newCanCreate = _bodyController.text.trim().isNotEmpty && !_answers.any((controller) => controller.text.trim().isEmpty); diff --git a/lib/pages/chat/sticker_picker_dialog.dart b/lib/pages/chat/sticker_picker_dialog.dart index e4c21f46..9ccb3175 100644 --- a/lib/pages/chat/sticker_picker_dialog.dart +++ b/lib/pages/chat/sticker_picker_dialog.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/avatar.dart'; class StickerPickerDialog extends StatefulWidget { diff --git a/lib/pages/chat/typing_indicators.dart b/lib/pages/chat/typing_indicators.dart index 236c30e5..5419bdce 100644 --- a/lib/pages/chat/typing_indicators.dart +++ b/lib/pages/chat/typing_indicators.dart @@ -1,12 +1,11 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; class TypingIndicators extends StatelessWidget { final ChatController controller; diff --git a/lib/pages/chat_access_settings/chat_access_settings_controller.dart b/lib/pages/chat_access_settings/chat_access_settings_controller.dart index 4161099f..1c55f889 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_controller.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_controller.dart @@ -1,8 +1,3 @@ -import 'package:flutter/material.dart' hide Visibility; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_page.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -11,6 +6,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog. import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart' hide Visibility; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class ChatAccessSettings extends StatefulWidget { final String roomId; @@ -78,7 +76,7 @@ class ChatAccessSettingsController extends State { return joinRules.toList(); } - void setJoinRule(JoinRules? newJoinRules) async { + Future setJoinRule(JoinRules? newJoinRules) async { if (newJoinRules == null) return; setState(() { joinRulesLoading = true; @@ -111,7 +109,9 @@ class ChatAccessSettingsController extends State { } } - void setHistoryVisibility(HistoryVisibility? historyVisibility) async { + Future setHistoryVisibility( + HistoryVisibility? historyVisibility, + ) async { if (historyVisibility == null) return; setState(() { historyVisibilityLoading = true; @@ -135,7 +135,7 @@ class ChatAccessSettingsController extends State { } } - void setGuestAccess(GuestAccess? guestAccess) async { + Future setGuestAccess(GuestAccess? guestAccess) async { if (guestAccess == null) return; setState(() { guestAccessLoading = true; @@ -159,7 +159,8 @@ class ChatAccessSettingsController extends State { } } - void updateRoomAction() async { + Future updateRoomAction() async { + final l10n = L10n.of(context); final roomVersion = room .getState(EventTypes.RoomCreate)! .content @@ -170,10 +171,11 @@ class ChatAccessSettingsController extends State { ); final capabilities = capabilitiesResult.result; if (capabilities == null) return; + if (!mounted) return; final newVersion = await showModalActionPopup( context: context, - title: L10n.of(context).replaceRoomWithNewerVersion, - cancelLabel: L10n.of(context).cancel, + title: l10n.replaceRoomWithNewerVersion, + cancelLabel: l10n.cancel, actions: capabilities.mRoomVersions!.available.entries .where((r) => r.key != roomVersion) .map( @@ -185,18 +187,20 @@ class ChatAccessSettingsController extends State { ) .toList(), ); - if (newVersion == null || - OkCancelResult.cancel == - await showOkCancelAlertDialog( - context: context, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).cancel, - title: L10n.of(context).areYouSure, - message: L10n.of(context).roomUpgradeDescription, - isDestructive: true, - )) { + if (newVersion == null) return; + if (!mounted) return; + final confirmUpgrade = await showOkCancelAlertDialog( + context: context, + okLabel: l10n.yes, + cancelLabel: l10n.cancel, + title: l10n.areYouSure, + message: l10n.roomUpgradeDescription, + isDestructive: true, + ); + if (confirmUpgrade == OkCancelResult.cancel) { return; } + if (!mounted) return; final result = await showFutureLoadingDialog( context: context, futureWithProgress: (onProgress) async { @@ -243,6 +247,7 @@ class ChatAccessSettingsController extends State { } Future addAlias() async { + final l10n = L10n.of(context); final domain = room.client.userID?.domain; if (domain == null) { throw Exception('userID or domain is null! This should never happen.'); @@ -250,11 +255,12 @@ class ChatAccessSettingsController extends State { final input = await showTextInputDialog( context: context, - title: L10n.of(context).editRoomAliases, + title: l10n.editRoomAliases, prefixText: '#', suffixText: domain, - hintText: L10n.of(context).alias, + hintText: l10n.alias, ); + if (!mounted) return; final aliasLocalpart = input?.trim(); if (aliasLocalpart == null || aliasLocalpart.isEmpty) return; final alias = '#$aliasLocalpart:$domain'; @@ -264,17 +270,19 @@ class ChatAccessSettingsController extends State { future: () => room.client.setRoomAlias(alias, room.id), ); if (result.error != null) return; + if (!mounted) return; setState(() {}); if (!room.canChangeStateEvent(EventTypes.RoomCanonicalAlias)) return; final canonicalAliasConsent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context).setAsCanonicalAlias, + title: l10n.setAsCanonicalAlias, message: alias, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).no, + okLabel: l10n.yes, + cancelLabel: l10n.no, ); + if (!mounted) return; final altAliases = room @@ -303,7 +311,7 @@ class ChatAccessSettingsController extends State { ); } - void deleteAlias(String alias) async { + Future deleteAlias(String alias) async { await showFutureLoadingDialog( context: context, future: () => room.client.deleteRoomAlias(alias), @@ -311,7 +319,7 @@ class ChatAccessSettingsController extends State { setState(() {}); } - void setChatVisibilityOnDirectory(bool? visibility) async { + Future setChatVisibilityOnDirectory(bool? visibility) async { if (visibility == null) return; setState(() { visibilityLoading = true; diff --git a/lib/pages/chat_access_settings/chat_access_settings_page.dart b/lib/pages/chat_access_settings/chat_access_settings_page.dart index a2f04079..6f659d89 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_page.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_page.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart' hide Visibility; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_controller.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart' hide Visibility; +import 'package:matrix/matrix.dart'; class ChatAccessSettingsPageView extends StatelessWidget { final ChatAccessSettingsController controller; @@ -181,9 +179,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { return const SizedBox.shrink(); } localAddresses.remove(room.canonicalAlias); - localAddresses.removeWhere( - (alias) => altAliases.contains(alias), - ); + localAddresses.removeWhere(altAliases.contains); return Column( mainAxisSize: .min, children: localAddresses diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index 69dda16e..03bb8e61 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -1,10 +1,5 @@ -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_details/chat_details_view.dart'; import 'package:fluffychat/pages/settings/settings.dart'; @@ -15,8 +10,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; - -enum AliasActions { copy, delete, setCanonical } +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:matrix/matrix.dart'; class ChatDetails extends StatefulWidget { final String roomId; @@ -40,70 +36,79 @@ class ChatDetailsController extends State { String? get roomId => widget.roomId; - void setDisplaynameAction() async { + Future setDisplaynameAction() async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final room = Matrix.of(context).client.getRoomById(roomId!)!; final input = await showTextInputDialog( context: context, - title: L10n.of(context).changeTheNameOfTheGroup, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - initialText: room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), + title: l10n.changeTheNameOfTheGroup, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + initialText: room.getLocalizedDisplayname(MatrixLocals(l10n)), ); if (input == null) return; + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, future: () => room.setName(input), ); + if (!mounted) return; if (success.error == null) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).displaynameHasBeenChanged)), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.displaynameHasBeenChanged)), ); } } - void setTopicAction() async { + Future setTopicAction() async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final room = Matrix.of(context).client.getRoomById(roomId!)!; final input = await showTextInputDialog( context: context, - title: L10n.of(context).setChatDescription, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - hintText: L10n.of(context).noChatDescriptionYet, + title: l10n.setChatDescription, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + hintText: l10n.noChatDescriptionYet, initialText: room.topic, minLines: 4, maxLines: 8, ); if (input == null) return; + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, future: () => room.setDescription(input), ); + if (!mounted) return; if (success.error == null) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).chatDescriptionHasBeenChanged)), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.chatDescriptionHasBeenChanged)), ); } } - void setAvatarAction() async { + Future setAvatarAction() async { + final l10n = L10n.of(context); final room = Matrix.of(context).client.getRoomById(roomId!); final actions = [ if (PlatformInfos.isMobile) AdaptiveModalAction( value: AvatarAction.camera, - label: L10n.of(context).openCamera, + label: l10n.openCamera, isDefaultAction: true, icon: const Icon(Icons.camera_alt_outlined), ), AdaptiveModalAction( value: AvatarAction.file, - label: L10n.of(context).openGallery, + label: l10n.openGallery, icon: const Icon(Icons.photo_outlined), ), if (room?.avatar != null) AdaptiveModalAction( value: AvatarAction.remove, - label: L10n.of(context).delete, + label: l10n.delete, isDestructive: true, icon: const Icon(Icons.delete_outlined), ), @@ -112,11 +117,12 @@ class ChatDetailsController extends State { ? actions.single.value : await showModalActionPopup( context: context, - title: L10n.of(context).editRoomAvatar, - cancelLabel: L10n.of(context).cancel, + title: l10n.editRoomAvatar, + cancelLabel: l10n.cancel, actions: actions, ); if (action == null) return; + if (!mounted) return; if (action == AvatarAction.remove) { await showFutureLoadingDialog( context: context, @@ -135,6 +141,7 @@ class ChatDetailsController extends State { if (result == null) return; file = MatrixFile(bytes: await result.readAsBytes(), name: result.path); } else { + if (!mounted) return; final picked = await selectFiles( context, allowMultiple: false, @@ -147,6 +154,7 @@ class ChatDetailsController extends State { name: pickedFile.name, ); } + if (!mounted) return; await showFutureLoadingDialog( context: context, future: () => room!.setAvatar(file), diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart index e17e21a8..4260ca5b 100644 --- a/lib/pages/chat_details/chat_details_view.dart +++ b/lib/pages/chat_details/chat_details_view.dart @@ -1,9 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/pages/chat_details/participant_list_item.dart'; @@ -13,6 +7,11 @@ import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/url_launcher.dart'; import '../../widgets/mxc_image_viewer.dart'; import '../../widgets/qr_code_viewer.dart'; diff --git a/lib/pages/chat_details/participant_list_item.dart b/lib/pages/chat_details/participant_list_item.dart index 04013ce5..2a6ffa89 100644 --- a/lib/pages/chat_details/participant_list_item.dart +++ b/lib/pages/chat_details/participant_list_item.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/avatar.dart'; class ParticipantListItem extends StatelessWidget { @@ -24,7 +23,9 @@ class ParticipantListItem extends StatelessWidget { Membership.leave => L10n.of(context).leftTheChat, }; - final permissionBatch = user.powerLevel >= 100 + final permissionBatch = user.room.creatorUserIds.contains(user.id) + ? L10n.of(context).owner + : user.powerLevel >= 100 ? L10n.of(context).admin : user.powerLevel >= 50 ? L10n.of(context).moderator diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart index 6996d58d..6e17d92f 100644 --- a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart +++ b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart @@ -1,14 +1,13 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/encryption.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings_view.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart'; + import '../key_verification/key_verification_dialog.dart'; class ChatEncryptionSettings extends StatefulWidget { @@ -30,54 +29,58 @@ class ChatEncryptionSettingsController extends State { } } - void enableEncryption(dynamic _) async { + Future enableEncryption(_) async { + final l10n = L10n.of(context); if (room.encrypted) { showOkAlertDialog( context: context, - title: L10n.of(context).sorryThatsNotPossible, - message: L10n.of(context).disableEncryptionWarning, + title: l10n.sorryThatsNotPossible, + message: l10n.disableEncryptionWarning, ); return; } if (room.joinRules == JoinRules.public) { showOkAlertDialog( context: context, - title: L10n.of(context).sorryThatsNotPossible, - message: L10n.of(context).noEncryptionForPublicRooms, + title: l10n.sorryThatsNotPossible, + message: l10n.noEncryptionForPublicRooms, ); return; } if (!room.canChangeStateEvent(EventTypes.Encryption)) { showOkAlertDialog( context: context, - title: L10n.of(context).sorryThatsNotPossible, - message: L10n.of(context).noPermission, + title: l10n.sorryThatsNotPossible, + message: l10n.noPermission, ); return; } final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context).areYouSure, - message: L10n.of(context).enableEncryptionWarning, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).cancel, + title: l10n.areYouSure, + message: l10n.enableEncryptionWarning, + okLabel: l10n.yes, + cancelLabel: l10n.cancel, ); if (consent != OkCancelResult.ok) return; + if (!mounted) return; await showFutureLoadingDialog( context: context, future: () => room.enableEncryption(), ); } - void startVerification() async { + Future startVerification() async { + final l10n = L10n.of(context); final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context).verifyOtherUser, - message: L10n.of(context).verifyOtherUserDescription, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.verifyOtherUser, + message: l10n.verifyOtherUserDescription, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, ); if (consent != OkCancelResult.ok) return; + if (!mounted) return; final req = await room.client.userDeviceKeys[room.directChatMatrixID]! .startVerification(); req.onUpdate = () { @@ -85,6 +88,7 @@ class ChatEncryptionSettingsController extends State { setState(() {}); } }; + if (!mounted) return; await KeyVerificationDialog(request: req).show(context); } diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart index 03309d17..5ed1eb3c 100644 --- a/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart +++ b/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart @@ -1,16 +1,14 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart'; import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class ChatEncryptionSettingsView extends StatelessWidget { final ChatEncryptionSettingsController controller; diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 01e3e009..9ac99e30 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -1,16 +1,8 @@ import 'dart:async'; +import 'dart:developer'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -import 'package:app_links/app_links.dart'; import 'package:cross_file/cross_file.dart'; -import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart' as sdk; -import 'package:matrix/matrix.dart'; -import 'package:receive_sharing_intent/receive_sharing_intent.dart'; - +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -24,20 +16,20 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart' import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/share_scaffold_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart' as sdk; +import 'package:matrix/matrix.dart'; +import 'package:receive_sharing_intent/receive_sharing_intent.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + import '../../../utils/account_bundles.dart'; import '../../config/setting_keys.dart'; import '../../utils/url_launcher.dart'; import '../../widgets/matrix.dart'; -enum PopupMenuAction { - settings, - invite, - newGroup, - newSpace, - setStatus, - archive, -} - enum ActiveFilter { allChats, messages, groups, unread, spaces } extension LocalizedActiveFilter on ActiveFilter { @@ -80,14 +72,12 @@ class ChatListController extends State StreamSubscription? _intentFileStreamSubscription; - StreamSubscription? _intentUriStreamSubscription; - late ActiveFilter activeFilter; String? _activeSpaceId; String? get activeSpaceId => _activeSpaceId; - void setActiveSpace(String spaceId) async { + Future setActiveSpace(String spaceId) async { await Matrix.of(context).client.getRoomById(spaceId)!.postLoad(); setState(() { @@ -99,7 +89,9 @@ class ChatListController extends State _activeSpaceId = null; }); - void onChatTap(Room room) async { + Future onChatTap(Room room) async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); if (room.membership == Membership.invite) { final joinResult = await showFutureLoadingDialog( context: context, @@ -115,10 +107,11 @@ class ChatListController extends State ); if (joinResult.error != null) return; } + if (!mounted) return; if (room.membership == Membership.ban) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).youHaveBeenBannedFromThisChat)), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.youHaveBeenBannedFromThisChat)), ); return; } @@ -165,24 +158,26 @@ class ChatListController extends State bool isSearching = false; static const String _serverStoreNamespace = 'im.fluffychat.search.server'; - void setServer() async { + Future setServer() async { + final matrix = Matrix.of(context); + final l10n = L10n.of(context); final newServer = await showTextInputDialog( useRootNavigator: false, - title: L10n.of(context).changeTheHomeserver, + title: l10n.changeTheHomeserver, context: context, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, prefixText: 'https://', - hintText: Matrix.of(context).client.homeserver?.host, + hintText: matrix.client.homeserver?.host, initialText: searchServer, keyboardType: TextInputType.url, autocorrect: false, - validator: (server) => server.contains('.') == true - ? null - : L10n.of(context).invalidServerName, + validator: (server) => + server.contains('.') == true ? null : l10n.invalidServerName, ); if (newServer == null) return; - Matrix.of(context).store.setString(_serverStoreNamespace, newServer); + if (!mounted) return; + matrix.store.setString(_serverStoreNamespace, newServer); setState(() { searchServer = newServer; }); @@ -193,8 +188,9 @@ class ChatListController extends State final TextEditingController searchController = TextEditingController(); final FocusNode searchFocusNode = FocusNode(); - void _search() async { + Future _search() async { final client = Matrix.of(context).client; + final scaffoldMessenger = ScaffoldMessenger.of(context); if (!isSearching) { setState(() { isSearching = true; @@ -237,9 +233,10 @@ class ChatListController extends State ); } catch (e, s) { Logs().w('Searching has crashed', e, s); - ScaffoldMessenger.of( - context, - ).showSnackBar(SnackBar(content: Text(e.toLocalizedString(context)))); + if (!mounted) return; + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(e.toLocalizedString(context))), + ); } if (!isSearchMode) return; setState(() { @@ -301,11 +298,10 @@ class ChatListController extends State } } - void editSpace(BuildContext context, String spaceId) async { + Future editSpace(BuildContext context, String spaceId) async { await Matrix.of(context).client.getRoomById(spaceId)!.postLoad(); - if (mounted) { - context.push('/rooms/$spaceId/details'); - } + if (!context.mounted) return; + context.push('/rooms/$spaceId/details'); } // Needs to match GroupsSpacesEntry for 'separate group' checking. @@ -316,6 +312,10 @@ class ChatListController extends State void _processIncomingSharedMedia(List files) { if (files.isEmpty) return; + inspect(files); + if (files.singleOrNull?.path.startsWith(AppConfig.deepLinkPrefix) == true) { + return; + } showScaffoldDialog( context: context, @@ -335,14 +335,6 @@ class ChatListController extends State ); } - void _processIncomingUris(Uri? uri) async { - if (uri == null) return; - context.go('/rooms'); - WidgetsBinding.instance.addPostFrameCallback((_) { - UrlLauncher(context, uri.toString()).openMatrixToUrl(); - }); - } - void _initReceiveSharingIntent() { if (!PlatformInfos.isMobile) return; @@ -356,11 +348,6 @@ class ChatListController extends State _processIncomingSharedMedia, ); - // For receiving shared Uris - _intentUriStreamSubscription = AppLinks().uriLinkStream.listen( - _processIncomingUris, - ); - if (PlatformInfos.isAndroid) { final shortcuts = FlutterShortcuts(); shortcuts.initialize().then( @@ -381,8 +368,9 @@ class ChatListController extends State scrollController.addListener(_onScroll); _waitForFirstSync(); _hackyWebRTCFixForWeb(); - WidgetsBinding.instance.addPostFrameCallback((_) async { + WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { + _showLastSeenSupportBanner(); searchServer = Matrix.of( context, ).store.getString(_serverStoreNamespace); @@ -403,12 +391,87 @@ class ChatListController extends State void dispose() { _intentDataStreamSubscription?.cancel(); _intentFileStreamSubscription?.cancel(); - _intentUriStreamSubscription?.cancel(); scrollController.removeListener(_onScroll); super.dispose(); } - void chatContextAction( + Future _showLastSeenSupportBanner() async { + if (AppSettings.supportBannerOptOut.value) return; + + if (AppSettings.lastSeenSupportBanner.value == 0) { + await AppSettings.lastSeenSupportBanner.setItem( + DateTime.now().millisecondsSinceEpoch, + ); + return; + } + + final lastSeenSupportBanner = DateTime.fromMillisecondsSinceEpoch( + AppSettings.lastSeenSupportBanner.value, + ); + + if (DateTime.now().difference(lastSeenSupportBanner) >= + Duration(days: 6 * 7)) { + final theme = Theme.of(context); + final messenger = ScaffoldMessenger.of(context); + messenger.showMaterialBanner( + MaterialBanner( + backgroundColor: theme.colorScheme.errorContainer, + leading: CloseButton( + color: theme.colorScheme.onErrorContainer, + onPressed: () async { + final okCancelResult = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context).skipSupportingFluffyChat, + message: L10n.of(context).fluffyChatSupportBannerMessage, + okLabel: L10n.of(context).iDoNotWantToSupport, + cancelLabel: L10n.of(context).iAlreadySupportFluffyChat, + isDestructive: true, + ); + switch (okCancelResult) { + case null: + return; + case OkCancelResult.ok: + messenger.clearMaterialBanners(); + return; + case OkCancelResult.cancel: + messenger.clearMaterialBanners(); + await AppSettings.supportBannerOptOut.setItem(true); + return; + } + }, + ), + content: Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Text( + L10n.of(context).fluffyChatSupportBannerMessage, + style: TextStyle(color: theme.colorScheme.onErrorContainer), + ), + ), + actions: [ + TextButton( + onPressed: () { + messenger.clearMaterialBanners(); + launchUrlString( + 'https://fluffychat.im/faq/#how_can_i_support_fluffychat', + ); + }, + child: Text( + L10n.of(context).support, + style: TextStyle(color: theme.colorScheme.onErrorContainer), + ), + ), + ], + ), + ); + await AppSettings.lastSeenSupportBanner.setItem( + DateTime.now().millisecondsSinceEpoch, + ); + } + + return; + } + + Future chatContextAction( Room room, BuildContext posContext, [ Room? space, @@ -449,25 +512,16 @@ class ChatListController extends State PopupMenuItem( value: ChatContextAction.open, child: Row( - mainAxisSize: .min, spacing: 12.0, children: [ - Avatar(mxContent: room.avatar, name: displayname), + Avatar(mxContent: room.avatar, name: displayname, size: 24), ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 128), - child: Text( - displayname, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface, - ), - maxLines: 2, - overflow: TextOverflow.ellipsis, - ), + constraints: const BoxConstraints(maxWidth: 200), + child: Text(displayname, maxLines: 1, overflow: .ellipsis), ), ], ), ), - const PopupMenuDivider(), if (space != null) PopupMenuItem( value: ChatContextAction.goToSpace, @@ -527,23 +581,44 @@ class ChatListController extends State ], ), ), - PopupMenuItem( - value: ChatContextAction.favorite, - child: Row( - mainAxisSize: .min, - children: [ - Icon( - room.isFavourite ? Icons.push_pin : Icons.push_pin_outlined, - ), - const SizedBox(width: 12), - Text( - room.isFavourite - ? L10n.of(context).unpin - : L10n.of(context).pin, - ), - ], + if (!room.isLowPriority) + PopupMenuItem( + value: ChatContextAction.favorite, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + room.isFavourite ? Icons.push_pin : Icons.push_pin_outlined, + ), + const SizedBox(width: 12), + Text( + room.isFavourite + ? L10n.of(context).unpin + : L10n.of(context).pin, + ), + ], + ), + ), + if (!room.isFavourite) + PopupMenuItem( + value: ChatContextAction.lowPriority, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + room.isLowPriority + ? Icons.low_priority + : Icons.low_priority_outlined, + ), + const SizedBox(width: 12), + Text( + room.isLowPriority + ? L10n.of(context).unsetLowPriority + : L10n.of(context).setLowPriority, + ), + ], + ), ), - ), if (spacesWithPowerLevels.isNotEmpty) PopupMenuItem( value: ChatContextAction.addToSpace, @@ -673,14 +748,21 @@ class ChatListController extends State .toList(), ); if (space == null) return; + if (!mounted) return; await showFutureLoadingDialog( context: context, future: () => space.setSpaceChild(room.id), ); + case ChatContextAction.lowPriority: + await showFutureLoadingDialog( + context: context, + future: () => room.setLowPriority(!room.isLowPriority), + ); + return; } } - void dismissStatusList() async { + Future dismissStatusList() async { final result = await showOkCancelAlertDialog( title: L10n.of(context).hidePresences, context: context, @@ -691,17 +773,19 @@ class ChatListController extends State } } - void setStatus() async { + Future setStatus() async { + final l10n = L10n.of(context); final client = Matrix.of(context).client; final currentPresence = await client.fetchCurrentPresence(client.userID!); + if (!mounted) return; final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).setStatus, - message: L10n.of(context).leaveEmptyToClearStatus, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - hintText: L10n.of(context).statusExampleMessage, + title: l10n.setStatus, + message: l10n.leaveEmptyToClearStatus, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + hintText: l10n.statusExampleMessage, maxLines: 6, minLines: 1, maxLength: 255, @@ -802,7 +886,10 @@ class ChatListController extends State }); } - void editBundlesForAccount(String? userId, String? activeBundle) async { + Future editBundlesForAccount( + String? userId, + String? activeBundle, + ) async { final l10n = L10n.of(context); final client = Matrix.of( context, @@ -826,18 +913,21 @@ class ChatListController extends State if (action == null) return; switch (action) { case EditBundleAction.addToBundle: + if (!mounted) return; final bundle = await showTextInputDialog( context: context, title: l10n.bundleName, hintText: l10n.bundleName, ); if (bundle == null || bundle.isEmpty || bundle.isEmpty) return; + if (!mounted) return; await showFutureLoadingDialog( context: context, future: () => client.setAccountBundle(bundle), ); break; case EditBundleAction.removeFromBundle: + if (!mounted) return; await showFutureLoadingDialog( context: context, future: () => client.removeFromAccountBundle(activeBundle!), @@ -879,12 +969,11 @@ class ChatListController extends State enum EditBundleAction { addToBundle, removeFromBundle } -enum InviteActions { accept, decline, block } - enum ChatContextAction { open, goToSpace, favorite, + lowPriority, markUnread, mute, leave, diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index 63e8dee2..8489128f 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -1,8 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; @@ -14,6 +9,10 @@ import 'package:fluffychat/pages/chat_list/status_msg_list.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/public_room_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; import '../../widgets/adaptive_dialogs/user_dialog.dart'; import '../../widgets/matrix.dart'; @@ -35,7 +34,7 @@ class ChatListViewBody extends StatelessWidget { key: ValueKey(activeSpace), spaceId: activeSpace, onBack: controller.clearActiveSpace, - onChatTab: (room) => controller.onChatTap(room), + onChatTab: controller.onChatTap, activeChat: controller.activeChat, ); } @@ -123,7 +122,7 @@ class ChatListViewBody extends StatelessWidget { if (!controller.isSearchMode && AppSettings.showPresences.value) GestureDetector( - onLongPress: () => controller.dismissStatusList(), + onLongPress: controller.dismissStatusList, child: StatusMessageList( onStatusEdit: controller.setStatus, ), @@ -132,17 +131,14 @@ class ChatListViewBody extends StatelessWidget { SizedBox( height: 64, child: ListView( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 12.0, - ), + padding: const EdgeInsets.all(12.0), shrinkWrap: true, scrollDirection: Axis.horizontal, children: [ ActiveFilter.allChats, - if (spaceDelegateCandidates.isNotEmpty && + if (spaces.isNotEmpty && !AppSettings .displayNavigationRail .value && diff --git a/lib/pages/chat_list/chat_list_header.dart b/lib/pages/chat_list/chat_list_header.dart index b1b876fd..adf695a1 100644 --- a/lib/pages/chat_list/chat_list_header.dart +++ b/lib/pages/chat_list/chat_list_header.dart @@ -1,12 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/client_chooser_button.dart'; import 'package:fluffychat/utils/sync_status_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { @@ -59,9 +58,7 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { ? L10n.of(context).searchChatsRooms : status.calcLocalizedString(context), hintStyle: TextStyle( - color: status.error != null - ? Colors.orange - : theme.colorScheme.onPrimaryContainer, + color: theme.colorScheme.onPrimaryContainer, fontWeight: FontWeight.normal, ), prefixIcon: hide @@ -87,11 +84,6 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { child: CircularProgressIndicator.adaptive( strokeWidth: 2, value: status.progress, - valueColor: status.error != null - ? const AlwaysStoppedAnimation( - Colors.orange, - ) - : null, ), ), ), diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart index fc9499cc..3cc410e8 100644 --- a/lib/pages/chat_list/chat_list_item.dart +++ b/lib/pages/chat_list/chat_list_item.dart @@ -1,7 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/unread_bubble.dart'; @@ -10,12 +6,13 @@ import 'package:fluffychat/utils/room_status_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; import '../../utils/date_time_extension.dart'; import '../../widgets/avatar.dart'; -enum ArchivedRoomAction { delete, rejoin } - class ChatListItem extends StatelessWidget { final Room room; final Room? space; @@ -44,7 +41,6 @@ class ChatListItem extends StatelessWidget { final typingText = room.getLocalizedTypingText(context); final lastEvent = room.lastEvent; final ownMessage = lastEvent?.senderId == room.client.userID; - final unread = room.isUnread; final directChatMatrixId = room.directChatMatrixID; final isDirectChat = directChatMatrixId != null; final hasNotifications = room.notificationCount > 0; @@ -59,9 +55,9 @@ class ChatListItem extends StatelessWidget { return const SizedBox.shrink(); } - final needLastEventSender = lastEvent == null - ? false - : room.getState(EventTypes.RoomMember, lastEvent.senderId) == null; + final needLastEventSender = + lastEvent != null && + room.getState(EventTypes.RoomMember, lastEvent.senderId) == null; final space = this.space; return Padding( @@ -92,14 +88,19 @@ class ChatListItem extends StatelessWidget { top: 0, left: 0, child: Avatar( - border: BorderSide( - width: 2, - color: - backgroundColor ?? - theme.colorScheme.surface, + shapeBorder: RoundedSuperellipseBorder( + side: BorderSide( + width: 2, + color: + backgroundColor ?? + theme.colorScheme.surface, + ), + borderRadius: BorderRadius.circular( + AppConfig.spaceBorderRadius * 0.75, + ), ), borderRadius: BorderRadius.circular( - AppConfig.borderRadius / 4, + AppConfig.spaceBorderRadius * 0.75, ), mxContent: space.avatar, size: Avatar.defaultSize * 0.75, @@ -111,22 +112,32 @@ class ChatListItem extends StatelessWidget { bottom: 0, right: 0, child: Avatar( - border: space == null + shapeBorder: space == null ? room.isSpace - ? BorderSide( - width: 1, - color: theme.dividerColor, + ? RoundedSuperellipseBorder( + side: BorderSide( + width: 1, + color: theme.dividerColor, + ), + borderRadius: BorderRadius.circular( + AppConfig.spaceBorderRadius, + ), ) : null - : BorderSide( - width: 2, - color: - backgroundColor ?? - theme.colorScheme.surface, + : RoundedRectangleBorder( + side: BorderSide( + width: 2, + color: + backgroundColor ?? + theme.colorScheme.surface, + ), + borderRadius: BorderRadius.circular( + Avatar.defaultSize, + ), ), borderRadius: room.isSpace ? BorderRadius.circular( - AppConfig.borderRadius / 4, + AppConfig.spaceBorderRadius, ) : null, mxContent: room.avatar, @@ -172,11 +183,6 @@ class ChatListItem extends StatelessWidget { maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: false, - style: TextStyle( - fontWeight: unread || room.hasNewMessages - ? FontWeight.w500 - : null, - ), ), ), if (isMuted) @@ -184,6 +190,17 @@ class ChatListItem extends StatelessWidget { padding: EdgeInsets.only(left: 4.0), child: Icon(Icons.notifications_off_outlined, size: 16), ), + if (room.isLowPriority) + Padding( + padding: EdgeInsets.only( + right: hasNotifications ? 4.0 : 0.0, + ), + child: Icon( + Icons.low_priority, + size: 16, + color: theme.colorScheme.primary, + ), + ), if (room.isFavourite) Padding( padding: EdgeInsets.only( @@ -202,10 +219,7 @@ class ChatListItem extends StatelessWidget { room.latestEventReceivedTime.localizedTimeShort( context, ), - style: TextStyle( - fontSize: 12, - color: theme.colorScheme.outline, - ), + style: TextStyle(fontSize: 11), ), ), ], @@ -263,10 +277,7 @@ class ChatListItem extends StatelessWidget { const SizedBox(width: 4), Text( L10n.of(context).thread, - style: TextStyle( - fontSize: 12, - color: theme.colorScheme.outline, - ), + style: TextStyle(fontSize: 11), ), ], ), @@ -279,7 +290,6 @@ class ChatListItem extends StatelessWidget { L10n.of( context, ).countChats(room.spaceChildren.length), - style: TextStyle(color: theme.colorScheme.outline), ) : typingText.isNotEmpty ? Text( @@ -334,9 +344,6 @@ class ChatListItem extends StatelessWidget { maxLines: room.notificationCount >= 1 ? 2 : 1, overflow: TextOverflow.ellipsis, style: TextStyle( - color: unread || room.hasNewMessages - ? theme.colorScheme.onSurface - : theme.colorScheme.outline, decoration: room.lastEvent?.redacted == true ? TextDecoration.lineThrough : null, diff --git a/lib/pages/chat_list/chat_list_view.dart b/lib/pages/chat_list/chat_list_view.dart index 36a4f67b..09d85ef5 100644 --- a/lib/pages/chat_list/chat_list_view.dart +++ b/lib/pages/chat_list/chat_list_view.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; +import 'package:fluffychat/pages/chat_list/start_chat_fab.dart'; import 'package:fluffychat/widgets/navigation_rail.dart'; +import 'package:flutter/material.dart'; + import 'chat_list_body.dart'; class ChatListView extends StatelessWidget { @@ -48,15 +46,10 @@ class ChatListView extends StatelessWidget { child: Scaffold( body: ChatListViewBody(controller), floatingActionButton: - !controller.isSearchMode && controller.activeSpaceId == null - ? FloatingActionButton.extended( - onPressed: () => context.go('/rooms/newprivatechat'), - icon: const Icon(Icons.add_outlined), - label: Text( - L10n.of(context).chat, - overflow: TextOverflow.fade, - ), - ) + !controller.isSearchMode && + controller.activeSpaceId == null && + !FluffyThemes.isColumnMode(context) + ? StartChatFab() : const SizedBox.shrink(), ), ), diff --git a/lib/pages/chat_list/client_chooser_button.dart b/lib/pages/chat_list/client_chooser_button.dart index 50c9f4a7..3e6a4110 100644 --- a/lib/pages/chat_list/client_chooser_button.dart +++ b/lib/pages/chat_list/client_chooser_button.dart @@ -1,15 +1,13 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + import '../../utils/fluffy_share.dart'; import 'chat_list.dart'; @@ -69,17 +67,6 @@ class ClientChooserButton extends StatelessWidget { ], ), ), - if (Matrix.of(context).backgroundPush?.firebaseEnabled != true) - PopupMenuItem( - value: SettingsAction.support, - child: Row( - children: [ - const Icon(Icons.favorite, color: Colors.red), - const SizedBox(width: 18), - Text(L10n.of(context).donate), - ], - ), - ), PopupMenuItem( value: SettingsAction.settings, child: Row( @@ -90,6 +77,16 @@ class ClientChooserButton extends StatelessWidget { ], ), ), + PopupMenuItem( + value: SettingsAction.support, + child: Row( + children: [ + Icon(Icons.favorite, color: Colors.red), + const SizedBox(width: 18), + Text(L10n.of(context).supportFluffyChat), + ], + ), + ), const PopupMenuDivider(), for (final bundle in bundles) ...[ if (matrix.accountBundles[bundle]!.length != 1 || @@ -176,6 +173,8 @@ class ClientChooserButton extends StatelessWidget { borderRadius: BorderRadius.circular(99), color: Colors.transparent, child: PopupMenuButton( + key: Key('accounts_and_settings_buttons'), + tooltip: 'Accounts and settings', popUpAnimationStyle: FluffyThemes.isColumnMode(context) ? AnimationStyle.noAnimation : null, // https://github.com/flutter/flutter/issues/167180 @@ -194,7 +193,7 @@ class ClientChooserButton extends StatelessWidget { ); } - void _clientSelected(Object object, BuildContext context) async { + Future _clientSelected(Object object, BuildContext context) async { if (object is Client) { controller.setActiveClient(object); } else if (object is String) { @@ -210,6 +209,7 @@ class ClientChooserButton extends StatelessWidget { cancelLabel: L10n.of(context).cancel, ); if (consent != OkCancelResult.ok) return; + if (!context.mounted) return; context.go('/rooms/settings/addaccount'); break; case SettingsAction.newGroup: @@ -219,7 +219,9 @@ class ClientChooserButton extends StatelessWidget { FluffyShare.shareInviteLink(context); break; case SettingsAction.support: - launchUrlString(AppConfig.donationUrl); + launchUrlString( + 'https://fluffychat.im/faq/#how_can_i_support_fluffychat', + ); break; case SettingsAction.settings: context.go('/rooms/settings'); diff --git a/lib/pages/chat_list/navi_rail_item.dart b/lib/pages/chat_list/navi_rail_item.dart index b0c50a92..b9feba5d 100644 --- a/lib/pages/chat_list/navi_rail_item.dart +++ b/lib/pages/chat_list/navi_rail_item.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/unread_rooms_badge.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; class NaviRailItem extends StatelessWidget { diff --git a/lib/pages/chat_list/search_title.dart b/lib/pages/chat_list/search_title.dart index 95bb5364..5f9b2f84 100644 --- a/lib/pages/chat_list/search_title.dart +++ b/lib/pages/chat_list/search_title.dart @@ -52,7 +52,7 @@ class SearchTitle extends StatelessWidget { Expanded( child: Align( alignment: Alignment.centerRight, - child: trailing!, + child: trailing, ), ), ], diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 0295069a..bc4804ac 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -1,32 +1,32 @@ +import 'dart:async'; import 'dart:convert'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart' as sdk; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/unread_bubble.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/utils/string_color.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/public_room_dialog.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart' as sdk; +import 'package:matrix/matrix.dart'; -enum AddRoomType { chat, subspace } - -enum SpaceChildAction { edit, moveToSpace, removeFromSpace } +enum SpaceChildAction { + mute, + unmute, + markAsUnread, + markAsRead, + removeFromSpace, + leave, +} enum SpaceActions { settings, invite, members, leave } @@ -55,13 +55,30 @@ class _SpaceViewState extends State { bool _noMoreRooms = false; bool _isLoading = false; + StreamSubscription? _childStateSub; + @override void initState() { _loadHierarchy(); + _childStateSub = Matrix.of(context).client.onSync.stream + .where( + (syncUpdate) => + syncUpdate.rooms?.join?[widget.spaceId]?.timeline?.events?.any( + (event) => event.type == EventTypes.SpaceChild, + ) ?? + false, + ) + .listen(_loadHierarchy); super.initState(); } - void _loadHierarchy() async { + @override + void dispose() { + _childStateSub?.cancel(); + super.dispose(); + } + + Future _loadHierarchy([_]) async { final matrix = Matrix.of(context); final room = matrix.client.getRoomById(widget.spaceId); if (room == null) return; @@ -128,38 +145,42 @@ class _SpaceViewState extends State { } } - void _joinChildRoom(SpaceRoomsChunk$2 item) async { + Future _joinChildRoom(SpaceRoomsChunk$2 item) async { final client = Matrix.of(context).client; final space = client.getRoomById(widget.spaceId); - - final joined = await showAdaptiveDialog( + final via = space?.spaceChildren + .firstWhereOrNull((child) => child.roomId == item.roomId) + ?.via; + final roomResult = await showFutureLoadingDialog( context: context, - builder: (_) => PublicRoomDialog( - chunk: item, - via: space?.spaceChildren - .firstWhereOrNull((child) => child.roomId == item.roomId) - ?.via, - ), + future: () async { + final waitForRoom = client.waitForRoomInSync(item.roomId, join: true); + await client.joinRoom(item.roomId, via: via); + await waitForRoom; + return client.getRoomById(item.roomId)!; + }, ); - if (mounted && joined == true) { - setState(() {}); - } + final room = roomResult.result; + if (room != null) widget.onChatTab(room); } - void _onSpaceAction(SpaceActions action) async { + Future _onSpaceAction(SpaceActions action) async { final space = Matrix.of(context).client.getRoomById(widget.spaceId); switch (action) { case SpaceActions.settings: await space?.postLoad(); + if (!mounted) return; context.push('/rooms/${widget.spaceId}/details'); break; case SpaceActions.invite: await space?.postLoad(); + if (!mounted) return; context.push('/rooms/${widget.spaceId}/invite'); break; case SpaceActions.members: await space?.postLoad(); + if (!mounted) return; context.push('/rooms/${widget.spaceId}/details/members'); break; case SpaceActions.leave: @@ -184,84 +205,14 @@ class _SpaceViewState extends State { } } - void _addChatOrSubspace(AddRoomType roomType) async { - final names = await showTextInputDialog( - context: context, - title: roomType == AddRoomType.subspace - ? L10n.of(context).newSubSpace - : L10n.of(context).createGroup, - hintText: roomType == AddRoomType.subspace - ? L10n.of(context).spaceName - : L10n.of(context).groupName, - minLines: 1, - maxLines: 1, - maxLength: 64, - validator: (text) { - if (text.isEmpty) { - return L10n.of(context).pleaseChoose; - } - return null; - }, - okLabel: L10n.of(context).create, - cancelLabel: L10n.of(context).cancel, - ); - if (names == null) return; + Future _showSpaceChildEditMenu( + BuildContext posContext, + String roomId, + ) async { final client = Matrix.of(context).client; - final result = await showFutureLoadingDialog( - context: context, - future: () async { - late final String roomId; - final activeSpace = client.getRoomById(widget.spaceId)!; - await activeSpace.postLoad(); - final isPublicSpace = activeSpace.joinRules == JoinRules.public; - - if (roomType == AddRoomType.subspace) { - roomId = await client.createSpace( - name: names, - visibility: isPublicSpace - ? sdk.Visibility.public - : sdk.Visibility.private, - ); - } else { - roomId = await client.createGroupChat( - enableEncryption: !isPublicSpace, - groupName: names, - preset: isPublicSpace - ? CreateRoomPreset.publicChat - : CreateRoomPreset.privateChat, - visibility: isPublicSpace - ? sdk.Visibility.public - : sdk.Visibility.private, - initialState: isPublicSpace - ? null - : [ - StateEvent( - content: { - 'join_rule': 'restricted', - 'allow': [ - { - 'room_id': widget.spaceId, - 'type': 'm.room_membership', - }, - ], - }, - type: EventTypes.RoomJoinRules, - ), - ], - ); - } - await activeSpace.setSpaceChild(roomId); - }, - ); - if (result.error != null) return; - setState(() { - _nextBatch = null; - _discoveredChildren.clear(); - }); - _loadHierarchy(); - } - - void _showSpaceChildEditMenu(BuildContext posContext, String roomId) async { + final space = client.getRoomById(widget.spaceId); + final room = client.getRoomById(roomId); + if (space == null) return; final overlay = Overlay.of(posContext).context.findRenderObject() as RenderBox; @@ -282,85 +233,94 @@ class _SpaceViewState extends State { context: posContext, position: position, items: [ - PopupMenuItem( - value: SpaceChildAction.moveToSpace, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.move_down_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).moveToDifferentSpace), - ], + if (room != null && room.membership == Membership.join) ...[ + PopupMenuItem( + value: room.pushRuleState == PushRuleState.notify + ? SpaceChildAction.mute + : SpaceChildAction.unmute, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + room.pushRuleState == PushRuleState.notify + ? Icons.notifications_off_outlined + : Icons.notifications_on_outlined, + ), + const SizedBox(width: 12), + Text( + room.pushRuleState == PushRuleState.notify + ? L10n.of(context).muteChat + : L10n.of(context).unmuteChat, + ), + ], + ), ), - ), - PopupMenuItem( - value: SpaceChildAction.edit, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.edit_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).edit), - ], + PopupMenuItem( + value: room.markedUnread + ? SpaceChildAction.markAsRead + : SpaceChildAction.markAsUnread, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + room.markedUnread + ? Icons.mark_as_unread + : Icons.mark_as_unread_outlined, + ), + const SizedBox(width: 12), + Text( + room.isUnread + ? L10n.of(context).markAsRead + : L10n.of(context).markAsUnread, + ), + ], + ), ), - ), - PopupMenuItem( - value: SpaceChildAction.removeFromSpace, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.group_remove_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).removeFromSpace), - ], + PopupMenuItem( + value: SpaceChildAction.leave, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + Icons.delete_outlined, + color: Theme.of(context).colorScheme.onErrorContainer, + ), + const SizedBox(width: 12), + Text( + L10n.of(context).leave, + style: TextStyle( + color: Theme.of(context).colorScheme.onErrorContainer, + ), + ), + ], + ), + ), + ], + if (space.canChangeStateEvent(EventTypes.SpaceChild) == true) + PopupMenuItem( + value: SpaceChildAction.removeFromSpace, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + Icons.remove, + color: Theme.of(context).colorScheme.onErrorContainer, + ), + const SizedBox(width: 12), + Text( + L10n.of(context).removeFromSpace, + style: TextStyle( + color: Theme.of(context).colorScheme.onErrorContainer, + ), + ), + ], + ), ), - ), ], ); if (action == null) return; if (!mounted) return; - final space = Matrix.of(context).client.getRoomById(widget.spaceId); - if (space == null) return; switch (action) { - case SpaceChildAction.edit: - context.push('/rooms/${widget.spaceId}/details'); - case SpaceChildAction.moveToSpace: - final spacesWithPowerLevels = space.client.rooms - .where( - (room) => - room.isSpace && - room.canChangeStateEvent(EventTypes.SpaceChild) && - room.id != widget.spaceId, - ) - .toList(); - final newSpace = await showModalActionPopup( - context: context, - title: L10n.of(context).space, - actions: spacesWithPowerLevels - .map( - (space) => AdaptiveModalAction( - value: space, - label: space.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)), - ), - ), - ) - .toList(), - ); - if (newSpace == null) return; - final result = await showFutureLoadingDialog( - context: context, - future: () async { - await newSpace.setSpaceChild(newSpace.id); - await space.removeSpaceChild(roomId); - }, - ); - if (result.isError) return; - if (!mounted) return; - _nextBatch = null; - _loadHierarchy(); - return; - case SpaceChildAction.removeFromSpace: final consent = await showOkCancelAlertDialog( context: context, @@ -376,8 +336,32 @@ class _SpaceViewState extends State { if (result.isError) return; if (!mounted) return; _nextBatch = null; - _loadHierarchy(); return; + case SpaceChildAction.mute: + await showFutureLoadingDialog( + context: context, + future: () => room!.setPushRuleState(PushRuleState.mentionsOnly), + ); + case SpaceChildAction.unmute: + await showFutureLoadingDialog( + context: context, + future: () => room!.setPushRuleState(PushRuleState.notify), + ); + case SpaceChildAction.markAsUnread: + await showFutureLoadingDialog( + context: context, + future: () => room!.markUnread(true), + ); + case SpaceChildAction.markAsRead: + await showFutureLoadingDialog( + context: context, + future: () => room!.markUnread(false), + ); + case SpaceChildAction.leave: + await showFutureLoadingDialog( + context: context, + future: () => room!.leave(), + ); } } @@ -403,8 +387,11 @@ class _SpaceViewState extends State { size: avatarSize, mxContent: room?.avatar, name: displayname, - border: BorderSide(width: 1, color: theme.dividerColor), - borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), + shapeBorder: RoundedSuperellipseBorder( + side: BorderSide(width: 1, color: theme.dividerColor), + borderRadius: BorderRadius.circular(AppConfig.spaceBorderRadius), + ), + borderRadius: BorderRadius.circular(AppConfig.spaceBorderRadius), ), title: Text( displayname, @@ -414,34 +401,11 @@ class _SpaceViewState extends State { ), actions: [ if (isAdmin) - PopupMenuButton( - icon: const Icon(Icons.add_outlined), - onSelected: _addChatOrSubspace, + IconButton( + icon: Icon(Icons.add_outlined), tooltip: L10n.of(context).addChatOrSubSpace, - itemBuilder: (context) => [ - PopupMenuItem( - value: AddRoomType.chat, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.group_add_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).newGroup), - ], - ), - ), - PopupMenuItem( - value: AddRoomType.subspace, - child: Row( - mainAxisSize: .min, - children: [ - const Icon(Icons.workspaces_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).newSubSpace), - ], - ), - ), - ], + onPressed: () => + context.go('/rooms/newgroup?space_id=${widget.spaceId}'), ), PopupMenuButton( useRootNavigator: true, @@ -574,6 +538,7 @@ class _SpaceViewState extends State { if (joinedRoom?.membership == Membership.leave) { joinedRoom = null; } + return Padding( padding: const EdgeInsets.symmetric( horizontal: 8, @@ -594,19 +559,20 @@ class _SpaceViewState extends State { visualDensity: const VisualDensity( vertical: -0.5, ), - contentPadding: const EdgeInsets.symmetric( - horizontal: 8, + contentPadding: EdgeInsets.only( + left: 8, + right: joinedRoom == null ? 0 : 8, ), onTap: joinedRoom != null ? () => widget.onChatTab(joinedRoom!) - : () => _joinChildRoom(item), - onLongPress: isAdmin + : null, + onLongPress: joinedRoom != null ? () => _showSpaceChildEditMenu( context, item.roomId, ) : null, - leading: hovered && isAdmin + leading: hovered ? SizedBox.square( dimension: avatarSize, child: IconButton( @@ -620,11 +586,13 @@ class _SpaceViewState extends State { .colorScheme .tertiaryContainer, ), - onPressed: () => - _showSpaceChildEditMenu( - context, - item.roomId, - ), + onPressed: + isAdmin || joinedRoom != null + ? () => _showSpaceChildEditMenu( + context, + item.roomId, + ) + : null, icon: const Icon(Icons.edit_outlined), ), ) @@ -637,11 +605,18 @@ class _SpaceViewState extends State { textColor: item.name?.darkColor ?? theme.colorScheme.onSurface, - border: item.roomType == 'm.space' - ? BorderSide( - color: theme - .colorScheme - .surfaceContainerHighest, + shapeBorder: item.roomType == 'm.space' + ? RoundedSuperellipseBorder( + side: BorderSide( + color: theme + .colorScheme + .surfaceContainerHighest, + ), + borderRadius: + BorderRadius.circular( + AppConfig.borderRadius / + 4, + ), ) : null, borderRadius: item.roomType == 'm.space' @@ -662,10 +637,23 @@ class _SpaceViewState extends State { ), ), ), + if (joinedRoom != null && + joinedRoom.pushRuleState != + PushRuleState.notify) + const Padding( + padding: EdgeInsets.only(left: 4.0), + child: Icon( + Icons.notifications_off_outlined, + size: 16, + ), + ), if (joinedRoom != null) UnreadBubble(room: joinedRoom) else - const Icon(Icons.chevron_right_outlined), + TextButton( + onPressed: () => _joinChildRoom(item), + child: Text(L10n.of(context).join), + ), ], ), ), diff --git a/lib/pages/chat_list/start_chat_fab.dart b/lib/pages/chat_list/start_chat_fab.dart new file mode 100644 index 00000000..a05473a4 --- /dev/null +++ b/lib/pages/chat_list/start_chat_fab.dart @@ -0,0 +1,19 @@ +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +class StartChatFab extends StatelessWidget { + const StartChatFab({super.key}); + + @override + Widget build(BuildContext context) { + return FloatingActionButton( + heroTag: 'start_chat_fab', + backgroundColor: Theme.of(context).colorScheme.primary, + foregroundColor: Theme.of(context).colorScheme.onPrimary, + onPressed: () => context.go('/rooms/newprivatechat'), + tooltip: L10n.of(context).newChat, + child: const Icon(Icons.edit_square), + ); + } +} diff --git a/lib/pages/chat_list/status_msg_list.dart b/lib/pages/chat_list/status_msg_list.dart index de2690eb..eccd3008 100644 --- a/lib/pages/chat_list/status_msg_list.dart +++ b/lib/pages/chat_list/status_msg_list.dart @@ -1,13 +1,12 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/adaptive_dialogs/user_dialog.dart'; class StatusMessageList extends StatelessWidget { @@ -123,8 +122,8 @@ class PresenceAvatar extends StatelessWidget { final statusMsg = presence.statusMsg; const statusMsgBubbleElevation = 6.0; - final statusMsgBubbleShadowColor = theme.colorScheme.surface; - final statusMsgBubbleColor = Colors.white.withAlpha(230); + final statusMsgBubbleShadowColor = theme.colorScheme.surfaceBright; + final statusMsgBubbleColor = Colors.white.withAlpha(212); return Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: SizedBox( @@ -197,7 +196,7 @@ class PresenceAvatar extends StatelessWidget { Positioned( left: 0, top: 0, - right: 8, + right: 0, child: Column( spacing: 2, crossAxisAlignment: .start, diff --git a/lib/pages/chat_list/unread_bubble.dart b/lib/pages/chat_list/unread_bubble.dart index ba1344db..c7839b07 100644 --- a/lib/pages/chat_list/unread_bubble.dart +++ b/lib/pages/chat_list/unread_bubble.dart @@ -1,8 +1,6 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class UnreadBubble extends StatelessWidget { final Room room; @@ -48,7 +46,7 @@ class UnreadBubble extends StatelessWidget { fontSize: 13, fontWeight: FontWeight.w500, ), - textAlign: TextAlign.center, + textAlign: .center, ) : const SizedBox.shrink(), ); diff --git a/lib/pages/chat_members/chat_members.dart b/lib/pages/chat_members/chat_members.dart index 21cbc525..a652eff0 100644 --- a/lib/pages/chat_members/chat_members.dart +++ b/lib/pages/chat_members/chat_members.dart @@ -29,7 +29,7 @@ class ChatMembersController extends State { setFilter(); } - void setFilter([dynamic _]) async { + Future setFilter([_]) async { final filter = filterController.text.toLowerCase().trim(); final members = this.members @@ -56,7 +56,7 @@ class ChatMembersController extends State { }); } - void refreshMembers([dynamic _]) async { + Future refreshMembers([_]) async { Logs().d('Load room members from', widget.roomId); try { setState(() { diff --git a/lib/pages/chat_members/chat_members_view.dart b/lib/pages/chat_members/chat_members_view.dart index 89707a10..d682743a 100644 --- a/lib/pages/chat_members/chat_members_view.dart +++ b/lib/pages/chat_members/chat_members_view.dart @@ -1,10 +1,9 @@ +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:flutter/material.dart'; - import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/localized_exception_extension.dart'; import '../../widgets/layouts/max_width_body.dart'; import '../../widgets/matrix.dart'; import '../chat_details/participant_list_item.dart'; @@ -124,10 +123,7 @@ class ChatMembersView extends StatelessWidget { SizedBox( height: 64, child: ListView.builder( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 12.0, - ), + padding: const EdgeInsets.all(12.0), scrollDirection: Axis.horizontal, itemCount: availableFilters.length, itemBuilder: (context, i) => Padding( diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart index f9d5afb8..c83064b5 100644 --- a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart +++ b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart @@ -1,15 +1,11 @@ -import 'dart:developer'; - -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings_view.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class ChatPermissionsSettings extends StatefulWidget { const ChatPermissionsSettings({super.key}); @@ -21,7 +17,7 @@ class ChatPermissionsSettings extends StatefulWidget { class ChatPermissionsSettingsController extends State { String? get roomId => GoRouterState.of(context).pathParameters['roomid']; - void editPowerLevel( + Future editPowerLevel( BuildContext context, String key, int currentLevel, { @@ -40,6 +36,7 @@ class ChatPermissionsSettingsController extends State { currentLevel: currentLevel, ); if (newLevel == null) return; + if (!context.mounted) return; final content = Map.from( room.getState(EventTypes.RoomPowerLevels)!.content, ); @@ -51,7 +48,6 @@ class ChatPermissionsSettingsController extends State { } else { content[key] = newLevel; } - inspect(content); await showFutureLoadingDialog( context: context, future: () => room.client.setRoomStateWithKey( diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart index e904403a..1b7a6f51 100644 --- a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart +++ b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings.dart'; import 'package:fluffychat/pages/chat_permissions_settings/permission_list_tile.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class ChatPermissionsSettingsView extends StatelessWidget { final ChatPermissionsSettingsController controller; diff --git a/lib/pages/chat_permissions_settings/permission_list_tile.dart b/lib/pages/chat_permissions_settings/permission_list_tile.dart index 7344ba5b..6769367b 100644 --- a/lib/pages/chat_permissions_settings/permission_list_tile.dart +++ b/lib/pages/chat_permissions_settings/permission_list_tile.dart @@ -1,9 +1,7 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class PermissionsListTile extends StatelessWidget { final String permissionKey; diff --git a/lib/pages/chat_search/chat_search_files_tab.dart b/lib/pages/chat_search/chat_search_files_tab.dart index 24d27cec..77268e19 100644 --- a/lib/pages/chat_search/chat_search_files_tab.dart +++ b/lib/pages/chat_search/chat_search_files_tab.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_search/search_footer.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class ChatSearchFilesTab extends StatelessWidget { final Room room; @@ -49,15 +47,15 @@ class ChatSearchFilesTab extends StatelessWidget { final filetype = (filename.contains('.') ? filename.split('.').last.toUpperCase() : event.content - .tryGetMap('info') + .tryGetMap('info') ?.tryGet('mimetype') ?.toUpperCase() ?? 'UNKNOWN'); final sizeString = event.sizeString; final prevEvent = i > 0 ? events[i - 1] : null; - final sameEnvironment = prevEvent == null - ? false - : prevEvent.originServerTs.sameEnvironment(event.originServerTs); + final sameEnvironment = + prevEvent != null && + prevEvent.originServerTs.sameEnvironment(event.originServerTs); return Padding( padding: const EdgeInsets.all(8.0), child: Column( diff --git a/lib/pages/chat_search/chat_search_images_tab.dart b/lib/pages/chat_search/chat_search_images_tab.dart index 5b018ccc..7ec4a394 100644 --- a/lib/pages/chat_search/chat_search_images_tab.dart +++ b/lib/pages/chat_search/chat_search_images_tab.dart @@ -1,13 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:intl/intl.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/events/video_player.dart'; import 'package:fluffychat/pages/chat_search/search_footer.dart'; import 'package:fluffychat/pages/image_viewer/image_viewer.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:matrix/matrix.dart'; class ChatSearchImagesTab extends StatelessWidget { final Room room; diff --git a/lib/pages/chat_search/chat_search_message_tab.dart b/lib/pages/chat_search/chat_search_message_tab.dart index c58a2de3..c590eb08 100644 --- a/lib/pages/chat_search/chat_search_message_tab.dart +++ b/lib/pages/chat_search/chat_search_message_tab.dart @@ -1,15 +1,13 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_search/search_footer.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/avatar.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class ChatSearchMessageTab extends StatelessWidget { final String searchQuery; diff --git a/lib/pages/chat_search/chat_search_page.dart b/lib/pages/chat_search/chat_search_page.dart index 965658ee..08d2d6a9 100644 --- a/lib/pages/chat_search/chat_search_page.dart +++ b/lib/pages/chat_search/chat_search_page.dart @@ -1,9 +1,7 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/pages/chat_search/chat_search_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class ChatSearchPage extends StatefulWidget { final String roomId; @@ -44,7 +42,7 @@ class ChatSearchController extends State }); } - void startSearch() async { + Future startSearch() async { switch (tabController.index) { case 0: final searchQuery = searchController.text.trim(); diff --git a/lib/pages/chat_search/chat_search_view.dart b/lib/pages/chat_search/chat_search_view.dart index 278478fa..4632feb6 100644 --- a/lib/pages/chat_search/chat_search_view.dart +++ b/lib/pages/chat_search/chat_search_view.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_search/chat_search_files_tab.dart'; @@ -8,6 +6,7 @@ import 'package:fluffychat/pages/chat_search/chat_search_message_tab.dart'; import 'package:fluffychat/pages/chat_search/chat_search_page.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; class ChatSearchView extends StatelessWidget { final ChatSearchController controller; diff --git a/lib/pages/chat_search/search_footer.dart b/lib/pages/chat_search/search_footer.dart index cac19c4e..732ee3c0 100644 --- a/lib/pages/chat_search/search_footer.dart +++ b/lib/pages/chat_search/search_footer.dart @@ -1,7 +1,6 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; +import 'package:flutter/material.dart'; class SearchFooter extends StatelessWidget { final DateTime? searchedUntil; diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart index dc655ab8..2e6f565e 100644 --- a/lib/pages/device_settings/device_settings.dart +++ b/lib/pages/device_settings/device_settings.dart @@ -1,16 +1,16 @@ -import 'package:flutter/material.dart'; - +import 'package:async/async.dart' show Result; import 'package:collection/collection.dart' show IterableExtension; -import 'package:matrix/encryption/utils/key_verification.dart'; -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/device_settings/device_settings_view.dart'; import 'package:fluffychat/pages/key_verification/key_verification_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart' hide Result; +import 'package:url_launcher/url_launcher_string.dart'; + import '../../widgets/matrix.dart'; class DevicesSettings extends StatefulWidget { @@ -38,43 +38,41 @@ class DevicesSettingsController extends State { super.initState(); } - void _checkChatBackup() async { + Future _checkChatBackup() async { final client = Matrix.of(context).client; - if (client.encryption?.keyManager.enabled == true) { - if (await client.encryption?.keyManager.isCached() == false || - await client.encryption?.crossSigning.isCached() == false || - client.isUnknownSession && !mounted) { - setState(() { - chatBackupEnabled = false; - }); - return; - } - } + final state = await client.getCryptoIdentityState(); + if (!mounted) return; + setState(() { + chatBackupEnabled = state.initialized && !state.connected; + }); } - void removeDevicesAction(List devices) async { + Future removeDevicesAction(List devices) async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); final client = Matrix.of(context).client; - final wellKnown = await client.getWellknown(); - final accountManageUrl = wellKnown.additionalProperties + final wellKnown = await Result.capture(client.getWellknown()); + final accountManageUrl = wellKnown.asValue?.value.additionalProperties .tryGetMap('org.matrix.msc2965.authentication') ?.tryGet('account'); if (accountManageUrl != null) { launchUrlString(accountManageUrl, mode: LaunchMode.inAppBrowserView); return; } + if (!mounted) return; if (await showOkCancelAlertDialog( context: context, - title: L10n.of(context).areYouSure, - okLabel: L10n.of(context).remove, - cancelLabel: L10n.of(context).cancel, - message: L10n.of(context).removeDevicesDescription, + title: l10n.areYouSure, + okLabel: l10n.remove, + cancelLabel: l10n.cancel, + message: l10n.removeDevicesDescription, isDestructive: true, ) == OkCancelResult.cancel) { return; } - final matrix = Matrix.of(context); + if (!mounted) return; final deviceIds = []; for (final userDevice in devices) { deviceIds.add(userDevice.deviceId); @@ -90,38 +88,43 @@ class DevicesSettingsController extends State { reload(); } - void renameDeviceAction(Device device) async { + Future renameDeviceAction(Device device) async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); final displayName = await showTextInputDialog( context: context, - title: L10n.of(context).changeDeviceName, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.changeDeviceName, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, hintText: device.displayName, ); if (displayName == null) return; + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, - future: () => Matrix.of( - context, - ).client.updateDevice(device.deviceId, displayName: displayName), + future: () => + matrix.client.updateDevice(device.deviceId, displayName: displayName), ); if (success.error == null) { reload(); } } - void verifyDeviceAction(Device device) async { + Future verifyDeviceAction(Device device) async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context).verifyOtherDevice, - message: L10n.of(context).verifyOtherDeviceDescription, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.verifyOtherDevice, + message: l10n.verifyOtherDeviceDescription, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, ); if (consent != OkCancelResult.ok) return; - final req = await Matrix.of(context) + if (!mounted) return; + final req = await matrix .client - .userDeviceKeys[Matrix.of(context).client.userID!]! + .userDeviceKeys[matrix.client.userID!]! .deviceKeys[device.deviceId]! .startVerification(); req.onUpdate = () { @@ -132,10 +135,11 @@ class DevicesSettingsController extends State { setState(() {}); } }; + if (!mounted) return; await KeyVerificationDialog(request: req).show(context); } - void blockDeviceAction(Device device) async { + Future blockDeviceAction(Device device) async { final key = Matrix.of(context) .client .userDeviceKeys[Matrix.of(context).client.userID!]! @@ -147,7 +151,7 @@ class DevicesSettingsController extends State { setState(() {}); } - void unblockDeviceAction(Device device) async { + Future unblockDeviceAction(Device device) async { final key = Matrix.of(context) .client .userDeviceKeys[Matrix.of(context).client.userID!]! diff --git a/lib/pages/device_settings/device_settings_view.dart b/lib/pages/device_settings/device_settings_view.dart index 232ae06c..334cd04e 100644 --- a/lib/pages/device_settings/device_settings_view.dart +++ b/lib/pages/device_settings/device_settings_view.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/device_settings/device_settings.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; + import 'user_device_list_item.dart'; class DevicesSettingsView extends StatelessWidget { diff --git a/lib/pages/device_settings/user_device_list_item.dart b/lib/pages/device_settings/user_device_list_item.dart index 095a4335..e0b645a1 100644 --- a/lib/pages/device_settings/user_device_list_item.dart +++ b/lib/pages/device_settings/user_device_list_item.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/date_time_extension.dart'; import '../../utils/matrix_sdk_extensions/device_extension.dart'; import '../../widgets/matrix.dart'; diff --git a/lib/pages/dialer/dialer.dart b/lib/pages/dialer/dialer.dart index d3cca97c..774700fc 100644 --- a/lib/pages/dialer/dialer.dart +++ b/lib/pages/dialer/dialer.dart @@ -19,21 +19,20 @@ import 'dart:async'; import 'dart:math'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/voip/video_renderer.dart'; +import 'package:fluffychat/widgets/avatar.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - import 'package:flutter_foreground_task/flutter_foreground_task.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart' hide VideoRenderer; import 'package:just_audio/just_audio.dart'; import 'package:matrix/matrix.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; -import 'package:fluffychat/utils/voip/video_renderer.dart'; -import 'package:fluffychat/widgets/avatar.dart'; import 'pip/pip_view.dart'; class _StreamView extends StatelessWidget { @@ -147,7 +146,7 @@ class MyCallingPage extends State { MediaStream? get remoteStream { if (call.getRemoteStreams.isNotEmpty) { - return call.getRemoteStreams[0].stream!; + return call.getRemoteStreams.first.stream!; } return null; } @@ -171,7 +170,7 @@ class MyCallingPage extends State { EdgeInsetsGeometry? _localVideoMargin; CallState? _state; - void _playCallSound() async { + Future _playCallSound() async { const path = 'assets/sounds/call.ogg'; if (kIsWeb || PlatformInfos.isMobile || PlatformInfos.isMacOS) { final player = AudioPlayer(); @@ -189,14 +188,12 @@ class MyCallingPage extends State { _playCallSound(); } - void initialize() async { + void initialize() { final call = this.call; call.onCallStateChanged.stream.listen(_handleCallState); call.onCallEventChanged.stream.listen((event) { if (event == CallStateChange.kFeedsChanged) { - setState(() { - call.tryRemoveStopedStreams(); - }); + setState(call.tryRemoveStopedStreams); } else if (event == CallStateChange.kLocalHoldUnhold || event == CallStateChange.kRemoteHoldUnhold) { setState(() {}); @@ -247,7 +244,7 @@ class MyCallingPage extends State { } void _handleCallState(CallState state) { - Logs().v('CallingPage::handleCallState: ${state.toString()}'); + Logs().v('CallingPage::handleCallState: $state'); if ({CallState.kConnected, CallState.kEnded}.contains(state)) { HapticFeedback.heavyImpact(); } @@ -282,7 +279,7 @@ class MyCallingPage extends State { }); } - void _screenSharing() async { + void _screenSharing() { if (PlatformInfos.isAndroid) { if (!call.screensharingEnabled) { FlutterForegroundTask.init( @@ -324,10 +321,10 @@ class MyCallingPage extends State { }); } - void _switchCamera() async { + Future _switchCamera() async { if (call.localUserMediaStream != null) { await Helper.switchCamera( - call.localUserMediaStream!.stream!.getVideoTracks()[0], + call.localUserMediaStream!.stream!.getVideoTracks().first, ); } setState(() {}); @@ -341,235 +338,103 @@ class MyCallingPage extends State { } */ - List _buildActionButtons(bool isFloating) { - if (isFloating) { - return []; - } - - final switchCameraButton = FloatingActionButton( - heroTag: 'switchCamera', - onPressed: _switchCamera, - backgroundColor: Colors.black45, - child: const Icon(Icons.switch_camera), - ); - /* - var switchSpeakerButton = FloatingActionButton( - heroTag: 'switchSpeaker', - child: Icon(_speakerOn ? Icons.volume_up : Icons.volume_off), - onPressed: _switchSpeaker, - foregroundColor: Colors.black54, - backgroundColor: Theme.of(widget.context).backgroundColor, - ); - */ - final hangupButton = FloatingActionButton( - heroTag: 'hangup', - onPressed: _hangUp, - tooltip: 'Hangup', - backgroundColor: _state == CallState.kEnded ? Colors.black45 : Colors.red, - child: const Icon(Icons.call_end), - ); - - final answerButton = FloatingActionButton( - heroTag: 'answer', - onPressed: _answerCall, - tooltip: 'Answer', - backgroundColor: Colors.green, - child: const Icon(Icons.phone), - ); - - final muteMicButton = FloatingActionButton( - heroTag: 'muteMic', - onPressed: _muteMic, - foregroundColor: isMicrophoneMuted ? Colors.black26 : Colors.white, - backgroundColor: isMicrophoneMuted ? Colors.white : Colors.black45, - child: Icon(isMicrophoneMuted ? Icons.mic_off : Icons.mic), - ); - - final screenSharingButton = FloatingActionButton( - heroTag: 'screenSharing', - onPressed: _screenSharing, - foregroundColor: isScreensharingEnabled ? Colors.black26 : Colors.white, - backgroundColor: isScreensharingEnabled ? Colors.white : Colors.black45, - child: const Icon(Icons.desktop_mac), - ); - - final holdButton = FloatingActionButton( - heroTag: 'hold', - onPressed: _remoteOnHold, - foregroundColor: isRemoteOnHold ? Colors.black26 : Colors.white, - backgroundColor: isRemoteOnHold ? Colors.white : Colors.black45, - child: const Icon(Icons.pause), - ); - - final muteCameraButton = FloatingActionButton( - heroTag: 'muteCam', - onPressed: _muteCamera, - foregroundColor: isLocalVideoMuted ? Colors.black26 : Colors.white, - backgroundColor: isLocalVideoMuted ? Colors.white : Colors.black45, - child: Icon(isLocalVideoMuted ? Icons.videocam_off : Icons.videocam), - ); - - switch (_state) { - case CallState.kRinging: - case CallState.kInviteSent: - case CallState.kCreateAnswer: - case CallState.kConnecting: - return call.isOutgoing - ? [hangupButton] - : [answerButton, hangupButton]; - case CallState.kConnected: - return [ - muteMicButton, - //switchSpeakerButton, - if (!voiceonly && !kIsWeb) switchCameraButton, - if (!voiceonly) muteCameraButton, - if (PlatformInfos.isMobile || PlatformInfos.isWeb) - screenSharingButton, - holdButton, - hangupButton, - ]; - case CallState.kEnded: - return [hangupButton]; - case CallState.kFledgling: - case CallState.kWaitLocalMedia: - case CallState.kCreateOffer: - case CallState.kEnding: - case null: - break; - } - return []; - } - - List _buildContent(Orientation orientation, bool isFloating) { - final stackWidgets = []; - - final call = this.call; - if (call.callHasEnded) { - return stackWidgets; - } - - if (call.localHold || call.remoteOnHold) { - var title = ''; - if (call.localHold) { - title = - '${call.room.getLocalizedDisplayname(MatrixLocals(L10n.of(widget.context)))} held the call.'; - } else if (call.remoteOnHold) { - title = 'You held the call.'; - } - stackWidgets.add( - Center( - child: Column( - mainAxisAlignment: .center, - children: [ - const Icon(Icons.pause, size: 48.0, color: Colors.white), - Text( - title, - style: const TextStyle(color: Colors.white, fontSize: 24.0), - ), - ], - ), - ), - ); - return stackWidgets; - } - - var primaryStream = - call.remoteScreenSharingStream ?? - call.localScreenSharingStream ?? - call.remoteUserMediaStream ?? - call.localUserMediaStream; - - if (!connected) { - primaryStream = call.localUserMediaStream; - } - - if (primaryStream != null) { - stackWidgets.add( - Center( - child: _StreamView( - primaryStream, - mainView: true, - matrixClient: widget.client, - ), - ), - ); - } - - if (isFloating || !connected) { - return stackWidgets; - } - - _resizeLocalVideo(orientation); - - if (call.getRemoteStreams.isEmpty) { - return stackWidgets; - } - - final secondaryStreamViews = []; - - if (call.remoteScreenSharingStream != null) { - final remoteUserMediaStream = call.remoteUserMediaStream; - secondaryStreamViews.add( - SizedBox( - width: _localVideoWidth, - height: _localVideoHeight, - child: _StreamView( - remoteUserMediaStream!, - matrixClient: widget.client, - ), - ), - ); - secondaryStreamViews.add(const SizedBox(height: 10)); - } - - final localStream = - call.localUserMediaStream ?? call.localScreenSharingStream; - if (localStream != null && !isFloating) { - secondaryStreamViews.add( - SizedBox( - width: _localVideoWidth, - height: _localVideoHeight, - child: _StreamView(localStream, matrixClient: widget.client), - ), - ); - secondaryStreamViews.add(const SizedBox(height: 10)); - } - - if (call.localScreenSharingStream != null && !isFloating) { - secondaryStreamViews.add( - SizedBox( - width: _localVideoWidth, - height: _localVideoHeight, - child: _StreamView( - call.remoteUserMediaStream!, - matrixClient: widget.client, - ), - ), - ); - secondaryStreamViews.add(const SizedBox(height: 10)); - } - - if (secondaryStreamViews.isNotEmpty) { - stackWidgets.add( - Container( - padding: const EdgeInsets.fromLTRB(0, 20, 0, 120), - alignment: Alignment.bottomRight, - child: Container( - width: _localVideoWidth, - margin: _localVideoMargin, - child: Column(children: secondaryStreamViews), - ), - ), - ); - } - - return stackWidgets; - } - @override Widget build(BuildContext context) { return PIPView( builder: (context, isFloating) { + // Build action buttons + final switchCameraButton = FloatingActionButton( + heroTag: 'switchCamera', + onPressed: _switchCamera, + backgroundColor: Colors.black45, + child: const Icon(Icons.switch_camera), + ); + final hangupButton = FloatingActionButton( + heroTag: 'hangup', + onPressed: _hangUp, + tooltip: 'Hangup', + backgroundColor: _state == CallState.kEnded + ? Colors.black45 + : Colors.red, + child: const Icon(Icons.call_end), + ); + final answerButton = FloatingActionButton( + heroTag: 'answer', + onPressed: _answerCall, + tooltip: 'Answer', + backgroundColor: Colors.green, + child: const Icon(Icons.phone), + ); + final muteMicButton = FloatingActionButton( + heroTag: 'muteMic', + onPressed: _muteMic, + foregroundColor: isMicrophoneMuted ? Colors.black26 : Colors.white, + backgroundColor: isMicrophoneMuted ? Colors.white : Colors.black45, + child: Icon(isMicrophoneMuted ? Icons.mic_off : Icons.mic), + ); + final screenSharingButton = FloatingActionButton( + heroTag: 'screenSharing', + onPressed: _screenSharing, + foregroundColor: isScreensharingEnabled + ? Colors.black26 + : Colors.white, + backgroundColor: isScreensharingEnabled + ? Colors.white + : Colors.black45, + child: const Icon(Icons.desktop_mac), + ); + final holdButton = FloatingActionButton( + heroTag: 'hold', + onPressed: _remoteOnHold, + foregroundColor: isRemoteOnHold ? Colors.black26 : Colors.white, + backgroundColor: isRemoteOnHold ? Colors.white : Colors.black45, + child: const Icon(Icons.pause), + ); + final muteCameraButton = FloatingActionButton( + heroTag: 'muteCam', + onPressed: _muteCamera, + foregroundColor: isLocalVideoMuted ? Colors.black26 : Colors.white, + backgroundColor: isLocalVideoMuted ? Colors.white : Colors.black45, + child: Icon(isLocalVideoMuted ? Icons.videocam_off : Icons.videocam), + ); + + late final List actionButtons; + if (!isFloating) { + switch (_state) { + case CallState.kRinging: + case CallState.kInviteSent: + case CallState.kCreateAnswer: + case CallState.kConnecting: + actionButtons = call.isOutgoing + ? [hangupButton] + : [answerButton, hangupButton]; + break; + case CallState.kConnected: + actionButtons = [ + muteMicButton, + if (!voiceonly && !kIsWeb) switchCameraButton, + if (!voiceonly) muteCameraButton, + if (PlatformInfos.isMobile || PlatformInfos.isWeb) + screenSharingButton, + holdButton, + hangupButton, + ]; + break; + case CallState.kEnded: + actionButtons = [hangupButton]; + break; + case CallState.kFledgling: + case CallState.kWaitLocalMedia: + case CallState.kCreateOffer: + case CallState.kEnding: + case null: + actionButtons = []; + break; + } + } else { + actionButtons = []; + } + return Scaffold( resizeToAvoidBottomInset: !isFloating, floatingActionButtonLocation: @@ -579,16 +444,147 @@ class MyCallingPage extends State { height: 150.0, child: Row( mainAxisAlignment: .spaceAround, - children: _buildActionButtons(isFloating), + children: actionButtons, ), ), body: OrientationBuilder( builder: (BuildContext context, Orientation orientation) { + final stackWidgets = []; + + final callHasEnded = call.callHasEnded; + if (!callHasEnded) { + if (call.localHold || call.remoteOnHold) { + var title = ''; + if (call.localHold) { + title = + '${call.room.getLocalizedDisplayname(MatrixLocals(L10n.of(widget.context)))} held the call.'; + } else if (call.remoteOnHold) { + title = 'You held the call.'; + } + stackWidgets.add( + Center( + child: Column( + mainAxisAlignment: .center, + children: [ + const Icon( + Icons.pause, + size: 48.0, + color: Colors.white, + ), + Text( + title, + style: const TextStyle( + color: Colors.white, + fontSize: 24.0, + ), + ), + ], + ), + ), + ); + } else { + var primaryStream = + call.remoteScreenSharingStream ?? + call.localScreenSharingStream ?? + call.remoteUserMediaStream ?? + call.localUserMediaStream; + + if (!connected) { + primaryStream = call.localUserMediaStream; + } + + if (primaryStream != null) { + stackWidgets.add( + Center( + child: _StreamView( + primaryStream, + mainView: true, + matrixClient: widget.client, + ), + ), + ); + } + + if (!isFloating && connected) { + _resizeLocalVideo(orientation); + + if (call.getRemoteStreams.isNotEmpty) { + final secondaryStreamViews = []; + + if (call.remoteScreenSharingStream != null) { + final remoteUserMediaStream = + call.remoteUserMediaStream; + secondaryStreamViews.add( + SizedBox( + width: _localVideoWidth, + height: _localVideoHeight, + child: _StreamView( + remoteUserMediaStream!, + matrixClient: widget.client, + ), + ), + ); + secondaryStreamViews.add(const SizedBox(height: 10)); + } + + final localStream = + call.localUserMediaStream ?? + call.localScreenSharingStream; + if (localStream != null && !isFloating) { + secondaryStreamViews.add( + SizedBox( + width: _localVideoWidth, + height: _localVideoHeight, + child: _StreamView( + localStream, + matrixClient: widget.client, + ), + ), + ); + secondaryStreamViews.add(const SizedBox(height: 10)); + } + + if (call.localScreenSharingStream != null && + !isFloating) { + secondaryStreamViews.add( + SizedBox( + width: _localVideoWidth, + height: _localVideoHeight, + child: _StreamView( + call.remoteUserMediaStream!, + matrixClient: widget.client, + ), + ), + ); + secondaryStreamViews.add(const SizedBox(height: 10)); + } + + if (secondaryStreamViews.isNotEmpty) { + stackWidgets.add( + Container( + padding: const EdgeInsets.only( + top: 20, + bottom: 120, + ), + alignment: Alignment.bottomRight, + child: Container( + width: _localVideoWidth, + margin: _localVideoMargin, + child: Column(children: secondaryStreamViews), + ), + ), + ); + } + } + } + } + } + return Container( decoration: const BoxDecoration(color: Colors.black87), child: Stack( children: [ - ..._buildContent(orientation, isFloating), + ...stackWidgets, if (!isFloating) Positioned( top: 24.0, diff --git a/lib/pages/dialer/pip/pip_view.dart b/lib/pages/dialer/pip/pip_view.dart index 1cf1e5ec..d4e78d66 100644 --- a/lib/pages/dialer/pip/pip_view.dart +++ b/lib/pages/dialer/pip/pip_view.dart @@ -1,6 +1,6 @@ +import 'package:fluffychat/config/themes.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/config/themes.dart'; import 'dismiss_keyboard.dart'; class PIPView extends StatefulWidget { @@ -105,7 +105,7 @@ class PIPViewState extends State with TickerProviderStateMixin { }); } - void _onPanEnd(dynamic _) { + void _onPanEnd(_) { if (!_isDragging) return; final nearestCorner = _calculateNearestCorner( @@ -122,7 +122,7 @@ class PIPViewState extends State with TickerProviderStateMixin { }); } - void _onPanStart(dynamic _) { + void _onPanStart(_) { if (_isAnimating()) return; setState(() { _dragOffset = _offsets[_corner]!; diff --git a/lib/pages/image_viewer/image_viewer.dart b/lib/pages/image_viewer/image_viewer.dart index 1dba46b2..7555ee70 100644 --- a/lib/pages/image_viewer/image_viewer.dart +++ b/lib/pages/image_viewer/image_viewer.dart @@ -1,13 +1,12 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/image_viewer/image_viewer_view.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/show_scaffold_dialog.dart'; import 'package:fluffychat/widgets/share_scaffold_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/matrix_sdk_extensions/event_extension.dart'; class ImageViewer extends StatefulWidget { @@ -67,7 +66,7 @@ class ImageViewerController extends State { } } - void prevImage() async { + Future prevImage() async { await pageController.previousPage( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, @@ -76,7 +75,7 @@ class ImageViewerController extends State { setState(() {}); } - void nextImage() async { + Future nextImage() async { await pageController.nextPage( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, diff --git a/lib/pages/image_viewer/image_viewer_view.dart b/lib/pages/image_viewer/image_viewer_view.dart index 7eb52949..dea0daf8 100644 --- a/lib/pages/image_viewer/image_viewer_view.dart +++ b/lib/pages/image_viewer/image_viewer_view.dart @@ -1,12 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/image_viewer/video_player.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import 'image_viewer.dart'; class ImageViewerView extends StatelessWidget { diff --git a/lib/pages/image_viewer/video_player.dart b/lib/pages/image_viewer/video_player.dart index 7e9937a9..f97b3320 100644 --- a/lib/pages/image_viewer/video_player.dart +++ b/lib/pages/image_viewer/video_player.dart @@ -1,18 +1,16 @@ import 'dart:io'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:chewie/chewie.dart'; -import 'package:matrix/matrix.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:universal_html/html.dart' as html; -import 'package:video_player/video_player.dart'; - import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/blur_hash.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:video_player/video_player.dart'; + import '../../../utils/error_reporter.dart'; import '../../widgets/mxc_image.dart'; @@ -35,7 +33,7 @@ class EventVideoPlayerState extends State { final _supportsVideoPlayer = !PlatformInfos.isWindows && !PlatformInfos.isLinux; - void _downloadAction() async { + Future _downloadAction() async { if (!_supportsVideoPlayer) { widget.event.saveFile(context); return; @@ -43,7 +41,7 @@ class EventVideoPlayerState extends State { try { final fileSize = widget.event.content - .tryGetMap('info') + .tryGetMap('info') ?.tryGet('size'); final videoFile = await widget.event.downloadAndDecryptAttachment( onDownloadProgress: fileSize == null @@ -64,9 +62,9 @@ class EventVideoPlayerState extends State { // Create the VideoPlayerController from the contents of videoFile. if (kIsWeb) { - final blob = html.Blob([videoFile.bytes], videoFile.mimeType); - final networkUri = Uri.parse(html.Url.createObjectUrlFromBlob(blob)); - videoPlayerController = VideoPlayerController.networkUrl(networkUri); + videoPlayerController = VideoPlayerController.networkUrl( + Uri.dataFromBytes(videoFile.bytes, mimeType: videoFile.mimeType), + ); } else { final tempDir = await getTemporaryDirectory(); final fileName = Uri.encodeComponent( @@ -82,10 +80,6 @@ class EventVideoPlayerState extends State { await videoPlayerController.initialize(); - final infoMap = widget.event.content.tryGetMap('info'); - final videoWidth = infoMap?.tryGet('w') ?? 400; - final videoHeight = infoMap?.tryGet('h') ?? 300; - // Create a ChewieController on top. setState(() { _chewieController = ChewieController( @@ -94,14 +88,16 @@ class EventVideoPlayerState extends State { autoPlay: true, autoInitialize: true, looping: true, - aspectRatio: videoHeight == 0 ? null : videoWidth / videoHeight, + aspectRatio: _videoPlayerController?.value.aspectRatio, ); }); } on IOException catch (e) { + if (!mounted) return; ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(e.toLocalizedString(context)))); } catch (e, s) { + if (!mounted) return; ErrorReporter(context, 'Unable to play video').onErrorCallback(e, s); } } diff --git a/lib/pages/intro/flows/restore_backup_flow.dart b/lib/pages/intro/flows/restore_backup_flow.dart index c8f18052..1db7a9d4 100644 --- a/lib/pages/intro/flows/restore_backup_flow.dart +++ b/lib/pages/intro/flows/restore_backup_flow.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; Future restoreBackupFlow(BuildContext context) async { + final matrix = Matrix.of(context); final picked = await selectFiles(context); final file = picked.firstOrNull; if (file == null) return; @@ -13,9 +13,9 @@ Future restoreBackupFlow(BuildContext context) async { await showFutureLoadingDialog( context: context, future: () async { - final client = await Matrix.of(context).getLoginClient(); + final client = await matrix.getLoginClient(); await client.importDump(String.fromCharCodes(await file.readAsBytes())); - Matrix.of(context).initMatrix(); + matrix.initMatrix(); }, ); } diff --git a/lib/pages/intro/intro_page.dart b/lib/pages/intro/intro_page.dart index d973ae14..49fa0b70 100644 --- a/lib/pages/intro/intro_page.dart +++ b/lib/pages/intro/intro_page.dart @@ -1,19 +1,27 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:go_router/go_router.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - -import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/intro/flows/restore_backup_flow.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:go_router/go_router.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class IntroPage extends StatelessWidget { - const IntroPage({super.key}); + final bool isLoading, hasPresetHomeserver; + final String? loggingInToHomeserver, welcomeText; + final VoidCallback login; + + const IntroPage({ + required this.isLoading, + required this.loggingInToHomeserver, + super.key, + required this.hasPresetHomeserver, + required this.welcomeText, + required this.login, + }); @override Widget build(BuildContext context) { @@ -21,6 +29,7 @@ class IntroPage extends StatelessWidget { final addMultiAccount = Matrix.of( context, ).widget.clients.any((client) => client.isLogged()); + final loggingInToHomeserver = this.loggingInToHomeserver; return LoginScaffold( appBar: AppBar( @@ -35,7 +44,7 @@ class IntroPage extends StatelessWidget { useRootNavigator: true, itemBuilder: (_) => [ PopupMenuItem( - onTap: () => restoreBackupFlow(context), + onTap: isLoading ? null : () => restoreBackupFlow(context), child: Row( mainAxisSize: .min, children: [ @@ -46,7 +55,7 @@ class IntroPage extends StatelessWidget { ), ), PopupMenuItem( - onTap: () => launchUrl(AppConfig.privacyUrl), + onTap: () => launchUrlString(AppSettings.privacyPolicy.value), child: Row( mainAxisSize: .min, children: [ @@ -57,7 +66,7 @@ class IntroPage extends StatelessWidget { ), ), PopupMenuItem( - value: () => PlatformInfos.showDialog(context), + onTap: () => PlatformInfos.showDialog(context), child: Row( mainAxisSize: .min, children: [ @@ -71,87 +80,112 @@ class IntroPage extends StatelessWidget { ), ], ), - body: LayoutBuilder( - builder: (context, constraints) { - return SingleChildScrollView( - child: ConstrainedBox( - constraints: BoxConstraints(minHeight: constraints.maxHeight), - child: IntrinsicHeight( - child: Column( - children: [ - Container( - alignment: Alignment.center, - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Hero( - tag: 'info-logo', - child: Image.asset( - './assets/banner_transparent.png', - fit: BoxFit.fitWidth, - ), - ), + body: isLoading + ? Center( + child: Column( + mainAxisAlignment: .center, + children: [ + CircularProgressIndicator.adaptive(), + if (loggingInToHomeserver != null) + Text(L10n.of(context).logInTo(loggingInToHomeserver)), + ], + ), + ) + : LayoutBuilder( + builder: (context, constraints) { + return SingleChildScrollView( + child: ConstrainedBox( + constraints: BoxConstraints( + minHeight: constraints.maxHeight, ), - const SizedBox(height: 32), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 32.0), - child: SelectableLinkify( - text: L10n.of(context).appIntro, - textScaleFactor: MediaQuery.textScalerOf( - context, - ).scale(1), - textAlign: TextAlign.center, - linkStyle: TextStyle( - color: theme.colorScheme.secondary, - decorationColor: theme.colorScheme.secondary, - ), - onOpen: (link) => launchUrlString(link.url), - ), - ), - const Spacer(), - Padding( - padding: const EdgeInsets.all(32.0), + child: IntrinsicHeight( child: Column( - mainAxisSize: .min, - crossAxisAlignment: .stretch, children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: theme.colorScheme.secondary, - foregroundColor: theme.colorScheme.onSecondary, + Container( + alignment: Alignment.center, + padding: const EdgeInsets.symmetric( + horizontal: 8.0, ), - onPressed: () => context.go( - '${GoRouterState.of(context).uri.path}/sign_up', + child: Hero( + tag: 'info-logo', + child: Image.asset( + './assets/banner_transparent.png', + fit: BoxFit.fitWidth, + ), ), - child: Text(L10n.of(context).createNewAccount), ), - SizedBox(height: 16), - ElevatedButton( - onPressed: () => context.go( - '${GoRouterState.of(context).uri.path}/sign_in', + const SizedBox(height: 32), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 32.0, ), - child: Text(L10n.of(context).signIn), - ), - TextButton( - onPressed: () async { - final client = await Matrix.of( + child: SelectableLinkify( + text: welcomeText ?? L10n.of(context).appIntro, + textScaleFactor: MediaQuery.textScalerOf( context, - ).getLoginClient(); - context.go( - '${GoRouterState.of(context).uri.path}/login', - extra: client, - ); - }, - child: Text(L10n.of(context).loginWithMatrixId), + ).scale(1), + textAlign: TextAlign.center, + linkStyle: TextStyle( + color: theme.colorScheme.secondary, + decorationColor: theme.colorScheme.secondary, + ), + onOpen: (link) => launchUrlString(link.url), + ), + ), + const Spacer(), + Padding( + padding: const EdgeInsets.all(32.0), + child: Column( + mainAxisSize: .min, + crossAxisAlignment: .stretch, + children: [ + if (!hasPresetHomeserver) + ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: + theme.colorScheme.secondary, + foregroundColor: + theme.colorScheme.onSecondary, + ), + onPressed: () => context.go( + '${GoRouterState.of(context).uri.path}/sign_up', + ), + child: Text( + L10n.of(context).createNewAccount, + ), + ), + SizedBox(height: 16), + ElevatedButton( + onPressed: login, + child: Text(L10n.of(context).signIn), + ), + + if (!hasPresetHomeserver) + TextButton( + onPressed: () async { + final client = await Matrix.of( + context, + ).getLoginClient(); + if (!context.mounted) return; + context.go( + '${GoRouterState.of(context).uri.path}/login', + extra: client, + ); + }, + child: Text( + L10n.of(context).loginWithMatrixId, + ), + ), + ], + ), ), ], ), ), - ], - ), - ), + ), + ); + }, ), - ); - }, - ), ); } } diff --git a/lib/pages/intro/intro_page_presenter.dart b/lib/pages/intro/intro_page_presenter.dart new file mode 100644 index 00000000..34bddfc7 --- /dev/null +++ b/lib/pages/intro/intro_page_presenter.dart @@ -0,0 +1,123 @@ +import 'dart:convert'; + +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/pages/intro/intro_page.dart'; +import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/oidc_session_json_extension.dart'; +import 'package:fluffychat/utils/sign_in_flows/check_homeserver.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix_api_lite/utils/logs.dart'; +import 'package:matrix/msc_extensions/msc_2964_oidc_login_flow/msc_2964_oidc_login_flow.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:universal_html/universal_html.dart' as web; + +class IntroPagePresenter extends StatefulWidget { + const IntroPagePresenter({super.key}); + + @override + State createState() => _IntroPagePresenterState(); +} + +class _IntroPagePresenterState extends State { + bool isLoading = kIsWeb; + String? loggingInToHomeserver; + + @override + void initState() { + super.initState(); + + if (kIsWeb) _finishOidcLogin(); + } + + Future _finishOidcLogin() async { + final store = await SharedPreferences.getInstance(); + final storedHomeserverString = store.getString( + OidcSessionJsonExtension.homeserverStoreKey, + ); + final homeserverUrl = storedHomeserverString == null + ? null + : Uri.tryParse(storedHomeserverString); + + final oidcSessionString = store.getString( + OidcSessionJsonExtension.storeKey, + ); + final session = oidcSessionString == null + ? null + : OidcSessionJsonExtension.fromJson(jsonDecode(oidcSessionString)); + + await store.remove(OidcSessionJsonExtension.storeKey); + await store.remove(OidcSessionJsonExtension.homeserverStoreKey); + if (!mounted) return; + + if (homeserverUrl == null || session == null) { + setState(() { + isLoading = false; + }); + + return; + } + setState(() { + loggingInToHomeserver = homeserverUrl.origin; + }); + + try { + final returnUrl = Uri.parse(web.window.location.href); + final queryParameters = returnUrl.hasFragment + ? Uri.parse(returnUrl.fragment).queryParameters + : returnUrl.queryParameters; + final code = queryParameters['code'] as String; + final state = queryParameters['state'] as String; + + final client = await Matrix.of(context).getLoginClient(); + await client.checkHomeserver(homeserverUrl); + await client.oidcLogin(session: session, code: code, state: state); + if (!mounted) return; + context.go('/backup'); + } catch (e, s) { + Logs().w('Unable to login via OIDC', e, s); + if (mounted) { + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(e.toLocalizedString(context)))); + } + } finally { + if (mounted) { + setState(() { + isLoading = false; + }); + } + } + } + + void _login() { + final presetHomeserver = AppSettings.presetHomeserver.value; + if (presetHomeserver.isEmpty) { + context.go('${GoRouterState.of(context).uri.path}/sign_in'); + return; + } + + connectToHomeserverFlow( + PublicHomeserverData(name: presetHomeserver), + context, + (snapshot) {}, + false, + ); + } + + @override + Widget build(BuildContext context) { + return IntroPage( + isLoading: isLoading, + loggingInToHomeserver: loggingInToHomeserver, + hasPresetHomeserver: AppSettings.presetHomeserver.value.isNotEmpty, + welcomeText: AppSettings.welcomeText.value.isEmpty + ? null + : AppSettings.welcomeText.value, + login: _login, + ); + } +} diff --git a/lib/pages/invitation_selection/invitation_selection.dart b/lib/pages/invitation_selection/invitation_selection.dart index 1701a1a0..e0941233 100644 --- a/lib/pages/invitation_selection/invitation_selection.dart +++ b/lib/pages/invitation_selection/invitation_selection.dart @@ -1,13 +1,12 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/localized_exception_extension.dart'; class InvitationSelection extends StatefulWidget { @@ -50,7 +49,13 @@ class InvitationSelectionController extends State { return contacts; } - void inviteAction(BuildContext context, String id, String displayname) async { + Future inviteAction( + BuildContext context, + String id, + String displayname, + ) async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final room = Matrix.of(context).client.getRoomById(roomId!)!; final success = await showFutureLoadingDialog( @@ -58,15 +63,14 @@ class InvitationSelectionController extends State { future: () => room.invite(id), ); if (success.error == null) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(L10n.of(context).contactHasBeenInvitedToTheGroup), - ), + if (!context.mounted) return; + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.contactHasBeenInvitedToTheGroup)), ); } } - void searchUserWithCoolDown(String text) async { + void searchUserWithCoolDown(String text) { coolDown?.cancel(); coolDown = Timer( const Duration(milliseconds: 500), @@ -74,7 +78,7 @@ class InvitationSelectionController extends State { ); } - void searchUser(BuildContext context, String text) async { + Future searchUser(BuildContext context, String text) async { coolDown?.cancel(); if (text.isEmpty) { setState(() => foundProfiles = []); @@ -88,6 +92,7 @@ class InvitationSelectionController extends State { try { response = await matrix.client.searchUserDirectory(text, limit: 10); } catch (e) { + if (!context.mounted) return; ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text((e).toLocalizedString(context)))); diff --git a/lib/pages/invitation_selection/invitation_selection_view.dart b/lib/pages/invitation_selection/invitation_selection_view.dart index 4db33841..514ec2a6 100644 --- a/lib/pages/invitation_selection/invitation_selection_view.dart +++ b/lib/pages/invitation_selection/invitation_selection_view.dart @@ -1,12 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/adaptive_dialogs/user_dialog.dart'; class InvitationSelectionView extends StatelessWidget { @@ -191,10 +190,9 @@ class _InviteContactListTile extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle(color: theme.colorScheme.secondary), ), - trailing: TextButton.icon( + trailing: TextButton( onPressed: isMember ? null : onTap, - label: Text(isMember ? l10n.participant : l10n.invite), - icon: Icon(isMember ? Icons.check : Icons.add), + child: Text(isMember ? l10n.participant : l10n.invite), ), ); } diff --git a/lib/pages/key_verification/key_verification_dialog.dart b/lib/pages/key_verification/key_verification_dialog.dart index 10121f9b..52c8868a 100644 --- a/lib/pages/key_verification/key_verification_dialog.dart +++ b/lib/pages/key_verification/key_verification_dialog.dart @@ -1,17 +1,15 @@ import 'dart:convert'; import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -import 'package:matrix/encryption.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart'; class KeyVerificationDialog extends StatefulWidget { Future show(BuildContext context) => showAdaptiveDialog( @@ -84,6 +82,7 @@ class KeyVerificationPageState extends State { }, ); if (valid.error != null) { + if (!mounted) return; await showOkAlertDialog( useRootNavigator: false, context: context, @@ -120,7 +119,7 @@ class KeyVerificationPageState extends State { final textEditingController = TextEditingController(); String input; body = Container( - margin: const EdgeInsets.only(left: 8.0, right: 8.0), + margin: const EdgeInsets.symmetric(horizontal: 8.0), child: Column( mainAxisSize: .min, children: [ @@ -180,9 +179,10 @@ class KeyVerificationPageState extends State { ); buttons.add( AdaptiveDialogAction( - onPressed: () => widget.request.rejectVerification().then( - (_) => Navigator.of(context, rootNavigator: false).pop(false), - ), + onPressed: () => widget.request.rejectVerification().then((_) { + if (!context.mounted) return; + Navigator.of(context, rootNavigator: false).pop(false); + }), child: Text( L10n.of(context).reject, style: TextStyle(color: theme.colorScheme.error), @@ -248,7 +248,7 @@ class KeyVerificationPageState extends State { } else { title = Text(L10n.of(context).compareNumbersMatch); final numbers = widget.request.sasNumbers; - final numbstr = '${numbers[0]}-${numbers[1]}-${numbers[2]}'; + final numbstr = '${numbers.first}-${numbers[1]}-${numbers[2]}'; compareWidget = TextSpan( text: numbstr, style: const TextStyle(fontSize: 40), diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index c1620f91..4ebd3278 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -1,15 +1,15 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/platform_infos.dart'; import 'login_view.dart'; @@ -32,7 +32,7 @@ class LoginController extends State { void toggleShowPassword() => setState(() => showPassword = !loading && !showPassword); - void login() async { + Future login() async { final matrix = Matrix.of(context); if (usernameController.text.isEmpty) { setState(() => usernameError = L10n.of(context).pleaseEnterYourUsername); @@ -81,6 +81,9 @@ class LoginController extends State { password: passwordController.text, initialDeviceDisplayName: PlatformInfos.clientName, ); + if (mounted) { + context.go('/backup'); + } } on MatrixException catch (exception) { setState(() => passwordError = exception.errorMessage); return setState(() => loading = false); @@ -94,7 +97,7 @@ class LoginController extends State { Timer? _coolDown; - void checkWellKnownWithCoolDown(String userId) async { + void checkWellKnownWithCoolDown(String userId) { _coolDown?.cancel(); _coolDown = Timer( const Duration(seconds: 1), @@ -102,7 +105,7 @@ class LoginController extends State { ); } - void _checkWellKnown(String userId) async { + Future _checkWellKnown(String userId) async { if (mounted) setState(() => usernameError = null); if (!userId.isValidMatrixId) return; final oldHomeserver = widget.client.homeserver; @@ -127,15 +130,19 @@ class LoginController extends State { Logs().v( '$newDomain is not running a homeserver, asking to use $oldHomeserver', ); + if (!mounted) return; + final l10n = L10n.of(context); final dialogResult = await showOkCancelAlertDialog( context: context, useRootNavigator: false, - title: L10n.of( - context, - ).noMatrixServer(newDomain.toString(), oldHomeserver.toString()), - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.noMatrixServer( + newDomain.toString(), + oldHomeserver.toString(), + ), + okLabel: l10n.ok, + cancelLabel: l10n.cancel, ); + if (!mounted) return; if (dialogResult == OkCancelResult.ok) { if (mounted) setState(() => usernameError = null); } else { @@ -153,26 +160,30 @@ class LoginController extends State { } } catch (e) { widget.client.homeserver = oldHomeserver; + if (!mounted) return; usernameError = e.toLocalizedString(context); if (mounted) setState(() {}); } } - void passwordForgotten() async { + Future passwordForgotten() async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).passwordForgotten, - message: L10n.of(context).enterAnEmailAddress, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.passwordForgotten, + message: l10n.enterAnEmailAddress, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, initialText: usernameController.text.isEmail ? usernameController.text : '', - hintText: L10n.of(context).enterAnEmailAddress, + hintText: l10n.enterAnEmailAddress, keyboardType: TextInputType.emailAddress, ); if (input == null) return; + if (!mounted) return; final clientSecret = DateTime.now().millisecondsSinceEpoch.toString(); final response = await showFutureLoadingDialog( context: context, @@ -183,31 +194,34 @@ class LoginController extends State { ), ); if (response.error != null) return; + if (!mounted) return; final password = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).passwordForgotten, - message: L10n.of(context).chooseAStrongPassword, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.passwordForgotten, + message: l10n.chooseAStrongPassword, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, hintText: '******', obscureText: true, minLines: 1, maxLines: 1, ); if (password == null) return; + if (!mounted) return; final ok = await showOkAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context).weSentYouAnEmail, - message: L10n.of(context).pleaseClickOnLink, - okLabel: L10n.of(context).iHaveClickedOnLink, + title: l10n.weSentYouAnEmail, + message: l10n.pleaseClickOnLink, + okLabel: l10n.iHaveClickedOnLink, ); if (ok != OkCancelResult.ok) return; + if (!mounted) return; final data = { 'new_password': password, 'logout_devices': false, - "auth": AuthenticationThreePidCreds( + 'auth': AuthenticationThreePidCreds( type: AuthenticationTypes.emailIdentity, threepidCreds: ThreepidCreds( sid: response.result!.sid, @@ -223,9 +237,10 @@ class LoginController extends State { data: data, ), ); + if (!mounted) return; if (success.error == null) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).passwordHasBeenChanged)), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.passwordHasBeenChanged)), ); usernameController.text = input; passwordController.text = password; diff --git a/lib/pages/login/login_view.dart b/lib/pages/login/login_view.dart index ca13ac21..738d8b08 100644 --- a/lib/pages/login/login_view.dart +++ b/lib/pages/login/login_view.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; +import 'package:flutter/material.dart'; + import 'login.dart'; class LoginView extends StatelessWidget { @@ -56,7 +56,7 @@ class LoginView extends StatelessWidget { errorText: controller.usernameError, errorStyle: const TextStyle(color: Colors.orange), hintText: '@username:domain', - labelText: L10n.of(context).emailOrUsername, + labelText: L10n.of(context).matrixId, ), ), ), diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index c5737a32..538edab7 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -1,20 +1,23 @@ import 'dart:typed_data'; -import 'package:flutter/material.dart'; - import 'package:file_picker/file_picker.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart' as sdk; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_group/new_group_view.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart' as sdk; +import 'package:matrix/matrix.dart'; class NewGroup extends StatefulWidget { final CreateGroupType createGroupType; - const NewGroup({this.createGroupType = CreateGroupType.group, super.key}); + final String? spaceId; + const NewGroup({ + this.createGroupType = CreateGroupType.group, + this.spaceId, + super.key, + }); @override NewGroupController createState() => NewGroupController(); @@ -47,7 +50,7 @@ class NewGroupController extends State { void setGroupCanBeFound(bool b) => setState(() => groupCanBeFound = b); - void selectPhoto() async { + Future selectPhoto() async { final photo = await selectFiles( context, type: FileType.image, @@ -63,7 +66,9 @@ class NewGroupController extends State { Future _createGroup() async { if (!mounted) return; - final roomId = await Matrix.of(context).client.createGroupChat( + final client = Matrix.of(context).client; + + final roomId = await client.createGroupChat( visibility: groupCanBeFound ? sdk.Visibility.public : sdk.Visibility.private, @@ -79,7 +84,9 @@ class NewGroupController extends State { ), ], ); + await _addToSpace(roomId); if (!mounted) return; + context.go('/rooms/$roomId/invite'); } @@ -104,11 +111,24 @@ class NewGroupController extends State { ), ], ); + await _addToSpace(spaceId); if (!mounted) return; context.pop(spaceId); } - void submitAction([dynamic _]) async { + Future _addToSpace(String roomId) async { + final spaceId = widget.spaceId; + if (spaceId != null) { + final activeSpace = Matrix.of(context).client.getRoomById(spaceId); + if (activeSpace == null) { + throw Exception('Can not add group to space: Space not found $spaceId'); + } + await activeSpace.postLoad(); + await activeSpace.setSpaceChild(roomId); + } + } + + Future submitAction([_]) async { final client = Matrix.of(context).client; try { @@ -143,6 +163,16 @@ class NewGroupController extends State { } } + @override + void initState() { + final spaceId = widget.spaceId; + if (spaceId != null) { + final space = Matrix.of(context).client.getRoomById(spaceId); + publicGroup = space?.joinRules == JoinRules.public; + } + super.initState(); + } + @override Widget build(BuildContext context) => NewGroupView(this); } diff --git a/lib/pages/new_group/new_group_view.dart b/lib/pages/new_group/new_group_view.dart index 61f86736..d92dfad4 100644 --- a/lib/pages/new_group/new_group_view.dart +++ b/lib/pages/new_group/new_group_view.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_group/new_group.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; class NewGroupView extends StatelessWidget { final NewGroupController controller; diff --git a/lib/pages/new_private_chat/new_private_chat.dart b/lib/pages/new_private_chat/new_private_chat.dart index 982290c4..6135b473 100644 --- a/lib/pages/new_private_chat/new_private_chat.dart +++ b/lib/pages/new_private_chat/new_private_chat.dart @@ -1,11 +1,6 @@ import 'dart:async'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:device_info_plus/device_info_plus.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_private_chat/new_private_chat_view.dart'; import 'package:fluffychat/pages/new_private_chat/qr_scanner_modal.dart'; @@ -14,10 +9,15 @@ import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/adaptive_dialogs/user_dialog.dart'; class NewPrivateChat extends StatefulWidget { - const NewPrivateChat({super.key}); + final String? deeplink; + const NewPrivateChat({super.key, required this.deeplink}); @override NewPrivateChatController createState() => NewPrivateChatController(); @@ -33,7 +33,19 @@ class NewPrivateChatController extends State { static const Duration _coolDown = Duration(milliseconds: 500); - void searchUsers([String? input]) async { + @override + void initState() { + super.initState(); + + final deeplink = widget.deeplink; + if (deeplink != null) { + WidgetsBinding.instance.addPostFrameCallback((_) { + UrlLauncher(context, deeplink).openMatrixToUrl(); + }); + } + } + + Future searchUsers([String? input]) async { final searchTerm = input ?? controller.text; if (searchTerm.isEmpty) { _searchCoolDown?.cancel(); @@ -68,18 +80,20 @@ class NewPrivateChatController extends State { void inviteAction() => FluffyShare.shareInviteLink(context); - void openScannerAction() async { + Future openScannerAction() async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); if (PlatformInfos.isAndroid) { final info = await DeviceInfoPlugin().androidInfo; + if (!mounted) return; if (info.version.sdkInt < 21) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(L10n.of(context).unsupportedAndroidVersionLong), - ), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.unsupportedAndroidVersionLong)), ); return; } } + if (!mounted) return; await showAdaptiveBottomSheet( context: context, builder: (_) => QrScannerModal( @@ -88,13 +102,16 @@ class NewPrivateChatController extends State { ); } - void copyUserId() async { + Future copyUserId() async { + final scaffoldMessenger = ScaffoldMessenger.of(context); + final l10n = L10n.of(context); await Clipboard.setData( ClipboardData(text: Matrix.of(context).client.userID!), ); - ScaffoldMessenger.of( - context, - ).showSnackBar(SnackBar(content: Text(L10n.of(context).copiedToClipboard))); + if (!mounted) return; + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.copiedToClipboard)), + ); } void openUserModal(Profile profile) => diff --git a/lib/pages/new_private_chat/new_private_chat_view.dart b/lib/pages/new_private_chat/new_private_chat_view.dart index d72ba4c2..905ca0ec 100644 --- a/lib/pages/new_private_chat/new_private_chat_view.dart +++ b/lib/pages/new_private_chat/new_private_chat_view.dart @@ -1,9 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:pretty_qr_code/pretty_qr_code.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -14,6 +8,11 @@ import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:pretty_qr_code/pretty_qr_code.dart'; + import '../../widgets/qr_code_viewer.dart'; class NewPrivateChatView extends StatelessWidget { diff --git a/lib/pages/new_private_chat/qr_scanner_modal.dart b/lib/pages/new_private_chat/qr_scanner_modal.dart index b47dc566..1983c1a6 100644 --- a/lib/pages/new_private_chat/qr_scanner_modal.dart +++ b/lib/pages/new_private_chat/qr_scanner_modal.dart @@ -1,11 +1,9 @@ import 'dart:async'; import 'dart:io'; -import 'package:flutter/material.dart'; - -import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; - import 'package:fluffychat/l10n/l10n.dart'; +import 'package:flutter/material.dart'; +import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; class QrScannerModal extends StatefulWidget { final void Function(String) onScan; @@ -68,6 +66,7 @@ class QrScannerModalState extends State { late StreamSubscription sub; sub = controller.scannedDataStream.listen((scanData) { sub.cancel(); + if (!mounted) return; Navigator.of(context).pop(); final data = scanData.code; if (data != null) widget.onScan(data); diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 13ca20a1..e8b21a54 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -1,13 +1,7 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:go_router/go_router.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -15,6 +9,12 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; import 'settings_view.dart'; @@ -34,19 +34,21 @@ class SettingsController extends State { profileFuture = null; }); - void setDisplaynameAction() async { + Future setDisplaynameAction() async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); final profile = await profileFuture; + if (!mounted) return; final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).editDisplayname, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - initialText: - profile?.displayName ?? Matrix.of(context).client.userID!.localpart, + title: l10n.editDisplayname, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + initialText: profile?.displayName ?? matrix.client.userID!.localpart, ); if (input == null) return; - final matrix = Matrix.of(context); + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, future: () => matrix.client.setProfileField( @@ -60,46 +62,50 @@ class SettingsController extends State { } } - void logoutAction() async { - final noBackup = showChatBackupBanner == true; + Future logoutAction() async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context).areYouSureYouWantToLogout, - message: L10n.of(context).noBackupWarning, - isDestructive: noBackup, - okLabel: L10n.of(context).logout, - cancelLabel: L10n.of(context).cancel, + title: l10n.areYouSureYouWantToLogout, + message: l10n.noBackupWarning, + isDestructive: cryptoIdentityConnected == false, + okLabel: l10n.logout, + cancelLabel: l10n.cancel, ) == OkCancelResult.cancel) { return; } - final matrix = Matrix.of(context); + if (!mounted) return; await showFutureLoadingDialog( context: context, future: () => matrix.client.logout(), ); } - void setAvatarAction() async { + Future setAvatarAction() async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); final profile = await profileFuture; + if (!mounted) return; final actions = [ if (PlatformInfos.isMobile) AdaptiveModalAction( value: AvatarAction.camera, - label: L10n.of(context).openCamera, + label: l10n.openCamera, isDefaultAction: true, icon: const Icon(Icons.camera_alt_outlined), ), AdaptiveModalAction( value: AvatarAction.file, - label: L10n.of(context).openGallery, + label: l10n.openGallery, icon: const Icon(Icons.photo_outlined), ), if (profile?.avatarUrl != null) AdaptiveModalAction( value: AvatarAction.remove, - label: L10n.of(context).removeYourAvatar, + label: l10n.removeYourAvatar, isDestructive: true, icon: const Icon(Icons.delete_outlined), ), @@ -108,12 +114,12 @@ class SettingsController extends State { ? actions.single.value : await showModalActionPopup( context: context, - title: L10n.of(context).changeYourAvatar, - cancelLabel: L10n.of(context).cancel, + title: l10n.changeYourAvatar, + cancelLabel: l10n.cancel, actions: actions, ); if (action == null) return; - final matrix = Matrix.of(context); + if (!mounted) return; if (action == AvatarAction.remove) { final success = await showFutureLoadingDialog( context: context, @@ -135,6 +141,7 @@ class SettingsController extends State { if (result == null) return; file = MatrixFile(bytes: await result.readAsBytes(), name: result.path); } else { + if (!mounted) return; final result = await selectFiles(context, type: FileType.image); final pickedFile = result.firstOrNull; if (pickedFile == null) return; @@ -143,6 +150,7 @@ class SettingsController extends State { name: pickedFile.name, ); } + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, future: () => matrix.client.setAvatar(file), @@ -159,7 +167,7 @@ class SettingsController extends State { super.initState(); } - void checkBootstrap() async { + Future checkBootstrap() async { final client = Matrix.of(context).client; if (!client.encryptionEnabled) return; await client.accountDataLoading; @@ -167,23 +175,18 @@ class SettingsController extends State { if (client.prevBatch == null) { await client.onSync.stream.first; } - final crossSigning = - await client.encryption?.crossSigning.isCached() ?? false; - final needsBootstrap = - await client.encryption?.keyManager.isCached() == false || - client.encryption?.crossSigning.enabled == false || - crossSigning == false; - final isUnknownSession = client.isUnknownSession; + + final state = await client.getCryptoIdentityState(); + if (!mounted) return; setState(() { - showChatBackupBanner = needsBootstrap || isUnknownSession; + cryptoIdentityConnected = state.initialized && state.connected; }); } - bool? crossSigningCached; - bool? showChatBackupBanner; + bool? cryptoIdentityConnected; - void firstRunBootstrapAction([dynamic _]) async { - if (showChatBackupBanner != true) { + Future firstRunBootstrapAction([_]) async { + if (cryptoIdentityConnected == true) { showOkAlertDialog( context: context, title: L10n.of(context).chatBackup, diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart index 419db1ce..00b3d64f 100644 --- a/lib/pages/settings/settings_view.dart +++ b/lib/pages/settings/settings_view.dart @@ -1,18 +1,15 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'package:fluffychat/widgets/navigation_rail.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + import '../../widgets/mxc_image_viewer.dart'; import 'settings.dart'; @@ -24,248 +21,201 @@ class SettingsView extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final showChatBackupBanner = controller.showChatBackupBanner; final activeRoute = GoRouter.of( context, ).routeInformationProvider.value.uri.path; - return Row( - children: [ - if (FluffyThemes.isColumnMode(context)) ...[ - SpacesNavigationRail( - activeSpaceId: null, - onGoToChats: () => context.go('/rooms'), - onGoToSpaceId: (spaceId) => context.go('/rooms?spaceId=$spaceId'), - ), - Container(color: Theme.of(context).dividerColor, width: 1), - ], - Expanded( - child: Scaffold( - appBar: FluffyThemes.isColumnMode(context) - ? null - : AppBar( - title: Text(L10n.of(context).settings), - leading: Center( - child: BackButton(onPressed: () => context.go('/rooms')), - ), - ), - body: ListTileTheme( - iconColor: theme.colorScheme.onSurface, - child: ListView( - key: const Key('SettingsListViewContent'), - children: [ - FutureBuilder( - future: controller.profileFuture, - builder: (context, snapshot) { - final profile = snapshot.data; - final avatar = profile?.avatarUrl; - final mxid = - Matrix.of(context).client.userID ?? - L10n.of(context).user; - final displayname = - profile?.displayName ?? mxid.localpart ?? mxid; - return Row( + return Scaffold( + appBar: AppBar( + title: Text(L10n.of(context).settings), + leading: Center( + child: BackButton(onPressed: () => context.go('/rooms')), + ), + ), + body: ListTileTheme( + iconColor: theme.colorScheme.onSurface, + child: ListView( + key: const Key('SettingsListViewContent'), + children: [ + FutureBuilder( + future: controller.profileFuture, + builder: (context, snapshot) { + final profile = snapshot.data; + final avatar = profile?.avatarUrl; + final mxid = + Matrix.of(context).client.userID ?? L10n.of(context).user; + final displayname = + profile?.displayName ?? mxid.localpart ?? mxid; + return Row( + children: [ + Padding( + padding: const EdgeInsets.all(32.0), + child: Stack( children: [ - Padding( - padding: const EdgeInsets.all(32.0), - child: Stack( - children: [ - Avatar( - mxContent: avatar, - name: displayname, - size: Avatar.defaultSize * 2.5, - onTap: avatar != null - ? () => showDialog( - context: context, - builder: (_) => - MxcImageViewer(avatar), - ) - : null, - ), - if (profile != null) - Positioned( - bottom: 0, - right: 0, - child: FloatingActionButton.small( - elevation: 2, - onPressed: controller.setAvatarAction, - heroTag: null, - child: const Icon( - Icons.camera_alt_outlined, - ), - ), - ), - ], + Avatar( + mxContent: avatar, + name: displayname, + size: Avatar.defaultSize * 2.5, + onTap: avatar != null + ? () => showDialog( + context: context, + builder: (_) => MxcImageViewer(avatar), + ) + : null, + ), + if (profile != null) + Positioned( + bottom: 0, + right: 0, + child: FloatingActionButton.small( + elevation: 2, + onPressed: controller.setAvatarAction, + heroTag: null, + child: const Icon(Icons.camera_alt_outlined), + ), + ), + ], + ), + ), + Expanded( + child: Column( + mainAxisAlignment: .center, + crossAxisAlignment: .start, + children: [ + TextButton.icon( + onPressed: controller.setDisplaynameAction, + icon: const Icon(Icons.edit_outlined, size: 16), + style: TextButton.styleFrom( + foregroundColor: theme.colorScheme.onSurface, + iconColor: theme.colorScheme.onSurface, + ), + label: Text( + displayname, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontSize: 18), ), ), - Expanded( - child: Column( - mainAxisAlignment: .center, - crossAxisAlignment: .start, - children: [ - TextButton.icon( - onPressed: controller.setDisplaynameAction, - icon: const Icon( - Icons.edit_outlined, - size: 16, - ), - style: TextButton.styleFrom( - foregroundColor: - theme.colorScheme.onSurface, - iconColor: theme.colorScheme.onSurface, - ), - label: Text( - displayname, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle(fontSize: 18), - ), - ), - TextButton.icon( - onPressed: () => - FluffyShare.share(mxid, context), - icon: const Icon( - Icons.copy_outlined, - size: 14, - ), - style: TextButton.styleFrom( - foregroundColor: - theme.colorScheme.secondary, - iconColor: theme.colorScheme.secondary, - ), - label: Text( - mxid, - maxLines: 1, - overflow: TextOverflow.ellipsis, - // style: const TextStyle(fontSize: 12), - ), - ), - ], + TextButton.icon( + onPressed: () => FluffyShare.share(mxid, context), + icon: const Icon(Icons.copy_outlined, size: 14), + style: TextButton.styleFrom( + foregroundColor: theme.colorScheme.secondary, + iconColor: theme.colorScheme.secondary, + ), + label: Text( + mxid, + maxLines: 1, + overflow: TextOverflow.ellipsis, + // style: const TextStyle(fontSize: 12), ), ), ], - ); - }, - ), - FutureBuilder( - future: Matrix.of(context).client.getWellknown(), - builder: (context, snapshot) { - final accountManageUrl = snapshot - .data - ?.additionalProperties - .tryGetMap( - 'org.matrix.msc2965.authentication', - ) - ?.tryGet('account'); - if (accountManageUrl == null) { - return const SizedBox.shrink(); - } - return ListTile( - leading: const Icon(Icons.account_circle_outlined), - title: Text(L10n.of(context).manageAccount), - trailing: const Icon(Icons.open_in_new_outlined), - onTap: () => launchUrlString( - accountManageUrl, - mode: LaunchMode.inAppBrowserView, - ), - ); - }, - ), - Divider(color: theme.dividerColor), - if (showChatBackupBanner == null) - ListTile( - leading: const Icon(Icons.backup_outlined), - title: Text(L10n.of(context).chatBackup), - trailing: const CircularProgressIndicator.adaptive(), - ) - else - SwitchListTile.adaptive( - controlAffinity: ListTileControlAffinity.trailing, - value: controller.showChatBackupBanner == false, - secondary: const Icon(Icons.backup_outlined), - title: Text(L10n.of(context).chatBackup), - onChanged: controller.firstRunBootstrapAction, - ), - Divider(color: theme.dividerColor), - ListTile( - leading: const Icon(Icons.format_paint_outlined), - title: Text(L10n.of(context).changeTheme), - tileColor: activeRoute.startsWith('/rooms/settings/style') - ? theme.colorScheme.surfaceContainerHigh - : null, - onTap: () => context.go('/rooms/settings/style'), - ), - ListTile( - leading: const Icon(Icons.notifications_outlined), - title: Text(L10n.of(context).notifications), - tileColor: - activeRoute.startsWith('/rooms/settings/notifications') - ? theme.colorScheme.surfaceContainerHigh - : null, - onTap: () => context.go('/rooms/settings/notifications'), - ), - ListTile( - leading: const Icon(Icons.devices_outlined), - title: Text(L10n.of(context).devices), - onTap: () => context.go('/rooms/settings/devices'), - tileColor: activeRoute.startsWith('/rooms/settings/devices') - ? theme.colorScheme.surfaceContainerHigh - : null, - ), - ListTile( - leading: const Icon(Icons.forum_outlined), - title: Text(L10n.of(context).chat), - onTap: () => context.go('/rooms/settings/chat'), - tileColor: activeRoute.startsWith('/rooms/settings/chat') - ? theme.colorScheme.surfaceContainerHigh - : null, - ), - ListTile( - leading: const Icon(Icons.shield_outlined), - title: Text(L10n.of(context).security), - onTap: () => context.go('/rooms/settings/security'), - tileColor: - activeRoute.startsWith('/rooms/settings/security') - ? theme.colorScheme.surfaceContainerHigh - : null, - ), - Divider(color: theme.dividerColor), - ListTile( - leading: const Icon(Icons.dns_outlined), - title: Text( - L10n.of(context).aboutHomeserver( - Matrix.of(context).client.userID?.domain ?? - 'homeserver', ), ), - onTap: () => context.go('/rooms/settings/homeserver'), - tileColor: - activeRoute.startsWith('/rooms/settings/homeserver') - ? theme.colorScheme.surfaceContainerHigh - : null, - ), - ListTile( - leading: const Icon(Icons.privacy_tip_outlined), - title: Text(L10n.of(context).privacy), - onTap: () => launchUrl(AppConfig.privacyUrl), - ), - ListTile( - leading: const Icon(Icons.info_outline_rounded), - title: Text(L10n.of(context).about), - onTap: () => PlatformInfos.showDialog(context), - ), - Divider(color: theme.dividerColor), - ListTile( - leading: const Icon(Icons.logout_outlined), - title: Text(L10n.of(context).logout), - onTap: controller.logoutAction, - ), - ], - ), + ], + ); + }, ), - ), + FutureBuilder( + future: Matrix.of(context).client.getAuthMetadata(), + builder: (context, snapshot) { + final accountManageUrl = snapshot.data?.issuer; + if (accountManageUrl == null) { + return const SizedBox.shrink(); + } + return ListTile( + leading: const Icon(Icons.account_circle_outlined), + title: Text(L10n.of(context).manageAccount), + trailing: const Icon(Icons.open_in_new_outlined), + onTap: () => launchUrl( + accountManageUrl, + mode: LaunchMode.inAppBrowserView, + ), + ); + }, + ), + Divider(color: theme.dividerColor), + SwitchListTile.adaptive( + controlAffinity: ListTileControlAffinity.trailing, + value: controller.cryptoIdentityConnected == true, + secondary: const Icon(Icons.backup_outlined), + title: Text(L10n.of(context).chatBackup), + onChanged: controller.firstRunBootstrapAction, + ), + Divider(color: theme.dividerColor), + ListTile( + leading: const Icon(Icons.format_paint_outlined), + title: Text(L10n.of(context).changeTheme), + tileColor: activeRoute.startsWith('/rooms/settings/style') + ? theme.colorScheme.surfaceContainerHigh + : null, + onTap: () => context.go('/rooms/settings/style'), + ), + ListTile( + leading: const Icon(Icons.notifications_outlined), + title: Text(L10n.of(context).notifications), + tileColor: activeRoute.startsWith('/rooms/settings/notifications') + ? theme.colorScheme.surfaceContainerHigh + : null, + onTap: () => context.go('/rooms/settings/notifications'), + ), + ListTile( + leading: const Icon(Icons.devices_outlined), + title: Text(L10n.of(context).devices), + onTap: () => context.go('/rooms/settings/devices'), + tileColor: activeRoute.startsWith('/rooms/settings/devices') + ? theme.colorScheme.surfaceContainerHigh + : null, + ), + ListTile( + leading: const Icon(Icons.forum_outlined), + title: Text(L10n.of(context).chat), + onTap: () => context.go('/rooms/settings/chat'), + tileColor: activeRoute.startsWith('/rooms/settings/chat') + ? theme.colorScheme.surfaceContainerHigh + : null, + ), + ListTile( + leading: const Icon(Icons.shield_outlined), + title: Text(L10n.of(context).security), + onTap: () => context.go('/rooms/settings/security'), + tileColor: activeRoute.startsWith('/rooms/settings/security') + ? theme.colorScheme.surfaceContainerHigh + : null, + ), + Divider(color: theme.dividerColor), + ListTile( + leading: const Icon(Icons.dns_outlined), + title: Text( + L10n.of(context).aboutHomeserver( + Matrix.of(context).client.userID?.domain ?? 'homeserver', + ), + ), + onTap: () => context.go('/rooms/settings/homeserver'), + tileColor: activeRoute.startsWith('/rooms/settings/homeserver') + ? theme.colorScheme.surfaceContainerHigh + : null, + ), + ListTile( + leading: const Icon(Icons.privacy_tip_outlined), + title: Text(L10n.of(context).privacy), + onTap: () => launchUrlString(AppSettings.privacyPolicy.value), + ), + ListTile( + leading: const Icon(Icons.info_outline_rounded), + title: Text(L10n.of(context).about), + onTap: () => PlatformInfos.showDialog(context), + ), + Divider(color: theme.dividerColor), + ListTile( + leading: const Icon(Icons.logout_outlined), + title: Text(L10n.of(context).logout), + onTap: controller.logoutAction, + ), + ], ), - ], + ), ); } } diff --git a/lib/pages/settings_3pid/settings_3pid.dart b/lib/pages/settings_3pid/settings_3pid.dart index f35c5c1f..25f738f8 100644 --- a/lib/pages/settings_3pid/settings_3pid.dart +++ b/lib/pages/settings_3pid/settings_3pid.dart @@ -1,12 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import 'settings_3pid_view.dart'; class Settings3Pid extends StatefulWidget { @@ -19,42 +18,49 @@ class Settings3Pid extends StatefulWidget { } class Settings3PidController extends State { - void add3PidAction() async { + Future add3PidAction() async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).enterAnEmailAddress, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - hintText: L10n.of(context).enterAnEmailAddress, + title: l10n.enterAnEmailAddress, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + hintText: l10n.enterAnEmailAddress, keyboardType: TextInputType.emailAddress, ); if (input == null) return; + if (!mounted) return; final clientSecret = DateTime.now().millisecondsSinceEpoch.toString(); final response = await showFutureLoadingDialog( context: context, - future: () => Matrix.of(context).client.requestTokenToRegisterEmail( + future: () => matrix.client.requestTokenToRegisterEmail( clientSecret, input, Settings3Pid.sendAttempt++, ), ); if (response.error != null) return; + if (!mounted) return; final ok = await showOkAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context).weSentYouAnEmail, - message: L10n.of(context).pleaseClickOnLink, - okLabel: L10n.of(context).iHaveClickedOnLink, + title: l10n.weSentYouAnEmail, + message: l10n.pleaseClickOnLink, + okLabel: l10n.iHaveClickedOnLink, ); if (ok != OkCancelResult.ok) return; + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, delay: false, - future: () => Matrix.of(context).client.uiaRequestBackground( - (auth) => Matrix.of( - context, - ).client.add3PID(clientSecret, response.result!.sid, auth: auth), + future: () => matrix.client.uiaRequestBackground( + (auth) => matrix.client.add3PID( + clientSecret, + response.result!.sid, + auth: auth, + ), ), ); if (success.error != null) return; @@ -63,22 +69,26 @@ class Settings3PidController extends State { Future?>? request; - void delete3Pid(ThirdPartyIdentifier identifier) async { + Future delete3Pid(ThirdPartyIdentifier identifier) async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context).areYouSure, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).cancel, + title: l10n.areYouSure, + okLabel: l10n.yes, + cancelLabel: l10n.cancel, ) != OkCancelResult.ok) { return; } + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, - future: () => Matrix.of( - context, - ).client.delete3pidFromAccount(identifier.address, identifier.medium), + future: () => matrix.client.delete3pidFromAccount( + identifier.address, + identifier.medium, + ), ); if (success.error != null) return; setState(() => request = null); diff --git a/lib/pages/settings_3pid/settings_3pid_view.dart b/lib/pages/settings_3pid/settings_3pid_view.dart index d01fdc6b..324b1813 100644 --- a/lib/pages/settings_3pid/settings_3pid_view.dart +++ b/lib/pages/settings_3pid/settings_3pid_view.dart @@ -1,11 +1,9 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_3pid/settings_3pid.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class Settings3PidView extends StatelessWidget { final Settings3PidController controller; diff --git a/lib/pages/settings_chat/settings_chat_view.dart b/lib/pages/settings_chat/settings_chat_view.dart index b125cf73..7e8aa9f7 100644 --- a/lib/pages/settings_chat/settings_chat_view.dart +++ b/lib/pages/settings_chat/settings_chat_view.dart @@ -1,7 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -9,6 +5,9 @@ import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/settings_switch_list_tile.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + import 'settings_chat.dart'; class SettingsChatView extends StatelessWidget { diff --git a/lib/pages/settings_emotes/import_archive_dialog.dart b/lib/pages/settings_emotes/import_archive_dialog.dart index 46bca4d3..80b9dcf0 100644 --- a/lib/pages/settings_emotes/import_archive_dialog.dart +++ b/lib/pages/settings_emotes/import_archive_dialog.dart @@ -1,17 +1,15 @@ import 'dart:async'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:archive/archive.dart'; import 'package:collection/collection.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_emotes/settings_emotes.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; class ImportEmoteArchiveDialog extends StatefulWidget { final EmotesSettingsController controller; @@ -93,6 +91,7 @@ class _ImportEmoteArchiveDialogState extends State { } Future _addEmotePack() async { + final matrix = Matrix.of(context); setState(() { _loading = true; _progress = 0; @@ -150,7 +149,7 @@ class _ImportEmoteArchiveDialogState extends State { } else { mxcFile = thumbnail; } - final uri = await Matrix.of(context).client.uploadContent( + final uri = await matrix.client.uploadContent( mxcFile.bytes, filename: mxcFile.name, contentType: mxcFile.mimeType, @@ -180,6 +179,7 @@ class _ImportEmoteArchiveDialogState extends State { } } + if (!mounted) return; await widget.controller.save(context); _importMap.removeWhere( (key, value) => successfulUploads.contains(key.name), diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart index 0672f163..13cd4819 100644 --- a/lib/pages/settings_emotes/settings_emotes.dart +++ b/lib/pages/settings_emotes/settings_emotes.dart @@ -1,12 +1,8 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - +import 'package:archive/archive.dart' + if (dart.library.io) 'package:archive/archive_io.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:http/http.dart' hide Client; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/file_selector.dart'; @@ -14,13 +10,15 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dar import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart' hide Client; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; import 'import_archive_dialog.dart'; import 'settings_emotes_view.dart'; -import 'package:archive/archive.dart' - if (dart.library.io) 'package:archive/archive_io.dart'; - class EmotesSettings extends StatefulWidget { final String? roomId; const EmotesSettings({required this.roomId, super.key}); @@ -234,9 +232,9 @@ class EmotesSettingsController extends State { ?.tryGetMap(stateKey ?? '') != null; - bool get readonly => room == null - ? false - : room?.canChangeStateEvent('im.ponies.room_emotes') == false; + bool get readonly => + room != null && + room?.canChangeStateEvent('im.ponies.room_emotes') == false; void resetAction() { setState(() { @@ -245,7 +243,7 @@ class EmotesSettingsController extends State { }); } - void createImagePack() async { + Future createImagePack() async { final room = this.room; if (room == null) throw Exception('Cannot create image pack without room'); @@ -287,14 +285,15 @@ class EmotesSettingsController extends State { setState(() {}); } - void saveAction() async { + Future saveAction() async { await save(context); setState(() { showSave = false; }); } - void createStickers() async { + Future createStickers() async { + final matrix = Matrix.of(context); final pickedFiles = await selectFiles( context, type: FileType.image, @@ -317,7 +316,7 @@ class EmotesSettingsController extends State { nativeImplementations: ClientManager.nativeImplementations, ) ?? file; - final uri = await Matrix.of(context).client.uploadContent( + final uri = await matrix.client.uploadContent( file.bytes, filename: file.name, contentType: file.mimeType, @@ -363,6 +362,7 @@ class EmotesSettingsController extends State { final buffer = InputMemoryStream(await result.single.readAsBytes()); final archive = ZipDecoder().decodeStream(buffer); + if (!mounted) return; await showDialog( context: context, @@ -377,7 +377,7 @@ class EmotesSettingsController extends State { Future exportAsZip() async { final client = Matrix.of(context).client; - await showFutureLoadingDialog( + final result = await showFutureLoadingDialog( context: context, future: () async { final pack = _getPack(); @@ -399,11 +399,12 @@ class EmotesSettingsController extends State { '${pack.pack.displayName ?? client.userID?.localpart ?? 'emotes'}.zip'; final output = ZipEncoder().encode(archive); - MatrixFile( - name: fileName, - bytes: Uint8List.fromList(output), - ).save(context); + return MatrixFile(name: fileName, bytes: Uint8List.fromList(output)); }, ); + final file = result.result; + if (file == null) return; + if (!mounted) return; + file.save(context); } } diff --git a/lib/pages/settings_emotes/settings_emotes_view.dart b/lib/pages/settings_emotes/settings_emotes_view.dart index a5baf397..d4e6411a 100644 --- a/lib/pages/settings_emotes/settings_emotes_view.dart +++ b/lib/pages/settings_emotes/settings_emotes_view.dart @@ -1,14 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/mxc_image_viewer.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; import 'settings_emotes.dart'; diff --git a/lib/pages/settings_homeserver/settings_homeserver_view.dart b/lib/pages/settings_homeserver/settings_homeserver_view.dart index 195c1701..d2027b25 100644 --- a/lib/pages/settings_homeserver/settings_homeserver_view.dart +++ b/lib/pages/settings_homeserver/settings_homeserver_view.dart @@ -1,16 +1,15 @@ import 'dart:convert'; -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + import '../../widgets/matrix.dart'; import 'settings_homeserver.dart'; diff --git a/lib/pages/settings_ignore_list/settings_ignore_list.dart b/lib/pages/settings_ignore_list/settings_ignore_list.dart index 3bcea3df..940e0677 100644 --- a/lib/pages/settings_ignore_list/settings_ignore_list.dart +++ b/lib/pages/settings_ignore_list/settings_ignore_list.dart @@ -1,9 +1,8 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; import 'settings_ignore_list_view.dart'; diff --git a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart index 7dee64d1..c2cb7e3f 100644 --- a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart +++ b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; + import '../../widgets/matrix.dart'; import 'settings_ignore_list.dart'; diff --git a/lib/pages/settings_notifications/push_rule_extensions.dart b/lib/pages/settings_notifications/push_rule_extensions.dart index 4cf53a92..8885de2d 100644 --- a/lib/pages/settings_notifications/push_rule_extensions.dart +++ b/lib/pages/settings_notifications/push_rule_extensions.dart @@ -1,6 +1,5 @@ -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; +import 'package:matrix/matrix.dart'; extension PushRuleExtension on PushRule { String getPushRuleName(L10n l10n) { @@ -117,6 +116,6 @@ extension PushRuleKindLocal on PushRuleKind { extension on String { String capitalize() { - return "${this[0].toUpperCase()}${substring(1).toLowerCase()}"; + return '${this[0].toUpperCase()}${substring(1).toLowerCase()}'; } } diff --git a/lib/pages/settings_notifications/settings_notifications.dart b/lib/pages/settings_notifications/settings_notifications.dart index 98e43030..8874d1d3 100644 --- a/lib/pages/settings_notifications/settings_notifications.dart +++ b/lib/pages/settings_notifications/settings_notifications.dart @@ -1,9 +1,5 @@ import 'dart:convert'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_notifications/push_rule_extensions.dart'; @@ -12,6 +8,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart' import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; import 'settings_notifications_view.dart'; @@ -26,7 +25,7 @@ class SettingsNotifications extends StatefulWidget { class SettingsNotificationsController extends State { bool isLoading = false; - void onPusherTap(Pusher pusher) async { + Future onPusherTap(Pusher pusher) async { final delete = await showModalActionPopup( context: context, title: pusher.deviceDisplayName, @@ -41,6 +40,7 @@ class SettingsNotificationsController extends State { ], ); if (delete != true) return; + if (!mounted) return; final success = await showFutureLoadingDialog( context: context, @@ -58,7 +58,7 @@ class SettingsNotificationsController extends State { Future?>? pusherFuture; - void togglePushRule(PushRuleKind kind, PushRule pushRule) async { + Future togglePushRule(PushRuleKind kind, PushRule pushRule) async { setState(() { isLoading = true; }); @@ -91,7 +91,7 @@ class SettingsNotificationsController extends State { } } - void editPushRule(PushRule rule, PushRuleKind kind) async { + Future editPushRule(PushRule rule, PushRuleKind kind) async { final theme = Theme.of(context); final action = await showAdaptiveDialog( context: context, diff --git a/lib/pages/settings_notifications/settings_notifications_view.dart b/lib/pages/settings_notifications/settings_notifications_view.dart index 8259cfe2..5464b724 100644 --- a/lib/pages/settings_notifications/settings_notifications_view.dart +++ b/lib/pages/settings_notifications/settings_notifications_view.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_notifications/push_rule_extensions.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/localized_exception_extension.dart'; import '../../widgets/matrix.dart'; import 'settings_notifications.dart'; diff --git a/lib/pages/settings_password/settings_password.dart b/lib/pages/settings_password/settings_password.dart index 413f8025..e248e7c0 100644 --- a/lib/pages/settings_password/settings_password.dart +++ b/lib/pages/settings_password/settings_password.dart @@ -1,11 +1,9 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_password/settings_password_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; class SettingsPassword extends StatefulWidget { const SettingsPassword({super.key}); @@ -25,7 +23,9 @@ class SettingsPasswordController extends State { bool loading = false; - void changePassword() async { + Future changePassword() async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); setState(() { oldPasswordError = newPassword1Error = newPassword2Error = null; }); @@ -53,13 +53,13 @@ class SettingsPasswordController extends State { loading = true; }); try { - final scaffoldMessenger = ScaffoldMessenger.of(context); await Matrix.of(context).client.changePassword( newPassword1Controller.text, oldPassword: oldPasswordController.text, ); + if (!mounted) return; scaffoldMessenger.showSnackBar( - SnackBar(content: Text(L10n.of(context).passwordHasBeenChanged)), + SnackBar(content: Text(l10n.passwordHasBeenChanged)), ); if (mounted) context.pop(); } catch (e) { diff --git a/lib/pages/settings_password/settings_password_view.dart b/lib/pages/settings_password/settings_password_view.dart index fc0904a9..593712e2 100644 --- a/lib/pages/settings_password/settings_password_view.dart +++ b/lib/pages/settings_password/settings_password_view.dart @@ -1,10 +1,8 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_password/settings_password.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; class SettingsPasswordView extends StatelessWidget { final SettingsPasswordController controller; diff --git a/lib/pages/settings_security/settings_security.dart b/lib/pages/settings_security/settings_security.dart index 688feb4b..a0c5754a 100644 --- a/lib/pages/settings_security/settings_security.dart +++ b/lib/pages/settings_security/settings_security.dart @@ -1,7 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; @@ -9,6 +5,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart' import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import 'settings_security_view.dart'; class SettingsSecurity extends StatefulWidget { @@ -19,21 +18,22 @@ class SettingsSecurity extends StatefulWidget { } class SettingsSecurityController extends State { - void setAppLockAction() async { + Future setAppLockAction() async { + final l10n = L10n.of(context); if (AppLock.of(context).isActive) { AppLock.of(context).showLockScreen(); } final newLock = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).pleaseChooseAPasscode, - message: L10n.of(context).pleaseEnter4Digits, - cancelLabel: L10n.of(context).cancel, + title: l10n.pleaseChooseAPasscode, + message: l10n.pleaseEnter4Digits, + cancelLabel: l10n.cancel, validator: (text) { if (text.isEmpty || (text.length == 4 && int.tryParse(text)! >= 0)) { return null; } - return L10n.of(context).pleaseEnter4Digits; + return l10n.pleaseEnter4Digits; }, keyboardType: TextInputType.number, obscureText: true, @@ -42,58 +42,62 @@ class SettingsSecurityController extends State { maxLength: 4, ); if (newLock != null) { + if (!mounted) return; await AppLock.of(context).changePincode(newLock); } } - void deleteAccountAction() async { + Future deleteAccountAction() async { + final l10n = L10n.of(context); + final matrix = Matrix.of(context); if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context).warning, - message: L10n.of(context).deactivateAccountWarning, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, + title: l10n.warning, + message: l10n.deactivateAccountWarning, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, isDestructive: true, ) == OkCancelResult.cancel) { return; } - final supposedMxid = Matrix.of(context).client.userID!; + if (!mounted) return; + final supposedMxid = matrix.client.userID!; final mxid = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context).confirmMatrixId, - validator: (text) => text == supposedMxid - ? null - : L10n.of(context).supposedMxid(supposedMxid), + title: l10n.confirmMatrixId, + validator: (text) => + text == supposedMxid ? null : l10n.supposedMxid(supposedMxid), isDestructive: true, - okLabel: L10n.of(context).delete, - cancelLabel: L10n.of(context).cancel, + okLabel: l10n.delete, + cancelLabel: l10n.cancel, ); if (mxid == null || mxid.isEmpty || mxid != supposedMxid) { return; } + if (!mounted) return; final resp = await showFutureLoadingDialog( context: context, delay: false, - future: () => - Matrix.of(context).client.uiaRequestBackground( - (auth) => Matrix.of(context).client.deactivateAccount(auth: auth), - ), + future: () => matrix.client.uiaRequestBackground( + (auth) => matrix.client.deactivateAccount(auth: auth, erase: true), + ), ); if (!resp.isError) { + if (!mounted) return; await showFutureLoadingDialog( context: context, - future: () => Matrix.of(context).client.logout(), + future: () => matrix.client.logout(), ); } } Future dehydrateAction() => Matrix.of(context).dehydrateAction(context); - void changeShareKeysWith(ShareKeysWith? shareKeysWith) async { + Future changeShareKeysWith(ShareKeysWith? shareKeysWith) async { if (shareKeysWith == null) return; AppSettings.shareKeysWith.setItem(shareKeysWith.name); Matrix.of(context).client.shareKeysWith = shareKeysWith; diff --git a/lib/pages/settings_security/settings_security_view.dart b/lib/pages/settings_security/settings_security_view.dart index 2d38a5c4..05d4599d 100644 --- a/lib/pages/settings_security/settings_security_view.dart +++ b/lib/pages/settings_security/settings_security_view.dart @@ -1,8 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; @@ -12,6 +7,10 @@ import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/settings_switch_list_tile.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; + import 'settings_security.dart'; class SettingsSecurityView extends StatelessWidget { diff --git a/lib/pages/settings_style/settings_style.dart b/lib/pages/settings_style/settings_style.dart index b22e98fb..7e8e45f4 100644 --- a/lib/pages/settings_style/settings_style.dart +++ b/lib/pages/settings_style/settings_style.dart @@ -1,13 +1,11 @@ -import 'package:flutter/material.dart'; - import 'package:file_picker/file_picker.dart'; - -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/theme_builder.dart'; +import 'package:flutter/material.dart'; + import '../../widgets/matrix.dart'; import 'settings_style_view.dart'; @@ -19,18 +17,19 @@ class SettingsStyle extends StatefulWidget { } class SettingsStyleController extends State { - void setChatColor(Color? color) async { + void setChatColor(Color? color) { AppSettings.colorSchemeSeedInt.setItem( color?.toARGB32() ?? AppSettings.colorSchemeSeedInt.defaultValue, ); ThemeController.of(context).setPrimaryColor(color); } - void setWallpaper() async { + Future setWallpaper() async { final client = Matrix.of(context).client; final picked = await selectFiles(context, type: FileType.image); final pickedFile = picked.firstOrNull; if (pickedFile == null) return; + if (!mounted) return; await showFutureLoadingDialog( context: context, @@ -53,7 +52,7 @@ class SettingsStyleController extends State { double? _wallpaperOpacity; - void saveWallpaperOpacity(double opacity) async { + Future saveWallpaperOpacity(double opacity) async { final client = Matrix.of(context).client; final result = await showFutureLoadingDialog( context: context, @@ -80,7 +79,7 @@ class SettingsStyleController extends State { 0.5; double? _wallpaperBlur; - void saveWallpaperBlur(double blur) async { + Future saveWallpaperBlur(double blur) async { final client = Matrix.of(context).client; final result = await showFutureLoadingDialog( context: context, @@ -111,32 +110,6 @@ class SettingsStyleController extends State { ThemeMode get currentTheme => ThemeController.of(context).themeMode; Color? get currentColor => ThemeController.of(context).primaryColor; - static final List customColors = [ - null, - AppConfig.chatColor, - Colors.indigo, - Colors.blue, - Colors.blueAccent, - Colors.teal, - Colors.tealAccent, - Colors.green, - Colors.greenAccent, - Colors.yellow, - Colors.yellowAccent, - Colors.orange, - Colors.orangeAccent, - Colors.red, - Colors.redAccent, - Colors.pink, - Colors.pinkAccent, - Colors.purple, - Colors.purpleAccent, - Colors.blueGrey, - Colors.grey, - Colors.white, - Colors.black, - ]; - void switchTheme(ThemeMode? newTheme) { if (newTheme == null) return; switch (newTheme) { @@ -153,7 +126,7 @@ class SettingsStyleController extends State { setState(() {}); } - void changeFontSizeFactor(double d) async { + Future changeFontSizeFactor(double d) async { await AppSettings.fontSizeFactor.setItem(d); setState(() {}); } diff --git a/lib/pages/settings_style/settings_style_view.dart b/lib/pages/settings_style/settings_style_view.dart index 213cf5d5..5cb9d4d1 100644 --- a/lib/pages/settings_style/settings_style_view.dart +++ b/lib/pages/settings_style/settings_style_view.dart @@ -1,10 +1,6 @@ import 'dart:ui'; -import 'package:flutter/material.dart'; - import 'package:dynamic_color/dynamic_color.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -15,6 +11,9 @@ import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/app_config.dart'; import '../../widgets/settings_switch_list_tile.dart'; import 'settings_style.dart'; @@ -82,14 +81,13 @@ class SettingsStyleView extends StatelessWidget { Theme.of(context).brightness == Brightness.light ? light?.primary : dark?.primary; - final colors = List.from( - SettingsStyleController.customColors, - ); + final colors = [null, AppConfig.chatColor, ...Colors.primaries]; if (systemColor == null) { colors.remove(null); } return GridView.builder( shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 64, ), @@ -201,7 +199,7 @@ class SettingsStyleView extends StatelessWidget { type: EventTypes.RoomMember, senderId: client.userID!, originServerTs: DateTime.now(), - stateKey: client.userID!, + stateKey: client.userID, ), ), Padding( diff --git a/lib/pages/sign_in/sign_in_page.dart b/lib/pages/sign_in/sign_in_page.dart index 8dd4390a..c5ee696b 100644 --- a/lib/pages/sign_in/sign_in_page.dart +++ b/lib/pages/sign_in/sign_in_page.dart @@ -1,17 +1,15 @@ -import 'package:flutter/material.dart'; - -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/sign_in/view_model/flows/check_homeserver.dart'; import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; import 'package:fluffychat/pages/sign_in/view_model/sign_in_view_model.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/utils/sign_in_flows/check_homeserver.dart'; import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/view_model_builder.dart'; +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class SignInPage extends StatelessWidget { final bool signUp; @@ -28,6 +26,13 @@ class SignInPage extends StatelessWidget { final selectedHomserver = state.selectedHomeserver; return LoginScaffold( appBar: AppBar( + leading: + state.loginLoading.connectionState == ConnectionState.waiting + ? CloseButton( + onPressed: () => + viewModel.setLoginLoading(AsyncSnapshot.nothing()), + ) + : BackButton(onPressed: Navigator.of(context).pop), backgroundColor: theme.colorScheme.surface, surfaceTintColor: theme.colorScheme.surface, scrolledUnderElevation: 0, @@ -37,106 +42,119 @@ class SignInPage extends StatelessWidget { ? L10n.of(context).createNewAccount : L10n.of(context).login, ), - bottom: PreferredSize( - preferredSize: const Size.fromHeight(56 + 60), - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: .min, - crossAxisAlignment: .center, - spacing: 12, - children: [ - SelectableText( - signUp - ? L10n.of(context).signUpGreeting - : L10n.of(context).signInGreeting, - textAlign: .center, - ), - TextField( - readOnly: - state.publicHomeservers.connectionState == - ConnectionState.waiting, - controller: viewModel.filterTextController, - decoration: InputDecoration( - filled: true, - fillColor: theme.colorScheme.secondaryContainer, - border: OutlineInputBorder( - borderSide: BorderSide.none, - borderRadius: BorderRadius.circular(99), - ), - errorText: state.publicHomeservers.error - ?.toLocalizedString(context), - prefixIcon: const Icon(Icons.search_outlined), - hintText: 'Search or enter homeserver address', - ), - ), - ], - ), - ), - ), ), - body: state.publicHomeservers.connectionState == ConnectionState.done - ? Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Material( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - clipBehavior: Clip.hardEdge, - color: theme.colorScheme.surfaceContainerLow, - child: RadioGroup( - groupValue: state.selectedHomeserver, - onChanged: viewModel.selectHomeserver, - child: ListView.builder( - itemCount: publicHomeservers.length, - itemBuilder: (context, i) { - final server = publicHomeservers[i]; - return RadioListTile.adaptive( - value: server, - radioScaleFactor: 2, - secondary: IconButton( - icon: const Icon(Icons.link_outlined), - onPressed: () => launchUrlString( - server.homepage ?? 'https://${server.name}', - ), - ), - title: Row( - spacing: 4, - children: [ - Expanded(child: Text(server.name ?? 'Unknown')), - ...?server.languages?.map( - (language) => Material( - borderRadius: BorderRadius.circular( - AppConfig.borderRadius, - ), - color: theme.colorScheme.tertiaryContainer, - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 6.0, - vertical: 3.0, - ), - child: Text( - language, - style: TextStyle( - fontSize: 10, - color: theme - .colorScheme - .onTertiaryContainer, - ), - ), - ), + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + spacing: 16, + children: [ + SelectableText( + signUp + ? L10n.of(context).signUpGreeting + : L10n.of(context).signInGreeting, + textAlign: .center, + ), + TextField( + readOnly: + state.publicHomeservers.connectionState == + ConnectionState.waiting || + state.loginLoading.connectionState == + ConnectionState.waiting, + controller: viewModel.filterTextController, + autocorrect: false, + keyboardType: TextInputType.url, + decoration: InputDecoration( + filled: true, + fillColor: theme.colorScheme.secondaryContainer, + border: OutlineInputBorder( + borderSide: BorderSide.none, + borderRadius: BorderRadius.circular(99), + ), + errorText: state.publicHomeservers.error?.toLocalizedString( + context, + ), + prefixIcon: const Icon(Icons.search_outlined), + hintText: L10n.of(context).searchOrEnterHomeserverAddress, + ), + ), + if (state.publicHomeservers.connectionState == + ConnectionState.done) + Expanded( + child: Material( + borderRadius: BorderRadius.circular( + AppConfig.borderRadius, + ), + clipBehavior: Clip.hardEdge, + color: theme.colorScheme.surfaceContainerLow, + child: RadioGroup( + groupValue: state.selectedHomeserver, + onChanged: viewModel.selectHomeserver, + child: ListView.builder( + itemCount: publicHomeservers.length, + itemBuilder: (context, i) { + final server = publicHomeservers[i]; + final website = server.website; + return RadioListTile( + value: server, + enabled: + state.loginLoading.connectionState != + ConnectionState.waiting, + title: Row( + children: [ + Expanded( + child: Text(server.name ?? 'Unknown'), ), - ), - ], - ), - subtitle: Column( - spacing: 4.0, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - if (server.features?.isNotEmpty == true) - Row( - spacing: 4.0, - children: server.features! - .map( + if (website != null) + SizedBox.square( + dimension: 32, + child: IconButton( + icon: const Icon( + Icons.open_in_new_outlined, + size: 16, + ), + onPressed: () => + launchUrlString(website), + ), + ), + ], + ), + subtitle: Column( + spacing: 4.0, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (server.features?.isNotEmpty == true) + Wrap( + spacing: 4.0, + runSpacing: 4.0, + children: [ + ...?server.languages?.map( + (language) => Material( + borderRadius: BorderRadius.circular( + AppConfig.borderRadius, + ), + color: theme + .colorScheme + .tertiaryContainer, + child: Padding( + padding: + const EdgeInsets.symmetric( + horizontal: 6.0, + vertical: 3.0, + ), + child: Text( + language, + style: TextStyle( + fontSize: 10, + color: theme + .colorScheme + .onTertiaryContainer, + ), + ), + ), + ), + ), + ...server.features!.map( (feature) => Material( borderRadius: BorderRadius.circular( AppConfig.borderRadius, @@ -161,21 +179,25 @@ class SignInPage extends StatelessWidget { ), ), ), - ) - .toList(), + ), + ], + ), + Text( + server.description ?? 'A matrix homeserver', ), - Text( - server.description ?? 'A matrix homeserver', - ), - ], - ), - ); - }, + ], + ), + ); + }, + ), ), ), - ), - ) - : Center(child: CircularProgressIndicator.adaptive()), + ) + else + Center(child: CircularProgressIndicator.adaptive()), + ], + ), + ), bottomNavigationBar: AnimatedSize( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, @@ -184,26 +206,30 @@ class SignInPage extends StatelessWidget { !publicHomeservers.contains(selectedHomserver) ? const SizedBox.shrink() : Material( - elevation: 8, - shadowColor: theme.appBarTheme.shadowColor, child: Padding( padding: const EdgeInsets.all(16.0), - child: ElevatedButton( - onPressed: - state.loginLoading.connectionState == - ConnectionState.waiting - ? null - : () => connectToHomeserverFlow( - selectedHomserver, - context, - viewModel.setLoginLoading, - signUp, - ), - child: - state.loginLoading.connectionState == - ConnectionState.waiting - ? const CircularProgressIndicator.adaptive() - : Text(L10n.of(context).continueText), + child: SafeArea( + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: theme.colorScheme.primary, + foregroundColor: theme.colorScheme.onPrimary, + ), + onPressed: + state.loginLoading.connectionState == + ConnectionState.waiting + ? null + : () => connectToHomeserverFlow( + selectedHomserver, + context, + viewModel.setLoginLoading, + signUp, + ), + child: + state.loginLoading.connectionState == + ConnectionState.waiting + ? const CircularProgressIndicator.adaptive() + : Text(L10n.of(context).continueText), + ), ), ), ), diff --git a/lib/pages/sign_in/view_model/flows/sort_homeservers.dart b/lib/pages/sign_in/view_model/flows/sort_homeservers.dart deleted file mode 100644 index 7c54a01b..00000000 --- a/lib/pages/sign_in/view_model/flows/sort_homeservers.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; - -int sortHomeservers(PublicHomeserverData a, PublicHomeserverData b) { - return _calcHomeserverScore(b).compareTo(_calcHomeserverScore(a)); -} - -int _calcHomeserverScore(PublicHomeserverData homeserver) { - var score = 0; - if (homeserver.description?.isNotEmpty == true) score++; - if (homeserver.homepage?.isNotEmpty == true) score++; - score += (homeserver.languages?.length ?? 0); - score += (homeserver.features?.length ?? 0); - score += (homeserver.onlineStatus ?? 0); - if (homeserver.ipv6 == true) score++; - if (homeserver.isp?.isNotEmpty == true) score++; - if (homeserver.privacy?.isNotEmpty == true) score++; - if (homeserver.rules?.isNotEmpty == true) score++; - if (homeserver.version?.isNotEmpty == true) score++; - if (homeserver.usingVanillaReg == true) score--; - if (homeserver.regLink != null) score--; - if (homeserver.regMethod != 'SSO') score--; - if (homeserver.regMethod == 'In-house Element') score--; - return score; -} diff --git a/lib/pages/sign_in/view_model/flows/sso_login.dart b/lib/pages/sign_in/view_model/flows/sso_login.dart deleted file mode 100644 index 830693ef..00000000 --- a/lib/pages/sign_in/view_model/flows/sso_login.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; -import 'package:matrix/matrix.dart'; -import 'package:universal_html/html.dart' as html; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; - -Future ssoLoginFlow( - Client client, - BuildContext context, - bool signUp, -) async { - final redirectUrl = kIsWeb - ? Uri.parse( - html.window.location.href, - ).resolveUri(Uri(pathSegments: ['auth.html'])).toString() - : (PlatformInfos.isMobile || PlatformInfos.isWeb || PlatformInfos.isMacOS) - ? '${AppConfig.appOpenUrlScheme.toLowerCase()}://login' - : 'http://localhost:3001//login'; - - final url = client.homeserver!.replace( - path: '/_matrix/client/v3/login/sso/redirect', - queryParameters: { - 'redirectUrl': redirectUrl, - 'action': signUp ? 'register' : 'login', - }, - ); - - final urlScheme = - (PlatformInfos.isMobile || PlatformInfos.isWeb || PlatformInfos.isMacOS) - ? Uri.parse(redirectUrl).scheme - : "http://localhost:3001"; - final result = await FlutterWebAuth2.authenticate( - url: url.toString(), - callbackUrlScheme: urlScheme, - options: FlutterWebAuth2Options(useWebview: PlatformInfos.isMobile), - ); - final token = Uri.parse(result).queryParameters['loginToken']; - if (token?.isEmpty ?? false) return; - - await client.login( - LoginType.mLoginToken, - token: token, - initialDeviceDisplayName: PlatformInfos.clientName, - ); -} diff --git a/lib/pages/sign_in/view_model/model/public_homeserver_data.dart b/lib/pages/sign_in/view_model/model/public_homeserver_data.dart index b8046b82..4d484eb1 100644 --- a/lib/pages/sign_in/view_model/model/public_homeserver_data.dart +++ b/lib/pages/sign_in/view_model/model/public_homeserver_data.dart @@ -1,7 +1,7 @@ class PublicHomeserverData { final String? name; final String? clientDomain; - final String? homepage; + final String? website; final String? isp; final String? staffJur; final String? rules; @@ -26,7 +26,7 @@ class PublicHomeserverData { PublicHomeserverData({ this.name, this.clientDomain, - this.homepage, + this.website, this.isp, this.staffJur, this.rules, @@ -53,7 +53,7 @@ class PublicHomeserverData { return PublicHomeserverData( name: json['name'], clientDomain: json['client_domain'], - homepage: json['homepage'], + website: json['website'], isp: json['isp'], staffJur: json['staff_jur'], rules: json['rules'], diff --git a/lib/pages/sign_in/view_model/sign_in_state.dart b/lib/pages/sign_in/view_model/sign_in_state.dart index 84213152..d72c715a 100644 --- a/lib/pages/sign_in/view_model/sign_in_state.dart +++ b/lib/pages/sign_in/view_model/sign_in_state.dart @@ -1,6 +1,5 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; +import 'package:flutter/material.dart'; class SignInState { final PublicHomeserverData? selectedHomeserver; diff --git a/lib/pages/sign_in/view_model/sign_in_view_model.dart b/lib/pages/sign_in/view_model/sign_in_view_model.dart index 55ff005c..3d453219 100644 --- a/lib/pages/sign_in/view_model/sign_in_view_model.dart +++ b/lib/pages/sign_in/view_model/sign_in_view_model.dart @@ -1,16 +1,13 @@ import 'dart:convert'; -import 'package:flutter/widgets.dart'; - import 'package:collection/collection.dart'; -import 'package:matrix/matrix_api_lite/utils/logs.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; -import 'package:fluffychat/pages/sign_in/view_model/flows/sort_homeservers.dart'; import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; import 'package:fluffychat/pages/sign_in/view_model/sign_in_state.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/widgets.dart'; +import 'package:matrix/matrix_api_lite/utils/logs.dart'; class SignInViewModel extends ValueNotifier { final MatrixState matrixService; @@ -39,20 +36,21 @@ class SignInViewModel extends ValueNotifier { ) .toList() ?? []; - final splitted = filterText.split('.'); - if (splitted.length >= 2 && !splitted.any((part) => part.isEmpty)) { - if (!filteredPublicHomeservers.any( - (homeserver) => homeserver.name == filterText, - )) { - filteredPublicHomeservers.add(PublicHomeserverData(name: filterText)); - } + if (filterText.length >= 3 && + (filterText.contains('.') || filterText == 'localhost') && + Uri.tryParse(filterText) != null && + !filteredPublicHomeservers.any( + (homeserver) => homeserver.name == filterText, + )) { + filteredPublicHomeservers.add(PublicHomeserverData(name: filterText)); } + value = value.copyWith( filteredPublicHomeservers: filteredPublicHomeservers, ); } - void refreshPublicHomeservers() async { + Future refreshPublicHomeservers() async { value = value.copyWith(publicHomeservers: AsyncSnapshot.waiting()); final defaultHomeserverData = PublicHomeserverData( name: AppSettings.defaultHomeserver.value, @@ -73,15 +71,13 @@ class SignInViewModel extends ValueNotifier { }); } - publicHomeservers.sort(sortHomeservers); + final defaultServer = publicHomeservers.singleWhereOrNull( + (server) => server.name == AppSettings.defaultHomeserver.value, + ); - final defaultServer = - publicHomeservers.singleWhereOrNull( - (server) => server.name == AppSettings.defaultHomeserver.value, - ) ?? - defaultHomeserverData; - - publicHomeservers.insert(0, defaultServer); + if (defaultServer == null) { + publicHomeservers.insert(0, defaultHomeserverData); + } value = value.copyWith( selectedHomeserver: value.selectedHomeserver ?? publicHomeservers.first, diff --git a/lib/utils/adaptive_bottom_sheet.dart b/lib/utils/adaptive_bottom_sheet.dart index a0e187d3..f3563c59 100644 --- a/lib/utils/adaptive_bottom_sheet.dart +++ b/lib/utils/adaptive_bottom_sheet.dart @@ -1,9 +1,8 @@ import 'dart:math'; -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:flutter/material.dart'; Future showAdaptiveBottomSheet({ required BuildContext context, diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index 4e0f91f1..a4265231 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -23,9 +23,14 @@ import 'dart:io'; import 'dart:isolate'; import 'dart:ui'; +//import 'package:fcm_shared_isolate/fcm_shared_isolate.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/main.dart'; +import 'package:fluffychat/utils/notification_background_handler.dart'; +import 'package:fluffychat/utils/push_helper.dart'; +import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_new_badger/flutter_new_badger.dart'; import 'package:http/http.dart' as http; @@ -33,22 +38,11 @@ import 'package:matrix/matrix.dart'; import 'package:unifiedpush/unifiedpush.dart'; import 'package:unifiedpush_ui/unifiedpush_ui.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/main.dart'; -import 'package:fluffychat/utils/notification_background_handler.dart'; -import 'package:fluffychat/utils/push_helper.dart'; -import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import '../config/app_config.dart'; import '../config/setting_keys.dart'; import '../widgets/matrix.dart'; import 'platform_infos.dart'; -//import 'package:fcm_shared_isolate/fcm_shared_isolate.dart'; - -class NoTokenException implements Exception { - String get cause => 'Cannot get firebase token'; -} - class BackgroundPush { static BackgroundPush? _instance; final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = @@ -76,7 +70,7 @@ class BackgroundPush { bool upAction = false; - void _init() async { + Future _init() async { //firebaseEnabled = true; try { mainIsolateReceivePort?.listen((message) async { @@ -112,7 +106,7 @@ class BackgroundPush { }); } await _flutterLocalNotificationsPlugin.initialize( - const InitializationSettings( + settings: const InitializationSettings( android: AndroidInitializationSettings('notifications_icon'), iOS: DarwinInitializationSettings(), ), @@ -128,7 +122,7 @@ class BackgroundPush { //firebase.setListeners( // onMessage: (message) => pushHelper( // PushNotification.fromJson( - // Map.from(message['data'] ?? message), + // message.tryGetMap('data') ?? message, // ), // client: client, // l10n: l10n, @@ -170,7 +164,7 @@ class BackgroundPush { Future cancelNotification(String roomId) async { Logs().v('Cancel notification for room', roomId); - await _flutterLocalNotificationsPlugin.cancel(roomId.hashCode); + await _flutterLocalNotificationsPlugin.cancel(id: roomId.hashCode); // Workaround for app icon badge not updating if (Platform.isIOS) { @@ -235,7 +229,7 @@ class BackgroundPush { currentPushers.first.data.format == AppSettings.pushNotificationsPusherFormat.value && mapEquals(currentPushers.single.data.additionalProperties, { - "data_message": pusherDataMessageFormat, + 'data_message': pusherDataMessageFormat, })) { Logs().i('[Push] Pusher already set'); } else { @@ -273,7 +267,7 @@ class BackgroundPush { data: PusherData( url: Uri.parse(gatewayUrl!), format: AppSettings.pushNotificationsPusherFormat.value, - additionalProperties: {"data_message": pusherDataMessageFormat}, + additionalProperties: {'data_message': pusherDataMessageFormat}, ), kind: 'http', ), @@ -294,7 +288,7 @@ class BackgroundPush { static bool _wentToRoomOnStartup = false; Future setupPush() async { - Logs().d("SetupPush"); + Logs().d('SetupPush'); if (client.onLoginStateChanged.value != LoginState.loggedIn || !PlatformInfos.isMobile || matrix == null) { @@ -357,6 +351,9 @@ class BackgroundPush { Future setupFirebase() async { Logs().v('Setup firebase'); if (_fcmToken?.isEmpty ?? true) { + if (PlatformInfos.isIOS) { + //await firebase.requestPermission(); + } try { //_fcmToken = await firebase.getToken(); if (_fcmToken == null) throw ('PushToken is null'); @@ -375,7 +372,7 @@ class BackgroundPush { Future setupUp() async { await UnifiedPushUi( context: matrix!.context, - instances: ["default"], + instances: ['default'], unifiedPushFunctions: UPFunctions(), showNoDistribDialog: false, onNoDistribDialogDismissed: () {}, // TODO: Implement me diff --git a/lib/utils/client_download_content_extension.dart b/lib/utils/client_download_content_extension.dart index b93357a0..24a5868d 100644 --- a/lib/utils/client_download_content_extension.dart +++ b/lib/utils/client_download_content_extension.dart @@ -22,7 +22,7 @@ extension ClientDownloadContentExtension on Client { width: width, height: height, animated: animated, - method: thumbnailMethod!, + method: thumbnailMethod, ) : mxc; diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index c318ceb1..9792523b 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -1,9 +1,14 @@ import 'dart:io'; -import 'package:flutter/foundation.dart'; - import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/custom_http_client.dart'; +import 'package:fluffychat/utils/custom_image_resizer.dart'; +import 'package:fluffychat/utils/init_with_restore.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod; import 'package:matrix/encryption/utils/key_verification.dart'; @@ -11,11 +16,6 @@ import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/config/setting_keys.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/custom_http_client.dart'; -import 'package:fluffychat/utils/init_with_restore.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; import 'matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart'; abstract class ClientManager { @@ -122,6 +122,9 @@ abstract class ClientManager { // To make room emotes work 'im.ponies.room_emotes', }, + customImageResizer: PlatformInfos.supportsCustomImageResizer + ? customImageResizer + : null, logLevel: kReleaseMode ? Level.warning : Level.verbose, database: await flutterMatrixSdkDatabaseBuilder(clientName), supportedLoginTypes: { @@ -136,14 +139,16 @@ abstract class ClientManager { (share) => share.name == shareKeysWith, ) ?? ShareKeysWith.all, - convertLinebreaksInFormatting: false, onSoftLogout: enableSoftLogout ? (client) => client.refreshAccessToken() : null, + sendTimelineEventTimeout: Duration( + seconds: AppSettings.sendTimelineEventTimeout.value, + ), ); } - static void sendInitNotification(String title, String body) async { + static Future sendInitNotification(String title, String body) async { if (kIsWeb) { html.Notification(title, body: body); return; @@ -161,17 +166,17 @@ abstract class ClientManager { final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); await flutterLocalNotificationsPlugin.initialize( - const InitializationSettings( + settings: const InitializationSettings( android: AndroidInitializationSettings('notifications_icon'), iOS: DarwinInitializationSettings(), ), ); - flutterLocalNotificationsPlugin.show( - 0, - title, - body, - const NotificationDetails( + await flutterLocalNotificationsPlugin.show( + id: 0, + title: title, + body: body, + notificationDetails: const NotificationDetails( android: AndroidNotificationDetails( 'error_message', 'Error Messages', diff --git a/lib/utils/custom_http_client.dart b/lib/utils/custom_http_client.dart index 66b1dcad..0bd9961d 100644 --- a/lib/utils/custom_http_client.dart +++ b/lib/utils/custom_http_client.dart @@ -1,13 +1,12 @@ import 'dart:convert'; import 'dart:io'; +import 'package:fluffychat/config/isrg_x1.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; import 'package:http/http.dart' as http; import 'package:http/io_client.dart'; import 'package:http/retry.dart' as retry; -import 'package:fluffychat/config/isrg_x1.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; - /// Custom Client to add an additional certificate. This is for the isrg X1 /// certificate which is needed for LetsEncrypt certificates. It is shipped /// on Android since OS version 7.1. As long as we support older versions we diff --git a/lib/utils/custom_image_resizer.dart b/lib/utils/custom_image_resizer.dart new file mode 100644 index 00000000..9be5f206 --- /dev/null +++ b/lib/utils/custom_image_resizer.dart @@ -0,0 +1,101 @@ +import 'dart:ui'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/painting.dart'; + +import 'package:matrix/matrix.dart'; +import 'package:native_imaging/native_imaging.dart' as native; + +(int, int) _scaleToBox(int width, int height, {required int boxSize}) { + final fit = applyBoxFit( + BoxFit.scaleDown, + Size(width.toDouble(), height.toDouble()), + Size(boxSize.toDouble(), boxSize.toDouble()), + ).destination; + return (fit.width.round(), fit.height.round()); +} + +Future customImageResizer( + MatrixImageFileResizeArguments arguments, +) async { + await native.init(); + + var imageBytes = arguments.bytes; + String? blurhash; + + var originalWidth = 0; + var originalHeight = 0; + var width = 0; + var height = 0; + + try { + // for the other platforms + final dartCodec = await instantiateImageCodec(arguments.bytes); + final frameCount = dartCodec.frameCount; + final dartFrame = await dartCodec.getNextFrame(); + final rgbaData = await dartFrame.image.toByteData(); + if (rgbaData == null) { + return null; + } + final rgba = Uint8List.view( + rgbaData.buffer, + rgbaData.offsetInBytes, + rgbaData.lengthInBytes, + ); + + width = originalWidth = dartFrame.image.width; + height = originalHeight = dartFrame.image.height; + + var nativeImg = native.Image.fromRGBA(width, height, rgba); + + dartFrame.image.dispose(); + dartCodec.dispose(); + + if (arguments.calcBlurhash) { + // scale down image for blurhashing to speed it up + final (blurW, blurH) = _scaleToBox(width, height, boxSize: 100); + final blurhashImg = nativeImg.resample( + blurW, + blurH, + // nearest is unsupported... + native.Transform.bilinear, + ); + + blurhash = blurhashImg.toBlurhash(3, 3); + + blurhashImg.free(); + } + + if (frameCount > 1) { + // Don't scale down animated images, since those would lose frames. + nativeImg.free(); + } else { + final max = arguments.maxDimension; + if (width > max || height > max) { + (width, height) = _scaleToBox(width, height, boxSize: max); + + final scaledImg = nativeImg.resample( + width, + height, + native.Transform.lanczos, + ); + nativeImg.free(); + nativeImg = scaledImg; + } + + imageBytes = await nativeImg.toJpeg(75); + nativeImg.free(); + } + } catch (e, s) { + Logs().e('Could not generate preview', e, s); + } + + return MatrixImageFileResizedResponse( + bytes: imageBytes, + width: width, + height: height, + originalWidth: originalWidth, + originalHeight: originalHeight, + blurhash: blurhash, + ); +} diff --git a/lib/utils/date_time_extension.dart b/lib/utils/date_time_extension.dart index 508f13e2..7efed644 100644 --- a/lib/utils/date_time_extension.dart +++ b/lib/utils/date_time_extension.dart @@ -1,9 +1,7 @@ -import 'package:flutter/material.dart'; - -import 'package:intl/intl.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; /// Provides extra functionality for formatting the time. extension DateTimeExtension on DateTime { diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index c0ed2a3e..66e5540b 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher.dart'; class ErrorReporter { final BuildContext? context; @@ -15,21 +13,21 @@ class ErrorReporter { const ErrorReporter(this.context, [this.message]); static const Set ingoredTypes = { - "IOException", - "ClientException", - "SocketException", - "TlsException", - "HandshakeException", + 'IOException', + 'ClientException', + 'SocketException', + 'TlsException', + 'HandshakeException', }; - void onErrorCallback(Object error, [StackTrace? stackTrace]) { + Future onErrorCallback(Object error, [StackTrace? stackTrace]) async { if (ingoredTypes.contains(error.runtimeType.toString())) return; Logs().e(message ?? 'Error caught', error, stackTrace); final text = '$error\n${stackTrace ?? ''}'; return _onErrorCallback(text); } - void _onErrorCallback(String text) async { + Future _onErrorCallback(String text) async { await showAdaptiveDialog( context: context!, builder: (context) => AlertDialog.adaptive( diff --git a/lib/utils/file_description.dart b/lib/utils/file_description.dart index 55ff840b..aa6c98ca 100644 --- a/lib/utils/file_description.dart +++ b/lib/utils/file_description.dart @@ -12,16 +12,11 @@ extension FileDescriptionExtension on Event { return null; } final filename = content.tryGet('filename'); - final body = content.tryGet('body'); + final body = calcUnlocalizedBody(hideReply: true, plaintextBody: true); if (filename != body && - body != null && filename != null && - body.isNotEmpty) { - final formattedBody = content.tryGet('formatted_body'); - if (formattedBody != null && formattedBody.isNotEmpty) { - return formattedBody; - } + content.tryGet('body')?.isNotEmpty == true) { return body; } return null; diff --git a/lib/utils/file_selector.dart b/lib/utils/file_selector.dart index 97e229c2..a4aacc1d 100644 --- a/lib/utils/file_selector.dart +++ b/lib/utils/file_selector.dart @@ -1,10 +1,8 @@ -import 'package:flutter/widgets.dart'; - import 'package:file_picker/file_picker.dart'; import 'package:file_selector/file_selector.dart'; - import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/widgets.dart'; Future> selectFiles( BuildContext context, { diff --git a/lib/utils/fluffy_share.dart b/lib/utils/fluffy_share.dart index c2bd2a5d..7a52d286 100644 --- a/lib/utils/fluffy_share.dart +++ b/lib/utils/fluffy_share.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -import 'package:share_plus/share_plus.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:share_plus/share_plus.dart'; + import '../widgets/matrix.dart'; abstract class FluffyShare { @@ -13,6 +12,8 @@ abstract class FluffyShare { BuildContext context, { bool copyOnly = false, }) async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); if (PlatformInfos.isMobile && !copyOnly) { final box = context.findRenderObject() as RenderBox; await SharePlus.instance.share( @@ -24,17 +25,21 @@ abstract class FluffyShare { return; } await Clipboard.setData(ClipboardData(text: text)); - ScaffoldMessenger.of( - context, - ).showSnackBar(SnackBar(content: Text(L10n.of(context).copiedToClipboard))); + if (!PlatformInfos.isMobile) { + scaffoldMessenger.showSnackBar( + SnackBar(showCloseIcon: true, content: Text(l10n.copiedToClipboard)), + ); + } return; } static Future shareInviteLink(BuildContext context) async { + final l10n = L10n.of(context); final client = Matrix.of(context).client; final ownProfile = await client.fetchOwnProfile(); + if (!context.mounted) return; await FluffyShare.share( - L10n.of(context).inviteText( + l10n.inviteText( ownProfile.displayName ?? client.userID!, 'https://matrix.to/#/${client.userID}?client=im.fluffychat', ), diff --git a/lib/utils/init_with_restore.dart b/lib/utils/init_with_restore.dart index 71cc7f8b..5bfa5e1e 100644 --- a/lib/utils/init_with_restore.dart +++ b/lib/utils/init_with_restore.dart @@ -1,14 +1,13 @@ import 'dart:convert'; import 'dart:ui'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:matrix/matrix.dart'; class SessionBackup { final String? olmAccount; diff --git a/lib/utils/localized_exception_extension.dart b/lib/utils/localized_exception_extension.dart index 0d8ff659..208d9424 100644 --- a/lib/utils/localized_exception_extension.dart +++ b/lib/utils/localized_exception_extension.dart @@ -1,15 +1,14 @@ import 'dart:io'; import 'dart:math'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/other_party_can_receive.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - import 'package:http/http.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/other_party_can_receive.dart'; import 'uia_request_manager.dart'; extension LocalizedExceptionExtension on Object { diff --git a/lib/utils/markdown_context_builder.dart b/lib/utils/markdown_context_builder.dart index 18b5d511..b893045a 100644 --- a/lib/utils/markdown_context_builder.dart +++ b/lib/utils/markdown_context_builder.dart @@ -1,130 +1,137 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; +import 'package:flutter/material.dart'; -Widget markdownContextBuilder( - BuildContext context, - EditableTextState editableTextState, - TextEditingController controller, -) { - final value = editableTextState.textEditingValue; - final selectedText = value.selection.textInside(value.text); - final buttonItems = editableTextState.contextMenuButtonItems; - final l10n = L10n.of(context); +class MarkdownContextBuilder extends StatelessWidget { + final EditableTextState editableTextState; + final TextEditingController controller; - return AdaptiveTextSelectionToolbar.buttonItems( - anchors: editableTextState.contextMenuAnchors, - buttonItems: [ - ...buttonItems, - if (selectedText.isNotEmpty) ...[ - ContextMenuButtonItem( - label: l10n.link, - onPressed: () async { - final input = await showTextInputDialog( - context: context, - title: l10n.addLink, - okLabel: l10n.ok, - cancelLabel: l10n.cancel, - validator: (text) { - if (text.isEmpty) { - return l10n.pleaseFillOut; - } - try { - text.startsWith('http') ? Uri.parse(text) : Uri.https(text); - } catch (_) { - return l10n.invalidUrl; - } - return null; - }, - hintText: 'www...', - keyboardType: TextInputType.url, - ); - final urlString = input; - if (urlString == null) return; - final url = urlString.startsWith('http') - ? Uri.parse(urlString) - : Uri.https(urlString); - final selection = controller.selection; - controller.text = controller.text.replaceRange( - selection.start, - selection.end, - '[$selectedText](${url.toString()})', - ); - ContextMenuController.removeAny(); - }, - ), - ContextMenuButtonItem( - label: l10n.checkList, - onPressed: () { - final text = controller.text; - final selection = controller.selection; + const MarkdownContextBuilder({ + required this.editableTextState, + required this.controller, + super.key, + }); - var start = selection.textBefore(text).lastIndexOf('\n'); - if (start == -1) start = 0; - final end = selection.end; + @override + Widget build(BuildContext context) { + final value = editableTextState.textEditingValue; + final selectedText = value.selection.textInside(value.text); + final buttonItems = editableTextState.contextMenuButtonItems; + final l10n = L10n.of(context); - final fullLineSelection = TextSelection( - baseOffset: start, - extentOffset: end, - ); + return AdaptiveTextSelectionToolbar.buttonItems( + anchors: editableTextState.contextMenuAnchors, + buttonItems: [ + ...buttonItems, + if (selectedText.isNotEmpty) ...[ + ContextMenuButtonItem( + label: l10n.link, + onPressed: () async { + final input = await showTextInputDialog( + context: context, + title: l10n.addLink, + okLabel: l10n.ok, + cancelLabel: l10n.cancel, + validator: (text) { + if (text.isEmpty) { + return l10n.pleaseFillOut; + } + try { + text.startsWith('http') ? Uri.parse(text) : Uri.https(text); + } catch (_) { + return l10n.invalidUrl; + } + return null; + }, + hintText: 'www...', + keyboardType: TextInputType.url, + ); + final urlString = input; + if (urlString == null) return; + final url = urlString.startsWith('http') + ? Uri.parse(urlString) + : Uri.https(urlString); + final selection = controller.selection; + controller.text = controller.text.replaceRange( + selection.start, + selection.end, + '[$selectedText]($url)', + ); + ContextMenuController.removeAny(); + }, + ), + ContextMenuButtonItem( + label: l10n.checkList, + onPressed: () { + final text = controller.text; + final selection = controller.selection; - const checkBox = '- [ ]'; + var start = selection.textBefore(text).lastIndexOf('\n'); + if (start == -1) start = 0; + final end = selection.end; - final replacedRange = fullLineSelection - .textInside(text) - .split('\n') - .map( - (line) => line.startsWith(checkBox) || line.isEmpty - ? line - : '$checkBox $line', - ) - .join('\n'); - controller.text = controller.text.replaceRange( - start, - end, - replacedRange, - ); - ContextMenuController.removeAny(); - }, - ), - ContextMenuButtonItem( - label: l10n.boldText, - onPressed: () { - final selection = controller.selection; - controller.text = controller.text.replaceRange( - selection.start, - selection.end, - '**$selectedText**', - ); - ContextMenuController.removeAny(); - }, - ), - ContextMenuButtonItem( - label: l10n.italicText, - onPressed: () { - final selection = controller.selection; - controller.text = controller.text.replaceRange( - selection.start, - selection.end, - '*$selectedText*', - ); - ContextMenuController.removeAny(); - }, - ), - ContextMenuButtonItem( - label: l10n.strikeThrough, - onPressed: () { - final selection = controller.selection; - controller.text = controller.text.replaceRange( - selection.start, - selection.end, - '~~$selectedText~~', - ); - ContextMenuController.removeAny(); - }, - ), + final fullLineSelection = TextSelection( + baseOffset: start, + extentOffset: end, + ); + + const checkBox = '- [ ]'; + + final replacedRange = fullLineSelection + .textInside(text) + .split('\n') + .map( + (line) => line.startsWith(checkBox) || line.isEmpty + ? line + : '$checkBox $line', + ) + .join('\n'); + controller.text = controller.text.replaceRange( + start, + end, + replacedRange, + ); + ContextMenuController.removeAny(); + }, + ), + ContextMenuButtonItem( + label: l10n.boldText, + onPressed: () { + final selection = controller.selection; + controller.text = controller.text.replaceRange( + selection.start, + selection.end, + '**$selectedText**', + ); + ContextMenuController.removeAny(); + }, + ), + ContextMenuButtonItem( + label: l10n.italicText, + onPressed: () { + final selection = controller.selection; + controller.text = controller.text.replaceRange( + selection.start, + selection.end, + '*$selectedText*', + ); + ContextMenuController.removeAny(); + }, + ), + ContextMenuButtonItem( + label: l10n.strikeThrough, + onPressed: () { + final selection = controller.selection; + controller.text = controller.text.replaceRange( + selection.start, + selection.end, + '~~$selectedText~~', + ); + ContextMenuController.removeAny(); + }, + ), + ], ], - ], - ); + ); + } } diff --git a/lib/utils/matrix_sdk_extensions/device_extension.dart b/lib/utils/matrix_sdk_extensions/device_extension.dart index 3872309c..6f8ec4ed 100644 --- a/lib/utils/matrix_sdk_extensions/device_extension.dart +++ b/lib/utils/matrix_sdk_extensions/device_extension.dart @@ -4,10 +4,10 @@ import 'package:matrix/matrix.dart'; IconData _getIconFromName(String displayname) { final name = displayname.toLowerCase(); - if ({'android'}.any((s) => name.contains(s))) { + if ({'android'}.any(name.contains)) { return Icons.phone_android_outlined; } - if ({'ios', 'ipad', 'iphone', 'ipod'}.any((s) => name.contains(s))) { + if ({'ios', 'ipad', 'iphone', 'ipod'}.any(name.contains)) { return Icons.phone_iphone_outlined; } if ({ @@ -19,16 +19,10 @@ IconData _getIconFromName(String displayname) { '/_matrix', 'safari', 'opera', - }.any((s) => name.contains(s))) { + }.any(name.contains)) { return Icons.web_outlined; } - if ({ - 'desktop', - 'windows', - 'macos', - 'linux', - 'ubuntu', - }.any((s) => name.contains(s))) { + if ({'desktop', 'windows', 'macos', 'linux', 'ubuntu'}.any(name.contains)) { return Icons.desktop_mac_outlined; } return Icons.device_unknown_outlined; diff --git a/lib/utils/matrix_sdk_extensions/event_extension.dart b/lib/utils/matrix_sdk_extensions/event_extension.dart index 2da3a1f0..641898ac 100644 --- a/lib/utils/matrix_sdk_extensions/event_extension.dart +++ b/lib/utils/matrix_sdk_extensions/event_extension.dart @@ -1,13 +1,10 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:async/async.dart' as async; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/utils/size_string.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import 'matrix_file_extension.dart'; extension LocalizedBody on Event { @@ -26,15 +23,16 @@ extension LocalizedBody on Event { }, ); - void saveFile(BuildContext context) async { + Future saveFile(BuildContext context) async { final matrixFile = await _getFile(context); + if (!context.mounted) return; matrixFile.result?.save(context); } - void shareFile(BuildContext context) async { + Future shareFile(BuildContext context) async { final matrixFile = await _getFile(context); - inspect(matrixFile); + if (!context.mounted) return; matrixFile.result?.share(context); } @@ -59,7 +57,7 @@ extension LocalizedBody on Event { (content['url'] is String)); String? get sizeString => content - .tryGetMap('info') + .tryGetMap('info') ?.tryGet('size') ?.sizeString; } diff --git a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart index 0e9724a3..d0cd5b36 100644 --- a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart +++ b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart @@ -1,6 +1,5 @@ -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; +import 'package:matrix/matrix.dart'; extension VisibleInGuiExtension on List { List filterByVisibleInGui({ diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart index 54b0d453..9ec10dd8 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart @@ -1,18 +1,16 @@ import 'dart:io'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/client_manager.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; import 'package:flutter/foundation.dart'; - import 'package:matrix/matrix.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/client_manager.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; import 'cipher.dart'; - import 'sqlcipher_stub.dart' if (dart.library.io) 'package:sqlcipher_flutter_libs/sqlcipher_flutter_libs.dart'; @@ -62,7 +60,10 @@ Future _constructDatabase(String clientName) async { Directory? fileStorageLocation; try { - fileStorageLocation = await getTemporaryDirectory(); + final temporaryDirectory = await getTemporaryDirectory(); + fileStorageLocation = await Directory( + join(temporaryDirectory.path, 'fluffychat_download_cache'), + ).create(recursive: true); } on MissingPlatformDirectoryException catch (_) { Logs().w( 'No temporary directory for file cache available on this platform.', diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart index a91c79f2..f469e571 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart @@ -1,15 +1,13 @@ import 'dart:convert'; import 'dart:math'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; - -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:matrix/matrix.dart'; const _passwordStorageKey = 'database_password'; @@ -47,7 +45,7 @@ Future getDatabaseCipher() async { return password; } -void _sendNoEncryptionWarning(Object exception) async { +Future _sendNoEncryptionWarning(Object exception) async { final isStored = AppSettings.noEncryptionWarningShown.value; if (isStored == true) return; diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/sqlcipher_stub.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/sqlcipher_stub.dart index b0f8b43d..c5ec4feb 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/sqlcipher_stub.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/sqlcipher_stub.dart @@ -1 +1,2 @@ -Future applyWorkaroundToOpenSqlCipherOnOldAndroidVersions() async {} +Future applyWorkaroundToOpenSqlCipherOnOldAndroidVersions() => + Future.value(); diff --git a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart index dffea0c6..4590cace 100644 --- a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart +++ b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart @@ -1,14 +1,12 @@ -import 'package:flutter/material.dart'; - import 'package:file_picker/file_picker.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/size_string.dart'; +import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:share_plus/share_plus.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/size_string.dart'; - extension MatrixFileExtension on MatrixFile { - void save(BuildContext context) async { + Future save(BuildContext context) async { final scaffoldMessenger = ScaffoldMessenger.of(context); final l10n = L10n.of(context); final downloadPath = await FilePicker.platform.saveFile( @@ -31,7 +29,7 @@ extension MatrixFileExtension on MatrixFile { return FileType.any; } - void share(BuildContext context) async { + Future share(BuildContext context) async { // Workaround for iPad from // https://github.com/fluttercommunity/plus_plugins/tree/main/packages/share_plus/share_plus#ipad final box = context.findRenderObject() as RenderBox?; diff --git a/lib/utils/matrix_sdk_extensions/matrix_locals.dart b/lib/utils/matrix_sdk_extensions/matrix_locals.dart index 9a12d25f..157f46c7 100644 --- a/lib/utils/matrix_sdk_extensions/matrix_locals.dart +++ b/lib/utils/matrix_sdk_extensions/matrix_locals.dart @@ -1,6 +1,5 @@ -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; +import 'package:matrix/matrix.dart'; /// This is a temporary helper class until there is a proper solution to this with the new system class MatrixLocals extends MatrixLocalizations { diff --git a/lib/utils/matrix_sdk_extensions/oidc_session_json_extension.dart b/lib/utils/matrix_sdk_extensions/oidc_session_json_extension.dart new file mode 100644 index 00000000..90fb9911 --- /dev/null +++ b/lib/utils/matrix_sdk_extensions/oidc_session_json_extension.dart @@ -0,0 +1,24 @@ +import 'package:matrix/matrix.dart'; + +extension OidcSessionJsonExtension on OidcLoginSession { + static const String storeKey = 'oidc_session'; + static const String homeserverStoreKey = 'oidc_stored_homeserver'; + Map toJson() => { + 'oidc_client_data': oidcClientData.toJson(), + 'authentication_uri': authenticationUri.toString(), + 'redirect_uri': redirectUri.toString(), + 'code_verifier': codeVerifier, + 'state': state, + }; + + static OidcLoginSession fromJson(Map json) => + OidcLoginSession( + oidcClientData: OidcClientData.fromJson( + json['oidc_client_data'] as Map, + ), + authenticationUri: Uri.parse(json['authentication_uri'] as String), + redirectUri: Uri.parse(json['redirect_uri'] as String), + codeVerifier: json['code_verifier'] as String, + state: json['state'] as String, + ); +} diff --git a/lib/utils/notification_background_handler.dart b/lib/utils/notification_background_handler.dart index eaaeb7c6..76cde5a9 100644 --- a/lib/utils/notification_background_handler.dart +++ b/lib/utils/notification_background_handler.dart @@ -3,17 +3,14 @@ import 'dart:isolate'; import 'dart:ui'; import 'package:collection/collection.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/client_manager.dart'; +import 'package:fluffychat/utils/push_helper.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/client_download_content_extension.dart'; -import 'package:fluffychat/utils/client_manager.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; -import 'package:fluffychat/utils/push_helper.dart'; import '../config/app_config.dart'; import '../config/setting_keys.dart'; @@ -53,7 +50,7 @@ Future waitForPushIsolateDone() async { } @pragma('vm:entry-point') -void notificationTapBackground( +Future notificationTapBackground( NotificationResponse notificationResponse, ) async { final sendPort = IsolateNameServer.lookupPortByName( @@ -172,91 +169,15 @@ Future notificationTap( ); } - final eventId = await room.sendTextEvent( + await room.sendTextEvent( input, parseCommands: false, displayPendingEvent: false, ); - - if (PlatformInfos.isAndroid) { - final ownProfile = await room.client.fetchOwnProfile(); - final avatar = ownProfile.avatarUrl; - final avatarFile = avatar == null - ? null - : await client - .downloadMxcCached( - avatar, - thumbnailMethod: ThumbnailMethod.crop, - width: notificationAvatarDimension, - height: notificationAvatarDimension, - animated: false, - isThumbnail: true, - rounded: true, - ) - .timeout(const Duration(seconds: 3)); - final messagingStyleInformation = - await AndroidFlutterLocalNotificationsPlugin() - .getActiveNotificationMessagingStyle(room.id.hashCode); - if (messagingStyleInformation == null) return; - l10n ??= await lookupL10n(PlatformDispatcher.instance.locale); - messagingStyleInformation.messages?.add( - Message( - input, - DateTime.now(), - Person( - key: room.client.userID, - name: l10n.you, - icon: avatarFile == null - ? null - : ByteArrayAndroidIcon(avatarFile), - ), - ), - ); - - await FlutterLocalNotificationsPlugin().show( - room.id.hashCode, - room.getLocalizedDisplayname(MatrixLocals(l10n)), - input, - NotificationDetails( - android: AndroidNotificationDetails( - AppConfig.pushNotificationsChannelId, - l10n.incomingMessages, - category: AndroidNotificationCategory.message, - shortcutId: room.id, - styleInformation: messagingStyleInformation, - groupKey: room.id, - playSound: false, - enableVibration: false, - actions: [ - AndroidNotificationAction( - FluffyChatNotificationActions.reply.name, - l10n.reply, - inputs: [ - AndroidNotificationActionInput( - label: l10n.writeAMessage, - ), - ], - cancelNotification: false, - allowGeneratedReplies: true, - semanticAction: SemanticAction.reply, - ), - AndroidNotificationAction( - FluffyChatNotificationActions.markAsRead.name, - l10n.markAsRead, - semanticAction: SemanticAction.markAsRead, - ), - ], - ), - ), - payload: FluffyChatPushPayload( - client.clientName, - room.id, - eventId, - ).toString(), - ); - } + case FluffyChatNotificationActions.mute: + await room.setPushRuleState(PushRuleState.mentionsOnly); } } } -enum FluffyChatNotificationActions { markAsRead, reply } +enum FluffyChatNotificationActions { markAsRead, reply, mute } diff --git a/lib/utils/platform_infos.dart b/lib/utils/platform_infos.dart index 620dce9a..4d4a0dfb 100644 --- a/lib/utils/platform_infos.dart +++ b/lib/utils/platform_infos.dart @@ -1,14 +1,13 @@ import 'dart:io'; +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - import 'package:go_router/go_router.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher_string.dart'; -import 'package:fluffychat/config/setting_keys.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import '../config/app_config.dart'; abstract class PlatformInfos { @@ -33,7 +32,10 @@ abstract class PlatformInfos { static bool get supportsVideoPlayer => !PlatformInfos.isWindows && !PlatformInfos.isLinux; - /// Web could also record in theory but currently only wav which is too large + static bool get supportsCustomImageResizer => + PlatformInfos.isWeb || PlatformInfos.isMobile; + + /// Web could also record in theory but currently creates broken opus static bool get platformCanRecord => (isMobile || isMacOS); static String get clientName => @@ -47,16 +49,18 @@ abstract class PlatformInfos { return version; } - static void showDialog(BuildContext context) async { + static Future showDialog(BuildContext context) async { + final l10n = L10n.of(context); final version = await PlatformInfos.getVersion(); + if (!context.mounted) return; showAboutDialog( context: context, children: [ - Text(L10n.of(context).versionWithNumber(version)), + Text(l10n.versionWithNumber(version)), TextButton.icon( onPressed: () => launchUrlString(AppConfig.sourceCodeUrl), icon: const Icon(Icons.source_outlined), - label: Text(L10n.of(context).sourceCode), + label: Text(l10n.sourceCode), ), Builder( builder: (innerContext) { @@ -66,7 +70,7 @@ abstract class PlatformInfos { Navigator.of(innerContext).pop(); }, icon: const Icon(Icons.list_outlined), - label: Text(L10n.of(context).logs), + label: Text(l10n.logs), ); }, ), @@ -78,7 +82,7 @@ abstract class PlatformInfos { Navigator.of(innerContext).pop(); }, icon: const Icon(Icons.settings_applications_outlined), - label: Text(L10n.of(context).advancedConfigs), + label: Text(l10n.advancedConfigs), ); }, ), diff --git a/lib/utils/push_helper.dart b/lib/utils/push_helper.dart index 6c9f9338..591549e9 100644 --- a/lib/utils/push_helper.dart +++ b/lib/utils/push_helper.dart @@ -1,14 +1,7 @@ import 'dart:convert'; import 'dart:ui'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; -import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -17,6 +10,11 @@ import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/notification_background_handler.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart'; +import 'package:matrix/matrix.dart'; const notificationAvatarDimension = 128; @@ -41,11 +39,11 @@ Future pushHelper( Logs().e('Push Helper has crashed! Writing into temporary file', e, s); l10n ??= await lookupL10n(PlatformDispatcher.instance.locale); - flutterLocalNotificationsPlugin.show( - notification.roomId?.hashCode ?? 0, - l10n.newMessageInFluffyChat, - l10n.openAppToReadMessages, - NotificationDetails( + await flutterLocalNotificationsPlugin.show( + id: notification.roomId?.hashCode ?? 0, + title: l10n.newMessageInFluffyChat, + body: l10n.openAppToReadMessages, + notificationDetails: NotificationDetails( iOS: const DarwinNotificationDetails(), android: AndroidNotificationDetails( AppConfig.pushNotificationsChannelId, @@ -111,7 +109,7 @@ Future _tryPushHelper( (room) => room.id.hashCode == activeNotification.id, ); if (room == null || !room.isUnreadOrInvited) { - flutterLocalNotificationsPlugin.cancel(activeNotification.id!); + flutterLocalNotificationsPlugin.cancel(id: activeNotification.id!); } } } @@ -162,43 +160,15 @@ Future _tryPushHelper( ? avatar : event.senderFromMemoryOrFallback.avatarUrl; - Uint8List? roomAvatarFile, senderAvatarFile; - try { - roomAvatarFile = avatar == null - ? null - : await client - .downloadMxcCached( - avatar, - thumbnailMethod: ThumbnailMethod.crop, - width: notificationAvatarDimension, - height: notificationAvatarDimension, - animated: false, - isThumbnail: true, - rounded: true, - ) - .timeout(const Duration(seconds: 3)); - } catch (e, s) { - Logs().e('Unable to get avatar picture', e, s); - } - try { - senderAvatarFile = event.room.isDirectChat - ? roomAvatarFile - : senderAvatar == null - ? null - : await client - .downloadMxcCached( - senderAvatar, - thumbnailMethod: ThumbnailMethod.crop, - width: notificationAvatarDimension, - height: notificationAvatarDimension, - animated: false, - isThumbnail: true, - rounded: true, - ) - .timeout(const Duration(seconds: 3)); - } catch (e, s) { - Logs().e('Unable to get avatar picture', e, s); - } + final ownUser = event.room.unsafeGetUserFromMemoryOrFallback(client.userID!); + + final userAvatarFile = await client.tryDownloadNotificationAvatar( + ownUser.avatarUrl, + ); + final roomAvatarFile = await client.tryDownloadNotificationAvatar(avatar); + final senderAvatarFile = await client.tryDownloadNotificationAvatar( + senderAvatar, + ); final id = notification.roomId.hashCode; @@ -220,7 +190,7 @@ Future _tryPushHelper( final messagingStyleInformation = PlatformInfos.isAndroid ? await AndroidFlutterLocalNotificationsPlugin() - .getActiveNotificationMessagingStyle(id) + .getActiveNotificationMessagingStyle(id: id) : null; messagingStyleInformation?.messages?.add(newMessage); @@ -262,12 +232,11 @@ Future _tryPushHelper( messagingStyleInformation ?? MessagingStyleInformation( Person( - name: senderName, - icon: roomAvatarFile == null + name: ownUser.calcDisplayname(), + icon: userAvatarFile == null ? null - : ByteArrayAndroidIcon(roomAvatarFile), - key: event.roomId, - important: event.room.isFavourite, + : ByteArrayAndroidIcon(userAvatarFile), + key: event.room.client.userID, ), conversationTitle: event.room.isDirectChat ? null : roomName, groupConversation: !event.room.isDirectChat, @@ -293,7 +262,6 @@ Future _tryPushHelper( inputs: [ AndroidNotificationActionInput(label: l10n.writeAMessage), ], - cancelNotification: false, allowGeneratedReplies: true, semanticAction: SemanticAction.reply, ), @@ -302,6 +270,11 @@ Future _tryPushHelper( l10n.markAsRead, semanticAction: SemanticAction.markAsRead, ), + AndroidNotificationAction( + FluffyChatNotificationActions.mute.name, + l10n.mute, + semanticAction: SemanticAction.mute, + ), ], ); const iOSPlatformChannelSpecifics = DarwinNotificationDetails(); @@ -317,10 +290,10 @@ Future _tryPushHelper( } await flutterLocalNotificationsPlugin.show( - id, - title, - body, - platformChannelSpecifics, + id: id, + title: title, + body: body, + notificationDetails: platformChannelSpecifics, payload: FluffyChatPushPayload( client.clientName, event.room.id, @@ -340,7 +313,7 @@ class FluffyChatPushPayload { if (parts.length != 3) { return FluffyChatPushPayload(null, null, null); } - return FluffyChatPushPayload(parts[0], parts[1], parts[2]); + return FluffyChatPushPayload(parts.first, parts[1], parts[2]); } @override @@ -372,3 +345,23 @@ Future _setShortcut( ), ); } + +extension on Client { + Future tryDownloadNotificationAvatar(Uri? avatar) async { + if (avatar == null) return null; + try { + return await downloadMxcCached( + avatar, + thumbnailMethod: ThumbnailMethod.crop, + width: notificationAvatarDimension, + height: notificationAvatarDimension, + animated: false, + isThumbnail: true, + rounded: true, + ).timeout(const Duration(seconds: 3)); + } catch (e, s) { + Logs().e('Unable to get avatar picture', e, s); + return null; + } + } +} diff --git a/lib/utils/resize_video.dart b/lib/utils/resize_video.dart index ae249818..a58e4642 100644 --- a/lib/utils/resize_video.dart +++ b/lib/utils/resize_video.dart @@ -1,9 +1,8 @@ import 'package:cross_file/cross_file.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; import 'package:matrix/matrix.dart'; import 'package:video_compress/video_compress.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; - extension ResizeImage on XFile { static const int max = 1200; static const int quality = 40; diff --git a/lib/utils/room_status_extension.dart b/lib/utils/room_status_extension.dart index 3021a314..a907bff4 100644 --- a/lib/utils/room_status_extension.dart +++ b/lib/utils/room_status_extension.dart @@ -1,8 +1,7 @@ +import 'package:fluffychat/l10n/l10n.dart'; import 'package:flutter/widgets.dart'; - import 'package:matrix/matrix.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import '../config/app_config.dart'; extension RoomStatusExtension on Room { diff --git a/lib/utils/show_scaffold_dialog.dart b/lib/utils/show_scaffold_dialog.dart index 7e552f90..7e796ad0 100644 --- a/lib/utils/show_scaffold_dialog.dart +++ b/lib/utils/show_scaffold_dialog.dart @@ -1,7 +1,6 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:flutter/material.dart'; Future showScaffoldDialog({ required BuildContext context, diff --git a/lib/utils/show_update_snackbar.dart b/lib/utils/show_update_snackbar.dart index 27078943..c0366046 100644 --- a/lib/utils/show_update_snackbar.dart +++ b/lib/utils/show_update_snackbar.dart @@ -1,17 +1,16 @@ -import 'package:flutter/material.dart'; - -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:url_launcher/url_launcher_string.dart'; abstract class UpdateNotifier { static const String versionStoreKey = 'last_known_version'; - static void showUpdateSnackBar(BuildContext context) async { + static Future showUpdateSnackBar(BuildContext context) async { final scaffoldMessenger = ScaffoldMessenger.of(context); + final l10n = L10n.of(context); final currentVersion = await PlatformInfos.getVersion(); final store = await SharedPreferences.getInstance(); final storedVersion = store.getString(versionStoreKey); @@ -22,9 +21,9 @@ abstract class UpdateNotifier { SnackBar( duration: const Duration(seconds: 30), showCloseIcon: true, - content: Text(L10n.of(context).updateInstalled(currentVersion)), + content: Text(l10n.updateInstalled(currentVersion)), action: SnackBarAction( - label: L10n.of(context).changelog, + label: l10n.changelog, onPressed: () => launchUrlString(AppConfig.changelogUrl), ), ), diff --git a/lib/utils/sign_in_flows/calc_redirect_url.dart b/lib/utils/sign_in_flows/calc_redirect_url.dart new file mode 100644 index 00000000..34aadea7 --- /dev/null +++ b/lib/utils/sign_in_flows/calc_redirect_url.dart @@ -0,0 +1,25 @@ +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; +import 'package:universal_html/html.dart' as html; + +(Uri redirectUrl, String urlScheme) calcRedirectUrl({ + bool withAuthHtmlPath = false, +}) { + var redirectUrl = kIsWeb + ? Uri.parse(html.window.location.href.split('#').first.split('?').first) + : (PlatformInfos.isMobile || PlatformInfos.isMacOS) + ? Uri.parse('${AppConfig.appSsoUrlScheme.toLowerCase()}:/login') + : Uri.parse('http://localhost:3001/login'); + + if (kIsWeb && withAuthHtmlPath) { + redirectUrl = redirectUrl.resolveUri(Uri(pathSegments: ['auth.html'])); + } + + final urlScheme = + (PlatformInfos.isMobile || PlatformInfos.isWeb || PlatformInfos.isMacOS) + ? redirectUrl.scheme + : 'http://localhost:3001'; + + return (redirectUrl, urlScheme); +} diff --git a/lib/pages/sign_in/view_model/flows/check_homeserver.dart b/lib/utils/sign_in_flows/check_homeserver.dart similarity index 65% rename from lib/pages/sign_in/view_model/flows/check_homeserver.dart rename to lib/utils/sign_in_flows/check_homeserver.dart index 895a168b..ca77b5ca 100644 --- a/lib/pages/sign_in/view_model/flows/check_homeserver.dart +++ b/lib/utils/sign_in_flows/check_homeserver.dart @@ -1,18 +1,19 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - +import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/sign_in/view_model/flows/sso_login.dart'; import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/sign_in_flows/oidc_login.dart'; +import 'package:fluffychat/utils/sign_in_flows/sso_login.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher_string.dart'; -void connectToHomeserverFlow( +Future connectToHomeserverFlow( PublicHomeserverData homeserverData, BuildContext context, void Function(AsyncSnapshot) setState, @@ -27,16 +28,37 @@ void connectToHomeserverFlow( } final l10n = L10n.of(context); final client = await Matrix.of(context).getLoginClient(); - final (_, _, loginFlows, _) = await client.checkHomeserver(homeserver); + final (_, _, loginFlows, authMetadata) = await client.checkHomeserver( + homeserver, + fetchAuthMetadata: true, + ); + final regLink = homeserverData.regLink; final supportsSso = loginFlows.any((flow) => flow.type == 'm.login.sso'); - if (!supportsSso) { - final regLink = homeserverData.regLink; + if ((kIsWeb || PlatformInfos.isLinux) && + (supportsSso || authMetadata != null || (signUp && regLink != null))) { + if (!context.mounted) return; + final consent = await showOkCancelAlertDialog( + context: context, + title: l10n.appWantsToUseForLogin(homeserverInput), + message: l10n.appWantsToUseForLoginDescription, + okLabel: l10n.continueText, + ); + if (consent != OkCancelResult.ok) return; + if (!context.mounted) return; + } + if (!context.mounted) return; + + if (authMetadata != null && AppSettings.enableMatrixNativeOIDC.value) { + await oidcLoginFlow(client, context, signUp); + } else if (supportsSso) { + await ssoLoginFlow(client, context, signUp, loginFlows); + } else { if (signUp && regLink != null) { await launchUrlString(regLink); } - + if (!context.mounted) return; final pathSegments = List.of( GoRouter.of(context).routeInformationProvider.value.uri.pathSegments, ); @@ -46,19 +68,15 @@ void connectToHomeserverFlow( setState(AsyncSnapshot.withData(ConnectionState.done, true)); return; } - if (kIsWeb || PlatformInfos.isLinux) { - final consent = await showOkCancelAlertDialog( - context: context, - title: l10n.appWantsToUseForLogin(homeserverInput), - message: l10n.appWantsToUseForLoginDescription, - okLabel: l10n.continueText, - ); - if (consent != OkCancelResult.ok) return; - } - await ssoLoginFlow(client, context, signUp); - setState(AsyncSnapshot.withData(ConnectionState.done, true)); + await AppSettings.defaultHomeserver.setItem(homeserverInput); + + if (context.mounted) { + setState(AsyncSnapshot.withData(ConnectionState.done, true)); + context.go('/backup'); + } } catch (e, s) { + Logs().w('Unable to login', e, s); setState(AsyncSnapshot.withError(ConnectionState.done, e, s)); if (!context.mounted) return; ScaffoldMessenger.of(context).showSnackBar( diff --git a/lib/utils/sign_in_flows/oidc_login.dart b/lib/utils/sign_in_flows/oidc_login.dart new file mode 100644 index 00000000..4093eb14 --- /dev/null +++ b/lib/utils/sign_in_flows/oidc_login.dart @@ -0,0 +1,86 @@ +import 'dart:convert'; + +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/oidc_session_json_extension.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/sign_in_flows/calc_redirect_url.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; +import 'package:matrix/matrix.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +Future oidcLoginFlow( + Client client, + BuildContext context, + bool signUp, +) async { + Logs().i('Starting Matrix Native OIDC Flow...'); + + final (redirectUrl, urlScheme) = calcRedirectUrl(); + + final clientUri = Uri.parse(AppSettings.website.value); + final supportWebPlatform = + kIsWeb && + kReleaseMode && + redirectUrl.scheme == 'https' && + redirectUrl.host.contains(clientUri.host); + if (kIsWeb && !supportWebPlatform) { + Logs().w( + 'OIDC Application Type web is not supported. Using native now. Please use this instance not in production!', + ); + } + + final oidcClientData = await client.registerOidcClient( + redirectUris: [redirectUrl], + applicationType: supportWebPlatform + ? OidcApplicationType.web + : OidcApplicationType.native, + clientInformation: OidcClientInformation( + clientName: AppSettings.applicationName.value, + clientUri: clientUri, + logoUri: Uri.parse(AppSettings.logoUrl.value), + tosUri: Uri.parse(AppSettings.tos.value), + policyUri: Uri.parse(AppSettings.privacyPolicy.value), + ), + ); + + final session = await client.initOidcLoginSession( + oidcClientData: oidcClientData, + redirectUri: redirectUrl, + prompt: signUp ? 'create' : null, + ); + + if (!context.mounted) return; + + if (kIsWeb) { + final store = await SharedPreferences.getInstance(); + store.setString( + OidcSessionJsonExtension.homeserverStoreKey, + client.homeserver!.toString(), + ); + store.setString( + OidcSessionJsonExtension.storeKey, + jsonEncode(session.toJson()), + ); + } + + final returnUrlString = await FlutterWebAuth2.authenticate( + url: session.authenticationUri.toString(), + callbackUrlScheme: urlScheme, + options: FlutterWebAuth2Options( + useWebview: PlatformInfos.isMobile, + windowName: '_self', + ), + ); + if (kIsWeb) return; // On Web we return at intro page when app starts again! + + final returnUrl = Uri.parse(returnUrlString); + final queryParameters = returnUrl.hasFragment + ? Uri.parse(returnUrl.fragment).queryParameters + : returnUrl.queryParameters; + final code = queryParameters['code'] as String; + final state = queryParameters['state'] as String; + + await client.oidcLogin(session: session, code: code, state: state); +} diff --git a/lib/utils/sign_in_flows/sso_login.dart b/lib/utils/sign_in_flows/sso_login.dart new file mode 100644 index 00000000..e5b135e1 --- /dev/null +++ b/lib/utils/sign_in_flows/sso_login.dart @@ -0,0 +1,69 @@ +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/sign_in_flows/calc_redirect_url.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; +import 'package:matrix/matrix.dart'; + +Future ssoLoginFlow( + Client client, + BuildContext context, + bool signUp, + List loginFlows, +) async { + final (redirectUrl, urlScheme) = calcRedirectUrl(withAuthHtmlPath: true); + + Logs().i('Starting legacy SSO Flow with redirect URL', redirectUrl); + + final ssoProviders = + (loginFlows + .firstWhere((flow) => flow.type == 'm.login.sso') + .additionalProperties['identity_providers'] + as List?) + ?.map( + (json) => ( + name: json['name'] as String, + id: json['id'] as String, + brand: json['brand'] as String?, + icon: json['icon'] as String?, + ), + ) + .toList(); + + final provider = ssoProviders == null + ? null + : await showModalActionPopup( + context: context, + title: L10n.of(context).logInTo(client.homeserver!.host), + actions: ssoProviders + .map( + (provider) => + AdaptiveModalAction(label: provider.name, value: provider), + ) + .toList(), + ); + + final url = client.homeserver!.replace( + path: + '/_matrix/client/v3/login/sso/redirect${provider == null ? '' : '/${provider.id}'}', + queryParameters: { + 'redirectUrl': redirectUrl.toString(), + 'action': signUp ? 'register' : 'login', + }, + ); + + final result = await FlutterWebAuth2.authenticate( + url: url.toString(), + callbackUrlScheme: urlScheme, + options: FlutterWebAuth2Options(useWebview: PlatformInfos.isMobile), + ); + final token = Uri.parse(result).queryParameters['loginToken']; + if (token?.isEmpty ?? false) return; + + await client.login( + LoginType.mLoginToken, + token: token, + initialDeviceDisplayName: PlatformInfos.clientName, + ); +} diff --git a/lib/utils/size_string.dart b/lib/utils/size_string.dart index 31503307..619462ab 100644 --- a/lib/utils/size_string.dart +++ b/lib/utils/size_string.dart @@ -7,15 +7,15 @@ extension SizeString on num { if (size < 1000 * 1000) { size = size / 1000; size = (size * 10).round() / 10; - return '${size.toString()} KB'; + return '$size KB'; } if (size < 1000 * 1000 * 1000) { size = size / 1000000; size = (size * 10).round() / 10; - return '${size.toString()} MB'; + return '$size MB'; } size = size / 1000 * 1000 * 1000 * 1000; size = (size * 10).round() / 10; - return '${size.toString()} GB'; + return '$size GB'; } } diff --git a/lib/utils/stream_extension.dart b/lib/utils/stream_extension.dart index 66e840fc..80983b50 100644 --- a/lib/utils/stream_extension.dart +++ b/lib/utils/stream_extension.dart @@ -35,7 +35,7 @@ extension StreamExtension on Stream { }; final subscription = listen( (_) => onMessage?.call(), - onDone: () => controller.close(), + onDone: controller.close, onError: (e, s) => controller.addError(e, s), ); // add proper cleanup to the subscription and the controller, to not memory leak diff --git a/lib/utils/sync_status_localization.dart b/lib/utils/sync_status_localization.dart index c48e7125..da699f2b 100644 --- a/lib/utils/sync_status_localization.dart +++ b/lib/utils/sync_status_localization.dart @@ -1,9 +1,7 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; extension SyncStatusLocalization on SyncStatusUpdate { String calcLocalizedString(BuildContext context) { diff --git a/lib/utils/uia_request_manager.dart b/lib/utils/uia_request_manager.dart index 34a51b1c..11fa0421 100644 --- a/lib/utils/uia_request_manager.dart +++ b/lib/utils/uia_request_manager.dart @@ -1,15 +1,13 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher.dart'; extension UiaRequestManager on MatrixState { Future uiaRequestHandler(UiaRequest uiaRequest) async { @@ -105,9 +103,7 @@ extension UiaRequestManager on MatrixState { launchUrl(url, mode: LaunchMode.inAppBrowserView); final completer = Completer(); - final listener = AppLifecycleListener( - onResume: () => completer.complete(), - ); + final listener = AppLifecycleListener(onResume: completer.complete); await completer.future; listener.dispose(); diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 45c93e1b..34649cd1 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -1,17 +1,16 @@ -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart' show IterableExtension; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:punycode/punycode.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:punycode/punycode.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + import '../widgets/adaptive_dialogs/public_room_dialog.dart'; import 'platform_infos.dart'; @@ -27,7 +26,9 @@ class UrlLauncher { const UrlLauncher(this.context, this.url, [this.name]); - void launchUrl() async { + Future launchUrl() async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); if (url!.toLowerCase().startsWith(AppConfig.deepLinkPrefix) || url!.toLowerCase().startsWith(AppConfig.inviteLinkPrefix) || {'#', '@', '!', '+', '\$'}.contains(url![0]) || @@ -37,8 +38,8 @@ class UrlLauncher { final uri = Uri.tryParse(url!); if (uri == null) { // we can't open this thing - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).cantOpenUri(url!))), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.cantOpenUri(url!))), ); return; } @@ -48,10 +49,10 @@ class UrlLauncher { // that the user can see the actual url before opening the browser. final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context).openLinkInBrowser, + title: l10n.openLinkInBrowser, message: url, - okLabel: L10n.of(context).open, - cancelLabel: L10n.of(context).cancel, + okLabel: l10n.open, + cancelLabel: l10n.cancel, ); if (consent != OkCancelResult.ok) return; } @@ -66,7 +67,7 @@ class UrlLauncher { .split(';') .first .split(',') - .map((s) => double.tryParse(s)) + .map(double.tryParse) .toList(); if (latlong.length == 2 && latlong.first != null && @@ -91,8 +92,8 @@ class UrlLauncher { return; } if (uri.host.isEmpty) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).cantOpenUri(url!))), + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.cantOpenUri(url!))), ); return; } @@ -117,7 +118,7 @@ class UrlLauncher { ); } - void openMatrixToUrl() async { + Future openMatrixToUrl() async { final matrix = Matrix.of(context); final url = this.url!.replaceFirst( AppConfig.deepLinkPrefix, @@ -154,14 +155,15 @@ class UrlLauncher { context: context, future: () => matrix.client.getRoomIdByAlias(roomIdOrAlias), ); - if (response.error != null) { - return; // nothing to do, the alias doesn't exist + final result = response.result; + if (result != null) { + roomId = result.roomId; + servers.addAll(result.servers!); + room = matrix.client.getRoomById(roomId!); } - roomId = response.result!.roomId; - servers.addAll(response.result!.servers!); - room = matrix.client.getRoomById(roomId!); } servers.addAll(identityParts.via); + if (!context.mounted) return; if (room != null) { if (room.isSpace) { // TODO: Implement navigate to space @@ -179,6 +181,7 @@ class UrlLauncher { } return; } else { + if (!context.mounted) return; await showAdaptiveDialog( context: context, builder: (c) => @@ -186,6 +189,7 @@ class UrlLauncher { ); } if (roomIdOrAlias.sigil == '!') { + if (!context.mounted) return; if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, @@ -193,6 +197,7 @@ class UrlLauncher { ) == OkCancelResult.ok) { roomId = roomIdOrAlias; + if (!context.mounted) return; final response = await showFutureLoadingDialog( context: context, future: () => matrix.client.joinRoom( @@ -201,11 +206,13 @@ class UrlLauncher { ), ); if (response.error != null) return; + if (!context.mounted) return; // wait for two seconds so that it probably came down /sync await showFutureLoadingDialog( context: context, future: () => Future.delayed(const Duration(seconds: 2)), ); + if (!context.mounted) return; if (event != null) { context.go( Uri( @@ -229,6 +236,7 @@ class UrlLauncher { return Profile(userId: userId); }), ); + if (!context.mounted) return; await UserDialog.show( context: context, profile: profileResult.result!, diff --git a/lib/utils/voip_plugin.dart b/lib/utils/voip_plugin.dart index adef19dd..6a91df3a 100644 --- a/lib/utils/voip_plugin.dart +++ b/lib/utils/voip_plugin.dart @@ -1,16 +1,15 @@ import 'dart:core'; +import 'package:fluffychat/pages/chat_list/chat_list.dart'; +import 'package:fluffychat/pages/dialer/dialer.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_foreground_task/flutter_foreground_task.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart' as webrtc_impl; import 'package:matrix/matrix.dart'; import 'package:webrtc_interface/webrtc_interface.dart' hide Navigator; -import 'package:fluffychat/pages/chat_list/chat_list.dart'; -import 'package:fluffychat/pages/dialer/dialer.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; import '../../utils/voip/user_media_manager.dart'; import '../widgets/matrix.dart'; @@ -141,7 +140,7 @@ class VoipPlugin with WidgetsBindingObserver implements WebRTCDelegate { FlutterForegroundTask.setOnLockScreenVisibility(false); FlutterForegroundTask.stopService(); final wasForeground = matrix.store.getString('wasForeground'); - wasForeground == 'false' ? FlutterForegroundTask.minimizeApp() : null; + if (wasForeground == 'false') FlutterForegroundTask.minimizeApp(); } } } diff --git a/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart b/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart index 40fc3f96..fe892538 100644 --- a/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart +++ b/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart @@ -1,8 +1,7 @@ +import 'package:fluffychat/config/app_config.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/config/app_config.dart'; - class AdaptiveDialogAction extends StatelessWidget { final VoidCallback? onPressed; final bool autofocus; @@ -82,3 +81,79 @@ class AdaptiveDialogAction extends StatelessWidget { } } } + +class AdaptiveDialogInkWell extends StatelessWidget { + final Widget child; + final VoidCallback? onTap; + final EdgeInsets padding; + + const AdaptiveDialogInkWell({ + super.key, + required this.onTap, + required this.child, + this.padding = const EdgeInsets.all(16), + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + if ({TargetPlatform.iOS, TargetPlatform.macOS}.contains(theme.platform)) { + return CupertinoButton( + onPressed: onTap, + borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), + color: theme.colorScheme.surfaceBright, + padding: padding, + child: child, + ); + } + return Material( + color: onTap == null + ? theme.colorScheme.surfaceContainer + : theme.colorScheme.surfaceBright, + borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), + child: InkWell( + borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), + onTap: onTap, + child: Padding( + padding: padding, + child: Center(child: child), + ), + ), + ); + } +} + +class AdaptiveIconTextButton extends StatelessWidget { + final String label; + final IconData icon; + final VoidCallback? onTap; + const AdaptiveIconTextButton({ + super.key, + required this.label, + required this.icon, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + final color = Theme.of(context).colorScheme.secondary; + return Expanded( + child: AdaptiveDialogInkWell( + padding: EdgeInsets.all(8.0), + onTap: onTap, + child: Column( + mainAxisSize: .min, + children: [ + Icon(icon, color: color), + Text( + label, + style: TextStyle(fontSize: 12, color: color), + maxLines: 1, + overflow: .ellipsis, + ), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/adaptive_dialogs/public_room_dialog.dart b/lib/widgets/adaptive_dialogs/public_room_dialog.dart index 7fee87bf..6149be12 100644 --- a/lib/widgets/adaptive_dialogs/public_room_dialog.dart +++ b/lib/widgets/adaptive_dialogs/public_room_dialog.dart @@ -1,12 +1,13 @@ +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/fluffy_share.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import '../../config/themes.dart'; import '../../utils/url_launcher.dart'; import '../avatar.dart'; @@ -23,7 +24,8 @@ class PublicRoomDialog extends StatelessWidget { const PublicRoomDialog({super.key, this.roomAlias, this.chunk, this.via}); - void _joinRoom(BuildContext context) async { + Future _joinRoom(BuildContext context) async { + final l10n = L10n.of(context); final client = Matrix.of(context).client; final chunk = this.chunk; final knock = chunk?.joinRule == 'knock'; @@ -47,12 +49,13 @@ class PublicRoomDialog extends StatelessWidget { ); final roomId = result.result; if (roomId == null) return; + if (!context.mounted) return; if (knock && client.getRoomById(roomId) == null) { Navigator.of(context).pop(true); await showOkAlertDialog( context: context, - title: L10n.of(context).youHaveKnocked, - message: L10n.of(context).pleaseWaitUntilInvited, + title: l10n.youHaveKnocked, + message: l10n.pleaseWaitUntilInvited, ); return; } @@ -72,6 +75,7 @@ class PublicRoomDialog extends StatelessWidget { bool _testRoom(PublishedRoomsChunk r) => r.canonicalAlias == roomAlias; Future _search(BuildContext context) async { + final l10n = L10n.of(context); final chunk = this.chunk; if (chunk != null) return chunk; final query = await Matrix.of(context).client.queryPublicRooms( @@ -79,7 +83,7 @@ class PublicRoomDialog extends StatelessWidget { filter: PublicRoomQueryFilter(genericSearchTerm: roomAlias), ); if (!query.chunk.any(_testRoom)) { - throw (L10n.of(context).noRoomsFound); + throw (l10n.noRoomsFound); } return query.chunk.firstWhere(_testRoom); } @@ -90,15 +94,8 @@ class PublicRoomDialog extends StatelessWidget { final roomLink = roomAlias ?? chunk?.roomId; var copied = false; return AlertDialog.adaptive( - title: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256), - child: Text( - chunk?.name ?? roomAlias?.localpart ?? chunk?.roomId ?? 'Unknown', - textAlign: TextAlign.center, - ), - ), content: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256, maxHeight: 256), + constraints: const BoxConstraints(maxWidth: 256), child: FutureBuilder( future: _search(context), builder: (context, snapshot) { @@ -109,125 +106,198 @@ class PublicRoomDialog extends StatelessWidget { final topic = profile?.topic; return SingleChildScrollView( child: Column( - spacing: 8, + spacing: 16, mainAxisSize: .min, crossAxisAlignment: .stretch, children: [ - if (roomLink != null) - HoverBuilder( - builder: (context, hovered) => StatefulBuilder( - builder: (context, setState) => MouseRegion( - cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: () { - Clipboard.setData(ClipboardData(text: roomLink)); - setState(() { - copied = true; - }); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Padding( - padding: const EdgeInsets.only( - right: 4.0, - ), - child: AnimatedScale( - duration: - FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - scale: hovered - ? 1.33 - : copied - ? 1.25 - : 1.0, - child: Icon( - copied - ? Icons.check_circle - : Icons.copy, - size: 12, - color: copied ? Colors.green : null, + Row( + spacing: 12, + children: [ + Avatar( + mxContent: avatar, + name: profile?.name ?? roomLink, + size: Avatar.defaultSize * 1.5, + onTap: avatar != null + ? () => showDialog( + context: context, + builder: (_) => MxcImageViewer(avatar), + ) + : null, + ), + Expanded( + child: Column( + crossAxisAlignment: .start, + children: [ + Text( + profile?.name ?? + roomLink ?? + profile?.roomId ?? + ' - ', + maxLines: 1, + overflow: .ellipsis, + style: TextStyle(fontSize: 16), + ), + const SizedBox(height: 8), + if (roomLink != null) + HoverBuilder( + builder: (context, hovered) => StatefulBuilder( + builder: (context, setState) => MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + Clipboard.setData( + ClipboardData(text: roomLink), + ); + setState(() { + copied = true; + }); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Padding( + padding: const EdgeInsets.only( + right: 4.0, + ), + child: AnimatedScale( + duration: FluffyThemes + .animationDuration, + curve: FluffyThemes + .animationCurve, + scale: hovered + ? 1.33 + : copied + ? 1.25 + : 1.0, + child: Icon( + copied + ? Icons.check_circle + : Icons.copy, + size: 12, + color: copied + ? Colors.green + : null, + ), + ), + ), + ), + TextSpan(text: roomLink), + ], + style: theme.textTheme.bodyMedium + ?.copyWith(fontSize: 10), ), + maxLines: 1, + textAlign: TextAlign.center, ), ), ), - TextSpan(text: roomLink), - ], - style: theme.textTheme.bodyMedium?.copyWith( - fontSize: 10, ), ), - textAlign: TextAlign.center, + + if (profile?.numJoinedMembers != null) + Text( + L10n.of(context).countParticipants( + profile?.numJoinedMembers ?? 0, + ), + style: const TextStyle(fontSize: 10), + textAlign: TextAlign.center, + ), + ], + ), + ), + ], + ), + if (topic != null && topic.isNotEmpty) + ConstrainedBox( + constraints: BoxConstraints(maxHeight: 200), + child: Scrollbar( + thumbVisibility: true, + trackVisibility: true, + child: SingleChildScrollView( + child: SelectableLinkify( + text: topic, + textScaleFactor: MediaQuery.textScalerOf( + context, + ).scale(1), + textAlign: .start, + options: const LinkifyOptions(humanize: false), + linkStyle: TextStyle( + color: theme.colorScheme.primary, + decoration: TextDecoration.underline, + decorationColor: theme.colorScheme.primary, ), + onOpen: (url) => + UrlLauncher(context, url.url).launchUrl(), ), ), ), ), - Center( - child: Avatar( - mxContent: avatar, - name: profile?.name ?? roomLink, - size: Avatar.defaultSize * 2, - onTap: avatar != null - ? () => showDialog( - context: context, - builder: (_) => MxcImageViewer(avatar), - ) - : null, + + Row( + mainAxisAlignment: .spaceBetween, + spacing: 4, + children: [ + AdaptiveIconTextButton( + label: L10n.of(context).report, + icon: Icons.gavel_outlined, + onTap: () async { + Navigator.of(context).pop(); + final reason = await showTextInputDialog( + context: context, + title: L10n.of(context).whyDoYouWantToReportThis, + okLabel: L10n.of(context).report, + cancelLabel: L10n.of(context).cancel, + hintText: L10n.of(context).reason, + ); + if (reason == null || reason.isEmpty) return; + if (!context.mounted) return; + await showFutureLoadingDialog( + context: context, + future: () => Matrix.of(context).client.reportRoom( + chunk?.roomId ?? roomAlias!, + reason, + ), + ); + }, + ), + AdaptiveIconTextButton( + label: L10n.of(context).copy, + icon: Icons.copy_outlined, + onTap: () => + Clipboard.setData(ClipboardData(text: roomLink!)), + ), + AdaptiveIconTextButton( + label: L10n.of(context).share, + icon: Icons.adaptive.share, + onTap: () => FluffyShare.share( + 'https://matrix.to/#/$roomLink', + context, + ), + ), + ], + ), + AdaptiveDialogInkWell( + onTap: () => _joinRoom(context), + child: Text( + chunk?.joinRule == 'knock' && + Matrix.of( + context, + ).client.getRoomById(chunk!.roomId) == + null + ? L10n.of(context).knock + : chunk?.roomType == 'm.space' + ? L10n.of(context).joinSpace + : L10n.of(context).joinRoom, + style: TextStyle(color: theme.colorScheme.secondary), ), ), - if (profile?.numJoinedMembers != null) - Text( - L10n.of( - context, - ).countParticipants(profile?.numJoinedMembers ?? 0), - style: const TextStyle(fontSize: 10), - textAlign: TextAlign.center, - ), - if (topic != null && topic.isNotEmpty) - SelectableLinkify( - text: topic, - textScaleFactor: MediaQuery.textScalerOf( - context, - ).scale(1), - textAlign: TextAlign.center, - options: const LinkifyOptions(humanize: false), - linkStyle: TextStyle( - color: theme.colorScheme.primary, - decoration: TextDecoration.underline, - decorationColor: theme.colorScheme.primary, - ), - onOpen: (url) => - UrlLauncher(context, url.url).launchUrl(), - ), ], ), ); }, ), ), - actions: [ - AdaptiveDialogAction( - bigButtons: true, - borderRadius: AdaptiveDialogAction.topRadius, - onPressed: () => _joinRoom(context), - child: Text( - chunk?.joinRule == 'knock' && - Matrix.of(context).client.getRoomById(chunk!.roomId) == null - ? L10n.of(context).knock - : chunk?.roomType == 'm.space' - ? L10n.of(context).joinSpace - : L10n.of(context).joinRoom, - ), - ), - AdaptiveDialogAction( - bigButtons: true, - borderRadius: AdaptiveDialogAction.bottomRadius, - onPressed: Navigator.of(context).pop, - child: Text(L10n.of(context).close), - ), - ], ); } } diff --git a/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart b/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart index 3b6c7268..fbff4203 100644 --- a/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart +++ b/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart @@ -1,10 +1,8 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; enum OkCancelResult { ok, cancel } @@ -41,11 +39,13 @@ Future showOkCancelAlertDialog({ ), actions: [ AdaptiveDialogAction( + key: Key('ok_cancel_alert_dialog_cancel_button'), onPressed: () => Navigator.of(context).pop(OkCancelResult.cancel), child: Text(cancelLabel ?? L10n.of(context).cancel), ), AdaptiveDialogAction( + key: Key('ok_cancel_alert_dialog_ok_button'), onPressed: () => Navigator.of(context).pop(OkCancelResult.ok), autofocus: true, diff --git a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart index 38331eaf..d128f0cb 100644 --- a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart +++ b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart @@ -1,11 +1,9 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_linkify/flutter_linkify.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/dialog_text_field.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_linkify/flutter_linkify.dart'; Future showTextInputDialog({ required BuildContext context, diff --git a/lib/widgets/adaptive_dialogs/user_dialog.dart b/lib/widgets/adaptive_dialogs/user_dialog.dart index 50361519..4e30a5b3 100644 --- a/lib/widgets/adaptive_dialogs/user_dialog.dart +++ b/lib/widgets/adaptive_dialogs/user_dialog.dart @@ -1,22 +1,25 @@ +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/date_time_extension.dart'; +import 'package:fluffychat/utils/fluffy_share.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; +import 'package:fluffychat/widgets/avatar.dart'; +import 'package:fluffychat/widgets/presence_builder.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/date_time_extension.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; -import 'package:fluffychat/widgets/avatar.dart'; -import 'package:fluffychat/widgets/presence_builder.dart'; import '../../utils/url_launcher.dart'; import '../future_loading_dialog.dart'; import '../hover_builder.dart'; import '../matrix.dart'; import '../mxc_image_viewer.dart'; +// ignore: unused_import + class UserDialog extends StatelessWidget { static Future show({ required BuildContext context, @@ -37,7 +40,7 @@ class UserDialog extends StatelessWidget { @override Widget build(BuildContext context) { final client = Matrix.of(context).client; - final dmRoomId = client.getDirectChatFromUserId(profile.userId); + final directChatRoomId = client.getDirectChatFromUserId(profile.userId); final displayname = profile.displayName ?? profile.userId.localpart ?? @@ -46,168 +49,221 @@ class UserDialog extends StatelessWidget { final theme = Theme.of(context); final avatar = profile.avatarUrl; return AlertDialog.adaptive( - title: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256), - child: Center(child: Text(displayname, textAlign: TextAlign.center)), - ), - content: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256, maxHeight: 256), - child: PresenceBuilder( - userId: profile.userId, - client: Matrix.of(context).client, - builder: (context, presence) { - if (presence == null) return const SizedBox.shrink(); - final statusMsg = presence.statusMsg; - final lastActiveTimestamp = presence.lastActiveTimestamp; - final presenceText = presence.currentlyActive == true - ? L10n.of(context).currentlyActive - : lastActiveTimestamp != null - ? L10n.of(context).lastActiveAgo( - lastActiveTimestamp.localizedTimeShort(context), - ) - : null; - return SingleChildScrollView( - child: Column( - spacing: 8, - mainAxisSize: .min, - crossAxisAlignment: .stretch, + content: PresenceBuilder( + userId: profile.userId, + client: Matrix.of(context).client, + builder: (context, presence) { + if (presence == null) return const SizedBox.shrink(); + final statusMsg = presence.statusMsg; + final lastActiveTimestamp = presence.lastActiveTimestamp; + final presenceText = presence.currentlyActive == true + ? L10n.of(context).currentlyActive + : lastActiveTimestamp != null + ? L10n.of( + context, + ).lastActiveAgo(lastActiveTimestamp.localizedTimeShort(context)) + : null; + return Column( + spacing: 16, + mainAxisSize: .min, + crossAxisAlignment: .stretch, + children: [ + Row( + spacing: 12, children: [ - Center( - child: Avatar( - mxContent: avatar, - name: displayname, - size: Avatar.defaultSize * 2, - onTap: avatar != null - ? () => showDialog( - context: context, - builder: (_) => MxcImageViewer(avatar), - ) - : null, - ), + Avatar( + mxContent: avatar, + name: displayname, + size: Avatar.defaultSize * 1.5, + onTap: avatar != null + ? () => showDialog( + context: context, + builder: (_) => MxcImageViewer(avatar), + ) + : null, ), - HoverBuilder( - builder: (context, hovered) => StatefulBuilder( - builder: (context, setState) => MouseRegion( - cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: () { - Clipboard.setData( - ClipboardData(text: profile.userId), - ); - setState(() { - copied = true; - }); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Padding( - padding: const EdgeInsets.only(right: 4.0), - child: AnimatedScale( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - scale: hovered - ? 1.33 - : copied - ? 1.25 - : 1.0, - child: Icon( - copied - ? Icons.check_circle - : Icons.copy, - size: 12, - color: copied ? Colors.green : null, + Expanded( + child: Column( + crossAxisAlignment: .start, + children: [ + Text( + displayname, + maxLines: 1, + overflow: .ellipsis, + style: TextStyle(fontSize: 16), + ), + const SizedBox(height: 8), + HoverBuilder( + builder: (context, hovered) => StatefulBuilder( + builder: (context, setState) => MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + Clipboard.setData( + ClipboardData(text: profile.userId), + ); + setState(() { + copied = true; + }); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Padding( + padding: const EdgeInsets.only( + right: 4.0, + ), + child: AnimatedScale( + duration: + FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + scale: hovered + ? 1.33 + : copied + ? 1.25 + : 1.0, + child: Icon( + copied + ? Icons.check_circle + : Icons.copy, + size: 12, + color: copied + ? Colors.green + : null, + ), + ), + ), ), + TextSpan(text: profile.userId), + ], + style: theme.textTheme.bodyMedium?.copyWith( + fontSize: 10, ), ), + maxLines: 1, + overflow: .ellipsis, + textAlign: TextAlign.center, ), - TextSpan(text: profile.userId), - ], - style: theme.textTheme.bodyMedium?.copyWith( - fontSize: 10, ), ), - textAlign: TextAlign.center, ), ), + if (presenceText != null) + Text( + presenceText, + style: theme.textTheme.bodyMedium?.copyWith( + fontSize: 10, + ), + ), + ], + ), + ), + ], + ), + + if (statusMsg != null) + ConstrainedBox( + constraints: BoxConstraints(maxHeight: 200), + child: Scrollbar( + thumbVisibility: true, + trackVisibility: true, + child: SingleChildScrollView( + child: SelectableLinkify( + text: statusMsg, + textScaleFactor: MediaQuery.textScalerOf( + context, + ).scale(1), + textAlign: TextAlign.start, + options: const LinkifyOptions(humanize: false), + linkStyle: TextStyle( + color: theme.colorScheme.primary, + decoration: TextDecoration.underline, + decorationColor: theme.colorScheme.primary, + ), + onOpen: (url) => + UrlLauncher(context, url.url).launchUrl(), ), ), ), - if (presenceText != null) - Text( - presenceText, - style: const TextStyle(fontSize: 10), - textAlign: TextAlign.center, - ), - if (statusMsg != null) - SelectableLinkify( - text: statusMsg, - textScaleFactor: MediaQuery.textScalerOf( - context, - ).scale(1), - textAlign: TextAlign.center, - options: const LinkifyOptions(humanize: false), - linkStyle: TextStyle( - color: theme.colorScheme.primary, - decoration: TextDecoration.underline, - decorationColor: theme.colorScheme.primary, - ), - onOpen: (url) => - UrlLauncher(context, url.url).launchUrl(), + ), + Row( + mainAxisAlignment: .spaceBetween, + spacing: 4, + children: [ + AdaptiveIconTextButton( + label: L10n.of(context).block, + icon: Icons.block_outlined, + onTap: client.userID == profile.userId + ? null + : () { + final router = GoRouter.of(context); + Navigator.of(context).pop(); + router.go( + '/rooms/settings/security/ignorelist', + extra: profile.userId, + ); + }, + ), + AdaptiveIconTextButton( + label: L10n.of(context).report, + icon: Icons.gavel_outlined, + onTap: client.userID == profile.userId + ? null + : () async { + Navigator.of(context).pop(); + final reason = await showTextInputDialog( + context: context, + title: L10n.of(context).whyDoYouWantToReportThis, + okLabel: L10n.of(context).report, + cancelLabel: L10n.of(context).cancel, + hintText: L10n.of(context).reason, + ); + if (reason == null || reason.isEmpty) return; + if (!context.mounted) return; + await showFutureLoadingDialog( + context: context, + future: () => Matrix.of( + context, + ).client.reportUser(profile.userId, reason), + ); + }, + ), + AdaptiveIconTextButton( + label: L10n.of(context).share, + icon: Icons.adaptive.share, + onTap: () => FluffyShare.share( + 'https://matrix.to/#/${profile.userId}', + context, ), + ), ], ), - ); - }, - ), + AdaptiveDialogInkWell( + onTap: client.userID == profile.userId + ? null + : () async { + final router = GoRouter.of(context); + final roomIdResult = await showFutureLoadingDialog( + context: context, + future: () => client.startDirectChat(profile.userId), + ); + final roomId = roomIdResult.result; + if (roomId == null) return; + if (context.mounted) Navigator.of(context).pop(); + router.go('/rooms/$roomId'); + }, + child: Text( + directChatRoomId == null + ? L10n.of(context).createNewChat + : L10n.of(context).sendAMessage, + style: TextStyle(color: theme.colorScheme.secondary), + ), + ), + ], + ); + }, ), - actions: [ - if (client.userID != profile.userId) ...[ - AdaptiveDialogAction( - borderRadius: AdaptiveDialogAction.topRadius, - bigButtons: true, - onPressed: () async { - final router = GoRouter.of(context); - final roomIdResult = await showFutureLoadingDialog( - context: context, - future: () => client.startDirectChat(profile.userId), - ); - final roomId = roomIdResult.result; - if (roomId == null) return; - if (context.mounted) Navigator.of(context).pop(); - router.go('/rooms/$roomId'); - }, - child: Text( - dmRoomId == null - ? L10n.of(context).startConversation - : L10n.of(context).sendAMessage, - ), - ), - AdaptiveDialogAction( - bigButtons: true, - borderRadius: AdaptiveDialogAction.centerRadius, - onPressed: () { - final router = GoRouter.of(context); - Navigator.of(context).pop(); - router.go( - '/rooms/settings/security/ignorelist', - extra: profile.userId, - ); - }, - child: Text( - L10n.of(context).ignoreUser, - style: TextStyle(color: theme.colorScheme.error), - ), - ), - ], - AdaptiveDialogAction( - bigButtons: true, - borderRadius: AdaptiveDialogAction.bottomRadius, - onPressed: Navigator.of(context).pop, - child: Text(L10n.of(context).close), - ), - ], ); } } diff --git a/lib/widgets/app_lock.dart b/lib/widgets/app_lock.dart index a8b93301..feebaf05 100644 --- a/lib/widgets/app_lock.dart +++ b/lib/widgets/app_lock.dart @@ -1,11 +1,9 @@ +import 'package:fluffychat/widgets/lock_screen.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:matrix/matrix.dart'; import 'package:provider/provider.dart'; -import 'package:fluffychat/widgets/lock_screen.dart'; - class AppLockWidget extends StatefulWidget { const AppLockWidget({ required this.child, @@ -41,7 +39,7 @@ class AppLock extends State with WidgetsBindingObserver { WidgetsBinding.instance.addPostFrameCallback(_checkLoggedIn); } - void _checkLoggedIn(dynamic _) async { + Future _checkLoggedIn(_) async { if (widget.clients.any((client) => client.isLogged())) return; await changePincode(null); diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart index b1e9637c..259c0b42 100644 --- a/lib/widgets/avatar.dart +++ b/lib/widgets/avatar.dart @@ -1,23 +1,21 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/presence_builder.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class Avatar extends StatelessWidget { final Uri? mxContent; final String? name; final double size; final void Function()? onTap; - static const double defaultSize = 44; + static const double defaultSize = 48; final Client? client; final String? presenceUserId; final Color? presenceBackgroundColor; final BorderRadius? borderRadius; final IconData? icon; - final BorderSide? border; + final ShapeBorder? shapeBorder; final Color? backgroundColor; final Color? textColor; @@ -30,7 +28,7 @@ class Avatar extends StatelessWidget { this.presenceUserId, this.presenceBackgroundColor, this.borderRadius, - this.border, + this.shapeBorder, this.icon, this.backgroundColor, this.textColor, @@ -61,10 +59,12 @@ class Avatar extends StatelessWidget { color: theme.brightness == Brightness.light ? Colors.white : Colors.black, - shape: RoundedRectangleBorder( - borderRadius: borderRadius, - side: border ?? BorderSide.none, - ), + shape: + shapeBorder ?? + RoundedSuperellipseBorder( + borderRadius: borderRadius, + side: BorderSide.none, + ), clipBehavior: Clip.antiAlias, child: MxcImage( client: client, diff --git a/lib/widgets/avatar_page_header.dart b/lib/widgets/avatar_page_header.dart deleted file mode 100644 index bff0d388..00000000 --- a/lib/widgets/avatar_page_header.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/themes.dart'; - -class AvatarPageHeader extends StatelessWidget { - final Widget avatar; - final void Function()? onAvatarEdit; - final Widget? textButtonLeft, textButtonRight; - final List iconButtons; - - const AvatarPageHeader({ - super.key, - required this.avatar, - this.onAvatarEdit, - this.iconButtons = const [], - this.textButtonLeft, - this.textButtonRight, - }); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - final onAvatarEdit = this.onAvatarEdit; - return Center( - child: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: FluffyThemes.columnWidth), - child: Column( - mainAxisSize: .min, - crossAxisAlignment: .center, - spacing: 8.0, - children: [ - Stack( - children: [ - avatar, - if (onAvatarEdit != null) - Positioned( - bottom: 0, - right: 0, - child: FloatingActionButton.small( - elevation: 2, - onPressed: onAvatarEdit, - heroTag: null, - child: const Icon(Icons.camera_alt_outlined), - ), - ), - ], - ), - TextButtonTheme( - data: TextButtonThemeData( - style: TextButton.styleFrom( - disabledForegroundColor: theme.colorScheme.onSurface, - foregroundColor: theme.colorScheme.onSurface, - textStyle: const TextStyle(fontWeight: FontWeight.normal), - ), - ), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: LayoutBuilder( - builder: (context, constraints) { - return Row( - mainAxisAlignment: .center, - children: [ - ConstrainedBox( - constraints: BoxConstraints( - maxWidth: constraints.maxWidth / 2, - ), - child: textButtonLeft, - ), - ConstrainedBox( - constraints: BoxConstraints( - maxWidth: constraints.maxWidth / 2, - ), - child: textButtonRight, - ), - ], - ); - }, - ), - ), - ), - IconButtonTheme( - data: IconButtonThemeData( - style: IconButton.styleFrom( - backgroundColor: theme.colorScheme.surfaceContainer, - iconSize: 24, - padding: const EdgeInsets.all(16), - ), - ), - child: Row( - mainAxisAlignment: .spaceEvenly, - children: iconButtons, - ), - ), - const SizedBox(height: 0.0), - ], - ), - ), - ); - } -} diff --git a/lib/widgets/blur_hash.dart b/lib/widgets/blur_hash.dart index a7fc4fac..6cd2f4f8 100644 --- a/lib/widgets/blur_hash.dart +++ b/lib/widgets/blur_hash.dart @@ -1,7 +1,6 @@ +import 'package:blurhash_dart/blurhash_dart.dart' as b; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - -import 'package:blurhash_dart/blurhash_dart.dart' as b; import 'package:image/image.dart' as image; class BlurHash extends StatefulWidget { diff --git a/lib/widgets/chat_settings_popup_menu.dart b/lib/widgets/chat_settings_popup_menu.dart index 6e90a6a2..a33cc911 100644 --- a/lib/widgets/chat_settings_popup_menu.dart +++ b/lib/widgets/chat_settings_popup_menu.dart @@ -1,13 +1,12 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; + import 'matrix.dart'; enum ChatPopupMenuActions { details, mute, unmute, emote, leave, search } @@ -54,16 +53,18 @@ class ChatSettingsPopupMenuState extends State { onSelected: (choice) async { switch (choice) { case ChatPopupMenuActions.leave: + final l10n = L10n.of(context); final router = GoRouter.of(context); final confirmed = await showOkCancelAlertDialog( context: context, - title: L10n.of(context).areYouSure, - message: L10n.of(context).archiveRoomDescription, - okLabel: L10n.of(context).leave, - cancelLabel: L10n.of(context).cancel, + title: l10n.areYouSure, + message: l10n.archiveRoomDescription, + okLabel: l10n.leave, + cancelLabel: l10n.cancel, isDestructive: true, ); if (confirmed != OkCancelResult.ok) return; + if (!context.mounted) return; final result = await showFutureLoadingDialog( context: context, future: () => widget.room.leave(), diff --git a/lib/widgets/config_viewer.dart b/lib/widgets/config_viewer.dart index 080ea494..df715c33 100644 --- a/lib/widgets/config_viewer.dart +++ b/lib/widgets/config_viewer.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:shared_preferences/shared_preferences.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class ConfigViewer extends StatefulWidget { const ConfigViewer({super.key}); @@ -16,7 +14,9 @@ class ConfigViewer extends StatefulWidget { } class _ConfigViewerState extends State { - void _changeSetting( + String _searchQuery = ''; + + Future _changeSetting( AppSettings appSetting, SharedPreferences store, String initialValue, @@ -48,15 +48,32 @@ class _ConfigViewerState extends State { setState(() {}); } + Future _reset() async { + await AppSettings.reset(); + setState(() {}); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); + final normalizedQuery = _searchQuery.trim().toLowerCase(); + final filteredSettings = AppSettings.values + .where((setting) { + if (normalizedQuery.isEmpty) return true; + return setting.name.toLowerCase().contains(normalizedQuery); + }) + .toList(growable: false); + return Scaffold( appBar: AppBar( title: Text(L10n.of(context).advancedConfigurations), leading: BackButton(onPressed: () => context.go('/')), + actions: [ + TextButton(onPressed: _reset, child: Text(L10n.of(context).reset)), + ], ), body: Column( + crossAxisAlignment: .stretch, children: [ Container( margin: const EdgeInsets.all(16), @@ -67,12 +84,29 @@ class _ConfigViewerState extends State { style: TextStyle(color: theme.colorScheme.onErrorContainer), ), ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: TextField( + onChanged: (value) => setState(() => _searchQuery = value), + decoration: InputDecoration( + hintText: 'Search config key', + prefixIcon: const Icon(Icons.search), + border: const OutlineInputBorder(), + isDense: true, + filled: true, + fillColor: theme.colorScheme.surfaceContainerHighest.withAlpha( + 128, + ), + ), + ), + ), + const SizedBox(height: 8), Expanded( child: ListView.builder( - itemCount: AppSettings.values.length, + itemCount: filteredSettings.length, itemBuilder: (context, i) { final store = Matrix.of(context).store; - final appSetting = AppSettings.values[i]; + final appSetting = filteredSettings[i]; var value = ''; if (appSetting is AppSettings) { value = appSetting.value; @@ -81,7 +115,13 @@ class _ConfigViewerState extends State { value = appSetting.value.toString(); } if (appSetting is AppSettings) { - value = appSetting.value.toString(); + return SwitchListTile.adaptive( + title: Text(appSetting.name), + subtitle: Text(value), + value: appSetting.value, + onChanged: (value) => + _changeSetting(appSetting, store, (!value).toString()), + ); } if (appSetting is AppSettings) { value = appSetting.value.toString(); diff --git a/lib/widgets/error_widget.dart b/lib/widgets/error_widget.dart deleted file mode 100644 index 7e786d46..00000000 --- a/lib/widgets/error_widget.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/utils/error_reporter.dart'; - -class FluffyChatErrorWidget extends StatefulWidget { - final FlutterErrorDetails details; - const FluffyChatErrorWidget(this.details, {super.key}); - - @override - State createState() => _FluffyChatErrorWidgetState(); -} - -class _FluffyChatErrorWidgetState extends State { - static final Set knownExceptions = {}; - @override - void initState() { - super.initState(); - - if (knownExceptions.contains(widget.details.exception.toString())) { - return; - } - knownExceptions.add(widget.details.exception.toString()); - WidgetsBinding.instance.addPostFrameCallback((_) { - ErrorReporter( - context, - 'Error Widget', - ).onErrorCallback(widget.details.exception, widget.details.stack); - }); - } - - @override - Widget build(BuildContext context) { - return Material( - color: Colors.orange, - child: Placeholder( - child: Center( - child: Material( - color: Colors.white.withAlpha(230), - borderRadius: BorderRadius.circular(8), - ), - ), - ), - ); - } -} diff --git a/lib/widgets/fluffy_chat_app.dart b/lib/widgets/fluffy_chat_app.dart index 4a72d07d..79047cc9 100644 --- a/lib/widgets/fluffy_chat_app.dart +++ b/lib/widgets/fluffy_chat_app.dart @@ -1,15 +1,15 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:shared_preferences/shared_preferences.dart'; - +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/routes.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/theme_builder.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + import '../utils/custom_scroll_behaviour.dart'; import 'matrix.dart'; @@ -37,6 +37,16 @@ class FluffyChatApp extends StatelessWidget { static final GoRouter router = GoRouter( routes: AppRoutes.routes, debugLogDiagnostics: true, + redirect: (context, state) { + // Workaround for content sharings passed to go router: + if (state.uri.scheme == 'content') return '/'; + + // Pass deep links to app: + if (state.uri.toString().startsWith(AppConfig.deepLinkPrefix)) { + return '/rooms/newprivatechat?deeplink=${state.uri}'; + } + return null; + }, ); @override diff --git a/lib/widgets/future_loading_dialog.dart b/lib/widgets/future_loading_dialog.dart index cc6b1b40..9afb7b8f 100644 --- a/lib/widgets/future_loading_dialog.dart +++ b/lib/widgets/future_loading_dialog.dart @@ -1,12 +1,11 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - import 'package:async/async.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix_api_lite/utils/logs.dart'; /// Displays a loading dialog which reacts to the given [future]. The dialog /// will be dismissed and the value will be returned when the future completes. @@ -42,6 +41,15 @@ Future> showFutureLoadingDialog({ } } + if (!context.mounted) { + Logs().e( + 'Unable to show loading dialog!', + Exception('The BuildContext is not mounted!'), + StackTrace.current, + ); + return Result.capture(futureExec); + } + final result = await showAdaptiveDialog>( context: context, barrierDismissible: barrierDismissible, @@ -85,7 +93,11 @@ class LoadingDialogState extends State { void initState() { super.initState(); widget.future.then( - (result) => Navigator.of(context).pop>(Result.value(result)), + (result) { + if (!mounted) return; + if (!Navigator.of(context).canPop()) return; + Navigator.of(context).pop>(Result.value(result)); + }, onError: (e, s) => setState(() { exception = e; stackTrace = s; diff --git a/lib/widgets/layouts/login_scaffold.dart b/lib/widgets/layouts/login_scaffold.dart index 8066f1e0..5953df36 100644 --- a/lib/widgets/layouts/login_scaffold.dart +++ b/lib/widgets/layouts/login_scaffold.dart @@ -1,13 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:particles_network/particles_network.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/material.dart'; +import 'package:particles_network/particles_network.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class LoginScaffold extends StatelessWidget { final Widget body; @@ -52,7 +50,7 @@ class LoginScaffold extends StatelessWidget { ), child: Stack( children: [ - if (!MediaQuery.of(context).disableAnimations) + if (!MediaQuery.disableAnimationsOf(context)) ParticleNetwork( maxSpeed: 0.25, particleColor: theme.colorScheme.primary, @@ -118,7 +116,7 @@ class _PrivacyButtons extends StatelessWidget { mainAxisAlignment: mainAxisAlignment, children: [ TextButton( - onPressed: () => launchUrlString(AppConfig.website), + onPressed: () => launchUrlString(AppSettings.website.value), child: Text(L10n.of(context).website, style: shadowTextStyle), ), TextButton( @@ -126,7 +124,7 @@ class _PrivacyButtons extends StatelessWidget { child: Text(L10n.of(context).help, style: shadowTextStyle), ), TextButton( - onPressed: () => launchUrl(AppConfig.privacyUrl), + onPressed: () => launchUrlString(AppSettings.privacyPolicy.value), child: Text(L10n.of(context).privacy, style: shadowTextStyle), ), TextButton( diff --git a/lib/widgets/layouts/max_width_body.dart b/lib/widgets/layouts/max_width_body.dart index c0afc707..2ba70065 100644 --- a/lib/widgets/layouts/max_width_body.dart +++ b/lib/widgets/layouts/max_width_body.dart @@ -1,7 +1,6 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:flutter/material.dart'; class MaxWidthBody extends StatelessWidget { final Widget child; diff --git a/lib/widgets/layouts/two_column_layout.dart b/lib/widgets/layouts/two_column_layout.dart index 4c43d424..2b2a3f86 100644 --- a/lib/widgets/layouts/two_column_layout.dart +++ b/lib/widgets/layouts/two_column_layout.dart @@ -1,15 +1,16 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:flutter/material.dart'; class TwoColumnLayout extends StatelessWidget { final Widget mainView; final Widget sideView; + final bool hasNavigationRail; const TwoColumnLayout({ super.key, required this.mainView, required this.sideView, + this.hasNavigationRail = true, }); @override Widget build(BuildContext context) { @@ -22,7 +23,9 @@ class TwoColumnLayout extends StatelessWidget { Container( clipBehavior: Clip.antiAlias, decoration: const BoxDecoration(), - width: FluffyThemes.columnWidth + FluffyThemes.navRailWidth, + width: + FluffyThemes.columnWidth + + (hasNavigationRail ? FluffyThemes.navRailWidth : 0), child: mainView, ), Container(width: 1.0, color: theme.dividerColor), diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart index f650d95c..cf97ad50 100644 --- a/lib/widgets/local_notifications_extension.dart +++ b/lib/widgets/local_notifications_extension.dart @@ -1,14 +1,7 @@ import 'dart:io'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; -import 'package:image/image.dart'; -import 'package:matrix/matrix.dart'; -import 'package:universal_html/html.dart' as html; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_download_content_extension.dart'; @@ -16,13 +9,15 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/push_helper.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:image/image.dart'; +import 'package:matrix/matrix.dart'; +import 'package:universal_html/html.dart' as html; extension LocalNotificationsExtension on MatrixState { - static final html.AudioElement _audioPlayer = html.AudioElement() - ..src = 'assets/assets/sounds/notification.ogg' - ..load(); - - void showLocalNotification(Event event) async { + Future showLocalNotification(Event event) async { + final l10n = L10n.of(context); final roomId = event.room.id; if (activeRoomId == roomId) { if (WidgetsBinding.instance.lifecycleState == AppLifecycleState.resumed) { @@ -74,8 +69,6 @@ extension LocalNotificationsExtension on MatrixState { ); } - _audioPlayer.play(); - html.Notification( title, body: body, @@ -122,11 +115,11 @@ extension LocalNotificationsExtension on MatrixState { actions: [ NotificationAction( DesktopNotificationActions.openChat.name, - L10n.of(context).openChat, + l10n.openChat, ), NotificationAction( DesktopNotificationActions.seen.name, - L10n.of(context).markAsRead, + l10n.markAsRead, ), ], hints: hints, @@ -135,7 +128,7 @@ extension LocalNotificationsExtension on MatrixState { var action = DesktopNotificationActions.values.singleWhereOrNull( (a) => a.name == actionStr, ); - if (action == null && actionStr == "default") { + if (action == null && actionStr == 'default') { action = DesktopNotificationActions.openChat; } switch (action!) { diff --git a/lib/widgets/lock_screen.dart b/lib/widgets/lock_screen.dart index ea4bcf8c..7ecb1d22 100644 --- a/lib/widgets/lock_screen.dart +++ b/lib/widgets/lock_screen.dart @@ -1,11 +1,10 @@ import 'dart:async'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/app_lock.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; class LockScreen extends StatefulWidget { const LockScreen({super.key}); @@ -20,7 +19,7 @@ class _LockScreenState extends State { bool _inputBlocked = false; final TextEditingController _textEditingController = TextEditingController(); - void tryUnlock(String text) async { + Future tryUnlock(String text) async { text = text.trim(); setState(() { _errorText = null; diff --git a/lib/widgets/log_view.dart b/lib/widgets/log_view.dart index 402e6406..9d34ddf2 100644 --- a/lib/widgets/log_view.dart +++ b/lib/widgets/log_view.dart @@ -81,10 +81,10 @@ extension on LogEvent { String toDisplayString() { var str = '# [${level.toString().split('.').last.toUpperCase()}] $title'; if (exception != null) { - str += ' - ${exception.toString()}'; + str += ' - $exception'; } if (stackTrace != null) { - str += '\n${stackTrace.toString()}'; + str += '\n$stackTrace'; } return str; } diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index fb67822c..614bdb87 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -1,21 +1,8 @@ import 'dart:async'; import 'dart:convert'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:intl/intl.dart'; -import 'package:just_audio/just_audio.dart'; -import 'package:matrix/encryption.dart'; -import 'package:matrix/matrix.dart'; -import 'package:provider/provider.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:universal_html/html.dart' as html; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/init_with_restore.dart'; @@ -26,14 +13,24 @@ import 'package:fluffychat/utils/voip_plugin.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:intl/intl.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:matrix/encryption.dart'; +import 'package:matrix/matrix.dart'; +import 'package:provider/provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:universal_html/html.dart' as html; +import 'package:url_launcher/url_launcher_string.dart'; + import '../config/setting_keys.dart'; import '../pages/key_verification/key_verification_dialog.dart'; import '../utils/account_bundles.dart'; import '../utils/background_push.dart'; import 'local_notifications_extension.dart'; -// import 'package:flutter_secure_storage/flutter_secure_storage.dart'; - class Matrix extends StatefulWidget { final Widget? child; @@ -179,7 +176,7 @@ class MatrixState extends State with WidgetsBindingObserver { final onRoomKeyRequestSub = {}; final onKeyVerificationRequestSub = {}; final onNotification = {}; - final onLoginStateChanged = >{}; + final onLogoutSub = >{}; final onUiaRequest = >{}; String? _cachedPassword; @@ -257,31 +254,34 @@ class MatrixState extends State with WidgetsBindingObserver { context, ); }); - onLoginStateChanged[name] ??= c.onLoginStateChanged.stream.listen((state) { - final loggedInWithMultipleClients = widget.clients.length > 1; - if (state == LoginState.loggedOut) { - _cancelSubs(c.clientName); - widget.clients.remove(c); - ClientManager.removeClientNameFromStore(c.clientName, store); - InitWithRestoreExtension.deleteSessionBackup(name); - } - if (loggedInWithMultipleClients && state != LoginState.loggedIn) { - ScaffoldMessenger.of( - FluffyChatApp.router.routerDelegate.navigatorKey.currentContext ?? - context, - ).showSnackBar( - SnackBar(content: Text(L10n.of(context).oneClientLoggedOut)), - ); + onLogoutSub[name] ??= c.onLoginStateChanged.stream + .where((state) => state == LoginState.loggedOut) + .listen((_) { + final loggedInWithMultipleClients = widget.clients.length > 1; - if (state != LoginState.loggedIn) { - FluffyChatApp.router.go('/rooms'); - } - } else { - FluffyChatApp.router.go( - state == LoginState.loggedIn ? '/backup' : '/home', - ); - } - }); + _cancelSubs(c.clientName); + widget.clients.remove(c); + ClientManager.removeClientNameFromStore(c.clientName, store); + InitWithRestoreExtension.deleteSessionBackup(name); + + if (loggedInWithMultipleClients) { + final snackbarContext = + FluffyChatApp + .router + .routerDelegate + .navigatorKey + .currentContext ?? + context; + + if (!snackbarContext.mounted) return; + final l10n = L10n.of(snackbarContext); + ScaffoldMessenger.of( + snackbarContext, + ).showSnackBar(SnackBar(content: Text(l10n.oneClientLoggedOut))); + return; + } + FluffyChatApp.router.go('/'); + }); onUiaRequest[name] ??= c.onUiaRequest.stream.listen(uiaRequestHandler); if (PlatformInfos.isWeb || PlatformInfos.isLinux) { c.onSync.stream.first.then((s) { @@ -298,8 +298,8 @@ class MatrixState extends State with WidgetsBindingObserver { onRoomKeyRequestSub.remove(name); onKeyVerificationRequestSub[name]?.cancel(); onKeyVerificationRequestSub.remove(name); - onLoginStateChanged[name]?.cancel(); - onLoginStateChanged.remove(name); + onLogoutSub[name]?.cancel(); + onLogoutSub.remove(name); onNotification[name]?.cancel(); onNotification.remove(name); } @@ -344,8 +344,8 @@ class MatrixState extends State with WidgetsBindingObserver { createVoipPlugin(); } - void createVoipPlugin() async { - if (AppSettings.experimentalVoip.value) { + Future createVoipPlugin() async { + if (!AppSettings.experimentalVoip.value) { voipPlugin = null; return; } @@ -375,9 +375,8 @@ class MatrixState extends State with WidgetsBindingObserver { onRoomKeyRequestSub.values.map((s) => s.cancel()); onKeyVerificationRequestSub.values.map((s) => s.cancel()); - onLoginStateChanged.values.map((s) => s.cancel()); + onLogoutSub.values.map((s) => s.cancel()); onNotification.values.map((s) => s.cancel()); - client.httpClient.close(); linuxNotifications?.close(); @@ -390,15 +389,17 @@ class MatrixState extends State with WidgetsBindingObserver { } Future dehydrateAction(BuildContext context) async { + final l10n = L10n.of(context); final response = await showOkCancelAlertDialog( context: context, isDestructive: true, - title: L10n.of(context).dehydrate, - message: L10n.of(context).dehydrateWarning, + title: l10n.dehydrate, + message: l10n.dehydrateWarning, ); if (response != OkCancelResult.ok) { return; } + if (!context.mounted) return; final result = await showFutureLoadingDialog( context: context, future: client.exportDump, @@ -412,6 +413,7 @@ class MatrixState extends State with WidgetsBindingObserver { 'fluffychat-export-${DateFormat(DateFormat.YEAR_MONTH_DAY).format(DateTime.now())}.fluffybackup'; final file = MatrixFile(bytes: exportBytes, name: exportFileName); + if (!context.mounted) return; file.save(context); } } diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart index 56ecd993..1ae71387 100644 --- a/lib/widgets/member_actions_popup_menu_button.dart +++ b/lib/widgets/member_actions_popup_menu_button.dart @@ -1,20 +1,21 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import 'adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'adaptive_dialogs/show_text_input_dialog.dart'; import 'adaptive_dialogs/user_dialog.dart'; import 'avatar.dart'; import 'future_loading_dialog.dart'; -void showMemberActionsPopupMenu({ +Future showMemberActionsPopupMenu({ required BuildContext context, required User user, void Function()? onMention, }) async { + final l10n = L10n.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final theme = Theme.of(context); final displayname = user.calcDisplayname(); final isMe = user.room.client.userID == user.id; @@ -34,6 +35,8 @@ void showMemberActionsPopupMenu({ Offset.zero & overlay.size, ); + const defaultPowerLevels = {0, 50, 100, 9007199254740991}; + final action = await showMenu<_MemberActions>( context: context, position: position, @@ -43,42 +46,18 @@ void showMemberActionsPopupMenu({ child: Row( spacing: 12.0, children: [ - Avatar( - name: displayname, - mxContent: user.avatarUrl, - presenceUserId: user.id, - presenceBackgroundColor: theme.colorScheme.surfaceContainer, - ), - Column( - mainAxisSize: .min, - crossAxisAlignment: .start, - children: [ - ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 128), - child: Text( - displayname, - textAlign: TextAlign.center, - style: theme.textTheme.labelLarge, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 128), - child: Text( - user.id, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 10), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], + Avatar(name: displayname, size: 30, mxContent: user.avatarUrl), + ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 200), + child: Text( + displayname, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), ), ], ), ), - const PopupMenuDivider(), if (onMention != null) PopupMenuItem( value: _MemberActions.mention, @@ -101,31 +80,71 @@ void showMemberActionsPopupMenu({ ], ), ), - PopupMenuItem( - enabled: user.room.canChangePowerLevel && user.canChangeUserPowerLevel, - value: _MemberActions.setRole, - child: Row( - children: [ - const Icon(Icons.admin_panel_settings_outlined), - const SizedBox(width: 18), - Column( - mainAxisSize: .min, - crossAxisAlignment: .start, + if (user.canChangeUserPowerLevel) ...[ + if (user.powerLevel < 100) + PopupMenuItem( + value: _MemberActions.makeAdmin, + child: Row( children: [ - Text(L10n.of(context).chatPermissions), - Text( - user.powerLevel < 50 - ? L10n.of(context).userLevel(user.powerLevel) - : user.powerLevel < 100 - ? L10n.of(context).moderatorLevel(user.powerLevel) - : L10n.of(context).adminLevel(user.powerLevel), - style: const TextStyle(fontSize: 10), - ), + const Icon(Icons.admin_panel_settings_outlined), + const SizedBox(width: 18), + Text(L10n.of(context).makeAdmin), ], ), - ], + ), + if (user.powerLevel < 50) + PopupMenuItem( + value: _MemberActions.makeModerator, + child: Row( + children: [ + const Icon(Icons.add_moderator_outlined), + const SizedBox(width: 18), + Text(L10n.of(context).makeModerator), + ], + ), + ), + if (user.powerLevel >= 100) + PopupMenuItem( + value: _MemberActions.removeAdmin, + child: Row( + children: [ + const Icon(Icons.remove_moderator_outlined), + const SizedBox(width: 18), + Text(L10n.of(context).removeAdminRights), + ], + ), + ) + else if (user.powerLevel >= 50) + PopupMenuItem( + value: _MemberActions.removeModerator, + child: Row( + children: [ + const Icon(Icons.remove_moderator_outlined), + const SizedBox(width: 18), + Text(L10n.of(context).removeModeratorRights), + ], + ), + ), + ], + if (user.canChangeUserPowerLevel || + !defaultPowerLevels.contains(user.powerLevel)) + PopupMenuItem( + value: _MemberActions.setPowerLevel, + enabled: user.canChangeUserPowerLevel, + child: Row( + children: [ + const Icon(Icons.manage_accounts_outlined), + const SizedBox(width: 18), + Text( + user.canChangeUserPowerLevel + ? L10n.of(context).setPowerLevel + : L10n.of(context).powerLevel, + ), + if (!defaultPowerLevels.contains(user.powerLevel)) + Text(' (${user.powerLevel})'), + ], + ), ), - ), if (user.canKick) PopupMenuItem( value: _MemberActions.kick, @@ -197,7 +216,7 @@ void showMemberActionsPopupMenu({ case _MemberActions.mention: onMention?.call(); return; - case _MemberActions.setRole: + case _MemberActions.setPowerLevel: final power = await showPermissionChooser( context, currentLevel: user.powerLevel, @@ -228,12 +247,13 @@ void showMemberActionsPopupMenu({ case _MemberActions.kick: if (await showOkCancelAlertDialog( context: context, - title: L10n.of(context).areYouSure, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).no, - message: L10n.of(context).kickUserDescription, + title: l10n.areYouSure, + okLabel: l10n.yes, + cancelLabel: l10n.no, + message: l10n.kickUserDescription, ) == OkCancelResult.ok) { + if (!context.mounted) return; await showFutureLoadingDialog( context: context, future: () => user.kick(), @@ -243,12 +263,13 @@ void showMemberActionsPopupMenu({ case _MemberActions.ban: if (await showOkCancelAlertDialog( context: context, - title: L10n.of(context).areYouSure, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).no, - message: L10n.of(context).banUserDescription, + title: l10n.areYouSure, + okLabel: l10n.yes, + cancelLabel: l10n.no, + message: l10n.banUserDescription, ) == OkCancelResult.ok) { + if (!context.mounted) return; await showFutureLoadingDialog( context: context, future: () => user.ban(), @@ -258,20 +279,22 @@ void showMemberActionsPopupMenu({ case _MemberActions.report: final reason = await showTextInputDialog( context: context, - title: L10n.of(context).whyDoYouWantToReportThis, - okLabel: L10n.of(context).report, - cancelLabel: L10n.of(context).cancel, - hintText: L10n.of(context).reason, + title: l10n.whyDoYouWantToReportThis, + okLabel: l10n.report, + cancelLabel: l10n.cancel, + hintText: l10n.reason, ); if (reason == null || reason.isEmpty) return; + if (!context.mounted) return; final result = await showFutureLoadingDialog( context: context, future: () => user.room.client.reportUser(user.id, reason), ); if (result.error != null) return; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context).contentHasBeenReported)), + if (!context.mounted) return; + scaffoldMessenger.showSnackBar( + SnackBar(content: Text(l10n.contentHasBeenReported)), ); return; case _MemberActions.info: @@ -287,24 +310,60 @@ void showMemberActionsPopupMenu({ case _MemberActions.unban: if (await showOkCancelAlertDialog( context: context, - title: L10n.of(context).areYouSure, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).no, - message: L10n.of(context).unbanUserDescription, + title: l10n.areYouSure, + okLabel: l10n.yes, + cancelLabel: l10n.no, + message: l10n.unbanUserDescription, ) == OkCancelResult.ok) { + if (!context.mounted) return; await showFutureLoadingDialog( context: context, future: () => user.unban(), ); } + case _MemberActions.makeAdmin: + if (user.room.ownPowerLevel <= 100) { + final consent = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context).areYouSure, + message: L10n.of(context).makeAdminDescription, + ); + if (consent != OkCancelResult.ok) return; + if (!context.mounted) return; + } + await showFutureLoadingDialog( + context: context, + future: () => user.setPower(100), + ); + case _MemberActions.makeModerator: + await showFutureLoadingDialog( + context: context, + future: () => user.setPower(50), + ); + case _MemberActions.removeAdmin: + case _MemberActions.removeModerator: + final defaultUserLevel = + user.room + .getState(EventTypes.RoomPowerLevels) + ?.content + .tryGet('users_default') ?? + 0; + await showFutureLoadingDialog( + context: context, + future: () => user.setPower(defaultUserLevel), + ); } } enum _MemberActions { info, mention, - setRole, + setPowerLevel, + makeAdmin, + makeModerator, + removeAdmin, + removeModerator, kick, ban, approve, diff --git a/lib/widgets/mxc_image.dart b/lib/widgets/mxc_image.dart index 1572fa6b..b0f86815 100644 --- a/lib/widgets/mxc_image.dart +++ b/lib/widgets/mxc_image.dart @@ -2,14 +2,12 @@ import 'dart:io'; import 'dart:math'; import 'dart:typed_data'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/utils/client_download_content_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class MxcImage extends StatefulWidget { final Uri? uri; @@ -109,7 +107,7 @@ class _MxcImageState extends State { } } - void _tryLoad() async { + Future _tryLoad() async { if (_imageData != null) { return; } @@ -128,15 +126,6 @@ class _MxcImageState extends State { WidgetsBinding.instance.addPostFrameCallback((_) => _tryLoad()); } - Widget placeholder(BuildContext context) => - widget.placeholder?.call(context) ?? - Container( - width: widget.width, - height: widget.height, - alignment: Alignment.center, - child: const CircularProgressIndicator.adaptive(strokeWidth: 2), - ); - @override Widget build(BuildContext context) { final data = _imageData; @@ -172,7 +161,34 @@ class _MxcImageState extends State { }, ), ) - : placeholder(context), + : _MxcImagePlaceholder( + width: widget.width, + height: widget.height, + placeholder: widget.placeholder, + ), ); } } + +class _MxcImagePlaceholder extends StatelessWidget { + final double? width; + final double? height; + final Widget Function(BuildContext context)? placeholder; + + const _MxcImagePlaceholder({ + required this.width, + required this.height, + required this.placeholder, + }); + + @override + Widget build(BuildContext context) { + return placeholder?.call(context) ?? + Container( + width: width, + height: height, + alignment: Alignment.center, + child: const CircularProgressIndicator.adaptive(strokeWidth: 2), + ); + } +} diff --git a/lib/widgets/mxc_image_viewer.dart b/lib/widgets/mxc_image_viewer.dart index be075d79..b4b70d00 100644 --- a/lib/widgets/mxc_image_viewer.dart +++ b/lib/widgets/mxc_image_viewer.dart @@ -1,6 +1,6 @@ +import 'package:fluffychat/l10n/l10n.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import 'mxc_image.dart'; class MxcImageViewer extends StatelessWidget { diff --git a/lib/widgets/navigation_rail.dart b/lib/widgets/navigation_rail.dart index f6df4e29..3b0eea3e 100644 --- a/lib/widgets/navigation_rail.dart +++ b/lib/widgets/navigation_rail.dart @@ -1,16 +1,15 @@ -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/navi_rail_item.dart'; +import 'package:fluffychat/pages/chat_list/start_chat_fab.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class SpacesNavigationRail extends StatelessWidget { final String? activeSpaceId; @@ -27,9 +26,6 @@ class SpacesNavigationRail extends StatelessWidget { @override Widget build(BuildContext context) { final client = Matrix.of(context).client; - final isSettings = GoRouter.of( - context, - ).routeInformationProvider.value.uri.path.startsWith('/rooms/settings'); return Material( child: SafeArea( child: StreamBuilder( @@ -55,7 +51,7 @@ class SpacesNavigationRail extends StatelessWidget { itemBuilder: (context, i) { if (i == 0) { return NaviRailItem( - isSelected: activeSpaceId == null && !isSettings, + isSelected: activeSpaceId == null, onTap: onGoToChats, icon: const Padding( padding: EdgeInsets.all(10.0), @@ -98,31 +94,28 @@ class SpacesNavigationRail extends StatelessWidget { icon: Avatar( mxContent: allSpaces[i].avatar, name: displayname, - border: BorderSide( - width: 1, - color: Theme.of(context).dividerColor, + shapeBorder: RoundedSuperellipseBorder( + side: BorderSide( + width: 1, + color: Theme.of(context).dividerColor, + ), + borderRadius: BorderRadius.circular( + AppConfig.spaceBorderRadius, + ), ), borderRadius: BorderRadius.circular( - AppConfig.borderRadius / 2, + AppConfig.spaceBorderRadius, ), ), ); }, ), ), - NaviRailItem( - isSelected: isSettings, - onTap: () => context.go('/rooms/settings'), - icon: const Padding( - padding: EdgeInsets.all(10.0), - child: Icon(Icons.settings_outlined), + if (FluffyThemes.isColumnMode(context)) + Padding( + padding: const EdgeInsets.all(12.0), + child: StartChatFab(), ), - selectedIcon: const Padding( - padding: EdgeInsets.all(10.0), - child: Icon(Icons.settings), - ), - toolTip: L10n.of(context).settings, - ), ], ), ); diff --git a/lib/widgets/permission_slider_dialog.dart b/lib/widgets/permission_slider_dialog.dart index dd613eed..5b04216a 100644 --- a/lib/widgets/permission_slider_dialog.dart +++ b/lib/widgets/permission_slider_dialog.dart @@ -1,15 +1,14 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/dialog_text_field.dart'; +import 'package:flutter/material.dart'; Future showPermissionChooser( BuildContext context, { int currentLevel = 0, int maxLevel = 100, }) async { - final controller = TextEditingController(); + final controller = TextEditingController(text: currentLevel.toString()); final error = ValueNotifier(null); return await showAdaptiveDialog( context: context, @@ -20,9 +19,9 @@ Future showPermissionChooser( child: Column( mainAxisSize: .min, crossAxisAlignment: .stretch, - spacing: 12.0, + spacing: 16.0, children: [ - Text(L10n.of(context).setPermissionsLevelDescription), + Text(L10n.of(context).setPowerLevelDescription), ValueListenableBuilder( valueListenable: error, builder: (context, errorText, _) => DialogTextField( @@ -38,8 +37,6 @@ Future showPermissionChooser( ), actions: [ AdaptiveDialogAction( - bigButtons: true, - borderRadius: AdaptiveDialogAction.topRadius, onPressed: () { final level = int.tryParse(controller.text.trim()); if (level == null) { @@ -52,31 +49,12 @@ Future showPermissionChooser( } Navigator.of(context).pop(level); }, - child: Text(L10n.of(context).setCustomPermissionLevel), + child: Text(L10n.of(context).setPowerLevel), + ), + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(null), + child: Text(L10n.of(context).cancel), ), - if (maxLevel >= 100 && currentLevel != 100) - AdaptiveDialogAction( - borderRadius: AdaptiveDialogAction.centerRadius, - bigButtons: true, - onPressed: () => Navigator.of(context).pop(100), - child: Text(L10n.of(context).admin), - ), - if (maxLevel >= 50 && currentLevel != 50) - AdaptiveDialogAction( - borderRadius: maxLevel != 0 - ? AdaptiveDialogAction.centerRadius - : AdaptiveDialogAction.bottomRadius, - bigButtons: true, - onPressed: () => Navigator.of(context).pop(50), - child: Text(L10n.of(context).moderator), - ), - if (currentLevel != 0) - AdaptiveDialogAction( - borderRadius: AdaptiveDialogAction.bottomRadius, - bigButtons: true, - onPressed: () => Navigator.of(context).pop(0), - child: Text(L10n.of(context).normalUser), - ), ], ), ); diff --git a/lib/widgets/presence_builder.dart b/lib/widgets/presence_builder.dart index 33f5b054..05b0c6ae 100644 --- a/lib/widgets/presence_builder.dart +++ b/lib/widgets/presence_builder.dart @@ -1,10 +1,8 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; class PresenceBuilder extends StatefulWidget { final Widget Function(BuildContext context, CachedPresence? presence) builder; diff --git a/lib/widgets/qr_code_viewer.dart b/lib/widgets/qr_code_viewer.dart index f8653a68..aee6d7e5 100644 --- a/lib/widgets/qr_code_viewer.dart +++ b/lib/widgets/qr_code_viewer.dart @@ -1,16 +1,15 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:image/image.dart'; -import 'package:matrix/matrix.dart'; -import 'package:pretty_qr_code/pretty_qr_code.dart'; -import 'package:qr_image/qr_image.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:image/image.dart'; +import 'package:matrix/matrix.dart'; +import 'package:pretty_qr_code/pretty_qr_code.dart'; +import 'package:qr_image/qr_image.dart'; + import '../config/themes.dart'; Future showQrCodeViewer(BuildContext context, String content) => @@ -24,10 +23,10 @@ class QrCodeViewer extends StatelessWidget { const QrCodeViewer({required this.content, super.key}); - void _save(BuildContext context) async { + Future _save(BuildContext context) async { final imageResult = await showFutureLoadingDialog( context: context, - future: () async { + future: () { final inviteLink = 'https://matrix.to/#/$content'; final image = QRImage(inviteLink, size: 256, radius: 1).generate(); return compute(encodePng, image); @@ -91,7 +90,11 @@ class QrCodeViewer extends StatelessWidget { margin: const EdgeInsets.all(32.0), padding: const EdgeInsets.all(32.0), decoration: BoxDecoration( - color: theme.colorScheme.primaryContainer, + border: Border.all( + color: theme.colorScheme.onPrimaryContainer, + width: 4, + ), + color: theme.colorScheme.surfaceBright, borderRadius: BorderRadius.circular(AppConfig.borderRadius), ), child: Column( diff --git a/lib/widgets/settings_switch_list_tile.dart b/lib/widgets/settings_switch_list_tile.dart index f625f9e6..90bc3aec 100644 --- a/lib/widgets/settings_switch_list_tile.dart +++ b/lib/widgets/settings_switch_list_tile.dart @@ -1,6 +1,5 @@ -import 'package:flutter/material.dart'; - import 'package:fluffychat/config/setting_keys.dart'; +import 'package:flutter/material.dart'; class SettingsSwitchListTile extends StatefulWidget { final AppSettings setting; diff --git a/lib/widgets/share_scaffold_dialog.dart b/lib/widgets/share_scaffold_dialog.dart index fa80896b..2a219d67 100644 --- a/lib/widgets/share_scaffold_dialog.dart +++ b/lib/widgets/share_scaffold_dialog.dart @@ -1,15 +1,13 @@ -import 'package:flutter/material.dart'; - import 'package:cross_file/cross_file.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; abstract class ShareItem {} @@ -48,7 +46,7 @@ class _ShareScaffoldDialogState extends State { }); } - void _forwardAction() async { + Future _forwardAction() async { final roomId = selectedRoomId; if (roomId == null) { throw Exception( diff --git a/lib/widgets/theme_builder.dart b/lib/widgets/theme_builder.dart index 669c8891..de1c5bad 100644 --- a/lib/widgets/theme_builder.dart +++ b/lib/widgets/theme_builder.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; import 'package:dynamic_color/dynamic_color.dart'; +import 'package:fluffychat/utils/color_value.dart'; +import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:fluffychat/utils/color_value.dart'; - class ThemeBuilder extends StatefulWidget { final Widget Function( BuildContext context, @@ -41,7 +39,7 @@ class ThemeController extends State { static ThemeController of(BuildContext context) => Provider.of(context, listen: false); - void _loadData(dynamic _) async { + Future _loadData(_) async { final preferences = _sharedPreferences ??= await SharedPreferences.getInstance(); diff --git a/lib/widgets/unread_rooms_badge.dart b/lib/widgets/unread_rooms_badge.dart index 986316bd..9e3f9932 100644 --- a/lib/widgets/unread_rooms_badge.dart +++ b/lib/widgets/unread_rooms_badge.dart @@ -1,6 +1,5 @@ -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart' as b; +import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'matrix.dart'; diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index deccda1d..b586adbb 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -45,9 +44,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin"); flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar); - g_autoptr(FlPluginRegistrar) gtk_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin"); - gtk_plugin_register_with_registrar(gtk_registrar); g_autoptr(FlPluginRegistrar) handy_window_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "HandyWindowPlugin"); handy_window_plugin_register_with_registrar(handy_window_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 53413056..95cd5f00 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -10,7 +10,6 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux flutter_secure_storage_linux flutter_webrtc - gtk handy_window record_linux screen_retriever_linux diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 03f1fc53..a334837f 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,7 +5,6 @@ import FlutterMacOS import Foundation -import app_links import audio_session import desktop_drop import desktop_webview_window @@ -22,7 +21,6 @@ import flutter_webrtc import geolocator_apple import just_audio import package_info_plus -import path_provider_foundation import record_macos import screen_retriever_macos import share_plus @@ -37,7 +35,6 @@ import window_manager import window_to_front func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin")) AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin")) DesktopDropPlugin.register(with: registry.registrar(forPlugin: "DesktopDropPlugin")) DesktopWebviewWindowPlugin.register(with: registry.registrar(forPlugin: "DesktopWebviewWindowPlugin")) @@ -54,7 +51,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) - PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) RecordMacOsPlugin.register(with: registry.registrar(forPlugin: "RecordMacOsPlugin")) ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index ce2bf67b..e803f959 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,6 +1,4 @@ PODS: - - app_links (6.4.1): - - FlutterMacOS - audio_session (0.0.1): - FlutterMacOS - desktop_drop (0.0.1): @@ -30,7 +28,7 @@ PODS: - FlutterMacOS - flutter_webrtc (1.2.0): - FlutterMacOS - - WebRTC-SDK (= 137.7151.04) + - WebRTC-SDK (= 137.7151.12) - FlutterMacOS (1.0.0) - geolocator_apple (1.2.0): - Flutter @@ -40,10 +38,7 @@ PODS: - FlutterMacOS - package_info_plus (0.0.1): - FlutterMacOS - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - record_macos (1.1.0): + - record_macos (1.2.0): - FlutterMacOS - screen_retriever_macos (0.0.1): - FlutterMacOS @@ -72,14 +67,13 @@ PODS: - webcrypto (0.1.1): - Flutter - FlutterMacOS - - WebRTC-SDK (137.7151.04) + - WebRTC-SDK (137.7151.12) - window_manager (0.5.0): - FlutterMacOS - window_to_front (0.0.1): - FlutterMacOS DEPENDENCIES: - - app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`) - audio_session (from `Flutter/ephemeral/.symlinks/plugins/audio_session/macos`) - desktop_drop (from `Flutter/ephemeral/.symlinks/plugins/desktop_drop/macos`) - desktop_webview_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos`) @@ -98,7 +92,6 @@ DEPENDENCIES: - geolocator_apple (from `Flutter/ephemeral/.symlinks/plugins/geolocator_apple/darwin`) - just_audio (from `Flutter/ephemeral/.symlinks/plugins/just_audio/darwin`) - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - record_macos (from `Flutter/ephemeral/.symlinks/plugins/record_macos/macos`) - screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`) - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) @@ -118,8 +111,6 @@ SPEC REPOS: - WebRTC-SDK EXTERNAL SOURCES: - app_links: - :path: Flutter/ephemeral/.symlinks/plugins/app_links/macos audio_session: :path: Flutter/ephemeral/.symlinks/plugins/audio_session/macos desktop_drop: @@ -156,8 +147,6 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/just_audio/darwin package_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos - path_provider_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin record_macos: :path: Flutter/ephemeral/.symlinks/plugins/record_macos/macos screen_retriever_macos: @@ -184,7 +173,6 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_to_front/macos SPEC CHECKSUMS: - app_links: 05a6ec2341985eb05e9f97dc63f5837c39895c3f audio_session: eaca2512cf2b39212d724f35d11f46180ad3a33e desktop_drop: 10a3e6a7fa9dbe350541f2574092fecfa345a07b desktop_webview_window: 7e37af677d6d19294cb433d9b1d878ef78dffa4d @@ -193,29 +181,28 @@ SPEC CHECKSUMS: emoji_picker_flutter: 51ca408e289d84d1e460016b2a28721ec754fcf7 file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a file_selector_macos: 9e9e068e90ebee155097d00e89ae91edb2374db7 - flutter_local_notifications: 4bf37a31afde695b56091b4ae3e4d9c7a7e6cda0 + flutter_local_notifications: 1fc7ffb10a83d6a2eeeeddb152d43f1944b0aad0 flutter_new_badger: 6fe9bf7e42793a164032c21f164c0ad9985cd0f2 flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23 flutter_vodozemac: fd2ea9cb3e2a37beaac883a369811fbfe042fc53 flutter_web_auth_2: 7fe624ff12ddcb4c19e5dbcd56c9e9ea4899d967 - flutter_webrtc: 718eae22a371cd94e5d56aa4f301443ebc5bb737 + flutter_webrtc: 7cda18a9cd917db2f8bfcde8011804f6018a12df FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed package_info_plus: f0052d280d17aa382b932f399edf32507174e870 - path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 - record_macos: 43194b6c06ca6f8fa132e2acea72b202b92a0f5b + record_macos: 7f227161b93c49e7e34fe681c5891c8622c8cc8b screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc - shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb SQLCipher: eb79c64049cb002b4e9fcb30edb7979bf4706dfc sqlcipher_flutter_libs: 01ead34db27ae5e49987cae46c8a34199eb22cfe - url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 + url_launcher_macos: f87a979182d112f911de6820aefddaf56ee9fbfd video_compress: 752b161da855df2492dd1a8fa899743cc8fe9534 - video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b + video_player_avfoundation: dd410b52df6d2466a42d28550e33e4146928280a wakelock_plus: 917609be14d812ddd9e9528876538b2263aaa03b webcrypto: a5f5eb3e375cf0a99993e207e97cdcab5c94ce2e - WebRTC-SDK: 40d4f5ba05cadff14e4db5614aec402a633f007e + WebRTC-SDK: 1762e2de812354d27a8407d1b2c532064ec39fce window_manager: b729e31d38fb04905235df9ea896128991cad99e window_to_front: 9e76fd432e36700a197dac86a0011e49c89abe0a diff --git a/pubspec.lock b/pubspec.lock index 6dc79d3b..63be6383 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,14 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "8.4.1" - animations: - dependency: "direct main" + analyzer_plugin: + dependency: transitive description: - name: animations - sha256: "18938cefd7dcc04e1ecac0db78973761a01e4bc2d6bfae0cfa596bfeac9e96ab" + name: analyzer_plugin + sha256: "825071d553c4aef2252196d46a665fbd8e0cb06de07725f25d1b29bd18d65fff" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "0.13.6" ansicolor: dependency: transitive description: @@ -33,46 +33,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" - app_links: - dependency: "direct main" - description: - name: app_links - sha256: "5f88447519add627fe1cbcab4fd1da3d4fed15b9baf29f28b22535c95ecee3e8" - url: "https://pub.dev" - source: hosted - version: "6.4.1" - app_links_linux: - dependency: transitive - description: - name: app_links_linux - sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - app_links_platform_interface: - dependency: transitive - description: - name: app_links_platform_interface - sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - app_links_web: - dependency: transitive - description: - name: app_links_web - sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555 - url: "https://pub.dev" - source: hosted - version: "1.0.4" archive: dependency: "direct main" description: name: archive - sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff url: "https://pub.dev" source: hosted - version: "4.0.7" + version: "4.0.9" args: dependency: transitive description: @@ -93,10 +61,10 @@ packages: dependency: transitive description: name: audio_session - sha256: "2b7fff16a552486d078bfc09a8cde19f426dc6d6329262b684182597bec5b1ac" + sha256: "8f96a7fecbb718cb093070f868b4cdcb8a9b1053dce342ff8ab2fde10eb9afb7" url: "https://pub.dev" source: hosted - version: "0.1.25" + version: "0.2.2" badges: dependency: "direct main" description: @@ -141,10 +109,10 @@ packages: dependency: transitive description: name: build_cli_annotations - sha256: b59d2769769efd6c9ff6d4c4cede0be115a566afc591705c2040b707534b1172 + sha256: e563c2e01de8974566a1998410d3f6f03521788160a02503b0b1f1a46c7b3d95 url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" canonical_json: dependency: transitive description: @@ -157,10 +125,10 @@ packages: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" charcode: dependency: transitive description: @@ -173,10 +141,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" chewie: dependency: "direct main" description: @@ -209,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687" + url: "https://pub.dev" + source: hosted + version: "1.0.0" collection: dependency: "direct main" description: @@ -237,26 +213,26 @@ packages: dependency: transitive description: name: coverage - sha256: "802bd084fb82e55df091ec8ad1553a7331b61c08251eef19a508b6f3f3a9858d" + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" url: "https://pub.dev" source: hosted - version: "1.13.1" + version: "1.15.0" cross_file: dependency: "direct main" description: name: cross_file - sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239" + sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.5+2" crypto: dependency: transitive description: name: crypto - sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.7" csslib: dependency: transitive description: @@ -266,13 +242,21 @@ packages: source: hosted version: "1.0.2" cupertino_icons: - dependency: "direct main" + dependency: transitive description: name: cupertino_icons sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted version: "1.0.8" + dart_code_linter: + dependency: "direct dev" + description: + name: dart_code_linter + sha256: "1b53722d9933a5f5d4580acc29c7f16b1fde66d21d1ecf7bb2a811caf3a42b42" + url: "https://pub.dev" + source: hosted + version: "3.2.1" dart_earcut: dependency: transitive description: @@ -289,6 +273,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b + url: "https://pub.dev" + source: hosted + version: "3.1.3" dart_webrtc: dependency: transitive description: @@ -301,10 +293,10 @@ packages: dependency: transitive description: name: dbus - sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" desktop_drop: dependency: "direct main" description: @@ -373,10 +365,10 @@ packages: dependency: transitive description: name: ffi - sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" file: dependency: transitive description: @@ -405,18 +397,18 @@ packages: dependency: transitive description: name: file_selector_android - sha256: "6bba3d590ee9462758879741abc132a19133600dd31832f55627442f1ebd7b54" + sha256: "51e8fd0446de75e4b62c065b76db2210c704562d072339d333bd89c57a7f8a7c" url: "https://pub.dev" source: hosted - version: "0.5.1+14" + version: "0.5.2+4" file_selector_ios: dependency: transitive description: name: file_selector_ios - sha256: "94b98ad950b8d40d96fee8fa88640c2e4bd8afcdd4817993bd04e20310f45420" + sha256: e2ecf2885c121691ce13b60db3508f53c01f869fb6e8dc5c1cfa771e4c46aeca url: "https://pub.dev" source: hosted - version: "0.5.3+1" + version: "0.5.3+5" file_selector_linux: dependency: transitive description: @@ -453,10 +445,10 @@ packages: dependency: transitive description: name: file_selector_windows - sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" + sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" url: "https://pub.dev" source: hosted - version: "0.9.3+4" + version: "0.9.3+5" fixnum: dependency: transitive description: @@ -479,10 +471,10 @@ packages: dependency: "direct main" description: name: flutter_foreground_task - sha256: "48ea45056155a99fb30b15f14f4039a044d925bc85f381ed0b2d3b00a60b99de" + sha256: "1903697944a31f596622e51a6af55e3a9dfb27762f9763ab2841184098c6b0ba" url: "https://pub.dev" source: hosted - version: "9.2.0" + version: "9.2.1" flutter_linkify: dependency: "direct main" description: @@ -503,34 +495,34 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: "19ffb0a8bb7407875555e5e98d7343a633bb73707bae6c6a5f37c90014077875" + sha256: "0d9035862236fe38250fe1644d7ed3b8254e34a21b2c837c9f539fbb3bba5ef1" url: "https://pub.dev" source: hosted - version: "19.5.0" + version: "21.0.0" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: e3c277b2daab8e36ac5a6820536668d07e83851aeeb79c446e525a70710770a5 + sha256: e0f25e243c6c44c825bbbc6b2b2e76f7d9222362adcfe9fd780bf01923c840bd url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "8.0.0" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "277d25d960c15674ce78ca97f57d0bae2ee401c844b6ac80fcd972a9c99d09fe" + sha256: e7db3d5b49c2b7ecc68deba4aaaa67a348f92ee0fef34c8e4b4459dbef0d7307 url: "https://pub.dev" source: hosted - version: "9.1.0" + version: "11.0.0" flutter_local_notifications_windows: dependency: transitive description: name: flutter_local_notifications_windows - sha256: "8d658f0d367c48bd420e7cf2d26655e2d1130147bca1eea917e576ca76668aaf" + sha256: "3a2654ba104fbb52c618ebed9def24ef270228470718c43b3a6afcd5c81bef0c" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "3.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -564,10 +556,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e + sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1 url: "https://pub.dev" source: hosted - version: "2.0.28" + version: "2.0.33" flutter_rust_bridge: dependency: transitive description: @@ -641,10 +633,10 @@ packages: dependency: "direct main" description: name: flutter_vodozemac - sha256: "16d4b44dd338689441fe42a80d0184e5c864e9563823de9e7e6371620d2c0590" + sha256: ef4c3580a7f2fe8eebb7602c6cba593a42b4a5e5466c372a022f77ccc14914a5 url: "https://pub.dev" source: hosted - version: "0.4.1" + version: "0.5.0" flutter_web_auth_2: dependency: "direct main" description: @@ -670,10 +662,10 @@ packages: dependency: "direct main" description: name: flutter_webrtc - sha256: "0f86b518e9349e71a136a96e0ea11294cad8a8531b2bc9ae99e69df332ac898a" + sha256: c549ea8ffb20167110ad0a28e5f17a2650b5bea8837d984898cd9b0ffd5fa78b url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" frontend_server_client: dependency: transitive description: @@ -763,10 +755,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: eff94d2a6fc79fa8b811dde79c7549808c2346037ee107a1121b4a644c745f2a + sha256: "7974313e217a7771557add6ff2238acb63f635317c35fa590d348fb238f00896" url: "https://pub.dev" source: hosted - version: "17.0.1" + version: "17.1.0" gsettings: dependency: transitive description: @@ -775,22 +767,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.8" - gtk: - dependency: transitive - description: - name: gtk - sha256: e8ce9ca4b1df106e4d72dad201d345ea1a036cc12c360f1a7d5a758f78ffa42c - url: "https://pub.dev" - source: hosted - version: "2.1.0" handy_window: dependency: "direct main" description: name: handy_window - sha256: "56b813e58a68b0ee2ab22051400b8b1f1b5cfe88b8cd32288623defb3926245a" + sha256: "06cc2747607022dbcea54b9b863db0962d34d606f998831a9b05a551c5184462" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.2" highlight: dependency: "direct main" description: @@ -799,6 +783,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + hooks: + dependency: transitive + description: + name: hooks + sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6" + url: "https://pub.dev" + source: hosted + version: "1.0.1" html: dependency: "direct main" description: @@ -843,10 +835,10 @@ packages: dependency: "direct main" description: name: image - sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c" + sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.8.0" image_picker: dependency: "direct main" description: @@ -859,26 +851,26 @@ packages: dependency: transitive description: name: image_picker_android - sha256: e83b2b05141469c5e19d77e1dfa11096b6b1567d09065b2265d7c6904560050c + sha256: "518a16108529fc18657a3e6dde4a043dc465d16596d20ab2abd49a4cac2e703d" url: "https://pub.dev" source: hosted - version: "0.8.13" + version: "0.8.13+13" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" + sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e + sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588 url: "https://pub.dev" source: hosted - version: "0.8.13" + version: "0.8.13+6" image_picker_linux: dependency: transitive description: @@ -891,18 +883,18 @@ packages: dependency: transitive description: name: image_picker_macos - sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04 + sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" url: "https://pub.dev" source: hosted - version: "0.2.2" + version: "0.2.2+1" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665" + sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.11.1" image_picker_windows: dependency: transitive description: @@ -911,14 +903,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" - import_sorter: - dependency: "direct dev" - description: - name: import_sorter - sha256: eb15738ccead84e62c31e0208ea4e3104415efcd4972b86906ca64a1187d0836 - url: "https://pub.dev" - source: hosted - version: "4.6.0" integration_test: dependency: "direct dev" description: flutter @@ -952,10 +936,10 @@ packages: dependency: transitive description: name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + sha256: "805fa86df56383000f640384b282ce0cb8431f1a7a2396de92fb66186d8c57df" url: "https://pub.dev" source: hosted - version: "4.9.0" + version: "4.10.0" just_audio: dependency: "direct main" description: @@ -992,10 +976,10 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0" + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "11.0.1" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: @@ -1021,7 +1005,7 @@ packages: source: hosted version: "1.6.2" linkify: - dependency: "direct main" + dependency: transitive description: name: linkify sha256: "4139ea77f4651ab9c315b577da2dd108d9aa0bd84b5d03d33323f1970c645832" @@ -1032,10 +1016,10 @@ packages: dependency: transitive description: name: lints - sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" lists: dependency: transitive description: @@ -1048,10 +1032,10 @@ packages: dependency: transitive description: name: logger - sha256: be4b23575aac7ebf01f225a241eb7f6b5641eeaf43c6a8613510fc2f8cf187d1 + sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.2" logging: dependency: transitive description: @@ -1072,26 +1056,26 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.19" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" matrix: dependency: "direct main" description: name: matrix - sha256: f1c0cc366a8cd0b9aec6b57f81203c4d9aa9f92793f7ac12ae50410648b070e4 + sha256: "5bb38e98212bc4c3244c762a1af787f7239a38d2cfdf44488258283ff899f77c" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.2.0" meta: dependency: transitive description: @@ -1116,6 +1100,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + native_imaging: + dependency: "direct main" + description: + name: native_imaging + sha256: ced7acb18b80a431578c9068eb9c3ee75f8df39491e8adaf471635bac282d651 + url: "https://pub.dev" + source: hosted + version: "0.4.0" + native_toolchain_c: + dependency: transitive + description: + name: native_toolchain_c + sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac" + url: "https://pub.dev" + source: hosted + version: "0.17.4" nested: dependency: transitive description: @@ -1132,6 +1132,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" + url: "https://pub.dev" + source: hosted + version: "9.3.0" opus_caf_converter_dart: dependency: "direct main" description: @@ -1168,18 +1176,18 @@ packages: dependency: transitive description: name: pana - sha256: eb816d35b80d3880335c3f2d139b376e81fd98a9ea273faf39f2c8914c4afba5 + sha256: d7bd85f18a14909f0baab69a13895dc4ff163be51c9884f73a506982adeac57d url: "https://pub.dev" source: hosted - version: "0.23.3" + version: "0.23.10" particles_network: dependency: "direct main" description: name: particles_network - sha256: "10350bbf446b504acf591b928b1a39ba687237a8895d73e6567abba1a2740c4c" + sha256: fbaead7961925946ff83e5b441bdbc8628139ea161ce901547e6f1190a6161de url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.3" path: dependency: "direct main" description: @@ -1200,18 +1208,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 + sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e url: "https://pub.dev" source: hosted - version: "2.2.17" + version: "2.2.22" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.6.0" path_provider_linux: dependency: transitive description: @@ -1236,62 +1244,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" - permission_handler: - dependency: "direct main" - description: - name: permission_handler - sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 - url: "https://pub.dev" - source: hosted - version: "12.0.1" - permission_handler_android: - dependency: transitive - description: - name: permission_handler_android - sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6" - url: "https://pub.dev" - source: hosted - version: "13.0.1" - permission_handler_apple: - dependency: transitive - description: - name: permission_handler_apple - sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 - url: "https://pub.dev" - source: hosted - version: "9.4.7" - permission_handler_html: - dependency: transitive - description: - name: permission_handler_html - sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" - url: "https://pub.dev" - source: hosted - version: "0.1.3+5" - permission_handler_platform_interface: - dependency: transitive - description: - name: permission_handler_platform_interface - sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - permission_handler_windows: - dependency: transitive - description: - name: permission_handler_windows - sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.dev" - source: hosted - version: "0.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "7.0.2" platform: dependency: transitive description: @@ -1312,10 +1272,10 @@ packages: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" url: "https://pub.dev" source: hosted - version: "1.5.1" + version: "1.5.2" posix: dependency: transitive description: @@ -1328,18 +1288,18 @@ packages: dependency: "direct main" description: name: pretty_qr_code - sha256: "2291db3f68d70a3dcd46c6bd599f30991ae4c02f27f36215fbb3f4865a609259" + sha256: "474f8a4512113fba06f14a6ec9bbf42353b4e651d7a520e3096f2a9b6bbe7a8a" url: "https://pub.dev" source: hosted - version: "3.5.0" + version: "3.6.0" process: dependency: transitive description: name: process - sha256: "107d8be718f120bbba9dcd1e95e3bd325b1b4a4f07db64154635ba03f2567a0d" + sha256: c6248e4526673988586e8c00bb22a49210c258dc91df5227d5da9748ecf79744 url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "5.0.5" proj4dart: dependency: transitive description: @@ -1364,6 +1324,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" + pub_updater: + dependency: transitive + description: + name: pub_updater + sha256: "739a0161d73a6974c0675b864fb0cf5147305f7b077b7f03a58fa7a9ab3e7e7d" + url: "https://pub.dev" + source: hosted + version: "0.5.0" pubspec_parse: dependency: transitive description: @@ -1392,10 +1360,10 @@ packages: dependency: "direct main" description: name: qr_code_scanner_plus - sha256: b764e5004251c58d9dee0c295e6006e05bd8d249e78ac3383abdb5afe0a996cd + sha256: dae0596b2763c2fd0294f5cfddb1d3a21577ae4dc7fc1449eb5aafc957872f61 url: "https://pub.dev" source: hosted - version: "2.0.14" + version: "2.1.1" qr_image: dependency: "direct main" description: @@ -1432,10 +1400,10 @@ packages: dependency: transitive description: name: record_android - sha256: "3bb3c6abbcb5fc1e86719fc6f0acdee89dfe8078543b92caad11854c487e435a" + sha256: "94783f08403aed33ffb68797bf0715b0812eb852f3c7985644c945faea462ba1" url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.1" record_ios: dependency: transitive description: @@ -1448,18 +1416,18 @@ packages: dependency: transitive description: name: record_linux - sha256: "235b1f1fb84e810f8149cc0c2c731d7d697f8d1c333b32cb820c449bf7bb72d8" + sha256: c31a35cc158cd666fc6395f7f56fc054f31685571684be6b97670a27649ce5c7 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" record_macos: dependency: transitive description: name: record_macos - sha256: f04d1547ff61ae54b4154e9726f656a17ad993f1a90f8f44bc40de94bafa072f + sha256: "084902e63fc9c0c224c29203d6c75f0bdf9b6a40536c9d916393c8f4c4256488" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" record_platform_interface: dependency: transitive description: @@ -1592,18 +1560,18 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" + sha256: cbc40be9be1c5af4dab4d6e0de4d5d3729e6f3d65b89d21e1815d57705644a6f url: "https://pub.dev" source: hosted - version: "2.4.10" + version: "2.4.20" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" + sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" url: "https://pub.dev" source: hosted - version: "2.5.4" + version: "2.5.6" shared_preferences_linux: dependency: transitive description: @@ -1701,26 +1669,18 @@ packages: dependency: transitive description: name: source_span - sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" url: "https://pub.dev" source: hosted - version: "1.10.1" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" + version: "1.10.2" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" + sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" url: "https://pub.dev" source: hosted - version: "2.5.5" + version: "2.5.6" sqflite_common_ffi: dependency: "direct main" description: @@ -1797,10 +1757,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6" + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.0" term_glyph: dependency: transitive description: @@ -1813,50 +1773,42 @@ packages: dependency: transitive description: name: test - sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" + sha256: "280d6d890011ca966ad08df7e8a4ddfab0fb3aa49f96ed6de56e3521347a9ae7" url: "https://pub.dev" source: hosted - version: "1.26.3" + version: "1.30.0" test_api: dependency: transitive description: name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" url: "https://pub.dev" source: hosted - version: "0.7.7" + version: "0.7.10" test_core: dependency: transitive description: name: test_core - sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" + sha256: "0381bd1585d1a924763c308100f2138205252fb90c9d4eeaf28489ee65ccde51" url: "https://pub.dev" source: hosted - version: "0.6.12" + version: "0.6.16" timezone: dependency: transitive description: name: timezone - sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1 + sha256: "784a5e34d2eb62e1326f24d6f600aaaee452eb8ca8ef2f384a59244e292d158b" url: "https://pub.dev" source: hosted - version: "0.10.1" - tint: - dependency: transitive - description: - name: tint - sha256: "9652d9a589f4536d5e392cf790263d120474f15da3cf1bee7f1fdb31b4de5f46" - url: "https://pub.dev" - source: hosted - version: "2.0.1" + version: "0.11.0" translations_cleaner: dependency: "direct dev" description: name: translations_cleaner - sha256: "811f42be32f024fdf083903f198d3625f6ee6927601e3a53a29b85b90508b88c" + sha256: c6e5051cb5d4fe4c5b2cc1ef83a6964f27063f9cf5b6166f445709bea8f81ad3 url: "https://pub.dev" source: hosted - version: "0.1.0" + version: "0.1.1" typed_data: dependency: transitive description: @@ -1885,10 +1837,10 @@ packages: dependency: transitive description: name: unifiedpush_android - sha256: "556796c81e8151ee8e4275baea2f7191119e8b1412ec35523cc2ac1c44c348bf" + sha256: "2e6684e0a1a39ad8d6c7bc0d197954d50686acb1b1a7614b18ab0e0126f5492a" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.4.1" unifiedpush_linux: dependency: transitive description: @@ -1965,34 +1917,34 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" + sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" url: "https://pub.dev" source: hosted - version: "6.3.16" + version: "6.3.28" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.4.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" url: "https://pub.dev" source: hosted - version: "3.2.2" + version: "3.2.5" url_launcher_platform_interface: dependency: transitive description: @@ -2005,26 +1957,26 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" uuid: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8 url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "4.5.2" vector_math: dependency: transitive description: @@ -2045,82 +1997,82 @@ packages: dependency: "direct main" description: name: video_player - sha256: "096bc28ce10d131be80dfb00c223024eb0fba301315a406728ab43dd99c45bdf" + sha256: "48a7bdaa38a3d50ec10c78627abdbfad863fdf6f0d6e08c7c3c040cfd80ae36f" url: "https://pub.dev" source: hosted - version: "2.10.1" + version: "2.11.1" video_player_android: dependency: transitive description: name: video_player_android - sha256: "28dcc4122079f40f93a0965b3679aff1a5f4251cf79611bd8011f937eb6b69de" + sha256: e726b33894526cf96a3eefe61af054b0c3e7d254443b3695b3c142dc277291be url: "https://pub.dev" source: hosted - version: "2.8.4" + version: "2.9.3" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: "9ee764e5cd2fc1e10911ae8ad588e1a19db3b6aa9a6eb53c127c42d3a3c3f22f" + sha256: f93b93a3baa12ca0ff7d00ca8bc60c1ecd96865568a01ff0c18a99853ee201a5 url: "https://pub.dev" source: hosted - version: "2.7.1" + version: "2.9.3" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: df534476c341ab2c6a835078066fc681b8265048addd853a1e3c78740316a844 + sha256: "57c5d73173f76d801129d0531c2774052c5a7c11ccb962f1830630decd9f24ec" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.6.0" video_player_web: dependency: transitive description: name: video_player_web - sha256: e8bba2e5d1e159d5048c9a491bb2a7b29c535c612bb7d10c1e21107f5bd365ba + sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.4.0" vm_service: dependency: transitive description: name: vm_service - sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" url: "https://pub.dev" source: hosted - version: "15.0.0" + version: "15.0.2" vodozemac: dependency: transitive description: name: vodozemac - sha256: "39144e20740807731871c9248d811ed5a037b21d0aa9ffcfa630954de74139d9" + sha256: bbe7dd31d7f623e2aeedb92e4b71a8b519e6109ce1e2911b5a220f6752b65cda url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.0" wakelock_plus: dependency: "direct main" description: name: wakelock_plus - sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228" + sha256: e4e125b7c1a2f0e491e5452afdc0e25ab77b2d2775a7caa231fcc1c1f2162c47 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2" + sha256: "24b84143787220a403491c2e5de0877fbbb87baf3f0b18a2a988973863db4b03" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" watcher: dependency: transitive description: name: watcher - sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.1" web: dependency: transitive description: @@ -2146,13 +2098,14 @@ packages: source: hosted version: "3.0.3" webcrypto: - dependency: transitive + dependency: "direct overridden" description: - name: webcrypto - sha256: e393b3d0b01694a8f81efecf278ed7392877130e6e7b29f578863e4f2d0b2ebd - url: "https://pub.dev" - source: hosted - version: "0.5.8" + path: "." + ref: master + resolved-ref: dcc7ba78c9721de56a800fda9a9e2bc759b9cad3 + url: "https://github.com/google/webcrypto.dart.git" + source: git + version: "0.6.0" webdriver: dependency: transitive description: @@ -2173,26 +2126,26 @@ packages: dependency: transitive description: name: webpush_encryption - sha256: "63046b7d6909f4a72ce3c153fa574726e257aaf21b1995ba063dc241a1b1520b" + sha256: "5b83272b91acda6ae515fcd980c94f06bf413702282497c5a68f5dfc64fed27f" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" webrtc_interface: dependency: "direct main" description: name: webrtc_interface - sha256: ad0e5786b2acd3be72a3219ef1dde9e1cac071cf4604c685f11b61d63cdd6eb3 + sha256: c6f100eac5057d9a817a60473126f9828c796d42884d498af4f339c97b21014f url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.1" win32: dependency: transitive description: name: win32 - sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03" + sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e url: "https://pub.dev" source: hosted - version: "5.14.0" + version: "5.15.0" win32_registry: dependency: transitive description: @@ -2250,5 +2203,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.10.0 <4.0.0" - flutter: ">=3.35.0" + dart: ">=3.11.1 <4.0.0" + flutter: ">=3.38.4" diff --git a/pubspec.yaml b/pubspec.yaml index 065e506e..72c3b900 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,14 +4,12 @@ publish_to: none # On version bump please also increase: # 1. The build number (for F-Droid) # 2. The version in /snap/snapcraft.yaml -version: 2.4.0+3546 +version: 2.5.1+3551 environment: - sdk: ">=3.10.0 <4.0.0" + sdk: ">=3.11.1 <4.0.0" dependencies: - animations: ^2.1.1 - app_links: ^6.4.1 archive: ^4.0.7 async: ^2.11.0 badges: ^3.1.2 @@ -19,7 +17,6 @@ dependencies: chewie: ^1.13.0 collection: ^1.18.0 cross_file: ^0.3.5 - cupertino_icons: any desktop_drop: ^0.7.0 desktop_notifications: ^0.6.3 device_info_plus: ^12.3.0 @@ -29,21 +26,21 @@ dependencies: file_selector: ^1.1.0 flutter: sdk: flutter - flutter_foreground_task: ^9.2.0 + flutter_foreground_task: ^9.2.1 flutter_linkify: ^6.0.0 - flutter_local_notifications: ^19.5.0 + flutter_local_notifications: ^21.0.0 flutter_localizations: sdk: flutter flutter_map: ^8.2.2 flutter_new_badger: ^1.1.1 flutter_secure_storage: ^10.0.0 flutter_shortcuts_new: ^2.0.0 - flutter_vodozemac: ^0.4.1 + flutter_vodozemac: ^0.5.0 flutter_web_auth_2: ^5.0.1 - flutter_webrtc: ^1.3.0 + flutter_webrtc: ^1.3.1 geolocator: ^14.0.2 - go_router: ^17.0.1 - handy_window: ^0.4.0 + go_router: ^17.1.0 + handy_window: ^0.4.2 highlight: ^0.7.0 html: ^0.15.4 http: ^1.6.0 @@ -52,19 +49,18 @@ dependencies: intl: any just_audio: ^0.10.5 latlong2: ^0.9.1 - linkify: ^5.0.0 - matrix: ^6.0.0 + matrix: ^6.2.0 mime: ^2.0.0 + native_imaging: ^0.4.0 opus_caf_converter_dart: ^1.0.1 package_info_plus: ^9.0.0 - particles_network: ^1.9.0 + particles_network: ^1.9.3 path: ^1.9.0 path_provider: ^2.1.2 - permission_handler: ^12.0.1 - pretty_qr_code: ^3.5.0 + pretty_qr_code: ^3.6.0 provider: ^6.0.2 punycode: ^1.0.0 - qr_code_scanner_plus: ^2.0.14 + qr_code_scanner_plus: ^2.1.1 qr_image: ^1.0.0 receive_sharing_intent: ^1.8.1 record: ^6.2.0 @@ -80,24 +76,20 @@ dependencies: universal_html: ^2.3.0 url_launcher: ^6.3.2 video_compress: ^3.1.4 - video_player: ^2.10.1 - wakelock_plus: ^1.3.3 - webrtc_interface: ^1.3.0 + video_player: ^2.11.1 + wakelock_plus: ^1.5.0 + webrtc_interface: ^1.5.1 dev_dependencies: + dart_code_linter: ^3.2.1 flutter_lints: ^6.0.0 flutter_native_splash: ^2.4.7 flutter_test: sdk: flutter - import_sorter: ^4.6.0 integration_test: sdk: flutter license_checker: ^1.6.2 - translations_cleaner: ^0.1.0 - -import_sorter: - ignored_files: # Optional, defaults to [] - - \/lib\/l10n + translations_cleaner: ^0.1.1 flutter_native_splash: color: "#ffffff" @@ -117,3 +109,10 @@ flutter: # 2. Always link an (upstream?) issue # 3. Explain how and when this can be removed (overrides must be temporarily) dependency_overrides: + # To fix 16kb compatiblity in PlayStore. It is fixed in main branch but + # not yet published: + # https://github.com/google/webcrypto.dart/issues/207 + webcrypto: + git: + url: https://github.com/google/webcrypto.dart.git + ref: master \ No newline at end of file diff --git a/recommended_homeservers.json b/recommended_homeservers.json new file mode 100644 index 00000000..fef60184 --- /dev/null +++ b/recommended_homeservers.json @@ -0,0 +1,35 @@ +{ + "public_servers": [ + { + "name": "matrix.org", + "website": "https://matrix.org", + "description": "The Matrix.org Foundation offers the matrix.org homeserver as an easy entry point for anyone wanting to try out Matrix.", + "reg_method": "oidc", + "languages": [ + "All", + "English" + ] + }, + { + "name": "mozilla.org", + "website": "https://mozilla.org", + "description": "Matrix homeserver hosted by Mozilla.", + "reg_method": "oidc", + "languages": [ + "All", + "English" + ] + }, + { + "name": "tchncs.de", + "website": "https://tchncs.de", + "description": "A general homeserver. Owner also hosts other FOSS services.", + "reg_method": "oidc", + "languages": [ + "All", + "English", + "Deutsch" + ] + } + ] +} \ No newline at end of file diff --git a/scripts/add-firebase-messaging.sh b/scripts/add-firebase-messaging.sh index fb845d71..af7ce025 100755 --- a/scripts/add-firebase-messaging.sh +++ b/scripts/add-firebase-messaging.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -flutter pub add fcm_shared_isolate:0.2.0 +flutter pub add fcm_shared_isolate flutter pub get if [[ "$OSTYPE" == "darwin"* ]]; then diff --git a/scripts/create_fdroid_repos.sh b/scripts/create_fdroid_repos.sh deleted file mode 100755 index 595e1cfa..00000000 --- a/scripts/create_fdroid_repos.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -GITLAB_PROJECT_ID="16112282" - -# repo directory for build -mkdir fdroid/repo -# ... and for deployment -mkdir repo - -git fetch - -# building nightly repo - -cd fdroid - -cp config.nightly.py config.py - -PIPELINES="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines\?ref=main\&status=success\&order_by=updated_at | jq '.[].id' | head -n3)" - -cp ../build/android/app-release.apk repo/fluffychat-latest.apk - -for PIPELINE in $PIPELINES -do - JOB="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines/$PIPELINE/jobs | jq -r '.[] | select(.name == "build_android_apk").id')" - if [ -n $JOB ]; then - URI="https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/jobs/$JOB/artifacts/build/android/app-release.apk" - FILENAME="fluffychat-$PIPELINE.apk" - echo "Downloading $FILENAME from $URI ..." - wget --output-document="$FILENAME" "$URI" - mv "$FILENAME" repo - fi -done - -fdroid update --rename-apks -mkdir /fdroid && fdroid deploy -rm -rf /fdroid/archive -cd .. && mv -v /fdroid repo/nightly - -# building stable + RC repo - -rm -rf /fdroid fdroid/repo - -mkdir fdroid/repo - -cd fdroid -rm -f repo/*.apk - -cp config.stable.py config.py - -PIPELINES="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines\?scope=tags\&status=success\&order_by=updated_at | jq '.[].id' | head -n3)" - -for PIPELINE in $PIPELINES -do - JOB="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines/$PIPELINE/jobs | jq -r '.[] | select(.name == "build_android_apk").id')" - if [ -n $JOB ]; then - URI="https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/jobs/$JOB/artifacts/build/android/app-release.apk" - FILENAME="fluffychat-$PIPELINE.apk" - echo "Downloading $FILENAME from $URI ..." - wget --output-document="$FILENAME" "$URI" - mv "$FILENAME" repo - fi -done - -fdroid update --rename-apks -mkdir /fdroid && fdroid deploy -rm -rf /fdroid/archive -cd .. && mv -v /fdroid repo/stable diff --git a/scripts/integration-check-release-build.sh b/scripts/integration-check-release-build.sh deleted file mode 100755 index 5e329189..00000000 --- a/scripts/integration-check-release-build.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -# generate a temporary signing key adn apply its configuration -cd android -KEYFILE="$(pwd)/key.jks" -echo "Generating signing configuration with $KEYFILE..." -keytool -genkey -keyalg RSA -alias key -keysize 4096 -dname "cn=FluffyChat CI, ou=Head of bad integration tests, o=FluffyChat HQ, c=TLH" -keypass FLUFFYCHAT -storepass FLUFFYCHAT -validity 1 -keystore "$KEYFILE" -storetype "pkcs12" -echo "storePassword=FLUFFYCHAT" >> key.properties -echo "keyPassword=FLUFFYCHAT" >> key.properties -echo "keyAlias=key" >> key.properties -echo "storeFile=$KEYFILE" >> key.properties -ls | grep key -cd .. - -# build release mode APK -flutter pub get -flutter build apk --release - -# install and launch APK -flutter install -adb shell am start -n chat.fluffy.fluffychat/chat.fluffy.fluffychat.MainActivity - -sleep 5 - -# check whether FluffyChat runs -adb shell ps | awk '{print $9}' | grep chat.fluffy.fluffychat diff --git a/scripts/integration-create-environment-variables.sh b/scripts/integration-create-environment-variables.sh deleted file mode 100755 index d2b3a8fe..00000000 --- a/scripts/integration-create-environment-variables.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -export USER1_NAME="alice" -export USER1_PW="AliceInWonderland" -export USER2_NAME="bob" -export USER2_PW="JoWirSchaffenDas" diff --git a/scripts/integration-prepare-homeserver.sh b/scripts/integration-prepare-homeserver.sh deleted file mode 100755 index 6bbee117..00000000 --- a/scripts/integration-prepare-homeserver.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash - -if [ -z $HOMESERVER ]; then - echo "Please ensure HOMESERVER environment variable is set to the IP or hostname of the homeserver." - exit 1 -fi -if [ -z $USER1_NAME ]; then - echo "Please ensure USER1_NAME environment variable is set to first user name." - exit 1 -fi -if [ -z $USER1_PW ]; then - echo "Please ensure USER1_PW environment variable is set to first user password." - exit 1 -fi -if [ -z $USER2_NAME ]; then - echo "Please ensure USER2_NAME environment variable is set to second user name." - exit 1 -fi -if [ -z $USER2_PW ]; then - echo "Please ensure USER2_PW environment variable is set to second user password." - exit 1 -fi - -echo "Waiting for homeserver to be available... (GET http://$HOMESERVER/_matrix/client/v3/login)" - -while ! curl -XGET "http://$HOMESERVER/_matrix/client/v3/login" >/dev/null 2>/dev/null; do - sleep 2 -done - -echo "Homeserver is up." - -# create users - -curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER1_NAME\", \"password\":\"$USER1_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register" -curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER2_NAME\", \"password\":\"$USER2_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register" - -usertoken1=$(curl -fS --retry 3 "http://$HOMESERVER/_matrix/client/r0/login" -H "Content-Type: application/json" -d "{\"type\": \"m.login.password\", \"identifier\": {\"type\": \"m.id.user\",\"user\": \"$USER1_NAME\"},\"password\":\"$USER1_PW\"}" | jq -r '.access_token') -usertoken2=$(curl -fS --retry 3 "http://$HOMESERVER/_matrix/client/r0/login" -H "Content-Type: application/json" -d "{\"type\": \"m.login.password\", \"identifier\": {\"type\": \"m.id.user\",\"user\": \"$USER2_NAME\"},\"password\":\"$USER2_PW\"}" | jq -r '.access_token') - - -# get usernames' mxids -mxid1=$(curl -fS --retry 3 "http://$HOMESERVER/_matrix/client/r0/account/whoami" -H "Authorization: Bearer $usertoken1" | jq -r .user_id) -mxid2=$(curl -fS --retry 3 "http://$HOMESERVER/_matrix/client/r0/account/whoami" -H "Authorization: Bearer $usertoken2" | jq -r .user_id) - -# setting the display name to username -curl -fS --retry 3 -XPUT -d "{\"displayname\":\"$USER1_NAME\"}" "http://$HOMESERVER/_matrix/client/v3/profile/$mxid1/displayname" -H "Authorization: Bearer $usertoken1" -curl -fS --retry 3 -XPUT -d "{\"displayname\":\"$USER2_NAME\"}" "http://$HOMESERVER/_matrix/client/v3/profile/$mxid2/displayname" -H "Authorization: Bearer $usertoken2" - -echo "Set display names" - -# create new room to invite user too -roomID=$(curl --retry 3 --silent --fail -XPOST -d "{\"name\":\"$USER2_NAME\", \"is_direct\": true}" "http://$HOMESERVER/_matrix/client/r0/createRoom?access_token=$usertoken2" | jq -r '.room_id') -echo "Created room '$roomID'" - -# send message in created room -curl --retry 3 --fail --silent -XPOST -d '{"msgtype":"m.text", "body":"joined room successfully"}' "http://$HOMESERVER/_matrix/client/r0/rooms/$roomID/send/m.room.message?access_token=$usertoken2" -echo "Sent message" - -curl -fS --retry 3 -XPOST -d "{\"user_id\":\"$mxid1\"}" "http://$HOMESERVER/_matrix/client/r0/rooms/$roomID/invite?access_token=$usertoken2" -echo "Invited $USER1_NAME" diff --git a/scripts/integration-prepare-host.sh b/scripts/integration-prepare-host.sh deleted file mode 100755 index f110aab7..00000000 --- a/scripts/integration-prepare-host.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -if ! command -v apk &>/dev/null; then - apt update && apt install -y -qq docker.io ldnsutils grep scrcpy ffmpeg -else - apk update && apk add docker drill grep scrcpy ffmpeg -fi diff --git a/scripts/integration-server-conduit.sh b/scripts/integration-server-conduit.sh deleted file mode 100755 index f4b031f5..00000000 --- a/scripts/integration-server-conduit.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -docker run -d \ - -e CONDUIT_SERVER_NAME="localhost" \ - -e CONDUIT_PORT="8008" \ - -e CONDUIT_DATABASE_BACKEND="rocksdb" \ - -e CONDUIT_ALLOW_REGISTRATION=true \ - -e CONDUIT_ALLOW_FEDERATION=true \ - -e CONDUIT_MAX_REQUEST_SIZE="20000000" \ - -e CONDUIT_TRUSTED_SERVERS="[\"conduit.rs\"]" \ - -e CONDUIT_MAX_CONCURRENT_REQUESTS="100" \ - -e CONDUIT_LOG="info,rocket=off,_=off,sled=off" \ - --name conduit -p 80:8008 matrixconduit/matrix-conduit:latest diff --git a/scripts/integration-server-dendrite.sh b/scripts/integration-server-dendrite.sh deleted file mode 100755 index ee23da19..00000000 --- a/scripts/integration-server-dendrite.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -chown -R 991:991 integration_test/dendrite - -# creating integration test SSL certificates -docker run --rm --entrypoint="" \ - --volume="$(pwd)/integration_test/dendrite/data":/mnt:rw \ - matrixdotorg/dendrite-monolith:latest \ - /usr/bin/generate-keys \ - -private-key /mnt/matrix_key.pem \ - -tls-cert /mnt/server.crt \ - -tls-key /mnt/server.key - -docker run -d --volume="$(pwd)/integration_test/dendrite/data":/etc/dendrite:rw \ - --name dendrite -p 80:8008 matrixdotorg/dendrite-monolith:latest -really-enable-open-registration diff --git a/scripts/integration-server-synapse.sh b/scripts/integration-server-synapse.sh deleted file mode 100755 index 03d21847..00000000 --- a/scripts/integration-server-synapse.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -docker run -d --name synapse --tmpfs /data \ - --volume="$(pwd)/integration_test/synapse/data/homeserver.yaml":/data/homeserver.yaml:rw \ - --volume="$(pwd)/integration_test/synapse/data/localhost.log.config":/data/localhost.log.config:rw \ - -p 80:80 matrixdotorg/synapse:latest diff --git a/scripts/integration-start-avd.sh b/scripts/integration-start-avd.sh deleted file mode 100755 index fb608e44..00000000 --- a/scripts/integration-start-avd.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -chmod 777 -R /dev/kvm -adb start-server -emulator -avd test -wipe-data -no-audio -no-boot-anim -no-window -accel on -gpu swiftshader_indirect diff --git a/scripts/prepare-fdroid.sh b/scripts/prepare-fdroid.sh deleted file mode 100755 index f9384b0f..00000000 --- a/scripts/prepare-fdroid.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -cp -r android/fastlane fdroid/metadata/chat.fluffy.fluffychat -cd fdroid -echo $FDROID_KEY | base64 --decode --ignore-garbage > key.jks -echo $FDROID_NIGHTLY_KEY | base64 --decode --ignore-garbage > key.nightly.jks -echo "keypass=\"${FDROID_KEY_PASS}\"" >> config.stable.py -echo "keystorepass=\"${FDROID_KEY_PASS}\"" >> config.stable.py -echo "keypass=\"${FDROID_NIGHTLY_KEY_PASS}\"" >> config.nightly.py -echo "keystorepass=\"${FDROID_NIGHTLY_KEY_PASS}\"" >> config.nightly.py -chmod 600 config.stable.py key.jks config.nightly.py key.nightly.jks -cd .. diff --git a/scripts/prepare-web.sh b/scripts/prepare-web.sh index 08527420..b4ec1889 100755 --- a/scripts/prepare-web.sh +++ b/scripts/prepare-web.sh @@ -1,5 +1,6 @@ #!/bin/sh -ve +# Compile Vodozemac for web version=$(yq ".dependencies.flutter_vodozemac" < pubspec.yaml) version=$(expr "$version" : '\^*\(.*\)') git clone https://github.com/famedly/dart-vodozemac.git -b ${version} .vodozemac @@ -10,6 +11,14 @@ cd .. rm -f ./assets/vodozemac/vodozemac_bindings_dart* mv .vodozemac/dart/web/pkg/vodozemac_bindings_dart* ./assets/vodozemac/ rm -rf .vodozemac - flutter pub get -dart compile js ./web/native_executor.dart -o ./web/native_executor.js -m \ No newline at end of file +dart compile js ./web/native_executor.dart -o ./web/native_executor.js -m + +# Download native_imaging for web: +version=$(yq ".dependencies.native_imaging" < pubspec.yaml) +version=$(expr "$version" : '\^*\(.*\)') +curl -L "https://github.com/famedly/dart_native_imaging/releases/download/v${version}/native_imaging.zip" > native_imaging.zip +unzip native_imaging.zip +mv js/* web/ +rmdir js +rm native_imaging.zip \ No newline at end of file diff --git a/scripts/prepare_integration_test.sh b/scripts/prepare_integration_test.sh new file mode 100755 index 00000000..e1eb01eb --- /dev/null +++ b/scripts/prepare_integration_test.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +source integration_test/data/integration_users.env + +docker rm -f synapse 2>/dev/null || true + +docker run -d --name synapse --tmpfs /data \ + --volume="$(pwd)/integration_test/synapse/data/homeserver.yaml":/data/homeserver.yaml:rw \ + --volume="$(pwd)/integration_test/synapse/data/localhost.log.config":/data/localhost.log.config:rw \ + -p 80:80 matrixdotorg/synapse:latest + +while ! curl -XGET "http://$HOMESERVER/_matrix/client/v3/login" >/dev/null 2>/dev/null; do +echo "Waiting for homeserver to be available... (GET http://$HOMESERVER/_matrix/client/v3/login)" + sleep 2 +done + +echo "Homeserver is online!" + +# create users +curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER1_NAME\", \"password\":\"$USER1_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register" +curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER2_NAME\", \"password\":\"$USER2_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register" + +echo "Homeserver is ready! Please rerun this script every time before starting an integration test!" \ No newline at end of file diff --git a/scripts/release-ios-testflight.sh b/scripts/release-ios-testflight.sh index 5eef1662..075324c6 100755 --- a/scripts/release-ios-testflight.sh +++ b/scripts/release-ios-testflight.sh @@ -1,5 +1,5 @@ #!/bin/sh -ve -flutter pub add fcm_shared_isolate:0.2.0 +flutter pub add fcm_shared_isolate sed -i '' 's,//,,g' lib/utils/background_push.dart flutter clean flutter pub get diff --git a/scripts/update-dependencies.sh b/scripts/update-dependencies.sh deleted file mode 100755 index 5f783fc5..00000000 --- a/scripts/update-dependencies.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -ve -flutter pub upgrade --major-versions -flutter pub get -dart fix --apply -flutter format lib test -flutter pub run import_sorter:main --no-comments \ No newline at end of file diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 532b026a..71245163 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,7 +1,7 @@ name: fluffychat title: FluffyChat base: core24 -version: 2.4.0 +version: 2.5.1 license: AGPL-3.0 summary: The cutest messenger in the Matrix network description: | @@ -53,7 +53,7 @@ platforms: parts: flutter-git: source: https://github.com/flutter/flutter.git - source-tag: 3.38.4 + source-tag: 3.41.5 source-depth: 1 plugin: nil override-build: | @@ -72,6 +72,8 @@ parts: - unzip - xz-utils - zip + - lld + - llvm-18 override-prime: '' fluffychat: diff --git a/test/archive_test.dart b/test/archive_test.dart index 25bb090e..33ff38ab 100644 --- a/test/archive_test.dart +++ b/test/archive_test.dart @@ -6,5 +6,6 @@ void main() { testWidget: Archive(), testClient: await testClient(loggedIn: true), ));*/ + return; }); } diff --git a/test/homeserver_picker_test.dart b/test/homeserver_picker_test.dart index 054f49ca..3200fdd2 100644 --- a/test/homeserver_picker_test.dart +++ b/test/homeserver_picker_test.dart @@ -13,5 +13,6 @@ void main() { testWidget: HomeserverPicker(), ), );*/ + return; }); } diff --git a/test/widget_test.dart b/test/widget_test.dart index 7d1d98eb..beb6cd2a 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -16,5 +16,6 @@ void main() { /* await tester.pumpWidget(FluffyChatApp( client: await prepareTestClient(), ));*/ + return; }); } diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 0e75c643..3d960ade 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,7 +6,6 @@ #include "generated_plugin_registrant.h" -#include #include #include #include @@ -15,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -26,8 +24,6 @@ #include void RegisterPlugins(flutter::PluginRegistry* registry) { - AppLinksPluginCApiRegisterWithRegistrar( - registry->GetRegistrarForPlugin("AppLinksPluginCApi")); DesktopDropPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("DesktopDropPlugin")); DesktopWebviewWindowPluginRegisterWithRegistrar( @@ -44,8 +40,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("FlutterWebRTCPlugin")); GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); - PermissionHandlerWindowsPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); RecordWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("RecordWindowsPluginCApi")); ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 30709077..bcdc0344 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - app_links desktop_drop desktop_webview_window dynamic_color @@ -12,7 +11,6 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_secure_storage_windows flutter_webrtc geolocator_windows - permission_handler_windows record_windows screen_retriever_windows share_plus