Merge pull request #3303 from pangeachat/merge-main-into-prod

Merge main into prod
This commit is contained in:
ggurdin 2025-07-01 09:05:03 -04:00 committed by GitHub
commit 1c7166ca52
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
568 changed files with 131191 additions and 122557 deletions

1
.env
View file

@ -1,3 +1,4 @@
ENVIRONMENT = 'staging'
CHOREO_API = 'https://api.staging.pangea.chat'
FRONTEND_URL='https://app.staging.pangea.chat'
SYNAPSE_URL = 'matrix.staging.pangea.chat'

2
.github/CODEOWNERS vendored
View file

@ -1,2 +1,2 @@
* @krille-chan
assets/l10n/*.arb @weblate
lib/l10n/*.arb @weblate

View file

@ -0,0 +1,27 @@
name: Close Inactive Issues And PRs
on:
schedule:
- cron: "30 1 * * *"
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v9
with:
days-before-issue-stale: 365
days-before-issue-close: 14
stale-issue-label: "stale"
stale-issue-message: "This issue is stale because it has been open for 365 days with no activity."
close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
stale-pr-message: "This pull request is stale because it has been open for 365 days with no activity."
close-pr-message: "This pull request was closed because it has been inactive for 14 days since being marked as stale."
days-before-pr-stale: 365
days-before-pr-close: 14
exempt-milestones: true
exempt-assignees: krille-chan
operations-per-run: 500
repo-token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,20 +1,22 @@
version: 2
updates:
- package-ecosystem: "pub"
directory: "/"
schedule:
interval: "daily"
allow:
- dependency-name: "*"
commit-message:
prefix: "build: "
include: "scope"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
allow:
- dependency-name: "*"
commit-message:
prefix: "build: "
include: "scope"
# #Pangea
# version: 2
# updates:
# - package-ecosystem: "pub"
# directory: "/"
# schedule:
# interval: "daily"
# allow:
# - dependency-name: "*"
# commit-message:
# prefix: "build: "
# include: "scope"
# - package-ecosystem: "github-actions"
# directory: "/"
# schedule:
# interval: "daily"
# allow:
# - dependency-name: "*"
# commit-message:
# prefix: "build: "
# include: "scope"
# Pangea#

View file

@ -1,41 +0,0 @@
name: Auto Pull Request
#on:
# schedule:
# - cron: '0 0 * * 0' # Run at midnight (00:00) every Sunday
on:
push:
branches:
- auto-pr # Change this to match your main branch name
jobs:
auto_pull_request:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Test
run: echo ${{ github.head_ref }}.${{ github.sha }}
- name: Pull changes from FluffyChat
run: |
git config --global user.email "${{ vars.CI_EMAIL }}"
git config --global user.name "${{ vars.CI_USERNAME }}"
git remote add fluffychat https://github.com/krille-chan/fluffychat
git fetch fluffychat main
git merge --no-edit fluffychat/main --allow-unrelated-histories
- name: Push changes
run: |
git push origin HEAD:main-update-fluffy-automatic
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.GH_TOKEN }}
title: Updated fork with new fluffy changes
body: |
This is an automatic PR created by GitHub Actions.
branch: main

View file

@ -1,79 +0,0 @@
name: build-ios
on:
workflow_call:
inputs:
screenshot:
type: string
required: true
ipa:
description: 'Run IPA build'
type: string
required: true
workflow_dispatch:
inputs:
screenshot:
description: 'Run screenshot build'
type: choice
options: ['true', 'false']
required: true
ipa:
description: 'Run IPA build'
type: choice
options: ['true', 'false']
required: true
jobs:
build-ios:
runs-on: macos-latest
timeout-minutes: 20
defaults:
run:
working-directory: ios
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: 'echo "$API_KEY" | base64 --decode > AuthKey.p8'
shell: bash
env:
API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
- run: bundle install
- run: bundle exec fastlane versioning
- name: Flutter
uses: subosito/flutter-action@v2
with:
cache: true
cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:'
cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:"
- run: flutter build ios --simulator --target=integration_test/screenshot_test.dart
if: ${{ inputs.screenshot == 'true' }}
- name: Archive integration ipa
if: ${{ inputs.screenshot == 'true' }}
uses: actions/upload-artifact@v4
with:
name: app-simulator-build
path: build/ios/iphonesimulator/Runner.app
if-no-files-found: error
retention-days: 3
# Build ios Release
- run: flutter build ios --release --config-only --no-codesign --target=lib/main.dart
if: ${{ inputs.ipa == 'true' }}
- run: bundle exec fastlane build
if: ${{ inputs.ipa == 'true' }}
- name: Archive ipa
if: ${{ inputs.ipa == 'true' }}
uses: actions/upload-artifact@v4
with:
name: Runner.ipa
path: ios/Runner.ipa
if-no-files-found: error
retention-days: 3

30
.github/workflows/check_duplicates.yaml vendored Normal file
View file

@ -0,0 +1,30 @@
# #Pangea
# name: Check duplicates
# on:
# issues:
# types: [opened]
# jobs:
# check_duplicates:
# runs-on: ubuntu-latest
# env:
# title: ${{ github.event.issue.title }}
# author: ${{ github.event.issue.user.login }}
# number: ${{ github.event.issue.number }}
# GH_TOKEN: ${{ github.token }}
# steps:
# - uses: actions/checkout@v4
# - name: Check duplicates
# run: |
# issues=$(gh issue list --search '${{ env.title }}' --json number,title,url)
# number=${{ env.number }}
# issues_filtered=$(echo "$issues" | jq --arg num "$number" 'map(select(.number != ($num | tonumber)))')
# if [ "$(echo "$issues_filtered" | jq length)" -eq 0 ]; then
# echo "No duplicates found."
# else
# issues_markdown=$(echo "$issues_filtered" | jq -r '.[] | "- [" + .title + "](" + .url + ")"')
# formatted_body=$(echo -e "@${{ env.author }}\nPossible duplication of:\n$issues_markdown")
# gh issue comment ${{ github.event.issue.number }} --body "$formatted_body"
# fi
# Pangea#

View file

@ -1,39 +0,0 @@
name: Dart Code Formatter
on:
pull_request:
push:
branches: main
jobs:
format:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Auto-format Dart code
run: |
dart format lib/ test/
dart run import_sorter:main --no-comments
if ! git diff --exit-code; then
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add .
git commit -m "generated"
git push
fi
- name: Check for unformatted files
if: ${{ failure() }}
run: |
echo "Code was formatted. Please verify the changes in the PR."

View file

@ -1,107 +1,105 @@
name: Pull Request Workflow
# #Pangea
# name: Pull Request Workflow
on:
pull_request:
merge_group:
# on:
# pull_request:
# merge_group:
jobs:
code_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./scripts/generate-locale-config.sh
- run: git diff --exit-code
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- run: flutter pub get
- run: flutter gen-l10n
- name: Check formatting
run: dart format lib/ test/ --set-exit-if-changed
- name: Check import formatting
run: dart run import_sorter:main --no-comments --exit-if-changed
- name: Check license compliance
run: dart run license_checker check-licenses -c licenses.yaml --problematic
- run: flutter analyze
# #Pangea - Commented out the following lines, we already have fcm enabled by default
# - name: Apply google services patch
# run: git apply ./scripts/enable-android-google-services.patch
# Pangea#
- run: flutter analyze
- run: flutter test
# jobs:
# code_tests:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - run: ./scripts/generate-locale-config.sh
# - run: git diff --exit-code
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - uses: subosito/flutter-action@v2
# with:
# flutter-version: ${{ env.FLUTTER_VERSION }}
# cache: true
# - run: flutter pub get
# - run: flutter gen-l10n
# - name: Check formatting
# run: dart format lib/ test/ --set-exit-if-changed
# - name: Check import formatting
# run: dart run import_sorter:main --no-comments --exit-if-changed
# - name: Check license compliance
# run: dart run license_checker check-licenses -c licenses.yaml --problematic
# - run: flutter analyze
# - name: Apply google services patch
# run: git apply ./scripts/enable-android-google-services.patch
# - run: flutter analyze
# - run: flutter test
build_apk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "zulu"
- uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: false
- run: flutter pub get
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: false
android: false
- run: flutter build apk --debug
# build_apk:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - uses: actions/setup-java@v4
# with:
# java-version: ${{ env.JAVA_VERSION }}
# distribution: "zulu"
# - uses: subosito/flutter-action@v2
# with:
# flutter-version: ${{ env.FLUTTER_VERSION }}
# cache: false
# - run: flutter pub get
# - name: Free Disk Space (Ubuntu)
# uses: jlumbroso/free-disk-space@main
# with:
# # this might remove tools that are actually needed,
# # if set to "true" but frees about 6 GB
# tool-cache: false
# android: false
# - run: flutter build apk --debug
build_web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: false
- run: flutter pub get
- name: Prepare web
run: ./scripts/prepare-web.sh
- run: flutter build web
# build_web:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - uses: subosito/flutter-action@v2
# with:
# flutter-version: ${{ env.FLUTTER_VERSION }}
# cache: false
# - run: flutter pub get
# - name: Prepare web
# run: ./scripts/prepare-web.sh
# - run: flutter build web
# #Pangea
# commented out because we do not build Pangea Chat to linux
# build_debug_linux:
# strategy:
# matrix:
# arch: [ x64, arm64 ]
# runs-on: ${{ matrix.arch == 'arm64' && 'self-hosted' || 'ubuntu-latest'}}
# steps:
# - uses: actions/checkout@v4
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - name: Install dependencies
# run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
# - name: Install Flutter
# run: |
# git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
# ./flutter/bin/flutter doctor
# - run: ./flutter/bin/flutter pub get
# - run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
# Pangea#
# commented out because we do not build Pangea Chat to linux
# build_debug_linux:
# strategy:
# matrix:
# arch: [ x64, arm64 ]
# runs-on: ${{ matrix.arch == 'arm64' && 'self-hosted' || 'ubuntu-latest'}}
# steps:
# - uses: actions/checkout@v4
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - name: Install dependencies
# run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
# - name: Install Flutter
# run: |
# git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
# ./flutter/bin/flutter doctor
# - run: ./flutter/bin/flutter pub get
# - run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
build_debug_ios:
runs-on: macos-15
steps:
- uses: actions/checkout@v4
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.6.0
with:
xcode-version: latest
- run: brew install sqlcipher
- run: flutter pub get
- run: flutter build ipa --no-codesign
# build_debug_ios:
# runs-on: macos-15
# steps:
# - uses: actions/checkout@v4
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - uses: subosito/flutter-action@v2
# with:
# flutter-version: ${{ env.FLUTTER_VERSION }}
# cache: true
# - name: Setup Xcode version
# uses: maxim-lobanov/setup-xcode@v1.6.0
# with:
# xcode-version: latest
# - run: brew install sqlcipher
# - run: flutter pub get
# - run: flutter build ipa --no-codesign
# Pangea#

View file

@ -17,3 +17,33 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
- name: Set project ID
run: |
echo "PROJECT_ID=PVT_kwDOBndSo84A7FWL" >> $GITHUB_ENV
- name: Get item ID for issue in project
id: get_item_id
run: |
ITEM_ID=$(gh api graphql -f query='query { repository(owner: "${{ github.repository_owner }}", name: "${{ github.event.repository.name }}") { issue(number: ${{ github.event.issue.number }}) { projectItems(first: 10) { nodes { id project { id } } } } }' --jq '.data.repository.issue.projectItems.nodes[] | select(.project.id==env.PROJECT_ID) | .id')
echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get status field and Done option IDs
id: get_status_ids
run: |
STATUS_FIELD_ID=$(gh api graphql -f query='query { node(id: "'$PROJECT_ID'") { ... on ProjectV2 { fields(first: 20) { nodes { id name } } } } }' --jq '.data.node.fields.nodes[] | select(.name=="Status") | .id')
DONE_OPTION_ID=$(gh api graphql -f query='query { node(id: "'$STATUS_FIELD_ID'") { ... on ProjectV2Field { options { id name } } } }' --jq '.data.node.options[] | select(.name=="Done") | .id')
echo "STATUS_FIELD_ID=$STATUS_FIELD_ID" >> $GITHUB_ENV
echo "DONE_OPTION_ID=$DONE_OPTION_ID" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set status to Done in project
run: |
gh api graphql -f query='mutation($project:ID!, $item:ID!, $field:ID!, $option:ID!) { updateProjectV2ItemFieldValue(input: {projectId: $project, itemId: $item, fieldId: $field, value: { singleSelectOptionId: $option } }) { projectV2Item { id } } }' -f project=$PROJECT_ID -f item=$ITEM_ID -f field=$STATUS_FIELD_ID -f option=$DONE_OPTION_ID
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PROJECT_ID: ${{ env.PROJECT_ID }}
ITEM_ID: ${{ env.ITEM_ID }}
STATUS_FIELD_ID: ${{ env.STATUS_FIELD_ID }}
DONE_OPTION_ID: ${{ env.DONE_OPTION_ID }}
# To get your project, field, and option IDs, see the instructions in the new issue_opened_project.yaml file.
# You must replace the placeholders with your actual project and field IDs.

View file

@ -0,0 +1,20 @@
# Auto-add new issues to a GitHub project (replace PROJECT_ID and COLUMN_ID with your values)
name: Add new issues to project
on:
issues:
types:
- opened
jobs:
add_to_project:
runs-on: ubuntu-latest
steps:
- name: Set project ID
run: |
echo "PROJECT_ID=PVT_kwDOBndSo84A7FWL" >> $GITHUB_ENV
- name: Add issue to project
run: |
gh api graphql -f query='mutation($project:ID!, $contentId:ID!) { addProjectV2ItemById(input: {projectId: $project, contentId: $contentId}) { item { id } } }' -f project=$PROJECT_ID -f contentId=$ISSUE_ID
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE_ID: ${{ github.event.issue.node_id }}
# To get your project ID, use: gh api graphql -f query='query { organization(login: "<ORG>") { projectV2(number: <PROJECT_NUMBER>) { id } } }'

View file

@ -8,7 +8,8 @@ on:
env:
WEB_APP_ENV: ${{ vars.WEB_APP_ENV }}
ENV_OVERRIDES: ${{ vars.ENV_OVERRIDES }}
jobs:
build_web:
runs-on: ubuntu-latest
@ -19,10 +20,6 @@ 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
@ -51,6 +48,13 @@ jobs:
touch public/.env
echo "$WEB_APP_ENV" >> public/.env
cp public/.env public/assets/.env
touch public/assets/envs.json
echo "$ENV_OVERRIDES" >> public/assets/envs.json
mkdir -p public/.well-known
curl https://app.pangea.chat/.well-known/apple-app-site-association \
-o public/.well-known/apple-app-site-association
curl https://app.pangea.chat/.well-known/assetlinks.json \
-o public/.well-known/assetlinks.json
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
@ -82,4 +86,4 @@ jobs:
- name: Update packages
run: flutter pub get
- name: Update sentry
run: flutter packages pub run sentry_dart_plugin
run: flutter packages pub run sentry_dart_plugin

View file

@ -20,6 +20,7 @@ jobs:
name: ${{ inputs.environment }}
env:
WEB_APP_ENV: ${{ vars.WEB_APP_ENV }}
ENV_OVERRIDES: ${{ vars.ENV_OVERRIDES }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@ -45,6 +46,8 @@ jobs:
rm assets/.env
echo "$WEB_APP_ENV" >> .env
cp .env assets/.env
touch assets/envs.json
echo "$ENV_OVERRIDES" >> assets/envs.json
- name: Apply .env patch
run: git apply ./scripts/enable_mobile_env.patch
- name: Install Fastlane
@ -74,13 +77,4 @@ jobs:
bundle install
bundle update fastlane
bundle exec fastlane deploy_internal_test
cd ..
deploy_ios_testflight: # stashed on old.yml
environment:
name: ${{ inputs.environment }}
env:
WEB_APP_ENV: ${{ vars.WEB_APP_ENV }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
cd ..

View file

@ -1,44 +0,0 @@
name: Old Release Workflow
on:
push:
branches:
- master-unused
concurrency:
group: release_workflow
cancel-in-progress: true
jobs:
deploy_ios_internal:
runs-on: macos-latest
environment: staging
steps:
- uses: actions/checkout@v4
- run: cat ../.github/workflows/versions.env >> $GITHUB_ENV
- name: Flutter
uses: subosito/flutter-action@v2
with:
cache: true
cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:'
cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:"
# Build ios Release
- run: flutter build ios --release --config-only --no-codesign --target=lib/main.dart
- name: Deploy ios
run: |
mkdir -p build/ios
cp build/app/outputs/bundle/release/app-release.aab build/ios/
cd ios
bundle install
bundle update fastlane
cd ..
- name: Execute fastlane signing
env:
APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }}
APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64: ${{ secrets.APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64 }}
APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }}
run: bundle exec fastlane ios beta

View file

@ -48,10 +48,6 @@ 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
@ -146,36 +142,39 @@ jobs:
asset_path: build/app/outputs/flutter-apk/app-release.apk
asset_name: pangeachat.apk
asset_content_type: application/vnd.android.package-archive
build_linux:
strategy:
matrix:
arch: [ x64 ]
runs-on: ubuntu-latest
needs: create_release
steps:
- uses: actions/checkout@v4
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
- name: Install dependencies for audio-player
run: sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
- name: Install Flutter
run: |
git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
./flutter/bin/flutter doctor
- run: ./flutter/bin/flutter pub get
- run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
- name: Create archive
run: tar -czf pangeachat-linux-${{ matrix.arch }}.tar.gz -C build/linux/${{ matrix.arch }}/release/bundle/ .
- name: Upload to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: pangeachat-linux-${{ matrix.arch }}.tar.gz
asset_name: pangeachat-linux-${{ matrix.arch }}.tar.gz
asset_content_type: application/gzip
# #Pangea
# build_linux:
# strategy:
# matrix:
# arch: [ x64 ]
# runs-on: ubuntu-latest
# needs: create_release
# steps:
# - uses: actions/checkout@v4
# - run: cat .github/workflows/versions.env >> $GITHUB_ENV
# - name: Install dependencies
# run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
# - name: Install dependencies for audio-player
# run: sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
# - name: Install Flutter
# run: |
# git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
# ./flutter/bin/flutter doctor
# - run: ./flutter/bin/flutter pub get
# - run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
# - name: Create archive
# run: tar -czf pangeachat-linux-${{ matrix.arch }}.tar.gz -C build/linux/${{ matrix.arch }}/release/bundle/ .
# - name: Upload to release
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }}
# with:
# upload_url: ${{ needs.create_release.outputs.upload_url }}
# asset_path: pangeachat-linux-${{ matrix.arch }}.tar.gz
# asset_name: pangeachat-linux-${{ matrix.arch }}.tar.gz
# asset_content_type: application/gzip
# Pangea#
deploy_web:
runs-on: ubuntu-latest

View file

@ -1,39 +0,0 @@
name: upload-release-ios
on:
workflow_call:
inputs:
new_release:
required: true
type: string
description: "The new release version number"
new_release_notes:
required: true
type: string
description: "The release notes for the new release"
jobs:
build:
runs-on: macos-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download app
uses: actions/download-artifact@v4
with:
name: Runner.ipa
path: ios/
- run: 'echo "$API_KEY" | base64 --decode > AuthKey.p8'
shell: bash
env:
API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
- run: bundle install
- run: bundle exec fastlane upload_testflight
env:
RELEASE_NOTES: ${{ inputs.new_release_notes }}
- run: bundle exec fastlane upload_metadata_app_store

View file

@ -1,2 +1,2 @@
FLUTTER_VERSION=3.27.4
FLUTTER_VERSION=3.32.1
JAVA_VERSION=17

3
.gitignore vendored
View file

@ -18,6 +18,7 @@ keys.json
!/public/.env
*.env.local_choreo
*.env.prod
envs.json
# libolm package
/assets/js/package
@ -61,7 +62,7 @@ docs/tailwind.css
android/key.jks
android/keys.json
android/Gemfile.lock
lib/l10n_old
lib/l10n/*.dart
ios/Flutter/.last_build_id
ios/Podfile.lock
ios/Runner.ipa

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
# Privacy
FluffyChat is available on Android, iOS and as a web version. Desktop versions for Windows, Linux and macOS may follow.
FluffyChat is available on Android, iOS, Linux and as a web version. Desktop versions for Windows and macOS may follow.
* [Matrix](#matrix)
* [Database](#database)
@ -109,4 +109,4 @@ To enhance user safety and help protect against the sexual abuse and exploitatio
In addition to reporting messages, users can also report other users following a similar process.
We encourage server administrators to adhere to strict safety standards and provide mechanisms for addressing and moderating inappropriate content. For more information on the Matrix protocol and its safety standards, please refer to the following link: https://matrix.org/docs/older/moderation/
We encourage server administrators to adhere to strict safety standards and provide mechanisms for addressing and moderating inappropriate content. For more information on the Matrix protocol and its safety standards, please refer to the following link: https://matrix.org/docs/older/moderation/

View file

@ -41,8 +41,6 @@
* Also thanks to all translators and testers! With your help, fluffychat is now available in more than 12 languages.
* <a href="https://github.com/googlefonts/noto-emoji/">Noto Emoji Font</a> for the awesome emojis.
* <a href="https://github.com/madsrh/WoodenBeaver">WoodenBeaver</a> sound theme for the notification sound.
* The Matrix Foundation for making and maintaining the [emoji translations](https://github.com/matrix-org/matrix-spec/blob/main/data-definitions/sas-emoji.json) used for emoji verification, licensed Apache 2.0

View file

@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.talktolearn.chat" android:installLocation="auto">
android:installLocation="auto">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
@ -42,7 +42,7 @@
>
<activity
android:name=".MainActivity"
android:launchMode="singleTask"
android:launchMode="singleInstance"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"

View file

@ -2,17 +2,9 @@
import com.famedly.fcm_shared_isolate.FcmSharedIsolateService
import chat.fluffy.fluffychat.MainActivity
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.view.FlutterMain
import io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.WindowManager
class FcmPushService : FcmSharedIsolateService() {
override fun getEngine(): FlutterEngine {

View file

@ -6,6 +6,7 @@
<locale android:name="bo"/>
<locale android:name="ca"/>
<locale android:name="cs"/>
<locale android:name="da"/>
<locale android:name="de"/>
<locale android:name="el"/>
<locale android:name="en"/>
@ -45,10 +46,12 @@
<locale android:name="sr"/>
<locale android:name="sv"/>
<locale android:name="ta"/>
<locale android:name="te"/>
<locale android:name="th"/>
<locale android:name="tr"/>
<locale android:name="uk"/>
<locale android:name="vi"/>
<locale android:name="yue"/>
<locale android:name="zh"/>
<locale android:name="zh"/>
</locale-config>

View file

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists

View file

@ -1,3 +1,4 @@
ENVIRONMENT = 'staging'
CHOREO_API = 'https://api.staging.pangea.chat'
FRONTEND_URL = 'https://app.staging.pangea.chat'

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
{}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,966 +0,0 @@
{
"remove": "Tanggalin",
"@remove": {
"type": "String",
"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": "String",
"placeholders": {}
},
"account": "Account",
"@account": {
"type": "String",
"placeholders": {}
},
"addEmail": "Magdagdag ng email",
"@addEmail": {
"type": "String",
"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": "String",
"placeholders": {}
},
"alias": "alyas",
"@alias": {
"type": "String",
"placeholders": {}
},
"all": "Lahat",
"@all": {
"type": "String",
"placeholders": {}
},
"allChats": "Lahat ng mga chat",
"@allChats": {
"type": "String",
"placeholders": {}
},
"commandHint_googly": "Magpadala ng mga googly eye",
"@commandHint_googly": {},
"commandHint_cuddle": "Magpadala ng yakap",
"@commandHint_cuddle": {},
"cuddleContent": "Niyakap ka ni {senderName}",
"@cuddleContent": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"hugContent": "Niyakap ka ni {senderName}",
"@hugContent": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"anyoneCanJoin": "Pwede sumali ang anumang tao",
"@anyoneCanJoin": {
"type": "String",
"placeholders": {}
},
"appLock": "Lock ng app",
"@appLock": {
"type": "String",
"placeholders": {}
},
"archive": "Archive",
"@archive": {
"type": "String",
"placeholders": {}
},
"areGuestsAllowedToJoin": "Pwede ba sumali ang mga bisita",
"@areGuestsAllowedToJoin": {
"type": "String",
"placeholders": {}
},
"areYouSure": "Sigurado ka?",
"@areYouSure": {
"type": "String",
"placeholders": {}
},
"askVerificationRequest": "Tanggapin ang hiling ng verification mula sa {username}?",
"@askVerificationRequest": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"autoplayImages": "Awtomatikong i-play ang mga gumagalaw na sticker at emote",
"@autoplayImages": {
"type": "String",
"placeholder": {}
},
"sendTypingNotifications": "Ipadala ang mga typing notification",
"@sendTypingNotifications": {},
"blockDevice": "I-block ang Device",
"@blockDevice": {
"type": "String",
"placeholders": {}
},
"blocked": "Na-block",
"@blocked": {
"type": "String",
"placeholders": {}
},
"changeDeviceName": "Palitan ang pangalan ng device",
"@changeDeviceName": {
"type": "String",
"placeholders": {}
},
"changedTheChatAvatar": "Pinalitan ni {username} ang avatar ng chat",
"@changedTheChatAvatar": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheGuestAccessRules": "Pinalitan ni {username} ang mga tuntunin sa pag-access ng bisita",
"@changedTheGuestAccessRules": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheHistoryVisibility": "Pinalitan ni {username} ang kakayahan ng pagkikita ng history",
"@changedTheHistoryVisibility": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheHistoryVisibilityTo": "Pinalitan ni {username} ang kakayahan ng pagkikita ng history sa: {rules}",
"@changedTheHistoryVisibilityTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"rules": {
"type": "String"
}
}
},
"changedTheRoomAliases": "Pinalitan ni {username} ang mga alias ng room",
"@changedTheRoomAliases": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changePassword": "Palitan ang password",
"@changePassword": {
"type": "String",
"placeholders": {}
},
"changeYourAvatar": "Palitan ang iyong avatar",
"@changeYourAvatar": {
"type": "String",
"placeholders": {}
},
"channelCorruptedDecryptError": "Nasira ang encryption",
"@channelCorruptedDecryptError": {
"type": "String",
"placeholders": {}
},
"chat": "Chat",
"@chat": {
"type": "String",
"placeholders": {}
},
"chatBackup": "Pag-backup ng chat",
"@chatBackup": {
"type": "String",
"placeholders": {}
},
"chatDetails": "Mga detalye ng chat",
"@chatDetails": {
"type": "String",
"placeholders": {}
},
"chatHasBeenAddedToThisSpace": "Nadagdag ang chat sa space na ito",
"@chatHasBeenAddedToThisSpace": {},
"chats": "Mga Chat",
"@chats": {
"type": "String",
"placeholders": {}
},
"chooseAStrongPassword": "Pumili ng malakas na password",
"@chooseAStrongPassword": {
"type": "String",
"placeholders": {}
},
"clearArchive": "I-clear ang archive",
"@clearArchive": {},
"close": "Isara",
"@close": {
"type": "String",
"placeholders": {}
},
"commandHint_markasgroup": "Markahan bilang grupo",
"@commandHint_markasgroup": {},
"commandHint_ban": "Pagbawalan ang ibinigay na user sa room na ito",
"@commandHint_ban": {
"type": "String",
"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": "String",
"placeholders": {}
},
"acceptedTheInvitation": "👍 Tinanggap ni {username} ang imbitasyon",
"@acceptedTheInvitation": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"activatedEndToEndEncryption": "🔐 Na-activate ni {username} ang end to end encryption",
"@activatedEndToEndEncryption": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"supposedMxid": "Dapat ito ay {mxid}",
"@supposedMxid": {
"type": "String",
"placeholders": {
"mxid": {
"type": "String"
}
}
},
"addToSpace": "Idagdag sa space",
"@addToSpace": {},
"commandHint_hug": "Magpadala ng yakap",
"@commandHint_hug": {},
"googlyEyesContent": "Nagpadala si {senderName} ng googly eyes",
"@googlyEyesContent": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"answeredTheCall": "Sinagot ni {senderName} ang tawag",
"@answeredTheCall": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"areYouSureYouWantToLogout": "Sigurado kang gusto mong mag-log out?",
"@areYouSureYouWantToLogout": {
"type": "String",
"placeholders": {}
},
"askSSSSSign": "Para i-sign ang isa pang tao, pakilagay ang iyong secure store passphrase o recovery key.",
"@askSSSSSign": {
"type": "String",
"placeholders": {}
},
"badServerLoginTypesException": "Ang homeserver ay sinusuportahan ang sumusunod na uri ng login:\n{serverVersions}\nNgunit sinusuportahan lang ng app ang:\n{supportedVersions}",
"@badServerLoginTypesException": {
"type": "String",
"placeholders": {
"serverVersions": {
"type": "String"
},
"supportedVersions": {
"type": "String"
}
}
},
"sendOnEnter": "Ipadala sa pagpindot ng enter",
"@sendOnEnter": {},
"badServerVersionsException": "Ang homeserver ay sinusuportahan ang mga Spec bersyon:\n{serverVersions}\nNgunit sinusuportahan lang ng app ang {supportedVersions}",
"@badServerVersionsException": {
"type": "String",
"placeholders": {
"serverVersions": {
"type": "String"
},
"supportedVersions": {
"type": "String"
}
}
},
"banFromChat": "Pagbawalan sa chat",
"@banFromChat": {
"type": "String",
"placeholders": {}
},
"banned": "Pinagbawalan",
"@banned": {
"type": "String",
"placeholders": {}
},
"botMessages": "Mga mensahe ng bot",
"@botMessages": {
"type": "String",
"placeholders": {}
},
"cancel": "Kanselahin",
"@cancel": {
"type": "String",
"placeholders": {}
},
"bannedUser": "Pinagbawalan ni {username} si {targetName}",
"@bannedUser": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"targetName": {
"type": "String"
}
}
},
"cantOpenUri": "Hindi mabuksan ang URI na {uri}",
"@cantOpenUri": {
"type": "String",
"placeholders": {
"uri": {
"type": "String"
}
}
},
"changedTheJoinRules": "Pinalitan ni {username} ang mga tuntunin sa pagsali",
"@changedTheJoinRules": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheJoinRulesTo": "Pinalitan ni {username} ang mga tuntunin sa pagsali sa: {joinRules}",
"@changedTheJoinRulesTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"joinRules": {
"type": "String"
}
}
},
"changedTheChatDescriptionTo": "Pinalitan ni {username} ang deskripsyon ng chat sa: '{description}'",
"@changedTheChatDescriptionTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"description": {
"type": "String"
}
}
},
"changedTheProfileAvatar": "Pinalitan ni {username} ang kanilang avatar",
"@changedTheProfileAvatar": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheChatNameTo": "Pinalitan ni {username} ang pangalan ng chat sa: '{chatname}'",
"@changedTheChatNameTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"chatname": {
"type": "String"
}
}
},
"changedTheRoomInvitationLink": "Pinalitan ni {username} ang link ng imbitasyon",
"@changedTheRoomInvitationLink": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changeTheHomeserver": "Palitan ang homeserver",
"@changeTheHomeserver": {
"type": "String",
"placeholders": {}
},
"changeTheme": "Palitan ang iyong istilio",
"@changeTheme": {
"type": "String",
"placeholders": {}
},
"changedTheChatPermissions": "Pinalitan ni {username} ang mga pahintulot ng chat",
"@changedTheChatPermissions": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changeTheNameOfTheGroup": "Palitan ng pangalan ng grupo",
"@changeTheNameOfTheGroup": {
"type": "String",
"placeholders": {}
},
"changedTheDisplaynameTo": "Pinalitan ni {username} ang kanilang displayname sa: '{displayname}'",
"@changedTheDisplaynameTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"displayname": {
"type": "String"
}
}
},
"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": "String",
"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": "String",
"placeholders": {
"username": {
"type": "String"
},
"rules": {
"type": "String"
}
}
},
"commandHint_clearcache": "I-clear ang cache",
"@commandHint_clearcache": {
"type": "String",
"description": "Usage hint for the command /clearcache"
},
"commandHint_discardsession": "Iwaksi ang sesyon",
"@commandHint_discardsession": {
"type": "String",
"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": "String",
"description": "Usage hint for the command /create"
},
"configureChat": "I-configure ang chat",
"@configureChat": {
"type": "String",
"placeholders": {}
},
"confirm": "Kumpirmahin",
"@confirm": {
"type": "String",
"placeholders": {}
},
"compareNumbersMatch": "Paki-kumpara ang mga numero",
"@compareNumbersMatch": {
"type": "String",
"placeholders": {}
},
"copiedToClipboard": "Kinopya sa clipboard",
"@copiedToClipboard": {
"type": "String",
"placeholders": {}
},
"copy": "Kopyahin",
"@copy": {
"type": "String",
"placeholders": {}
},
"copyToClipboard": "Kopyahin sa clipboard",
"@copyToClipboard": {
"type": "String",
"placeholders": {}
},
"countParticipants": "{count} mga kasali",
"@countParticipants": {
"type": "String",
"placeholders": {
"count": {
"type": "int"
}
}
},
"createdTheChat": "💬 Ginawa ni {username} ang chat",
"@createdTheChat": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"createGroup": "Gumawa ng grupo",
"@createGroup": {},
"createNewSpace": "Bagong space",
"@createNewSpace": {
"type": "String",
"placeholders": {}
},
"currentlyActive": "Kasalukuyang aktibo",
"@currentlyActive": {
"type": "String",
"placeholders": {}
},
"darkTheme": "Madilim",
"@darkTheme": {
"type": "String",
"placeholders": {}
},
"displaynameHasBeenChanged": "Pinalitan na ang display name",
"@displaynameHasBeenChanged": {
"type": "String",
"placeholders": {}
},
"directChats": "Mga Direktang Chat",
"@directChats": {
"type": "String",
"placeholders": {}
},
"allRooms": "Lahat ng Mga Group Chat",
"@allRooms": {
"type": "String",
"placeholders": {}
},
"downloadFile": "I-download ang file",
"@downloadFile": {
"type": "String",
"placeholders": {}
},
"editBlockedServers": "I-edit ang mga naka-block na server",
"@editBlockedServers": {
"type": "String",
"placeholders": {}
},
"chatPermissions": "Mga pahintulot ng chat",
"@chatPermissions": {},
"editDisplayname": "I-edit ang display name",
"@editDisplayname": {
"type": "String",
"placeholders": {}
},
"editRoomAliases": "I-edit ang mga alyas ng room",
"@editRoomAliases": {
"type": "String",
"placeholders": {}
},
"edit": "I-edit",
"@edit": {
"type": "String",
"placeholders": {}
},
"editRoomAvatar": "I-edit ang avatar ng room",
"@editRoomAvatar": {
"type": "String",
"placeholders": {}
},
"emoteExists": "Umiiral na ang emote!",
"@emoteExists": {
"type": "String",
"placeholders": {}
},
"emptyChat": "Walang lamang chat",
"@emptyChat": {
"type": "String",
"placeholders": {}
},
"enableEncryption": "I-enable ang encryption",
"@enableEncryption": {
"type": "String",
"placeholders": {}
},
"encryption": "Pag-encrypt",
"@encryption": {
"type": "String",
"placeholders": {}
},
"encrypted": "Naka-encrypt",
"@encrypted": {
"type": "String",
"placeholders": {}
},
"encryptionNotEnabled": "Hindi naka-enable ang encryption",
"@encryptionNotEnabled": {
"type": "String",
"placeholders": {}
},
"everythingReady": "Handa na ang lahat!",
"@everythingReady": {
"type": "String",
"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": "String",
"description": "Usage hint for the command /dm"
},
"commandHint_html": "Magpadala ng HTML-formatted na text",
"@commandHint_html": {
"type": "String",
"description": "Usage hint for the command /html"
},
"commandHint_invite": "Imbitahan ang ibinigay na user sa room na ito",
"@commandHint_invite": {
"type": "String",
"description": "Usage hint for the command /invite"
},
"commandHint_join": "Sumali sa ibinigay na room",
"@commandHint_join": {
"type": "String",
"description": "Usage hint for the command /join"
},
"commandHint_kick": "Tanggalin ang ibinigay na user sa room na ito",
"@commandHint_kick": {
"type": "String",
"description": "Usage hint for the command /kick"
},
"commandHint_leave": "Umalis sa room na ito",
"@commandHint_leave": {
"type": "String",
"description": "Usage hint for the command /leave"
},
"commandHint_me": "Ilarawan ang iyong sarili",
"@commandHint_me": {
"type": "String",
"description": "Usage hint for the command /me"
},
"commandHint_myroomavatar": "Ilapat ang iyong larawan para sa room na ito (bilang mxc-uri)",
"@commandHint_myroomavatar": {
"type": "String",
"description": "Usage hint for the command /myroomavatar"
},
"commandHint_myroomnick": "Ilapat ang iyong display name para sa room na ito",
"@commandHint_myroomnick": {
"type": "String",
"description": "Usage hint for the command /myroomnick"
},
"commandHint_op": "Ilapat ang level ng lakas sa ibinigay na user (default: 50)",
"@commandHint_op": {
"type": "String",
"description": "Usage hint for the command /op"
},
"commandHint_react": "Magpadala ng reply bilang reaksyon",
"@commandHint_react": {
"type": "String",
"description": "Usage hint for the command /react"
},
"commandHint_send": "Magpadala ng text",
"@commandHint_send": {
"type": "String",
"description": "Usage hint for the command /send"
},
"commandHint_unban": "I-unban ang ibinigay na user sa room na ito",
"@commandHint_unban": {
"type": "String",
"description": "Usage hint for the command /unban"
},
"commandInvalid": "Hindi wastong command",
"@commandInvalid": {
"type": "String"
},
"compareEmojiMatch": "Paki-kumpara ang mga emoji",
"@compareEmojiMatch": {
"type": "String",
"placeholders": {}
},
"connect": "Kumonekta",
"@connect": {
"type": "String",
"placeholders": {}
},
"containsDisplayName": "Naglalaman ng display name",
"@containsDisplayName": {
"type": "String",
"placeholders": {}
},
"create": "Gumawa",
"@create": {
"type": "String",
"placeholders": {}
},
"dateAndTimeOfDay": "{date}, {timeOfDay}",
"@dateAndTimeOfDay": {
"type": "String",
"placeholders": {
"date": {
"type": "String"
},
"timeOfDay": {
"type": "String"
}
}
},
"dateWithoutYear": "{month}/{day}",
"@dateWithoutYear": {
"type": "String",
"placeholders": {
"month": {
"type": "String"
},
"day": {
"type": "String"
}
}
},
"dateWithYear": "{month}/{day}/{year}",
"@dateWithYear": {
"type": "String",
"placeholders": {
"year": {
"type": "String"
},
"month": {
"type": "String"
},
"day": {
"type": "String"
}
}
},
"deactivateAccountWarning": "Ide-deactivate nito ang iyong user account. Hindi na ito maaaring bawiin! Sigurado ka?",
"@deactivateAccountWarning": {
"type": "String",
"placeholders": {}
},
"delete": "Burahin",
"@delete": {
"type": "String",
"placeholders": {}
},
"deleteMessage": "Burahin ang mensahe",
"@deleteMessage": {
"type": "String",
"placeholders": {}
},
"device": "Device",
"@device": {
"type": "String",
"placeholders": {}
},
"deviceId": "ID ng Device",
"@deviceId": {
"type": "String",
"placeholders": {}
},
"devices": "Mga Device",
"@devices": {
"type": "String",
"placeholders": {}
},
"emoteInvalid": "Hindi wastong shortcode ng emote!",
"@emoteInvalid": {
"type": "String",
"placeholders": {}
},
"emoteKeyboardNoRecents": "Ang mga kamakailang ginamit na emote ay lalabas dito...",
"@emoteKeyboardNoRecents": {
"type": "String",
"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": "String",
"placeholders": {}
},
"emoteWarnNeedToPick": "Kailangan mong pumili ng emote shortcode at isang larawan!",
"@emoteWarnNeedToPick": {
"type": "String",
"placeholders": {}
},
"enableEmotesGlobally": "I-enable ang emote pack globally",
"@enableEmotesGlobally": {
"type": "String",
"placeholders": {}
},
"endedTheCall": "Tinapos ni {senderName} ang tawag",
"@endedTheCall": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"enterAnEmailAddress": "Maglagay ng email address",
"@enterAnEmailAddress": {
"type": "String",
"placeholders": {}
},
"homeserver": "Homeserver",
"@homeserver": {},
"enterYourHomeserver": "Ilagay ang iyong homeserver",
"@enterYourHomeserver": {
"type": "String",
"placeholders": {}
},
"extremeOffensive": "Lubhang nakakasakit",
"@extremeOffensive": {
"type": "String",
"placeholders": {}
},
"commandHint_plain": "Magpadala ng hindi na-format na text",
"@commandHint_plain": {
"type": "String",
"description": "Usage hint for the command /plain"
},
"commandMissing": "Hindi isang command ang {command}.",
"@commandMissing": {
"type": "String",
"placeholders": {
"command": {
"type": "String"
}
},
"description": "State that {command} is not a valid /command."
},
"contactHasBeenInvitedToTheGroup": "Inimbita ang contact sa group",
"@contactHasBeenInvitedToTheGroup": {
"type": "String",
"placeholders": {}
},
"containsUserName": "Naglalaman ng username",
"@containsUserName": {
"type": "String",
"placeholders": {}
},
"contentHasBeenReported": "Inulat ang nilalaman sa mga pangangasiwa ng server",
"@contentHasBeenReported": {
"type": "String",
"placeholders": {}
},
"couldNotDecryptMessage": "Hindi ma-decrypt ang mensahe: {error}",
"@couldNotDecryptMessage": {
"type": "String",
"placeholders": {
"error": {
"type": "String"
}
}
},
"defaultPermissionLevel": "Default na antas ng pahintulot",
"@defaultPermissionLevel": {
"type": "String",
"placeholders": {}
},
"deleteAccount": "Burahin ang account",
"@deleteAccount": {
"type": "String",
"placeholders": {}
},
"emotePacks": "Mga emote pack para sa room",
"@emotePacks": {
"type": "String",
"placeholders": {}
},
"emoteSettings": "Mga Setting ng Emote",
"@emoteSettings": {
"type": "String",
"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": "String",
"placeholders": {}
},
"errorObtainingLocation": "Hindi makuha ang lokasyon: {error}",
"@errorObtainingLocation": {
"type": "String",
"placeholders": {
"error": {
"type": "String"
}
}
},
"fileName": "Pangalan ng file",
"@fileName": {
"type": "String",
"placeholders": {}
},
"fluffychat": "FluffyChat",
"@fluffychat": {
"type": "String",
"placeholders": {}
},
"fontSize": "Laki ng font",
"@fontSize": {
"type": "String",
"placeholders": {}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,60 +0,0 @@
{
"repeatPassword": "Repeter le contrasigno",
"@repeatPassword": {},
"notAnImage": "Non es un file de imagine.",
"@notAnImage": {},
"remove": "Remover",
"@remove": {
"type": "String",
"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": "String",
"placeholders": {}
},
"accept": "Acceptar",
"@accept": {
"type": "String",
"placeholders": {}
},
"acceptedTheInvitation": "👍 {username} acceptava tu invitation",
"@acceptedTheInvitation": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"account": "Conto",
"@account": {
"type": "String",
"placeholders": {}
},
"addEmail": "Adder email",
"@addEmail": {
"type": "String",
"placeholders": {}
},
"supposedMxid": "Isto deberea esser {mxid}",
"@supposedMxid": {
"type": "String",
"placeholders": {
"mxid": {
"type": "String"
}
}
},
"@custom": {}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,832 +0,0 @@
{
"alias": "მეტსახელი",
"@alias": {
"type": "String",
"placeholders": {}
},
"appLockDescription": "პინკოდის გამოყენების გარეშე აპლიკაციის ბლოკირება",
"@appLockDescription": {},
"commandHint_hug": "მეგობრული ჩახუტვის გაგზავნა",
"@commandHint_hug": {},
"areYouSure": "დარწმუნებული ხართ?",
"@areYouSure": {
"type": "String",
"placeholders": {}
},
"areYouSureYouWantToLogout": "დარწმუნებული ხართ, რომ გამოსვლა გსურთ?",
"@areYouSureYouWantToLogout": {
"type": "String",
"placeholders": {}
},
"hugContent": "{senderName} მეგობრულად გეხუტება",
"@hugContent": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"askSSSSSign": "სხვა მომხმარებლის დადასტურებლად, გთხოვთ, ჩაწეროთ თქვენი ან საიდუმლო ფრაზა, ან აღდგენის გასაღები.",
"@askSSSSSign": {
"type": "String",
"placeholders": {}
},
"autoplayImages": "ანიმირებული სტიკერებისა და ემოჯების ავტომატური ჩართვა",
"@autoplayImages": {
"type": "String",
"placeholder": {}
},
"banFromChat": "ჩატიდან გაგდება და ბლოკირება",
"@banFromChat": {
"type": "String",
"placeholders": {}
},
"banned": "დაბლოკილია",
"@banned": {
"type": "String",
"placeholders": {}
},
"badServerLoginTypesException": "ამ სერვერს აქვს შესვლის მეთოდების მხარდაჭერა:\n{serverVersions}\nმაგრამ ამ აპლიკაციას აქვს მხარდაჭერა მხოლოდ:\n{supportedVersions}",
"@badServerLoginTypesException": {
"type": "String",
"placeholders": {
"serverVersions": {
"type": "String"
},
"supportedVersions": {
"type": "String"
}
}
},
"sendOnEnter": "გაგზავნა enter-ის დაჭერისას",
"@sendOnEnter": {},
"bannedUser": "{username} დაბლოკა {targetName}",
"@bannedUser": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"targetName": {
"type": "String"
}
}
},
"blockDevice": "მოწყობილების ბლოკირება",
"@blockDevice": {
"type": "String",
"placeholders": {}
},
"blocked": "დაბლოკილია",
"@blocked": {
"type": "String",
"placeholders": {}
},
"botMessages": "ბოტის შეტყობინებები",
"@botMessages": {
"type": "String",
"placeholders": {}
},
"cancel": "გაუქმება",
"@cancel": {
"type": "String",
"placeholders": {}
},
"changedTheHistoryVisibilityTo": "{username} შეცვალა ისტორიის ხილვადობა: {rules}",
"@changedTheHistoryVisibilityTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"rules": {
"type": "String"
}
}
},
"changedTheJoinRules": "{username} გაწევრიანების წესები შეცვალა",
"@changedTheJoinRules": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheProfileAvatar": "{username} შეცვალა პროფილის ფოტო",
"@changedTheProfileAvatar": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"chat": "ჩატი",
"@chat": {
"type": "String",
"placeholders": {}
},
"changeYourAvatar": "პროფილის ფოტოს შეცვლა",
"@changeYourAvatar": {
"type": "String",
"placeholders": {}
},
"yourChatBackupHasBeenSetUp": "თქვენი ჩატის სარეზერვო საშუალება კონფიგურირებული იქნა.",
"@yourChatBackupHasBeenSetUp": {},
"channelCorruptedDecryptError": "დაშიფვრა დაზიანდა",
"@channelCorruptedDecryptError": {
"type": "String",
"placeholders": {}
},
"chatBackupDescription": "თქვენი ძველი შეტყობინებები დაცულია აღდგების გასაღებით. არ დაკარგოთ ის.",
"@chatBackupDescription": {
"type": "String",
"placeholders": {}
},
"commandHint_discardsession": "სესიის გაუქმება",
"@commandHint_discardsession": {
"type": "String",
"description": "Usage hint for the command /discardsession"
},
"commandHint_invite": "მოცემული მომხმარებლის მოწვევა ამ ოთახში",
"@commandHint_invite": {
"type": "String",
"description": "Usage hint for the command /invite"
},
"commandHint_plain": "არაფორმატირებული ტექსტის გაგზავნა",
"@commandHint_plain": {
"type": "String",
"description": "Usage hint for the command /plain"
},
"commandHint_send": "ტექსტის გაგზავნა",
"@commandHint_send": {
"type": "String",
"description": "Usage hint for the command /send"
},
"commandMissing": "{command} არაა ბრძანება.",
"@commandMissing": {
"type": "String",
"placeholders": {
"command": {
"type": "String"
}
},
"description": "State that {command} is not a valid /command."
},
"confirm": "დადასტურება",
"@confirm": {
"type": "String",
"placeholders": {}
},
"connect": "დაკავშირება",
"@connect": {
"type": "String",
"placeholders": {}
},
"countParticipants": "{count} მონაწილე",
"@countParticipants": {
"type": "String",
"placeholders": {
"count": {
"type": "int"
}
}
},
"createGroup": "ჯგუფის შექმნა",
"@createGroup": {},
"deactivateAccountWarning": "ეს გააუქმებს თქვენს ანგარიშს. ამის გაუქმება შეუძლებელია. დარწმუნებული ხართ?",
"@deactivateAccountWarning": {
"type": "String",
"placeholders": {}
},
"devices": "მოწყობილებები",
"@devices": {
"type": "String",
"placeholders": {}
},
"darkTheme": "ბნელი",
"@darkTheme": {
"type": "String",
"placeholders": {}
},
"chatPermissions": "ჩატის უფლებები",
"@chatPermissions": {},
"dateAndTimeOfDay": "{date}, {timeOfDay}",
"@dateAndTimeOfDay": {
"type": "String",
"placeholders": {
"date": {
"type": "String"
},
"timeOfDay": {
"type": "String"
}
}
},
"editRoomAliases": "ოთახის მეტსახელების შეცვლა",
"@editRoomAliases": {
"type": "String",
"placeholders": {}
},
"emoteExists": "ეს ემოცია უკვე არსებობს!",
"@emoteExists": {
"type": "String",
"placeholders": {}
},
"emoteInvalid": "ემოციის არასწორი მოკლე კოდი!",
"@emoteInvalid": {
"type": "String",
"placeholders": {}
},
"importNow": "იმპორტი",
"@importNow": {},
"importEmojis": "ემოჯის იმპორტი",
"@importEmojis": {},
"importFromZipFile": "იმპორტი .zip ფაილიდან",
"@importFromZipFile": {},
"exportEmotePack": "ემოციების .zip ფაილში ექსპორტი",
"@exportEmotePack": {},
"replace": "ჩანაცვლება",
"@replace": {},
"accept": "თანხმობა",
"@accept": {
"type": "String",
"placeholders": {}
},
"acceptedTheInvitation": "👍 {username} მიიღო მოწვევა",
"@acceptedTheInvitation": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"account": "ანგარიში",
"@account": {
"type": "String",
"placeholders": {}
},
"addEmail": "ელ.ფოსტის დამატება",
"@addEmail": {
"type": "String",
"placeholders": {}
},
"confirmMatrixId": "გთხოვთ, დაადასტუროთ თქვენი Matrix ID ანგარიშის წაშლისათვის.",
"@confirmMatrixId": {},
"addChatDescription": "ჩატის აღწერილობის დამატება...",
"@addChatDescription": {},
"addToSpace": "სივრცეში დამატება",
"@addToSpace": {},
"admin": "ადმინი",
"@admin": {
"type": "String",
"placeholders": {}
},
"all": "ყველა",
"@all": {
"type": "String",
"placeholders": {}
},
"allChats": "ყველა ჩატი",
"@allChats": {
"type": "String",
"placeholders": {}
},
"commandHint_cuddle": "ჩახუტების გაგზავნა",
"@commandHint_cuddle": {},
"answeredTheCall": "{senderName} უპასუხა ზარს",
"@answeredTheCall": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"anyoneCanJoin": "ყველას შეუძლია გაწევრიანება",
"@anyoneCanJoin": {
"type": "String",
"placeholders": {}
},
"appLock": "აპლიკაციის ბლოკირება",
"@appLock": {
"type": "String",
"placeholders": {}
},
"archive": "არქივი",
"@archive": {
"type": "String",
"placeholders": {}
},
"commandHint_googly": "გამოშტერილი თვალების გაგზავნა",
"@commandHint_googly": {},
"googlyEyesContent": "{senderName} გამოშტერილ თვალებს გიგზავნის",
"@googlyEyesContent": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"cuddleContent": "{senderName} გეხუტება",
"@cuddleContent": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"areGuestsAllowedToJoin": "შეუძლიათ თუ არა სტუმარ მომხმარებლებს გაწევრიანება",
"@areGuestsAllowedToJoin": {
"type": "String",
"placeholders": {}
},
"askVerificationRequest": "მიიღებთ {username} დადასტურების მოთხოვნას?",
"@askVerificationRequest": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"sendTypingNotifications": "წერის შეტყობინების გაგზავნა",
"@sendTypingNotifications": {},
"cantOpenUri": "ვერ იხსნება ბმული {uri}",
"@cantOpenUri": {
"type": "String",
"placeholders": {
"uri": {
"type": "String"
}
}
},
"changeDeviceName": "მოწყობილების გადარქმევა",
"@changeDeviceName": {
"type": "String",
"placeholders": {}
},
"changedTheChatAvatar": "{username} ჩატის ფოტო შეცვალა",
"@changedTheChatAvatar": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheChatDescriptionTo": "{username} ჩატის ახალი აღწერილობა დააყენა: '{description}'",
"@changedTheChatDescriptionTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"description": {
"type": "String"
}
}
},
"changedTheChatNameTo": "{username} ჩატი გადაარქვა: '{chatname}'",
"@changedTheChatNameTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"chatname": {
"type": "String"
}
}
},
"changedTheChatPermissions": "{username} ჩატის უფლებები შეცვალა",
"@changedTheChatPermissions": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheGuestAccessRules": "{username} შეცვალა სტუმრების წვდომის წესები",
"@changedTheGuestAccessRules": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheGuestAccessRulesTo": "{username} შეცვალა სტუმრების წვდომის წესები: {rules}",
"@changedTheGuestAccessRulesTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"rules": {
"type": "String"
}
}
},
"changedTheHistoryVisibility": "{username} შეცვალა ისტორიის ხილვადობა",
"@changedTheHistoryVisibility": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheJoinRulesTo": "{username} გაწევრიანების წესები შეცვალა: {joinRules}",
"@changedTheJoinRulesTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"joinRules": {
"type": "String"
}
}
},
"changedTheRoomAliases": "{username} ოთახის მეტსახელები შეცვალა",
"@changedTheRoomAliases": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheRoomInvitationLink": "{username} მოწვევის ბმული შეცვალა",
"@changedTheRoomInvitationLink": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changePassword": "პაროლის შეცვლა",
"@changePassword": {
"type": "String",
"placeholders": {}
},
"changeTheHomeserver": "სახლის სერვერის შეცვლა",
"@changeTheHomeserver": {
"type": "String",
"placeholders": {}
},
"changeTheme": "სტილის შეცვლა",
"@changeTheme": {
"type": "String",
"placeholders": {}
},
"changeTheNameOfTheGroup": "ჯგუფის გადარქმევა",
"@changeTheNameOfTheGroup": {
"type": "String",
"placeholders": {}
},
"chatBackup": "ჩატის სარეზერვო საშუალება",
"@chatBackup": {
"type": "String",
"placeholders": {}
},
"chatDetails": "ჩატის დეტალები",
"@chatDetails": {
"type": "String",
"placeholders": {}
},
"chatHasBeenAddedToThisSpace": "ჩატი დაემატა ამ სივრცეს",
"@chatHasBeenAddedToThisSpace": {},
"chats": "ჩატები",
"@chats": {
"type": "String",
"placeholders": {}
},
"chooseAStrongPassword": "ძლიერი პაროლი აარჩიეთ",
"@chooseAStrongPassword": {
"type": "String",
"placeholders": {}
},
"clearArchive": "არქივის გაწმენდა",
"@clearArchive": {},
"close": "დახურვა",
"@close": {
"type": "String",
"placeholders": {}
},
"commandHint_markasgroup": "აღნიშვნა, როგორც ჯგუფის",
"@commandHint_markasgroup": {},
"commandHint_ban": "მოცემული მომხმარებლის ბლოკირება ამ ოთახში",
"@commandHint_ban": {
"type": "String",
"description": "Usage hint for the command /ban"
},
"commandHint_clearcache": "­ქეშის გაწმენდა",
"@commandHint_clearcache": {
"type": "String",
"description": "Usage hint for the command /clearcache"
},
"commandHint_join": "მოცემულ ოთახში გაწევრიანება",
"@commandHint_join": {
"type": "String",
"description": "Usage hint for the command /join"
},
"commandHint_kick": "მოცემული მომხმარებლის წაშლა ამ ოთახიდან",
"@commandHint_kick": {
"type": "String",
"description": "Usage hint for the command /kick"
},
"commandHint_leave": "ამ ოთახიდან გასვლა",
"@commandHint_leave": {
"type": "String",
"description": "Usage hint for the command /leave"
},
"commandHint_me": "აღწერეთ თქვენი თავი",
"@commandHint_me": {
"type": "String",
"description": "Usage hint for the command /me"
},
"commandHint_unban": "ამ ოთახში მომხმარებლისგან ბლოკის მოხსნა",
"@commandHint_unban": {
"type": "String",
"description": "Usage hint for the command /unban"
},
"commandInvalid": "არასწორი ბრძანება",
"@commandInvalid": {
"type": "String"
},
"compareEmojiMatch": "გთხოვთ, შეადაროთ ეს ემოჯი",
"@compareEmojiMatch": {
"type": "String",
"placeholders": {}
},
"compareNumbersMatch": "გთხოვთ, შეადაროთ ეს რიცხვები",
"@compareNumbersMatch": {
"type": "String",
"placeholders": {}
},
"configureChat": "ჩატის კონფიგურაცია",
"@configureChat": {
"type": "String",
"placeholders": {}
},
"contactHasBeenInvitedToTheGroup": "კონტაქტი მოწვეული იქნა ჯგუფში",
"@contactHasBeenInvitedToTheGroup": {
"type": "String",
"placeholders": {}
},
"containsUserName": "შეიცავს სახელს",
"@containsUserName": {
"type": "String",
"placeholders": {}
},
"copiedToClipboard": "კოპირებულია ბუფერში",
"@copiedToClipboard": {
"type": "String",
"placeholders": {}
},
"copy": "კოპირება",
"@copy": {
"type": "String",
"placeholders": {}
},
"copyToClipboard": "კოპირება ბუფერში",
"@copyToClipboard": {
"type": "String",
"placeholders": {}
},
"couldNotDecryptMessage": "შეტყობინების გაშიფვრის შეცდომა: {error}",
"@couldNotDecryptMessage": {
"type": "String",
"placeholders": {
"error": {
"type": "String"
}
}
},
"create": "შექმნა",
"@create": {
"type": "String",
"placeholders": {}
},
"createdTheChat": "💬 {username} შექმნა ჩატი",
"@createdTheChat": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"createNewSpace": "ახალი სივრცე",
"@createNewSpace": {
"type": "String",
"placeholders": {}
},
"currentlyActive": "ახლა აქტიურია",
"@currentlyActive": {
"type": "String",
"placeholders": {}
},
"dateWithoutYear": "{day}-{month}",
"@dateWithoutYear": {
"type": "String",
"placeholders": {
"month": {
"type": "String"
},
"day": {
"type": "String"
}
}
},
"dateWithYear": "{day}-{month}-{year}",
"@dateWithYear": {
"type": "String",
"placeholders": {
"year": {
"type": "String"
},
"month": {
"type": "String"
},
"day": {
"type": "String"
}
}
},
"delete": "წაშლა",
"@delete": {
"type": "String",
"placeholders": {}
},
"deleteAccount": "ანგარიშის წაშლა",
"@deleteAccount": {
"type": "String",
"placeholders": {}
},
"deleteMessage": "შეტყობინების წაშლა",
"@deleteMessage": {
"type": "String",
"placeholders": {}
},
"device": "მოწყობილება",
"@device": {
"type": "String",
"placeholders": {}
},
"deviceId": "მოწყობილების ID",
"@deviceId": {
"type": "String",
"placeholders": {}
},
"directChats": "პირდაპირი ჩატები",
"@directChats": {
"type": "String",
"placeholders": {}
},
"allRooms": "ყველა ჯგუფური ჩატები",
"@allRooms": {
"type": "String",
"placeholders": {}
},
"downloadFile": "ფაილის ჩატვირთვა",
"@downloadFile": {
"type": "String",
"placeholders": {}
},
"edit": "რედაქტირება",
"@edit": {
"type": "String",
"placeholders": {}
},
"editBlockedServers": "ბლოკირებული სერვერების რედაქტირება",
"@editBlockedServers": {
"type": "String",
"placeholders": {}
},
"editRoomAvatar": "ოთახის ფოტოს შეცვლა",
"@editRoomAvatar": {
"type": "String",
"placeholders": {}
},
"emoteSettings": "ემოციების პარამეტრები",
"@emoteSettings": {
"type": "String",
"placeholders": {}
},
"globalChatId": "გლობალური ჩატის ID",
"@globalChatId": {},
"repeatPassword": "გაიმეორეთ პაროლი",
"@repeatPassword": {},
"notAnImage": "ფაილი არაა სურათი.",
"@notAnImage": {},
"remove": "წაშლა",
"@remove": {
"type": "String",
"placeholders": {}
},
"activatedEndToEndEncryption": "🔐 {username} გააქტიურა end to end დაშიფვრა",
"@activatedEndToEndEncryption": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"supposedMxid": "ეს უნდა იყოს {mxid}",
"@supposedMxid": {
"type": "String",
"placeholders": {
"mxid": {
"type": "String"
}
}
},
"about": "შესახებ",
"@about": {
"type": "String",
"placeholders": {}
},
"changedTheDisplaynameTo": "{username} შეცვალა ნაჩვენები სახელი: '{displayname}'",
"@changedTheDisplaynameTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"displayname": {
"type": "String"
}
}
},
"commandHint_create": "ცარიელი ჯგუფური ჩატის შექმნა\nგამოიენეთ --no-encryption გაშიფვრის გასათიშად",
"@commandHint_create": {
"type": "String",
"description": "Usage hint for the command /create"
},
"commandHint_dm": "პირდაპირი ჩატის დაწყება\nგამოიენეთ --no-encryption გაშიფვრის გასათიშად",
"@commandHint_dm": {
"type": "String",
"description": "Usage hint for the command /dm"
},
"commandHint_html": "HTML ფორმატირებული ტექსტის გაგზავნა",
"@commandHint_html": {
"type": "String",
"description": "Usage hint for the command /html"
},
"commandHint_myroomavatar": "თქვენი ფოტოს დაყენება ამ ოთახისათვის(mxc-uri-ს დახმარებით)",
"@commandHint_myroomavatar": {
"type": "String",
"description": "Usage hint for the command /myroomavatar"
},
"commandHint_myroomnick": "ამ ოთახისათვის ნაჩვენები სახელის დაყენება",
"@commandHint_myroomnick": {
"type": "String",
"description": "Usage hint for the command /myroomnick"
},
"commandHint_op": "მოცემული მომხმარებლისათვის უფლებების დონის დაყენება (ჩვეულებრივ: 50)",
"@commandHint_op": {
"type": "String",
"description": "Usage hint for the command /op"
},
"commandHint_react": "რეაქციის სახით პასუხის გაგზავნა",
"@commandHint_react": {
"type": "String",
"description": "Usage hint for the command /react"
},
"containsDisplayName": "ნაჩვენებ სახელს შეიცავს",
"@containsDisplayName": {
"type": "String",
"placeholders": {}
},
"contentHasBeenReported": "ეს კონტენტი გაგზავნილ იქნა სერვერის ადმინისტრატორებთან",
"@contentHasBeenReported": {
"type": "String",
"placeholders": {}
},
"defaultPermissionLevel": "ნაგულისხმევი უფლების დონე",
"@defaultPermissionLevel": {
"type": "String",
"placeholders": {}
},
"displaynameHasBeenChanged": "ნაჩვენები სახელი შეიცვალა",
"@displaynameHasBeenChanged": {
"type": "String",
"placeholders": {}
},
"editDisplayname": "ნაჩვენები სახელის შეცვლა",
"@editDisplayname": {
"type": "String",
"placeholders": {}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,659 +0,0 @@
{
"repeatPassword": "Ponovite geslo",
"@repeatPassword": {},
"about": "O aplikaciji",
"@about": {
"type": "String",
"placeholders": {}
},
"accept": "Sprejmi",
"@accept": {
"type": "String",
"placeholders": {}
},
"account": "Račun",
"@account": {
"type": "String",
"placeholders": {}
},
"activatedEndToEndEncryption": "Uporabnik {username} je aktiviral šifriranje od konca do konca",
"@activatedEndToEndEncryption": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"addEmail": "Dodajte e-pošto",
"@addEmail": {
"type": "String",
"placeholders": {}
},
"addToSpace": "Dodajte v prostor",
"@addToSpace": {},
"alias": "vzdevek",
"@alias": {
"type": "String",
"placeholders": {}
},
"all": "Vse",
"@all": {
"type": "String",
"placeholders": {}
},
"allChats": "Vsi klepeti",
"@allChats": {
"type": "String",
"placeholders": {}
},
"answeredTheCall": "Oseba {senderName} je odgovorila na klic",
"@answeredTheCall": {
"type": "String",
"placeholders": {
"senderName": {
"type": "String"
}
}
},
"anyoneCanJoin": "Pridruži se lahko vsak",
"@anyoneCanJoin": {
"type": "String",
"placeholders": {}
},
"appLock": "Zaklepanje aplikacije",
"@appLock": {
"type": "String",
"placeholders": {}
},
"askSSSSSign": "Če želite podpisati drugo osebo, vnesite geslo za varno trgovino ali obnovitveni ključ.",
"@askSSSSSign": {
"type": "String",
"placeholders": {}
},
"askVerificationRequest": "Ali želite sprejeti to zahtevo za preverjanje od {username}?",
"@askVerificationRequest": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"autoplayImages": "Samodejno predvajajte animirane nalepke in čustva",
"@autoplayImages": {
"type": "String",
"placeholder": {}
},
"badServerLoginTypesException": "Domači strežnik podpira vrste prijave:\n{serverVersions}\nToda ta aplikacija podpira samo:\n{supportedVersions}",
"@badServerLoginTypesException": {
"type": "String",
"placeholders": {
"serverVersions": {
"type": "String"
},
"supportedVersions": {
"type": "String"
}
}
},
"sendOnEnter": "Pošlji ob vstopu",
"@sendOnEnter": {},
"banFromChat": "Prepoved klepeta",
"@banFromChat": {
"type": "String",
"placeholders": {}
},
"banned": "Prepovedano",
"@banned": {
"type": "String",
"placeholders": {}
},
"bannedUser": "{username} je prepovedan v {targetName}",
"@bannedUser": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"targetName": {
"type": "String"
}
}
},
"blockDevice": "Blokirana naprava",
"@blockDevice": {
"type": "String",
"placeholders": {}
},
"blocked": "Blokirano",
"@blocked": {
"type": "String",
"placeholders": {}
},
"botMessages": "Botova sporočila",
"@botMessages": {
"type": "String",
"placeholders": {}
},
"cancel": "Prekliči",
"@cancel": {
"type": "String",
"placeholders": {}
},
"cantOpenUri": "URI-ja {uri} ni mogoče odpreti",
"@cantOpenUri": {
"type": "String",
"placeholders": {
"uri": {
"type": "String"
}
}
},
"changedTheChatAvatar": "{username} je spremenil avatar za klepet",
"@changedTheChatAvatar": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheChatPermissions": "{username} je spremenila dovoljenja za klepet",
"@changedTheChatPermissions": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheDisplaynameTo": "{username} je spremenil svoje prikazno ime v: '{displayname}'",
"@changedTheDisplaynameTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"displayname": {
"type": "String"
}
}
},
"changedTheGuestAccessRules": "{username} je spremenila pravila dostopa za goste",
"@changedTheGuestAccessRules": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheGuestAccessRulesTo": "{username} je spremenila pravila dostopa za goste v: {rules}",
"@changedTheGuestAccessRulesTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"rules": {
"type": "String"
}
}
},
"changedTheHistoryVisibilityTo": "{username} je spremenil vidnost zgodovine v: {rules}",
"@changedTheHistoryVisibilityTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"rules": {
"type": "String"
}
}
},
"changedTheJoinRules": "{username} je spremenil pravila za pridružitev",
"@changedTheJoinRules": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheJoinRulesTo": "{username} je spremenila pravila pridružitve v: {joinRules}",
"@changedTheJoinRulesTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"joinRules": {
"type": "String"
}
}
},
"changedTheProfileAvatar": "{username} je spremenil avatar",
"@changedTheProfileAvatar": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheRoomAliases": "{username} je spremenil vzdevke sobe",
"@changedTheRoomAliases": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changedTheRoomInvitationLink": "{username} je spremenil povezavo za povabilo",
"@changedTheRoomInvitationLink": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"changePassword": "Spremeni geslo",
"@changePassword": {
"type": "String",
"placeholders": {}
},
"changeTheHomeserver": "Spremenite domači strežnik",
"@changeTheHomeserver": {
"type": "String",
"placeholders": {}
},
"changeTheme": "Spremenite svoj slog",
"@changeTheme": {
"type": "String",
"placeholders": {}
},
"changeTheNameOfTheGroup": "Spremenite ime skupine",
"@changeTheNameOfTheGroup": {
"type": "String",
"placeholders": {}
},
"changeYourAvatar": "Spremenite svoj avatar",
"@changeYourAvatar": {
"type": "String",
"placeholders": {}
},
"chat": "Klepet",
"@chat": {
"type": "String",
"placeholders": {}
},
"yourChatBackupHasBeenSetUp": "Varnostna kopija klepeta je nastavljena.",
"@yourChatBackupHasBeenSetUp": {},
"chatBackup": "Varnostno kopiranje klepeta",
"@chatBackup": {
"type": "String",
"placeholders": {}
},
"chatDetails": "Podrobnosti klepeta",
"@chatDetails": {
"type": "String",
"placeholders": {}
},
"chatHasBeenAddedToThisSpace": "Klepet je bil dodan v ta prostor",
"@chatHasBeenAddedToThisSpace": {},
"chats": "Klepeti",
"@chats": {
"type": "String",
"placeholders": {}
},
"chooseAStrongPassword": "Izberite močno geslo",
"@chooseAStrongPassword": {
"type": "String",
"placeholders": {}
},
"clearArchive": "Počisti arhiv",
"@clearArchive": {},
"close": "Zapri",
"@close": {
"type": "String",
"placeholders": {}
},
"commandHint_ban": "Izključi določenega uporabnika iz te sobe",
"@commandHint_ban": {
"type": "String",
"description": "Usage hint for the command /ban"
},
"commandHint_html": "Pošljite besedilo v obliki HTML",
"@commandHint_html": {
"type": "String",
"description": "Usage hint for the command /html"
},
"commandHint_invite": "Povabi danega uporabnika v to sobo",
"@commandHint_invite": {
"type": "String",
"description": "Usage hint for the command /invite"
},
"commandHint_join": "Pridružite se dani sobi",
"@commandHint_join": {
"type": "String",
"description": "Usage hint for the command /join"
},
"commandHint_kick": "Odstranite danega uporabnika iz te sobe",
"@commandHint_kick": {
"type": "String",
"description": "Usage hint for the command /kick"
},
"commandHint_me": "Opisi sebe",
"@commandHint_me": {
"type": "String",
"description": "Usage hint for the command /me"
},
"commandHint_myroomavatar": "Nastavite svojo sliko za to sobo",
"@commandHint_myroomavatar": {
"type": "String",
"description": "Usage hint for the command /myroomavatar"
},
"commandHint_op": "Nastavite raven moči danega uporabnika (privzeto: 50)",
"@commandHint_op": {
"type": "String",
"description": "Usage hint for the command /op"
},
"commandHint_react": "Pošljite odgovor kot reakcijo",
"@commandHint_react": {
"type": "String",
"description": "Usage hint for the command /react"
},
"commandHint_send": "Pošlji besedilo",
"@commandHint_send": {
"type": "String",
"description": "Usage hint for the command /send"
},
"commandHint_unban": "Prekliči izključitev določenega uporabnika iz te sobe",
"@commandHint_unban": {
"type": "String",
"description": "Usage hint for the command /unban"
},
"commandInvalid": "Ukaz ni veljaven",
"@commandInvalid": {
"type": "String"
},
"commandMissing": "{command} is not a command.",
"@commandMissing": {
"type": "String",
"placeholders": {
"command": {
"type": "String"
}
},
"description": "State that {command} is not a valid /command."
},
"compareEmojiMatch": "Primerjajte in se prepričajte, da se naslednji emoji ujemajo s tistimi iz druge naprave:",
"@compareEmojiMatch": {
"type": "String",
"placeholders": {}
},
"compareNumbersMatch": "Primerjajte in se prepričajte, da se naslednje številke ujemajo s številkami druge naprave:",
"@compareNumbersMatch": {
"type": "String",
"placeholders": {}
},
"configureChat": "Konfigurirajte klepet",
"@configureChat": {
"type": "String",
"placeholders": {}
},
"confirm": "Potrdi",
"@confirm": {
"type": "String",
"placeholders": {}
},
"containsDisplayName": "Vsebuje prikazno ime",
"@containsDisplayName": {
"type": "String",
"placeholders": {}
},
"containsUserName": "Vsebuje uporabniško ime",
"@containsUserName": {
"type": "String",
"placeholders": {}
},
"archive": "Arhiv",
"@archive": {
"type": "String",
"placeholders": {}
},
"areYouSure": "Ali si prepričan?",
"@areYouSure": {
"type": "String",
"placeholders": {}
},
"acceptedTheInvitation": "{username} je sprejel povabilo",
"@acceptedTheInvitation": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"areYouSureYouWantToLogout": "Ali ste prepričani, da se želite odjaviti?",
"@areYouSureYouWantToLogout": {
"type": "String",
"placeholders": {}
},
"changedTheChatDescriptionTo": "{username} je spremenil opis klepeta v: '{description}'",
"@changedTheChatDescriptionTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"description": {
"type": "String"
}
}
},
"areGuestsAllowedToJoin": "Ali se lahko gostujoči uporabniki pridružijo",
"@areGuestsAllowedToJoin": {
"type": "String",
"placeholders": {}
},
"admin": "Admin",
"@admin": {
"type": "String",
"placeholders": {}
},
"badServerVersionsException": "Domači strežnik podpira različice Spec:\n{serverVersions}\nToda ta aplikacija podpira samo {supportedVersions}",
"@badServerVersionsException": {
"type": "String",
"placeholders": {
"serverVersions": {
"type": "String"
},
"supportedVersions": {
"type": "String"
}
}
},
"changedTheChatNameTo": "{username} je spremenil ime klepeta v: '{chatname}'",
"@changedTheChatNameTo": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
},
"chatname": {
"type": "String"
}
}
},
"changeDeviceName": "Spremenite ime naprave",
"@changeDeviceName": {
"type": "String",
"placeholders": {}
},
"changedTheHistoryVisibility": "{username} je spremenila vidnost zgodovine",
"@changedTheHistoryVisibility": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"channelCorruptedDecryptError": "Šifriranje je poškodovano",
"@channelCorruptedDecryptError": {
"type": "String",
"placeholders": {}
},
"contentHasBeenReported": "Vsebina je bila prijavljena skrbnikom strežnika",
"@contentHasBeenReported": {
"type": "String",
"placeholders": {}
},
"chatBackupDescription": "Varnostna kopija klepeta je zavarovana z varnostnim ključem. Prosimo, pazite, da ga ne izgubite.",
"@chatBackupDescription": {
"type": "String",
"placeholders": {}
},
"commandHint_myroomnick": "Nastavite prikazno ime za to sobo",
"@commandHint_myroomnick": {
"type": "String",
"description": "Usage hint for the command /myroomnick"
},
"connect": "Povežite se",
"@connect": {
"type": "String",
"placeholders": {}
},
"contactHasBeenInvitedToTheGroup": "Kontakt je bil povabljen v skupino",
"@contactHasBeenInvitedToTheGroup": {
"type": "String",
"placeholders": {}
},
"commandHint_leave": "Zapusti to sobo",
"@commandHint_leave": {
"type": "String",
"description": "Usage hint for the command /leave"
},
"commandHint_plain": "Pošlji neformatirano besedilo",
"@commandHint_plain": {
"type": "String",
"description": "Usage hint for the command /plain"
},
"copiedToClipboard": "Kopirano v odložišče",
"@copiedToClipboard": {
"type": "String",
"placeholders": {}
},
"copy": "Kopiraj",
"@copy": {
"type": "String",
"placeholders": {}
},
"copyToClipboard": "Kopiraj v odložišče",
"@copyToClipboard": {
"type": "String",
"placeholders": {}
},
"couldNotDecryptMessage": "Sporočila ni bilo mogoče dešifrirati: {error}",
"@couldNotDecryptMessage": {
"type": "String",
"placeholders": {
"error": {
"type": "String"
}
}
},
"countParticipants": "{count} udeležencev",
"@countParticipants": {
"type": "String",
"placeholders": {
"count": {
"type": "int"
}
}
},
"create": "Ustvari",
"@create": {
"type": "String",
"placeholders": {}
},
"createNewSpace": "Nov prostor",
"@createNewSpace": {
"type": "String",
"placeholders": {}
},
"currentlyActive": "Trenutno aktiven",
"@currentlyActive": {
"type": "String",
"placeholders": {}
},
"darkTheme": "Temno",
"@darkTheme": {
"type": "String",
"placeholders": {}
},
"defaultPermissionLevel": "Privzeta raven dovoljenja",
"@defaultPermissionLevel": {
"type": "String",
"placeholders": {}
},
"dateWithYear": "{day}-{month}-{year}",
"@dateWithYear": {
"type": "String",
"placeholders": {
"year": {
"type": "String"
},
"month": {
"type": "String"
},
"day": {
"type": "String"
}
}
},
"dateWithoutYear": "{month}-{day}",
"@dateWithoutYear": {
"type": "String",
"placeholders": {
"month": {
"type": "String"
},
"day": {
"type": "String"
}
}
},
"createdTheChat": "{username} je ustvaril klepet",
"@createdTheChat": {
"type": "String",
"placeholders": {
"username": {
"type": "String"
}
}
},
"dateAndTimeOfDay": "{date}, {timeOfDay}",
"@dateAndTimeOfDay": {
"type": "String",
"placeholders": {
"date": {
"type": "String"
},
"timeOfDay": {
"type": "String"
}
}
},
"deactivateAccountWarning": "S tem boste deaktivirali vaš uporabniški račun. Tega ni mogoče razveljaviti! Ali si prepričan?",
"@deactivateAccountWarning": {
"type": "String",
"placeholders": {}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -22,8 +22,7 @@
<body
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;">
<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">
<div class="w-full md:h-12 min-h-12 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>
@ -137,7 +136,7 @@
</div>
<!--Footer-->
<div class="w-full bg-white dark:bg-gray-800 bg-opacity-50 border-t dark:border-gray-600 flex justify-center">
<div class="w-full flex justify-center">
<footer class="w-full text-center max-w-4xl p-4 text-slate-700 dark:text-slate-200">

Binary file not shown.

View file

@ -1,96 +0,0 @@
-------------------------------
UBUNTU FONT LICENCE Version 1.0
-------------------------------
PREAMBLE
This licence allows the licensed fonts to be used, studied, modified and
redistributed freely. The fonts, including any derivative works, can be
bundled, embedded, and redistributed provided the terms of this licence
are met. The fonts and derivatives, however, cannot be released under
any other licence. The requirement for fonts to remain under this
licence does not require any document created using the fonts or their
derivatives to be published under this licence, as long as the primary
purpose of the document is not to be a vehicle for the distribution of
the fonts.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this licence and clearly marked as such. This may
include source files, build scripts and documentation.
"Original Version" refers to the collection of Font Software components
as received under this licence.
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to
a new environment.
"Copyright Holder(s)" refers to all individuals and companies who have a
copyright ownership of the Font Software.
"Substantially Changed" refers to Modified Versions which can be easily
identified as dissimilar to the Font Software by users of the Font
Software comparing the Original Version with the Modified Version.
To "Propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification and with or without charging
a redistribution fee), making available to the public, and in some
countries other activities as well.
PERMISSION & CONDITIONS
This licence does not grant any rights under trademark law and all such
rights are reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of the Font Software, to propagate the Font Software, subject to
the below conditions:
1) Each copy of the Font Software must contain the above copyright
notice and this licence. These can be included either as stand-alone
text files, human-readable headers or in the appropriate machine-
readable metadata fields within text or binary files as long as those
fields can be easily viewed by the user.
2) The font name complies with the following:
(a) The Original Version must retain its name, unmodified.
(b) Modified Versions which are Substantially Changed must be renamed to
avoid use of the name of the Original Version or similar names entirely.
(c) Modified Versions which are not Substantially Changed must be
renamed to both (i) retain the name of the Original Version and (ii) add
additional naming elements to distinguish the Modified Version from the
Original Version. The name of such Modified Versions must be the name of
the Original Version, with "derivative X" where X represents the name of
the new work, appended to that name.
3) The name(s) of the Copyright Holder(s) and any contributor to the
Font Software shall not be used to promote, endorse or advertise any
Modified Version, except (i) as required by this licence, (ii) to
acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with
their explicit written permission.
4) The Font Software, modified or unmodified, in part or in whole, must
be distributed entirely under this licence, and must not be distributed
under any other licence. The requirement for fonts to remain under this
licence does not affect any document created using the Font Software,
except any version of the Font Software extracted from a document
created using the Font Software may only be distributed under this
licence.
TERMINATION
This licence becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
DEALINGS IN THE FONT SOFTWARE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -30,7 +30,7 @@ class User {
const User(this.name, this.password);
}
const homeserver = 'http://${const String.fromEnvironment(
const homeserver = 'http://${String.fromEnvironment(
'HOMESERVER',
defaultValue: 'localhost',
)}';

View file

@ -0,0 +1,32 @@
#
# Generated file, do not edit.
#
import lldb
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
base = frame.register["x0"].GetValueAsAddress()
page_len = frame.register["x1"].GetValueAsUnsigned()
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
# first page to see if handled it correctly. This makes diagnosing
# misconfiguration (e.g. missing breakpoint) easier.
data = bytearray(page_len)
data[0:8] = b'IHELPED!'
error = lldb.SBError()
frame.GetThread().GetProcess().WriteMemory(base, data, error)
if not error.Success():
print(f'Failed to write into {base}[+{page_len}]', error)
return
def __lldb_init_module(debugger: lldb.SBDebugger, _):
target = debugger.GetDummyTarget()
# Caveat: must use BreakpointCreateByRegEx here and not
# BreakpointCreateByName. For some reasons callback function does not
# get carried over from dummy target for the later.
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
bp.SetAutoContinue(True)
print("-- LLDB integration loaded --")

View file

@ -0,0 +1,5 @@
#
# Generated file, do not edit.
#
command script import --relative-to-command-file flutter_lldb_helper.py

View file

@ -17,8 +17,6 @@
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
A10584DF00E2CBE024A7FEB1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F30C00BA233E7CA67AFBED5 /* Pods_Runner.framework */; };
BCFA6E528F0B53B71B652C77 /* Pods_FluffyChat_Share.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B1F89C23F73F2B8E7922A37 /* Pods_FluffyChat_Share.framework */; };
C1005C45261071B5002F4F32 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1005C44261071B5002F4F32 /* ShareViewController.swift */; };
C1005C48261071B5002F4F32 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1005C46261071B5002F4F32 /* MainInterface.storyboard */; };
C1005C4C261071B5002F4F32 /* FluffyChat Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C1005C42261071B5002F4F32 /* FluffyChat Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
@ -62,7 +60,6 @@
/* Begin PBXFileReference section */
09545B0C8C397F94966EA956 /* Pods-FluffyChat Share.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FluffyChat Share.debug.xcconfig"; path = "Target Support Files/Pods-FluffyChat Share/Pods-FluffyChat Share.debug.xcconfig"; sourceTree = "<group>"; };
0BDDCB1746F84339AF1A5F40 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
23120B990D2B5081843FB313 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
@ -81,8 +78,6 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9B1F89C23F73F2B8E7922A37 /* Pods_FluffyChat_Share.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FluffyChat_Share.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9F30C00BA233E7CA67AFBED5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C1005C42261071B5002F4F32 /* FluffyChat Share.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "FluffyChat Share.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
C1005C44261071B5002F4F32 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
C1005C47261071B5002F4F32 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };

View file

@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
@ -43,6 +44,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"

View file

@ -1,4 +1,4 @@
arb-dir: assets/l10n
arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: l10n.dart
output-class: L10n

View file

@ -9,13 +9,16 @@ abstract class AppConfig {
// static String _applicationName = 'FluffyChat';
static String _applicationName = 'Pangea Chat';
// #Pangea
static String get applicationName => _applicationName;
static String? _applicationWelcomeMessage;
static String? get applicationWelcomeMessage => _applicationWelcomeMessage;
// #Pangea
// static String _defaultHomeserver = 'matrix.org';
static String _defaultHomeserver = Environment.synapseURL;
// #Pangea
static String get _defaultHomeserver => Environment.synapseURL;
// Pangea#
static String get defaultHomeserver => _defaultHomeserver;
static double fontSizeFactor = 1;
static const Color chatColor = primaryColor;
@ -23,8 +26,9 @@ abstract class AppConfig {
static const double messageFontSize = 16.0;
static const bool allowOtherHomeservers = true;
static const bool enableRegistration = true;
// #Pangea
static const double toolbarMaxHeight = 250.0;
static const double toolbarMinHeight = 200.0;
static const double toolbarMinHeight = 150.0;
static const double toolbarMinWidth = 350.0;
static const double defaultHeaderHeight = 56.0;
static const double toolbarButtonsHeight = 50.0;
@ -33,14 +37,13 @@ abstract class AppConfig {
static const double readingAssistanceInputBarHeight = 140.0;
static const double reactionsPickerHeight = 48.0;
static const double chatInputRowOverlayPadding = 8.0;
static const double selectModeInputBarHeight =
reactionsPickerHeight + (chatInputRowOverlayPadding * 2) + toolbarSpacing;
static const double selectModeInputBarHeight = 0;
// reactionsPickerHeight + (chatInputRowOverlayPadding * 2) + toolbarSpacing;
static const double practiceModeInputBarHeight =
readingAssistanceInputBarHeight +
toolbarButtonsHeight +
(chatInputRowOverlayPadding * 2) +
toolbarSpacing;
static const double audioTranscriptionMaxHeight = 150.0;
static TextStyle messageTextStyle(
Event? event,
@ -50,7 +53,7 @@ abstract class AppConfig {
final bigEmotes = event != null &&
event.onlyEmotes &&
event.numberEmotes > 0 &&
event.numberEmotes <= 10;
event.numberEmotes <= 3;
return TextStyle(
color: textColor,
@ -74,6 +77,10 @@ abstract class AppConfig {
static const Color silver = Color.fromARGB(255, 192, 192, 192);
static const Color bronze = Color.fromARGB(255, 205, 127, 50);
static const Color goldLight = Color.fromARGB(255, 254, 223, 73);
static const Color yellowLight = Color.fromARGB(255, 247, 218, 120);
static const Color yellowDark = Color.fromARGB(255, 253, 191, 1);
static const Color error = Colors.red;
static const int overlayAnimationDuration = 250;
static const int roomCreationTimeoutSeconds = 15;
@ -81,6 +88,7 @@ abstract class AppConfig {
// 'https://gitlab.com/famedly/fluffychat/-/blob/main/PRIVACY.md';
static String _privacyUrl = "https://www.pangeachat.com/privacy";
//Pangea#
static String get privacyUrl => _privacyUrl;
// #Pangea
// static const String website = 'https://fluffychat.im';
@ -96,19 +104,21 @@ abstract class AppConfig {
// #Pangea
// static const String appOpenUrlScheme = 'im.fluffychat';
static const String appOpenUrlScheme = 'matrix.pangea.chat';
static String _webBaseUrl = 'https://fluffychat.im/web';
// Pangea#
static String _webBaseUrl = 'https://fluffychat.im/web';
static String get webBaseUrl => _webBaseUrl;
//#Pangea
static const String sourceCodeUrl = 'https://gitlab.com/famedly/fluffychat';
static const String sourceCodeUrl =
'https://github.com/krille-chan/fluffychat';
// #Pangea
// static const String supportUrl =
// 'https://gitlab.com/famedly/fluffychat/issues';
// 'https://github.com/krille-chan/fluffychat/issues';
// static const String changelogUrl =
// 'https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md';
static const String supportUrl = 'https://www.pangeachat.com/faqs';
static const String termsOfServiceUrl =
'https://www.pangeachat.com/terms-of-service';
// static const String changelogUrl =
// 'https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md';
//Pangea#
// Pangea#
static final Uri newIssueUrl = Uri(
scheme: 'https',
host: 'github.com',
@ -120,7 +130,10 @@ abstract class AppConfig {
'https://8591d0d863b646feb4f3dda7e5dcab38@o256755.ingest.sentry.io/5243143';
// Pangea#
static bool renderHtml = true;
static bool hideRedactedEvents = false;
// #Pangea
// static bool hideRedactedEvents = false;
static bool hideRedactedEvents = true;
// Pangea#
static bool hideUnknownEvents = true;
static bool hideUnimportantStateEvents = true;
static bool separateChatTypes = false;
@ -130,6 +143,10 @@ abstract class AppConfig {
static bool swipeRightToLeftToReply = true;
static bool? sendOnEnter;
static bool showPresences = true;
// #Pangea
// static bool displayNavigationRail = false;
static bool displayNavigationRail = true;
// Pangea#
static bool experimentalVoip = false;
static const bool hideTypingUsernames = false;
static const bool hideAllStateEvents = false;
@ -138,25 +155,10 @@ abstract class AppConfig {
static const String schemePrefix = 'matrix:';
// #Pangea
// 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';
// static const String pushNotificationsPusherFormat = 'event_id_only';
static const String pushNotificationsChannelId = 'pangeachat_push';
static const String pushNotificationsChannelName = 'Pangea Chat push channel';
static const String pushNotificationsChannelDescription =
'Push notifications for Pangea Chat';
static const String pushNotificationsAppId = 'com.talktolearn.chat';
static const String pushNotificationsGatewayUrl =
'https://sygnal.pangea.chat/_matrix/push/v1/notify';
static const String? pushNotificationsPusherFormat = null;
// Pangea#
static const String emojiFontName = 'Noto Emoji';
static const String emojiFontUrl =
'https://github.com/googlefonts/noto-emoji/';
static const double borderRadius = 18.0;
static const double columnWidth = 360.0;
static final Uri homeserverList = Uri(
@ -208,9 +210,11 @@ abstract class AppConfig {
if (json['application_welcome_message'] is String) {
_applicationWelcomeMessage = json['application_welcome_message'];
}
if (json['default_homeserver'] is String) {
_defaultHomeserver = json['default_homeserver'];
}
// #Pangea
// if (json['default_homeserver'] is String) {
// _defaultHomeserver = json['default_homeserver'];
// }
// Pangea#
if (json['privacy_url'] is String) {
_privacyUrl = json['privacy_url'];
}

View file

@ -32,16 +32,20 @@ import 'package:fluffychat/pages/settings_style/settings_style.dart';
import 'package:fluffychat/pangea/activity_generator/activity_generator.dart';
import 'package:fluffychat/pangea/activity_planner/activity_planner_page.dart';
import 'package:fluffychat/pangea/activity_suggestions/suggestions_page.dart';
import 'package:fluffychat/pangea/find_your_people/find_your_people.dart';
import 'package:fluffychat/pangea/find_your_people/find_your_people_side_view.dart';
import 'package:fluffychat/pangea/guard/p_vguard.dart';
import 'package:fluffychat/pangea/layouts/bottom_nav_layout.dart';
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
import 'package:fluffychat/pangea/login/pages/login_or_signup_view.dart';
import 'package:fluffychat/pangea/login/pages/signup.dart';
import 'package:fluffychat/pangea/login/pages/space_code_onboarding.dart';
import 'package:fluffychat/pangea/login/pages/user_settings.dart';
import 'package:fluffychat/pangea/onboarding/onboarding.dart';
import 'package:fluffychat/pangea/spaces/constants/space_constants.dart';
import 'package:fluffychat/pangea/spaces/utils/join_with_alias.dart';
import 'package:fluffychat/pangea/spaces/utils/join_with_link.dart';
import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart';
import 'package:fluffychat/pangea/user/pages/find_partner.dart';
import 'package:fluffychat/widgets/config_viewer.dart';
import 'package:fluffychat/widgets/layouts/empty_page.dart';
import 'package:fluffychat/widgets/layouts/two_column_layout.dart';
import 'package:fluffychat/widgets/log_view.dart';
@ -130,24 +134,32 @@ abstract class AppRoutes {
const LogViewer(),
),
),
GoRoute(
path: '/configs',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const ConfigViewer(),
),
),
// #Pangea
GoRoute(
path: '/join_with_link',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const JoinClassWithLink(),
JoinClassWithLink(
classCode: state.uri.queryParameters[SpaceConstants.classCode],
),
),
),
GoRoute(
path: '/join_with_alias',
pageBuilder: (context, state) => Matrix.of(context).client.isLogged()
? chatListShellRouteBuilder(context, state, const JoinWithAlias())
: defaultPageBuilder(
context,
state,
const JoinWithAlias(),
),
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
JoinWithAlias(alias: state.uri.queryParameters['alias']),
),
),
GoRoute(
path: '/user_age',
@ -157,30 +169,17 @@ abstract class AppRoutes {
const UserSettingsPage(),
),
redirect: loggedOutRedirect,
),
ShellRoute(
pageBuilder: chatListShellRouteBuilder,
routes: [
GoRoute(
path: '/homepage',
path: 'join_space',
pageBuilder: (context, state) {
return defaultPageBuilder(
context,
state,
const SpaceCodeOnboarding(),
);
},
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const SuggestionsPage(),
),
routes: [
...newRoomRoutes,
GoRoute(
path: '/planner',
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const ActivityGenerator(),
),
),
],
),
],
),
@ -192,40 +191,61 @@ abstract class AppRoutes {
pageBuilder: (context, state, child) => noTransitionPageBuilder(
context,
state,
// #Pangea
// FluffyThemes.isColumnMode(context) &&
// state.fullPath?.startsWith('/rooms/settings') == false
FluffyThemes.isColumnMode(context) &&
state.fullPath?.startsWith('/rooms/settings') == false
state.fullPath?.startsWith('/rooms/settings') == false &&
state.fullPath?.startsWith('/rooms/communities') == false
// Pangea#
? TwoColumnLayout(
mainView: ChatList(
activeChat: state.pathParameters['roomid'],
// #Pangea
activeSpaceId: state.uri.queryParameters['spaceId'],
// Pangea#
displayNavigationRail:
state.path?.startsWith('/rooms/settings') != true,
),
sideView: child,
)
// #Pangea
// : child,
: FluffyThemes.isColumnMode(context) ||
(state.fullPath?.split("/").reversed.elementAt(1) ==
'rooms' &&
state.pathParameters['roomid'] != null)
? child
: BottomNavLayout(mainView: child),
// Pangea#
: child,
),
routes: [
GoRoute(
path: '/rooms',
redirect: loggedOutRedirect,
// #Pangea
// redirect: loggedOutRedirect,
redirect: (context, state) async {
final resp = await loggedOutRedirect(context, state);
if (resp != null) return resp;
final isColumnMode = FluffyThemes.isColumnMode(context);
final spaceId = state.uri.queryParameters['spaceId'];
if (spaceId != null &&
spaceId != 'clear' &&
isColumnMode &&
state.fullPath != null &&
!state.fullPath!.contains('details')) {
return '/rooms/$spaceId/details?spaceId=$spaceId';
}
return null;
},
// Pangea#
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
FluffyThemes.isColumnMode(context)
// #Pangea
// ? const EmptyPage()
? const SuggestionsPage()
? const Onboarding()
// Pangea#
: ChatList(
activeChat: state.pathParameters['roomid'],
// #Pangea
activeSpaceId: state.uri.queryParameters['spaceId'],
// Pangea#
),
),
routes: [
@ -266,22 +286,12 @@ abstract class AppRoutes {
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const NewGroup(),
// #Pangea
// const NewGroup(),
NewGroup(spaceId: state.uri.queryParameters['space']),
// Pangea#
),
redirect: loggedOutRedirect,
// #Pangea
routes: [
GoRoute(
path: ':spaceid',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
NewGroup(spaceId: state.pathParameters['spaceid']!),
),
redirect: loggedOutRedirect,
),
],
// Pangea#
),
GoRoute(
path: 'newspace',
@ -293,14 +303,61 @@ abstract class AppRoutes {
redirect: loggedOutRedirect,
),
// #Pangea
ShellRoute(
pageBuilder: (context, state, child) => defaultPageBuilder(
context,
state,
FluffyThemes.isColumnMode(context)
? TwoColumnLayout(
mainView: const FindYourPeopleSideView(),
sideView: child,
dividerColor: Colors.transparent,
)
: child,
),
routes: [
GoRoute(
path: 'communities',
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const FindYourPeople(),
),
),
],
),
GoRoute(
path: 'partner',
path: 'homepage',
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const FindPartner(),
const SuggestionsPage(),
),
redirect: loggedOutRedirect,
routes: [
...newRoomRoutes,
GoRoute(
path: '/planner',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const ActivityPlannerPage(),
),
redirect: loggedOutRedirect,
routes: [
GoRoute(
path: '/generator',
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const ActivityGenerator(),
),
),
],
),
],
),
// Pangea#
ShellRoute(
@ -521,30 +578,6 @@ abstract class AppRoutes {
redirect: loggedOutRedirect,
),
// #Pangea
GoRoute(
path: 'planner',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
ActivityPlannerPage(
roomID: state.pathParameters['roomid']!,
),
),
redirect: loggedOutRedirect,
routes: [
GoRoute(
path: '/generator',
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
ActivityGenerator(
roomID: state.pathParameters['roomid']!,
),
),
),
],
),
// GoRoute(
// path: 'encryption',
// pageBuilder: (context, state) => defaultPageBuilder(
@ -576,6 +609,32 @@ abstract class AppRoutes {
),
),
routes: [
// #Pangea
GoRoute(
path: 'planner',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
ActivityPlannerPage(
roomID: state.pathParameters['roomid']!,
),
),
redirect: loggedOutRedirect,
routes: [
GoRoute(
path: '/generator',
redirect: loggedOutRedirect,
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
ActivityGenerator(
roomID: state.pathParameters['roomid']!,
),
),
),
],
),
// Pangea#
GoRoute(
path: 'access',
pageBuilder: (context, state) => defaultPageBuilder(
@ -594,6 +653,9 @@ abstract class AppRoutes {
state,
ChatMembersPage(
roomId: state.pathParameters['roomid']!,
// #Pangea
filter: state.uri.queryParameters['filter'],
// Pangea#
),
),
redirect: loggedOutRedirect,
@ -704,31 +766,5 @@ abstract class AppRoutes {
redirect: loggedOutRedirect,
),
];
static Page chatListShellRouteBuilder(
context,
state,
child,
) =>
noTransitionPageBuilder(
context,
state,
FluffyThemes.isColumnMode(context) &&
state.fullPath?.startsWith('/rooms/settings') == false
? TwoColumnLayout(
mainView: ChatList(
activeChat: state.pathParameters['roomid'],
displayNavigationRail:
state.path?.startsWith('/rooms/settings') != true,
),
sideView: child,
)
: FluffyThemes.isColumnMode(context) ||
(state.fullPath?.split("/").reversed.elementAt(1) ==
'rooms' &&
state.pathParameters['roomid'] != null)
? child
: BottomNavLayout(mainView: child),
);
// Pangea#
}

View file

@ -1,3 +1,5 @@
import 'package:shared_preferences/shared_preferences.dart';
abstract class SettingKeys {
static const String renderHtml = 'chat.fluffy.renderHtml';
static const String hideRedactedEvents = 'chat.fluffy.hideRedactedEvents';
@ -30,9 +32,74 @@ abstract class SettingKeys {
'chat.fluffy.swipeRightToLeftToReply';
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';
static const String shareKeysWith = 'chat.fluffy.share_keys_with';
static const String displayNavigationRail =
'chat.fluffy.display_navigation_rail';
}
enum AppSettings<T> {
audioRecordingNumChannels<int>('audioRecordingNumChannels', 1),
audioRecordingAutoGain<bool>('audioRecordingAutoGain', true),
audioRecordingEchoCancel<bool>('audioRecordingEchoCancel', false),
audioRecordingNoiseSuppress<bool>('audioRecordingNoiseSuppress', true),
audioRecordingBitRate<int>('audioRecordingBitRate', 64000),
// #Pangea
// audioRecordingSamplingRate<int>('audioRecordingSamplingRate', 44100),
audioRecordingSamplingRate<int>('audioRecordingSamplingRate', 22050),
// Pangea#
pushNotificationsGatewayUrl<String>(
'pushNotificationsGatewayUrl',
// #Pangea
// 'https://push.fluffychat.im/_matrix/push/v1/notify',
'https://sygnal.pangea.chat/_matrix/push/v1/notify',
// Pangea#
),
pushNotificationsPusherFormat<String>(
'pushNotificationsPusherFormat',
'event_id_only',
),
shareKeysWith<String>('chat.fluffy.share_keys_with_2', 'all'),
noEncryptionWarningShown<bool>(
'chat.fluffy.no_encryption_warning_shown',
false,
),
displayChatDetailsColumn(
'chat.fluffy.display_chat_details_column',
false,
),
enableSoftLogout<bool>('chat.fluffy.enable_soft_logout', false);
final String key;
final T defaultValue;
const AppSettings(this.key, this.defaultValue);
}
extension AppSettingsBoolExtension on AppSettings<bool> {
bool getItem(SharedPreferences store) => store.getBool(key) ?? defaultValue;
Future<void> setItem(SharedPreferences store, bool value) =>
store.setBool(key, value);
}
extension AppSettingsStringExtension on AppSettings<String> {
String getItem(SharedPreferences store) =>
store.getString(key) ?? defaultValue;
Future<void> setItem(SharedPreferences store, String value) =>
store.setString(key, value);
}
extension AppSettingsIntExtension on AppSettings<int> {
int getItem(SharedPreferences store) => store.getInt(key) ?? defaultValue;
Future<void> setItem(SharedPreferences store, int value) =>
store.setInt(key, value);
}
extension AppSettingsDoubleExtension on AppSettings<double> {
double getItem(SharedPreferences store) =>
store.getDouble(key) ?? defaultValue;
Future<void> setItem(SharedPreferences store, double value) =>
store.setDouble(key, value);
}

View file

@ -7,7 +7,10 @@ import 'app_config.dart';
abstract class FluffyThemes {
static const double columnWidth = 380.0;
static const double navRailWidth = 80.0;
// #Pangea
// static const double navRailWidth = 80.0;
static const double navRailWidth = 72.0;
// Pangea#
static bool isColumnModeByWidth(double width) =>
width > columnWidth * 2 + navRailWidth;
@ -18,27 +21,6 @@ abstract class FluffyThemes {
static bool isThreeColumnMode(BuildContext context) =>
MediaQuery.of(context).size.width > FluffyThemes.columnWidth * 3.5;
static const fallbackTextStyle = TextStyle(
fontFamily: 'Ubuntu',
fontFamilyFallback: ['NotoEmoji'],
);
static var fallbackTextTheme = const TextTheme(
bodyLarge: fallbackTextStyle,
bodyMedium: fallbackTextStyle,
labelLarge: fallbackTextStyle,
bodySmall: fallbackTextStyle,
labelSmall: fallbackTextStyle,
displayLarge: fallbackTextStyle,
displayMedium: fallbackTextStyle,
displaySmall: fallbackTextStyle,
headlineMedium: fallbackTextStyle,
headlineSmall: fallbackTextStyle,
titleLarge: fallbackTextStyle,
titleMedium: fallbackTextStyle,
titleSmall: fallbackTextStyle,
);
static LinearGradient backgroundGradient(
BuildContext context,
int alpha,
@ -77,11 +59,6 @@ abstract class FluffyThemes {
useMaterial3: true,
brightness: brightness,
colorScheme: colorScheme,
// #Pangea
// causes memory leak on iOS
// textTheme: fallbackTextTheme,
// textTheme: scaleTextTheme(Theme.of(context).textTheme, MediaQuery.of(context).size),
// Pangea#
dividerColor: brightness == Brightness.dark
? colorScheme.surfaceContainerHighest
: colorScheme.surfaceContainer,
@ -105,7 +82,14 @@ abstract class FluffyThemes {
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
),
contentPadding: const EdgeInsets.all(12),
filled: false,
),
chipTheme: ChipThemeData(
showCheckmark: false,
backgroundColor: colorScheme.surfaceContainer,
side: BorderSide.none,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
),
),
appBarTheme: AppBarTheme(
toolbarHeight: isColumnMode ? 72 : 56,
@ -197,6 +181,7 @@ extension BubbleColorTheme on ThemeData {
Color get bubbleColor => brightness == Brightness.light
? colorScheme.primary
: colorScheme.primaryContainer;
Color get onBubbleColor => brightness == Brightness.light
? colorScheme.onPrimary
: colorScheme.onPrimaryContainer;

3185
lib/l10n/intl_ar.arb Normal file

File diff suppressed because it is too large Load diff

1
lib/l10n/intl_be.arb Normal file
View file

@ -0,0 +1 @@
{}

2107
lib/l10n/intl_bn.arb Normal file

File diff suppressed because it is too large Load diff

2102
lib/l10n/intl_bo.arb Normal file

File diff suppressed because it is too large Load diff

3339
lib/l10n/intl_ca.arb Normal file

File diff suppressed because it is too large Load diff

2673
lib/l10n/intl_cs.arb Normal file

File diff suppressed because it is too large Load diff

29
lib/l10n/intl_da.arb Normal file
View file

@ -0,0 +1,29 @@
{
"repeatPassword": "Gentag password",
"@repeatPassword": {},
"notAnImage": "Ikke en billedfil.",
"@notAnImage": {},
"setCustomPermissionLevel": "Indstil særligt tilladelsesniveau",
"@setCustomPermissionLevel": {},
"setPermissionsLevelDescription": "Vælg en prædefineret rolle herunder eller indtaste et særligt tilladelsesniveau mellem 0 og 100.",
"@setPermissionsLevelDescription": {},
"ignoreUser": "Ignorér bruger",
"@ignoreUser": {},
"remove": "Fjern",
"@remove": {
"type": "String",
"placeholders": {}
},
"importNow": "Importer nu",
"@importNow": {},
"importEmojis": "Importer emojis",
"@importEmojis": {},
"normalUser": "Normal bruger",
"@normalUser": {},
"importFromZipFile": "Importer fra .zip fil",
"@importFromZipFile": {},
"alwaysUse24HourFormat": "true",
"@alwaysUse24HourFormat": {
"description": "Set to true to always display time of day in 24 hour format."
}
}

View file

@ -205,7 +205,7 @@
}
}
},
"changedTheChatDescriptionTo": "{username} hat die Chat-Beschreibung geändert zu: \"{description}\"",
"changedTheChatDescriptionTo": "{username} hat die Chatbeschreibung geändert in: '{description}'",
"@changedTheChatDescriptionTo": {
"type": "String",
"placeholders": {
@ -217,7 +217,7 @@
}
}
},
"changedTheChatNameTo": "{username} hat den Chat-Namen geändert zu: \"{chatname}\"",
"changedTheChatNameTo": "{username} hat den Chatnamen geändert in: '{chatname}'",
"@changedTheChatNameTo": {
"type": "String",
"placeholders": {
@ -238,7 +238,7 @@
}
}
},
"changedTheDisplaynameTo": "{username} hat den Nicknamen geändert zu: \"{displayname}\"",
"changedTheDisplaynameTo": "{username} hat den Spitznamen geändert in: '{displayname}'",
"@changedTheDisplaynameTo": {
"type": "String",
"placeholders": {
@ -1499,11 +1499,6 @@
"type": "String",
"placeholders": {}
},
"renderRichContent": "Zeige Nachrichtenformatierungen an",
"@renderRichContent": {
"type": "String",
"placeholders": {}
},
"replaceRoomWithNewerVersion": "Raum mit neuer Version ersetzen",
"@replaceRoomWithNewerVersion": {
"type": "String",
@ -3159,8 +3154,6 @@
}
}
},
"sendUncompressed": "Unkomprimiert senden",
"@sendUncompressed": {},
"boldText": "Fetter Text",
"@boldText": {},
"invalidUrl": "Ungültige URL",
@ -3247,5 +3240,145 @@
"notificationRuleSuppressNoticesDescription": "Unterdrückt Benachrichtigungen von automatisierten Clients wie Bots.",
"@notificationRuleSuppressNoticesDescription": {},
"notificationRuleInviteForMe": "Einladung für mich",
"@notificationRuleInviteForMe": {}
"@notificationRuleInviteForMe": {},
"notificationRuleReaction": "Reaktion",
"@notificationRuleReaction": {},
"notificationRuleReactionDescription": "Unterdrückt Benachrichtigungen für Reaktionen.",
"@notificationRuleReactionDescription": {},
"notificationRuleSuppressEditsDescription": "Unterdrückt Benachrichtigungen für bearbeitete Nachrichten.",
"@notificationRuleSuppressEditsDescription": {},
"notificationRuleCall": "Anruf",
"@notificationRuleCall": {},
"notificationRuleCallDescription": "Benachrichtigt den Benutzer über Anrufe.",
"@notificationRuleCallDescription": {},
"notificationRuleEncrypted": "Verschlüsselt",
"@notificationRuleEncrypted": {},
"more": "Mehr",
"@more": {},
"notificationRuleSuppressEdits": "Unterdrückt Bearbeitungen",
"@notificationRuleSuppressEdits": {},
"notificationRuleRoomServerAclDescription": "Unterdrückt Benachrichtigungen für Raumserver-Zugriffskontrolllisten (ACL).",
"@notificationRuleRoomServerAclDescription": {},
"notificationRuleMessage": "Nachricht",
"@notificationRuleMessage": {},
"notificationRuleMessageDescription": "Informiert den Benutzer über allgemeine Nachrichten.",
"@notificationRuleMessageDescription": {},
"notificationRuleJitsi": "Jitsi",
"@notificationRuleJitsi": {},
"allDevices": "Alle Geräte",
"@allDevices": {},
"enterNewChat": "Neuen Chat betreten",
"@enterNewChat": {},
"shareKeysWith": "Schlüssel teilen mit...",
"@shareKeysWith": {},
"shareKeysWithDescription": "Welchen Geräten sollte vertraut werden, damit sie deine Nachrichten in verschlüsselten Chats mitlesen können?",
"@shareKeysWithDescription": {},
"verifiedDevicesOnly": "Nur verifizierte Geräte",
"@verifiedDevicesOnly": {},
"takeAPhoto": "Foto aufnehmen",
"@takeAPhoto": {},
"recordAVideo": "Video aufnehmen",
"@recordAVideo": {},
"optionalMessage": "(Optionale) Nachricht...",
"@optionalMessage": {},
"notSupportedOnThisDevice": "Nicht unterstützt auf diesem Gerät",
"@notSupportedOnThisDevice": {},
"ignoreUser": "Nutzer ignorieren",
"@ignoreUser": {},
"notificationRuleEncryptedRoomOneToOneDescription": "Benachrichtigt den Benutzer über Nachrichten in verschlüsselten Eins-zu-Eins-Chats.",
"@notificationRuleEncryptedRoomOneToOneDescription": {},
"commandHint_roomupgrade": "Aktualisieren Sie diesen Raum auf die angegebene Raumversion",
"@commandHint_roomupgrade": {},
"notificationRuleMemberEvent": "Mitgliederveranstaltung",
"@notificationRuleMemberEvent": {},
"notificationRuleInviteForMeDescription": "Benachrichtigt den Benutzer, wenn er in einen Raum eingeladen wird.",
"@notificationRuleInviteForMeDescription": {},
"notificationRuleIsUserMentionDescription": "Benachrichtigt den Benutzer, wenn er in einer Nachricht direkt erwähnt wird.",
"@notificationRuleIsUserMentionDescription": {},
"notificationRuleRoomnotifDescription": "Benachrichtigt den Benutzer, wenn eine Nachricht „@room“ enthält.",
"@notificationRuleRoomnotifDescription": {},
"notificationRuleRoomOneToOneDescription": "Benachrichtigt den Benutzer über Nachrichten in Einzelchats.",
"@notificationRuleRoomOneToOneDescription": {},
"notificationRuleEncryptedDescription": "Benachrichtigt den Benutzer über Nachrichten in verschlüsselten Räumen.",
"@notificationRuleEncryptedDescription": {},
"notificationRuleJitsiDescription": "Benachrichtigt den Benutzer über Jitsi-Widget-Ereignisse.",
"@notificationRuleJitsiDescription": {},
"checkList": "Checkliste",
"@checkList": {},
"countInvited": "{count} invited",
"@countInvited": {
"type": "String",
"placeholders": {
"count": {
"type": "int"
}
}
},
"notificationRuleIsUserMention": "Benutzererwähnung",
"@notificationRuleIsUserMention": {},
"notificationRuleContainsDisplayName": "Enthält den Anzeigenamen",
"@notificationRuleContainsDisplayName": {},
"notificationRuleContainsDisplayNameDescription": "Benachrichtigt den Benutzer, wenn eine Nachricht seinen Anzeigenamen enthält.",
"@notificationRuleContainsDisplayNameDescription": {},
"notificationRuleIsRoomMention": "Chat-Erwähnung",
"@notificationRuleIsRoomMention": {},
"notificationRuleRoomnotif": "Chat-Benachritigung",
"@notificationRuleRoomnotif": {},
"notificationRuleTombstoneDescription": "Benachrichtigt den Benutzer über Nachrichten zur Raumdeaktivierung.",
"@notificationRuleTombstoneDescription": {},
"notificationRuleEncryptedRoomOneToOne": "Verschlüsselter Einzelchat",
"@notificationRuleEncryptedRoomOneToOne": {},
"notificationRuleRoomOneToOne": "Einzelchat",
"@notificationRuleRoomOneToOne": {},
"notificationRuleServerAclDescription": "Unterdrückt Benachrichtigungen für Server-ACL-Ereignisse.",
"@notificationRuleServerAclDescription": {},
"unknownPushRule": "Unbekannte Push-Regel '{rule}'",
"@unknownPushRule": {
"type": "String",
"placeholders": {
"rule": {
"type": "String"
}
}
},
"deletePushRuleCanNotBeUndone": "Wenn Sie diese Benachrichtigungseinstellung löschen, kann dies nicht rückgängig gemacht werden.",
"@deletePushRuleCanNotBeUndone": {},
"crossVerifiedDevices": "Cross-verifizierte Geräte",
"@crossVerifiedDevices": {},
"notificationRuleIsRoomMentionDescription": "Benachrichtigt den Benutzer, wenn ein Raum erwähnt wird.",
"@notificationRuleIsRoomMentionDescription": {},
"notificationRuleRoomServerAcl": "Raumserver-ACL",
"@notificationRuleRoomServerAcl": {},
"crossVerifiedDevicesIfEnabled": "Cross-verifizierte Geräte, falls aktiviert",
"@crossVerifiedDevicesIfEnabled": {},
"notificationRuleServerAcl": "Unterdrücken von Server-ACL-Ereignissen",
"@notificationRuleServerAcl": {},
"notificationRuleMemberEventDescription": "Unterdrückt Benachrichtigungen zu Mitgliedschaftsereignissen.",
"@notificationRuleMemberEventDescription": {},
"sentVoiceMessage": "🎙️ {duration} - {sender}",
"@sentVoiceMessage": {
"type": "String",
"placeholders": {
"sender": {
"type": "String"
},
"duration": {
"type": "String"
}
}
},
"normalUser": "Normaler Benutzer",
"@normalUser": {},
"setCustomPermissionLevel": "Benutzerdefinierte Berechtigungsstufe festlegen",
"@setCustomPermissionLevel": {},
"setPermissionsLevelDescription": "Bitte wählen Sie unten eine vordefinierte Rolle aus oder geben Sie eine benutzerdefinierte Berechtigungsstufe zwischen 0 und 100 ein.",
"@setPermissionsLevelDescription": {},
"approve": "Genehmigen",
"@approve": {},
"youHaveKnocked": "Du hast geklopft",
"@youHaveKnocked": {},
"pleaseWaitUntilInvited": "Bitte warte nun, bis dich jemand aus dem Raum auffordert.",
"@pleaseWaitUntilInvited": {},
"notificationRuleTombstone": "Tombstone",
"@notificationRuleTombstone": {}
}

2152
lib/l10n/intl_el.arb Normal file

File diff suppressed because it is too large Load diff

View file

@ -9,6 +9,10 @@
"@repeatPassword": {},
"notAnImage": "Not an image file.",
"@notAnImage": {},
"setCustomPermissionLevel": "Set custom permission level",
"setPermissionsLevelDescription": "Please choose a predefined role below or enter a custom permission level between 0 and 100.",
"ignoreUser": "Ignore user",
"normalUser": "Normal user",
"remove": "Remove",
"@remove": {
"type": "String",
@ -102,6 +106,7 @@
"type": "String",
"placeholders": {}
},
"commandHint_roomupgrade": "Upgrade this room to the given room version",
"commandHint_googly": "Send some googly eyes",
"@commandHint_googly": {},
"commandHint_cuddle": "Send a cuddle",
@ -691,6 +696,7 @@
}
}
},
"checkList": "Check list",
"countParticipants": "{count} participants",
"@countParticipants": {
"type": "String",
@ -700,6 +706,15 @@
}
}
},
"countInvited": "{count} invited",
"@countInvited": {
"type": "String",
"placeholders": {
"count": {
"type": "int"
}
}
},
"create": "Create",
"@create": {
"type": "String",
@ -3194,6 +3209,18 @@
}
}
},
"sentVoiceMessage": "🎙️ {duration} - Voice message from {sender}",
"@sentVoiceMessage": {
"type": "String",
"placeholders": {
"sender": {
"type": "String"
},
"duration": {
"type": "String"
}
}
},
"deletePushRuleCanNotBeUndone": "If you delete this notification setting, this can not be undone.",
"more": "More",
"shareKeysWith": "Share keys with...",
@ -3206,6 +3233,13 @@
"recordAVideo": "Record a video",
"optionalMessage": "(Optional) message...",
"notSupportedOnThisDevice": "Not supported on this device",
"enterNewChat": "Enter new chat",
"approve": "Approve",
"youHaveKnocked": "You have knocked",
"pleaseWaitUntilInvited": "Please wait now, until someone from the room invites you.",
"commandHint_logout": "Logout your current device",
"commandHint_logoutall": "Logout all active devices",
"displayNavigationRail": "Show navigation rail on mobile",
"accountInformation": "Account information",
"addGroupDescription": "Add a chat description",
"addNewFriend": "Add new friend",
@ -4863,8 +4897,8 @@
"emptyChatWarningDesc": "You haven't invited anyone to your chat. Go to Chat settings to invite your contacts or the Bot. You can also do this later.",
"areYouLikeMe": "Are you like me?",
"tryAgainLater": "Too many attempts made. Please try again in 5 minutes.",
"enterSpaceCode": "Enter the Space Code",
"shareSpaceLink": "Share link to space",
"enterSpaceCode": "Enter space code",
"shareSpaceLink": "Share link",
"byUsingPangeaChat": "By using Pangea Chat, I agree to the ",
"details": "Details",
"languageLevelPreA1Desc": "I have never learned or used the language.",
@ -4896,5 +4930,105 @@
},
"ban": "Ban",
"unban": "Unban",
"kick": "Kick"
"kick": "Kick",
"lemma": "Lemma",
"grammarFeature": "Grammar feature",
"grammarTag": "Grammar tag",
"forms": "Forms",
"exampleMessages": "Example messages",
"timesUsedIndependently": "Times used independently",
"timesUsedWithAssistance": "Times used with assistance",
"goToSpaceButton": "Go to space",
"shareInviteCode": "Share invite code: {code}",
"@shareInviteCode": {
"placeholders": {
"code": {
"type": "String"
}
}
},
"leaderboard": "Leaderboard",
"welcomeUser": "Welcome {user}",
"@welcomeUser": {
"placeholders": {
"user": {
"type": "String"
}
}
},
"joinSpaceOnboardingDesc": "Do you have an invite code or link to a learning community?",
"skipForNow": "Skip for now",
"permissions": "Permissions",
"spaceChildPermission": "Who can add new chats and subspaces to this space",
"addEnvironmentOverride": "Add environment override",
"defaultOption": "Default",
"deleteChatDesc": "Are you sure you want to delete this chat? It will be deleted for all participants and all messages within the chat will no longer be available for practice or learning analytics.",
"deleteSpaceDesc": "The space and any selected chats and/or subspaces will be deleted for all participants and all messages within the chat will no longer be available for practice or learning analytics. This action cannot be undone.",
"chatWithActivities": "Chat with activities",
"findYourPeople": "Find your people",
"launch": "Launch",
"launchActivityToChats": "Launch activity to chats",
"searchChats": "Search chats",
"selectChats": "Select chats",
"selectChatToStart": "Complete! Select a chat to start",
"maxFifty": "Max 50",
"configureSpace": "Configure space",
"pinMessages": "Pin messages",
"setJoinRules": "Set join rules",
"changeGeneralSettings": "Change general settings",
"inviteOtherUsersToRoom": "Invite other users",
"changeTheNameOfTheSpace": "Change the name of the space",
"changeTheDescription": "Change the description",
"changeThePermissions": "Change the permissions",
"introductions": "Introductions",
"announcements": "Announcements",
"activities": "Activities",
"access": "Access",
"addSubspace": "Add subspace",
"botSettings": "Bot settings",
"activitySuggestionTimeoutMessage": "We are working hard to generate activities for you, please check back in a minute",
"accessSettingsWarning": "Oops! It looks like you don't have permission to set the Access rules of this room. You should check these to make sure they're what you need and talk to a room admin if you need to change them",
"howSpaceCanBeFound": "How this space can be found",
"private": "Private",
"cannotBeFoundInSearch": "Cannot be found in search",
"public": "Public",
"visibleToCommunity": "Visible to the broader Pangea Chat community via \"Find your people\"",
"howSpaceCanBeJoined": "How this space can be joined",
"restricted": "Restricted",
"canBeFoundVia": "Can be found via:",
"canBeFoundViaInvitation": "\u2022 invitation",
"canBeFoundViaCodeOrLink": "\u2022 code or link",
"canBeFoundViaKnock": "\u2022 request to join and admin approval",
"anyoneCanJoin": "Anyone can join! However, admin can kick and ban whoever misbehaves. Those who are banned may not return!",
"createYourSpace": "Create your space",
"sendActivities": "Send activities",
"getStarted": "Get Started",
"getStartedBotChatDesc": "Chatting with AI is a great place to start and Pangea reading, writing, listening and speaking tools make it easy!",
"getStartedCommunitiesDesc": "Learning with a community is where Pangea Chat shines!\nYou can join your class, find a school, or even make your own!",
"getStartedFriendsDesc": "Do you have a friend that wants to learn with you?",
"getStartedBotChatComplete": "Well-done! You're chatting with the bot!",
"getStartedCommunitiesComplete": "Great, you have joined a space!",
"getStartedComplete": "You've completed this section!\nKeep exploring our amazing features by chatting with friends!",
"getStartedFriendsComplete": "Woohoo! You've got friends! 😉",
"getStartedBotChatButton": "Start chatting!",
"getStartedFriendsButton": "Chat with a friend",
"groupChat": "Group Chat",
"directMessage": "Direct Message",
"newDirectMessage": "New direct message",
"speakingExercisesTooltip": "Speaking practice",
"noChatsFoundHereYet": "No chats found here yet",
"duration": "Duration",
"transcriptionFailed": "Failed to transcribe audio",
"aUserIsKnocking": "1 user is requesting to join your space",
"usersAreKnocking": "{users} users are requesting to join your space",
"@usersAreKnocking": {
"type": "int",
"placeholders": {
"users": {
"type": "int"
}
}
},
"failedToFetchTranscription": "Failed to fetch transcription",
"deleteEmptySpaceDesc": "The space will be deleted for all participants. This action cannot be undone."
}

2077
lib/l10n/intl_eo.arb Normal file

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more