Merge branch 'main' into main
14
.github/workflows/integrate.yaml
vendored
|
|
@ -19,22 +19,23 @@ jobs:
|
|||
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: Apply google services patch
|
||||
run: git apply ./scripts/enable-android-google-services.patch
|
||||
- run: flutter analyze
|
||||
- run: flutter test
|
||||
- name: Check for unused localization strings
|
||||
run: flutter pub run translations_cleaner list-unused-terms -a
|
||||
|
||||
build_debug_apk:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: "zulu"
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
|
|
@ -66,7 +67,7 @@ jobs:
|
|||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
- 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 -y
|
||||
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 -y
|
||||
- run: flutter pub get
|
||||
- run: flutter build linux --target-platform linux-x64
|
||||
|
||||
|
|
@ -80,6 +81,9 @@ jobs:
|
|||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
- name: Setup Xcode version
|
||||
uses: maxim-lobanov/setup-xcode@v1.5.1
|
||||
uses: maxim-lobanov/setup-xcode@v1.6.0
|
||||
with:
|
||||
xcode-version: latest
|
||||
- run: brew install sqlcipher
|
||||
- run: flutter pub get
|
||||
- run: flutter build ios --no-codesign
|
||||
|
|
|
|||
12
.github/workflows/main_deploy.yaml
vendored
|
|
@ -4,6 +4,7 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: main_deploy
|
||||
|
|
@ -18,6 +19,10 @@ jobs:
|
|||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
- name: Remove Emoji Font
|
||||
run: |
|
||||
rm -rf fonts/NotoEmoji
|
||||
yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml
|
||||
- run: flutter pub get
|
||||
- name: Prepare web
|
||||
run: ./scripts/prepare-web.sh
|
||||
|
|
@ -25,7 +30,7 @@ jobs:
|
|||
run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/nightly/"
|
||||
- run: mv build/web/ public
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
uses: peaceiris/actions-gh-pages@v4
|
||||
with:
|
||||
personal_token: ${{ secrets.PAGES_DEPLOY_TOKEN }}
|
||||
publish_dir: ./public
|
||||
|
|
@ -37,9 +42,10 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: 'zulu'
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
|
|
@ -47,7 +53,7 @@ jobs:
|
|||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 2.7
|
||||
ruby-version: '3.3'
|
||||
- name: Install Fastlane
|
||||
run: gem install fastlane -NV
|
||||
- name: Apply Google Services Patch
|
||||
|
|
|
|||
28
.github/workflows/process_tags.yaml
vendored
|
|
@ -1,28 +0,0 @@
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
- "rc*"
|
||||
|
||||
name: Process Tags
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Get Changelog Entry
|
||||
id: changelog_reader
|
||||
uses: mindsers/changelog-reader-action@v2
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: Release ${{ github.ref }}
|
||||
body: ${{ steps.changelog_reader.outputs.changes }}
|
||||
draft: false
|
||||
prerelease: ${{ startsWith(github.ref, 'rc') }}
|
||||
52
.github/workflows/release.yaml
vendored
|
|
@ -9,6 +9,10 @@ concurrency:
|
|||
group: release_workflow
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build_web:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -21,6 +25,10 @@ jobs:
|
|||
cache: true
|
||||
- name: Install dependencies
|
||||
run: sudo apt-get update && sudo apt-get install nodejs -y
|
||||
- name: Remove Emoji Font
|
||||
run: |
|
||||
rm -rf fonts/NotoEmoji
|
||||
yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml
|
||||
- run: flutter pub get
|
||||
- name: Prepare web
|
||||
run: ./scripts/prepare-web.sh
|
||||
|
|
@ -51,7 +59,7 @@ jobs:
|
|||
cp public/web -r public/nightly
|
||||
- name: Deploy to GitHub Pages
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
uses: peaceiris/actions-gh-pages@v4
|
||||
with:
|
||||
personal_token: ${{ secrets.PAGES_DEPLOY_TOKEN }}
|
||||
publish_dir: ./public
|
||||
|
|
@ -63,9 +71,10 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: 'zulu'
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
|
|
@ -104,7 +113,7 @@ jobs:
|
|||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
- 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 -y
|
||||
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 -y
|
||||
- run: flutter pub get
|
||||
- run: flutter build linux --release --target-platform linux-x64
|
||||
- name: Create archive
|
||||
|
|
@ -124,9 +133,10 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: 'zulu'
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
|
|
@ -134,7 +144,7 @@ jobs:
|
|||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 2.7
|
||||
ruby-version: '3.3'
|
||||
- name: Install Fastlane
|
||||
run: gem install fastlane -NV
|
||||
- name: Apply Google Services Patch
|
||||
|
|
@ -179,6 +189,9 @@ jobs:
|
|||
uses: actions/checkout@v4
|
||||
- name: Install Snapcraft
|
||||
uses: samuelmeuli/action-snapcraft@v2
|
||||
- name: Get Tag Name
|
||||
id: tag_name
|
||||
run: echo "::set-output name=tag::$(echo ${GITHUB_REF#refs/tags/})"
|
||||
- name: Promote Snap
|
||||
env: # Workaround for https://github.com/snapcore/snapcraft/issues/4439
|
||||
SNAPCRAFT_HAS_TTY: "true"
|
||||
|
|
@ -187,4 +200,31 @@ jobs:
|
|||
yes | snapcraft promote fluffychat --from-channel edge --to-channel candidate
|
||||
else
|
||||
yes | snapcraft promote fluffychat --from-channel edge --to-channel stable
|
||||
fi
|
||||
fi
|
||||
|
||||
deploy_docker:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v3
|
||||
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
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
|
|
|
|||
4
.github/workflows/versions.env
vendored
|
|
@ -1,2 +1,2 @@
|
|||
FLUTTER_VERSION=3.16.5
|
||||
JAVA_VERSION=17
|
||||
FLUTTER_VERSION=3.19.6
|
||||
JAVA_VERSION=17
|
||||
|
|
|
|||
10
.metadata
|
|
@ -4,7 +4,7 @@
|
|||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: "efbf63d9c66b9f6ec30e9ad4611189aa80003d31"
|
||||
revision: "abb292a07e20d696c4568099f918f6c5f330e6b0"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
|
|
@ -13,11 +13,11 @@ project_type: app
|
|||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
- platform: linux
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
|
||||
# User provided section
|
||||
|
||||
|
|
|
|||
216
CHANGELOG.md
|
|
@ -1,3 +1,219 @@
|
|||
## v1.20.0
|
||||
Design improvements and new advanced UI to manage rooms.
|
||||
|
||||
- build: Fix google services patch (Krille)
|
||||
- build: Update matrix dart sdk (krille-chan)
|
||||
- build: Update to Flutter 3.19.6 (krille-chan)
|
||||
- chore: Let error reporter fill out bug report (krille-chan)
|
||||
- chore: More nicer event source display (krille-chan)
|
||||
- chore: Update user has knocked localization with emoji (krille-chan)
|
||||
- design: Adjust chat settings design (krille-chan)
|
||||
- design: Adjust settings design (krille-chan)
|
||||
- design: Fix color of invite button (krille-chan)
|
||||
- design: Follow up chat settings design (krille-chan)
|
||||
- design: Follow up settings design (krille-chan)
|
||||
- design: Improve user permission settings (krille-chan)
|
||||
- design: New chat access settings (krille-chan)
|
||||
- design: Redesign permissions settings with dropdownbuttons (krille-chan)
|
||||
- design: Remake UX of selecting messages and chats (krille-chan)
|
||||
- refactor: Download on android and iOS with file_picker (krille-chan)
|
||||
- Translated using Weblate (Arabic) (Rex_sa)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Chinese (Simplified)) (大王叫我来巡山)
|
||||
- Translated using Weblate (Dutch) (Anonymous)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Filipino) (searinminecraft)
|
||||
- Translated using Weblate (Finnish) (Anonymous)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (German) (Christian)
|
||||
- Translated using Weblate (Hungarian) (Máté Menyhárt)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (lucasmz)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (Rudah Ximenes Alvarenga)
|
||||
|
||||
## v1.19.2
|
||||
Bugfix release to mostly fix the new database encryption on Linux and update the translations.
|
||||
|
||||
- build: (deps): bump peaceiris/actions-gh-pages from 3 to 4 (dependabot[bot])
|
||||
- build: Update all dependencies and remove vibrator package (krille-chan)
|
||||
- build: Update emoji picker package (krille-chan)
|
||||
- build: Update flutter_map package (krille-chan)
|
||||
- docs: Fix typo in android app description (Krille)
|
||||
- fix: Allow unencrypted database if gnome keyring not present or platform does not support it (krille-chan)
|
||||
- fix: Background color of images with transparency (Krille)
|
||||
- fix: Localizations from weblate confused by unknownEvent locale (Krille)
|
||||
- fix: More logs when database fails to init and trycatch sendInitNotification (Krille)
|
||||
- Added translation using Weblate (Filipino) (searinminecraft)
|
||||
- Translated using Weblate (Arabic) (Rex_sa)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Catalan) (fadelkon)
|
||||
- Translated using Weblate (Chinese (Simplified)) (大王叫我来巡山)
|
||||
- Translated using Weblate (Chinese (Traditional)) (D0735)
|
||||
- Translated using Weblate (Chinese (Traditional)) (Kyanos Chiu)
|
||||
- Translated using Weblate (Croatian) (v1s7)
|
||||
- Translated using Weblate (English) (v1s7)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Filipino) (searinminecraft)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Interlingua) (kdh8219)
|
||||
- Translated using Weblate (Italian) (Krystian)
|
||||
- Translated using Weblate (Korean) (kdh8219)
|
||||
- Translated using Weblate (Persian) (EndermanXD)
|
||||
- Translated using Weblate (Polish) (Adam Strączek)
|
||||
- Translated using Weblate (Polish) (Krystian)
|
||||
- Translated using Weblate (Russian) (v1s7)
|
||||
- Translated using Weblate (Swedish) (Joaquim Homrighausen)
|
||||
- Translated using Weblate (Turkish) (v1s7)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
|
||||
## v1.19.1
|
||||
Minor bugfix release for login with SSO on web.
|
||||
|
||||
- feat: Show/hide third column in chat view (krille-chan)
|
||||
- design: Adjust some colors in inputbar (krille-chan)
|
||||
- fix: Login with SSO on web (krille-chan)
|
||||
- fix: Make chat permission settings null and type safe (krille-chan)
|
||||
- chore: do not use static openssl (ShootingStarDragons)
|
||||
- refactor: Move room headers into appbar bottom field (krille-chan)
|
||||
- refactor: new flutter only typing animation (krille-chan)
|
||||
|
||||
## v1.19.0
|
||||
FluffyChat v1.19.0 features an improved design for message bubbles and a lot of fixes under the hood.
|
||||
|
||||
- build: Update matrix dart sdk (Krille)
|
||||
- build: Update to flutter 3.19.5 (krille-chan)
|
||||
- chore: Add missing command hints (krille-chan)
|
||||
- chore: Add pagekey to custom page builder (Krille)
|
||||
- chore: Adjust design of typing indicator (Krille)
|
||||
- chore: Adjust ticker of notifications for Android (Krille)
|
||||
- chore: Calc blurhash in other thread (Krille)
|
||||
- chore: Mark muted unread rooms with bold text (krille-chan)
|
||||
- chore: More minimal matrix pill (Krille)
|
||||
- chore: Try out CupertinoPage instead of custom transition in router (krille-chan)
|
||||
- ci: add a license compliance check (lauren n. liberda)
|
||||
- design: Connect bubbles from same sender (krille-chan)
|
||||
- design: Display images in correct ratio in timeline (krille-chan)
|
||||
- design: Make appbar in material you design for mobile mode (krille-chan)
|
||||
- design: New sticker picker next to emoji picker (krille-chan)
|
||||
- design: Nicer QR Code design (krille-chan)
|
||||
- design: Nicer reactions design with size animations (Krille)
|
||||
- feat: Add insert content via gboard (krille-chan)
|
||||
- feat: Reply with one button in desktop (krille-chan)
|
||||
- fix: Do not sync in background mode (krille-chan)
|
||||
- fix: FluffyChat should assume m.change_password capabilitiy is supported if not present per spec (krille-chan)
|
||||
- fix: never use root navigator for bottom sheets (The one with the braid)
|
||||
- fix: Remove pantalaimon message with normal error message (krille-chan)
|
||||
- fix: Search in spaces view (krille-chan)
|
||||
- fix: Set read marker on web (Krille)
|
||||
- fix: Point to correct path for auth.html so completing sso login flow no longer 404s (Gavin Mogan)
|
||||
- refactor: Better logic for removing outdated notifications (Krille)
|
||||
- refactor: Enhance logic when to mark room as read (krille-chan)
|
||||
- refactor: Remove old aliases workaround (Krille)
|
||||
- refactor: Sticker widget code (Krille)
|
||||
- refactor: Use dart blurhash (Krille)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Interlingua) (Software In Interlingua)
|
||||
|
||||
## v1.18.0
|
||||
- feat: Add speed button for audioplayer (krille-chan)
|
||||
- feat: enhanced send video functionality by adding toggle send original (Mubeen Rizvi)
|
||||
- feat: add dialog to hide presence list with long-press (Marcus Hoffmann)
|
||||
- feat: Add notification shortcuts to android (krille-chan)
|
||||
- feat: make showing user presence info optional (Marcus Hoffmann)
|
||||
- feat: Open chat on shortcut click on android (krille-chan)
|
||||
- fix: BuildContext crash when joining room (krille-chan)
|
||||
- fix: Export session (krille-chan)
|
||||
- fix: Notifications open sometimes automatically on android (krille-chan)
|
||||
- fix: Open room after join (krille-chan)
|
||||
- fix: Open room by notification happened multiple times (krille-chan)
|
||||
- fix: Open room links with event id (krille-chan)
|
||||
- fix: properly initialize hideUnimportantStateEvents setting (Marcus Hoffmann)
|
||||
- fix: Remove status msg not changeable from old cache (krille-chan)
|
||||
- fix: use correct icons for chat pin/unpin (Marcus Hoffmann)
|
||||
- fix: use correct icons for mark read/unread action (Marcus Hoffmann)
|
||||
- build: Update Linux build files (krille-chan)
|
||||
- build: Update to Flutter 3.19.1 (Krille)
|
||||
- chore: Add more information to Person object in android notifications (krille-chan)
|
||||
- chore: Thumbnail follow up for notifications (Krille)
|
||||
- refactor: Better download UX with file picker for android and iOS (krille-chan)
|
||||
- refactor: Use hashcode instead of string to id workaround for notifications (Krille)
|
||||
- Added translation using Weblate (Belarusian) (kopatych)
|
||||
- Added translation using Weblate (Interlingua) (Software In Interlingua)
|
||||
- Translated using Weblate (Arabic) (Rex_sa)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Poesty Li)
|
||||
- Translated using Weblate (Chinese (Simplified)) (大王叫我来巡山)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (German) (Benjamin Wagner)
|
||||
- Translated using Weblate (Greek) (Benjamin Wagner)
|
||||
- Translated using Weblate (Russian) (Benjamin Wagner)
|
||||
- Translated using Weblate (Russian) (v1s7)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Translated using Weblate (Ukrainian) (Сергій)
|
||||
|
||||
## v1.17.3
|
||||
- feat: New account data based wallpaper feature (Krille)
|
||||
- build: Update dependencies (Krille)
|
||||
- build: Update flutter to 3.16.9 (Krille)
|
||||
- build: Update matrix dart sdk to 0.25.7 (Krille)
|
||||
- build: Update minor versions (Krille)
|
||||
- chore: Adjust status msg design (krille-chan)
|
||||
- chore: Improved error handling for recovery key (Krille)
|
||||
- chore: Make stickers smaller (Krille)
|
||||
- chore: Wait for device keys before ask bootstrap (Krille)
|
||||
- fix: Missing null check in public room bottom sheet (Krille)
|
||||
- fix: onDragDone crashes when no files found (Krille)
|
||||
- fix: Render tg-forward html tags (Krille)
|
||||
- fix: Use HapticFeedback.selectionClick() for long press on message (Krille)
|
||||
- fix: whitespaces sometimes encoded in html message (Krille)
|
||||
- fix: Share invite links of public rooms (Krille)
|
||||
|
||||
## v1.17.2
|
||||
Another minor bugfix release which also implements private read receipts.
|
||||
|
||||
- feat: Implement private read receipts (krille-chan)
|
||||
- feat: Join room by alias by tpying alias in searchbar (krille-chan)
|
||||
- fix: Add cancel button to key request dialog (Krille)
|
||||
- fix: Encode component for links correctly (Krille)
|
||||
- fix: Forward arbitrary message content (krille-chan)
|
||||
- fix: Open publicroombottomsheet by alias (krille-chan)
|
||||
- docs: Add noto animated emojis link (krille-chan)
|
||||
- docs: New website (krille-chan)
|
||||
- build: Do not load emojis at initial start on web (krille-chan)
|
||||
- build: Update flutter to 3.16.8 (krille-chan)
|
||||
- build: Update sdk to 0.25.6 (Krille)
|
||||
- chore: Add more explaining text for key verification (krille-chan)
|
||||
- chore: Resort settings and add more description text (krille-chan)
|
||||
- refactor: Dialog BuildContext (krille-chan)
|
||||
- refactor: Use popupmenudivider instead of workaround (krille-chan)
|
||||
- Translated using Weblate (Arabic) (Rex_sa)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Poesty Li)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (German) (nautilusx)
|
||||
- Translated using Weblate (Russian) (v1s7)
|
||||
- Translated using Weblate (Swedish) (Flat)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Translated using Weblate (Ukrainian) (Сергій)
|
||||
|
||||
## v1.17.1
|
||||
Minor bugfix release.
|
||||
|
||||
- build: Update matrix sdk 0.25.5 (Krille)
|
||||
- build: Update to flutter 3.16.7 (Krille)
|
||||
- chore: Remove vibration on iOS for long press (Krille)
|
||||
- design: Better paddings in tablet mode (krille-chan)
|
||||
- docs: Fix typo in readme (Krille)
|
||||
- Fix dependency. missing yq when invoking setup-web. also ensure updated config.json copied in (Isaac Johnson)
|
||||
- fix: text nodes with multiple links crash the timeline (Krille)
|
||||
- fix: URL too long when reporting bug (Krille)
|
||||
- fix: Wait for user device keys before start verification (Krille)
|
||||
|
||||
## v1.17.0
|
||||
FluffyChat v1.17.0 refreshes the overall user experience, changes some design and fixes a lot of bugs. It also replaces the stories feature with matrix presences, introduces a new kind of database to store the messages locally and improves the performance and app stability.
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ android {
|
|||
buildTypes {
|
||||
debug {
|
||||
signingConfig signingConfigs.debug
|
||||
applicationIdSuffix ".debug"
|
||||
versionNameSuffix "-debug"
|
||||
}
|
||||
release {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FluffyChat is an open, nonprofit and cute matrix messenger app for Ubuntu Touch, Android and iOS.
|
||||
FluffyChat is an open, nonprofit and cute Matrix messenger app for Ubuntu Touch, Android and iOS.
|
||||
|
||||
Open
|
||||
Opensource and open development where everyone can join.
|
||||
|
|
@ -9,7 +9,7 @@ FluffyChat is donation funded.
|
|||
Cute ♥
|
||||
Cute design and many theme settings including a dark mode.
|
||||
|
||||
One-to-one and groupchats
|
||||
One-to-one and group chats
|
||||
Unlimited groups and direct chats.
|
||||
|
||||
Easy
|
||||
|
|
@ -22,11 +22,11 @@ Decentralized
|
|||
There is no "FluffyChat server" you are forced to use. Use the server you find trustworthy or host your own.
|
||||
|
||||
Compatible
|
||||
Compatible with Element, Fractal, Nekho and all matrix messengers.
|
||||
Compatible with Element, Fractal, Nheko and all Matrix messengers.
|
||||
|
||||
|
||||
FluffyChat comes with a dream
|
||||
|
||||
Imagine a world where everyone can choose the messenger they like and is still able to chat with all of their friends.
|
||||
A world where there are no companies spying on you when you send selfies to friends and lovers.
|
||||
A world where there are no companies spying on you when you send selfies to friends and your loved.
|
||||
And a world where apps are made for fluffyness and not for profit. ♥
|
||||
|
|
|
|||
1
assets/l10n/intl_be.arb
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
|
|
@ -2182,7 +2182,7 @@
|
|||
"@doNotShowAgain": {},
|
||||
"appearOnTopDetails": "Ermöglicht, dass die App oben angezeigt wird (nicht erforderlich, wenn Sie Fluffychat bereits als Anrufkonto eingerichtet haben)",
|
||||
"@appearOnTopDetails": {},
|
||||
"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 denEinstellungen > 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.",
|
||||
"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.",
|
||||
"@noKeyForThisMessage": {},
|
||||
"foregroundServiceRunning": "Diese Benachrichtigung wird angezeigt, wenn der Vordergrunddienst ausgeführt wird.",
|
||||
"@foregroundServiceRunning": {},
|
||||
|
|
@ -2381,7 +2381,7 @@
|
|||
"@invitePrivateChat": {},
|
||||
"invalidInput": "Ungültige Eingabe!",
|
||||
"@invalidInput": {},
|
||||
"hasKnocked": "{user} hat angeklopft",
|
||||
"hasKnocked": "🚪 {user} hat angeklopft",
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
|
|
@ -2485,5 +2485,209 @@
|
|||
"joinSpace": "Space beitreten",
|
||||
"@joinSpace": {},
|
||||
"searchForUsers": "Suche nach @benutzer ...",
|
||||
"@searchForUsers": {}
|
||||
"@searchForUsers": {},
|
||||
"initAppError": "Beim Starten der App ist ein Fehler aufgetreten",
|
||||
"@initAppError": {},
|
||||
"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": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"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": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"restoreSessionBody": "Die App versucht nun, deine Sitzung aus der Sicherung wiederherzustellen. Bitte melde diesen Fehler an die Entwickler unter {url}. Die Fehlermeldung lautet: {error}",
|
||||
"@restoreSessionBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"youInvitedToBy": "📩 Du wurdest per Link eingeladen zu:\n{alias}",
|
||||
"@youInvitedToBy": {
|
||||
"placeholders": {
|
||||
"alias": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceipts": "Lesebestätigungen senden",
|
||||
"@sendReadReceipts": {},
|
||||
"formattedMessages": "Formatierte Nachrichten",
|
||||
"@formattedMessages": {},
|
||||
"forwardMessageTo": "Nachricht weiterleiten an {roomName}?",
|
||||
"@forwardMessageTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"roomName": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotificationsDescription": "Andere Teilnehmer in einem Chat können sehen, wenn du eine neue Nachricht tippst.",
|
||||
"@sendTypingNotificationsDescription": {},
|
||||
"formattedMessagesDescription": "Formatierte Nachrichteninhalte wie fettgedruckten Text mit Markdown anzeigen.",
|
||||
"@formattedMessagesDescription": {},
|
||||
"verifyOtherUser": "🔐 Anderen Benutzer verifizieren",
|
||||
"@verifyOtherUser": {},
|
||||
"sendReadReceiptsDescription": "Andere Teilnehmer in einem Chat können sehen, ob du eine Nachricht gelesen hast.",
|
||||
"@sendReadReceiptsDescription": {},
|
||||
"transparent": "Transparent",
|
||||
"@transparent": {},
|
||||
"verifyOtherDevice": "🔐 Anderes Gerät verifizieren",
|
||||
"@verifyOtherDevice": {},
|
||||
"verifyOtherUserDescription": "Wenn du einen anderen Benutzer verifizierst, kannst du sicher sein, dass du weißt, an wen du wirklich schreibst. 💪\n\nWenn du eine Verifizierung startest, wird dir und dem anderen Nutzer ein Popup in der App angezeigt. Dort siehst du dann eine Reihe von Emojis oder Zahlen, die ihr miteinander vergleichen müsst.\n\nDas geht am besten, wenn man sich trifft oder einen Videoanruf startet. 👭",
|
||||
"@verifyOtherUserDescription": {},
|
||||
"acceptedKeyVerification": "{sender} hat die Schlüsselverifikation akzeptiert",
|
||||
"@acceptedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"canceledKeyVerification": "{sender} hat die Schlüsselverifikation abgebrochen",
|
||||
"@canceledKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"completedKeyVerification": "{sender} hat die Schlüsselverifikation abgeschlossen",
|
||||
"@completedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"isReadyForKeyVerification": "{sender} ist bereit für die Schlüsselverifikation",
|
||||
"@isReadyForKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"requestedKeyVerification": "{sender} hat eine Schlüsselverifikation angefragt",
|
||||
"@requestedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"startedKeyVerification": "{sender} hat die Schlüsselverifikation gestartet",
|
||||
"@startedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"verifyOtherDeviceDescription": "Wenn Sie ein anderes Gerät verifizieren, können diese Geräteschlüssel austauschen, was Ihre Sicherheit insgesamt erhöht. 💪 Wenn Sie eine Verifizierung starten, erscheint ein Pop-up in der App auf beiden Geräten. Dort sehen Sie dann eine Reihe von Emojis oder Zahlen, die Sie miteinander vergleichen müssen. Am besten hältst du beide Geräte bereit, bevor du die Verifizierung startest. 🤳",
|
||||
"@verifyOtherDeviceDescription": {},
|
||||
"presenceStyle": "Statusmeldungen:",
|
||||
"@presenceStyle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"presencesToggle": "Status-Nachrichten anderer Benutzer anzeigen",
|
||||
"@presencesToggle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"incomingMessages": "Eingehende Nachrichten",
|
||||
"@incomingMessages": {},
|
||||
"commandHint_unignore": "Angegebene Matrix-ID nicht mehr ignorieren",
|
||||
"@commandHint_unignore": {},
|
||||
"commandHint_ignore": "Angegebene Matrix-ID ignorieren",
|
||||
"@commandHint_ignore": {},
|
||||
"noDatabaseEncryption": "Datenbankverschlüsselung wird auf dieser Plattform nicht unterstützt",
|
||||
"@noDatabaseEncryption": {},
|
||||
"hidePresences": "Status-Liste verbergen?",
|
||||
"@hidePresences": {},
|
||||
"stickers": "Sticker",
|
||||
"@stickers": {},
|
||||
"discover": "Entdecken",
|
||||
"@discover": {},
|
||||
"unreadChatsInApp": "{appname}: {unread} ungelesene Chats",
|
||||
"@unreadChatsInApp": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"appname": {},
|
||||
"unread": {}
|
||||
}
|
||||
},
|
||||
"customEmojisAndStickersBody": "Eigene Emojis oder Sticker zur Nutzung im Chat hinzufügen oder teilen.",
|
||||
"@customEmojisAndStickersBody": {},
|
||||
"globalChatId": "Globale Chat-ID",
|
||||
"@globalChatId": {},
|
||||
"accessAndVisibility": "Zugang und Sichtbarkeit",
|
||||
"@accessAndVisibility": {},
|
||||
"hideMemberChangesInPublicChats": "Mitglieder-Änderungen in öffentlichen Chats ausblenden",
|
||||
"@hideMemberChangesInPublicChats": {},
|
||||
"accessAndVisibilityDescription": "Wer darf dem Chat beitreten und wie kann der Chat gefunden werden.",
|
||||
"@accessAndVisibilityDescription": {},
|
||||
"hideMemberChangesInPublicChatsBody": "Zeige keine Beitritt- oder Verlassen-Ereignisse von Mitgliedern in der Timeline an, um die Lesbarkeit in öffentlichen Chats zu verbessern.",
|
||||
"@hideMemberChangesInPublicChatsBody": {},
|
||||
"userWouldLikeToChangeTheChat": "{user} würde dem Chat gerne beitreten.",
|
||||
"@userWouldLikeToChangeTheChat": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"noPublicLinkHasBeenCreatedYet": "Es wurde noch kein öffentlicher Link erstellt",
|
||||
"@noPublicLinkHasBeenCreatedYet": {},
|
||||
"chatCanBeDiscoveredViaSearchOnServer": "Chat kann über die Suche auf {server} gefunden werden",
|
||||
"@chatCanBeDiscoveredViaSearchOnServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server": {}
|
||||
}
|
||||
},
|
||||
"appLockDescription": "App mit einer PIN sperren, wenn sie nicht verwendet wird",
|
||||
"@appLockDescription": {},
|
||||
"calls": "Anrufe",
|
||||
"@calls": {},
|
||||
"customEmojisAndStickers": "Eigene Emojis und Sticker",
|
||||
"@customEmojisAndStickers": {},
|
||||
"hideRedactedMessages": "Geschwärzte Nachrichten verstecken",
|
||||
"@hideRedactedMessages": {},
|
||||
"hideRedactedMessagesBody": "Wenn jemand eine Nachricht schwärzt/löscht, dann wird diese Nachricht im Chat nicht mehr sichtbar sein.",
|
||||
"@hideRedactedMessagesBody": {},
|
||||
"hideInvalidOrUnknownMessageFormats": "Ungültige und unbekannte Nachrichten-Formate ausblenden",
|
||||
"@hideInvalidOrUnknownMessageFormats": {},
|
||||
"overview": "Übersicht",
|
||||
"@overview": {},
|
||||
"notifyMeFor": "Benachrichtige mich für",
|
||||
"@notifyMeFor": {},
|
||||
"passwordRecoverySettings": "Passwort-Wiederherstellungs-Einstellungen",
|
||||
"@passwordRecoverySettings": {},
|
||||
"knock": "Anklopfen",
|
||||
"@knock": {},
|
||||
"knocking": "Klopft",
|
||||
"@knocking": {},
|
||||
"thereAreCountUsersBlocked": "Im Augenblick werden {count} Benutzer blockiert.",
|
||||
"@thereAreCountUsersBlocked": {
|
||||
"type": "text",
|
||||
"count": {}
|
||||
},
|
||||
"usersMustKnock": "Benutzer müssen anklopfen",
|
||||
"@usersMustKnock": {},
|
||||
"noOneCanJoin": "Niemand kann beitreten",
|
||||
"@noOneCanJoin": {},
|
||||
"createNewAddress": "Neue Adresse erstellen",
|
||||
"@createNewAddress": {},
|
||||
"userRole": "Benutzerrolle",
|
||||
"@userRole": {},
|
||||
"minimumPowerLevel": "{level} is das minimale Power-Level.",
|
||||
"@minimumPowerLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"level": {}
|
||||
}
|
||||
},
|
||||
"publicChatAddresses": "Öffentliche Chat-Adressen",
|
||||
"@publicChatAddresses": {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1903,519 +1903,332 @@
|
|||
"@homeserver": {},
|
||||
"sendOnEnter": "Sendi per eniga klavo",
|
||||
"@sendOnEnter": {},
|
||||
"hugContent": "",
|
||||
"@hugContent": {
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"jumpToLastReadMessage": "",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"allRooms": "",
|
||||
"@allRooms": {
|
||||
"@jumpToLastReadMessage": {},
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "",
|
||||
"@commandHint_cuddle": {},
|
||||
"widgetVideo": "",
|
||||
"@widgetVideo": {},
|
||||
"dismiss": "",
|
||||
"@dismiss": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"addAccount": "",
|
||||
"@addAccount": {},
|
||||
"unsupportedAndroidVersion": "",
|
||||
"@unsupportedAndroidVersion": {},
|
||||
"widgetJitsi": "",
|
||||
"@widgetJitsi": {},
|
||||
"messageType": "",
|
||||
"@messageType": {},
|
||||
"indexedDbErrorLong": "",
|
||||
"@indexedDbErrorLong": {},
|
||||
"oneClientLoggedOut": "",
|
||||
"@oneClientLoggedOut": {},
|
||||
"startFirstChat": "",
|
||||
"@startFirstChat": {},
|
||||
"callingAccount": "",
|
||||
"@callingAccount": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"nextAccount": "",
|
||||
"@nextAccount": {},
|
||||
"commandHint_create": "",
|
||||
"@commandHint_create": {
|
||||
"@commandHint_cuddle": {},
|
||||
"@widgetVideo": {},
|
||||
"@dismiss": {},
|
||||
"@reportErrorDescription": {},
|
||||
"@addAccount": {},
|
||||
"@unsupportedAndroidVersion": {},
|
||||
"@widgetJitsi": {},
|
||||
"@messageType": {},
|
||||
"@indexedDbErrorLong": {},
|
||||
"@oneClientLoggedOut": {},
|
||||
"@startFirstChat": {},
|
||||
"@callingAccount": {},
|
||||
"@setColorTheme": {},
|
||||
"@nextAccount": {},
|
||||
"@commandHint_create": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /create"
|
||||
},
|
||||
"allSpaces": "",
|
||||
"@allSpaces": {},
|
||||
"supposedMxid": "",
|
||||
"@supposedMxid": {
|
||||
"@allSpaces": {},
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"user": "",
|
||||
"@user": {},
|
||||
"youAcceptedTheInvitation": "",
|
||||
"@youAcceptedTheInvitation": {},
|
||||
"youInvitedBy": "",
|
||||
"@youInvitedBy": {
|
||||
"@user": {},
|
||||
"@youAcceptedTheInvitation": {},
|
||||
"@youInvitedBy": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"widgetEtherpad": "",
|
||||
"@widgetEtherpad": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"separateChatTypes": "",
|
||||
"@separateChatTypes": {
|
||||
"@banUserDescription": {},
|
||||
"@widgetEtherpad": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@separateChatTypes": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"youKickedAndBanned": "",
|
||||
"@youKickedAndBanned": {
|
||||
"@tryAgain": {},
|
||||
"@youKickedAndBanned": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"youRejectedTheInvitation": "",
|
||||
"@youRejectedTheInvitation": {},
|
||||
"otherCallingPermissions": "",
|
||||
"@otherCallingPermissions": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"link": "",
|
||||
"@link": {},
|
||||
"widgetUrlError": "",
|
||||
"@widgetUrlError": {},
|
||||
"emailOrUsername": "",
|
||||
"@emailOrUsername": {},
|
||||
"newSpaceDescription": "",
|
||||
"@newSpaceDescription": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"callingAccountDetails": "",
|
||||
"@callingAccountDetails": {},
|
||||
"enterSpace": "",
|
||||
"@enterSpace": {},
|
||||
"encryptThisChat": "",
|
||||
"@encryptThisChat": {},
|
||||
"previousAccount": "",
|
||||
"@previousAccount": {},
|
||||
"reopenChat": "",
|
||||
"@reopenChat": {},
|
||||
"pleaseEnterRecoveryKey": "",
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"widgetNameError": "",
|
||||
"@widgetNameError": {},
|
||||
"addToBundle": "",
|
||||
"@addToBundle": {},
|
||||
"addWidget": "",
|
||||
"@addWidget": {},
|
||||
"countFiles": "",
|
||||
"@countFiles": {
|
||||
"@unbanUserDescription": {},
|
||||
"@youRejectedTheInvitation": {},
|
||||
"@otherCallingPermissions": {},
|
||||
"@messagesStyle": {},
|
||||
"@link": {},
|
||||
"@widgetUrlError": {},
|
||||
"@emailOrUsername": {},
|
||||
"@newSpaceDescription": {},
|
||||
"@chatDescription": {},
|
||||
"@callingAccountDetails": {},
|
||||
"@enterSpace": {},
|
||||
"@encryptThisChat": {},
|
||||
"@previousAccount": {},
|
||||
"@reopenChat": {},
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"@widgetNameError": {},
|
||||
"@addToBundle": {},
|
||||
"@addWidget": {},
|
||||
"@countFiles": {
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"noKeyForThisMessage": "",
|
||||
"@noKeyForThisMessage": {},
|
||||
"commandHint_markasgroup": "",
|
||||
"@commandHint_markasgroup": {},
|
||||
"hydrateTor": "",
|
||||
"@hydrateTor": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"storeInAppleKeyChain": "",
|
||||
"@storeInAppleKeyChain": {},
|
||||
"hydrate": "",
|
||||
"@hydrate": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"chatPermissions": "",
|
||||
"@chatPermissions": {},
|
||||
"sender": "",
|
||||
"@sender": {},
|
||||
"storeInAndroidKeystore": "",
|
||||
"@storeInAndroidKeystore": {},
|
||||
"signInWithPassword": "",
|
||||
"@signInWithPassword": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"commandHint_clearcache": "",
|
||||
"@commandHint_clearcache": {
|
||||
"@noKeyForThisMessage": {},
|
||||
"@commandHint_markasgroup": {},
|
||||
"@hydrateTor": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@storeInAppleKeyChain": {},
|
||||
"@hydrate": {},
|
||||
"@invalidServerName": {},
|
||||
"@chatPermissions": {},
|
||||
"@sender": {},
|
||||
"@storeInAndroidKeystore": {},
|
||||
"@signInWithPassword": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@commandHint_clearcache": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /clearcache"
|
||||
},
|
||||
"saveKeyManuallyDescription": "",
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"editBundlesForAccount": "",
|
||||
"@editBundlesForAccount": {},
|
||||
"whyIsThisMessageEncrypted": "",
|
||||
"@whyIsThisMessageEncrypted": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"importFromZipFile": "",
|
||||
"@importFromZipFile": {},
|
||||
"dehydrateWarning": "",
|
||||
"@dehydrateWarning": {},
|
||||
"noOtherDevicesFound": "",
|
||||
"@noOtherDevicesFound": {},
|
||||
"yourChatBackupHasBeenSetUp": "",
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"@editBundlesForAccount": {},
|
||||
"@whyIsThisMessageEncrypted": {},
|
||||
"@setChatDescription": {},
|
||||
"@importFromZipFile": {},
|
||||
"@dehydrateWarning": {},
|
||||
"@noOtherDevicesFound": {},
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"videoCallsBetaWarning": "",
|
||||
"@videoCallsBetaWarning": {},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@videoCallsBetaWarning": {},
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"fileIsTooBigForServer": "",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"repeatPassword": "",
|
||||
"@repeatPassword": {},
|
||||
"callingPermissions": "",
|
||||
"@callingPermissions": {},
|
||||
"readUpToHere": "",
|
||||
"@readUpToHere": {},
|
||||
"start": "",
|
||||
"@start": {},
|
||||
"unlockOldMessages": "",
|
||||
"@unlockOldMessages": {},
|
||||
"numChats": "",
|
||||
"@numChats": {
|
||||
"@fileIsTooBigForServer": {},
|
||||
"@repeatPassword": {},
|
||||
"@callingPermissions": {},
|
||||
"@readUpToHere": {},
|
||||
"@start": {},
|
||||
"@unlockOldMessages": {},
|
||||
"@numChats": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {}
|
||||
}
|
||||
},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"dehydrate": "",
|
||||
"@dehydrate": {},
|
||||
"locationPermissionDeniedNotice": "",
|
||||
"@locationPermissionDeniedNotice": {
|
||||
"@optionalRedactReason": {},
|
||||
"@dehydrate": {},
|
||||
"@locationPermissionDeniedNotice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"switchToAccount": "",
|
||||
"@switchToAccount": {
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@switchToAccount": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {}
|
||||
}
|
||||
},
|
||||
"locationDisabledNotice": "",
|
||||
"@locationDisabledNotice": {
|
||||
"@locationDisabledNotice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"experimentalVideoCalls": "",
|
||||
"@experimentalVideoCalls": {},
|
||||
"pleaseEnterRecoveryKeyDescription": "",
|
||||
"@pleaseEnterRecoveryKeyDescription": {},
|
||||
"openInMaps": "",
|
||||
"@openInMaps": {
|
||||
"@experimentalVideoCalls": {},
|
||||
"@pleaseEnterRecoveryKeyDescription": {},
|
||||
"@openInMaps": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"inviteContactToGroupQuestion": "",
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"youHaveWithdrawnTheInvitationFor": "",
|
||||
"@youHaveWithdrawnTheInvitationFor": {
|
||||
"@youHaveWithdrawnTheInvitationFor": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"appearOnTopDetails": "",
|
||||
"@appearOnTopDetails": {},
|
||||
"enterRoom": "",
|
||||
"@enterRoom": {},
|
||||
"reportUser": "",
|
||||
"@reportUser": {},
|
||||
"confirmEventUnpin": "",
|
||||
"@confirmEventUnpin": {},
|
||||
"youInvitedUser": "",
|
||||
"@youInvitedUser": {
|
||||
"@appearOnTopDetails": {},
|
||||
"@enterRoom": {},
|
||||
"@reportUser": {},
|
||||
"@confirmEventUnpin": {},
|
||||
"@youInvitedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"fileHasBeenSavedAt": "",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"path": {}
|
||||
}
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"recoveryKey": "",
|
||||
"@recoveryKey": {},
|
||||
"commandHint_discardsession": "",
|
||||
"@commandHint_discardsession": {
|
||||
"@redactMessageDescription": {},
|
||||
"@recoveryKey": {},
|
||||
"@commandHint_discardsession": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /discardsession"
|
||||
},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"dehydrateTorLong": "",
|
||||
"@dehydrateTorLong": {},
|
||||
"doNotShowAgain": "",
|
||||
"@doNotShowAgain": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"unverified": "",
|
||||
"@unverified": {},
|
||||
"serverRequiresEmail": "",
|
||||
"@serverRequiresEmail": {},
|
||||
"hideUnimportantStateEvents": "",
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"screenSharingTitle": "",
|
||||
"@screenSharingTitle": {},
|
||||
"widgetCustom": "",
|
||||
"@widgetCustom": {},
|
||||
"addToSpaceDescription": "",
|
||||
"@addToSpaceDescription": {},
|
||||
"googlyEyesContent": "",
|
||||
"@googlyEyesContent": {
|
||||
"@invalidInput": {},
|
||||
"@dehydrateTorLong": {},
|
||||
"@doNotShowAgain": {},
|
||||
"@report": {},
|
||||
"@unverified": {},
|
||||
"@serverRequiresEmail": {},
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"@screenSharingTitle": {},
|
||||
"@widgetCustom": {},
|
||||
"@addToSpaceDescription": {},
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"youBannedUser": "",
|
||||
"@youBannedUser": {
|
||||
"@youBannedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@addChatDescription": {},
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"publish": "",
|
||||
"@publish": {},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {},
|
||||
"messageInfo": "",
|
||||
"@messageInfo": {},
|
||||
"disableEncryptionWarning": "",
|
||||
"@disableEncryptionWarning": {},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@publish": {},
|
||||
"@openLinkInBrowser": {},
|
||||
"@messageInfo": {},
|
||||
"@disableEncryptionWarning": {},
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"appearOnTop": "",
|
||||
"@appearOnTop": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"foregroundServiceRunning": "",
|
||||
"@foregroundServiceRunning": {},
|
||||
"voiceCall": "",
|
||||
"@voiceCall": {},
|
||||
"importEmojis": "",
|
||||
"@importEmojis": {},
|
||||
"wasDirectChatDisplayName": "",
|
||||
"@wasDirectChatDisplayName": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@appearOnTop": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@foregroundServiceRunning": {},
|
||||
"@voiceCall": {},
|
||||
"@importEmojis": {},
|
||||
"@wasDirectChatDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"oldDisplayName": {}
|
||||
}
|
||||
},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"removeFromBundle": "",
|
||||
"@removeFromBundle": {},
|
||||
"confirmMatrixId": "",
|
||||
"@confirmMatrixId": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"notAnImage": "",
|
||||
"@notAnImage": {},
|
||||
"users": "",
|
||||
"@users": {},
|
||||
"openGallery": "",
|
||||
"@openGallery": {},
|
||||
"chatDescriptionHasBeenChanged": "",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"newGroup": "",
|
||||
"@newGroup": {},
|
||||
"bundleName": "",
|
||||
"@bundleName": {},
|
||||
"dehydrateTor": "",
|
||||
"@dehydrateTor": {},
|
||||
"removeFromSpace": "",
|
||||
"@removeFromSpace": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"scanQrCode": "",
|
||||
"@scanQrCode": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"youKicked": "",
|
||||
"@youKicked": {
|
||||
"@noChatDescriptionYet": {},
|
||||
"@removeFromBundle": {},
|
||||
"@confirmMatrixId": {},
|
||||
"@learnMore": {},
|
||||
"@notAnImage": {},
|
||||
"@users": {},
|
||||
"@openGallery": {},
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"@newGroup": {},
|
||||
"@bundleName": {},
|
||||
"@dehydrateTor": {},
|
||||
"@removeFromSpace": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@scanQrCode": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@youKicked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"reactedWith": "",
|
||||
"@reactedWith": {
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@reactedWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {},
|
||||
"reaction": {}
|
||||
}
|
||||
},
|
||||
"sorryThatsNotPossible": "",
|
||||
"@sorryThatsNotPossible": {},
|
||||
"videoWithSize": "",
|
||||
"@videoWithSize": {
|
||||
"@sorryThatsNotPossible": {},
|
||||
"@videoWithSize": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"size": {}
|
||||
}
|
||||
},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"commandHint_markasdm": "",
|
||||
"@commandHint_markasdm": {},
|
||||
"recoveryKeyLost": "",
|
||||
"@recoveryKeyLost": {},
|
||||
"cuddleContent": "",
|
||||
"@cuddleContent": {
|
||||
"@shareInviteLink": {},
|
||||
"@commandHint_markasdm": {},
|
||||
"@recoveryKeyLost": {},
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"deviceKeys": "",
|
||||
"@deviceKeys": {},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@deviceKeys": {},
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"youJoinedTheChat": "",
|
||||
"@youJoinedTheChat": {},
|
||||
"openVideoCamera": "",
|
||||
"@openVideoCamera": {
|
||||
"@setTheme": {},
|
||||
"@youJoinedTheChat": {},
|
||||
"@openVideoCamera": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"markAsRead": "",
|
||||
"@markAsRead": {},
|
||||
"widgetName": "",
|
||||
"@widgetName": {},
|
||||
"errorAddingWidget": "",
|
||||
"@errorAddingWidget": {},
|
||||
"commandHint_dm": "",
|
||||
"@commandHint_dm": {
|
||||
"@markAsRead": {},
|
||||
"@widgetName": {},
|
||||
"@errorAddingWidget": {},
|
||||
"@commandHint_dm": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_hug": "",
|
||||
"@commandHint_hug": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"youUnbannedUser": "",
|
||||
"@youUnbannedUser": {
|
||||
"@commandHint_hug": {},
|
||||
"@replace": {},
|
||||
"@youUnbannedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"newSpace": "",
|
||||
"@newSpace": {},
|
||||
"emojis": "",
|
||||
"@emojis": {},
|
||||
"commandHint_googly": "",
|
||||
"@commandHint_googly": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"createGroup": "",
|
||||
"@createGroup": {},
|
||||
"hydrateTorLong": "",
|
||||
"@hydrateTorLong": {},
|
||||
"time": "",
|
||||
"@time": {},
|
||||
"custom": "",
|
||||
"@custom": {},
|
||||
"noBackupWarning": "",
|
||||
"@noBackupWarning": {},
|
||||
"storeInSecureStorageDescription": "",
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"openChat": "",
|
||||
"@openChat": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"importNow": "",
|
||||
"@importNow": {},
|
||||
"pinMessage": "",
|
||||
"@pinMessage": {},
|
||||
"invite": "",
|
||||
"@invite": {},
|
||||
"enableMultiAccounts": "",
|
||||
"@enableMultiAccounts": {},
|
||||
"indexedDbErrorTitle": "",
|
||||
"@indexedDbErrorTitle": {},
|
||||
"unsupportedAndroidVersionLong": "",
|
||||
"@unsupportedAndroidVersionLong": {},
|
||||
"storeSecurlyOnThisDevice": "",
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"screenSharingDetail": "",
|
||||
"@screenSharingDetail": {},
|
||||
"placeCall": "",
|
||||
"@placeCall": {}
|
||||
"@newSpace": {},
|
||||
"@emojis": {},
|
||||
"@commandHint_googly": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@createGroup": {},
|
||||
"@hydrateTorLong": {},
|
||||
"@time": {},
|
||||
"@custom": {},
|
||||
"@noBackupWarning": {},
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"@openChat": {},
|
||||
"@kickUserDescription": {},
|
||||
"@importNow": {},
|
||||
"@pinMessage": {},
|
||||
"@invite": {},
|
||||
"@enableMultiAccounts": {},
|
||||
"@indexedDbErrorTitle": {},
|
||||
"@unsupportedAndroidVersionLong": {},
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"@screenSharingDetail": {},
|
||||
"@placeCall": {}
|
||||
}
|
||||
|
|
@ -2079,14 +2079,12 @@
|
|||
"@unsupportedAndroidVersionLong": {},
|
||||
"storeSecurlyOnThisDevice": "Almacenar de forma segura en este dispositivo",
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"encryptThisChat": "",
|
||||
"@encryptThisChat": {},
|
||||
"@encryptThisChat": {},
|
||||
"openChat": "Abrir chat",
|
||||
"@openChat": {},
|
||||
"screenSharingDetail": "Usted está compartiendo su pantalla en FluffyChat",
|
||||
"@screenSharingDetail": {},
|
||||
"jumpToLastReadMessage": "",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"@jumpToLastReadMessage": {},
|
||||
"allRooms": "Todos los chats grupales",
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
|
|
@ -2096,18 +2094,15 @@
|
|||
"@widgetVideo": {},
|
||||
"dismiss": "Descartar",
|
||||
"@dismiss": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"@reportErrorDescription": {},
|
||||
"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": {},
|
||||
"callingAccount": "",
|
||||
"@callingAccount": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"@callingAccount": {},
|
||||
"@setColorTheme": {},
|
||||
"commandHint_create": "Crear un chat grupal vacío\nUse --no-encryption para deshabilitar el cifrado",
|
||||
"@commandHint_create": {
|
||||
"type": "text",
|
||||
|
|
@ -2115,10 +2110,8 @@
|
|||
},
|
||||
"user": "Usuario",
|
||||
"@user": {},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"@banUserDescription": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"separateChatTypes": "Separar chats directos de grupos",
|
||||
"@separateChatTypes": {
|
||||
"type": "text",
|
||||
|
|
@ -2132,32 +2125,27 @@
|
|||
"user": {}
|
||||
}
|
||||
},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"@unbanUserDescription": {},
|
||||
"messagesStyle": "Mensajes:",
|
||||
"@messagesStyle": {},
|
||||
"newSpaceDescription": "",
|
||||
"@newSpaceDescription": {},
|
||||
"@newSpaceDescription": {},
|
||||
"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": {},
|
||||
"reopenChat": "",
|
||||
"@reopenChat": {},
|
||||
"@reopenChat": {},
|
||||
"pleaseEnterRecoveryKey": "Por favor, introduzca su clave de recuperación:",
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"widgetNameError": "Por favor, introduzca un nombre a mostrar.",
|
||||
"@widgetNameError": {},
|
||||
"addWidget": "Añadir widget",
|
||||
"@addWidget": {},
|
||||
"noKeyForThisMessage": "",
|
||||
"@noKeyForThisMessage": {},
|
||||
"@noKeyForThisMessage": {},
|
||||
"hydrateTor": "TOR: Importar sesión exportada",
|
||||
"@hydrateTor": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"storeInAppleKeyChain": "Almacenar en la KeyChain de Apple",
|
||||
"@storeInAppleKeyChain": {},
|
||||
"hydrate": "Restaurar desde fichero de copia de seguridad",
|
||||
|
|
@ -2170,10 +2158,8 @@
|
|||
"@sender": {},
|
||||
"storeInAndroidKeystore": "Almacenar en la KeyStore de Android",
|
||||
"@storeInAndroidKeystore": {},
|
||||
"signInWithPassword": "",
|
||||
"@signInWithPassword": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"@signInWithPassword": {},
|
||||
"@makeAdminDescription": {},
|
||||
"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?",
|
||||
|
|
@ -2182,8 +2168,7 @@
|
|||
"@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": {},
|
||||
"noOtherDevicesFound": "",
|
||||
"@noOtherDevicesFound": {},
|
||||
"@noOtherDevicesFound": {},
|
||||
"redactedBy": "Censurado por {username}",
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
|
|
@ -2193,19 +2178,16 @@
|
|||
},
|
||||
"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": {},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"fileIsTooBigForServer": "",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"@fileIsTooBigForServer": {},
|
||||
"callingPermissions": "Permisos de llamadas",
|
||||
"@callingPermissions": {},
|
||||
"readUpToHere": "",
|
||||
"@readUpToHere": {},
|
||||
"@readUpToHere": {},
|
||||
"unlockOldMessages": "Desbloquear mensajes viejos",
|
||||
"@unlockOldMessages": {},
|
||||
"numChats": "{number} chats",
|
||||
|
|
@ -2219,8 +2201,7 @@
|
|||
"@optionalRedactReason": {},
|
||||
"dehydrate": "Exportar sesión y limpiar dispositivo",
|
||||
"@dehydrate": {},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"@archiveRoomDescription": {},
|
||||
"switchToAccount": "Cambiar a la cuenta {number}",
|
||||
"@switchToAccount": {
|
||||
"type": "number",
|
||||
|
|
@ -2248,8 +2229,7 @@
|
|||
"user": {}
|
||||
}
|
||||
},
|
||||
"appearOnTopDetails": "",
|
||||
"@appearOnTopDetails": {},
|
||||
"@appearOnTopDetails": {},
|
||||
"enterRoom": "Unirse a la sala",
|
||||
"@enterRoom": {},
|
||||
"confirmEventUnpin": "¿Seguro que quiere desfijar permanentemente el evento?",
|
||||
|
|
@ -2260,8 +2240,7 @@
|
|||
"user": {}
|
||||
}
|
||||
},
|
||||
"fileHasBeenSavedAt": "",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"path": {}
|
||||
|
|
@ -2271,14 +2250,12 @@
|
|||
"@redactMessageDescription": {},
|
||||
"recoveryKey": "Clave de recuperación",
|
||||
"@recoveryKey": {},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"@invalidInput": {},
|
||||
"dehydrateTorLong": "Si está usando TOR, es recomendable exportar la sesión antes de cerrar la ventana.",
|
||||
"@dehydrateTorLong": {},
|
||||
"doNotShowAgain": "No mostrar de nuevo",
|
||||
"@doNotShowAgain": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"@report": {},
|
||||
"hideUnimportantStateEvents": "Ocultar eventos de estado no importantes",
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"screenSharingTitle": "Compartir la pantalla",
|
||||
|
|
@ -2291,31 +2268,25 @@
|
|||
"user": {}
|
||||
}
|
||||
},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {},
|
||||
"disableEncryptionWarning": "",
|
||||
"@disableEncryptionWarning": {},
|
||||
"@openLinkInBrowser": {},
|
||||
"@disableEncryptionWarning": {},
|
||||
"directChat": "Chat directo",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"@inviteGroupChat": {},
|
||||
"appearOnTop": "Aparecer en la cima",
|
||||
"@appearOnTop": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"@invitePrivateChat": {},
|
||||
"foregroundServiceRunning": "Esta notificación aparece cuando el servicio en segundo plano se está ejecutando.",
|
||||
"@foregroundServiceRunning": {},
|
||||
"wasDirectChatDisplayName": "Chat vacío (era {oldDisplayName})",
|
||||
|
|
@ -2327,43 +2298,35 @@
|
|||
},
|
||||
"noChatDescriptionYet": "No se ha creado una descripción del chat aún.",
|
||||
"@noChatDescriptionYet": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"@learnMore": {},
|
||||
"chatDescriptionHasBeenChanged": "Se ha cambiado la descripción del chat",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"dehydrateTor": "TOR: Exportar sesión",
|
||||
"@dehydrateTor": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"youKicked": "👞 Usted expulsó a {user}",
|
||||
"@youKicked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"sorryThatsNotPossible": "",
|
||||
"@sorryThatsNotPossible": {},
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@sorryThatsNotPossible": {},
|
||||
"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": {},
|
||||
"deviceKeys": "",
|
||||
"@deviceKeys": {},
|
||||
"@deviceKeys": {},
|
||||
"emoteKeyboardNoRecents": "Los emotes usados recientemente aparecerán aquí...",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"@setTheme": {},
|
||||
"youJoinedTheChat": "Usted se ha unido al chat",
|
||||
"@youJoinedTheChat": {},
|
||||
"errorAddingWidget": "Fallo al añadir el widget.",
|
||||
|
|
@ -2381,24 +2344,20 @@
|
|||
},
|
||||
"emojis": "Emojis",
|
||||
"@emojis": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"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": {},
|
||||
"noBackupWarning": "",
|
||||
"@noBackupWarning": {},
|
||||
"@noBackupWarning": {},
|
||||
"storeInSecureStorageDescription": "Almacenar la clave de recuperación en el almacenamiento seguro de este dispositivo.",
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"@kickUserDescription": {},
|
||||
"pinMessage": "Anclar a la sala",
|
||||
"@pinMessage": {},
|
||||
"invite": "",
|
||||
"@invite": {},
|
||||
"@invite": {},
|
||||
"indexedDbErrorTitle": "Problemas con el modo privado",
|
||||
"@indexedDbErrorTitle": {},
|
||||
"googlyEyesContent": "{senderName} te manda ojos saltones",
|
||||
|
|
@ -2417,6 +2376,5 @@
|
|||
},
|
||||
"commandHint_googly": "Enviar unos ojos saltones",
|
||||
"@commandHint_googly": {},
|
||||
"placeCall": "",
|
||||
"@placeCall": {}
|
||||
"@placeCall": {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2273,7 +2273,7 @@
|
|||
},
|
||||
"jumpToLastReadMessage": "Joan irakurritako azken mezura",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"reportErrorDescription": "O ez! Zerbaitek huts egin du. Saiatu berriro geroago. Nahi izanez gero, eman garatzaileei errorearen berri.",
|
||||
"reportErrorDescription": "😭 O ez! Zerbaitek huts egin du. Nahi izanez gero, eman garatzaileei errorearen berri.",
|
||||
"@reportErrorDescription": {},
|
||||
"cuddleContent": "{senderName}(e)k samurki besarkatu zaitu",
|
||||
"@cuddleContent": {
|
||||
|
|
@ -2405,7 +2405,7 @@
|
|||
"@makeAdminDescription": {},
|
||||
"archiveRoomDescription": "Txata artxibategira mugituko da. Beste erabiltzaileek txatetik alde egin duzula ikusi ahal izango dute.",
|
||||
"@archiveRoomDescription": {},
|
||||
"hasKnocked": "{user}(e)k baimena eskatu du",
|
||||
"hasKnocked": "🚪 {user}(e)k baimena eskatu du",
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
|
|
@ -2446,7 +2446,7 @@
|
|||
"@blockListDescription": {},
|
||||
"blockedUsers": "Blokeatutako erabiltzaileak",
|
||||
"@blockedUsers": {},
|
||||
"block": "blokeatu",
|
||||
"block": "Blokeatu",
|
||||
"@block": {},
|
||||
"blockUsername": "Ezikusi erabiltzaile-izena",
|
||||
"@blockUsername": {},
|
||||
|
|
@ -2485,5 +2485,209 @@
|
|||
"thisDevice": "Gailu hau:",
|
||||
"@thisDevice": {},
|
||||
"decline": "Baztertu",
|
||||
"@decline": {}
|
||||
"@decline": {},
|
||||
"databaseBuildErrorBody": "Ezin izan 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": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"initAppError": "Errorea aplikazioa abiaraztean",
|
||||
"@initAppError": {},
|
||||
"sessionLostBody": "Zure saioa galdu da. Jakinarazi errorea garatzaileei {url} helbidean. Errorearen mezua ondorengoa da: {error}",
|
||||
"@sessionLostBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"restoreSessionBody": "Aplikazioa babeskopia erabiliz saioa leheneratzen saiatuko da. Jakinarazi errorea garatzaileei {url} helbidean. Errorearen mezua ondorengoa da: {error}",
|
||||
"@restoreSessionBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"youInvitedToBy": "📩 Esteka baten bidez gonbidatu zaituzte:\n{alias}",
|
||||
"@youInvitedToBy": {
|
||||
"placeholders": {
|
||||
"alias": {}
|
||||
}
|
||||
},
|
||||
"transparent": "Gardena",
|
||||
"@transparent": {},
|
||||
"sendReadReceipts": "Bidali irakurri izanaren adierazlea",
|
||||
"@sendReadReceipts": {},
|
||||
"formattedMessages": "Formatua duten mezuak",
|
||||
"@formattedMessages": {},
|
||||
"verifyOtherDevice": "🔐 Egiaztatu beste gailu bat",
|
||||
"@verifyOtherDevice": {},
|
||||
"acceptedKeyVerification": "{sender}(e)k gakoaren egiaztapena onartu du",
|
||||
"@acceptedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"canceledKeyVerification": "{sender}(e)k gakoen egiaztapena ezeztatu du",
|
||||
"@canceledKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"requestedKeyVerification": "{sender}(e)k gakoen egiaztapena galdegin du",
|
||||
"@requestedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceiptsDescription": "Txateko beste kideek mezu bat irakurri duzula ikus dezakete.",
|
||||
"@sendReadReceiptsDescription": {},
|
||||
"forwardMessageTo": "Birbidali mezua {roomName}(e)ra?",
|
||||
"@forwardMessageTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"roomName": {}
|
||||
}
|
||||
},
|
||||
"completedKeyVerification": "{sender}(e)k gakoen egiaztapena osatu du",
|
||||
"@completedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"isReadyForKeyVerification": "{sender} gakoak egiaztatzeko prest dago",
|
||||
"@isReadyForKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"verifyOtherDeviceDescription": "Beste gailu bat egiaztatzean, gailu horiek gakoak truka ditzakete, eta segurtasun orokorra handitu. 💪 Egiaztapena hasten duzunean, laster-leiho bat agertuko da bi gailuetan. Bertan, elkarrekin alderatu behar diren emoji edo zenbaki batzuk ikusiko dituzu. Hobe da bi gailuak eskura izatea egiaztapena hasi aurretik. 🤳",
|
||||
"@verifyOtherDeviceDescription": {},
|
||||
"verifyOtherUserDescription": "Beste erabiltzaile bat egiaztatzen baduzu, ziur egon zaitezke nori idazten ari zaren. 💪\n\nEgiaztapena hasten duzunean, zuk eta beste erabiltzaileak laster-leiho bat ikusiko duzue aplikazioan. Bertan, elkarrekin alderatu behar diren emoji edo zenbaki batzuk erakutsiko dira.\n\nBideo-dei bat hastea edo aurrez-aurre batzea da horretarako modurik onena. 👭",
|
||||
"@verifyOtherUserDescription": {},
|
||||
"formattedMessagesDescription": "Erakutsi mezu aberatsen edukia markdown erabiliz, testu lodia esaterako.",
|
||||
"@formattedMessagesDescription": {},
|
||||
"sendTypingNotificationsDescription": "Txateko beste kideek mezu berri bat idazten ari zarela ikus dezakete.",
|
||||
"@sendTypingNotificationsDescription": {},
|
||||
"verifyOtherUser": "🔐 Egiaztatu beste erabiltzaile bat",
|
||||
"@verifyOtherUser": {},
|
||||
"startedKeyVerification": "{sender}(e)k gakoen egiaztapena hasi du",
|
||||
"@startedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"presencesToggle": "Erakutsi beste erabiltzaileen egoera-mezuak",
|
||||
"@presencesToggle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"presenceStyle": "Presentzia:",
|
||||
"@presenceStyle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"incomingMessages": "Jasotako mezuak",
|
||||
"@incomingMessages": {},
|
||||
"hidePresences": "Ezkutatu Egoeren Zerrenda?",
|
||||
"@hidePresences": {},
|
||||
"discover": "Arakatu",
|
||||
"@discover": {},
|
||||
"stickers": "Pegatinak",
|
||||
"@stickers": {},
|
||||
"commandHint_unignore": "Utzi Matrix ID honi muzin egiteari",
|
||||
"@commandHint_unignore": {},
|
||||
"commandHint_ignore": "Muzin egin Matrix ID honi",
|
||||
"@commandHint_ignore": {},
|
||||
"unreadChatsInApp": "{appname}: {unread} mezu irakurri gabe",
|
||||
"@unreadChatsInApp": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"appname": {},
|
||||
"unread": {}
|
||||
}
|
||||
},
|
||||
"noDatabaseEncryption": "Plataforma honetan ezin da datu-basea zifratu",
|
||||
"@noDatabaseEncryption": {},
|
||||
"usersMustKnock": "Erabiltzaileek baimena eskatu behar dute",
|
||||
"@usersMustKnock": {},
|
||||
"userWouldLikeToChangeTheChat": "{user}(e)k txatera batu nahiko luke.",
|
||||
"@userWouldLikeToChangeTheChat": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"knock": "Eskatu baimena",
|
||||
"@knock": {},
|
||||
"knocking": "Baimena eskatzen",
|
||||
"@knocking": {},
|
||||
"chatCanBeDiscoveredViaSearchOnServer": "Txata {server}(e)n bilaketa eginez aurkitu daiteke",
|
||||
"@chatCanBeDiscoveredViaSearchOnServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server": {}
|
||||
}
|
||||
},
|
||||
"thereAreCountUsersBlocked": "Une honetan {count} erabiltzaile daude blokeatuta.",
|
||||
"@thereAreCountUsersBlocked": {
|
||||
"type": "text",
|
||||
"count": {}
|
||||
},
|
||||
"appLockDescription": "Blokeatu aplikazioa pin kode batekin erabiltzen ari ez zarenean",
|
||||
"@appLockDescription": {},
|
||||
"accessAndVisibility": "Sarbidea eta ikusgaitasuna",
|
||||
"@accessAndVisibility": {},
|
||||
"accessAndVisibilityDescription": "Nork du txat honetara batzeko baimena eta nola aurkitu daiteke txata.",
|
||||
"@accessAndVisibilityDescription": {},
|
||||
"customEmojisAndStickers": "Emoji eta pegatina propioak",
|
||||
"@customEmojisAndStickers": {},
|
||||
"customEmojisAndStickersBody": "Gehitu edo partekatu edozein txatetan erabil daitezkeen emoji edo pegatina propioak.",
|
||||
"@customEmojisAndStickersBody": {},
|
||||
"hideRedactedMessages": "Ezkutatu atzera botatako mezuak",
|
||||
"@hideRedactedMessages": {},
|
||||
"hideRedactedMessagesBody": "Norbaitek mezuren bat atzera botaz gero, mezua txatetik kenduko da, abisurik gabe.",
|
||||
"@hideRedactedMessagesBody": {},
|
||||
"hideInvalidOrUnknownMessageFormats": "Ezkutatu mezuen formatu ezezagun edo baliogabea",
|
||||
"@hideInvalidOrUnknownMessageFormats": {},
|
||||
"overview": "Ikuspegi orokorra",
|
||||
"@overview": {},
|
||||
"notifyMeFor": "Jakinarazi…",
|
||||
"@notifyMeFor": {},
|
||||
"passwordRecoverySettings": "Pasahitza berreskuratzeko ezarpenak",
|
||||
"@passwordRecoverySettings": {},
|
||||
"hideMemberChangesInPublicChats": "Ezkutatu kideen egoera aldaketak txat publikoetan",
|
||||
"@hideMemberChangesInPublicChats": {},
|
||||
"globalChatId": "Txat ID orokorra",
|
||||
"@globalChatId": {},
|
||||
"calls": "Deiak",
|
||||
"@calls": {},
|
||||
"hideMemberChangesInPublicChatsBody": "Ez erakutsi txataren denbora-lerroan norbait txat publikora batu edo txatetik irteten dela, irakurgaitasuna hobetzeko.",
|
||||
"@hideMemberChangesInPublicChatsBody": {},
|
||||
"noOneCanJoin": "Ezin da inor batu",
|
||||
"@noOneCanJoin": {},
|
||||
"noPublicLinkHasBeenCreatedYet": "Oraindik ez da esteka publikorik sortu",
|
||||
"@noPublicLinkHasBeenCreatedYet": {},
|
||||
"userRole": "Erabiltzailearen rola",
|
||||
"@userRole": {},
|
||||
"minimumPowerLevel": "{level} da gutxieneko botere maila.",
|
||||
"@minimumPowerLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"level": {}
|
||||
}
|
||||
},
|
||||
"publicChatAddresses": "Txataren helbide publikoak",
|
||||
"@publicChatAddresses": {},
|
||||
"createNewAddress": "Sortu helbide berria",
|
||||
"@createNewAddress": {}
|
||||
}
|
||||
|
|
|
|||
870
assets/l10n/intl_fil.arb
Normal file
|
|
@ -0,0 +1,870 @@
|
|||
{
|
||||
"remove": "Tanggalin",
|
||||
"@remove": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"importNow": "I-import ngayon",
|
||||
"@importNow": {},
|
||||
"importEmojis": "I-import ang mga Emoji",
|
||||
"@importEmojis": {},
|
||||
"importFromZipFile": "Mag-import mula sa .zip file",
|
||||
"@importFromZipFile": {},
|
||||
"exportEmotePack": "I-export ang Emote pack bilang .zip",
|
||||
"@exportEmotePack": {},
|
||||
"accept": "Tanggapin",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"account": "Account",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addEmail": "Magdagdag ng email",
|
||||
"@addEmail": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirmMatrixId": "Paki-kumpirma ang iyong Matrix ID para burahin ang iyong account.",
|
||||
"@confirmMatrixId": {},
|
||||
"addChatDescription": "Magdagdag ng deskripsyon ng chat...",
|
||||
"@addChatDescription": {},
|
||||
"admin": "Admin",
|
||||
"@admin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"alias": "alyas",
|
||||
"@alias": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"all": "Lahat",
|
||||
"@all": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allChats": "Lahat ng mga chat",
|
||||
"@allChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_googly": "Magpadala ng mga googly eye",
|
||||
"@commandHint_googly": {},
|
||||
"commandHint_cuddle": "Magpadala ng yakap",
|
||||
"@commandHint_cuddle": {},
|
||||
"cuddleContent": "Niyakap ka ni {senderName}",
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"hugContent": "Niyakap ka ni {senderName}",
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"anyoneCanJoin": "Pwede sumali ang anumang tao",
|
||||
"@anyoneCanJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLock": "Lock ng app",
|
||||
"@appLock": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archive": "Archive",
|
||||
"@archive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areGuestsAllowedToJoin": "Pwede ba sumali ang mga bisita",
|
||||
"@areGuestsAllowedToJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSure": "Sigurado ka?",
|
||||
"@areYouSure": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askVerificationRequest": "Tanggapin ang hiling ng verification mula sa {username}?",
|
||||
"@askVerificationRequest": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"autoplayImages": "Awtomatikong i-play ang mga gumagalaw na sticker at emote",
|
||||
"@autoplayImages": {
|
||||
"type": "text",
|
||||
"placeholder": {}
|
||||
},
|
||||
"sendTypingNotifications": "Ipadala ang mga typing notification",
|
||||
"@sendTypingNotifications": {},
|
||||
"blockDevice": "I-block ang Device",
|
||||
"@blockDevice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blocked": "Na-block",
|
||||
"@blocked": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeDeviceName": "Palitan ang pangalan ng device",
|
||||
"@changeDeviceName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheChatAvatar": "Pinalitan ni {username} ang avatar ng chat",
|
||||
"@changedTheChatAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRules": "Pinalitan ni {username} ang mga tuntunin sa pag-access ng bisita",
|
||||
"@changedTheGuestAccessRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibility": "Pinalitan ni {username} ang kakayahan ng pagkikita ng history",
|
||||
"@changedTheHistoryVisibility": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibilityTo": "Pinalitan ni {username} ang kakayahan ng pagkikita ng history sa: {rules}",
|
||||
"@changedTheHistoryVisibilityTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomAliases": "Pinalitan ni {username} ang mga alias ng room",
|
||||
"@changedTheRoomAliases": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changePassword": "Palitan ang password",
|
||||
"@changePassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeYourAvatar": "Palitan ang iyong avatar",
|
||||
"@changeYourAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"channelCorruptedDecryptError": "Nasira ang encryption",
|
||||
"@channelCorruptedDecryptError": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chat": "Chat",
|
||||
"@chat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackup": "Pag-backup ng chat",
|
||||
"@chatBackup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "Mga detalye ng chat",
|
||||
"@chatDetails": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatHasBeenAddedToThisSpace": "Nadagdag ang chat sa space na ito",
|
||||
"@chatHasBeenAddedToThisSpace": {},
|
||||
"chats": "Mga Chat",
|
||||
"@chats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "Pumili ng malakas na password",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"clearArchive": "I-clear ang archive",
|
||||
"@clearArchive": {},
|
||||
"close": "Isara",
|
||||
"@close": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_markasgroup": "Markahan bilang grupo",
|
||||
"@commandHint_markasgroup": {},
|
||||
"commandHint_ban": "Pagbawalan ang ibinigay na user sa room na ito",
|
||||
"@commandHint_ban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /ban"
|
||||
},
|
||||
"repeatPassword": "Ulitin ang password",
|
||||
"@repeatPassword": {},
|
||||
"notAnImage": "Hindi isang file na larawan.",
|
||||
"@notAnImage": {},
|
||||
"replace": "Palitan",
|
||||
"@replace": {},
|
||||
"about": "Tungkol sa",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "👍 Tinanggap ni {username} ang imbitasyon",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"activatedEndToEndEncryption": "🔐 Na-activate ni {username} ang end to end encryption",
|
||||
"@activatedEndToEndEncryption": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"supposedMxid": "Dapat ito ay {mxid}",
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"addToSpace": "Idagdag sa space",
|
||||
"@addToSpace": {},
|
||||
"commandHint_hug": "Magpadala ng yakap",
|
||||
"@commandHint_hug": {},
|
||||
"googlyEyesContent": "Nagpadala si {senderName} ng googly eyes",
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"answeredTheCall": "Sinagot ni {senderName} ang tawag",
|
||||
"@answeredTheCall": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"areYouSureYouWantToLogout": "Sigurado kang gusto mong mag-log out?",
|
||||
"@areYouSureYouWantToLogout": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askSSSSSign": "Para i-sign ang isa pang tao, pakilagay ang iyong secure store passphrase o recovery key.",
|
||||
"@askSSSSSign": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"badServerLoginTypesException": "Ang homeserver ay sinusuportahan ang sumusunod na uri ng login:\n{serverVersions}\nNgunit sinusuportahan lang ng app ang:\n{supportedVersions}",
|
||||
"@badServerLoginTypesException": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"serverVersions": {},
|
||||
"supportedVersions": {}
|
||||
}
|
||||
},
|
||||
"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": "text",
|
||||
"placeholders": {
|
||||
"serverVersions": {},
|
||||
"supportedVersions": {}
|
||||
}
|
||||
},
|
||||
"banFromChat": "Pagbawalan sa chat",
|
||||
"@banFromChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"banned": "Pinagbawalan",
|
||||
"@banned": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"botMessages": "Mga mensahe ng bot",
|
||||
"@botMessages": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "Kanselahin",
|
||||
"@cancel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"bannedUser": "Pinagbawalan ni {username} si {targetName}",
|
||||
"@bannedUser": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"targetName": {}
|
||||
}
|
||||
},
|
||||
"cantOpenUri": "Hindi mabuksan ang URI na {uri}",
|
||||
"@cantOpenUri": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"uri": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRules": "Pinalitan ni {username} ang mga tuntunin sa pagsali",
|
||||
"@changedTheJoinRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRulesTo": "Pinalitan ni {username} ang mga tuntunin sa pagsali sa: {joinRules}",
|
||||
"@changedTheJoinRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"joinRules": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatDescriptionTo": "Pinalitan ni {username} ang deskripsyon ng chat sa: '{description}'",
|
||||
"@changedTheChatDescriptionTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"description": {}
|
||||
}
|
||||
},
|
||||
"changedTheProfileAvatar": "Pinalitan ni {username} ang kanilang avatar",
|
||||
"@changedTheProfileAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatNameTo": "Pinalitan ni {username} ang pangalan ng chat sa: '{chatname}'",
|
||||
"@changedTheChatNameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"chatname": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomInvitationLink": "Pinalitan ni {username} ang link ng imbitasyon",
|
||||
"@changedTheRoomInvitationLink": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changeTheHomeserver": "Palitan ang homeserver",
|
||||
"@changeTheHomeserver": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheme": "Palitan ang iyong istilio",
|
||||
"@changeTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheChatPermissions": "Pinalitan ni {username} ang mga pahintulot ng chat",
|
||||
"@changedTheChatPermissions": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "Palitan ng pangalan ng grupo",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheDisplaynameTo": "Pinalitan ni {username} ang kanilang displayname sa: '{displayname}'",
|
||||
"@changedTheDisplaynameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"displayname": {}
|
||||
}
|
||||
},
|
||||
"yourChatBackupHasBeenSetUp": "Na-set up na ang iyong chat backup.",
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"chatBackupDescription": "Naka-secure ang iyong mga lumang mensahe gamit ng recovery key. Siguraduhing hindi mo ito mawalan.",
|
||||
"@chatBackupDescription": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_markasdm": "Markahan bilang direktang mensahe na room para sa ibinigay na Matrix ID",
|
||||
"@commandHint_markasdm": {},
|
||||
"changedTheGuestAccessRulesTo": "Pinalitan ni {username} ang mga tuntunin sa pag-access ng bisita sa: {rules}",
|
||||
"@changedTheGuestAccessRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"commandHint_clearcache": "I-clear ang cache",
|
||||
"@commandHint_clearcache": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /clearcache"
|
||||
},
|
||||
"commandHint_discardsession": "Iwaksi ang sesyon",
|
||||
"@commandHint_discardsession": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /discardsession"
|
||||
},
|
||||
"commandHint_create": "Gumawa ng walang lamang group chat\nGumamit ng --no-encryption para i-disable ang encryption",
|
||||
"@commandHint_create": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /create"
|
||||
},
|
||||
"configureChat": "I-configure ang chat",
|
||||
"@configureChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirm": "Kumpirmahin",
|
||||
"@confirm": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "Paki-kumpara ang mga numero",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copiedToClipboard": "Kinopya sa clipboard",
|
||||
"@copiedToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copy": "Kopyahin",
|
||||
"@copy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copyToClipboard": "Kopyahin sa clipboard",
|
||||
"@copyToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"countParticipants": "{count} mga kasali",
|
||||
"@countParticipants": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"createdTheChat": "💬 Ginawa ni {username} ang chat",
|
||||
"@createdTheChat": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"createGroup": "Gumawa ng grupo",
|
||||
"@createGroup": {},
|
||||
"createNewSpace": "Bagong space",
|
||||
"@createNewSpace": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"currentlyActive": "Kasalukuyang aktibo",
|
||||
"@currentlyActive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"darkTheme": "Madilim",
|
||||
"@darkTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"displaynameHasBeenChanged": "Pinalitan na ang display name",
|
||||
"@displaynameHasBeenChanged": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"directChats": "Mga Direktang Chat",
|
||||
"@directChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allRooms": "Lahat ng Mga Group Chat",
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"downloadFile": "I-download ang file",
|
||||
"@downloadFile": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editBlockedServers": "I-edit ang mga naka-block na server",
|
||||
"@editBlockedServers": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatPermissions": "Mga pahintulot ng chat",
|
||||
"@chatPermissions": {},
|
||||
"editDisplayname": "I-edit ang display name",
|
||||
"@editDisplayname": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editRoomAliases": "I-edit ang mga alyas ng room",
|
||||
"@editRoomAliases": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"edit": "I-edit",
|
||||
"@edit": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editRoomAvatar": "I-edit ang avatar ng room",
|
||||
"@editRoomAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteExists": "Umiiral na ang emote!",
|
||||
"@emoteExists": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emptyChat": "Walang lamang chat",
|
||||
"@emptyChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"enableEncryption": "I-enable ang encryption",
|
||||
"@enableEncryption": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"encryption": "Pag-encrypt",
|
||||
"@encryption": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"encrypted": "Naka-encrypt",
|
||||
"@encrypted": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"encryptionNotEnabled": "Hindi naka-enable ang encryption",
|
||||
"@encryptionNotEnabled": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"everythingReady": "Handa na ang lahat!",
|
||||
"@everythingReady": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLockDescription": "I-lock ang app kapag hindi ginagamit sa pamamagitan ng pin code",
|
||||
"@appLockDescription": {},
|
||||
"commandHint_dm": "Magsimula ng direktong chat\nGumamit ng --no-encryptiom para i-disable ang encryption",
|
||||
"@commandHint_dm": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_html": "Magpadala ng HTML-formatted na text",
|
||||
"@commandHint_html": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /html"
|
||||
},
|
||||
"commandHint_invite": "Imbitahan ang ibinigay na user sa room na ito",
|
||||
"@commandHint_invite": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /invite"
|
||||
},
|
||||
"commandHint_join": "Sumali sa ibinigay na room",
|
||||
"@commandHint_join": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /join"
|
||||
},
|
||||
"commandHint_kick": "Tanggalin ang ibinigay na user sa room na ito",
|
||||
"@commandHint_kick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /kick"
|
||||
},
|
||||
"commandHint_leave": "Umalis sa room na ito",
|
||||
"@commandHint_leave": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /leave"
|
||||
},
|
||||
"commandHint_me": "Ilarawan ang iyong sarili",
|
||||
"@commandHint_me": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /me"
|
||||
},
|
||||
"commandHint_myroomavatar": "Ilapat ang iyong larawan para sa room na ito (bilang mxc-uri)",
|
||||
"@commandHint_myroomavatar": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomavatar"
|
||||
},
|
||||
"commandHint_myroomnick": "Ilapat ang iyong display name para sa room na ito",
|
||||
"@commandHint_myroomnick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomnick"
|
||||
},
|
||||
"commandHint_op": "Ilapat ang level ng lakas sa ibinigay na user (default: 50)",
|
||||
"@commandHint_op": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /op"
|
||||
},
|
||||
"commandHint_react": "Magpadala ng reply bilang reaksyon",
|
||||
"@commandHint_react": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /react"
|
||||
},
|
||||
"commandHint_send": "Magpadala ng text",
|
||||
"@commandHint_send": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /send"
|
||||
},
|
||||
"commandHint_unban": "I-unban ang ibinigay na user sa room na ito",
|
||||
"@commandHint_unban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /unban"
|
||||
},
|
||||
"commandInvalid": "Hindi wastong command",
|
||||
"@commandInvalid": {
|
||||
"type": "text"
|
||||
},
|
||||
"compareEmojiMatch": "Paki-kumpara ang mga emoji",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connect": "Kumonekta",
|
||||
"@connect": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"containsDisplayName": "Naglalaman ng display name",
|
||||
"@containsDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"create": "Gumawa",
|
||||
"@create": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"date": {},
|
||||
"timeOfDay": {}
|
||||
}
|
||||
},
|
||||
"dateWithoutYear": "{month}/{day}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"dateWithYear": "{month}/{day}/{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"year": {},
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"deactivateAccountWarning": "Ide-deactivate nito ang iyong user account. Hindi na ito maaaring bawiin! Sigurado ka?",
|
||||
"@deactivateAccountWarning": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"delete": "Burahin",
|
||||
"@delete": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteMessage": "Burahin ang mensahe",
|
||||
"@deleteMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"device": "Device",
|
||||
"@device": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deviceId": "ID ng Device",
|
||||
"@deviceId": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"devices": "Mga Device",
|
||||
"@devices": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteInvalid": "Hindi wastong shortcode ng emote!",
|
||||
"@emoteInvalid": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteKeyboardNoRecents": "Ang mga kamakailang ginamit na emote ay lalabas dito...",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"calls": "Mga Tawag",
|
||||
"@calls": {},
|
||||
"customEmojisAndStickers": "Mga custom emoji at sticker",
|
||||
"@customEmojisAndStickers": {},
|
||||
"customEmojisAndStickersBody": "Magdagdag o magbahagi ng mga custom emoji o sticker na maaring gamitin sa anumang chat.",
|
||||
"@customEmojisAndStickersBody": {},
|
||||
"emoteShortcode": "Shortcode ng emoji",
|
||||
"@emoteShortcode": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteWarnNeedToPick": "Kailangan mong pumili ng emote shortcode at isang larawan!",
|
||||
"@emoteWarnNeedToPick": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"enableEmotesGlobally": "I-enable ang emote pack globally",
|
||||
"@enableEmotesGlobally": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"endedTheCall": "Tinapos ni {senderName} ang tawag",
|
||||
"@endedTheCall": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"enterAnEmailAddress": "Maglagay ng email address",
|
||||
"@enterAnEmailAddress": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"homeserver": "Homeserver",
|
||||
"@homeserver": {},
|
||||
"enterYourHomeserver": "Ilagay ang iyong homeserver",
|
||||
"@enterYourHomeserver": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"extremeOffensive": "Lubhang nakakasakit",
|
||||
"@extremeOffensive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_plain": "Magpadala ng hindi na-format na text",
|
||||
"@commandHint_plain": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /plain"
|
||||
},
|
||||
"commandMissing": "Hindi isang command ang {command}.",
|
||||
"@commandMissing": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"command": {}
|
||||
},
|
||||
"description": "State that {command} is not a valid /command."
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "Inimbita ang contact sa group",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"containsUserName": "Naglalaman ng username",
|
||||
"@containsUserName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contentHasBeenReported": "Inulat ang nilalaman sa mga pangangasiwa ng server",
|
||||
"@contentHasBeenReported": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotDecryptMessage": "Hindi ma-decrypt ang mensahe: {error}",
|
||||
"@couldNotDecryptMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"defaultPermissionLevel": "Default na antas ng pahintulot",
|
||||
"@defaultPermissionLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteAccount": "Burahin ang account",
|
||||
"@deleteAccount": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emotePacks": "Mga emote pack para sa room",
|
||||
"@emotePacks": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteSettings": "Mga Setting ng Emote",
|
||||
"@emoteSettings": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"globalChatId": "Global chat ID",
|
||||
"@globalChatId": {},
|
||||
"accessAndVisibility": "Pag-access at visibility",
|
||||
"@accessAndVisibility": {},
|
||||
"accessAndVisibilityDescription": "Sino ang pinapayagang sumali sa chat at paano matutuklas ang chat.",
|
||||
"@accessAndVisibilityDescription": {},
|
||||
"enableEncryptionWarning": "Hindi mo madi-disable ang encryption. Sigurado ka ba?",
|
||||
"@enableEncryptionWarning": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"errorObtainingLocation": "Hindi makuha ang lokasyon: {error}",
|
||||
"@errorObtainingLocation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"fileName": "Pangalan ng file",
|
||||
"@fileName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"fluffychat": "FluffyChat",
|
||||
"@fluffychat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"fontSize": "Laki ng font",
|
||||
"@fontSize": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
|
@ -2305,118 +2305,75 @@
|
|||
"@createGroup": {},
|
||||
"importNow": "Importer maintenant",
|
||||
"@importNow": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"signInWithPassword": "",
|
||||
"@signInWithPassword": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@reportErrorDescription": {},
|
||||
"@setColorTheme": {},
|
||||
"@banUserDescription": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@tryAgain": {},
|
||||
"@unbanUserDescription": {},
|
||||
"@messagesStyle": {},
|
||||
"@chatDescription": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@invalidServerName": {},
|
||||
"@signInWithPassword": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@setChatDescription": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@optionalRedactReason": {},
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@redactMessageDescription": {},
|
||||
"@invalidInput": {},
|
||||
"@report": {},
|
||||
"@addChatDescription": {},
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@noChatDescriptionYet": {},
|
||||
"@learnMore": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@shareInviteLink": {},
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"invite": "",
|
||||
"@invite": {},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {}
|
||||
"@setTheme": {},
|
||||
"@replace": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@kickUserDescription": {},
|
||||
"@invite": {},
|
||||
"@openLinkInBrowser": {}
|
||||
}
|
||||
|
|
@ -1950,471 +1950,299 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"hugContent": "",
|
||||
"@hugContent": {
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"jumpToLastReadMessage": "",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"allRooms": "",
|
||||
"@allRooms": {
|
||||
"@jumpToLastReadMessage": {},
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "",
|
||||
"@commandHint_cuddle": {},
|
||||
"widgetVideo": "",
|
||||
"@widgetVideo": {},
|
||||
"dismiss": "",
|
||||
"@dismiss": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"unsupportedAndroidVersion": "",
|
||||
"@unsupportedAndroidVersion": {},
|
||||
"widgetJitsi": "",
|
||||
"@widgetJitsi": {},
|
||||
"messageType": "",
|
||||
"@messageType": {},
|
||||
"indexedDbErrorLong": "",
|
||||
"@indexedDbErrorLong": {},
|
||||
"oneClientLoggedOut": "",
|
||||
"@oneClientLoggedOut": {},
|
||||
"startFirstChat": "",
|
||||
"@startFirstChat": {},
|
||||
"callingAccount": "",
|
||||
"@callingAccount": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"nextAccount": "",
|
||||
"@nextAccount": {},
|
||||
"allSpaces": "",
|
||||
"@allSpaces": {},
|
||||
"supposedMxid": "",
|
||||
"@supposedMxid": {
|
||||
"@commandHint_cuddle": {},
|
||||
"@widgetVideo": {},
|
||||
"@dismiss": {},
|
||||
"@reportErrorDescription": {},
|
||||
"@unsupportedAndroidVersion": {},
|
||||
"@widgetJitsi": {},
|
||||
"@messageType": {},
|
||||
"@indexedDbErrorLong": {},
|
||||
"@oneClientLoggedOut": {},
|
||||
"@startFirstChat": {},
|
||||
"@callingAccount": {},
|
||||
"@setColorTheme": {},
|
||||
"@nextAccount": {},
|
||||
"@allSpaces": {},
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"user": "",
|
||||
"@user": {},
|
||||
"youAcceptedTheInvitation": "",
|
||||
"@youAcceptedTheInvitation": {},
|
||||
"youInvitedBy": "",
|
||||
"@youInvitedBy": {
|
||||
"@user": {},
|
||||
"@youAcceptedTheInvitation": {},
|
||||
"@youInvitedBy": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"widgetEtherpad": "",
|
||||
"@widgetEtherpad": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"separateChatTypes": "",
|
||||
"@separateChatTypes": {
|
||||
"@banUserDescription": {},
|
||||
"@widgetEtherpad": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@separateChatTypes": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"youKickedAndBanned": "",
|
||||
"@youKickedAndBanned": {
|
||||
"@tryAgain": {},
|
||||
"@youKickedAndBanned": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"youRejectedTheInvitation": "",
|
||||
"@youRejectedTheInvitation": {},
|
||||
"otherCallingPermissions": "",
|
||||
"@otherCallingPermissions": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"widgetUrlError": "",
|
||||
"@widgetUrlError": {},
|
||||
"newSpaceDescription": "",
|
||||
"@newSpaceDescription": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"callingAccountDetails": "",
|
||||
"@callingAccountDetails": {},
|
||||
"enterSpace": "",
|
||||
"@enterSpace": {},
|
||||
"encryptThisChat": "",
|
||||
"@encryptThisChat": {},
|
||||
"previousAccount": "",
|
||||
"@previousAccount": {},
|
||||
"reopenChat": "",
|
||||
"@reopenChat": {},
|
||||
"pleaseEnterRecoveryKey": "",
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"widgetNameError": "",
|
||||
"@widgetNameError": {},
|
||||
"addToBundle": "",
|
||||
"@addToBundle": {},
|
||||
"addWidget": "",
|
||||
"@addWidget": {},
|
||||
"countFiles": "",
|
||||
"@countFiles": {
|
||||
"@unbanUserDescription": {},
|
||||
"@youRejectedTheInvitation": {},
|
||||
"@otherCallingPermissions": {},
|
||||
"@messagesStyle": {},
|
||||
"@widgetUrlError": {},
|
||||
"@newSpaceDescription": {},
|
||||
"@chatDescription": {},
|
||||
"@callingAccountDetails": {},
|
||||
"@enterSpace": {},
|
||||
"@encryptThisChat": {},
|
||||
"@previousAccount": {},
|
||||
"@reopenChat": {},
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"@widgetNameError": {},
|
||||
"@addToBundle": {},
|
||||
"@addWidget": {},
|
||||
"@countFiles": {
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"noKeyForThisMessage": "",
|
||||
"@noKeyForThisMessage": {},
|
||||
"commandHint_markasgroup": "",
|
||||
"@commandHint_markasgroup": {},
|
||||
"hydrateTor": "",
|
||||
"@hydrateTor": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"storeInAppleKeyChain": "",
|
||||
"@storeInAppleKeyChain": {},
|
||||
"hydrate": "",
|
||||
"@hydrate": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"chatPermissions": "",
|
||||
"@chatPermissions": {},
|
||||
"sender": "",
|
||||
"@sender": {},
|
||||
"storeInAndroidKeystore": "",
|
||||
"@storeInAndroidKeystore": {},
|
||||
"signInWithPassword": "",
|
||||
"@signInWithPassword": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"saveKeyManuallyDescription": "",
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"editBundlesForAccount": "",
|
||||
"@editBundlesForAccount": {},
|
||||
"whyIsThisMessageEncrypted": "",
|
||||
"@whyIsThisMessageEncrypted": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"importFromZipFile": "",
|
||||
"@importFromZipFile": {},
|
||||
"dehydrateWarning": "",
|
||||
"@dehydrateWarning": {},
|
||||
"noOtherDevicesFound": "",
|
||||
"@noOtherDevicesFound": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@noKeyForThisMessage": {},
|
||||
"@commandHint_markasgroup": {},
|
||||
"@hydrateTor": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@storeInAppleKeyChain": {},
|
||||
"@hydrate": {},
|
||||
"@invalidServerName": {},
|
||||
"@chatPermissions": {},
|
||||
"@sender": {},
|
||||
"@storeInAndroidKeystore": {},
|
||||
"@signInWithPassword": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"@editBundlesForAccount": {},
|
||||
"@whyIsThisMessageEncrypted": {},
|
||||
"@setChatDescription": {},
|
||||
"@importFromZipFile": {},
|
||||
"@dehydrateWarning": {},
|
||||
"@noOtherDevicesFound": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"fileIsTooBigForServer": "",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"callingPermissions": "",
|
||||
"@callingPermissions": {},
|
||||
"readUpToHere": "",
|
||||
"@readUpToHere": {},
|
||||
"start": "",
|
||||
"@start": {},
|
||||
"unlockOldMessages": "",
|
||||
"@unlockOldMessages": {},
|
||||
"numChats": "",
|
||||
"@numChats": {
|
||||
"@fileIsTooBigForServer": {},
|
||||
"@callingPermissions": {},
|
||||
"@readUpToHere": {},
|
||||
"@start": {},
|
||||
"@unlockOldMessages": {},
|
||||
"@numChats": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {}
|
||||
}
|
||||
},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"dehydrate": "",
|
||||
"@dehydrate": {},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"switchToAccount": "",
|
||||
"@switchToAccount": {
|
||||
"@optionalRedactReason": {},
|
||||
"@dehydrate": {},
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@switchToAccount": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {}
|
||||
}
|
||||
},
|
||||
"experimentalVideoCalls": "",
|
||||
"@experimentalVideoCalls": {},
|
||||
"pleaseEnterRecoveryKeyDescription": "",
|
||||
"@pleaseEnterRecoveryKeyDescription": {},
|
||||
"inviteContactToGroupQuestion": "",
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@experimentalVideoCalls": {},
|
||||
"@pleaseEnterRecoveryKeyDescription": {},
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"youHaveWithdrawnTheInvitationFor": "",
|
||||
"@youHaveWithdrawnTheInvitationFor": {
|
||||
"@youHaveWithdrawnTheInvitationFor": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"appearOnTopDetails": "",
|
||||
"@appearOnTopDetails": {},
|
||||
"enterRoom": "",
|
||||
"@enterRoom": {},
|
||||
"reportUser": "",
|
||||
"@reportUser": {},
|
||||
"confirmEventUnpin": "",
|
||||
"@confirmEventUnpin": {},
|
||||
"youInvitedUser": "",
|
||||
"@youInvitedUser": {
|
||||
"@appearOnTopDetails": {},
|
||||
"@enterRoom": {},
|
||||
"@reportUser": {},
|
||||
"@confirmEventUnpin": {},
|
||||
"@youInvitedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"fileHasBeenSavedAt": "",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"path": {}
|
||||
}
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"recoveryKey": "",
|
||||
"@recoveryKey": {},
|
||||
"commandHint_discardsession": "",
|
||||
"@commandHint_discardsession": {
|
||||
"@redactMessageDescription": {},
|
||||
"@recoveryKey": {},
|
||||
"@commandHint_discardsession": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /discardsession"
|
||||
},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"dehydrateTorLong": "",
|
||||
"@dehydrateTorLong": {},
|
||||
"doNotShowAgain": "",
|
||||
"@doNotShowAgain": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"unverified": "",
|
||||
"@unverified": {},
|
||||
"hideUnimportantStateEvents": "",
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"screenSharingTitle": "",
|
||||
"@screenSharingTitle": {},
|
||||
"widgetCustom": "",
|
||||
"@widgetCustom": {},
|
||||
"addToSpaceDescription": "",
|
||||
"@addToSpaceDescription": {},
|
||||
"googlyEyesContent": "",
|
||||
"@googlyEyesContent": {
|
||||
"@invalidInput": {},
|
||||
"@dehydrateTorLong": {},
|
||||
"@doNotShowAgain": {},
|
||||
"@report": {},
|
||||
"@unverified": {},
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"@screenSharingTitle": {},
|
||||
"@widgetCustom": {},
|
||||
"@addToSpaceDescription": {},
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"youBannedUser": "",
|
||||
"@youBannedUser": {
|
||||
"@youBannedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@addChatDescription": {},
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"publish": "",
|
||||
"@publish": {},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {},
|
||||
"messageInfo": "",
|
||||
"@messageInfo": {},
|
||||
"disableEncryptionWarning": "",
|
||||
"@disableEncryptionWarning": {},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@publish": {},
|
||||
"@openLinkInBrowser": {},
|
||||
"@messageInfo": {},
|
||||
"@disableEncryptionWarning": {},
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"appearOnTop": "",
|
||||
"@appearOnTop": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"foregroundServiceRunning": "",
|
||||
"@foregroundServiceRunning": {},
|
||||
"voiceCall": "",
|
||||
"@voiceCall": {},
|
||||
"importEmojis": "",
|
||||
"@importEmojis": {},
|
||||
"wasDirectChatDisplayName": "",
|
||||
"@wasDirectChatDisplayName": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@appearOnTop": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@foregroundServiceRunning": {},
|
||||
"@voiceCall": {},
|
||||
"@importEmojis": {},
|
||||
"@wasDirectChatDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"oldDisplayName": {}
|
||||
}
|
||||
},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"removeFromBundle": "",
|
||||
"@removeFromBundle": {},
|
||||
"confirmMatrixId": "",
|
||||
"@confirmMatrixId": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"notAnImage": "",
|
||||
"@notAnImage": {},
|
||||
"users": "",
|
||||
"@users": {},
|
||||
"openGallery": "",
|
||||
"@openGallery": {},
|
||||
"chatDescriptionHasBeenChanged": "",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"newGroup": "",
|
||||
"@newGroup": {},
|
||||
"bundleName": "",
|
||||
"@bundleName": {},
|
||||
"dehydrateTor": "",
|
||||
"@dehydrateTor": {},
|
||||
"removeFromSpace": "",
|
||||
"@removeFromSpace": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"youKicked": "",
|
||||
"@youKicked": {
|
||||
"@noChatDescriptionYet": {},
|
||||
"@removeFromBundle": {},
|
||||
"@confirmMatrixId": {},
|
||||
"@learnMore": {},
|
||||
"@notAnImage": {},
|
||||
"@users": {},
|
||||
"@openGallery": {},
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"@newGroup": {},
|
||||
"@bundleName": {},
|
||||
"@dehydrateTor": {},
|
||||
"@removeFromSpace": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@youKicked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"reactedWith": "",
|
||||
"@reactedWith": {
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@reactedWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {},
|
||||
"reaction": {}
|
||||
}
|
||||
},
|
||||
"sorryThatsNotPossible": "",
|
||||
"@sorryThatsNotPossible": {},
|
||||
"videoWithSize": "",
|
||||
"@videoWithSize": {
|
||||
"@sorryThatsNotPossible": {},
|
||||
"@videoWithSize": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"size": {}
|
||||
}
|
||||
},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"commandHint_markasdm": "",
|
||||
"@commandHint_markasdm": {},
|
||||
"recoveryKeyLost": "",
|
||||
"@recoveryKeyLost": {},
|
||||
"cuddleContent": "",
|
||||
"@cuddleContent": {
|
||||
"@shareInviteLink": {},
|
||||
"@commandHint_markasdm": {},
|
||||
"@recoveryKeyLost": {},
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"deviceKeys": "",
|
||||
"@deviceKeys": {},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@deviceKeys": {},
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"youJoinedTheChat": "",
|
||||
"@youJoinedTheChat": {},
|
||||
"markAsRead": "",
|
||||
"@markAsRead": {},
|
||||
"widgetName": "",
|
||||
"@widgetName": {},
|
||||
"errorAddingWidget": "",
|
||||
"@errorAddingWidget": {},
|
||||
"commandHint_dm": "",
|
||||
"@commandHint_dm": {
|
||||
"@setTheme": {},
|
||||
"@youJoinedTheChat": {},
|
||||
"@markAsRead": {},
|
||||
"@widgetName": {},
|
||||
"@errorAddingWidget": {},
|
||||
"@commandHint_dm": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_hug": "",
|
||||
"@commandHint_hug": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"youUnbannedUser": "",
|
||||
"@youUnbannedUser": {
|
||||
"@commandHint_hug": {},
|
||||
"@replace": {},
|
||||
"@youUnbannedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"newSpace": "",
|
||||
"@newSpace": {},
|
||||
"emojis": "",
|
||||
"@emojis": {},
|
||||
"commandHint_googly": "",
|
||||
"@commandHint_googly": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"createGroup": "",
|
||||
"@createGroup": {},
|
||||
"hydrateTorLong": "",
|
||||
"@hydrateTorLong": {},
|
||||
"time": "",
|
||||
"@time": {},
|
||||
"custom": "",
|
||||
"@custom": {},
|
||||
"noBackupWarning": "",
|
||||
"@noBackupWarning": {},
|
||||
"storeInSecureStorageDescription": "",
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"openChat": "",
|
||||
"@openChat": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"importNow": "",
|
||||
"@importNow": {},
|
||||
"pinMessage": "",
|
||||
"@pinMessage": {},
|
||||
"invite": "",
|
||||
"@invite": {},
|
||||
"indexedDbErrorTitle": "",
|
||||
"@indexedDbErrorTitle": {},
|
||||
"unsupportedAndroidVersionLong": "",
|
||||
"@unsupportedAndroidVersionLong": {},
|
||||
"storeSecurlyOnThisDevice": "",
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"screenSharingDetail": "",
|
||||
"@screenSharingDetail": {},
|
||||
"placeCall": "",
|
||||
"@placeCall": {}
|
||||
"@newSpace": {},
|
||||
"@emojis": {},
|
||||
"@commandHint_googly": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@createGroup": {},
|
||||
"@hydrateTorLong": {},
|
||||
"@time": {},
|
||||
"@custom": {},
|
||||
"@noBackupWarning": {},
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"@openChat": {},
|
||||
"@kickUserDescription": {},
|
||||
"@importNow": {},
|
||||
"@pinMessage": {},
|
||||
"@invite": {},
|
||||
"@indexedDbErrorTitle": {},
|
||||
"@unsupportedAndroidVersionLong": {},
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"@screenSharingDetail": {},
|
||||
"@placeCall": {}
|
||||
}
|
||||
|
|
@ -2320,7 +2320,7 @@
|
|||
"@exportEmotePack": {},
|
||||
"replace": "Substituír",
|
||||
"@replace": {},
|
||||
"sendTypingNotifications": "Enviar notificación de escritura",
|
||||
"sendTypingNotifications": "Permitir ver que estás escribindo",
|
||||
"@sendTypingNotifications": {},
|
||||
"createGroup": "Crear grupo",
|
||||
"@createGroup": {},
|
||||
|
|
@ -2398,7 +2398,7 @@
|
|||
"@archiveRoomDescription": {},
|
||||
"invalidInput": "Contido non válido!",
|
||||
"@invalidInput": {},
|
||||
"hasKnocked": "déronlle unha labazada a {user}",
|
||||
"hasKnocked": "🚪 {user} petou na porta",
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
|
|
@ -2446,7 +2446,7 @@
|
|||
"@blockListDescription": {},
|
||||
"blockedUsers": "Usuarias bloqueadas",
|
||||
"@blockedUsers": {},
|
||||
"block": "bloquear",
|
||||
"block": "Bloquer",
|
||||
"@block": {},
|
||||
"blockUsername": "Ignorar identificador",
|
||||
"@blockUsername": {},
|
||||
|
|
@ -2485,5 +2485,209 @@
|
|||
"databaseMigrationTitle": "Base de datos optimizada",
|
||||
"@databaseMigrationTitle": {},
|
||||
"databaseMigrationBody": "Agarda, podería levarnos un pouco.",
|
||||
"@databaseMigrationBody": {}
|
||||
"@databaseMigrationBody": {},
|
||||
"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": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"initAppError": "Houbo un fallo ao iniciar a app",
|
||||
"@initAppError": {},
|
||||
"sessionLostBody": "Estragouse a túa sesión. Por favor informa deste fallo ás desenvolvedoras en {url}. A mensaxe do erro é: {error}",
|
||||
"@sessionLostBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"restoreSessionBody": "A app vai intentar restablecer a sesión desde a copia de apoio. Por favor informa deste erro ás desenvolvedoras en {url}. A mensaxe do erro é: {error}",
|
||||
"@restoreSessionBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"youInvitedToBy": "📩 Convidáronte cunha ligazón a:\n{alias}",
|
||||
"@youInvitedToBy": {
|
||||
"placeholders": {
|
||||
"alias": {}
|
||||
}
|
||||
},
|
||||
"transparent": "Transparente",
|
||||
"@transparent": {},
|
||||
"sendReadReceipts": "Enviar confirmación de lectura",
|
||||
"@sendReadReceipts": {},
|
||||
"sendReadReceiptsDescription": "Outras participantes na conversa poden ver cando liches unha mensaxe.",
|
||||
"@sendReadReceiptsDescription": {},
|
||||
"formattedMessages": "Mensaxes con formato",
|
||||
"@formattedMessages": {},
|
||||
"verifyOtherDevice": "🔐 Verificar outro dispositivo",
|
||||
"@verifyOtherDevice": {},
|
||||
"verifyOtherUser": "🔐 Verificar outra usuaria",
|
||||
"@verifyOtherUser": {},
|
||||
"verifyOtherDeviceDescription": "Ao verificar outro dispositivo estás compartindo as chaves, aumentando a túa seguridade 💪. Ao iniciar a verificación aparecerá unha ventá emerxente nos dous dispositivos. Nesa ventá verás varios emojis ou números que tes que comparar entre eles. O mellor xeito de facelo é ter os dous dispositivos contigo cando inicias o proceso de verificación. 🤳",
|
||||
"@verifyOtherDeviceDescription": {},
|
||||
"canceledKeyVerification": "{sender} desbotou a verificación da chave",
|
||||
"@canceledKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"isReadyForKeyVerification": "{sender} xa pode verificar a chave",
|
||||
"@isReadyForKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"forwardMessageTo": "Reenviar a mensaxe a {roomName}?",
|
||||
"@forwardMessageTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"roomName": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotificationsDescription": "As outras participantes da conversa poden ver cando estás a escribir unha mensaxe.",
|
||||
"@sendTypingNotificationsDescription": {},
|
||||
"formattedMessagesDescription": "Mostrar texto enriquecido nas mensaxes como letra grosa usando markdown.",
|
||||
"@formattedMessagesDescription": {},
|
||||
"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 ventá 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. 👭",
|
||||
"@verifyOtherUserDescription": {},
|
||||
"requestedKeyVerification": "{sender} solicitou verificar a chave",
|
||||
"@requestedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"acceptedKeyVerification": "{sender} aceptou a verificación da chave",
|
||||
"@acceptedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"completedKeyVerification": "{sender} completou a verificación da chave",
|
||||
"@completedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"startedKeyVerification": "{sender} comezou coa verificación da chave",
|
||||
"@startedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"presenceStyle": "Presenza:",
|
||||
"@presenceStyle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"hidePresences": "Agochar Lista de estados?",
|
||||
"@hidePresences": {},
|
||||
"presencesToggle": "Mostra mensaxes de estado de outras usuarias",
|
||||
"@presencesToggle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"incomingMessages": "Mensaxes recibidas",
|
||||
"@incomingMessages": {},
|
||||
"stickers": "Adhesivos",
|
||||
"@stickers": {},
|
||||
"discover": "Descubrir",
|
||||
"@discover": {},
|
||||
"commandHint_ignore": "Ignorar o ID matrix indicado",
|
||||
"@commandHint_ignore": {},
|
||||
"commandHint_unignore": "Non ignorar o ID matrix indicado",
|
||||
"@commandHint_unignore": {},
|
||||
"unreadChatsInApp": "{appname}: {unread} chats sen ler",
|
||||
"@unreadChatsInApp": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"appname": {},
|
||||
"unread": {}
|
||||
}
|
||||
},
|
||||
"noDatabaseEncryption": "Nesta plataforma non temos soporte para cifrar a base de datos",
|
||||
"@noDatabaseEncryption": {},
|
||||
"accessAndVisibility": "Acceso e Visibilidade",
|
||||
"@accessAndVisibility": {},
|
||||
"accessAndVisibilityDescription": "Quen pode unirse a este chat de que xeito pode ser atopado.",
|
||||
"@accessAndVisibilityDescription": {},
|
||||
"customEmojisAndStickers": "Emojis personais e adhesivos",
|
||||
"@customEmojisAndStickers": {},
|
||||
"calls": "Chamadas",
|
||||
"@calls": {},
|
||||
"hideRedactedMessages": "Agochar mensaxes editadas",
|
||||
"@hideRedactedMessages": {},
|
||||
"hideRedactedMessagesBody": "Se alguén corrixe unha mensaxe entón esta xa non será visible no chat.",
|
||||
"@hideRedactedMessagesBody": {},
|
||||
"hideInvalidOrUnknownMessageFormats": "Agochar formatos de mensaxe non válidos ou descoñecidos",
|
||||
"@hideInvalidOrUnknownMessageFormats": {},
|
||||
"hideMemberChangesInPublicChats": "Agochar cambios dos membros nos chats públicos",
|
||||
"@hideMemberChangesInPublicChats": {},
|
||||
"notifyMeFor": "Notificarme sobre",
|
||||
"@notifyMeFor": {},
|
||||
"hideMemberChangesInPublicChatsBody": "Non mostrar na cronoloxía se alguén se une ou deixa un chat público, para mellorar a lexibilidade.",
|
||||
"@hideMemberChangesInPublicChatsBody": {},
|
||||
"usersMustKnock": "As usuarias teñen que pedir entrar",
|
||||
"@usersMustKnock": {},
|
||||
"userWouldLikeToChangeTheChat": "{user} quere unirse ao chat.",
|
||||
"@userWouldLikeToChangeTheChat": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"knocking": "A solicitar",
|
||||
"@knocking": {},
|
||||
"chatCanBeDiscoveredViaSearchOnServer": "O chat pode ser atopado ao buscar en {server}",
|
||||
"@chatCanBeDiscoveredViaSearchOnServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server": {}
|
||||
}
|
||||
},
|
||||
"createNewAddress": "Crear novos enderezos",
|
||||
"@createNewAddress": {},
|
||||
"appLockDescription": "Bloquear a app cun código PIN cando non a uses",
|
||||
"@appLockDescription": {},
|
||||
"globalChatId": "ID Global do chat",
|
||||
"@globalChatId": {},
|
||||
"customEmojisAndStickersBody": "Engade ou comparte emojis personais e adhesivos que poden usarse nos chats.",
|
||||
"@customEmojisAndStickersBody": {},
|
||||
"overview": "Vista xeral",
|
||||
"@overview": {},
|
||||
"passwordRecoverySettings": "Axustes de recuperación do contrasinal",
|
||||
"@passwordRecoverySettings": {},
|
||||
"noPublicLinkHasBeenCreatedYet": "Aínda non se creou unha ligazón pública",
|
||||
"@noPublicLinkHasBeenCreatedYet": {},
|
||||
"knock": "Solicitar acceso",
|
||||
"@knock": {},
|
||||
"noOneCanJoin": "Ninguén pode unirse",
|
||||
"@noOneCanJoin": {},
|
||||
"thereAreCountUsersBlocked": "Agora mesmo hai {count} usuarias bloqueadas.",
|
||||
"@thereAreCountUsersBlocked": {
|
||||
"type": "text",
|
||||
"count": {}
|
||||
},
|
||||
"publicChatAddresses": "Enderezos públicos do chat",
|
||||
"@publicChatAddresses": {},
|
||||
"userRole": "Rol da usuaria",
|
||||
"@userRole": {},
|
||||
"minimumPowerLevel": "{level} é o nivel mínimo de responsabilidade.",
|
||||
"@minimumPowerLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"level": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
56
assets/l10n/intl_ia.arb
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"repeatPassword": "Repeter le contrasigno",
|
||||
"@repeatPassword": {},
|
||||
"notAnImage": "Non es un file de imagine.",
|
||||
"@notAnImage": {},
|
||||
"remove": "Remover",
|
||||
"@remove": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"importEmojis": "Importar emojis",
|
||||
"@importEmojis": {},
|
||||
"importFromZipFile": "Importar ab un file .zip",
|
||||
"@importFromZipFile": {},
|
||||
"importNow": "Importar ora",
|
||||
"@importNow": {},
|
||||
"exportEmotePack": "Exportar pacchetto de emotes como un .zip",
|
||||
"@exportEmotePack": {},
|
||||
"replace": "Reimplaciar",
|
||||
"@replace": {},
|
||||
"about": "A proposito de",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accept": "Acceptar",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "👍 {username} acceptava tu invitation",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"account": "Conto",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addEmail": "Adder email",
|
||||
"@addEmail": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"supposedMxid": "Isto deberea esser {mxid}",
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"@custom": {}
|
||||
}
|
||||
|
|
@ -2204,219 +2204,146 @@
|
|||
},
|
||||
"signInWithPassword": "パスワードでログイン",
|
||||
"@signInWithPassword": {},
|
||||
"hugContent": "",
|
||||
"@hugContent": {
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"jumpToLastReadMessage": "",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"allRooms": "",
|
||||
"@allRooms": {
|
||||
"@jumpToLastReadMessage": {},
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "",
|
||||
"@commandHint_cuddle": {},
|
||||
"dismiss": "",
|
||||
"@dismiss": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"indexedDbErrorLong": "",
|
||||
"@indexedDbErrorLong": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"supposedMxid": "",
|
||||
"@supposedMxid": {
|
||||
"@commandHint_cuddle": {},
|
||||
"@dismiss": {},
|
||||
"@reportErrorDescription": {},
|
||||
"@indexedDbErrorLong": {},
|
||||
"@setColorTheme": {},
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"widgetEtherpad": "",
|
||||
"@widgetEtherpad": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"separateChatTypes": "",
|
||||
"@separateChatTypes": {
|
||||
"@banUserDescription": {},
|
||||
"@widgetEtherpad": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@separateChatTypes": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"newSpaceDescription": "",
|
||||
"@newSpaceDescription": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"callingAccountDetails": "",
|
||||
"@callingAccountDetails": {},
|
||||
"noKeyForThisMessage": "",
|
||||
"@noKeyForThisMessage": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"chatPermissions": "",
|
||||
"@chatPermissions": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"saveKeyManuallyDescription": "",
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"importFromZipFile": "",
|
||||
"@importFromZipFile": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@tryAgain": {},
|
||||
"@unbanUserDescription": {},
|
||||
"@messagesStyle": {},
|
||||
"@newSpaceDescription": {},
|
||||
"@chatDescription": {},
|
||||
"@callingAccountDetails": {},
|
||||
"@noKeyForThisMessage": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@invalidServerName": {},
|
||||
"@chatPermissions": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"@setChatDescription": {},
|
||||
"@importFromZipFile": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"fileIsTooBigForServer": "",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"readUpToHere": "",
|
||||
"@readUpToHere": {},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"openInMaps": "",
|
||||
"@openInMaps": {
|
||||
"@fileIsTooBigForServer": {},
|
||||
"@readUpToHere": {},
|
||||
"@optionalRedactReason": {},
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@openInMaps": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"inviteContactToGroupQuestion": "",
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"fileHasBeenSavedAt": "",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"path": {}
|
||||
}
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"googlyEyesContent": "",
|
||||
"@googlyEyesContent": {
|
||||
"@redactMessageDescription": {},
|
||||
"@invalidInput": {},
|
||||
"@report": {},
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@addChatDescription": {},
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {},
|
||||
"commandHint_me": "",
|
||||
"@commandHint_me": {
|
||||
"@openLinkInBrowser": {},
|
||||
"@commandHint_me": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /me"
|
||||
},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"appearOnTop": "",
|
||||
"@appearOnTop": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"commandHint_kick": "",
|
||||
"@commandHint_kick": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@appearOnTop": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@commandHint_kick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /kick"
|
||||
},
|
||||
"commandHint_unban": "",
|
||||
"@commandHint_unban": {
|
||||
"@commandHint_unban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /unban"
|
||||
},
|
||||
"importEmojis": "",
|
||||
"@importEmojis": {},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"notAnImage": "",
|
||||
"@notAnImage": {},
|
||||
"chatDescriptionHasBeenChanged": "",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"commandHint_op": "",
|
||||
"@commandHint_op": {
|
||||
"@importEmojis": {},
|
||||
"@noChatDescriptionYet": {},
|
||||
"@learnMore": {},
|
||||
"@notAnImage": {},
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"@commandHint_op": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /op"
|
||||
},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"cuddleContent": "",
|
||||
"@cuddleContent": {
|
||||
"@roomUpgradeDescription": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@shareInviteLink": {},
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"createGroup": "",
|
||||
"@createGroup": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"importNow": "",
|
||||
"@importNow": {},
|
||||
"invite": "",
|
||||
"@invite": {}
|
||||
"@setTheme": {},
|
||||
"@replace": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@createGroup": {},
|
||||
"@kickUserDescription": {},
|
||||
"@importNow": {},
|
||||
"@invite": {}
|
||||
}
|
||||
744
assets/l10n/intl_ka.arb
Normal file
|
|
@ -0,0 +1,744 @@
|
|||
{
|
||||
"alias": "მეტსახელი",
|
||||
"@alias": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLockDescription": "პინკოდის გამოყენების გარეშე აპლიკაციის ბლოკირება",
|
||||
"@appLockDescription": {},
|
||||
"commandHint_hug": "მეგობრული ჩახუტვის გაგზავნა",
|
||||
"@commandHint_hug": {},
|
||||
"areYouSure": "დარწმუნებული ხართ?",
|
||||
"@areYouSure": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSureYouWantToLogout": "დარწმუნებული ხართ, რომ გამოსვლა გსურთ?",
|
||||
"@areYouSureYouWantToLogout": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"hugContent": "{senderName} მეგობრულად გეხუტება",
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"askSSSSSign": "სხვა მომხმარებლის დადასტურებლად, გთხოვთ, ჩაწეროთ თქვენი ან საიდუმლო ფრაზა, ან აღდგენის გასაღები.",
|
||||
"@askSSSSSign": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"autoplayImages": "ანიმირებული სტიკერებისა და ემოჯების ავტომატური ჩართვა",
|
||||
"@autoplayImages": {
|
||||
"type": "text",
|
||||
"placeholder": {}
|
||||
},
|
||||
"banFromChat": "ჩატიდან გაგდება და ბლოკირება",
|
||||
"@banFromChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"banned": "დაბლოკილია",
|
||||
"@banned": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"badServerLoginTypesException": "ამ სერვერს აქვს შესვლის მეთოდების მხარდაჭერა:\n{serverVersions}\nმაგრამ ამ აპლიკაციას აქვს მხარდაჭერა მხოლოდ:\n{supportedVersions}",
|
||||
"@badServerLoginTypesException": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"serverVersions": {},
|
||||
"supportedVersions": {}
|
||||
}
|
||||
},
|
||||
"sendOnEnter": "გაგზავნა enter-ის დაჭერისას",
|
||||
"@sendOnEnter": {},
|
||||
"bannedUser": "{username} დაბლოკა {targetName}",
|
||||
"@bannedUser": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"targetName": {}
|
||||
}
|
||||
},
|
||||
"blockDevice": "მოწყობილების ბლოკირება",
|
||||
"@blockDevice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blocked": "დაბლოკილია",
|
||||
"@blocked": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"botMessages": "ბოტის შეტყობინებები",
|
||||
"@botMessages": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "გაუქმება",
|
||||
"@cancel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheHistoryVisibilityTo": "{username} შეცვალა ისტორიის ხილვადობა: {rules}",
|
||||
"@changedTheHistoryVisibilityTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRules": "{username} გაწევრიანების წესები შეცვალა",
|
||||
"@changedTheJoinRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheProfileAvatar": "{username} შეცვალა პროფილის ფოტო",
|
||||
"@changedTheProfileAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"chat": "ჩატი",
|
||||
"@chat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeYourAvatar": "პროფილის ფოტოს შეცვლა",
|
||||
"@changeYourAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"yourChatBackupHasBeenSetUp": "თქვენი ჩატის სარეზერვო საშუალება კონფიგურირებული იქნა.",
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"channelCorruptedDecryptError": "დაშიფვრა დაზიანდა",
|
||||
"@channelCorruptedDecryptError": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackupDescription": "თქვენი ძველი შეტყობინებები დაცულია აღდგების გასაღებით. არ დაკარგოთ ის.",
|
||||
"@chatBackupDescription": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_discardsession": "სესიის გაუქმება",
|
||||
"@commandHint_discardsession": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /discardsession"
|
||||
},
|
||||
"commandHint_invite": "მოცემული მომხმარებლის მოწვევა ამ ოთახში",
|
||||
"@commandHint_invite": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /invite"
|
||||
},
|
||||
"commandHint_plain": "არაფორმატირებული ტექსტის გაგზავნა",
|
||||
"@commandHint_plain": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /plain"
|
||||
},
|
||||
"commandHint_send": "ტექსტის გაგზავნა",
|
||||
"@commandHint_send": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /send"
|
||||
},
|
||||
"commandMissing": "{command} არაა ბრძანება.",
|
||||
"@commandMissing": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"command": {}
|
||||
},
|
||||
"description": "State that {command} is not a valid /command."
|
||||
},
|
||||
"confirm": "დადასტურება",
|
||||
"@confirm": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connect": "დაკავშირება",
|
||||
"@connect": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"countParticipants": "{count} მონაწილე",
|
||||
"@countParticipants": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"createGroup": "ჯგუფის შექმნა",
|
||||
"@createGroup": {},
|
||||
"deactivateAccountWarning": "ეს გააუქმებს თქვენს ანგარიშს. ამის გაუქმება შეუძლებელია. დარწმუნებული ხართ?",
|
||||
"@deactivateAccountWarning": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"devices": "მოწყობილებები",
|
||||
"@devices": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"darkTheme": "ბნელი",
|
||||
"@darkTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatPermissions": "ჩატის უფლებები",
|
||||
"@chatPermissions": {},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"date": {},
|
||||
"timeOfDay": {}
|
||||
}
|
||||
},
|
||||
"editRoomAliases": "ოთახის მეტსახელების შეცვლა",
|
||||
"@editRoomAliases": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteExists": "ეს ემოცია უკვე არსებობს!",
|
||||
"@emoteExists": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteInvalid": "ემოციის არასწორი მოკლე კოდი!",
|
||||
"@emoteInvalid": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"importNow": "იმპორტი",
|
||||
"@importNow": {},
|
||||
"importEmojis": "ემოჯის იმპორტი",
|
||||
"@importEmojis": {},
|
||||
"importFromZipFile": "იმპორტი .zip ფაილიდან",
|
||||
"@importFromZipFile": {},
|
||||
"exportEmotePack": "ემოციების .zip ფაილში ექსპორტი",
|
||||
"@exportEmotePack": {},
|
||||
"replace": "ჩანაცვლება",
|
||||
"@replace": {},
|
||||
"accept": "თანხმობა",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "👍 {username} მიიღო მოწვევა",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"account": "ანგარიში",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addEmail": "ელ.ფოსტის დამატება",
|
||||
"@addEmail": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirmMatrixId": "გთხოვთ, დაადასტუროთ თქვენი Matrix ID ანგარიშის წაშლისათვის.",
|
||||
"@confirmMatrixId": {},
|
||||
"addChatDescription": "ჩატის აღწერილობის დამატება...",
|
||||
"@addChatDescription": {},
|
||||
"addToSpace": "სივრცეში დამატება",
|
||||
"@addToSpace": {},
|
||||
"admin": "ადმინი",
|
||||
"@admin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"all": "ყველა",
|
||||
"@all": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allChats": "ყველა ჩატი",
|
||||
"@allChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "ჩახუტების გაგზავნა",
|
||||
"@commandHint_cuddle": {},
|
||||
"answeredTheCall": "{senderName} უპასუხა ზარს",
|
||||
"@answeredTheCall": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"anyoneCanJoin": "ყველას შეუძლია გაწევრიანება",
|
||||
"@anyoneCanJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLock": "აპლიკაციის ბლოკირება",
|
||||
"@appLock": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archive": "არქივი",
|
||||
"@archive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_googly": "გამოშტერილი თვალების გაგზავნა",
|
||||
"@commandHint_googly": {},
|
||||
"googlyEyesContent": "{senderName} გამოშტერილ თვალებს გიგზავნის",
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"cuddleContent": "{senderName} გეხუტება",
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"areGuestsAllowedToJoin": "შეუძლიათ თუ არა სტუმარ მომხმარებლებს გაწევრიანება",
|
||||
"@areGuestsAllowedToJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askVerificationRequest": "მიიღებთ {username} დადასტურების მოთხოვნას?",
|
||||
"@askVerificationRequest": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "წერის შეტყობინების გაგზავნა",
|
||||
"@sendTypingNotifications": {},
|
||||
"cantOpenUri": "ვერ იხსნება ბმული {uri}",
|
||||
"@cantOpenUri": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"uri": {}
|
||||
}
|
||||
},
|
||||
"changeDeviceName": "მოწყობილების გადარქმევა",
|
||||
"@changeDeviceName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheChatAvatar": "{username} ჩატის ფოტო შეცვალა",
|
||||
"@changedTheChatAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatDescriptionTo": "{username} ჩატის ახალი აღწერილობა დააყენა: '{description}'",
|
||||
"@changedTheChatDescriptionTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"description": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatNameTo": "{username} ჩატი გადაარქვა: '{chatname}'",
|
||||
"@changedTheChatNameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"chatname": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatPermissions": "{username} ჩატის უფლებები შეცვალა",
|
||||
"@changedTheChatPermissions": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRules": "{username} შეცვალა სტუმრების წვდომის წესები",
|
||||
"@changedTheGuestAccessRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRulesTo": "{username} შეცვალა სტუმრების წვდომის წესები: {rules}",
|
||||
"@changedTheGuestAccessRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibility": "{username} შეცვალა ისტორიის ხილვადობა",
|
||||
"@changedTheHistoryVisibility": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRulesTo": "{username} გაწევრიანების წესები შეცვალა: {joinRules}",
|
||||
"@changedTheJoinRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"joinRules": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomAliases": "{username} ოთახის მეტსახელები შეცვალა",
|
||||
"@changedTheRoomAliases": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomInvitationLink": "{username} მოწვევის ბმული შეცვალა",
|
||||
"@changedTheRoomInvitationLink": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changePassword": "პაროლის შეცვლა",
|
||||
"@changePassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheHomeserver": "სახლის სერვერის შეცვლა",
|
||||
"@changeTheHomeserver": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheme": "სტილის შეცვლა",
|
||||
"@changeTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "ჯგუფის გადარქმევა",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackup": "ჩატის სარეზერვო საშუალება",
|
||||
"@chatBackup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "ჩატის დეტალები",
|
||||
"@chatDetails": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatHasBeenAddedToThisSpace": "ჩატი დაემატა ამ სივრცეს",
|
||||
"@chatHasBeenAddedToThisSpace": {},
|
||||
"chats": "ჩატები",
|
||||
"@chats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "ძლიერი პაროლი აარჩიეთ",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"clearArchive": "არქივის გაწმენდა",
|
||||
"@clearArchive": {},
|
||||
"close": "დახურვა",
|
||||
"@close": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_markasgroup": "აღნიშვნა, როგორც ჯგუფის",
|
||||
"@commandHint_markasgroup": {},
|
||||
"commandHint_ban": "მოცემული მომხმარებლის ბლოკირება ამ ოთახში",
|
||||
"@commandHint_ban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /ban"
|
||||
},
|
||||
"commandHint_clearcache": "ქეშის გაწმენდა",
|
||||
"@commandHint_clearcache": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /clearcache"
|
||||
},
|
||||
"commandHint_join": "მოცემულ ოთახში გაწევრიანება",
|
||||
"@commandHint_join": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /join"
|
||||
},
|
||||
"commandHint_kick": "მოცემული მომხმარებლის წაშლა ამ ოთახიდან",
|
||||
"@commandHint_kick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /kick"
|
||||
},
|
||||
"commandHint_leave": "ამ ოთახიდან გასვლა",
|
||||
"@commandHint_leave": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /leave"
|
||||
},
|
||||
"commandHint_me": "აღწერეთ თქვენი თავი",
|
||||
"@commandHint_me": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /me"
|
||||
},
|
||||
"commandHint_unban": "ამ ოთახში მომხმარებლისგან ბლოკის მოხსნა",
|
||||
"@commandHint_unban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /unban"
|
||||
},
|
||||
"commandInvalid": "არასწორი ბრძანება",
|
||||
"@commandInvalid": {
|
||||
"type": "text"
|
||||
},
|
||||
"compareEmojiMatch": "გთხოვთ, შეადაროთ ეს ემოჯი",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "გთხოვთ, შეადაროთ ეს რიცხვები",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"configureChat": "ჩატის კონფიგურაცია",
|
||||
"@configureChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "კონტაქტი მოწვეული იქნა ჯგუფში",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"containsUserName": "შეიცავს სახელს",
|
||||
"@containsUserName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copiedToClipboard": "კოპირებულია ბუფერში",
|
||||
"@copiedToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copy": "კოპირება",
|
||||
"@copy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copyToClipboard": "კოპირება ბუფერში",
|
||||
"@copyToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotDecryptMessage": "შეტყობინების გაშიფვრის შეცდომა: {error}",
|
||||
"@couldNotDecryptMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"create": "შექმნა",
|
||||
"@create": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createdTheChat": "💬 {username} შექმნა ჩატი",
|
||||
"@createdTheChat": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"createNewSpace": "ახალი სივრცე",
|
||||
"@createNewSpace": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"currentlyActive": "ახლა აქტიურია",
|
||||
"@currentlyActive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateWithoutYear": "{day}-{month}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"dateWithYear": "{day}-{month}-{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"year": {},
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"delete": "წაშლა",
|
||||
"@delete": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteAccount": "ანგარიშის წაშლა",
|
||||
"@deleteAccount": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteMessage": "შეტყობინების წაშლა",
|
||||
"@deleteMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"device": "მოწყობილება",
|
||||
"@device": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deviceId": "მოწყობილების ID",
|
||||
"@deviceId": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"directChats": "პირდაპირი ჩატები",
|
||||
"@directChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allRooms": "ყველა ჯგუფური ჩატები",
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"downloadFile": "ფაილის ჩატვირთვა",
|
||||
"@downloadFile": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"edit": "რედაქტირება",
|
||||
"@edit": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editBlockedServers": "ბლოკირებული სერვერების რედაქტირება",
|
||||
"@editBlockedServers": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editRoomAvatar": "ოთახის ფოტოს შეცვლა",
|
||||
"@editRoomAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteSettings": "ემოციების პარამეტრები",
|
||||
"@emoteSettings": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"globalChatId": "გლობალური ჩატის ID",
|
||||
"@globalChatId": {},
|
||||
"repeatPassword": "გაიმეორეთ პაროლი",
|
||||
"@repeatPassword": {},
|
||||
"notAnImage": "ფაილი არაა სურათი.",
|
||||
"@notAnImage": {},
|
||||
"remove": "წაშლა",
|
||||
"@remove": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"activatedEndToEndEncryption": "🔐 {username} გააქტიურა end to end დაშიფვრა",
|
||||
"@activatedEndToEndEncryption": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"supposedMxid": "ეს უნდა იყოს {mxid}",
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"about": "შესახებ",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheDisplaynameTo": "{username} შეცვალა ნაჩვენები სახელი: '{displayname}'",
|
||||
"@changedTheDisplaynameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"displayname": {}
|
||||
}
|
||||
},
|
||||
"commandHint_create": "ცარიელი ჯგუფური ჩატის შექმნა\nგამოიყენეთ --no-encryption გაშიფვრის გასათიშად",
|
||||
"@commandHint_create": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /create"
|
||||
},
|
||||
"commandHint_dm": "პირდაპირი ჩატის დაწყება\nგამოიყენეთ --no-encryption გაშიფვრის გასათიშად",
|
||||
"@commandHint_dm": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_html": "HTML ფორმატირებული ტექსტის გაგზავნა",
|
||||
"@commandHint_html": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /html"
|
||||
},
|
||||
"commandHint_myroomavatar": "თქვენი ფოტოს დაყენება ამ ოთახისათვის(mxc-uri-ს დახმარებით)",
|
||||
"@commandHint_myroomavatar": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomavatar"
|
||||
},
|
||||
"commandHint_myroomnick": "ამ ოთახისათვის ნაჩვენები სახელის დაყენება",
|
||||
"@commandHint_myroomnick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomnick"
|
||||
},
|
||||
"commandHint_op": "მოცემული მომხმარებლისათვის უფლებების დონის დაყენება (ჩვეულებრივ: 50)",
|
||||
"@commandHint_op": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /op"
|
||||
},
|
||||
"commandHint_react": "რეაქციის სახით პასუხის გაგზავნა",
|
||||
"@commandHint_react": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /react"
|
||||
},
|
||||
"containsDisplayName": "ნაჩვენებ სახელს შეიცავს",
|
||||
"@containsDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contentHasBeenReported": "ეს კონტენტი გაგზავნილ იქნა სერვერის ადმინისტრატორებთან",
|
||||
"@contentHasBeenReported": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"defaultPermissionLevel": "ნაგულისხმევი უფლების დონე",
|
||||
"@defaultPermissionLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"displaynameHasBeenChanged": "ნაჩვენები სახელი შეიცვალა",
|
||||
"@displaynameHasBeenChanged": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editDisplayname": "ნაჩვენები სახელის შეცვლა",
|
||||
"@editDisplayname": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
|
@ -2215,206 +2215,133 @@
|
|||
},
|
||||
"hideUnimportantStateEvents": "Slėpti nesvarbius būsenos įvykius",
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"hugContent": "",
|
||||
"@hugContent": {
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"jumpToLastReadMessage": "",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"allRooms": "",
|
||||
"@allRooms": {
|
||||
"@jumpToLastReadMessage": {},
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "",
|
||||
"@commandHint_cuddle": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"startFirstChat": "",
|
||||
"@startFirstChat": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"newSpaceDescription": "",
|
||||
"@newSpaceDescription": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"encryptThisChat": "",
|
||||
"@encryptThisChat": {},
|
||||
"reopenChat": "",
|
||||
"@reopenChat": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"chatPermissions": "",
|
||||
"@chatPermissions": {},
|
||||
"signInWithPassword": "",
|
||||
"@signInWithPassword": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"importFromZipFile": "",
|
||||
"@importFromZipFile": {},
|
||||
"noOtherDevicesFound": "",
|
||||
"@noOtherDevicesFound": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@commandHint_cuddle": {},
|
||||
"@reportErrorDescription": {},
|
||||
"@startFirstChat": {},
|
||||
"@setColorTheme": {},
|
||||
"@banUserDescription": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@tryAgain": {},
|
||||
"@unbanUserDescription": {},
|
||||
"@messagesStyle": {},
|
||||
"@newSpaceDescription": {},
|
||||
"@chatDescription": {},
|
||||
"@encryptThisChat": {},
|
||||
"@reopenChat": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@invalidServerName": {},
|
||||
"@chatPermissions": {},
|
||||
"@signInWithPassword": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@setChatDescription": {},
|
||||
"@importFromZipFile": {},
|
||||
"@noOtherDevicesFound": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"fileIsTooBigForServer": "",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"readUpToHere": "",
|
||||
"@readUpToHere": {},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"inviteContactToGroupQuestion": "",
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@fileIsTooBigForServer": {},
|
||||
"@readUpToHere": {},
|
||||
"@optionalRedactReason": {},
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"fileHasBeenSavedAt": "",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"path": {}
|
||||
}
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"doNotShowAgain": "",
|
||||
"@doNotShowAgain": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"googlyEyesContent": "",
|
||||
"@googlyEyesContent": {
|
||||
"@redactMessageDescription": {},
|
||||
"@invalidInput": {},
|
||||
"@doNotShowAgain": {},
|
||||
"@report": {},
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@addChatDescription": {},
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {},
|
||||
"disableEncryptionWarning": "",
|
||||
"@disableEncryptionWarning": {},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@openLinkInBrowser": {},
|
||||
"@disableEncryptionWarning": {},
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"importEmojis": "",
|
||||
"@importEmojis": {},
|
||||
"wasDirectChatDisplayName": "",
|
||||
"@wasDirectChatDisplayName": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@importEmojis": {},
|
||||
"@wasDirectChatDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"oldDisplayName": {}
|
||||
}
|
||||
},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"notAnImage": "",
|
||||
"@notAnImage": {},
|
||||
"chatDescriptionHasBeenChanged": "",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"sorryThatsNotPossible": "",
|
||||
"@sorryThatsNotPossible": {},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"cuddleContent": "",
|
||||
"@cuddleContent": {
|
||||
"@noChatDescriptionYet": {},
|
||||
"@learnMore": {},
|
||||
"@notAnImage": {},
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@sorryThatsNotPossible": {},
|
||||
"@shareInviteLink": {},
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"deviceKeys": "",
|
||||
"@deviceKeys": {},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@deviceKeys": {},
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"commandHint_hug": "",
|
||||
"@commandHint_hug": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"commandHint_googly": "",
|
||||
"@commandHint_googly": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"createGroup": "",
|
||||
"@createGroup": {},
|
||||
"noBackupWarning": "",
|
||||
"@noBackupWarning": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"importNow": "",
|
||||
"@importNow": {},
|
||||
"invite": "",
|
||||
"@invite": {}
|
||||
"@setTheme": {},
|
||||
"@commandHint_hug": {},
|
||||
"@replace": {},
|
||||
"@commandHint_googly": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@createGroup": {},
|
||||
"@noBackupWarning": {},
|
||||
"@kickUserDescription": {},
|
||||
"@importNow": {},
|
||||
"@invite": {}
|
||||
}
|
||||
|
|
@ -2351,7 +2351,7 @@
|
|||
"@report": {},
|
||||
"addChatDescription": "Inserir descrição da conversa...",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "{user} bateu na porta",
|
||||
"hasKnocked": "🚪 {user} bateu na porta",
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
|
|
@ -2484,5 +2484,209 @@
|
|||
"searchChatsRooms": "Buscar por #conversas, @usuários...",
|
||||
"@searchChatsRooms": {},
|
||||
"databaseMigrationBody": "Por favor, espere. Isto pode demorar um pouco.",
|
||||
"@databaseMigrationBody": {}
|
||||
"@databaseMigrationBody": {},
|
||||
"youInvitedToBy": "Você foi convidado através do link para:\n{alias}",
|
||||
"@youInvitedToBy": {
|
||||
"placeholders": {
|
||||
"alias": {}
|
||||
}
|
||||
},
|
||||
"forwardMessageTo": "Encaminhar mensagem para {roomName}?",
|
||||
"@forwardMessageTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"roomName": {}
|
||||
}
|
||||
},
|
||||
"formattedMessagesDescription": "Mostrar mensagens ricas com conteúdos tipo negrito usando markdown.",
|
||||
"@formattedMessagesDescription": {},
|
||||
"verifyOtherUser": "🔐 Verificar outro usuário",
|
||||
"@verifyOtherUser": {},
|
||||
"verifyOtherDevice": "🔐 Verificar outro aparelho",
|
||||
"@verifyOtherDevice": {},
|
||||
"acceptedKeyVerification": "{sender} aceitou sua chave de verificação",
|
||||
"@acceptedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"startedKeyVerification": "{sender} iniciou a chave de verificação",
|
||||
"@startedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"transparent": "Transparente",
|
||||
"@transparent": {},
|
||||
"databaseBuildErrorBody": "Não foi possível construir o banco de dados SQLite. O aplicativo tentará utilizar o banco de dados legado por enquanto. Por favor, reporte este erro aos desenvolvedores em {url}. A mensagem de erro é: {error}",
|
||||
"@databaseBuildErrorBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"initAppError": "Ocorreu um erro enquanto o aplicativo era iniciado",
|
||||
"@initAppError": {},
|
||||
"restoreSessionBody": "O aplicativo tentará agora restaurar sua sessão a partir do backup. Por favor, reporte este ao desenvolvedor em {url}. A mensagem de erro é: {error}",
|
||||
"@restoreSessionBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceipts": "Enviar recibos de leitura",
|
||||
"@sendReadReceipts": {},
|
||||
"sendTypingNotificationsDescription": "Outros participantes neste chat podem ver quando você está digitando uma nova mensagem.",
|
||||
"@sendTypingNotificationsDescription": {},
|
||||
"formattedMessages": "Mensagens formatadas",
|
||||
"@formattedMessages": {},
|
||||
"presenceStyle": "Presença:",
|
||||
"@presenceStyle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"presencesToggle": "Mostrar o status das mensagens de outros usuários",
|
||||
"@presencesToggle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_ignore": "Ignorar o seguinte ID Matrix",
|
||||
"@commandHint_ignore": {},
|
||||
"commandHint_unignore": "Designorar o seguinte ID Matrix",
|
||||
"@commandHint_unignore": {},
|
||||
"hidePresences": "Esconder lista de status?",
|
||||
"@hidePresences": {},
|
||||
"sessionLostBody": "Sua sessão foi desconectada. Por favor, reporte este ao desenvolvedor em {url}. A mensagem de erro é: {error}",
|
||||
"@sessionLostBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceiptsDescription": "Outros participantes neste chat 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\nQuando iniciar uma verificação, você e o outro usuário receberão um popup no aplicativo. 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 é encontrar pessoalmente ou através de um vídeochamada. 👭",
|
||||
"@verifyOtherUserDescription": {},
|
||||
"requestedKeyVerification": "{sender} enviou uma chave de verificação",
|
||||
"@requestedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"verifyOtherDeviceDescription": "Quando você verifica outro aparelho, estes aparelhos poderão trocar chaves, aumentando sua segurança. 💪\n\nQuando iniciar a verificação, um popup aparecerá no aplicativo 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.\n\nÉ melhor fazer esse procedimento com ambos os aparelhos em mãos antes de começar a verificação. 🤳",
|
||||
"@verifyOtherDeviceDescription": {},
|
||||
"canceledKeyVerification": "{sender} cancelou sua chave de verificação",
|
||||
"@canceledKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"isReadyForKeyVerification": "{sender} está pronto para a chave de verificação",
|
||||
"@isReadyForKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"completedKeyVerification": "{sender} completou a chave de verificação",
|
||||
"@completedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"stickers": "Stickers",
|
||||
"@stickers": {},
|
||||
"discover": "Descubra",
|
||||
"@discover": {},
|
||||
"incomingMessages": "Mensagens recebidas",
|
||||
"@incomingMessages": {},
|
||||
"unreadChatsInApp": "{appname}: {unread} mensagens não lidas",
|
||||
"@unreadChatsInApp": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"appname": {},
|
||||
"unread": {}
|
||||
}
|
||||
},
|
||||
"appLockDescription": "Bloquear o app com um código PIN quando não estiver usando",
|
||||
"@appLockDescription": {},
|
||||
"accessAndVisibilityDescription": "Quem é permitido entrar nesse chat e como pode ser descoberto.",
|
||||
"@accessAndVisibilityDescription": {},
|
||||
"calls": "Chamadas",
|
||||
"@calls": {},
|
||||
"customEmojisAndStickers": "Emojis e stickers customizados",
|
||||
"@customEmojisAndStickers": {},
|
||||
"customEmojisAndStickersBody": "Adicionar ou compartilhar emojis ou stickers customizados que podem ser usados em qualquer chat.",
|
||||
"@customEmojisAndStickersBody": {},
|
||||
"hideRedactedMessages": "Esconder mensagens excluídas",
|
||||
"@hideRedactedMessages": {},
|
||||
"hideRedactedMessagesBody": "Se alguém excluir uma mensagem, esta mensagem não será mais visível no chat.",
|
||||
"@hideRedactedMessagesBody": {},
|
||||
"hideInvalidOrUnknownMessageFormats": "Esconder formatos de mensagem inválidos ou desconhecidos",
|
||||
"@hideInvalidOrUnknownMessageFormats": {},
|
||||
"hideMemberChangesInPublicChats": "Esconder mudanças de membro em chats públicos",
|
||||
"@hideMemberChangesInPublicChats": {},
|
||||
"hideMemberChangesInPublicChatsBody": "Não mostre se alguém entrou ou saiu no chat 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": "O chat pode ser descoberto pela pesquisa em {server}",
|
||||
"@chatCanBeDiscoveredViaSearchOnServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server": {}
|
||||
}
|
||||
},
|
||||
"publicChatAddresses": "Endereços de chat públicos",
|
||||
"@publicChatAddresses": {},
|
||||
"thereAreCountUsersBlocked": "Nesse momento, há {count} usuários bloqueados.",
|
||||
"@thereAreCountUsersBlocked": {
|
||||
"type": "text",
|
||||
"count": {}
|
||||
},
|
||||
"globalChatId": "ID de chat global",
|
||||
"@globalChatId": {},
|
||||
"accessAndVisibility": "Acesso e visibilidade",
|
||||
"@accessAndVisibility": {},
|
||||
"passwordRecoverySettings": "Configurações de recuperação de senha",
|
||||
"@passwordRecoverySettings": {},
|
||||
"userWouldLikeToChangeTheChat": "{user} gostaria de entrar no chat.",
|
||||
"@userWouldLikeToChangeTheChat": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"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": "text",
|
||||
"placeholders": {
|
||||
"level": {}
|
||||
}
|
||||
},
|
||||
"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": {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2300,122 +2300,77 @@
|
|||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"signInWithPassword": "Conectați-vă cu parolă",
|
||||
"@signInWithPassword": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"chatPermissions": "",
|
||||
"@chatPermissions": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"importFromZipFile": "",
|
||||
"@importFromZipFile": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@setColorTheme": {},
|
||||
"@banUserDescription": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@tryAgain": {},
|
||||
"@unbanUserDescription": {},
|
||||
"@messagesStyle": {},
|
||||
"@chatDescription": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@invalidServerName": {},
|
||||
"@chatPermissions": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@setChatDescription": {},
|
||||
"@importFromZipFile": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"inviteContactToGroupQuestion": "",
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@optionalRedactReason": {},
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@redactMessageDescription": {},
|
||||
"@invalidInput": {},
|
||||
"@addChatDescription": {},
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"importEmojis": "",
|
||||
"@importEmojis": {},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"notAnImage": "",
|
||||
"@notAnImage": {},
|
||||
"chatDescriptionHasBeenChanged": "",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@importEmojis": {},
|
||||
"@noChatDescriptionYet": {},
|
||||
"@learnMore": {},
|
||||
"@notAnImage": {},
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@profileNotFound": {},
|
||||
"@shareInviteLink": {},
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"createGroup": "",
|
||||
"@createGroup": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"importNow": "",
|
||||
"@importNow": {},
|
||||
"invite": "",
|
||||
"@invite": {}
|
||||
"@setTheme": {},
|
||||
"@replace": {},
|
||||
"@createGroup": {},
|
||||
"@kickUserDescription": {},
|
||||
"@importNow": {},
|
||||
"@invite": {}
|
||||
}
|
||||
|
|
@ -639,7 +639,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteInvalid": "Недопустимый краткий код эмодзи!",
|
||||
"emoteInvalid": "Недопустимый код эмодзи!",
|
||||
"@emoteInvalid": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
|
@ -654,7 +654,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteShortcode": "Краткий код для эмодзи",
|
||||
"emoteShortcode": "Код эмодзи",
|
||||
"@emoteShortcode": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
|
@ -2260,7 +2260,7 @@
|
|||
"@disableEncryptionWarning": {},
|
||||
"deviceKeys": "Ключи устройств:",
|
||||
"@deviceKeys": {},
|
||||
"noBackupWarning": "Внимание! Без резервных копий, Вы потеряете доступ к своим зашифрованным сообщениям. Крайне рекомендуется включить резервные копии перед выходом.",
|
||||
"noBackupWarning": "Внимание! Без резервного копиирования, Вы потеряете доступ к своим зашифрованным сообщениям. Крайне рекомендуется включить резервное копирование перед выходом.",
|
||||
"@noBackupWarning": {},
|
||||
"noOtherDevicesFound": "Другие устройства не найдены",
|
||||
"@noOtherDevicesFound": {},
|
||||
|
|
@ -2275,7 +2275,7 @@
|
|||
},
|
||||
"startFirstChat": "Начните Ваш первый чат",
|
||||
"@startFirstChat": {},
|
||||
"jumpToLastReadMessage": "Перейти к последнему прочитанному сообщению",
|
||||
"jumpToLastReadMessage": "Последнее прочитанное сообщение",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"wasDirectChatDisplayName": "Пустой чат (был {oldDisplayName})",
|
||||
"@wasDirectChatDisplayName": {
|
||||
|
|
@ -2405,7 +2405,7 @@
|
|||
"@makeAdminDescription": {},
|
||||
"archiveRoomDescription": "Чат переместится в архив. Другим пользователям будет видно, что вы вышли из чата.",
|
||||
"@archiveRoomDescription": {},
|
||||
"hasKnocked": "{user} постучался",
|
||||
"hasKnocked": "🚪 {user} постучался",
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
|
|
@ -2423,7 +2423,7 @@
|
|||
"@blockListDescription": {},
|
||||
"blockedUsers": "Заглушённые пользователи",
|
||||
"@blockedUsers": {},
|
||||
"block": "заглушить",
|
||||
"block": "Заглушить",
|
||||
"@block": {},
|
||||
"blockUsername": "Игнорировать имя пользователя",
|
||||
"@blockUsername": {},
|
||||
|
|
@ -2477,5 +2477,217 @@
|
|||
"joinSpace": "Присоединиться к пространству",
|
||||
"@joinSpace": {},
|
||||
"searchForUsers": "Поиск @пользователей...",
|
||||
"@searchForUsers": {}
|
||||
"@searchForUsers": {},
|
||||
"thisDevice": "Данное устройство:",
|
||||
"@thisDevice": {},
|
||||
"decline": "Отклонить",
|
||||
"@decline": {},
|
||||
"databaseBuildErrorBody": "Невозможно собрать базу данных SQlite. Приложение пытается использовать старую базу данных. Пожалуйста, сообщите об этой ошибке разработчикам по адресу {url}. Сообщение об ошибке: {error}",
|
||||
"@databaseBuildErrorBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"initAppError": "Произошла ошибка при запуске приложения",
|
||||
"@initAppError": {},
|
||||
"sessionLostBody": "Ваш сеанс утерян. Пожалуйста, сообщите об этой ошибке разработчикам по адресу {url}. Сообщение об ошибке: {error}",
|
||||
"@sessionLostBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"restoreSessionBody": "Приложение пытается восстановить сеанс из резервной копии. Пожалуйста, сообщите об этой ошибке разработчикам по адресу {url}. Сообщение об ошибке: {error}",
|
||||
"@restoreSessionBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"subspace": "Субпространство",
|
||||
"@subspace": {},
|
||||
"addChatOrSubSpace": "Добавить чат или субпространство",
|
||||
"@addChatOrSubSpace": {},
|
||||
"youInvitedToBy": "📩 Вы были приглашены по ссылке на:\n{alias}",
|
||||
"@youInvitedToBy": {
|
||||
"placeholders": {
|
||||
"alias": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceipts": "Отправка квитанций о прочтении",
|
||||
"@sendReadReceipts": {},
|
||||
"verifyOtherUser": "🔐 Подтвердить другого пользователя",
|
||||
"@verifyOtherUser": {},
|
||||
"verifyOtherDevice": "🔐 Подтвердить другое устройство",
|
||||
"@verifyOtherDevice": {},
|
||||
"forwardMessageTo": "Переслать сообщение в {roomName}?",
|
||||
"@forwardMessageTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"roomName": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceiptsDescription": "Другие участники чата могут видеть, когда вы прочитали сообщение.",
|
||||
"@sendReadReceiptsDescription": {},
|
||||
"transparent": "Прозрачный",
|
||||
"@transparent": {},
|
||||
"verifyOtherUserDescription": "Если вы подтвердите другого пользователя, то вы можете быть уверены зная, кому вы действительно пишете. 💪\n\nКогда вы начинаете подтверждение, вы и другой пользователь увидите всплывающее окно в приложении. Там вы увидите ряд чисел или эмодзи, которые вы должны сравнить друг с другом.\n\nЛучший способ сделать это - встретиться в реальной жизни или по видео звонку. 👭",
|
||||
"@verifyOtherUserDescription": {},
|
||||
"verifyOtherDeviceDescription": "При подтверждении другого устройства эти устройства могут обмениваться ключами, повышая общую безопасность. 💪 При запуске подтверждения в приложении на обоих устройствах появится всплывающее окно. Там вы увидите ряд чисел или эмодзи, которые вы должны сравнить друг с другом. Лучше иметь оба устройства под рукой перед началом проверки. 🤳",
|
||||
"@verifyOtherDeviceDescription": {},
|
||||
"formattedMessagesDescription": "Отображать содержимое расширенных сообщений, такой как жирный текст, с помощью Markdown.",
|
||||
"@formattedMessagesDescription": {},
|
||||
"acceptedKeyVerification": "{sender} принял(а) подтверждение ключей",
|
||||
"@acceptedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"canceledKeyVerification": "{sender} отклонил(а) подтверждение ключей",
|
||||
"@canceledKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotificationsDescription": "Другие участники чата могут видеть, когда вы набираете новое сообщение.",
|
||||
"@sendTypingNotificationsDescription": {},
|
||||
"formattedMessages": "Форматированные сообщения",
|
||||
"@formattedMessages": {},
|
||||
"startedKeyVerification": "{sender} начал(а) подтверждение ключей",
|
||||
"@startedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"isReadyForKeyVerification": "{sender} готов(а) к подтверждению ключей",
|
||||
"@isReadyForKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"requestedKeyVerification": "{sender} запросил(а) подтверждение ключей",
|
||||
"@requestedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"completedKeyVerification": "{sender} завершил(а) подтверждение ключей",
|
||||
"@completedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"incomingMessages": "Входящие сообщения",
|
||||
"@incomingMessages": {},
|
||||
"presencesToggle": "Показывать сообщения в статусах других пользователей",
|
||||
"@presencesToggle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"presenceStyle": "Представление:",
|
||||
"@presenceStyle": {
|
||||
"type": "text",
|
||||
"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": {}
|
||||
}
|
||||
},
|
||||
"knock": "Постучаться",
|
||||
"@knock": {},
|
||||
"usersMustKnock": "Пользователи должны постучаться",
|
||||
"@usersMustKnock": {},
|
||||
"noOneCanJoin": "Никто не может присоединиться",
|
||||
"@noOneCanJoin": {},
|
||||
"noPublicLinkHasBeenCreatedYet": "Публичная ссылка еще не была создана",
|
||||
"@noPublicLinkHasBeenCreatedYet": {},
|
||||
"chatCanBeDiscoveredViaSearchOnServer": "Чат может быть обнаружен через поиск в {server}",
|
||||
"@chatCanBeDiscoveredViaSearchOnServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server": {}
|
||||
}
|
||||
},
|
||||
"createNewAddress": "Создать новый адрес",
|
||||
"@createNewAddress": {},
|
||||
"minimumPowerLevel": "{level} является минимальным уровнем.",
|
||||
"@minimumPowerLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"level": {}
|
||||
}
|
||||
},
|
||||
"commandHint_ignore": "Игнорировать данный matrix ID",
|
||||
"@commandHint_ignore": {},
|
||||
"commandHint_unignore": "Не игнорировать данный matrix ID",
|
||||
"@commandHint_unignore": {},
|
||||
"unreadChatsInApp": "{appname}: {unread} непрочитанные чаты",
|
||||
"@unreadChatsInApp": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"appname": {},
|
||||
"unread": {}
|
||||
}
|
||||
},
|
||||
"thereAreCountUsersBlocked": "Сейчас заблокировано {count} пользователей.",
|
||||
"@thereAreCountUsersBlocked": {
|
||||
"type": "text",
|
||||
"count": {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1802,620 +1802,412 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"hugContent": "",
|
||||
"@hugContent": {
|
||||
"@hugContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"jumpToLastReadMessage": "",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"allRooms": "",
|
||||
"@allRooms": {
|
||||
"@jumpToLastReadMessage": {},
|
||||
"@allRooms": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"obtainingLocation": "",
|
||||
"@obtainingLocation": {
|
||||
"@obtainingLocation": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "",
|
||||
"@commandHint_cuddle": {},
|
||||
"widgetVideo": "",
|
||||
"@widgetVideo": {},
|
||||
"dismiss": "",
|
||||
"@dismiss": {},
|
||||
"reportErrorDescription": "",
|
||||
"@reportErrorDescription": {},
|
||||
"addAccount": "",
|
||||
"@addAccount": {},
|
||||
"chatHasBeenAddedToThisSpace": "",
|
||||
"@chatHasBeenAddedToThisSpace": {},
|
||||
"unsupportedAndroidVersion": "",
|
||||
"@unsupportedAndroidVersion": {},
|
||||
"widgetJitsi": "",
|
||||
"@widgetJitsi": {},
|
||||
"messageType": "",
|
||||
"@messageType": {},
|
||||
"indexedDbErrorLong": "",
|
||||
"@indexedDbErrorLong": {},
|
||||
"oneClientLoggedOut": "",
|
||||
"@oneClientLoggedOut": {},
|
||||
"startFirstChat": "",
|
||||
"@startFirstChat": {},
|
||||
"callingAccount": "",
|
||||
"@callingAccount": {},
|
||||
"setColorTheme": "",
|
||||
"@setColorTheme": {},
|
||||
"nextAccount": "",
|
||||
"@nextAccount": {},
|
||||
"commandHint_create": "",
|
||||
"@commandHint_create": {
|
||||
"@commandHint_cuddle": {},
|
||||
"@widgetVideo": {},
|
||||
"@dismiss": {},
|
||||
"@reportErrorDescription": {},
|
||||
"@addAccount": {},
|
||||
"@chatHasBeenAddedToThisSpace": {},
|
||||
"@unsupportedAndroidVersion": {},
|
||||
"@widgetJitsi": {},
|
||||
"@messageType": {},
|
||||
"@indexedDbErrorLong": {},
|
||||
"@oneClientLoggedOut": {},
|
||||
"@startFirstChat": {},
|
||||
"@callingAccount": {},
|
||||
"@setColorTheme": {},
|
||||
"@nextAccount": {},
|
||||
"@commandHint_create": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /create"
|
||||
},
|
||||
"allSpaces": "",
|
||||
"@allSpaces": {},
|
||||
"supposedMxid": "",
|
||||
"@supposedMxid": {
|
||||
"@allSpaces": {},
|
||||
"@supposedMxid": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"mxid": {}
|
||||
}
|
||||
},
|
||||
"user": "",
|
||||
"@user": {},
|
||||
"youAcceptedTheInvitation": "",
|
||||
"@youAcceptedTheInvitation": {},
|
||||
"noMatrixServer": "",
|
||||
"@noMatrixServer": {
|
||||
"@user": {},
|
||||
"@youAcceptedTheInvitation": {},
|
||||
"@noMatrixServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server1": {},
|
||||
"server2": {}
|
||||
}
|
||||
},
|
||||
"youInvitedBy": "",
|
||||
"@youInvitedBy": {
|
||||
"@youInvitedBy": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"banUserDescription": "",
|
||||
"@banUserDescription": {},
|
||||
"widgetEtherpad": "",
|
||||
"@widgetEtherpad": {},
|
||||
"removeDevicesDescription": "",
|
||||
"@removeDevicesDescription": {},
|
||||
"separateChatTypes": "",
|
||||
"@separateChatTypes": {
|
||||
"@banUserDescription": {},
|
||||
"@widgetEtherpad": {},
|
||||
"@removeDevicesDescription": {},
|
||||
"@separateChatTypes": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"tryAgain": "",
|
||||
"@tryAgain": {},
|
||||
"youKickedAndBanned": "",
|
||||
"@youKickedAndBanned": {
|
||||
"@tryAgain": {},
|
||||
"@youKickedAndBanned": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"unbanUserDescription": "",
|
||||
"@unbanUserDescription": {},
|
||||
"saveFile": "",
|
||||
"@saveFile": {
|
||||
"@unbanUserDescription": {},
|
||||
"@saveFile": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"sendOnEnter": "",
|
||||
"@sendOnEnter": {},
|
||||
"youRejectedTheInvitation": "",
|
||||
"@youRejectedTheInvitation": {},
|
||||
"otherCallingPermissions": "",
|
||||
"@otherCallingPermissions": {},
|
||||
"messagesStyle": "",
|
||||
"@messagesStyle": {},
|
||||
"link": "",
|
||||
"@link": {},
|
||||
"widgetUrlError": "",
|
||||
"@widgetUrlError": {},
|
||||
"emailOrUsername": "",
|
||||
"@emailOrUsername": {},
|
||||
"newSpaceDescription": "",
|
||||
"@newSpaceDescription": {},
|
||||
"chatDescription": "",
|
||||
"@chatDescription": {},
|
||||
"callingAccountDetails": "",
|
||||
"@callingAccountDetails": {},
|
||||
"enterSpace": "",
|
||||
"@enterSpace": {},
|
||||
"encryptThisChat": "",
|
||||
"@encryptThisChat": {},
|
||||
"previousAccount": "",
|
||||
"@previousAccount": {},
|
||||
"reopenChat": "",
|
||||
"@reopenChat": {},
|
||||
"pleaseEnterRecoveryKey": "",
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"widgetNameError": "",
|
||||
"@widgetNameError": {},
|
||||
"addToBundle": "",
|
||||
"@addToBundle": {},
|
||||
"spaceIsPublic": "",
|
||||
"@spaceIsPublic": {
|
||||
"@sendOnEnter": {},
|
||||
"@youRejectedTheInvitation": {},
|
||||
"@otherCallingPermissions": {},
|
||||
"@messagesStyle": {},
|
||||
"@link": {},
|
||||
"@widgetUrlError": {},
|
||||
"@emailOrUsername": {},
|
||||
"@newSpaceDescription": {},
|
||||
"@chatDescription": {},
|
||||
"@callingAccountDetails": {},
|
||||
"@enterSpace": {},
|
||||
"@encryptThisChat": {},
|
||||
"@previousAccount": {},
|
||||
"@reopenChat": {},
|
||||
"@pleaseEnterRecoveryKey": {},
|
||||
"@widgetNameError": {},
|
||||
"@addToBundle": {},
|
||||
"@spaceIsPublic": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addWidget": "",
|
||||
"@addWidget": {},
|
||||
"countFiles": "",
|
||||
"@countFiles": {
|
||||
"@addWidget": {},
|
||||
"@countFiles": {
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"noKeyForThisMessage": "",
|
||||
"@noKeyForThisMessage": {},
|
||||
"shareLocation": "",
|
||||
"@shareLocation": {
|
||||
"@noKeyForThisMessage": {},
|
||||
"@shareLocation": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_markasgroup": "",
|
||||
"@commandHint_markasgroup": {},
|
||||
"errorObtainingLocation": "",
|
||||
"@errorObtainingLocation": {
|
||||
"@commandHint_markasgroup": {},
|
||||
"@errorObtainingLocation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"hydrateTor": "",
|
||||
"@hydrateTor": {},
|
||||
"pushNotificationsNotAvailable": "",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"storeInAppleKeyChain": "",
|
||||
"@storeInAppleKeyChain": {},
|
||||
"hydrate": "",
|
||||
"@hydrate": {},
|
||||
"invalidServerName": "",
|
||||
"@invalidServerName": {},
|
||||
"chatPermissions": "",
|
||||
"@chatPermissions": {},
|
||||
"cantOpenUri": "",
|
||||
"@cantOpenUri": {
|
||||
"@hydrateTor": {},
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"@storeInAppleKeyChain": {},
|
||||
"@hydrate": {},
|
||||
"@invalidServerName": {},
|
||||
"@chatPermissions": {},
|
||||
"@cantOpenUri": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"uri": {}
|
||||
}
|
||||
},
|
||||
"sender": "",
|
||||
"@sender": {},
|
||||
"storeInAndroidKeystore": "",
|
||||
"@storeInAndroidKeystore": {},
|
||||
"signInWithPassword": "",
|
||||
"@signInWithPassword": {},
|
||||
"makeAdminDescription": "",
|
||||
"@makeAdminDescription": {},
|
||||
"synchronizingPleaseWait": "",
|
||||
"@synchronizingPleaseWait": {
|
||||
"@sender": {},
|
||||
"@storeInAndroidKeystore": {},
|
||||
"@signInWithPassword": {},
|
||||
"@makeAdminDescription": {},
|
||||
"@synchronizingPleaseWait": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_clearcache": "",
|
||||
"@commandHint_clearcache": {
|
||||
"@commandHint_clearcache": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /clearcache"
|
||||
},
|
||||
"saveKeyManuallyDescription": "",
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"editBundlesForAccount": "",
|
||||
"@editBundlesForAccount": {},
|
||||
"whyIsThisMessageEncrypted": "",
|
||||
"@whyIsThisMessageEncrypted": {},
|
||||
"setChatDescription": "",
|
||||
"@setChatDescription": {},
|
||||
"spaceName": "",
|
||||
"@spaceName": {
|
||||
"@saveKeyManuallyDescription": {},
|
||||
"@editBundlesForAccount": {},
|
||||
"@whyIsThisMessageEncrypted": {},
|
||||
"@setChatDescription": {},
|
||||
"@spaceName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"importFromZipFile": "",
|
||||
"@importFromZipFile": {},
|
||||
"dehydrateWarning": "",
|
||||
"@dehydrateWarning": {},
|
||||
"noOtherDevicesFound": "",
|
||||
"@noOtherDevicesFound": {},
|
||||
"yourChatBackupHasBeenSetUp": "",
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"redactedBy": "",
|
||||
"@redactedBy": {
|
||||
"@importFromZipFile": {},
|
||||
"@dehydrateWarning": {},
|
||||
"@noOtherDevicesFound": {},
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"@redactedBy": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"videoCallsBetaWarning": "",
|
||||
"@videoCallsBetaWarning": {},
|
||||
"autoplayImages": "",
|
||||
"@autoplayImages": {
|
||||
"@videoCallsBetaWarning": {},
|
||||
"@autoplayImages": {
|
||||
"type": "text",
|
||||
"placeholder": {}
|
||||
},
|
||||
"signInWith": "",
|
||||
"@signInWith": {
|
||||
"@signInWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"provider": {}
|
||||
}
|
||||
},
|
||||
"fileIsTooBigForServer": "",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"homeserver": "",
|
||||
"@homeserver": {},
|
||||
"repeatPassword": "",
|
||||
"@repeatPassword": {},
|
||||
"callingPermissions": "",
|
||||
"@callingPermissions": {},
|
||||
"readUpToHere": "",
|
||||
"@readUpToHere": {},
|
||||
"start": "",
|
||||
"@start": {},
|
||||
"unlockOldMessages": "",
|
||||
"@unlockOldMessages": {},
|
||||
"numChats": "",
|
||||
"@numChats": {
|
||||
"@fileIsTooBigForServer": {},
|
||||
"@homeserver": {},
|
||||
"@repeatPassword": {},
|
||||
"@callingPermissions": {},
|
||||
"@readUpToHere": {},
|
||||
"@start": {},
|
||||
"@unlockOldMessages": {},
|
||||
"@numChats": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {}
|
||||
}
|
||||
},
|
||||
"optionalRedactReason": "",
|
||||
"@optionalRedactReason": {},
|
||||
"dehydrate": "",
|
||||
"@dehydrate": {},
|
||||
"locationPermissionDeniedNotice": "",
|
||||
"@locationPermissionDeniedNotice": {
|
||||
"@optionalRedactReason": {},
|
||||
"@dehydrate": {},
|
||||
"@locationPermissionDeniedNotice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"sendAsText": "",
|
||||
"@sendAsText": {
|
||||
"@sendAsText": {
|
||||
"type": "text"
|
||||
},
|
||||
"archiveRoomDescription": "",
|
||||
"@archiveRoomDescription": {},
|
||||
"exportEmotePack": "",
|
||||
"@exportEmotePack": {},
|
||||
"sendSticker": "",
|
||||
"@sendSticker": {
|
||||
"@archiveRoomDescription": {},
|
||||
"@exportEmotePack": {},
|
||||
"@sendSticker": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"switchToAccount": "",
|
||||
"@switchToAccount": {
|
||||
"@switchToAccount": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {}
|
||||
}
|
||||
},
|
||||
"commandInvalid": "",
|
||||
"@commandInvalid": {
|
||||
"@commandInvalid": {
|
||||
"type": "text"
|
||||
},
|
||||
"locationDisabledNotice": "",
|
||||
"@locationDisabledNotice": {
|
||||
"@locationDisabledNotice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"experimentalVideoCalls": "",
|
||||
"@experimentalVideoCalls": {},
|
||||
"pleaseEnterRecoveryKeyDescription": "",
|
||||
"@pleaseEnterRecoveryKeyDescription": {},
|
||||
"openInMaps": "",
|
||||
"@openInMaps": {
|
||||
"@experimentalVideoCalls": {},
|
||||
"@pleaseEnterRecoveryKeyDescription": {},
|
||||
"@openInMaps": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"inviteContactToGroupQuestion": "",
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"redactedByBecause": "",
|
||||
"@redactedByBecause": {
|
||||
"@inviteContactToGroupQuestion": {},
|
||||
"@redactedByBecause": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"youHaveWithdrawnTheInvitationFor": "",
|
||||
"@youHaveWithdrawnTheInvitationFor": {
|
||||
"@youHaveWithdrawnTheInvitationFor": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"appearOnTopDetails": "",
|
||||
"@appearOnTopDetails": {},
|
||||
"enterRoom": "",
|
||||
"@enterRoom": {},
|
||||
"allChats": "",
|
||||
"@allChats": {
|
||||
"@appearOnTopDetails": {},
|
||||
"@enterRoom": {},
|
||||
"@allChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"reportUser": "",
|
||||
"@reportUser": {},
|
||||
"confirmEventUnpin": "",
|
||||
"@confirmEventUnpin": {},
|
||||
"youInvitedUser": "",
|
||||
"@youInvitedUser": {
|
||||
"@reportUser": {},
|
||||
"@confirmEventUnpin": {},
|
||||
"@youInvitedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"fileHasBeenSavedAt": "",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"path": {}
|
||||
}
|
||||
},
|
||||
"addToSpace": "",
|
||||
"@addToSpace": {},
|
||||
"commandMissing": "",
|
||||
"@commandMissing": {
|
||||
"@addToSpace": {},
|
||||
"@commandMissing": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"command": {}
|
||||
},
|
||||
"description": "State that {command} is not a valid /command."
|
||||
},
|
||||
"redactMessageDescription": "",
|
||||
"@redactMessageDescription": {},
|
||||
"recoveryKey": "",
|
||||
"@recoveryKey": {},
|
||||
"commandHint_discardsession": "",
|
||||
"@commandHint_discardsession": {
|
||||
"@redactMessageDescription": {},
|
||||
"@recoveryKey": {},
|
||||
"@commandHint_discardsession": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /discardsession"
|
||||
},
|
||||
"invalidInput": "",
|
||||
"@invalidInput": {},
|
||||
"dehydrateTorLong": "",
|
||||
"@dehydrateTorLong": {},
|
||||
"doNotShowAgain": "",
|
||||
"@doNotShowAgain": {},
|
||||
"report": "",
|
||||
"@report": {},
|
||||
"unverified": "",
|
||||
"@unverified": {},
|
||||
"serverRequiresEmail": "",
|
||||
"@serverRequiresEmail": {},
|
||||
"hideUnimportantStateEvents": "",
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"screenSharingTitle": "",
|
||||
"@screenSharingTitle": {},
|
||||
"widgetCustom": "",
|
||||
"@widgetCustom": {},
|
||||
"addToSpaceDescription": "",
|
||||
"@addToSpaceDescription": {},
|
||||
"googlyEyesContent": "",
|
||||
"@googlyEyesContent": {
|
||||
"@invalidInput": {},
|
||||
"@dehydrateTorLong": {},
|
||||
"@doNotShowAgain": {},
|
||||
"@report": {},
|
||||
"@unverified": {},
|
||||
"@serverRequiresEmail": {},
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"@screenSharingTitle": {},
|
||||
"@widgetCustom": {},
|
||||
"@addToSpaceDescription": {},
|
||||
"@googlyEyesContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"youBannedUser": "",
|
||||
"@youBannedUser": {
|
||||
"@youBannedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"addChatDescription": "",
|
||||
"@addChatDescription": {},
|
||||
"commandHint_myroomavatar": "",
|
||||
"@commandHint_myroomavatar": {
|
||||
"@addChatDescription": {},
|
||||
"@commandHint_myroomavatar": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomavatar"
|
||||
},
|
||||
"hasKnocked": "",
|
||||
"@hasKnocked": {
|
||||
"@hasKnocked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"publish": "",
|
||||
"@publish": {},
|
||||
"openLinkInBrowser": "",
|
||||
"@openLinkInBrowser": {},
|
||||
"messageInfo": "",
|
||||
"@messageInfo": {},
|
||||
"disableEncryptionWarning": "",
|
||||
"@disableEncryptionWarning": {},
|
||||
"directChat": "",
|
||||
"@directChat": {},
|
||||
"wrongPinEntered": "",
|
||||
"@wrongPinEntered": {
|
||||
"@publish": {},
|
||||
"@openLinkInBrowser": {},
|
||||
"@messageInfo": {},
|
||||
"@disableEncryptionWarning": {},
|
||||
"@directChat": {},
|
||||
"@wrongPinEntered": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"seconds": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "",
|
||||
"@sendTypingNotifications": {},
|
||||
"inviteGroupChat": "",
|
||||
"@inviteGroupChat": {},
|
||||
"appearOnTop": "",
|
||||
"@appearOnTop": {},
|
||||
"invitePrivateChat": "",
|
||||
"@invitePrivateChat": {},
|
||||
"foregroundServiceRunning": "",
|
||||
"@foregroundServiceRunning": {},
|
||||
"voiceCall": "",
|
||||
"@voiceCall": {},
|
||||
"createNewSpace": "",
|
||||
"@createNewSpace": {
|
||||
"@sendTypingNotifications": {},
|
||||
"@inviteGroupChat": {},
|
||||
"@appearOnTop": {},
|
||||
"@invitePrivateChat": {},
|
||||
"@foregroundServiceRunning": {},
|
||||
"@voiceCall": {},
|
||||
"@createNewSpace": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"importEmojis": "",
|
||||
"@importEmojis": {},
|
||||
"wasDirectChatDisplayName": "",
|
||||
"@wasDirectChatDisplayName": {
|
||||
"@importEmojis": {},
|
||||
"@wasDirectChatDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"oldDisplayName": {}
|
||||
}
|
||||
},
|
||||
"noChatDescriptionYet": "",
|
||||
"@noChatDescriptionYet": {},
|
||||
"removeFromBundle": "",
|
||||
"@removeFromBundle": {},
|
||||
"confirmMatrixId": "",
|
||||
"@confirmMatrixId": {},
|
||||
"learnMore": "",
|
||||
"@learnMore": {},
|
||||
"notAnImage": "",
|
||||
"@notAnImage": {},
|
||||
"users": "",
|
||||
"@users": {},
|
||||
"openGallery": "",
|
||||
"@openGallery": {},
|
||||
"chatDescriptionHasBeenChanged": "",
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"newGroup": "",
|
||||
"@newGroup": {},
|
||||
"bundleName": "",
|
||||
"@bundleName": {},
|
||||
"dehydrateTor": "",
|
||||
"@dehydrateTor": {},
|
||||
"removeFromSpace": "",
|
||||
"@removeFromSpace": {},
|
||||
"roomUpgradeDescription": "",
|
||||
"@roomUpgradeDescription": {},
|
||||
"scanQrCode": "",
|
||||
"@scanQrCode": {},
|
||||
"pleaseEnterANumber": "",
|
||||
"@pleaseEnterANumber": {},
|
||||
"youKicked": "",
|
||||
"@youKicked": {
|
||||
"@noChatDescriptionYet": {},
|
||||
"@removeFromBundle": {},
|
||||
"@confirmMatrixId": {},
|
||||
"@learnMore": {},
|
||||
"@notAnImage": {},
|
||||
"@users": {},
|
||||
"@openGallery": {},
|
||||
"@chatDescriptionHasBeenChanged": {},
|
||||
"@newGroup": {},
|
||||
"@bundleName": {},
|
||||
"@dehydrateTor": {},
|
||||
"@removeFromSpace": {},
|
||||
"@roomUpgradeDescription": {},
|
||||
"@scanQrCode": {},
|
||||
"@pleaseEnterANumber": {},
|
||||
"@youKicked": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"profileNotFound": "",
|
||||
"@profileNotFound": {},
|
||||
"jump": "",
|
||||
"@jump": {},
|
||||
"reactedWith": "",
|
||||
"@reactedWith": {
|
||||
"@profileNotFound": {},
|
||||
"@jump": {},
|
||||
"@reactedWith": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {},
|
||||
"reaction": {}
|
||||
}
|
||||
},
|
||||
"sorryThatsNotPossible": "",
|
||||
"@sorryThatsNotPossible": {},
|
||||
"videoWithSize": "",
|
||||
"@videoWithSize": {
|
||||
"@sorryThatsNotPossible": {},
|
||||
"@videoWithSize": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"size": {}
|
||||
}
|
||||
},
|
||||
"shareInviteLink": "",
|
||||
"@shareInviteLink": {},
|
||||
"commandHint_markasdm": "",
|
||||
"@commandHint_markasdm": {},
|
||||
"recoveryKeyLost": "",
|
||||
"@recoveryKeyLost": {},
|
||||
"cuddleContent": "",
|
||||
"@cuddleContent": {
|
||||
"@shareInviteLink": {},
|
||||
"@commandHint_markasdm": {},
|
||||
"@recoveryKeyLost": {},
|
||||
"@cuddleContent": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"deviceKeys": "",
|
||||
"@deviceKeys": {},
|
||||
"emoteKeyboardNoRecents": "",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"@deviceKeys": {},
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"setTheme": "",
|
||||
"@setTheme": {},
|
||||
"youJoinedTheChat": "",
|
||||
"@youJoinedTheChat": {},
|
||||
"openVideoCamera": "",
|
||||
"@openVideoCamera": {
|
||||
"@setTheme": {},
|
||||
"@youJoinedTheChat": {},
|
||||
"@openVideoCamera": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"markAsRead": "",
|
||||
"@markAsRead": {},
|
||||
"widgetName": "",
|
||||
"@widgetName": {},
|
||||
"errorAddingWidget": "",
|
||||
"@errorAddingWidget": {},
|
||||
"commandHint_dm": "",
|
||||
"@commandHint_dm": {
|
||||
"@markAsRead": {},
|
||||
"@widgetName": {},
|
||||
"@errorAddingWidget": {},
|
||||
"@commandHint_dm": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_hug": "",
|
||||
"@commandHint_hug": {},
|
||||
"replace": "",
|
||||
"@replace": {},
|
||||
"youUnbannedUser": "",
|
||||
"@youUnbannedUser": {
|
||||
"@commandHint_hug": {},
|
||||
"@replace": {},
|
||||
"@youUnbannedUser": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"newSpace": "",
|
||||
"@newSpace": {},
|
||||
"emojis": "",
|
||||
"@emojis": {},
|
||||
"commandHint_googly": "",
|
||||
"@commandHint_googly": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"createGroup": "",
|
||||
"@createGroup": {},
|
||||
"hydrateTorLong": "",
|
||||
"@hydrateTorLong": {},
|
||||
"time": "",
|
||||
"@time": {},
|
||||
"custom": "",
|
||||
"@custom": {},
|
||||
"noBackupWarning": "",
|
||||
"@noBackupWarning": {},
|
||||
"storeInSecureStorageDescription": "",
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"openChat": "",
|
||||
"@openChat": {},
|
||||
"kickUserDescription": "",
|
||||
"@kickUserDescription": {},
|
||||
"importNow": "",
|
||||
"@importNow": {},
|
||||
"pinMessage": "",
|
||||
"@pinMessage": {},
|
||||
"invite": "",
|
||||
"@invite": {},
|
||||
"enableMultiAccounts": "",
|
||||
"@enableMultiAccounts": {},
|
||||
"indexedDbErrorTitle": "",
|
||||
"@indexedDbErrorTitle": {},
|
||||
"unsupportedAndroidVersionLong": "",
|
||||
"@unsupportedAndroidVersionLong": {},
|
||||
"storeSecurlyOnThisDevice": "",
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"screenSharingDetail": "",
|
||||
"@screenSharingDetail": {},
|
||||
"placeCall": "",
|
||||
"@placeCall": {}
|
||||
"@newSpace": {},
|
||||
"@emojis": {},
|
||||
"@commandHint_googly": {},
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"@createGroup": {},
|
||||
"@hydrateTorLong": {},
|
||||
"@time": {},
|
||||
"@custom": {},
|
||||
"@noBackupWarning": {},
|
||||
"@storeInSecureStorageDescription": {},
|
||||
"@openChat": {},
|
||||
"@kickUserDescription": {},
|
||||
"@importNow": {},
|
||||
"@pinMessage": {},
|
||||
"@invite": {},
|
||||
"@enableMultiAccounts": {},
|
||||
"@indexedDbErrorTitle": {},
|
||||
"@unsupportedAndroidVersionLong": {},
|
||||
"@storeSecurlyOnThisDevice": {},
|
||||
"@screenSharingDetail": {},
|
||||
"@placeCall": {}
|
||||
}
|
||||
|
|
@ -2298,7 +2298,7 @@
|
|||
"path": {}
|
||||
}
|
||||
},
|
||||
"reportErrorDescription": "😭哦不。出了点差错。如果你愿意,可以向开发人员报告此错误。",
|
||||
"reportErrorDescription": "😭 哦不。出了点差错。如果你愿意,可以向开发人员报告此错误。",
|
||||
"@reportErrorDescription": {},
|
||||
"noBackupWarning": "警告!如果不启用聊天备份,你将无法访问加密消息。强烈建议在注销前先启用聊天备份。",
|
||||
"@noBackupWarning": {},
|
||||
|
|
@ -2453,5 +2453,241 @@
|
|||
"searchChatsRooms": "搜索 #聊天,@用户…",
|
||||
"@searchChatsRooms": {},
|
||||
"databaseMigrationBody": "请稍候。可能需要稍等片刻。",
|
||||
"@databaseMigrationBody": {}
|
||||
"@databaseMigrationBody": {},
|
||||
"thisDevice": "此设备:",
|
||||
"@thisDevice": {},
|
||||
"publicSpaces": "公开空间",
|
||||
"@publicSpaces": {},
|
||||
"passwordIsWrong": "你输入的密码有误",
|
||||
"@passwordIsWrong": {},
|
||||
"pleaseEnterYourCurrentPassword": "请输入你当前的密码",
|
||||
"@pleaseEnterYourCurrentPassword": {},
|
||||
"publicLink": "公开链接",
|
||||
"@publicLink": {},
|
||||
"nothingFound": "未找到任何内容…",
|
||||
"@nothingFound": {},
|
||||
"decline": "拒绝",
|
||||
"@decline": {},
|
||||
"newPassword": "新的密码",
|
||||
"@newPassword": {},
|
||||
"passwordsDoNotMatch": "密码不匹配",
|
||||
"@passwordsDoNotMatch": {},
|
||||
"subspace": "子空间",
|
||||
"@subspace": {},
|
||||
"select": "选择",
|
||||
"@select": {},
|
||||
"pleaseChooseAStrongPassword": "请选择一个强密码",
|
||||
"@pleaseChooseAStrongPassword": {},
|
||||
"addChatOrSubSpace": "添加聊天或子空间",
|
||||
"@addChatOrSubSpace": {},
|
||||
"leaveEmptyToClearStatus": "留空以清除你的状态。",
|
||||
"@leaveEmptyToClearStatus": {},
|
||||
"joinSpace": "加入空间",
|
||||
"@joinSpace": {},
|
||||
"searchForUsers": "搜索 @用户…",
|
||||
"@searchForUsers": {},
|
||||
"databaseBuildErrorBody": "无法构建 SQLite 数据库。目前应用尝试使用旧数据库。请将此错误报告给开发者,网址为 {url}。错误消息为:{error}",
|
||||
"@databaseBuildErrorBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"initAppError": "在初始化应用时发生错误",
|
||||
"@initAppError": {},
|
||||
"sessionLostBody": "你的会话已丢失。请将此错误报告给开发者,网址为 {url}。错误消息为:{error}",
|
||||
"@sessionLostBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"restoreSessionBody": "应用现在尝试从备份中恢复你的会话。请将此错误报告给开发者,网址为 {url}。错误消息为:{error}",
|
||||
"@restoreSessionBody": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"url": {},
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"sendTypingNotificationsDescription": "聊天中的其他参与者可以看到你正在输入新消息。",
|
||||
"@sendTypingNotificationsDescription": {},
|
||||
"formattedMessagesDescription": "使用 Markdown 显示富文本内容,例如加粗文本。",
|
||||
"@formattedMessagesDescription": {},
|
||||
"verifyOtherUserDescription": "如果你验证了其他用户,就可以确保你清楚自己正在与谁进行通信。💪\n\n当你开始验证时,你和其他用户将在应用中看到一个弹出窗口。然后你会看到一系列表情符号或数字,你和其他用户需要比较它们是否一致。\n\n最好的方式是线下会面或开始视频通话。👭",
|
||||
"@verifyOtherUserDescription": {},
|
||||
"verifyOtherDeviceDescription": "当你验证另一个设备时,这些设备可以交换密钥,从而提高整体安全性。 💪 当你开始验证时,两个设备上的应用都将显示一个弹出窗口。然后你会看到一系列表情符号或数字,你需要比较两个设备上显示的内容。在开始验证之前,最好将两个设备都放在手边。🤳",
|
||||
"@verifyOtherDeviceDescription": {},
|
||||
"canceledKeyVerification": "{sender} 取消了密钥验证",
|
||||
"@canceledKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceipts": "发送已读回执",
|
||||
"@sendReadReceipts": {},
|
||||
"formattedMessages": "格式化的消息",
|
||||
"@formattedMessages": {},
|
||||
"verifyOtherDevice": "🔐 验证其它设备",
|
||||
"@verifyOtherDevice": {},
|
||||
"verifyOtherUser": "🔐 验证其他用户",
|
||||
"@verifyOtherUser": {},
|
||||
"forwardMessageTo": "转发消息至 {roomName} ?",
|
||||
"@forwardMessageTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"roomName": {}
|
||||
}
|
||||
},
|
||||
"sendReadReceiptsDescription": "聊天中的其他参与者可以看到你是否读过消息。",
|
||||
"@sendReadReceiptsDescription": {},
|
||||
"acceptedKeyVerification": "{sender} 接受了密钥验证",
|
||||
"@acceptedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"isReadyForKeyVerification": "{sender} 已准备好进行密钥验证",
|
||||
"@isReadyForKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"completedKeyVerification": "{sender} 完成了密钥验证",
|
||||
"@completedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"requestedKeyVerification": "{sender} 请求了密钥验证",
|
||||
"@requestedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"startedKeyVerification": "{sender} 开始了密钥验证",
|
||||
"@startedKeyVerification": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"sender": {}
|
||||
}
|
||||
},
|
||||
"transparent": "透明",
|
||||
"@transparent": {},
|
||||
"youInvitedToBy": "📩 你已通过链接被邀请到:\n{alias}",
|
||||
"@youInvitedToBy": {
|
||||
"placeholders": {
|
||||
"alias": {}
|
||||
}
|
||||
},
|
||||
"presencesToggle": "显示其他用户的状态消息",
|
||||
"@presencesToggle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"presenceStyle": "是否在线:",
|
||||
"@presenceStyle": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"hidePresences": "隐藏状态列表?",
|
||||
"@hidePresences": {},
|
||||
"incomingMessages": "传入消息",
|
||||
"@incomingMessages": {},
|
||||
"stickers": "贴纸",
|
||||
"@stickers": {},
|
||||
"discover": "发现",
|
||||
"@discover": {},
|
||||
"commandHint_ignore": "忽略给定的 matrix ID",
|
||||
"@commandHint_ignore": {},
|
||||
"commandHint_unignore": "取消忽略给定的 matrix ID",
|
||||
"@commandHint_unignore": {},
|
||||
"unreadChatsInApp": "{appname}: {unread} 未读聊天",
|
||||
"@unreadChatsInApp": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"appname": {},
|
||||
"unread": {}
|
||||
}
|
||||
},
|
||||
"appLockDescription": "用 pin 码在不用 FluffyChat 时锁定它",
|
||||
"@appLockDescription": {},
|
||||
"globalChatId": "全局聊天 ID",
|
||||
"@globalChatId": {},
|
||||
"accessAndVisibility": "访问和可见性",
|
||||
"@accessAndVisibility": {},
|
||||
"accessAndVisibilityDescription": "谁可以加入此聊天以及怎样发现该聊天。",
|
||||
"@accessAndVisibilityDescription": {},
|
||||
"calls": "通话",
|
||||
"@calls": {},
|
||||
"customEmojisAndStickers": "自定义表情符号和贴纸",
|
||||
"@customEmojisAndStickers": {},
|
||||
"hideRedactedMessages": "隐藏被涂黑的消息",
|
||||
"@hideRedactedMessages": {},
|
||||
"overview": "概览",
|
||||
"@overview": {},
|
||||
"notifyMeFor": "提示内容",
|
||||
"@notifyMeFor": {},
|
||||
"passwordRecoverySettings": "密码发现设置",
|
||||
"@passwordRecoverySettings": {},
|
||||
"noPublicLinkHasBeenCreatedYet": "尚未创建公开链接",
|
||||
"@noPublicLinkHasBeenCreatedYet": {},
|
||||
"knock": "请求",
|
||||
"@knock": {},
|
||||
"noOneCanJoin": "无人可以加入",
|
||||
"@noOneCanJoin": {},
|
||||
"knocking": "正在请求",
|
||||
"@knocking": {},
|
||||
"chatCanBeDiscoveredViaSearchOnServer": "可通过搜索 {server} 发现聊天",
|
||||
"@chatCanBeDiscoveredViaSearchOnServer": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"server": {}
|
||||
}
|
||||
},
|
||||
"thereAreCountUsersBlocked": "目前有 {count} 名用户被封禁。",
|
||||
"@thereAreCountUsersBlocked": {
|
||||
"type": "text",
|
||||
"count": {}
|
||||
},
|
||||
"hideRedactedMessagesBody": "如果某人涂黑了一条消息,那么在聊天中再也看不到这条消息。",
|
||||
"@hideRedactedMessagesBody": {},
|
||||
"hideInvalidOrUnknownMessageFormats": "隐藏无效或未知的消息格式",
|
||||
"@hideInvalidOrUnknownMessageFormats": {},
|
||||
"hideMemberChangesInPublicChats": "在公开聊天中隐藏成员变化",
|
||||
"@hideMemberChangesInPublicChats": {},
|
||||
"hideMemberChangesInPublicChatsBody": "不在聊天时间线中显示某人是否加入或离开了公开聊天来改进可读性。",
|
||||
"@hideMemberChangesInPublicChatsBody": {},
|
||||
"userWouldLikeToChangeTheChat": "{user} 想加入聊天。",
|
||||
"@userWouldLikeToChangeTheChat": {
|
||||
"placeholders": {
|
||||
"user": {}
|
||||
}
|
||||
},
|
||||
"customEmojisAndStickersBody": "添加或分享可用于任何聊天的表情符号或贴纸。",
|
||||
"@customEmojisAndStickersBody": {},
|
||||
"usersMustKnock": "用户必须请求加入",
|
||||
"@usersMustKnock": {},
|
||||
"noDatabaseEncryption": "数据库加密在此平台上不受支持",
|
||||
"@noDatabaseEncryption": {},
|
||||
"userRole": "用户角色",
|
||||
"@userRole": {},
|
||||
"minimumPowerLevel": "{level} 是最低权限等级。",
|
||||
"@minimumPowerLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"level": {}
|
||||
}
|
||||
},
|
||||
"publicChatAddresses": "公开聊天的地址",
|
||||
"@publicChatAddresses": {},
|
||||
"createNewAddress": "新建地址",
|
||||
"@createNewAddress": {}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 18 KiB |
|
|
@ -1,80 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="64"
|
||||
height="30"
|
||||
viewBox="0 0 64 30"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="typing.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
id="namedview10"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.9296875"
|
||||
inkscape:cx="24.018883"
|
||||
inkscape:cy="15.307632"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1012"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<circle
|
||||
style="fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:normal"
|
||||
cx="10"
|
||||
cy="15"
|
||||
r="9"
|
||||
id="circle2">
|
||||
<animate
|
||||
attributeName="fill"
|
||||
dur="2s"
|
||||
values="#000000; #efefef; #000000"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 0.5; 1"
|
||||
keySplines="0 .75 .25 1; .5 0 .5 1"
|
||||
begin="0s" />
|
||||
</circle>
|
||||
<circle
|
||||
style="fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:normal"
|
||||
cx="32"
|
||||
cy="15"
|
||||
r="9"
|
||||
id="circle4">
|
||||
<animate
|
||||
attributeName="fill"
|
||||
dur="2s"
|
||||
values="#000000; #efefef; #000000"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 0.5; 1"
|
||||
keySplines="0 .75 .25 1; .5 0 .5 1"
|
||||
begin="0.25s" />
|
||||
</circle>
|
||||
<circle
|
||||
style="fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:normal"
|
||||
cx="54"
|
||||
cy="15"
|
||||
r="9"
|
||||
id="circle6">
|
||||
<animate
|
||||
attributeName="fill"
|
||||
dur="2s"
|
||||
values="#000000; #efefef; #000000"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 0.5; 1"
|
||||
keySplines="0 .75 .25 1; .5 0 .5 1"
|
||||
begin="0.5s" />
|
||||
</circle>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
2
docs/.well-known/org.flathub.VerifiedApps.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# im.fluffychat.Fluffychat
|
||||
8b25b37b-f160-4350-b4f6-9a04554e8f9e
|
||||
|
Before Width: | Height: | Size: 12 KiB |
|
|
@ -1,138 +0,0 @@
|
|||
# Code Style
|
||||
|
||||
FluffyChat tries to be as minimal as possible even in the code style. We try to keep the code clean, simple and easy to read. The source code of the app is under `/lib` with the main entry point `/lib/main.dart`.
|
||||
|
||||
### Directory Structure:
|
||||
|
||||
|
||||
- /lib
|
||||
- /config
|
||||
- app_config.dart
|
||||
- ...Constants, styles and other configurations
|
||||
- /utils
|
||||
- handy_function.dart
|
||||
- ...Helper functions and extensions
|
||||
- /pages
|
||||
- /chat
|
||||
- chat.dart
|
||||
- chat_view.dart
|
||||
- /chat_list
|
||||
- chat_list.dart
|
||||
- chat_list_view.dart
|
||||
- ...The pages of the app separated in Controllers and Views
|
||||
- /widgets
|
||||
- /layouts
|
||||
- ...Custom widgets created for this project
|
||||
- main.dart
|
||||
|
||||
|
||||
Most of the business model is in the Famedly Matrix Dart SDK. We try to not keep a model inside of the source code but extend it under `/utils`.
|
||||
|
||||
### Separation of Controllers and Views
|
||||
|
||||
We split views and controller logic with stateful widgets as controller where the build method just builds a stateless widget which receives the state as the only parameter. A common controller would look like this:
|
||||
|
||||
```dart
|
||||
// /lib/controller/enter_name_controller.dart
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class EnterName extends StatefulWidget {
|
||||
@override
|
||||
EnterNameController createState() => EnterNameController();
|
||||
}
|
||||
|
||||
class EnterNameController extends State<EnterName> {
|
||||
final TextEditingController textEditingController = TextEditingController();
|
||||
String name = 'Unknown';
|
||||
|
||||
/// Changes the name with the content in the textfield. If the textfield is
|
||||
/// empty, this breaks up and displays a SnackBar.
|
||||
void setNameAction() {
|
||||
if (textEditingController.text.isEmpty) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('You have not entered your name'),
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
setState(() => name = textEditingController.text);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => EnterNameView(this);
|
||||
}
|
||||
```
|
||||
|
||||
So we have a controller for a `EnterName` view which as a `TextEditingController`, a state `name` and an action `void setNameAction()`. Actions must always be methods of a type, that we dont need to pass parameters in the corresponding view class and must have dartdoc comments.
|
||||
|
||||
The view class could look like this:
|
||||
|
||||
```dart
|
||||
// /lib/views/enter_name_view.dart
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class EnterNameView extends StatelessWidget {
|
||||
final EnterNameController controller;
|
||||
|
||||
const EnterNameView(this.controller, {Key key}) : super(key: key);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Your name: ${controller.name}'),
|
||||
),
|
||||
body: Center(
|
||||
child: TextField(
|
||||
controller: controller.textEditingController,
|
||||
),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: controller.setNameAction,
|
||||
child: Icon(Icons.save),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Views should just contain code which describes the view. All other parameters or logic should be in the controller. The job of the view class is just to take the current state and build the widget tree and pipe the callbacks back. If there is any calulation necessary which is not solveable as a simple if-else or switch statement, it should be done in an external helper function unter `/lib/utils/`.
|
||||
|
||||
All file names must be lower_snake_case. All views must have a `View` suffix and all controller must have a `Controller` suffix. Widgets may have a controller too but they should pass the callbacks back to the view where possible. Calling one line methods directly in the view is only recommended if there is no need to pass a parameter.
|
||||
|
||||
To perform an action on state initialization we use the initState method:
|
||||
```dart
|
||||
@override
|
||||
void initState() {
|
||||
// TODO: implement initState
|
||||
super.initState();
|
||||
}
|
||||
```
|
||||
|
||||
And the dispose method to perform an action on disposing:
|
||||
```dart
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
super.dispose();
|
||||
}
|
||||
```
|
||||
|
||||
To run code after the widget was created first we use the WidgetBindings in the initState:
|
||||
```dart
|
||||
@override
|
||||
void initState() {
|
||||
WidgetsBinding.instance!.addPostFrameCallback((_) {
|
||||
// Do something when build is finished
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
```
|
||||
|
||||
### Formatting
|
||||
|
||||
We do not allow code with wrong formatting. Please run `flutter format lib` if your IDE doesn't do this automatically.
|
||||
|
||||
### Code Analyzis
|
||||
|
||||
We do not allow codes with dart errors or warnings. We use the [pedantic](https://pub.dev/packages/pedantic) package for static code analysis with additional rules under `analysis_options.yaml`.
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
# F-Droid Repository
|
||||
|
||||
Our own F-Droid repository contains the Google Services which is not possible in the main F-Droid repository. Release candidates
|
||||
are also published on it.
|
||||
|
||||
## Add Repository to F-Droid
|
||||
|
||||
Easiest way to add the Repository is to either **scan the QR-Code** or if you are on your phone **directly click it**.
|
||||
|
||||
<a href="fdroidrepos://fluffychat.im/repo/stable/repo/?fingerprint=5EDB5C4395B2F2D9BA682F6A1D275170CCE5365A6FA27D2220EA8D52A6D95F07" >
|
||||
<img src="qr-stable.svg" width="300" height="300"/>
|
||||
</a>
|
||||
|
||||
|
||||
### If the QR-Code doesn't work:
|
||||
|
||||
First check if you have f-droid installed. If not you can get it from: [https://f-droid.org/](https://f-droid.org/).
|
||||
After you made sure you installed it and you didn't have it installed before you can try again the QR-Code.
|
||||
If this still isn't working follow the next steps:
|
||||
|
||||
1. Open the f-droid App
|
||||
2. Go to the `Settings` Tab in the Bottom bar
|
||||
3. Click the `Repositories` Action
|
||||
4. Click on the plus sign at the top.
|
||||
5. Fill in `https://fluffychat.im/repo/stable/repo/` into the top field and `5EDB5C4395B2F2D9BA682F6A1D275170CCE5365A6FA27D2220EA8D52A6D95F07` in the bottom field.
|
||||
|
||||
## What is the fingerprint?
|
||||
|
||||
The fingerprint of the Repository is: `5EDB5C4395B2F2D9BA682F6A1D275170CCE5365A6FA27D2220EA8D52A6D95F07`
|
||||
|
||||
# Nightly Repository
|
||||
|
||||
## Add Repository to F-Droid
|
||||
|
||||
Easiest way to add the Repository is to either **scan the QR-Code** or if you are on your phone **directly click** it.
|
||||
|
||||
<a href="fdroidrepos://fluffychat.im/repo/nightly/repo/?fingerprint=21A469657300576478B623DF99D8EB889A80BCD939ACA60A4074741BEAEC397D" >
|
||||
<img src="qr-nightly.svg" width="300" height="300"/>
|
||||
</a>
|
||||
|
||||
|
||||
### If the QR-Code doesn't work:
|
||||
|
||||
First check if you have f-droid installed. If not you can get it from: [https://f-droid.org/](https://f-droid.org/).
|
||||
After you made sure you installed it and you didn't have it installed before you can try again the QR-Code.
|
||||
If this still isn't working follow the next steps:
|
||||
|
||||
1. Open the f-droid App
|
||||
2. Go to the `Settings` Tab in the Bottom bar
|
||||
3. Click the `Repositories` Action
|
||||
4. Click on the plus sign at the top.
|
||||
5. Fill in `https://fluffychat.im/repo/nightly/repo/` into the top field and `21A469657300576478B623DF99D8EB889A80BCD939ACA60A4074741BEAEC397D` in the bottom field.
|
||||
|
||||
## What is the fingerprint?
|
||||
|
||||
The fingerprint of the Repository is: `21A469657300576478B623DF99D8EB889A80BCD939ACA60A4074741BEAEC397D`
|
||||
BIN
docs/feature1.gif
Normal file
|
After Width: | Height: | Size: 647 KiB |
BIN
docs/feature2.gif
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
docs/feature3.gif
Normal file
|
After Width: | Height: | Size: 766 KiB |
BIN
docs/feature4.gif
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
docs/feature5.gif
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
docs/feature6.gif
Normal file
|
After Width: | Height: | Size: 256 KiB |
BIN
docs/feature7.gif
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
docs/feature8.gif
Normal file
|
After Width: | Height: | Size: 448 KiB |
BIN
docs/feature9.gif
Normal file
|
After Width: | Height: | Size: 1 MiB |
205
docs/index.html
|
|
@ -17,25 +17,39 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.png">
|
||||
<link href="tailwind.css" rel="stylesheet">
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: Zen Kurenaido;
|
||||
src: url(ZenKurenaido-Regular.ttf);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body
|
||||
class="flex flex-col items-center justify-center min-h-screen w-screen bg-gradient-to-t from-purple-200 to-blue-50 dark:from-gray-800 dark:to-slate-900 p-4"
|
||||
class="flex flex-col items-center min-h-screen w-full bg-gradient-to-t from-purple-200 to-blue-50 dark:from-purple-900 dark:to-slate-900"
|
||||
style="font-family: 'Zen Kurenaido', sans-serif;">
|
||||
<img src="favicon.png" class="h-10" />
|
||||
<h1 class="flex text-4xl items-center mb-4">
|
||||
<span style="color: #5625BA">Fluffy</span>
|
||||
<span style="color: #41a2bc">Chat</span>
|
||||
</h1>
|
||||
<img src="screenshots/screenshots.png" class="sm:max-w-lg max-w-screen mb-8" />
|
||||
<div
|
||||
class="w-full md:h-12 min-h-12 bg-white dark:bg-gray-800 bg-opacity-50 border-b dark:border-gray-600 px-4 py-4 md:py-0 mb-8">
|
||||
<nav class="flex flex-wrap h-full justify-center items-center space-x-6 w-full max-w-4xl m-auto">
|
||||
<a href="https://ko-fi.com/krille/posts"
|
||||
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">News</a>
|
||||
<a href="https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md"
|
||||
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">Changelog</a>
|
||||
<a href="https://github.com/krille-chan/fluffychat/wiki"
|
||||
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">Wiki</a>
|
||||
|
||||
<div class="max-w-lg mb-8 flex justify-center flex-wrap">
|
||||
<a href="https://github.com/krille-chan/fluffychat"
|
||||
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">Code</a>
|
||||
<div class="md:flex-grow"> </div>
|
||||
<a href='https://ko-fi.com/C1C86VN53' target='_blank' class="m-2 hover:scale-110 transition-transform "><img
|
||||
class="h-7" src='https://storage.ko-fi.com/cdn/kofi2.png?v=3' border='0'
|
||||
alt='Buy Me a Coffee at ko-fi.com' /></a>
|
||||
<a href="https://mastodon.art/@krille" rel="me" class="m-2 hover:scale-110 transition-transform "><img
|
||||
src="mastodon.svg" class="h-7" /></a>
|
||||
</nav>
|
||||
</div>
|
||||
<img src="info-logo.png" alt="FluffyChat Logo" class="h-56" />
|
||||
<p class="text-xl dark:text-gray-200 text-gray-700 mb-8">The cutest messenger in [<a href="https://matrix.org"
|
||||
target="_blank" class="text-xl underline hover:text-purple-800 dark:hover:text-purple-400">matrix</a>]
|
||||
</p>
|
||||
|
||||
<img src="screenshots/screenshots.png" alt="Mobile and desktop screenshots" class="max-w-xl mb-16 w-full px-8" />
|
||||
|
||||
<div class="max-w-lg mb-16 flex justify-center flex-wrap">
|
||||
<a href="https://apps.apple.com/app/fluffychat/id1551469600"><img src="appstore-badge.png"
|
||||
class="w-36 pr-2 mb-2 inline hover:scale-105 transition-transform"></a>
|
||||
<a href="https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat"><img src="google-play-badge.png"
|
||||
|
|
@ -52,68 +66,115 @@
|
|||
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
|
||||
</div>
|
||||
|
||||
<div class="flex mb-8 justify-center content-center">
|
||||
<a rel="me"
|
||||
class="inline-block text-indigo-500 no-underline hover:text-indigo-900 hover:scale-105 transition-all text-center h-auto p-4"
|
||||
rel="me" href="https://mastodon.art/@krille">
|
||||
<svg class="fill-current h-6" viewBox="0 0 1000 1000" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
|
||||
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
||||
<clipPath id="_clip1">
|
||||
<rect x="33.6" y="-0.035" width="932.844" height="1000" />
|
||||
</clipPath>
|
||||
<g clip-path="url(#_clip1)">
|
||||
<path
|
||||
d="M946.586,599.455c-13.713,70.541 -122.816,147.742 -248.121,162.703c-65.341,7.796 -129.674,14.962 -198.275,11.815c-112.191,-5.139 -200.716,-26.776 -200.716,-26.776c0,10.92 0.673,21.319 2.02,31.044c14.586,110.711 109.787,117.344 199.967,120.436c91.021,3.114 172.068,-22.44 172.068,-22.44l3.74,82.281c0,0 -63.666,34.185 -177.079,40.473c-62.539,3.437 -140.192,-1.573 -230.636,-25.511c-196.158,-51.916 -229.893,-260.996 -235.055,-473.143c-1.573,-62.987 -0.603,-122.381 -0.603,-172.056c0,-216.931 142.142,-280.516 142.142,-280.516c71.672,-32.914 194.655,-46.755 322.508,-47.8l3.142,0c127.853,1.045 250.917,14.886 322.583,47.8c0,0 142.138,63.585 142.138,280.516c0,0 1.783,160.053 -19.823,271.174"
|
||||
style="fill-rule:nonzero;" />
|
||||
<path
|
||||
d="M798.748,345.11l0,262.667l-104.07,0l0,-254.946c0,-53.743 -22.614,-81.021 -67.847,-81.021c-50.012,0 -75.077,32.359 -75.077,96.343l0,139.547l-103.457,0l0,-139.547c0,-63.984 -25.07,-96.343 -75.082,-96.343c-45.233,0 -67.847,27.278 -67.847,81.021l0,254.946l-104.07,0l0,-262.667c0,-53.683 13.669,-96.343 41.127,-127.904c28.314,-31.561 65.395,-47.741 111.425,-47.741c53.256,0 93.585,20.468 120.251,61.41l25.922,43.451l25.927,-43.451c26.66,-40.942 66.99,-61.41 120.251,-61.41c46.025,0 83.106,16.18 111.425,47.741c27.453,31.561 41.122,74.221 41.122,127.904"
|
||||
style="fill:#fff;fill-rule:nonzero;" />
|
||||
</g>
|
||||
</svg>
|
||||
</a>
|
||||
<a class="inline-block text-indigo-500 no-underline hover:text-indigo-900 hover:scale-105 transition-all text-center h-auto p-4"
|
||||
href="https://matrix.to/#/#fluffychat:matrix.org">
|
||||
<svg class="fill-current h-6" enable-background="new -91 49.217 56.693 56.693" id="Layer_1" version="1.1"
|
||||
viewBox="-91 49.217 56.693 56.693" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<path
|
||||
d="M-38.3289,79.8244c-0.7526-2.2362-3.1756-3.4388-5.4117-2.6861l-4.5351,1.5264l-3.0737-9.1321l4.4169-1.4866 c2.2362-0.7526,3.4388-3.1756,2.6861-5.4117c-0.7526-2.2362-3.1756-3.4388-5.4117-2.6861l-4.4168,1.4866l-1.4877-4.4201 c-0.7527-2.2362-3.1756-3.4388-5.4117-2.6861v0c-2.2362,0.7526-3.4388,3.1756-2.6861,5.4117l1.4877,4.4201l-9.3246,3.1385 l-1.4697-4.3666c-0.7527-2.2362-3.1756-3.4388-5.4117-2.6861c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117l1.4697,4.3666 l-4.445,1.4961c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117v0c0.7526,2.2362,3.1756,3.4388,5.4117,2.6861l4.445-1.4961 l3.0737,9.1321l-4.3268,1.4563c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117c0.7526,2.2362,3.1756,3.4388,5.4117,2.6861 l4.3268-1.4563l1.5778,4.6877c0.7527,2.2362,3.1756,3.4388,5.4117,2.6861c2.2362-0.7527,3.4388-3.1756,2.6861-5.4117l-1.5778-4.6877 l9.3246-3.1385l1.5598,4.6342c0.7527,2.2362,3.1756,3.4388,5.4117,2.6861c2.2362-0.7527,3.4388-3.1756,2.6861-5.4117l-1.5598-4.6342 l4.5351-1.5264C-38.7789,84.4835-37.5762,82.0606-38.3289,79.8244z M-65.6982,84.5288l-3.0737-9.1321l9.3246-3.1385l3.0737,9.1321 L-65.6982,84.5288z" />
|
||||
</svg>
|
||||
</a>
|
||||
<a class="inline-block no-underline hover:scale-105 transition-all text-center h-auto p-4"
|
||||
href="https://ko-fi.com/krille">
|
||||
<img src="kofi_button_dark.png" class="h-6 fill-current" />
|
||||
</a>
|
||||
<div class="grid md:grid-cols-3 md:grid-rows-3 max-w-4xl justify-center w-full mb-16">
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated dancing woman" loading="lazy" src="feature1.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Easy to use</h1>
|
||||
<p class="text-center dark:text-white">FluffyChat is designed to be as easy to use as possible. No one
|
||||
should be left behind.</p>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated pencil" loading="lazy" src="feature2.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Material You</h1>
|
||||
<p class="text-center dark:text-white">The well polished design is based on Material You and works great on
|
||||
all platforms.</p>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated mechanical arm" loading="lazy" src="feature3.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Secure</h1>
|
||||
<p class="text-center dark:text-white">With end-to-end encryption, cross-signing and encrypted backups,
|
||||
FluffyChat is one of the most secure messenger out there.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated planet earth" loading="lazy" src="feature4.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Decentral</h1>
|
||||
<p class="text-center dark:text-white">You can choose the <a href="https://joinmatrix.org"
|
||||
class="underline hover:text-purple-800 dark:hover:text-purple-400">server</a> you want to use or
|
||||
even <a href="https://matrix.org/ecosystem/servers/"
|
||||
class="underline hover:text-purple-800 dark:hover:text-purple-400">self-host</a> your own!</p>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated bell" loading="lazy" src="feature5.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Push Notifications</h1>
|
||||
<p class="text-center dark:text-white">You can choose between Firebase Cloud Messaging or the more privacy
|
||||
focused <a href="https://unifiedpush.org"
|
||||
class="underline hover:text-purple-800 dark:hover:text-purple-400">Unified Push</a>.</p>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated rocket" loading="lazy" src="feature6.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Spaces</h1>
|
||||
<p class="text-center dark:text-white">With spaces you can join or create a community which organizes chats
|
||||
and users. Using sub-spaces you can even nest your communities.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated glass sphere" loading="lazy" src="feature7.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Video calls</h1>
|
||||
<p class="text-center dark:text-white">Still an experimental feature but you can already try out video and
|
||||
audio calls, compatible with other [matrix] clients.</p>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated chick" loading="lazy" src="feature8.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Stickers</h1>
|
||||
<p class="text-center dark:text-white">Create your own sticker sets and share them with your friends. You
|
||||
can even use them as inline emojis.</p>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center items-center p-8">
|
||||
<img alt="Animated whoa emoji" loading="lazy" src="feature9.gif" class="h-32" />
|
||||
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Compatible</h1>
|
||||
<p class="text-center dark:text-white">FluffyChat is compatible with any other [matrix] client like <a
|
||||
href="https://element.io"
|
||||
class="underline hover:text-purple-800 dark:hover:text-purple-400">Element</a>,
|
||||
<a href="https://nheko-reborn.github.io/"
|
||||
class="underline hover:text-purple-800 dark:hover:text-purple-400">Nheko</a>, <a
|
||||
href="https://cinny.in" class="underline hover:text-purple-800 dark:hover:text-purple-400">Cinny</a>
|
||||
or <a href="https://apps.kde.org/de/neochat/"
|
||||
class="underline hover:text-purple-800 dark:hover:text-purple-400">NeoChat</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Footer-->
|
||||
<div class="w-full text-sm text-center max-w-lg">
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://github.com/krille-chan/fluffychat">Source
|
||||
code</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://github.com/krille-chan/fluffychat/blob/main/PRIVACY.md">Privacy</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md">Changelog</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://hosted.weblate.org/projects/fluffychat/">Translations</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://github.com/krille-chan/fluffychat/blob/main/docs/fdroid_repo.md">FluffyChat F-Droid
|
||||
repository</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://keys.mailvelope.com/pks/lookup?op=get&search=christian-pauly%40posteo.de">Contact</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
|
||||
href="https://krillefear.gitlab.io">Created
|
||||
by Krille Fear</a>
|
||||
<div class="w-full bg-white dark:bg-gray-800 bg-opacity-50 border-t dark:border-gray-600 flex justify-center">
|
||||
<footer class="w-full text-center max-w-4xl p-4 text-slate-700 dark:text-slate-200">
|
||||
|
||||
|
||||
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://liberapay.com/KrilleChritzelius">Liberapay</a>
|
||||
-
|
||||
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://github.com/krille-chan/fluffychat">Source
|
||||
code</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://github.com/krille-chan/fluffychat/blob/main/PRIVACY.md">Privacy</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md">Changelog</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://hosted.weblate.org/projects/fluffychat/">Translations</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://googlefonts.github.io/noto-emoji-animation/">Noto Animated Emojis</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://keys.mailvelope.com/pks/lookup?op=get&search=christian-pauly%40posteo.de">Contact</a>
|
||||
-
|
||||
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
|
||||
href="https://krille-chan.github.io">Created
|
||||
by Krille-chan</a>
|
||||
|
||||
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
BIN
docs/info-logo.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
10
docs/mastodon.svg
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<svg width="75" height="79" viewBox="0 0 75 79" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M73.8393 17.4898C72.6973 9.00165 65.2994 2.31235 56.5296 1.01614C55.05 0.797115 49.4441 0 36.4582 0H36.3612C23.3717 0 20.585 0.797115 19.1054 1.01614C10.5798 2.27644 2.79399 8.28712 0.904997 16.8758C-0.00358524 21.1056 -0.100549 25.7949 0.0682394 30.0965C0.308852 36.2651 0.355538 42.423 0.91577 48.5665C1.30307 52.6474 1.97872 56.6957 2.93763 60.6812C4.73325 68.042 12.0019 74.1676 19.1233 76.6666C26.7478 79.2728 34.9474 79.7055 42.8039 77.9162C43.6682 77.7151 44.5217 77.4817 45.3645 77.216C47.275 76.6092 49.5123 75.9305 51.1571 74.7385C51.1797 74.7217 51.1982 74.7001 51.2112 74.6753C51.2243 74.6504 51.2316 74.6229 51.2325 74.5948V68.6416C51.2321 68.6154 51.2259 68.5896 51.2142 68.5661C51.2025 68.5426 51.1858 68.522 51.1651 68.5058C51.1444 68.4896 51.1204 68.4783 51.0948 68.4726C51.0692 68.4669 51.0426 68.467 51.0171 68.4729C45.9835 69.675 40.8254 70.2777 35.6502 70.2682C26.7439 70.2682 24.3486 66.042 23.6626 64.2826C23.1113 62.762 22.7612 61.1759 22.6212 59.5646C22.6197 59.5375 22.6247 59.5105 22.6357 59.4857C22.6466 59.4609 22.6633 59.4391 22.6843 59.422C22.7053 59.4048 22.73 59.3929 22.7565 59.3871C22.783 59.3813 22.8104 59.3818 22.8367 59.3886C27.7864 60.5826 32.8604 61.1853 37.9522 61.1839C39.1768 61.1839 40.3978 61.1839 41.6224 61.1516C46.7435 61.008 52.1411 60.7459 57.1796 59.7621C57.3053 59.7369 57.431 59.7154 57.5387 59.6831C65.4861 58.157 73.0493 53.3672 73.8178 41.2381C73.8465 40.7606 73.9184 36.2364 73.9184 35.7409C73.9219 34.0569 74.4606 23.7949 73.8393 17.4898Z" fill="url(#paint0_linear_549_34)"/>
|
||||
<path d="M61.2484 27.0263V48.114H52.8916V27.6475C52.8916 23.3388 51.096 21.1413 47.4437 21.1413C43.4287 21.1413 41.4177 23.7409 41.4177 28.8755V40.0782H33.1111V28.8755C33.1111 23.7409 31.0965 21.1413 27.0815 21.1413C23.4507 21.1413 21.6371 23.3388 21.6371 27.6475V48.114H13.2839V27.0263C13.2839 22.7176 14.384 19.2946 16.5843 16.7572C18.8539 14.2258 21.8311 12.926 25.5264 12.926C29.8036 12.926 33.0357 14.5705 35.1905 17.8559L37.2698 21.346L39.3527 17.8559C41.5074 14.5705 44.7395 12.926 49.0095 12.926C52.7013 12.926 55.6784 14.2258 57.9553 16.7572C60.1531 19.2922 61.2508 22.7152 61.2484 27.0263Z" fill="white"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_549_34" x1="37.0692" y1="0" x2="37.0692" y2="79" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6364FF"/>
|
||||
<stop offset="1" stop-color="#563ACC"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
|
@ -1,543 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="390.000000pt" height="390.000000pt" viewBox="0 0 390.000000 390.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,390.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M240 3450 l0 -210 210 0 210 0 0 210 0 210 -210 0 -210 0 0 -210z
|
||||
m360 0 l0 -150 -150 0 -150 0 0 150 0 150 150 0 150 0 0 -150z"/>
|
||||
<path d="M360 3450 l0 -90 90 0 90 0 0 90 0 90 -90 0 -90 0 0 -90z"/>
|
||||
<path d="M780 3630 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30
|
||||
30 -30 27 0 30 3 30 30 l0 30 90 0 90 0 0 30 0 30 -90 0 -90 0 0 -30z"/>
|
||||
<path d="M1080 3600 l0 -60 -60 0 -60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
l-30 0 0 -60 0 -60 -30 0 -30 0 0 -90 0 -90 -120 0 -120 0 0 -60 0 -60 -60 0
|
||||
-60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30
|
||||
l-30 0 0 -60 0 -60 30 0 30 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30
|
||||
30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3
|
||||
-30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30
|
||||
27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0
|
||||
30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30 60 0 60 0 0 30 0 30
|
||||
90 0 90 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 l-30 0
|
||||
0 60 0 60 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30
|
||||
30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30
|
||||
l30 0 0 -60 0 -60 -30 0 c-27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -30 0 -30
|
||||
-90 0 -90 0 0 -30 c0 -27 -3 -30 -30 -30 l-30 0 0 -90 0 -90 -30 0 c-27 0 -30
|
||||
3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 -30 0
|
||||
-30 -90 0 -90 0 0 30 c0 27 -3 30 -30 30 l-30 0 0 -60 0 -60 60 0 60 0 0 -30
|
||||
c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30
|
||||
-30 l0 -30 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27
|
||||
3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0
|
||||
-27 -3 -30 -30 -30 l-30 0 0 -150 0 -150 60 0 60 0 0 -30 0 -30 -60 0 -60 0 0
|
||||
-120 0 -120 30 0 c27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30
|
||||
-30 l0 -30 90 0 90 0 0 -60 0 -60 -30 0 c-27 0 -30 3 -30 30 l0 30 -60 0 -60
|
||||
0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 -3 -30 -30 l0 -30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 l30 0 0 -60 0 -60
|
||||
-30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3
|
||||
30 -30 30 l-30 0 0 -60 0 -60 60 0 60 0 0 30 c0 27 3 30 30 30 l30 0 0 -60 0
|
||||
-60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0
|
||||
27 -3 30 -30 30 l-30 0 0 -60 0 -60 150 0 150 0 0 30 0 30 60 0 60 0 0 -30 c0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30
|
||||
0 27 3 30 30 30 l30 0 0 -150 0 -150 30 0 30 0 0 120 0 120 30 0 30 0 0 -60 0
|
||||
-60 60 0 60 0 0 -60 0 -60 -30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0
|
||||
-30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -60 0 -60 0 0
|
||||
-30 0 -30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30
|
||||
30 -30 l30 0 0 60 0 60 -30 0 c-27 0 -30 3 -30 30 l0 30 60 0 60 0 0 -90 0
|
||||
-90 60 0 60 0 0 60 0 60 -30 0 c-27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3
|
||||
30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30
|
||||
0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0 60 0 0 -30 0 -30 60 0
|
||||
60 0 0 30 0 30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3
|
||||
30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30
|
||||
27 0 30 3 30 30 l0 30 60 0 60 0 0 90 0 90 30 0 c27 0 30 -3 30 -30 0 -27 3
|
||||
-30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0 60 0 60 30 0 30 0 0 -90
|
||||
0 -90 30 0 30 0 0 -90 0 -90 30 0 30 0 0 90 0 90 30 0 c27 0 30 -3 30 -30 0
|
||||
-27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30
|
||||
-30 l0 -30 90 0 90 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27
|
||||
3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0
|
||||
30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3
|
||||
30 -30 30 l-30 0 0 90 0 90 30 0 c27 0 30 -3 30 -30 l0 -30 150 0 150 0 0 -60
|
||||
0 -60 -30 0 c-27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -60 0 -60 30 0 c27 0 30
|
||||
3 30 30 0 27 3 30 30 30 l30 0 0 -60 0 -60 30 0 30 0 0 60 0 60 60 0 60 0 0
|
||||
-60 0 -60 30 0 30 0 0 90 0 90 60 0 60 0 0 30 0 30 -60 0 -60 0 0 -30 c0 -27
|
||||
-3 -30 -30 -30 l-30 0 0 120 0 120 60 0 60 0 0 30 0 30 -90 0 -90 0 0 30 0 30
|
||||
120 0 120 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 3 -30 30 l0 30 60 0 60 0 0 30 0 30 -60 0 -60 0 0 -30 c0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3
|
||||
30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 l30 0 0 60 0 60 -60 0 -60 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 0 -27 3
|
||||
-30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30
|
||||
-30 30 l-30 0 0 60 0 60 -60 0 -60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30
|
||||
-3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -30
|
||||
c0 -27 -3 -30 -30 -30 l-30 0 0 60 0 60 30 0 c27 0 30 3 30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30
|
||||
l0 30 150 0 150 0 0 30 c0 27 -3 30 -30 30 l-30 0 0 60 0 60 -30 0 c-27 0 -30
|
||||
3 -30 30 l0 30 60 0 60 0 0 60 0 60 -30 0 c-27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 l30 0 0 90 0 90 -90 0 -90 0 0 60 0 60 30 0 c27 0 30 3 30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 l0 30 90 0 90 0 0 30 c0 27 -3 30 -30 30 l-30 0 0
|
||||
60 0 60 30 0 30 0 0 60 0 60 -30 0 -30 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30
|
||||
-30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0 60 0 0 -30 0 -30
|
||||
-90 0 -90 0 0 60 0 60 -30 0 -30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 l0
|
||||
-30 60 0 60 0 0 -30 0 -30 -90 0 -90 0 0 30 0 30 -60 0 -60 0 0 60 0 60 30 0
|
||||
30 0 0 60 0 60 30 0 c27 0 30 3 30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 30
|
||||
0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30 90 0 90 0 0
|
||||
60 0 60 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 -30 c0 -27 -3 -30
|
||||
-30 -30 l-30 0 0 60 0 60 -60 0 -60 0 0 -90 0 -90 -60 0 -60 0 0 30 c0 27 -3
|
||||
30 -30 30 l-30 0 0 60 0 60 60 0 60 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30
|
||||
0 -27 -3 -30 -30 -30 l-30 0 0 60 0 60 30 0 30 0 0 150 0 150 -60 0 -60 0 0
|
||||
-30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -60 0 -60 0 0 60 0 60 -30
|
||||
0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30 -60 0
|
||||
-60 0 0 -60 0 -60 -60 0 -60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 l0 30
|
||||
-120 0 -120 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30
|
||||
30 -27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 30 0 30 -90 0 -90 0 0 -30 c0
|
||||
-27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30
|
||||
-30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 30 c0 27
|
||||
3 30 30 30 l30 0 0 60 0 60 30 0 c27 0 30 3 30 30 l0 30 -90 0 -90 0 0 -30 c0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -30 0 -30 60 0 60
|
||||
0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 l-30 0 0
|
||||
-60 0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30
|
||||
30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 -60
|
||||
0 -60 -30 0 -30 0 0 90 0 90 30 0 c27 0 30 3 30 30 l0 30 -60 0 -60 0 0 -30
|
||||
c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30 -90 0 -90 0 0 30 c0 27 3 30
|
||||
30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30
|
||||
l30 0 0 60 0 60 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 l-30 0 0 -60z m1080 -60
|
||||
l0 -60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30
|
||||
30 30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 -3 30 -30 30 l-30 0 0
|
||||
60 0 60 60 0 60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30
|
||||
90 0 90 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 120 0 120
|
||||
0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3
|
||||
-30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30
|
||||
-30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0
|
||||
-27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0 -60 0 -60 -30 0
|
||||
-30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30
|
||||
3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 -3 -30 -30 l0 -30 -60 0 -60 0 0 -30 0 -30 60 0 60 0 0 -30 c0 -27 3 -30
|
||||
30 -30 l30 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0
|
||||
-60 0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 l30 0 0 -90 0 -90
|
||||
-30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
l-30 0 0 -90 0 -90 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30
|
||||
-3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 -30 c0
|
||||
-27 3 -30 30 -30 l30 0 0 240 0 240 60 0 60 0 0 -30 0 -30 90 0 90 0 0 -30 0
|
||||
-30 -90 0 -90 0 0 -30 c0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 30 0 c27 0
|
||||
30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30
|
||||
-30 0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 30 0 30 0 0 -60 0 -60 30 0 c27
|
||||
0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30
|
||||
-3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0 60 0 0 -30
|
||||
0 -30 -90 0 -90 0 0 -30 0 -30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30
|
||||
-3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 -3 -30 -30 0 -27 3 -30 30 -30 l30 0 0 -60 0 -60 -60 0 -60 0 0 90 0 90
|
||||
-30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 -30 0 c-27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30
|
||||
27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
l-30 0 0 60 0 60 -60 0 -60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30
|
||||
l0 30 -90 0 -90 0 0 -30 0 -30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 l30 0 0
|
||||
-60 0 -60 -30 0 -30 0 0 -60 0 -60 30 0 c27 0 30 3 30 30 l0 30 60 0 60 0 0
|
||||
30 c0 27 -3 30 -30 30 l-30 0 0 60 0 60 30 0 30 0 0 -60 0 -60 30 0 c27 0 30
|
||||
-3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0
|
||||
30 -3 30 -30 l0 -30 -60 0 -60 0 0 -30 0 -30 -60 0 -60 0 0 -60 0 -60 -30 0
|
||||
c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 -60 0 -60 -30 0 c-27 0 -30 3
|
||||
-30 30 l0 30 -120 0 -120 0 0 -30 0 -30 -90 0 -90 0 0 -30 0 -30 60 0 60 0 0
|
||||
-30 0 -30 60 0 60 0 0 -30 0 -30 -60 0 -60 0 0 -60 0 -60 -30 0 c-27 0 -30 3
|
||||
-30 30 0 27 -3 30 -30 30 l-30 0 0 -90 0 -90 60 0 60 0 0 30 c0 27 3 30 30 30
|
||||
27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 l30 0
|
||||
0 -90 0 -90 30 0 30 0 0 120 0 120 -30 0 -30 0 0 60 0 60 30 0 c27 0 30 3 30
|
||||
30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 l0 -30 90 0
|
||||
90 0 0 30 c0 27 3 30 30 30 l30 0 0 -90 0 -90 60 0 60 0 0 -30 c0 -27 -3 -30
|
||||
-30 -30 l-30 0 0 -90 0 -90 30 0 c27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3
|
||||
30 30 l0 30 120 0 120 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30
|
||||
-30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30
|
||||
60 0 60 0 0 -30 0 -30 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 l-30 0 0 -60 0
|
||||
-60 -30 0 -30 0 0 -60 0 -60 30 0 30 0 0 -60 0 -60 60 0 60 0 0 -30 0 -30 -60
|
||||
0 -60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 l0 -30 -90 0 -90 0 0
|
||||
30 0 30 -60 0 -60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27
|
||||
3 -30 30 -30 l30 0 0 -90 0 -90 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 l-30 0 0
|
||||
-60 0 -60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3
|
||||
30 30 30 l30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27
|
||||
0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -30 c0 -27 -3 -30 -30 -30 l-30 0 0 60 0
|
||||
60 -30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3
|
||||
30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30
|
||||
30 30 27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0 60 0 60 -30 0 c-27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 l-30
|
||||
0 0 -60 0 -60 -30 0 -30 0 0 90 0 90 30 0 c27 0 30 3 30 30 l0 30 -60 0 -60 0
|
||||
0 60 0 60 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3
|
||||
-30 -30 -30 l-30 0 0 -90 0 -90 -30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0
|
||||
-30 3 -30 30 0 27 3 30 30 30 l30 0 0 60 0 60 90 0 90 0 0 30 0 30 -60 0 -60
|
||||
0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0
|
||||
30 -3 30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 -30 0 c-27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30
|
||||
-3 -30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 -150 0 -150 60 0 60 0 0 -30 0 -30
|
||||
-60 0 -60 0 0 30 0 30 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30
|
||||
-30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3
|
||||
-30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -30 c0 -27
|
||||
3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27
|
||||
-3 30 -30 30 l-30 0 0 60 0 60 -30 0 -30 0 0 60 0 60 30 0 30 0 0 90 0 90 -30
|
||||
0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30
|
||||
-30 -30 l-30 0 0 -60 0 -60 -30 0 -30 0 0 -60 0 -60 30 0 c27 0 30 3 30 30 0
|
||||
27 3 30 30 30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30
|
||||
-30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 -30 0 c-27 0 -30 3 -30 30 0
|
||||
27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3
|
||||
30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 90 0 90 -30 0 c-27 0
|
||||
-30 -3 -30 -30 l0 -30 -90 0 -90 0 0 -30 0 -30 -60 0 -60 0 0 30 c0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 l0 30 60 0 60 0 0
|
||||
-30 0 -30 -60 0 -60 0 0 -30 0 -30 60 0 60 0 0 -30 0 -30 150 0 150 0 0 60 0
|
||||
60 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 -90 0 -90 0 0 90 0 90 30 0 c27 0 30 3
|
||||
30 30 l0 30 60 0 60 0 0 60 0 60 30 0 c27 0 30 3 30 30 l0 30 -60 0 -60 0 0
|
||||
30 0 30 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30
|
||||
30 -30 27 0 30 -3 30 -30 l0 -30 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 l-30 0
|
||||
0 -90 0 -90 -120 0 -120 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30
|
||||
30 30 27 0 30 3 30 30 l0 30 -90 0 -90 0 0 30 0 30 60 0 60 0 0 30 0 30 60 0
|
||||
60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0 60 0 0
|
||||
120 0 120 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 -120 0 -120 0 0 30 c0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27
|
||||
0 30 3 30 30 0 27 3 30 30 30 l30 0 0 90 0 90 -30 0 -30 0 0 60 0 60 -30 0
|
||||
c-27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 l0 30 60 0 60 0 0 30 c0
|
||||
27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 30 c0 27 3 30 30 30
|
||||
27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0
|
||||
30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3
|
||||
30 30 l0 30 60 0 60 0 0 30 0 30 -90 0 -90 0 0 60 0 60 -30 0 -30 0 0 -60 0
|
||||
-60 -30 0 -30 0 0 60 0 60 30 0 c27 0 30 3 30 30 l0 30 150 0 150 0 0 90 0 90
|
||||
60 0 60 0 0 60 0 60 30 0 c27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30
|
||||
0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0 60 0 0 -90 0 -90 30 0
|
||||
30 0 0 90 0 90 30 0 30 0 0 -60 0 -60 30 0 30 0 0 150 0 150 -30 0 c-27 0 -30
|
||||
3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 60 0 60 0 0 -30 c0 -27 3 -30 30
|
||||
-30 l30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3
|
||||
30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 60 0 60
|
||||
-30 0 c-27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0 -60 0 -60 30 0 c27 0 30 -3 30
|
||||
-30 l0 -30 150 0 150 0 0 -60 0 -60 90 0 90 0 0 30 0 30 -60 0 -60 0 0 60 0
|
||||
60 30 0 c27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27
|
||||
0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 90 0 90 -30 0 c-27 0 -30 -3 -30
|
||||
-30 l0 -30 -90 0 -90 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30
|
||||
30 l-30 0 0 60 0 60 30 0 30 0 0 -60z m-120 -90 c0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m-960 -60 c0 -27 -3 -30 -30
|
||||
-30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m720 -90 l0 -60
|
||||
-30 0 -30 0 0 60 0 60 30 0 30 0 0 -60z m240 -30 l0 -90 -90 0 -90 0 0 90 0
|
||||
90 90 0 90 0 0 -90z m-840 -180 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0
|
||||
27 3 30 30 30 27 0 30 -3 30 -30z m-540 -240 c0 -27 -3 -30 -30 -30 -27 0 -30
|
||||
3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m2700 -900 l0 -90 -90 0 -90 0 0
|
||||
90 0 90 90 0 90 0 0 -90z m-240 -180 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0
|
||||
27 3 30 30 30 l30 0 0 -60 0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30
|
||||
-60 0 -60 0 0 60 0 60 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 -3 30 -30z
|
||||
m420 -30 l0 -60 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 l-30 0 0 -60 0 -60 -30
|
||||
0 -30 0 0 60 0 60 30 0 c27 0 30 3 30 30 l0 30 90 0 90 0 0 -60z m-1020 -390
|
||||
c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z
|
||||
m960 -420 l0 -30 -60 0 -60 0 0 30 0 30 60 0 60 0 0 -30z m-2940 -60 l0 -30
|
||||
-60 0 -60 0 0 30 0 30 60 0 60 0 0 -30z m1500 -240 l0 -90 -90 0 -90 0 0 90 0
|
||||
90 90 0 90 0 0 -90z m1020 60 c0 -27 3 -30 30 -30 l30 0 0 -60 0 -60 -30 0
|
||||
c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 30 0 c27 0 30 -3 30
|
||||
-30z m300 -60 l0 -90 -90 0 -90 0 0 90 0 90 90 0 90 0 0 -90z"/>
|
||||
<path d="M2880 3330 l0 -90 30 0 30 0 0 90 0 90 -30 0 -30 0 0 -90z"/>
|
||||
<path d="M2400 3300 l0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30
|
||||
-27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 -90 0 -90 30 0 30 0 0 -90 0
|
||||
-90 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3
|
||||
30 30 30 27 0 30 -3 30 -30 l0 -30 90 0 90 0 0 -30 c0 -27 -3 -30 -30 -30 -27
|
||||
0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -120 0 -120 0
|
||||
0 60 0 60 -60 0 -60 0 0 -30 0 -30 -60 0 -60 0 0 30 c0 27 3 30 30 30 l30 0 0
|
||||
60 0 60 -30 0 -30 0 0 60 0 60 -60 0 -60 0 0 30 0 30 -90 0 -90 0 0 30 c0 27
|
||||
-3 30 -30 30 -27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 -30 0 -30 -60 0 -60
|
||||
0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0
|
||||
-90 0 -90 -90 0 -90 0 0 -60 0 -60 -30 0 -30 0 0 60 0 60 -60 0 -60 0 0 30 c0
|
||||
27 3 30 30 30 27 0 30 3 30 30 l0 30 -60 0 -60 0 0 -60 0 -60 30 0 c27 0 30
|
||||
-3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -60 0 -60 0 0 30 c0
|
||||
27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30
|
||||
-30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 -30 0 -30
|
||||
60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30
|
||||
-3 30 -30 0 -27 3 -30 30 -30 l30 0 0 -60 0 -60 60 0 60 0 0 -30 0 -30 -90 0
|
||||
-90 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0
|
||||
-30 -3 -30 -30 l0 -30 -60 0 -60 0 0 -30 0 -30 -60 0 -60 0 0 -30 c0 -27 3
|
||||
-30 30 -30 l30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 l0 -30 -90 0 -90 0 0
|
||||
-30 c0 -27 3 -30 30 -30 l30 0 0 -120 0 -120 -30 0 -30 0 0 -90 0 -90 -30 0
|
||||
c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 l30 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3
|
||||
30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30
|
||||
30 l0 30 90 0 90 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 3 -30 30 l0 30 60 0 60 0 0 -90 0 -90 -30 0 -30 0 0 -60 0 -60 90 0
|
||||
90 0 0 -30 0 -30 -60 0 -60 0 0 -30 0 -30 90 0 90 0 0 -60 0 -60 -30 0 c-27 0
|
||||
-30 -3 -30 -30 l0 -30 60 0 60 0 0 -30 0 -30 -90 0 -90 0 0 -60 0 -60 -60 0
|
||||
-60 0 0 -30 0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 l0 30 60
|
||||
0 60 0 0 -60 0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 3
|
||||
30 30 l0 30 60 0 60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0
|
||||
-27 -3 -30 -30 -30 l-30 0 0 -120 0 -120 -60 0 -60 0 0 -30 0 -30 60 0 60 0 0
|
||||
30 0 30 60 0 60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 l30 0 0 90 0 90 30 0 c27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 l0
|
||||
30 -60 0 -60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 l0 30 60 0 60 0 0 -90
|
||||
0 -90 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30
|
||||
30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -120 0
|
||||
-120 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0
|
||||
0 -90 0 -90 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30
|
||||
-30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30
|
||||
30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 -30 0 c-27 0 -30 3
|
||||
-30 30 l0 30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 l0 30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 -3
|
||||
30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 3 -30 30 l0 30 60 0 60 0 0 30 0 30 -60 0 -60 0 0 -30 c0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 120 0 120
|
||||
0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 60
|
||||
0 60 30 0 30 0 0 90 0 90 -30 0 -30 0 0 90 0 90 30 0 c27 0 30 -3 30 -30 0
|
||||
-27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 l0 30 90 0
|
||||
90 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 3 30 30 l0 30 90 0 90 0 0 30 c0 27 3
|
||||
30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30
|
||||
-30 30 l-30 0 0 90 0 90 -30 0 -30 0 0 60 0 60 30 0 c27 0 30 3 30 30 0 27 3
|
||||
30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27
|
||||
0 30 3 30 30 l0 30 -90 0 -90 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30
|
||||
0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3
|
||||
-30 30 l0 30 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30
|
||||
60 0 60 0 0 120 0 120 30 0 30 0 0 60 0 60 -30 0 -30 0 0 60 0 60 -60 0 -60 0
|
||||
0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 l0 30
|
||||
-60 0 -60 0 0 -30 c0 -27 -3 -30 -30 -30 l-30 0 0 90 0 90 30 0 c27 0 30 -3
|
||||
30 -30 0 -27 3 -30 30 -30 l30 0 0 60 0 60 -90 0 -90 0 0 -60z m0 -210 c0 -27
|
||||
3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3
|
||||
-30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3
|
||||
30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27
|
||||
-3 -30 -30 -30 l-30 0 0 60 0 60 -30 0 c-27 0 -30 3 -30 30 l0 30 60 0 60 0 0
|
||||
-30z m-600 -120 l0 -30 -60 0 -60 0 0 -60 0 -60 -30 0 -30 0 0 -60 0 -60 30 0
|
||||
c27 0 30 -3 30 -30 l0 -30 -60 0 -60 0 0 -30 0 -30 60 0 60 0 0 -30 c0 -27 3
|
||||
-30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 l0 30
|
||||
-60 0 -60 0 0 30 0 30 -120 0 -120 0 0 -30 0 -30 60 0 60 0 0 -30 c0 -27 3
|
||||
-30 30 -30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27
|
||||
0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30
|
||||
-3 30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 30 0 c27 0 30 3 30 30 0
|
||||
27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30
|
||||
-30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 30 0 30 0 0 90
|
||||
0 90 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0
|
||||
27 3 30 30 30 l30 0 0 90 0 90 30 0 c27 0 30 3 30 30 l0 30 60 0 60 0 0 -30
|
||||
c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30
|
||||
-30 l0 -30 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 l30 0 0 -60 0 -60 30 0 30
|
||||
0 0 60 0 60 30 0 30 0 0 -60 0 -60 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0
|
||||
30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3
|
||||
30 30 l0 30 90 0 90 0 0 -30 0 -30 -90 0 -90 0 0 -30 0 -30 90 0 90 0 0 -60 0
|
||||
-60 -90 0 -90 0 0 -60 0 -60 30 0 c27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0
|
||||
-120 0 -120 60 0 60 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30
|
||||
l30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 l-30
|
||||
0 0 60 0 60 30 0 30 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 -60 0
|
||||
-60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -60 0 -60 0 0 -30
|
||||
0 -30 -120 0 -120 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30
|
||||
-120 0 -120 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30
|
||||
-30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30
|
||||
30 l-30 0 0 -90 0 -90 -30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30
|
||||
3 -30 30 l0 30 -60 0 -60 0 0 90 0 90 30 0 c27 0 30 3 30 30 l0 30 60 0 60 0
|
||||
0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0 90 0 90 -30 0
|
||||
-30 0 0 -60 0 -60 -60 0 -60 0 0 30 c0 27 3 30 30 30 l30 0 0 60 0 60 -30 0
|
||||
c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 27 0 30 3 30 30 l0 30 -60 0 -60 0 0 -30 0 -30 -60 0 -60 0 0 30 0 30 60 0
|
||||
60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30
|
||||
-3 -30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 -60 0 -60 0 0 -30 0 -30
|
||||
120 0 120 0 0 -90 0 -90 -30 0 -30 0 0 -90 0 -90 30 0 c27 0 30 -3 30 -30 0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 l30 0 0 -60 0
|
||||
-60 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30
|
||||
-30 -30 -27 0 -30 3 -30 30 l0 30 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 -27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0
|
||||
30 3 30 30 0 27 -3 30 -30 30 l-30 0 0 90 0 90 -90 0 -90 0 0 30 0 30 90 0 90
|
||||
0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 30 0 30 60 0
|
||||
60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3
|
||||
-30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 30 0
|
||||
30 60 0 60 0 0 30 0 30 -60 0 -60 0 0 30 0 30 60 0 60 0 0 30 c0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 l30 0 0 90 0
|
||||
90 -60 0 -60 0 0 30 0 30 60 0 60 0 0 30 0 30 60 0 60 0 0 -30 c0 -27 3 -30
|
||||
30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0
|
||||
30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3
|
||||
30 30 l0 30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30
|
||||
30 -30 l30 0 0 60 0 60 90 0 90 0 0 -30z m-540 -240 c0 -27 -3 -30 -30 -30
|
||||
-27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m-360 -60 c0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m1380 -60
|
||||
c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z
|
||||
m300 -360 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30
|
||||
-3 30 -30z m-1740 -60 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30z m600 -60 l0 -90 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 l30 0 0 90 0 90 30 0 30 0 0
|
||||
-90z m-780 0 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0
|
||||
30 -3 30 -30z m60 -180 l0 -90 -90 0 -90 0 0 90 0 90 90 0 90 0 0 -90z m-60
|
||||
-180 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30 90 0 90 0 0 -30z
|
||||
m780 -180 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27
|
||||
0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30
|
||||
l0 30 120 0 120 0 0 -60 0 -60 30 0 30 0 0 90 0 90 60 0 60 0 0 -90 0 -90 -60
|
||||
0 -60 0 0 -60 0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0
|
||||
-30 -3 -30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 -3 30 -30 0
|
||||
-27 3 -30 30 -30 l30 0 0 -60 0 -60 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 60 0
|
||||
60 0 0 -30 0 -30 -60 0 -60 0 0 30 c0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30
|
||||
l0 -30 -60 0 -60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 l0 30 -60 0 -60 0
|
||||
0 30 c0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3
|
||||
-30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3
|
||||
-30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30
|
||||
0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3
|
||||
30 30 30 27 0 30 -3 30 -30z m660 -60 l0 -90 30 0 c27 0 30 -3 30 -30 0 -27
|
||||
-3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27
|
||||
-3 30 -30 30 l-30 0 0 60 0 60 60 0 60 0 0 -90z m-960 0 c0 -27 -3 -30 -30
|
||||
-30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m1080 0 c0 -27 -3
|
||||
-30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z m-960 -60
|
||||
c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30
|
||||
30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z
|
||||
m-60 -150 l0 -60 30 0 c27 0 30 3 30 30 0 27 3 30 30 30 l30 0 0 -60 0 -60
|
||||
-30 0 c-27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0 30 c0 27 3 30 30 30 27 0
|
||||
30 3 30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 30 0 30 0 0 -60z m480 -750 l0
|
||||
-30 -60 0 -60 0 0 30 0 30 60 0 60 0 0 -30z"/>
|
||||
<path d="M1500 2850 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30
|
||||
30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 90 0 90 -30 0 c-27 0
|
||||
-30 -3 -30 -30z"/>
|
||||
<path d="M1860 2850 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1860 2460 l0 -60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0
|
||||
30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 90 0 90 0 0 30 0
|
||||
30 -60 0 -60 0 0 30 0 30 90 0 90 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0
|
||||
27 -3 30 -30 30 -27 0 -30 -3 -30 -30 l0 -30 -90 0 -90 0 0 60 0 60 -30 0 -30
|
||||
0 0 -90 0 -90 -30 0 c-27 0 -30 3 -30 30 0 27 -3 30 -30 30 l-30 0 0 60 0 60
|
||||
-30 0 -30 0 0 -60z"/>
|
||||
<path d="M1080 2190 c0 -27 -3 -30 -30 -30 l-30 0 0 -90 0 -90 -30 0 c-27 0
|
||||
-30 -3 -30 -30 l0 -30 60 0 60 0 0 -30 c0 -27 -3 -30 -30 -30 l-30 0 0 -60 0
|
||||
-60 30 0 c27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30
|
||||
3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30
|
||||
30 0 27 -3 30 -30 30 l-30 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3
|
||||
-30 -30 -30 l-30 0 0 90 0 90 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27
|
||||
0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 -3
|
||||
-30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30
|
||||
-3 -30 -30z m120 -300 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30z m0 -120 l0 -30 -60 0 -60 0 0 30 0 30 60 0 60 0 0 -30z"/>
|
||||
<path d="M1860 2190 c0 -27 -3 -30 -30 -30 l-30 0 0 -90 0 -90 -30 0 c-27 0
|
||||
-30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 l0 -30 -60 0 -60 0 0
|
||||
-60 0 -60 60 0 60 0 0 60 0 60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27
|
||||
0 30 -3 30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 30 0 c27 0 30 3 30
|
||||
30 l0 30 60 0 60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 120 0 120 30 0 30 0 0 90 0
|
||||
90 -30 0 c-27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27
|
||||
-3 30 -30 30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 l-30 0 0 60 0 60 -30
|
||||
0 c-27 0 -30 -3 -30 -30z m180 -240 l0 -90 -90 0 -90 0 0 90 0 90 90 0 90 0 0
|
||||
-90z"/>
|
||||
<path d="M1920 1950 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M2220 2040 l0 -120 -30 0 c-27 0 -30 -3 -30 -30 l0 -30 60 0 60 0 0
|
||||
30 c0 27 3 30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0
|
||||
27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30 60 0 60 0 0 30 0 30 -60 0 -60 0 0
|
||||
30 c0 27 3 30 30 30 27 0 30 3 30 30 l0 30 -90 0 -90 0 0 -120z m120 -30 c0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z"/>
|
||||
<path d="M1440 1860 l0 -60 30 0 30 0 0 60 0 60 -30 0 -30 0 0 -60z"/>
|
||||
<path d="M600 1950 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1560 1410 l0 -30 -60 0 -60 0 0 -30 c0 -27 3 -30 30 -30 27 0 30 -3
|
||||
30 -30 l0 -30 90 0 90 0 0 30 c0 27 3 30 30 30 l30 0 0 60 0 60 -30 0 c-27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1800 1170 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0
|
||||
60 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1200 3270 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M2640 3270 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1320 3090 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1440 3090 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M2700 2970 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3060 2580 l0 -60 -30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30
|
||||
l30 0 0 -60 0 -60 30 0 c27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 60 0
|
||||
60 60 0 60 0 0 30 0 30 -60 0 -60 0 0 90 0 90 -60 0 -60 0 0 -60z m60 -90 c0
|
||||
-27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30
|
||||
0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z"/>
|
||||
<path d="M2940 2340 l0 -60 30 0 30 0 0 60 0 60 -30 0 -30 0 0 -60z"/>
|
||||
<path d="M2820 2130 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M2700 1470 c0 -27 -3 -30 -30 -30 l-30 0 0 -60 0 -60 30 0 c27 0 30
|
||||
-3 30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30
|
||||
30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0
|
||||
30 -60 0 -60 0 0 -30z m60 -60 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27
|
||||
3 30 30 30 27 0 30 -3 30 -30z"/>
|
||||
<path d="M600 1230 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3060 1230 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 l0 -30 -60 0 -60
|
||||
0 0 -60 0 -60 30 0 c27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3
|
||||
30 30 30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 l30 0 0 60 0 60 30 0 c27 0 30
|
||||
3 30 30 l0 30 -120 0 -120 0 0 -30z"/>
|
||||
<path d="M2400 1170 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M2700 1140 l0 -60 60 0 60 0 0 -30 c0 -27 -3 -30 -30 -30 -27 0 -30
|
||||
-3 -30 -30 0 -27 3 -30 30 -30 l30 0 0 -60 0 -60 -30 0 c-27 0 -30 3 -30 30 0
|
||||
27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0
|
||||
27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 -3 -30 -30 0
|
||||
-27 -3 -30 -30 -30 l-30 0 0 -90 0 -90 60 0 60 0 0 30 0 30 60 0 60 0 0 -60 0
|
||||
-60 60 0 60 0 0 30 0 30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30 0
|
||||
27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0
|
||||
27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 l0 30
|
||||
-90 0 -90 0 0 -60z m-120 -150 c0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27
|
||||
3 30 30 30 27 0 30 -3 30 -30z m300 0 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30
|
||||
0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30
|
||||
30 0 27 3 30 30 30 27 0 30 -3 30 -30z"/>
|
||||
<path d="M2340 990 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3120 930 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30
|
||||
l30 0 0 60 0 60 -60 0 -60 0 0 -30z"/>
|
||||
<path d="M1320 870 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M2640 690 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30
|
||||
27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30 -27
|
||||
0 -30 -3 -30 -30z"/>
|
||||
<path d="M1920 3270 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3240 1950 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3060 1650 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1920 630 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3240 630 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M1320 3630 c0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 -3 30 -30 0 -27 3 -30 30 -30 27 0 30 -3 30 -30 0 -27 3 -30 30
|
||||
-30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 3 -30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 -3 30 -30 30 -27 0
|
||||
-30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3 -30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M3240 3450 l0 -210 210 0 210 0 0 210 0 210 -210 0 -210 0 0 -210z
|
||||
m360 0 l0 -150 -150 0 -150 0 0 150 0 150 150 0 150 0 0 -150z"/>
|
||||
<path d="M3360 3450 l0 -90 90 0 90 0 0 90 0 90 -90 0 -90 0 0 -90z"/>
|
||||
<path d="M3540 2970 l0 -30 60 0 60 0 0 30 0 30 -60 0 -60 0 0 -30z"/>
|
||||
<path d="M3600 1530 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 l0 -30 60 0
|
||||
60 0 0 60 0 60 -30 0 c-27 0 -30 -3 -30 -30z"/>
|
||||
<path d="M240 450 l0 -210 210 0 210 0 0 210 0 210 -210 0 -210 0 0 -210z
|
||||
m360 0 l0 -150 -150 0 -150 0 0 150 0 150 150 0 150 0 0 -150z"/>
|
||||
<path d="M360 450 l0 -90 90 0 90 0 0 90 0 90 -90 0 -90 0 0 -90z"/>
|
||||
<path d="M3540 570 l0 -30 60 0 60 0 0 30 0 30 -60 0 -60 0 0 -30z"/>
|
||||
<path d="M2280 510 l0 -30 -60 0 -60 0 0 -30 0 -30 -60 0 -60 0 0 -60 0 -60
|
||||
-30 0 c-27 0 -30 -3 -30 -30 0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 3 30 30
|
||||
30 27 0 30 -3 30 -30 l0 -30 60 0 60 0 0 30 c0 27 3 30 30 30 27 0 30 3 30 30
|
||||
0 27 3 30 30 30 l30 0 0 90 0 90 -30 0 c-27 0 -30 -3 -30 -30z m-60 -120 c0
|
||||
-27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 -3 -30 -30 -30 -27 0 -30 3
|
||||
-30 30 0 27 3 30 30 30 27 0 30 3 30 30 0 27 3 30 30 30 27 0 30 -3 30 -30z"/>
|
||||
<path d="M1260 300 l0 -60 30 0 30 0 0 60 0 60 -30 0 -30 0 0 -60z"/>
|
||||
<path d="M2400 330 c0 -27 -3 -30 -30 -30 -27 0 -30 -3 -30 -30 0 -27 3 -30
|
||||
30 -30 27 0 30 3 30 30 l0 30 90 0 90 0 0 30 0 30 -90 0 -90 0 0 -30z"/>
|
||||
<path d="M3600 270 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
|
||||
-27 0 -30 -3 -30 -30z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 38 KiB |
|
|
@ -21,6 +21,6 @@
|
|||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>11.0</string>
|
||||
<string>12.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -156,7 +156,8 @@ GEM
|
|||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.2.5)
|
||||
rexml (3.2.8)
|
||||
strscan (>= 3.0.9)
|
||||
rouge (2.0.7)
|
||||
ruby2_keywords (0.0.4)
|
||||
rubyzip (2.3.0)
|
||||
|
|
@ -169,6 +170,7 @@ GEM
|
|||
simctl (1.6.8)
|
||||
CFPropertyList
|
||||
naturally
|
||||
strscan (3.1.0)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,12 @@ post_install do |installer|
|
|||
installer.pods_project.targets.each do |target|
|
||||
flutter_additional_ios_build_settings(target)
|
||||
target.build_configurations.each do |config|
|
||||
# ensure all dependencies are using SQLCipher instead of SQLite
|
||||
xcconfig_path = config.base_configuration_reference.real_path
|
||||
xcconfig = File.read(xcconfig_path)
|
||||
new_xcconfig = xcconfig.sub(' -l"sqlite3"', '')
|
||||
File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
|
||||
|
||||
config.build_settings['ENABLE_BITCODE'] = 'NO'
|
||||
|
||||
# see https://github.com/flutter-webrtc/flutter-webrtc/issues/1054
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1240;
|
||||
LastUpgradeCheck = 1430;
|
||||
LastUpgradeCheck = 1510;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
97C146ED1CF9000F007C117D = {
|
||||
|
|
@ -457,7 +457,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
|
|
@ -546,7 +546,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
|
|
@ -595,7 +595,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1430"
|
||||
LastUpgradeVersion = "1510"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
|||
|
|
@ -47,7 +47,9 @@ abstract class AppConfig {
|
|||
static bool separateChatTypes = false;
|
||||
static bool autoplayImages = true;
|
||||
static bool sendTypingNotifications = true;
|
||||
static bool sendPublicReadReceipts = true;
|
||||
static bool? sendOnEnter;
|
||||
static bool showPresences = true;
|
||||
static bool experimentalVoip = false;
|
||||
static const bool hideTypingUsernames = false;
|
||||
static const bool hideAllStateEvents = false;
|
||||
|
|
@ -55,9 +57,6 @@ abstract class AppConfig {
|
|||
static const String deepLinkPrefix = 'im.fluffychat://chat/';
|
||||
static const String schemePrefix = 'matrix:';
|
||||
static const String pushNotificationsChannelId = 'fluffychat_push';
|
||||
static const String pushNotificationsChannelName = 'FluffyChat push channel';
|
||||
static const String pushNotificationsChannelDescription =
|
||||
'Push notifications for FluffyChat';
|
||||
static const String pushNotificationsAppId = 'chat.fluffy.fluffychat';
|
||||
static const String pushNotificationsGatewayUrl =
|
||||
'https://push.fluffychat.im/_matrix/push/v1/notify';
|
||||
|
|
@ -65,7 +64,7 @@ abstract class AppConfig {
|
|||
static const String emojiFontName = 'Noto Emoji';
|
||||
static const String emojiFontUrl =
|
||||
'https://github.com/googlefonts/noto-emoji/';
|
||||
static const double borderRadius = 16.0;
|
||||
static const double borderRadius = 18.0;
|
||||
static const double columnWidth = 360.0;
|
||||
static final Uri homeserverList = Uri(
|
||||
scheme: 'https',
|
||||
|
|
|
|||
|
|
@ -1,17 +1,19 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/pages/archive/archive.dart';
|
||||
import 'package:fluffychat/pages/chat/chat.dart';
|
||||
import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_controller.dart';
|
||||
import 'package:fluffychat/pages/chat_details/chat_details.dart';
|
||||
import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart';
|
||||
import 'package:fluffychat/pages/chat_list/chat_list.dart';
|
||||
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/homeserver_picker/homeserver_picker.dart';
|
||||
import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart';
|
||||
|
|
@ -59,6 +61,7 @@ abstract class AppRoutes {
|
|||
path: '/home',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const HomeserverPicker(),
|
||||
),
|
||||
redirect: loggedInRedirect,
|
||||
|
|
@ -67,6 +70,7 @@ abstract class AppRoutes {
|
|||
path: 'login',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const Login(),
|
||||
),
|
||||
redirect: loggedInRedirect,
|
||||
|
|
@ -77,12 +81,14 @@ abstract class AppRoutes {
|
|||
path: '/logs',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const LogViewer(),
|
||||
),
|
||||
),
|
||||
ShellRoute(
|
||||
pageBuilder: (context, state, child) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
FluffyThemes.isColumnMode(context) &&
|
||||
state.fullPath?.startsWith('/rooms/settings') == false
|
||||
? TwoColumnLayout(
|
||||
|
|
@ -103,6 +109,7 @@ abstract class AppRoutes {
|
|||
redirect: loggedOutRedirect,
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
FluffyThemes.isColumnMode(context)
|
||||
? const EmptyPage()
|
||||
: ChatList(
|
||||
|
|
@ -114,6 +121,7 @@ abstract class AppRoutes {
|
|||
path: 'archive',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const Archive(),
|
||||
),
|
||||
routes: [
|
||||
|
|
@ -121,8 +129,10 @@ abstract class AppRoutes {
|
|||
path: ':roomid',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
ChatPage(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
eventId: state.uri.queryParameters['event'],
|
||||
),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -134,6 +144,7 @@ abstract class AppRoutes {
|
|||
path: 'newprivatechat',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const NewPrivateChat(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -142,6 +153,7 @@ abstract class AppRoutes {
|
|||
path: 'newgroup',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const NewGroup(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -150,6 +162,7 @@ abstract class AppRoutes {
|
|||
path: 'newspace',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const NewSpace(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -157,6 +170,7 @@ abstract class AppRoutes {
|
|||
ShellRoute(
|
||||
pageBuilder: (context, state, child) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
FluffyThemes.isColumnMode(context)
|
||||
? TwoColumnLayout(
|
||||
mainView: const Settings(),
|
||||
|
|
@ -170,6 +184,7 @@ abstract class AppRoutes {
|
|||
path: 'settings',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
FluffyThemes.isColumnMode(context)
|
||||
? const EmptyPage()
|
||||
: const Settings(),
|
||||
|
|
@ -179,6 +194,7 @@ abstract class AppRoutes {
|
|||
path: 'notifications',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const SettingsNotifications(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -187,6 +203,7 @@ abstract class AppRoutes {
|
|||
path: 'style',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const SettingsStyle(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -195,6 +212,7 @@ abstract class AppRoutes {
|
|||
path: 'devices',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const DevicesSettings(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -203,6 +221,7 @@ abstract class AppRoutes {
|
|||
path: 'chat',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const SettingsChat(),
|
||||
),
|
||||
routes: [
|
||||
|
|
@ -210,6 +229,7 @@ abstract class AppRoutes {
|
|||
path: 'emotes',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const EmotesSettings(),
|
||||
),
|
||||
),
|
||||
|
|
@ -221,6 +241,7 @@ abstract class AppRoutes {
|
|||
redirect: loggedOutRedirect,
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const HomeserverPicker(),
|
||||
),
|
||||
routes: [
|
||||
|
|
@ -228,6 +249,7 @@ abstract class AppRoutes {
|
|||
path: 'login',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const Login(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -239,6 +261,7 @@ abstract class AppRoutes {
|
|||
redirect: loggedOutRedirect,
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const SettingsSecurity(),
|
||||
),
|
||||
routes: [
|
||||
|
|
@ -247,6 +270,7 @@ abstract class AppRoutes {
|
|||
pageBuilder: (context, state) {
|
||||
return defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const SettingsPassword(),
|
||||
);
|
||||
},
|
||||
|
|
@ -257,6 +281,7 @@ abstract class AppRoutes {
|
|||
pageBuilder: (context, state) {
|
||||
return defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
SettingsIgnoreList(
|
||||
initialUserId: state.extra?.toString(),
|
||||
),
|
||||
|
|
@ -268,6 +293,7 @@ abstract class AppRoutes {
|
|||
path: '3pid',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const Settings3Pid(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -283,17 +309,31 @@ abstract class AppRoutes {
|
|||
path: ':roomid',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
ChatPage(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
shareText: state.uri.queryParameters['body'],
|
||||
eventId: state.uri.queryParameters['event'],
|
||||
),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'search',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
ChatSearchPage(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
),
|
||||
GoRoute(
|
||||
path: 'encryption',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const ChatEncryptionSettings(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -302,6 +342,7 @@ abstract class AppRoutes {
|
|||
path: 'invite',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
InvitationSelection(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
),
|
||||
|
|
@ -312,15 +353,28 @@ abstract class AppRoutes {
|
|||
path: 'details',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
ChatDetails(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
),
|
||||
),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'access',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
ChatAccessSettings(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
),
|
||||
GoRoute(
|
||||
path: 'members',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
ChatMembersPage(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
),
|
||||
|
|
@ -331,6 +385,7 @@ abstract class AppRoutes {
|
|||
path: 'permissions',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const ChatPermissionsSettings(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -339,6 +394,7 @@ abstract class AppRoutes {
|
|||
path: 'invite',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
InvitationSelection(
|
||||
roomId: state.pathParameters['roomid']!,
|
||||
),
|
||||
|
|
@ -349,6 +405,7 @@ abstract class AppRoutes {
|
|||
path: 'multiple_emotes',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const MultipleEmotesSettings(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -357,6 +414,7 @@ abstract class AppRoutes {
|
|||
path: 'emotes',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const EmotesSettings(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -365,6 +423,7 @@ abstract class AppRoutes {
|
|||
path: 'emotes/:state_key',
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const EmotesSettings(),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
|
|
@ -380,17 +439,23 @@ abstract class AppRoutes {
|
|||
),
|
||||
];
|
||||
|
||||
static Page defaultPageBuilder(BuildContext context, Widget child) =>
|
||||
CustomTransitionPage(
|
||||
child: child,
|
||||
transitionsBuilder: (context, animation, secondaryAnimation, child) =>
|
||||
FluffyThemes.isColumnMode(context)
|
||||
? FadeTransition(opacity: animation, child: child)
|
||||
: CupertinoPageTransition(
|
||||
primaryRouteAnimation: animation,
|
||||
secondaryRouteAnimation: secondaryAnimation,
|
||||
linearTransition: false,
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
static Page defaultPageBuilder(
|
||||
BuildContext context,
|
||||
GoRouterState state,
|
||||
Widget child,
|
||||
) =>
|
||||
FluffyThemes.isColumnMode(context)
|
||||
? CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
restorationId: state.pageKey.value,
|
||||
child: child,
|
||||
transitionsBuilder:
|
||||
(context, animation, secondaryAnimation, child) =>
|
||||
FadeTransition(opacity: animation, child: child),
|
||||
)
|
||||
: MaterialPage(
|
||||
key: state.pageKey,
|
||||
restorationId: state.pageKey.value,
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,13 +17,19 @@ abstract class SettingKeys {
|
|||
static const String unifiedPushRegistered =
|
||||
'chat.fluffy.unifiedpush.registered';
|
||||
static const String unifiedPushEndpoint = 'chat.fluffy.unifiedpush.endpoint';
|
||||
static const String notificationCurrentIds = 'chat.fluffy.notification_ids';
|
||||
static const String ownStatusMessage = 'chat.fluffy.status_msg';
|
||||
static const String dontAskForBootstrapKey =
|
||||
'chat.fluffychat.dont_ask_bootstrap';
|
||||
static const String autoplayImages = 'chat.fluffy.autoplay_images';
|
||||
static const String sendTypingNotifications =
|
||||
'chat.fluffy.send_typing_notifications';
|
||||
static const String sendPublicReadReceipts =
|
||||
'chat.fluffy.send_public_read_receipts';
|
||||
static const String sendOnEnter = 'chat.fluffy.send_on_enter';
|
||||
static const String experimentalVoip = 'chat.fluffy.experimental_voip';
|
||||
static const String showPresences = 'chat.fluffy.show_presences';
|
||||
static const String displayChatDetailsColumn =
|
||||
'chat.fluffy.display_chat_details_column';
|
||||
static const String noEncryptionWarningShown =
|
||||
'chat.fluffy.no_encryption_warning_shown';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ abstract class FluffyThemes {
|
|||
useMaterial3: true,
|
||||
brightness: brightness,
|
||||
colorScheme: colorScheme,
|
||||
textTheme: PlatformInfos.isDesktop || PlatformInfos.isWeb
|
||||
textTheme: PlatformInfos.isDesktop
|
||||
? brightness == Brightness.light
|
||||
? Typography.material2018().black.merge(fallbackTextTheme)
|
||||
: Typography.material2018().white.merge(fallbackTextTheme)
|
||||
|
|
@ -93,18 +93,32 @@ abstract class FluffyThemes {
|
|||
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
|
||||
),
|
||||
),
|
||||
textSelectionTheme: TextSelectionThemeData(
|
||||
selectionColor: colorScheme.onBackground.withAlpha(128),
|
||||
selectionHandleColor: colorScheme.secondary,
|
||||
),
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
border: UnderlineInputBorder(
|
||||
border: OutlineInputBorder(
|
||||
borderSide: BorderSide.none,
|
||||
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
|
||||
),
|
||||
contentPadding: const EdgeInsets.all(12),
|
||||
filled: true,
|
||||
),
|
||||
appBarTheme: AppBarTheme(
|
||||
toolbarHeight: FluffyThemes.isColumnMode(context) ? 72 : 56,
|
||||
shadowColor: Colors.grey.withAlpha(64),
|
||||
surfaceTintColor: colorScheme.background,
|
||||
systemOverlayStyle: getOverlayStyle(brightness, colorScheme),
|
||||
shadowColor: FluffyThemes.isColumnMode(context)
|
||||
? Colors.grey.withAlpha(64)
|
||||
: null,
|
||||
surfaceTintColor:
|
||||
FluffyThemes.isColumnMode(context) ? colorScheme.background : null,
|
||||
systemOverlayStyle: SystemUiOverlayStyle(
|
||||
statusBarColor: Colors.transparent,
|
||||
statusBarIconBrightness: brightness.reversed,
|
||||
statusBarBrightness: brightness,
|
||||
systemNavigationBarIconBrightness: brightness.reversed,
|
||||
systemNavigationBarColor: colorScheme.background,
|
||||
),
|
||||
),
|
||||
textButtonTheme: TextButtonThemeData(
|
||||
style: TextButton.styleFrom(
|
||||
|
|
@ -132,6 +146,9 @@ abstract class FluffyThemes {
|
|||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: colorScheme.secondaryContainer,
|
||||
foregroundColor: colorScheme.onSecondaryContainer,
|
||||
elevation: 0,
|
||||
padding: const EdgeInsets.all(16),
|
||||
textStyle: const TextStyle(fontSize: 16),
|
||||
shape: RoundedRectangleBorder(
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ void main() async {
|
|||
AppLifecycleState.detached == WidgetsBinding.instance.lifecycleState) {
|
||||
// Do not send online presences when app is in background fetch mode.
|
||||
for (final client in clients) {
|
||||
client.backgroundSync = false;
|
||||
client.syncPresence = PresenceType.offline;
|
||||
}
|
||||
|
||||
|
|
@ -94,6 +95,7 @@ class AppStarter with WidgetsBindingObserver {
|
|||
);
|
||||
// Switching to foreground mode needs to reenable send online sync presence.
|
||||
for (final client in clients) {
|
||||
client.backgroundSync = true;
|
||||
client.syncPresence = PresenceType.online;
|
||||
}
|
||||
startGui(clients, store);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/pages/archive/archive.dart';
|
||||
|
|
@ -59,6 +60,8 @@ class ArchiveView extends StatelessWidget {
|
|||
itemBuilder: (BuildContext context, int i) => ChatListItem(
|
||||
controller.archive[i],
|
||||
onForget: () => controller.forgetRoomAction(i),
|
||||
onTap: () => context
|
||||
.go('/rooms/archive/${controller.archive[i].id}'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@ class BootstrapDialogState extends State<BootstrapDialog> {
|
|||
),
|
||||
hintText: L10n.of(context)!.recoveryKey,
|
||||
errorText: _recoveryKeyInputError,
|
||||
errorMaxLines: 2,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
|
|
@ -290,6 +291,7 @@ class BootstrapDialogState extends State<BootstrapDialog> {
|
|||
final key = _recoveryKeyTextEditingController
|
||||
.text
|
||||
.trim();
|
||||
if (key.isEmpty) return;
|
||||
await bootstrap.newSsssKey!.unlock(
|
||||
keyOrPassphrase: key,
|
||||
);
|
||||
|
|
@ -317,6 +319,11 @@ class BootstrapDialogState extends State<BootstrapDialog> {
|
|||
() => _recoveryKeyInputError =
|
||||
e.toLocalizedString(context),
|
||||
);
|
||||
} on FormatException catch (_) {
|
||||
setState(
|
||||
() => _recoveryKeyInputError =
|
||||
L10n.of(context)!.wrongRecoveryKey,
|
||||
);
|
||||
} catch (e, s) {
|
||||
ErrorReporter(
|
||||
context,
|
||||
|
|
@ -351,11 +358,24 @@ class BootstrapDialogState extends State<BootstrapDialog> {
|
|||
onPressed: _recoveryKeyInputLoading
|
||||
? null
|
||||
: () async {
|
||||
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,
|
||||
fullyCapitalizedForMaterial: false,
|
||||
);
|
||||
if (consent != OkCancelResult.ok) return;
|
||||
final req = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => widget.client
|
||||
.userDeviceKeys[widget.client.userID!]!
|
||||
.startVerification(),
|
||||
future: () async {
|
||||
await widget.client.updateUserDeviceKeys();
|
||||
return widget.client
|
||||
.userDeviceKeys[widget.client.userID!]!
|
||||
.startVerification();
|
||||
},
|
||||
);
|
||||
if (req.error != null) return;
|
||||
await KeyVerificationDialog(request: req.result!)
|
||||
|
|
@ -366,7 +386,10 @@ class BootstrapDialogState extends State<BootstrapDialog> {
|
|||
const SizedBox(height: 16),
|
||||
ElevatedButton.icon(
|
||||
style: ElevatedButton.styleFrom(
|
||||
foregroundColor: Colors.red,
|
||||
backgroundColor:
|
||||
Theme.of(context).colorScheme.errorContainer,
|
||||
foregroundColor:
|
||||
Theme.of(context).colorScheme.onErrorContainer,
|
||||
),
|
||||
icon: const Icon(Icons.delete_outlined),
|
||||
label: Text(L10n.of(context)!.recoveryKeyLost),
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||
|
|
@ -18,14 +18,15 @@ import 'package:matrix/matrix.dart';
|
|||
import 'package:record/record.dart';
|
||||
import 'package:scroll_to_index/scroll_to_index.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/setting_keys.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/pages/chat/chat_view.dart';
|
||||
import 'package:fluffychat/pages/chat/event_info_dialog.dart';
|
||||
import 'package:fluffychat/pages/chat/recording_dialog.dart';
|
||||
import 'package:fluffychat/pages/chat_details/chat_details.dart';
|
||||
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
|
||||
import 'package:fluffychat/utils/error_reporter.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
|
|
@ -37,15 +38,16 @@ import '../../utils/localized_exception_extension.dart';
|
|||
import '../../utils/matrix_sdk_extensions/matrix_file_extension.dart';
|
||||
import 'send_file_dialog.dart';
|
||||
import 'send_location_dialog.dart';
|
||||
import 'sticker_picker_dialog.dart';
|
||||
|
||||
class ChatPage extends StatelessWidget {
|
||||
final String roomId;
|
||||
final String? shareText;
|
||||
final String? eventId;
|
||||
|
||||
const ChatPage({
|
||||
super.key,
|
||||
required this.roomId,
|
||||
this.eventId,
|
||||
this.shareText,
|
||||
});
|
||||
|
||||
|
|
@ -65,31 +67,11 @@ class ChatPage extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
return Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: ChatPageWithRoom(
|
||||
key: Key('chat_page_$roomId'),
|
||||
room: room,
|
||||
shareText: shareText,
|
||||
),
|
||||
),
|
||||
if (FluffyThemes.isThreeColumnMode(context) &&
|
||||
room.membership == Membership.join)
|
||||
Container(
|
||||
width: FluffyThemes.columnWidth,
|
||||
clipBehavior: Clip.hardEdge,
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
left: BorderSide(
|
||||
width: 1,
|
||||
color: Theme.of(context).dividerColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: ChatDetails(roomId: roomId),
|
||||
),
|
||||
],
|
||||
return ChatPageWithRoom(
|
||||
key: Key('chat_page_$roomId'),
|
||||
room: room,
|
||||
shareText: shareText,
|
||||
eventId: eventId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -97,11 +79,13 @@ class ChatPage extends StatelessWidget {
|
|||
class ChatPageWithRoom extends StatefulWidget {
|
||||
final Room room;
|
||||
final String? shareText;
|
||||
final String? eventId;
|
||||
|
||||
const ChatPageWithRoom({
|
||||
super.key,
|
||||
required this.room,
|
||||
this.shareText,
|
||||
this.eventId,
|
||||
});
|
||||
|
||||
@override
|
||||
|
|
@ -123,6 +107,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
final AutoScrollController scrollController = AutoScrollController();
|
||||
|
||||
FocusNode inputFocus = FocusNode();
|
||||
StreamSubscription<html.Event>? onFocusSub;
|
||||
|
||||
Timer? typingCoolDown;
|
||||
Timer? typingTimeout;
|
||||
|
|
@ -135,25 +120,32 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
|
||||
void onDragDone(DropDoneDetails details) async {
|
||||
setState(() => dragging = false);
|
||||
final bytesList = await showFutureLoadingDialog(
|
||||
if (details.files.isEmpty) return;
|
||||
final result = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => Future.wait(
|
||||
details.files.map(
|
||||
(xfile) => xfile.readAsBytes(),
|
||||
),
|
||||
),
|
||||
future: () async {
|
||||
final clientConfig = await room.client.getConfig();
|
||||
final maxUploadSize = clientConfig.mUploadSize ?? 100 * 1024 * 1024;
|
||||
final matrixFiles = await Future.wait(
|
||||
details.files.map(
|
||||
(xfile) async {
|
||||
final length = await xfile.length();
|
||||
if (length > maxUploadSize) {
|
||||
throw FileTooBigMatrixException(length, maxUploadSize);
|
||||
}
|
||||
return MatrixFile(
|
||||
bytes: await xfile.readAsBytes(),
|
||||
name: xfile.name,
|
||||
mimeType: xfile.mimeType,
|
||||
).detectFileType;
|
||||
},
|
||||
),
|
||||
);
|
||||
return matrixFiles;
|
||||
},
|
||||
);
|
||||
if (bytesList.error != null) return;
|
||||
|
||||
final matrixFiles = <MatrixFile>[];
|
||||
for (var i = 0; i < bytesList.result!.length; i++) {
|
||||
matrixFiles.add(
|
||||
MatrixFile(
|
||||
bytes: bytesList.result![i],
|
||||
name: details.files[i].name,
|
||||
).detectFileType,
|
||||
);
|
||||
}
|
||||
final matrixFiles = result.result;
|
||||
if (matrixFiles == null || matrixFiles.isEmpty) return;
|
||||
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
|
|
@ -248,6 +240,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
setState(() => _scrolledUp = true);
|
||||
} else if (scrollController.position.pixels <= 0 && _scrolledUp == true) {
|
||||
setState(() => _scrolledUp = false);
|
||||
setReadMarker();
|
||||
}
|
||||
|
||||
if (scrollController.position.pixels == 0 ||
|
||||
|
|
@ -268,18 +261,32 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
void initState() {
|
||||
scrollController.addListener(_updateScrollController);
|
||||
inputFocus.addListener(_inputFocusListener);
|
||||
|
||||
_loadDraft();
|
||||
super.initState();
|
||||
_displayChatDetailsColumn = ValueNotifier(
|
||||
Matrix.of(context).store.getBool(SettingKeys.displayChatDetailsColumn) ??
|
||||
false,
|
||||
);
|
||||
|
||||
sendingClient = Matrix.of(context).client;
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
_tryLoadTimeline();
|
||||
if (kIsWeb) {
|
||||
onFocusSub = html.window.onFocus.listen((_) => setReadMarker());
|
||||
}
|
||||
}
|
||||
|
||||
void _tryLoadTimeline() async {
|
||||
loadTimelineFuture = _getTimeline();
|
||||
readMarkerEventId = widget.eventId;
|
||||
loadTimelineFuture = _getTimeline(eventContextId: readMarkerEventId);
|
||||
try {
|
||||
await loadTimelineFuture;
|
||||
final fullyRead = room.fullyRead;
|
||||
if (fullyRead.isEmpty) return;
|
||||
if (fullyRead.isEmpty) {
|
||||
setReadMarker();
|
||||
return;
|
||||
}
|
||||
if (timeline!.events.any((event) => event.eventId == fullyRead)) {
|
||||
Logs().v('Scroll up to visible event', fullyRead);
|
||||
setReadMarker();
|
||||
|
|
@ -313,6 +320,11 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
int? animateInEventIndex;
|
||||
|
||||
void onInsert(int i) {
|
||||
if (timeline?.events[i].status == EventStatus.synced) {
|
||||
final index = timeline!.events.firstIndexWhereNotError;
|
||||
if (i == index) setReadMarker(eventId: timeline?.events[i].eventId);
|
||||
}
|
||||
|
||||
// setState will be called by updateView() anyway
|
||||
animateInEventIndex = i;
|
||||
}
|
||||
|
|
@ -347,18 +359,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
timeline!.requestKeys(onlineKeyBackupOnly: false);
|
||||
if (room.markedUnread) room.markUnread(false);
|
||||
|
||||
// when the scroll controller is attached we want to scroll to an event id, if specified
|
||||
// and update the scroll controller...which will trigger a request history, if the
|
||||
// "load more" button is visible on the screen
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) async {
|
||||
if (mounted) {
|
||||
final event = GoRouterState.of(context).uri.queryParameters['event'];
|
||||
if (event != null) {
|
||||
scrollToEventId(event);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -367,7 +367,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
if (state != AppLifecycleState.resumed) return;
|
||||
if (!_scrolledUp) return;
|
||||
setReadMarker();
|
||||
}
|
||||
|
||||
|
|
@ -375,20 +374,32 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
|
||||
void setReadMarker({String? eventId}) {
|
||||
if (_setReadMarkerFuture != null) return;
|
||||
if (_scrolledUp) return;
|
||||
if (scrollUpBannerEventId != null) return;
|
||||
if (eventId == null &&
|
||||
!room.hasNewMessages &&
|
||||
room.notificationCount == 0) {
|
||||
return;
|
||||
}
|
||||
if (!Matrix.of(context).webHasFocus) return;
|
||||
|
||||
// Do not send read markers when app is not in foreground
|
||||
if (kIsWeb && !Matrix.of(context).webHasFocus) return;
|
||||
if (!kIsWeb &&
|
||||
WidgetsBinding.instance.lifecycleState != AppLifecycleState.resumed) {
|
||||
return;
|
||||
}
|
||||
|
||||
final timeline = this.timeline;
|
||||
if (timeline == null || timeline.events.isEmpty) return;
|
||||
|
||||
Logs().d('Set read marker...', eventId);
|
||||
// ignore: unawaited_futures
|
||||
_setReadMarkerFuture = timeline.setReadMarker(eventId: eventId).then((_) {
|
||||
_setReadMarkerFuture = timeline
|
||||
.setReadMarker(
|
||||
eventId: eventId,
|
||||
public: AppConfig.sendPublicReadReceipts,
|
||||
)
|
||||
.then((_) {
|
||||
_setReadMarkerFuture = null;
|
||||
});
|
||||
if (eventId == null || eventId == timeline.room.lastEvent?.eventId) {
|
||||
|
|
@ -401,6 +412,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
timeline?.cancelSubscriptions();
|
||||
timeline = null;
|
||||
inputFocus.removeListener(_inputFocusListener);
|
||||
onFocusSub?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
|
@ -583,24 +595,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
);
|
||||
}
|
||||
|
||||
void sendStickerAction() async {
|
||||
final sticker = await showAdaptiveBottomSheet<ImagePackImageContent>(
|
||||
context: context,
|
||||
builder: (c) => StickerPickerDialog(room: room),
|
||||
);
|
||||
if (sticker == null) return;
|
||||
final eventContent = <String, dynamic>{
|
||||
'body': sticker.body,
|
||||
if (sticker.info != null) 'info': sticker.info,
|
||||
'url': sticker.url.toString(),
|
||||
};
|
||||
// send the sticker
|
||||
await room.sendEvent(
|
||||
eventContent,
|
||||
type: EventTypes.Sticker,
|
||||
);
|
||||
}
|
||||
|
||||
void voiceMessageAction() async {
|
||||
final scaffoldMessenger = ScaffoldMessenger.of(context);
|
||||
if (PlatformInfos.isAndroid) {
|
||||
|
|
@ -616,7 +610,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
}
|
||||
}
|
||||
|
||||
if (await Record().hasPermission() == false) return;
|
||||
if (await AudioRecorder().hasPermission() == false) return;
|
||||
final result = await showDialog<RecordingResult>(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
|
|
@ -657,6 +651,10 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
});
|
||||
}
|
||||
|
||||
void hideEmojiPicker() {
|
||||
setState(() => showEmojiPicker = false);
|
||||
}
|
||||
|
||||
void emojiPickerAction() {
|
||||
if (showEmojiPicker) {
|
||||
inputFocus.requestFocus();
|
||||
|
|
@ -765,7 +763,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
);
|
||||
}
|
||||
for (final event in selectedEvents) {
|
||||
await event.remove();
|
||||
await event.cancelSend();
|
||||
}
|
||||
setState(selectedEvents.clear);
|
||||
} catch (e, s) {
|
||||
|
|
@ -815,7 +813,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
);
|
||||
}
|
||||
} else {
|
||||
await event.remove();
|
||||
await event.cancelSend();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
@ -937,7 +935,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
);
|
||||
});
|
||||
await loadTimelineFuture;
|
||||
setReadMarker();
|
||||
}
|
||||
scrollController.jumpTo(0);
|
||||
}
|
||||
|
|
@ -1135,9 +1132,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
if (choice == 'camera-video') {
|
||||
openVideoCameraAction();
|
||||
}
|
||||
if (choice == 'sticker') {
|
||||
sendStickerAction();
|
||||
}
|
||||
if (choice == 'location') {
|
||||
sendLocationAction();
|
||||
}
|
||||
|
|
@ -1182,7 +1176,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
|
||||
void onInputBarChanged(String text) {
|
||||
if (_inputTextIsEmpty != text.isEmpty) {
|
||||
setReadMarker();
|
||||
setState(() {
|
||||
_inputTextIsEmpty = text.isEmpty;
|
||||
});
|
||||
|
|
@ -1271,25 +1264,12 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
);
|
||||
if (callType == null) return;
|
||||
|
||||
final success = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () =>
|
||||
Matrix.of(context).voipPlugin!.voip.requestTurnServerCredentials(),
|
||||
);
|
||||
if (success.result != null) {
|
||||
final voipPlugin = Matrix.of(context).voipPlugin;
|
||||
try {
|
||||
await voipPlugin!.voip.inviteToCall(room.id, callType);
|
||||
} catch (e) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(e.toLocalizedString(context))),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
await showOkAlertDialog(
|
||||
context: context,
|
||||
title: L10n.of(context)!.unavailable,
|
||||
okLabel: L10n.of(context)!.next,
|
||||
final voipPlugin = Matrix.of(context).voipPlugin;
|
||||
try {
|
||||
await voipPlugin!.voip.inviteToCall(room, callType);
|
||||
} catch (e) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(e.toLocalizedString(context))),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1303,8 +1283,69 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
editEvent = null;
|
||||
});
|
||||
|
||||
late final ValueNotifier<bool> _displayChatDetailsColumn;
|
||||
|
||||
void toggleDisplayChatDetailsColumn() async {
|
||||
await Matrix.of(context).store.setBool(
|
||||
SettingKeys.displayChatDetailsColumn,
|
||||
!_displayChatDetailsColumn.value,
|
||||
);
|
||||
_displayChatDetailsColumn.value = !_displayChatDetailsColumn.value;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ChatView(this);
|
||||
Widget build(BuildContext context) => Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: ChatView(this),
|
||||
),
|
||||
AnimatedSize(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
curve: FluffyThemes.animationCurve,
|
||||
child: ValueListenableBuilder(
|
||||
valueListenable: _displayChatDetailsColumn,
|
||||
builder: (context, displayChatDetailsColumn, _) {
|
||||
if (!FluffyThemes.isThreeColumnMode(context) ||
|
||||
room.membership != Membership.join ||
|
||||
!displayChatDetailsColumn) {
|
||||
return const SizedBox(
|
||||
height: double.infinity,
|
||||
width: 0,
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
width: FluffyThemes.columnWidth,
|
||||
clipBehavior: Clip.hardEdge,
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
left: BorderSide(
|
||||
width: 1,
|
||||
color: Theme.of(context).dividerColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: ChatDetails(
|
||||
roomId: roomId,
|
||||
embeddedCloseButton: IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: toggleDisplayChatDetailsColumn,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
enum EmojiPickerType { reaction, keyboard }
|
||||
|
||||
extension on List<Event> {
|
||||
int get firstIndexWhereNotError {
|
||||
if (isEmpty) return 0;
|
||||
final index = indexWhere((event) => !event.status.isError);
|
||||
if (index == -1) return length;
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
61
lib/pages/chat/chat_app_bar_list_tile.dart
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_linkify/flutter_linkify.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/utils/url_launcher.dart';
|
||||
|
||||
class ChatAppBarListTile extends StatelessWidget {
|
||||
final Widget? leading;
|
||||
final String title;
|
||||
final Widget? trailing;
|
||||
final void Function()? onTap;
|
||||
|
||||
const ChatAppBarListTile({
|
||||
super.key,
|
||||
this.leading,
|
||||
required this.title,
|
||||
this.trailing,
|
||||
this.onTap,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final leading = this.leading;
|
||||
final trailing = this.trailing;
|
||||
final fontSize = AppConfig.messageFontSize * AppConfig.fontSizeFactor;
|
||||
return InkWell(
|
||||
onTap: onTap,
|
||||
child: Row(
|
||||
children: [
|
||||
if (leading != null) leading,
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4.0),
|
||||
child: Linkify(
|
||||
text: title,
|
||||
options: const LinkifyOptions(humanize: false),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
fontSize: fontSize,
|
||||
),
|
||||
linkStyle: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
fontSize: fontSize,
|
||||
decoration: TextDecoration.underline,
|
||||
decorationColor:
|
||||
Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
),
|
||||
onOpen: (url) => UrlLauncher(context, url.url).launchUrl(),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (trailing != null) trailing,
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -26,7 +26,9 @@ class ChatAppBarTitle extends StatelessWidget {
|
|||
highlightColor: Colors.transparent,
|
||||
onTap: controller.isArchived
|
||||
? null
|
||||
: () => context.go('/rooms/${room.id}/details'),
|
||||
: () => FluffyThemes.isThreeColumnMode(context)
|
||||
? controller.toggleDisplayChatDetailsColumn()
|
||||
: context.go('/rooms/${room.id}/details'),
|
||||
child: Row(
|
||||
children: [
|
||||
Hero(
|
||||
|
|
@ -37,7 +39,6 @@ class ChatAppBarTitle extends StatelessWidget {
|
|||
MatrixLocals(L10n.of(context)!),
|
||||
),
|
||||
size: 32,
|
||||
presenceUserId: room.directChatMatrixID,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ import 'package:flutter/material.dart';
|
|||
|
||||
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/pages/chat/sticker_picker_dialog.dart';
|
||||
import 'chat.dart';
|
||||
|
||||
class ChatEmojiPicker extends StatelessWidget {
|
||||
|
|
@ -16,30 +18,73 @@ class ChatEmojiPicker extends StatelessWidget {
|
|||
return AnimatedContainer(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
curve: FluffyThemes.animationCurve,
|
||||
clipBehavior: Clip.hardEdge,
|
||||
decoration: const BoxDecoration(),
|
||||
height: controller.showEmojiPicker
|
||||
? MediaQuery.of(context).size.height / 2
|
||||
: 0,
|
||||
child: controller.showEmojiPicker
|
||||
? EmojiPicker(
|
||||
onEmojiSelected: controller.onEmojiSelected,
|
||||
onBackspacePressed: controller.emojiPickerBackspace,
|
||||
config: Config(
|
||||
backspaceColor: theme.colorScheme.primary,
|
||||
bgColor: Color.lerp(
|
||||
theme.colorScheme.background,
|
||||
theme.colorScheme.primaryContainer,
|
||||
0.25,
|
||||
)!,
|
||||
iconColor: theme.colorScheme.primary.withOpacity(0.5),
|
||||
iconColorSelected: theme.colorScheme.primary,
|
||||
indicatorColor: theme.colorScheme.primary,
|
||||
noRecents: const NoRecent(),
|
||||
skinToneDialogBgColor: Color.lerp(
|
||||
theme.colorScheme.background,
|
||||
theme.colorScheme.primaryContainer,
|
||||
0.75,
|
||||
)!,
|
||||
skinToneIndicatorColor: theme.colorScheme.onBackground,
|
||||
? DefaultTabController(
|
||||
length: 2,
|
||||
child: Column(
|
||||
children: [
|
||||
TabBar(
|
||||
tabs: [
|
||||
Tab(text: L10n.of(context)!.emojis),
|
||||
Tab(text: L10n.of(context)!.stickers),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
EmojiPicker(
|
||||
onEmojiSelected: controller.onEmojiSelected,
|
||||
onBackspacePressed: controller.emojiPickerBackspace,
|
||||
config: Config(
|
||||
emojiViewConfig: EmojiViewConfig(
|
||||
noRecents: const NoRecent(),
|
||||
backgroundColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.onInverseSurface,
|
||||
),
|
||||
bottomActionBarConfig: const BottomActionBarConfig(
|
||||
enabled: false,
|
||||
),
|
||||
categoryViewConfig: CategoryViewConfig(
|
||||
backspaceColor: theme.colorScheme.primary,
|
||||
iconColor:
|
||||
theme.colorScheme.primary.withOpacity(0.5),
|
||||
iconColorSelected: theme.colorScheme.primary,
|
||||
indicatorColor: theme.colorScheme.primary,
|
||||
),
|
||||
skinToneConfig: SkinToneConfig(
|
||||
dialogBackgroundColor: Color.lerp(
|
||||
theme.colorScheme.background,
|
||||
theme.colorScheme.primaryContainer,
|
||||
0.75,
|
||||
)!,
|
||||
indicatorColor: theme.colorScheme.onBackground,
|
||||
),
|
||||
),
|
||||
),
|
||||
StickerPickerDialog(
|
||||
room: controller.room,
|
||||
onSelected: (sticker) {
|
||||
controller.room.sendEvent(
|
||||
{
|
||||
'body': sticker.body,
|
||||
'info': sticker.info ?? {},
|
||||
'url': sticker.url.toString(),
|
||||
},
|
||||
type: EventTypes.Sticker,
|
||||
);
|
||||
controller.hideEmojiPicker();
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: null,
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import 'package:fluffychat/pages/chat/events/message.dart';
|
|||
import 'package:fluffychat/pages/chat/seen_by_row.dart';
|
||||
import 'package:fluffychat/pages/chat/typing_indicators.dart';
|
||||
import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart';
|
||||
import 'package:fluffychat/utils/account_config.dart';
|
||||
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart';
|
||||
import 'package:fluffychat/utils/platform_infos.dart';
|
||||
|
|
@ -36,11 +37,14 @@ class ChatEventList extends StatelessWidget {
|
|||
thisEventsKeyMap[events[i].eventId] = i;
|
||||
}
|
||||
|
||||
final hasWallpaper =
|
||||
controller.room.client.applicationAccountConfig.wallpaperUrl != null;
|
||||
|
||||
return SelectionArea(
|
||||
child: ListView.custom(
|
||||
padding: EdgeInsets.only(
|
||||
top: 16,
|
||||
bottom: 4,
|
||||
bottom: 8,
|
||||
left: horizontalPadding,
|
||||
right: horizontalPadding,
|
||||
),
|
||||
|
|
@ -140,6 +144,9 @@ class ChatEventList extends StatelessWidget {
|
|||
controller.readMarkerEventId == event.eventId &&
|
||||
controller.timeline?.allowNewEvent == false,
|
||||
nextEvent: i + 1 < events.length ? events[i + 1] : null,
|
||||
previousEvent: i > 0 ? events[i - 1] : null,
|
||||
avatarPresenceBackgroundColor:
|
||||
hasWallpaper ? Colors.transparent : null,
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
controller.emojiPickerType == EmojiPickerType.reaction) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
const height = 48.0;
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
|
|
@ -33,7 +34,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
if (controller.selectedEvents
|
||||
.every((event) => event.status == EventStatus.error))
|
||||
SizedBox(
|
||||
height: 56,
|
||||
height: height,
|
||||
child: TextButton(
|
||||
style: TextButton.styleFrom(
|
||||
foregroundColor: Theme.of(context).colorScheme.error,
|
||||
|
|
@ -49,7 +50,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
)
|
||||
else
|
||||
SizedBox(
|
||||
height: 56,
|
||||
height: height,
|
||||
child: TextButton(
|
||||
onPressed: controller.forwardEventsAction,
|
||||
child: Row(
|
||||
|
|
@ -66,7 +67,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
.status
|
||||
.isSent
|
||||
? SizedBox(
|
||||
height: 56,
|
||||
height: height,
|
||||
child: TextButton(
|
||||
onPressed: controller.replyAction,
|
||||
child: Row(
|
||||
|
|
@ -78,7 +79,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
),
|
||||
)
|
||||
: SizedBox(
|
||||
height: 56,
|
||||
height: height,
|
||||
child: TextButton(
|
||||
onPressed: controller.sendAgainAction,
|
||||
child: Row(
|
||||
|
|
@ -93,6 +94,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
: const SizedBox.shrink(),
|
||||
]
|
||||
: <Widget>[
|
||||
const SizedBox(width: 4),
|
||||
KeyBoardShortcuts(
|
||||
keysToPress: {
|
||||
LogicalKeyboardKey.altLeft,
|
||||
|
|
@ -104,8 +106,8 @@ class ChatInputRow extends StatelessWidget {
|
|||
child: AnimatedContainer(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
curve: FluffyThemes.animationCurve,
|
||||
height: 56,
|
||||
width: controller.sendController.text.isEmpty ? 56 : 0,
|
||||
height: height,
|
||||
width: controller.sendController.text.isEmpty ? height : 0,
|
||||
alignment: Alignment.center,
|
||||
clipBehavior: Clip.hardEdge,
|
||||
decoration: const BoxDecoration(),
|
||||
|
|
@ -164,21 +166,6 @@ class ChatInputRow extends StatelessWidget {
|
|||
contentPadding: const EdgeInsets.all(0),
|
||||
),
|
||||
),
|
||||
if (controller.room
|
||||
.getImagePacks(ImagePackUsage.sticker)
|
||||
.isNotEmpty)
|
||||
PopupMenuItem<String>(
|
||||
value: 'sticker',
|
||||
child: ListTile(
|
||||
leading: const CircleAvatar(
|
||||
backgroundColor: Colors.orange,
|
||||
foregroundColor: Colors.white,
|
||||
child: Icon(Icons.emoji_emotions_outlined),
|
||||
),
|
||||
title: Text(L10n.of(context)!.sendSticker),
|
||||
contentPadding: const EdgeInsets.all(0),
|
||||
),
|
||||
),
|
||||
if (PlatformInfos.isMobile)
|
||||
PopupMenuItem<String>(
|
||||
value: 'location',
|
||||
|
|
@ -197,7 +184,8 @@ class ChatInputRow extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
Container(
|
||||
height: 56,
|
||||
height: height,
|
||||
width: height,
|
||||
alignment: Alignment.center,
|
||||
child: KeyBoardShortcuts(
|
||||
keysToPress: {
|
||||
|
|
@ -225,7 +213,7 @@ class ChatInputRow extends StatelessWidget {
|
|||
child: Icon(
|
||||
controller.showEmojiPicker
|
||||
? Icons.keyboard
|
||||
: Icons.emoji_emotions_outlined,
|
||||
: Icons.add_reaction_outlined,
|
||||
key: ValueKey(controller.showEmojiPicker),
|
||||
),
|
||||
),
|
||||
|
|
@ -237,13 +225,14 @@ class ChatInputRow extends StatelessWidget {
|
|||
Matrix.of(context).hasComplexBundles &&
|
||||
Matrix.of(context).currentBundle!.length > 1)
|
||||
Container(
|
||||
height: 56,
|
||||
width: height,
|
||||
height: height,
|
||||
alignment: Alignment.center,
|
||||
child: _ChatAccountPicker(controller),
|
||||
),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
padding: const EdgeInsets.symmetric(vertical: 0.0),
|
||||
child: InputBar(
|
||||
room: controller.room,
|
||||
minLines: 1,
|
||||
|
|
@ -259,6 +248,12 @@ class ChatInputRow extends StatelessWidget {
|
|||
focusNode: controller.inputFocus,
|
||||
controller: controller.sendController,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: const EdgeInsets.only(
|
||||
left: 6.0,
|
||||
right: 6.0,
|
||||
bottom: 6.0,
|
||||
top: 3.0,
|
||||
),
|
||||
hintText: L10n.of(context)!.writeAMessage,
|
||||
hintMaxLines: 1,
|
||||
border: InputBorder.none,
|
||||
|
|
@ -269,28 +264,40 @@ class ChatInputRow extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
if (PlatformInfos.platformCanRecord &&
|
||||
controller.sendController.text.isEmpty)
|
||||
Container(
|
||||
height: 56,
|
||||
alignment: Alignment.center,
|
||||
child: IconButton(
|
||||
tooltip: L10n.of(context)!.voiceMessage,
|
||||
icon: const Icon(Icons.mic_none_outlined),
|
||||
onPressed: controller.voiceMessageAction,
|
||||
),
|
||||
),
|
||||
if (!PlatformInfos.isMobile ||
|
||||
controller.sendController.text.isNotEmpty)
|
||||
Container(
|
||||
height: 56,
|
||||
alignment: Alignment.center,
|
||||
child: IconButton(
|
||||
icon: const Icon(Icons.send_outlined),
|
||||
onPressed: controller.send,
|
||||
tooltip: L10n.of(context)!.send,
|
||||
),
|
||||
),
|
||||
Container(
|
||||
height: height,
|
||||
width: height,
|
||||
alignment: Alignment.center,
|
||||
child: PlatformInfos.platformCanRecord &&
|
||||
controller.sendController.text.isEmpty
|
||||
? FloatingActionButton.small(
|
||||
tooltip: L10n.of(context)!.voiceMessage,
|
||||
onPressed: controller.voiceMessageAction,
|
||||
elevation: 0,
|
||||
heroTag: null,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(height),
|
||||
),
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
foregroundColor:
|
||||
Theme.of(context).colorScheme.onPrimary,
|
||||
child: const Icon(Icons.mic_none_outlined),
|
||||
)
|
||||
: FloatingActionButton.small(
|
||||
tooltip: L10n.of(context)!.send,
|
||||
onPressed: controller.send,
|
||||
elevation: 0,
|
||||
heroTag: null,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(height),
|
||||
),
|
||||
backgroundColor:
|
||||
Theme.of(context).colorScheme.onPrimaryContainer,
|
||||
foregroundColor:
|
||||
Theme.of(context).colorScheme.onPrimary,
|
||||
child: const Icon(Icons.send_outlined),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,19 +6,20 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/pages/chat/chat.dart';
|
||||
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/pinned_events.dart';
|
||||
import 'package:fluffychat/pages/chat/reactions_picker.dart';
|
||||
import 'package:fluffychat/pages/chat/reply_display.dart';
|
||||
import 'package:fluffychat/pages/chat/tombstone_display.dart';
|
||||
import 'package:fluffychat/utils/account_config.dart';
|
||||
import 'package:fluffychat/widgets/chat_settings_popup_menu.dart';
|
||||
import 'package:fluffychat/widgets/connection_status_header.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:fluffychat/widgets/mxc_image.dart';
|
||||
import 'package:fluffychat/widgets/unread_rooms_badge.dart';
|
||||
import '../../utils/stream_extension.dart';
|
||||
import 'chat_emoji_picker.dart';
|
||||
|
|
@ -136,6 +137,8 @@ class ChatView extends StatelessWidget {
|
|||
final bottomSheetPadding = FluffyThemes.isColumnMode(context) ? 16.0 : 8.0;
|
||||
final scrollUpBannerEventId = controller.scrollUpBannerEventId;
|
||||
|
||||
final accountConfig = Matrix.of(context).client.applicationAccountConfig;
|
||||
|
||||
return PopScope(
|
||||
canPop: controller.selectedEvents.isEmpty && !controller.showEmojiPicker,
|
||||
onPopInvoked: (pop) async {
|
||||
|
|
@ -146,224 +149,233 @@ class ChatView extends StatelessWidget {
|
|||
controller.emojiPickerAction();
|
||||
}
|
||||
},
|
||||
child: GestureDetector(
|
||||
onTapDown: (_) => controller.setReadMarker(),
|
||||
behavior: HitTestBehavior.opaque,
|
||||
child: MouseRegion(
|
||||
onEnter: (_) => controller.setReadMarker(),
|
||||
child: StreamBuilder(
|
||||
stream: controller.room.onUpdate.stream
|
||||
.rateLimit(const Duration(seconds: 1)),
|
||||
builder: (context, snapshot) => FutureBuilder(
|
||||
future: controller.loadTimelineFuture,
|
||||
builder: (BuildContext context, snapshot) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
actionsIconTheme: IconThemeData(
|
||||
color: controller.selectedEvents.isEmpty
|
||||
? null
|
||||
: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
leading: controller.selectMode
|
||||
? IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: controller.clearSelectedEvents,
|
||||
tooltip: L10n.of(context)!.close,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
)
|
||||
: UnreadRoomsBadge(
|
||||
filter: (r) => r.id != controller.roomId,
|
||||
badgePosition: BadgePosition.topEnd(end: 8, top: 4),
|
||||
child: const Center(child: BackButton()),
|
||||
child: StreamBuilder(
|
||||
stream: controller.room.client.onRoomState.stream
|
||||
.where((update) => update.roomId == controller.room.id)
|
||||
.rateLimit(const Duration(seconds: 1)),
|
||||
builder: (context, snapshot) => FutureBuilder(
|
||||
future: controller.loadTimelineFuture,
|
||||
builder: (BuildContext context, snapshot) {
|
||||
var appbarBottomHeight = 0.0;
|
||||
if (controller.room.pinnedEventIds.isNotEmpty) {
|
||||
appbarBottomHeight += 42;
|
||||
}
|
||||
if (scrollUpBannerEventId != null) {
|
||||
appbarBottomHeight += 42;
|
||||
}
|
||||
final tombstoneEvent =
|
||||
controller.room.getState(EventTypes.RoomTombstone);
|
||||
if (tombstoneEvent != null) {
|
||||
appbarBottomHeight += 42;
|
||||
}
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
actionsIconTheme: IconThemeData(
|
||||
color: controller.selectedEvents.isEmpty
|
||||
? null
|
||||
: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
leading: controller.selectMode
|
||||
? IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: controller.clearSelectedEvents,
|
||||
tooltip: L10n.of(context)!.close,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
)
|
||||
: UnreadRoomsBadge(
|
||||
filter: (r) => r.id != controller.roomId,
|
||||
badgePosition: BadgePosition.topEnd(end: 8, top: 4),
|
||||
child: const Center(child: BackButton()),
|
||||
),
|
||||
titleSpacing: 0,
|
||||
title: ChatAppBarTitle(controller),
|
||||
actions: _appBarActions(context),
|
||||
bottom: PreferredSize(
|
||||
preferredSize: Size.fromHeight(appbarBottomHeight),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
PinnedEvents(controller),
|
||||
if (tombstoneEvent != null)
|
||||
ChatAppBarListTile(
|
||||
title: tombstoneEvent.parsedTombstoneContent.body,
|
||||
leading: const Padding(
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: Icon(Icons.upgrade_outlined),
|
||||
),
|
||||
titleSpacing: 0,
|
||||
title: ChatAppBarTitle(controller),
|
||||
actions: _appBarActions(context),
|
||||
),
|
||||
floatingActionButton: controller.showScrollDownButton &&
|
||||
controller.selectedEvents.isEmpty
|
||||
? Padding(
|
||||
padding: const EdgeInsets.only(bottom: 56.0),
|
||||
child: FloatingActionButton(
|
||||
onPressed: controller.scrollDown,
|
||||
heroTag: null,
|
||||
mini: true,
|
||||
child: const Icon(Icons.arrow_downward_outlined),
|
||||
),
|
||||
)
|
||||
: null,
|
||||
body: DropTarget(
|
||||
onDragDone: controller.onDragDone,
|
||||
onDragEntered: controller.onDragEntered,
|
||||
onDragExited: controller.onDragExited,
|
||||
child: Stack(
|
||||
children: <Widget>[
|
||||
SafeArea(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
TombstoneDisplay(controller),
|
||||
if (scrollUpBannerEventId != null)
|
||||
Material(
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.surfaceVariant,
|
||||
shape: Border(
|
||||
bottom: BorderSide(
|
||||
width: 1,
|
||||
color: Theme.of(context).dividerColor,
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
leading: IconButton(
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurfaceVariant,
|
||||
icon: const Icon(Icons.close),
|
||||
tooltip: L10n.of(context)!.close,
|
||||
onPressed: () {
|
||||
controller
|
||||
.discardScrollUpBannerEventId();
|
||||
controller.setReadMarker();
|
||||
},
|
||||
),
|
||||
title: Text(
|
||||
L10n.of(context)!.jumpToLastReadMessage,
|
||||
),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 8),
|
||||
trailing: TextButton(
|
||||
onPressed: () {
|
||||
controller.scrollToEventId(
|
||||
scrollUpBannerEventId,
|
||||
);
|
||||
controller
|
||||
.discardScrollUpBannerEventId();
|
||||
},
|
||||
child: Text(L10n.of(context)!.jump),
|
||||
),
|
||||
),
|
||||
),
|
||||
PinnedEvents(controller),
|
||||
Expanded(
|
||||
child: GestureDetector(
|
||||
onTap: controller.clearSingleSelectedEvent,
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
if (controller.timeline == null) {
|
||||
return const Center(
|
||||
child: CircularProgressIndicator
|
||||
.adaptive(
|
||||
strokeWidth: 2,
|
||||
),
|
||||
);
|
||||
}
|
||||
return ChatEventList(
|
||||
controller: controller,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
if (controller.room.canSendDefaultMessages &&
|
||||
controller.room.membership == Membership.join)
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
bottom: bottomSheetPadding,
|
||||
left: bottomSheetPadding,
|
||||
right: bottomSheetPadding,
|
||||
),
|
||||
constraints: const BoxConstraints(
|
||||
maxWidth: FluffyThemes.columnWidth * 2.5,
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Material(
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(
|
||||
AppConfig.borderRadius,
|
||||
),
|
||||
bottomRight: Radius.circular(
|
||||
AppConfig.borderRadius,
|
||||
),
|
||||
),
|
||||
elevation: 4,
|
||||
shadowColor: Colors.black.withAlpha(64),
|
||||
clipBehavior: Clip.hardEdge,
|
||||
color: Theme.of(context).brightness ==
|
||||
Brightness.light
|
||||
? Colors.white
|
||||
: Colors.black,
|
||||
child: controller.room.isAbandonedDMRoom ==
|
||||
true
|
||||
? Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
TextButton.icon(
|
||||
style: TextButton.styleFrom(
|
||||
padding:
|
||||
const EdgeInsets.all(16),
|
||||
foregroundColor:
|
||||
Theme.of(context)
|
||||
.colorScheme
|
||||
.error,
|
||||
),
|
||||
icon: const Icon(
|
||||
Icons.archive_outlined,
|
||||
),
|
||||
onPressed: controller.leaveChat,
|
||||
label: Text(
|
||||
L10n.of(context)!.leave,
|
||||
),
|
||||
),
|
||||
TextButton.icon(
|
||||
style: TextButton.styleFrom(
|
||||
padding:
|
||||
const EdgeInsets.all(16),
|
||||
),
|
||||
icon: const Icon(
|
||||
Icons.forum_outlined,
|
||||
),
|
||||
onPressed:
|
||||
controller.recreateChat,
|
||||
label: Text(
|
||||
L10n.of(context)!.reopenChat,
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const ConnectionStatusHeader(),
|
||||
ReactionsPicker(controller),
|
||||
ReplyDisplay(controller),
|
||||
ChatInputRow(controller),
|
||||
ChatEmojiPicker(controller),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
trailing: TextButton(
|
||||
onPressed: controller.goToNewRoomAction,
|
||||
child: Text(L10n.of(context)!.goToTheNewRoom),
|
||||
),
|
||||
),
|
||||
if (controller.dragging)
|
||||
Container(
|
||||
color: Theme.of(context)
|
||||
.scaffoldBackgroundColor
|
||||
.withOpacity(0.9),
|
||||
alignment: Alignment.center,
|
||||
child: const Icon(
|
||||
Icons.upload_outlined,
|
||||
size: 100,
|
||||
if (scrollUpBannerEventId != null)
|
||||
ChatAppBarListTile(
|
||||
leading: IconButton(
|
||||
color:
|
||||
Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
icon: const Icon(Icons.close),
|
||||
tooltip: L10n.of(context)!.close,
|
||||
onPressed: () {
|
||||
controller.discardScrollUpBannerEventId();
|
||||
controller.setReadMarker();
|
||||
},
|
||||
),
|
||||
title: L10n.of(context)!.jumpToLastReadMessage,
|
||||
trailing: TextButton(
|
||||
onPressed: () {
|
||||
controller.scrollToEventId(
|
||||
scrollUpBannerEventId,
|
||||
);
|
||||
controller.discardScrollUpBannerEventId();
|
||||
},
|
||||
child: Text(L10n.of(context)!.jump),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
floatingActionButton: controller.showScrollDownButton &&
|
||||
controller.selectedEvents.isEmpty
|
||||
? Padding(
|
||||
padding: const EdgeInsets.only(bottom: 56.0),
|
||||
child: FloatingActionButton(
|
||||
onPressed: controller.scrollDown,
|
||||
heroTag: null,
|
||||
mini: true,
|
||||
child: const Icon(Icons.arrow_downward_outlined),
|
||||
),
|
||||
)
|
||||
: null,
|
||||
body: DropTarget(
|
||||
onDragDone: controller.onDragDone,
|
||||
onDragEntered: controller.onDragEntered,
|
||||
onDragExited: controller.onDragExited,
|
||||
child: Stack(
|
||||
children: <Widget>[
|
||||
if (accountConfig.wallpaperUrl != null)
|
||||
Opacity(
|
||||
opacity: accountConfig.wallpaperOpacity ?? 1,
|
||||
child: MxcImage(
|
||||
uri: accountConfig.wallpaperUrl,
|
||||
fit: BoxFit.cover,
|
||||
isThumbnail: true,
|
||||
width: FluffyThemes.columnWidth * 4,
|
||||
height: FluffyThemes.columnWidth * 4,
|
||||
placeholder: (_) => Container(),
|
||||
),
|
||||
),
|
||||
SafeArea(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: GestureDetector(
|
||||
onTap: controller.clearSingleSelectedEvent,
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
if (controller.timeline == null) {
|
||||
return const Center(
|
||||
child: CircularProgressIndicator.adaptive(
|
||||
strokeWidth: 2,
|
||||
),
|
||||
);
|
||||
}
|
||||
return ChatEventList(
|
||||
controller: controller,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
if (controller.room.canSendDefaultMessages &&
|
||||
controller.room.membership == Membership.join)
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
bottom: bottomSheetPadding,
|
||||
left: bottomSheetPadding,
|
||||
right: bottomSheetPadding,
|
||||
),
|
||||
constraints: const BoxConstraints(
|
||||
maxWidth: FluffyThemes.columnWidth * 2.5,
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Material(
|
||||
clipBehavior: Clip.hardEdge,
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.surfaceVariant,
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(24),
|
||||
),
|
||||
child: controller.room.isAbandonedDMRoom == true
|
||||
? Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
TextButton.icon(
|
||||
style: TextButton.styleFrom(
|
||||
padding: const EdgeInsets.all(
|
||||
16,
|
||||
),
|
||||
foregroundColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.error,
|
||||
),
|
||||
icon: const Icon(
|
||||
Icons.archive_outlined,
|
||||
),
|
||||
onPressed: controller.leaveChat,
|
||||
label: Text(
|
||||
L10n.of(context)!.leave,
|
||||
),
|
||||
),
|
||||
TextButton.icon(
|
||||
style: TextButton.styleFrom(
|
||||
padding: const EdgeInsets.all(
|
||||
16,
|
||||
),
|
||||
),
|
||||
icon: const Icon(
|
||||
Icons.forum_outlined,
|
||||
),
|
||||
onPressed: controller.recreateChat,
|
||||
label: Text(
|
||||
L10n.of(context)!.reopenChat,
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const ConnectionStatusHeader(),
|
||||
ReactionsPicker(controller),
|
||||
ReplyDisplay(controller),
|
||||
ChatInputRow(controller),
|
||||
ChatEmojiPicker(controller),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
if (controller.dragging)
|
||||
Container(
|
||||
color: Theme.of(context)
|
||||
.scaffoldBackgroundColor
|
||||
.withOpacity(0.9),
|
||||
alignment: Alignment.center,
|
||||
child: const Icon(
|
||||
Icons.upload_outlined,
|
||||
size: 100,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||