Merge branch 'develop' into feature/fga/hilt_app_migration

This commit is contained in:
ganfra 2021-10-22 11:30:49 +02:00
commit e9b58844b3
109 changed files with 1552 additions and 637 deletions

View file

@ -11,6 +11,6 @@
- [ ] Pull request is based on the develop branch
- [ ] Pull request includes a new file under ./changelog.d. See https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md#changelog
- [ ] Pull request includes screenshots or videos if containing UI changes
- [ ] Pull request includes a [sign off](https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md#sign-off)
- [ ] Pull request includes a [sign off](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#sign-off)
- [ ] You've made a self review of your PR
- [ ] If you have modified the screen flow, or added new screens to the application, you have updated the test [UiAllScreensSanityTest.allScreensTest()](https://github.com/vector-im/element-android/blob/main/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt#L73)
- [ ] If you have modified the screen flow, or added new screens to the application, you have updated the test [UiAllScreensSanityTest.allScreensTest()](https://github.com/vector-im/element-android/blob/main/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt#L73)

15
.github/workflows/triage-incoming.yml vendored Normal file
View file

@ -0,0 +1,15 @@
name: Move new issues onto Issue triage board
on:
issues:
types: [opened]
jobs:
automate-project-columns:
runs-on: ubuntu-latest
steps:
- uses: alex-page/github-project-automation-plus@v0.8.1
with:
project: Issue triage
column: Incoming
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

16
.github/workflows/triage-needs-info.yml vendored Normal file
View file

@ -0,0 +1,16 @@
name: Move X-Needs-Info into Need info column in the Issue triage board
on:
issues:
types: [labeled]
jobs:
Move_Labeled_Issue_On_Project_Board:
runs-on: ubuntu-latest
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@v2.0
with:
action-token: ${{ secrets.GITHUB_TOKEN }}
project-url: "https://github.com/vector-im/element-android/projects/4"
column-name: "Need info"
label-name: "X-Needs-Info"

View file

@ -1,3 +1,39 @@
Changes in Element v1.3.4 (2021-10-20)
======================================
Features ✨
----------
- Implement /part command, with or without parameter ([#2909](https://github.com/vector-im/element-android/issues/2909))
- Handle Presence support, for Direct Message room ([#4090](https://github.com/vector-im/element-android/issues/4090))
Bugfixes 🐛
----------
- Issue #908 Adding trailing space " " or ": " if the user started a sentence by mentioning someone, ([#908](https://github.com/vector-im/element-android/issues/908))
- Fixes reappearing notifications when dismissing notifications from slow homeservers or delayed /sync responses ([#3437](https://github.com/vector-im/element-android/issues/3437))
- Catching event decryption crash and logging when attempting to markOlmSessionForUnwedging fails ([#3608](https://github.com/vector-im/element-android/issues/3608))
- Fixing notification sounds being triggered for every message, now they only trigger for the first, consistent with the vibrations ([#3774](https://github.com/vector-im/element-android/issues/3774))
- Voice Message not sendable if recorded while flight mode was on ([#4006](https://github.com/vector-im/element-android/issues/4006))
- Fixes push notification emails list not refreshing the first time seeing the notifications page.
Also improves the error handling in the email notification toggling by using synchronous flows instead of the WorkManager ([#4106](https://github.com/vector-im/element-android/issues/4106))
- Make MegolmBackupAuthData.signatures optional for robustness ([#4162](https://github.com/vector-im/element-android/issues/4162))
- Fixing push notifications starting the looping background sync when the push notification causes the application to be created. ([#4167](https://github.com/vector-im/element-android/issues/4167))
- Fix random crash when user logs out just after the log in. ([#4193](https://github.com/vector-im/element-android/issues/4193))
- Make the font size selection dialog scrollable ([#4201](https://github.com/vector-im/element-android/issues/4201))
- Fix conversation notification for sent messages ([#4221](https://github.com/vector-im/element-android/issues/4221))
- Fixes the developer sync options being displayed in the home menu when developer mode is disabled ([#4234](https://github.com/vector-im/element-android/issues/4234))
- Restore support for Android Auto as sent messages are no longer read aloud ([#4247](https://github.com/vector-im/element-android/issues/4247))
- Fix crash on slash commands Exceptions ([#4261](https://github.com/vector-im/element-android/issues/4261))
Other changes
-------------
- Scrub user sensitive data like gps location from images when sending on original quality ([#465](https://github.com/vector-im/element-android/issues/465))
- Migrate to MvRx2 (Mavericks) ([#3890](https://github.com/vector-im/element-android/issues/3890))
- Implement a new github action workflow to generate two PRs for emoji and sas string sync ([#4216](https://github.com/vector-im/element-android/issues/4216))
- Improve wording around rageshakes in the defect issue template. ([#4226](https://github.com/vector-im/element-android/issues/4226))
- Add automation to move incoming issues and X-Needs-Info into the right places on the issue triage board. ([#4250](https://github.com/vector-im/element-android/issues/4250))
- Uppon sharing image compression fails, return the original image ([#4264](https://github.com/vector-im/element-android/issues/4264))
Changes in Element v1.3.3 (2021-10-11)
======================================

View file

@ -53,7 +53,6 @@ dependencies {
implementation libs.rx.rxKotlin
implementation libs.rx.rxAndroid
implementation libs.jetbrains.kotlinStdlib
implementation libs.androidx.core
implementation libs.androidx.appCompat
implementation libs.androidx.recyclerview

View file

@ -1 +0,0 @@
Migrate to MvRx2 (Mavericks)

View file

@ -1 +0,0 @@
Voice Message not sendable if recorded while flight mode was on

View file

@ -1 +0,0 @@
Handle Presence support, for Direct Message room

View file

@ -1,2 +0,0 @@
Fixes push notification emails list not refreshing the first time seeing the notifications page.
Also improves the error handling in the email notification toggling by using synchronous flows instead of the WorkManager

View file

@ -1 +0,0 @@
Fixing push notifications starting the looping background sync when the push notification causes the application to be created.

View file

@ -1 +0,0 @@
Fix random crash when user logs out just after the log in.

View file

@ -1 +0,0 @@
Make the font size selection dialog scrollable

View file

@ -1 +0,0 @@
Implement a new github action workflow to generate two PRs for emoji and sas string sync

View file

@ -1 +0,0 @@
Fix conversation notification for sent messages

View file

@ -1 +0,0 @@
Improve wording around rageshakes in the defect issue template.

1
changelog.d/4276.bugfix Normal file
View file

@ -0,0 +1 @@
Fix Broken EditText when using FromEditTextItem

1
changelog.d/4279.bugfix Normal file
View file

@ -0,0 +1 @@
Fix crash when clicking on ViewEvent source actions

1
changelog.d/4283.bugfix Normal file
View file

@ -0,0 +1 @@
Fix voice message record button wrong visibility

View file

@ -1 +0,0 @@
Issue #908 Adding trailing space " " or ": " if the user started a sentence by mentioning someone,

View file

@ -39,8 +39,6 @@ ext.libs = [
],
jetbrains : [
'kotlinStdlibJdk7' : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin",
'kotlinStdlib' : "org.jetbrains.kotlin:kotlin-stdlib:$kotlin",
'coroutinesCore' : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinCoroutines",
'coroutinesAndroid' : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutines",
'coroutinesRx2' : "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$kotlinCoroutines"
@ -130,10 +128,13 @@ ext.libs = [
'jjwtImpl' : "io.jsonwebtoken:jjwt-impl:$jjwt",
'jjwtOrgjson' : "io.jsonwebtoken:jjwt-orgjson:$jjwt"
],
vanniktech: [
vanniktech : [
'emojiMaterial' : "com.vanniktech:emoji-material:$vanniktechEmoji",
'emojiGoogle' : "com.vanniktech:emoji-google:$vanniktechEmoji"
],
apache : [
'commonsImaging' : "org.apache.sanselan:sanselan:0.97-incubator"
],
tests : [
'kluent' : "org.amshove.kluent:kluent-android:1.68",
'timberJunitRule' : "net.lachlanmckee:timber-junit-rule:1.0.1",

View file

@ -0,0 +1,2 @@
Hlavní změny v této verzi: Uspořádejte si místnosti pomocí Prostorů! Verze 1.3.1 opravuje pády, ke kterým může docházet ve verzi v1.3.0.
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View file

@ -0,0 +1,2 @@
Hlavní změny v této verzi: Přidání podpory pro Android Auto. Spousta oprav chyb!
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View file

@ -0,0 +1,2 @@
Hlavní změny v této verzi: Umožňuje v nastavení zviditelnit zásady serveru identit. Dočasně odstraňuje podporu pro Android Auto.
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Zprávy, hlasové a videohovory, sdílení souborů, sdílení obrazovky a celá
<b>Navažte tam, kde jste skončili</b>
Zůstaňte v kontaktu, ať jste kdekoli, díky plně synchronizované historii zpráv ve všech zařízeních a na webu https://app.element.io
<b>Open source</b>
Element Android je projekt s otevřeným zdrojovým kódem, který je hostován na GitHubu. Nahlaste prosím chyby a přispějte k jeho vývoji na adrese https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Main changes in this version: Add Presence support, for Direct Message room (note: presence is disabled on matrix.org. Add again Android Auto support.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.3.4

View file

@ -0,0 +1,2 @@
Põhilised muutused selles versioonis: Isikutuvastusserveri kasutustingimused on leitavad seadistustest ja ajutiselt eemaldasime Android Auto toe.
Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Sõnumid, hääl- ja videokõned, failide jagamine, ekraani jagamine ja terve hu
<b>Jätka sealt, kus pooleli jäid</b>
Saad suhelda kõigis oma seadmetes ja ka veebis aadressil https://app.element.io ning sealjuures täielikult sünkroonitud sõnumite ajalooga.
<b>Avatud lähtekoodiga tarkvara</b>
Element Android on Github'is hallatud avatud lähtekoodiga tarkvaraprojekt. Palun teata vigadest ja/või osale arenduses https://github.com/vector-im/element-android lehel

View file

@ -0,0 +1,2 @@
تغییرات اصلی در این نگارش: نمایان کردن سیاست(های) کارساز هویت در تنظیمات. برداشتن موقّتی پشتیبانی اندروید خودرو.
گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@
<b>ادامه از جایی که رها کرده‌اید</b>
هر کجا که هستید، با هم‌گام سازی کامل تاریخچهٔ پیام‌ها بین همهٔ افزاره‌هایتان و وب روی https://app.element.io در دسترس باشید
<b>نرم‌افزار آزاد</b>
المنت اندروید، یک پروژهٔ نرم‌افزار آزاد میزبانی‌شده روی گیت‌هاب است. لطفاً گزارش مشکلات و مشارکت‌ها را به توسه‌اش به این نشانی بفرستید: https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : Organisez vos salons à laide des espaces ! La v1.3.1 corrige également un plantage dans la version v1.3.0
Liste de tous les changements : https://github.com/vector-im/element-android/releases/tag/v1.3.1

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version: Ajout du support pour Android Auto. Beaucoup de corrections de bogues!
Liste de tous les changements: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version: Affiche le(s) politique(s) des serveurs didentité dans les réglages. Retrait temporaire du support dAndroid Auto
Liste de tous les changements: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Messagerie instantannée, appels audio et vidéo, partage de fichier, partage d
<b>Reprenez où vous vous êtes arrêté</b>
Restez en contact où que vous soyez grâce à lhistorique des messages synchronisé entre tous vos appareils et sur le web sur https://app.element.io
<b>Open source</b>
Element Adroid est un projet libre, hébergé par GitHub. Veuillez signaler tous les problèmes et / ou contribuer à son développement sur https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Fő változás ebben a verzióban: Azonosítási szerver feltételek megjelenítése a beállításoknál. Ideiglenesen az Android Auto támogatás eltávolítása.
Teljes változásnapló: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -38,3 +38,6 @@ Igazi végpontok között titkosítás (csak a beszélgetésben résztvevők tud
<b>Vedd fel a fonalat</b>
Maradj kapcsolatban bárhol minden eszközödön a szinkronizált üzenetekkel és a weben a https://app.element.io oldallal
<b>Nyílt forráskód</b>
Element Android egy nyílt forráskódú projekt a GitHubon. Küldj hibajegyet és/vagy vegyél részt a fejlesztésében itt: https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Perubahan utama dalam versi ini: Membuat kebijakan server identitas terlihat di pengaturan. Menghilangkan dukungan Android Auto untuk sementara.
Changelog lanjutan: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -30,10 +30,13 @@ Element menempatkan Anda dalam kendali dengan cara yang berbeda:
Anda dapat mengobrol dengan siapa saja di jaringan Matrix, apakah mereka menggunakan Element, aplikasi Matrix lain atau bahkan jika mereka menggunakan aplikasi perpesanan yang berbeda.
<b>Sangat aman</b>
Enkripsi ujung-ke-ujung beneran (hanya mereka yang dalam percakapan dapat mendekripsi pesan), dan verifikasi perangkat yang ditanda tangani silang.
Enkripsi ujung-ke-ujung yang nyata (hanya mereka yang dalam percakapan dapat mendekripsi pesan), dan verifikasi perangkat menggunakan penandatanganan-silang.
<b>Komunikasi dan integrasi lengkap</b>
Perpesanan, panggilan suara dan video, berbagi file, berbagi layar dan banyak integrasi, bot dan widget. Buat ruangan, komunitas, tetap terhubung dan selesaikan hal-hal.
<b>Ambil di mana Anda tinggalkan</b>
Tetap terhubung di mana pun Anda berada dengan riwayat pesan yang sepenuhnya disinkronkan di semua perangkat Anda dan di web di https://app.element.io
<b>Open source</b>
Element Android adalah proyek sumber terbuka, di-host oleh GitHub. Silakan melaporkan bug dan/atau membuat kontribusi ke pengembangannya di https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Modifiche principali in questa versione: organizza le tue stanze usando gli Spazi! v1.3.1 corregge un errore della v1.3.0.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View file

@ -0,0 +1,2 @@
Modifiche principali in questa versione: aggiunto supporto per Android Auto. Corretti molti errori!
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View file

@ -0,0 +1,2 @@
Modifiche principali in questa versione: rese visibili le informative dei server d'identità nelle impostazioni. Rimosso temporaneamente il supporto per Android Auto.
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Messaggi, chiamate audio e video, condivisione file e schermo, un vasto numero d
<b>Riprendi da dove ti eri fermato</b>
Resta in contatto ovunque tu sia con la cronologia dei messaggi sincronizzata tra tutti i tuoi dispositivi e in rete su https://app.element.io
<b>Open source</b>
Element Android è un progetto open source, ospitato su GitHub. Segnala errori e/o contribuisci al suo sviluppo su https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Principais mudanças nesta versão: Fazer política(s) de servidor de identidade visível(is) nas configurações. Remover temporariamente suporte a Android Auto.
Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -1,4 +1,4 @@
Element é tanto um mensageiro seguro como um app de colaboração de time de produtividade que é ideal para chats de grupo enquanto se trabalha remotamente. Este app de chat usa encriptação ponta-a-ponta para prover conferência de vídeo, compartilhamento de arquivo e chamadas de voz poderasos.
Element é tanto um mensageiro seguro como um app de colaboração de time de produtividade que é ideal para chats de grupo enquanto se trabalha remotamente. Este app de chat usa encriptação ponta-a-ponta para prover conferência de vídeo, compartilhamento de arquivo e chamadas de voz poderosos.
<b>As funções de Element incluem:</b>
- Ferramentas de comunicação online avançadas
@ -22,9 +22,9 @@ Para permitir mais controle de seus dados e conversas sensíveis, Element pode s
Você decide onde manter seus dados e mensagens. Sem o risco de data mining ou acesso de terceiros.
Element põe você em controle de diferentes maneiras:
1. Pegar uma conta grátis no servidor público matrix.org hospedado pelos desenvolvedores Matrix, ou escolha de milhares de servidores públicos hospedados por pessoas se voluntariando
2. Auto-hospedar sua conta ao rodar um servidor em sua própria infraestrutura de TI
3. Fazer signup para uma conta num servidor personalizado ao simplesmente assinar a plataforma de hospedagem Element Matrix Services
1. Pegue uma conta grátis no servidor público matrix.org hospedado pelos desenvolvedores Matrix, ou escolha de milhares de servidores públicos hospedados por pessoas se voluntariando
2. Auto-hospede sua conta ao rodar um servidor em sua própria infraestrutura de TI
3. Faça signup para uma conta num servidor personalizado ao simplesmente assinar a plataforma de hospedagem Element Matrix Services
<b>Mensageria e colaboração abertos</b>
Você pode fazer chat com qualquer pessoa na rede Matrix, caso ela esteja usando Element, um outro app de Matrix ou mesmo se ela estiver usando um app de mensageria diferente.
@ -37,3 +37,6 @@ Messageria, chamadas de voz e vídeo, compartilhamento de arquivo, compartilhame
<b>Continue de onde você parou</b>
Fique em contato onde quer que você esteja com histórico de mensagem completamente sincronizado por todos os seus dispositivos e na web em https://app.element.io
<b>Open source</b>
Element Android é um projeto open source, hospedado por GitHub. Por favor reporte bugs e/ou contribua para seu desenvolvimento em https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Основные изменения в этой версии: Организуйте свои комнаты с помощью Пространств!
Весь список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.0

View file

@ -0,0 +1,2 @@
Основные изменения в этой версии: Организуйте свои комнаты с помощью Пространств! В версии 1.3.1 исправлен сбой, который мог произойти в версии 1.3.0.
Весь список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View file

@ -0,0 +1,2 @@
Основные изменения в этой версии: Добавлена поддержка Android Auto. Исправлено множество ошибок!
Весь список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View file

@ -0,0 +1,2 @@
Основные изменения в этой версии: Правила сервера идентификации теперь видимы в настройках. Временно убрана поддержка Android Auto.
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,7 @@ Element дает вам возможность контролировать си
<b>Восстанавливайте связь с того места, где остановились</b>.
Оставайтесь на связи, где бы вы ни находились, с полностью синхронизированной историей сообщений на всех ваших устройствах и в Интернете по адресу https://app.element.io
<b>Открытый исходный код</b>
Element Android - это проект с открытым исходным кодом, размещенный на GitHub. Пожалуйста, сообщайте об ошибках и/или вносите вклад в его развитие по адресу https://github.com/vector-im/element-android.

View file

@ -0,0 +1,2 @@
Ndryshimet kryesore në këtë version: Bërje të dukshëm e rregullit(ave) të shërbyesit të identiteteve te rregullimet. Heqje përkohësisht e mbulimit për Android Auto.
Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -1,4 +1,4 @@
Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashkëpunimi prodhimtar ekipi, i cili është ideal për fjalosje në grup, teksa punohet së largët. Ky aplikacion fjalosjeje përdor fshehtëzim skaj-më-skaj për të furnizuar konferencë video, shkëmbim kartelash dhe thirrje me zë të fuqishme.
Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashkëpunimi prodhimtar ekipi, i cili është ideal për fjalosje në grup, teksa punohet së largëti. Ky aplikacion fjalosjeje përdor fshehtëzim skaj-më-skaj për të furnizuar konferencë video, shkëmbim kartelash dhe thirrje me zë të fuqishme.
<b>Në veçoritë e Element-it përfshihen:</b>
- Mjete të thelluara komunikimi internetor
@ -8,7 +8,7 @@ Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashk
- Fjalosje video të llojit VoIP dhe tregim ekrani
- Integrim i kollajtë me mjetet tuaja të parapëlqyera të bashkëpunimit internetor, mjete administrimi projektesh, shërbime VoIP dhe aplikacione të tjera shkëmbimi mesazhesh në ekip
Element-i është plotësisht i ndryshëm nga aplikacione të tjera shkëmbimi mesazhesh dhe bashkëpunimi. Funksionimi i tij bazohet në Matrix, një rrjet i hapët për mesazhe të siguruar dhe komunikim të decentralizuar. Lejon vetëstrehim, për tu lejuar përdoruesve pronësi dhe kontroll maksimal të të dhënave dhe mesazheve të tyre.
Element-i është plotësisht i ndryshëm nga aplikacione të tjera shkëmbimi mesazhesh dhe bashkëpunimi. Funksionimi i tij bazohet në Matrix, një rrjet i hapët për mesazhe të siguruar dhe komunikim të decentralizuar. Lejon vetëstrehim, për tu dhënë përdoruesve pronësi dhe kontroll maksimal të të dhënave dhe mesazheve të tyre.
<b>Privatësi dhe shkëmbim mesazhesh të fshehtëzuar</b>
Element-i ju mbron nga reklama të padëshiruara, shfrytëzim të dhënash dhe vatha dixhitale. Ai siguron gjithashtu krejt të dhënat tuaja, komunikime tek-për-tek me video dhe me zë, përmes fshehtëzimi skaj-më-skaj dhe verifikim “cross-signed” pajisjesh.
@ -37,3 +37,6 @@ Shkëmbim mesazhesh, thirrje me zë dhe me video, shkëmbim kartelash, tregim ek
<b>Rifillojani atje ku e latë</b>
Jini në dijeni, kudo ku gjendeni, me historik plotësisht të njëkohësuar mesazhesh nëpër krejt pajisjet tuaja dhe në internet te https://app.element.io
<b>Me burim të hapët</b>
Element-i për Android është një projekt me burim të hapët, strehuar në GitHub. Ju lutemi, njoftoni të meta dhe/ose jepni ndihmesë në zhvillimin e tij te https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: Organisera dina rum med utrymmen! v1.3.1 fixar en krasch som kan hända i v1.3.0.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: Lägg till stöd för Android Auto. Massa buggfixar!
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: Gör identitetsserverpolicy(er) synliga i inställningarna. Ta tillfälligt bort stöd för Android Auto.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Meddelanden, röst- och videosamtal, fildelning, skärmdelning och massa integra
<b>Fortsätt där du lämnade</b>
Håll kontakten vart du än är med fullt synkroniserad meddelandehistorik på alla dina enheter och på webben på https://app.element.io
<b>Öppen källkod</b>
Element Android är projekt baserat på öppen källkod, som ligger på GitHub. Vänligen rapportera buggar och/eller bidra till dess utveckling på https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
Основні зміни в цій версії: додано політику ідентифікації сервера (IES) у налаштуваннях. Тимчасово вилучено автозаповнення Android.
Усі зміни: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Element надає такі можливості на вибір:
<b>Продовжуйте, де зупинилися</b>
Залишайтеся на зв'язку, де б ви не знаходились, з повністю синхронізованою історією повідомлень на всіх своїх пристроях та в Інтернеті за адресою https://app.element.io
<b>Відкритий код</b>
Element для Android це проєкт з відкритим кодом, розміщений GitHub. Будь ласка, повідомте про помилки та/або сприяйте його розвитку на https://github.com/vector-im/element-android

View file

@ -0,0 +1,2 @@
此版本中的主要更改:使身份服务器策略在设置中可见。 暂时移除 Android Auto 支持。
完整更新日志https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Element 透过不同的方式让你掌控一切:
<b>从上次离开的地方开始</b>
无论你身在何处,都可以透过在你所有设备与网页 https://app.element.io 间完全同步的信息历史保持联络
<b>开源</b>
Element Android 是一个开源项目,由 GitHub 托管。 请在 https://github.com/vector-im/element-android 报告错误和/或为其开发做出贡献

View file

@ -0,0 +1,2 @@
此版本中的主要變動使用空間來整理您的聊天室v1.3.1 修復了在 v1.3.0 中遇到的當機問題。
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.3.1

View file

@ -0,0 +1,2 @@
此版本中的主要變動:新增對 Android Auto 的支援。以及許多錯誤修復!
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.3.2

View file

@ -0,0 +1,2 @@
此版本中的主要變動:讓身份伺服器政策在設定中可見。暫時移除 Android Auto 支援。
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.3.3

View file

@ -37,3 +37,6 @@ Element 透過不同的方式讓您掌控一切:
<b>從上次離開的地方開始</b>
無論您身在何處,都可以透過在您所有裝置與網頁 https://app.element.io 間完全同步的訊息歷史保持聯絡
<b>開放原始碼</b>
Android 版的 Element 是開放原始碼專案,託管於 GitHub 上。請在 https://github.com/vector-im/element-android 上回報臭蟲及/或貢獻其開發

View file

@ -35,7 +35,6 @@ dependencies {
implementation project(":matrix-sdk-android")
implementation libs.androidx.appCompat
implementation libs.jetbrains.kotlinStdlibJdk7
implementation libs.jetbrains.coroutinesCore
implementation libs.jetbrains.coroutinesAndroid
implementation libs.androidx.lifecycleLivedata

View file

@ -31,7 +31,7 @@ android {
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
buildConfigField "String", "SDK_VERSION", "\"1.3.4\""
buildConfigField "String", "SDK_VERSION", "\"1.3.5\""
buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
resValue "string", "git_sdk_revision", "\"${gitRevision()}\""
@ -100,8 +100,6 @@ static def gitRevisionDate() {
}
dependencies {
implementation libs.jetbrains.kotlinStdlibJdk7
implementation libs.jetbrains.coroutinesCore
implementation libs.jetbrains.coroutinesAndroid
@ -154,6 +152,9 @@ dependencies {
// Video compression
implementation 'com.otaliastudios:transcoder:0.10.4'
// Exif data handling
implementation libs.apache.commonsImaging
// Phone number https://github.com/google/libphonenumber
implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.35'

View file

@ -28,6 +28,7 @@ import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForDevicesAction
import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
import org.matrix.android.sdk.internal.crypto.model.MXOlmSessionResult
import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap
import org.matrix.android.sdk.internal.crypto.model.event.OlmEventContent
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
@ -36,7 +37,8 @@ import org.matrix.android.sdk.internal.extensions.foldToCallback
import org.matrix.android.sdk.internal.session.SessionScope
import timber.log.Timber
import javax.inject.Inject
import kotlin.jvm.Throws
private const val SEND_TO_DEVICE_RETRY_COUNT = 3
@SessionScope
internal class EventDecryptor @Inject constructor(
@ -146,29 +148,36 @@ internal class EventDecryptor @Inject constructor(
// offload this from crypto thread (?)
cryptoCoroutineScope.launch(coroutineDispatchers.computation) {
val ensured = ensureOlmSessionsForDevicesAction.handle(mapOf(senderId to listOf(deviceInfo)), force = true)
runCatching { ensureOlmSessionsForDevicesAction.handle(mapOf(senderId to listOf(deviceInfo)), force = true) }.fold(
onSuccess = { sendDummyToDevice(ensured = it, deviceInfo, senderId) },
onFailure = {
Timber.e("## CRYPTO | markOlmSessionForUnwedging() : failed to ensure device info ${senderId}${deviceInfo.deviceId}")
}
)
}
}
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : ensureOlmSessionsForDevicesAction isEmpty:${ensured.isEmpty}")
private suspend fun sendDummyToDevice(ensured: MXUsersDevicesMap<MXOlmSessionResult>, deviceInfo: CryptoDeviceInfo, senderId: String) {
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : ensureOlmSessionsForDevicesAction isEmpty:${ensured.isEmpty}")
// Now send a blank message on that session so the other side knows about it.
// (The keyshare request is sent in the clear so that won't do)
// We send this first such that, as long as the toDevice messages arrive in the
// same order we sent them, the other end will get this first, set up the new session,
// then get the keyshare request and send the key over this new session (because it
// is the session it has most recently received a message on).
val payloadJson = mapOf<String, Any>("type" to EventType.DUMMY)
// Now send a blank message on that session so the other side knows about it.
// (The keyshare request is sent in the clear so that won't do)
// We send this first such that, as long as the toDevice messages arrive in the
// same order we sent them, the other end will get this first, set up the new session,
// then get the keyshare request and send the key over this new session (because it
// is the session it has most recently received a message on).
val payloadJson = mapOf<String, Any>("type" to EventType.DUMMY)
val encodedPayload = messageEncrypter.encryptMessage(payloadJson, listOf(deviceInfo))
val sendToDeviceMap = MXUsersDevicesMap<Any>()
sendToDeviceMap.setObject(senderId, deviceInfo.deviceId, encodedPayload)
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : sending dummy to $senderId:${deviceInfo.deviceId}")
withContext(coroutineDispatchers.io) {
val sendToDeviceParams = SendToDeviceTask.Params(EventType.ENCRYPTED, sendToDeviceMap)
try {
sendToDeviceTask.execute(sendToDeviceParams)
} catch (failure: Throwable) {
Timber.e(failure, "## CRYPTO | markOlmSessionForUnwedging() : failed to send dummy to $senderId:${deviceInfo.deviceId}")
}
val encodedPayload = messageEncrypter.encryptMessage(payloadJson, listOf(deviceInfo))
val sendToDeviceMap = MXUsersDevicesMap<Any>()
sendToDeviceMap.setObject(senderId, deviceInfo.deviceId, encodedPayload)
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : sending dummy to $senderId:${deviceInfo.deviceId}")
withContext(coroutineDispatchers.io) {
val sendToDeviceParams = SendToDeviceTask.Params(EventType.ENCRYPTED, sendToDeviceMap)
try {
sendToDeviceTask.executeRetry(sendToDeviceParams, remainingRetry = SEND_TO_DEVICE_RETRY_COUNT)
} catch (failure: Throwable) {
Timber.e(failure, "## CRYPTO | markOlmSessionForUnwedging() : failed to send dummy to $senderId:${deviceInfo.deviceId}")
}
}
}

View file

@ -25,6 +25,8 @@ import org.matrix.android.sdk.internal.crypto.tasks.ClaimOneTimeKeysForUsersDevi
import timber.log.Timber
import javax.inject.Inject
private const val ONE_TIME_KEYS_RETRY_COUNT = 3
internal class EnsureOlmSessionsForDevicesAction @Inject constructor(
private val olmDevice: MXOlmDevice,
private val oneTimeKeysForUsersDeviceTask: ClaimOneTimeKeysForUsersDeviceTask) {
@ -72,7 +74,7 @@ internal class EnsureOlmSessionsForDevicesAction @Inject constructor(
Timber.i("## CRYPTO | claimOneTimeKeysForUsersDevices() : $usersDevicesToClaim")
val claimParams = ClaimOneTimeKeysForUsersDeviceTask.Params(usersDevicesToClaim)
val oneTimeKeys = oneTimeKeysForUsersDeviceTask.execute(claimParams)
val oneTimeKeys = oneTimeKeysForUsersDeviceTask.executeRetry(claimParams, remainingRetry = ONE_TIME_KEYS_RETRY_COUNT)
Timber.v("## CRYPTO | claimOneTimeKeysForUsersDevices() : keysClaimResponse.oneTimeKeys: $oneTimeKeys")
for ((userId, deviceInfos) in devicesByUser) {
for (deviceInfo in deviceInfos) {

View file

@ -410,7 +410,7 @@ internal class DefaultKeysBackupService @Inject constructor(
val keysBackupVersionTrust = KeysBackupVersionTrust()
val authData = keysBackupVersion.getAuthDataAsMegolmBackupAuthData()
if (authData == null || authData.publicKey.isEmpty() || authData.signatures.isEmpty()) {
if (authData == null || authData.publicKey.isEmpty() || authData.signatures.isNullOrEmpty()) {
Timber.v("getKeysBackupTrust: Key backup is absent or missing required data")
return keysBackupVersionTrust
}
@ -478,7 +478,7 @@ internal class DefaultKeysBackupService @Inject constructor(
cryptoCoroutineScope.launch(coroutineDispatchers.main) {
val updateKeysBackupVersionBody = withContext(coroutineDispatchers.crypto) {
// Get current signatures, or create an empty set
val myUserSignatures = authData.signatures[userId].orEmpty().toMutableMap()
val myUserSignatures = authData.signatures?.get(userId).orEmpty().toMutableMap()
if (trust) {
// Add current device signature
@ -497,7 +497,7 @@ internal class DefaultKeysBackupService @Inject constructor(
// Create an updated version of KeysVersionResult
val newMegolmBackupAuthData = authData.copy()
val newSignatures = newMegolmBackupAuthData.signatures.toMutableMap()
val newSignatures = newMegolmBackupAuthData.signatures.orEmpty().toMutableMap()
newSignatures[userId] = myUserSignatures
val newMegolmBackupAuthDataWithNewSignature = newMegolmBackupAuthData.copy(

View file

@ -51,7 +51,7 @@ data class MegolmBackupAuthData(
* userId -> (deviceSignKeyId -> signature)
*/
@Json(name = "signatures")
val signatures: Map<String, Map<String, String>>
val signatures: Map<String, Map<String, String>>? = null
) {
fun toJsonDict(): JsonDict {

View file

@ -20,22 +20,23 @@ import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
import androidx.exifinterface.media.ExifInterface
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.TemporaryFileCreator
import timber.log.Timber
import java.io.File
import javax.inject.Inject
internal class ImageCompressor @Inject constructor(
private val temporaryFileCreator: TemporaryFileCreator
private val temporaryFileCreator: TemporaryFileCreator,
private val coroutineDispatchers: MatrixCoroutineDispatchers
) {
suspend fun compress(
imageFile: File,
desiredWidth: Int,
desiredHeight: Int,
desiredQuality: Int = 80): File {
return withContext(Dispatchers.IO) {
return withContext(coroutineDispatchers.io) {
val compressedBitmap = BitmapFactory.Options().run {
inJustDecodeBounds = true
decodeBitmap(imageFile, this)
@ -52,6 +53,8 @@ internal class ImageCompressor @Inject constructor(
destinationFile.outputStream().use {
compressedBitmap.compress(Bitmap.CompressFormat.JPEG, desiredQuality, it)
}
}.onFailure {
return@withContext imageFile
}
destinationFile

View file

@ -0,0 +1,86 @@
/*
* Copyright 2021 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.internal.session.content
import kotlinx.coroutines.withContext
import org.apache.sanselan.Sanselan
import org.apache.sanselan.formats.jpeg.JpegImageMetadata
import org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter
import org.apache.sanselan.formats.tiff.constants.ExifTagConstants
import org.apache.sanselan.formats.tiff.constants.GPSTagConstants
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.internal.util.TemporaryFileCreator
import java.io.BufferedOutputStream
import java.io.File
import java.io.FileOutputStream
import javax.inject.Inject
/**
* This class is responsible for removing Exif tags from image files
*/
internal class ImageExifTagRemover @Inject constructor(
private val temporaryFileCreator: TemporaryFileCreator,
private val coroutineDispatchers: MatrixCoroutineDispatchers
) {
/**
* Remove sensitive exif tags from a jpeg image file.
* Scrubbing exif tags like GPS location and user comments
* @param jpegImageFile The image file to be scrubbed
* @return the new scrubbed image file, or the original file if the operation failed
*/
suspend fun removeSensitiveJpegExifTags(jpegImageFile: File): File = withContext(coroutineDispatchers.io) {
val outputSet = tryOrNull("Unable to read JpegImageMetadata") {
(Sanselan.getMetadata(jpegImageFile) as? JpegImageMetadata)?.exif?.outputSet
} ?: return@withContext jpegImageFile
tryOrNull("Unable to remove ExifData") {
outputSet.removeField(ExifTagConstants.EXIF_TAG_GPSINFO)
outputSet.removeField(ExifTagConstants.EXIF_TAG_SUBJECT_LOCATION_1)
outputSet.removeField(ExifTagConstants.EXIF_TAG_SUBJECT_LOCATION_2)
outputSet.removeField(ExifTagConstants.EXIF_TAG_USER_COMMENT)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_ALTITUDE)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_ALTITUDE_REF)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_LONGITUDE)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_LONGITUDE_REF)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_DEST_LONGITUDE)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_DEST_LONGITUDE_REF)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_LATITUDE)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_LATITUDE_REF)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_DEST_LATITUDE)
outputSet.removeField(GPSTagConstants.GPS_TAG_GPS_DEST_LATITUDE_REF)
} ?: return@withContext jpegImageFile
val scrubbedFile = temporaryFileCreator.create()
return@withContext runCatching {
FileOutputStream(scrubbedFile).use { fos ->
val outputStream = BufferedOutputStream(fos)
ExifRewriter().updateExifMetadataLossless(jpegImageFile, outputStream, outputSet)
}
}.fold(
onSuccess = {
scrubbedFile
},
onFailure = {
scrubbedFile.delete()
jpegImageFile
}
)
}
}

View file

@ -64,7 +64,7 @@ private data class NewAttachmentAttributes(
* Possible next worker : Always [MultipleEventSendingDispatcherWorker]
*/
internal class UploadContentWorker(val context: Context, params: WorkerParameters) :
SessionSafeCoroutineWorker<UploadContentWorker.Params>(context, params, Params::class.java) {
SessionSafeCoroutineWorker<UploadContentWorker.Params>(context, params, Params::class.java) {
@JsonClass(generateAdapter = true)
internal data class Params(
@ -81,6 +81,7 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter
@Inject lateinit var fileService: DefaultFileService
@Inject lateinit var cancelSendTracker: CancelSendTracker
@Inject lateinit var imageCompressor: ImageCompressor
@Inject lateinit var imageExitTagRemover: ImageExifTagRemover
@Inject lateinit var videoCompressor: VideoCompressor
@Inject lateinit var thumbnailExtractor: ThumbnailExtractor
@Inject lateinit var localEchoRepository: LocalEchoRepository
@ -114,7 +115,7 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter
}
val attachment = params.attachment
val filesToDelete = mutableListOf<File>()
val filesToDelete = hashSetOf<File>()
return try {
val inputStream = context.contentResolver.openInputStream(attachment.queryUri)
@ -219,6 +220,10 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter
}
}
}
} else if (attachment.type == ContentAttachmentData.Type.IMAGE && !params.compressBeforeSending) {
fileToUpload = imageExitTagRemover.removeSensitiveJpegExifTags(workingFile)
.also { filesToDelete.add(it) }
newAttachmentAttributes = newAttachmentAttributes.copy(newFileSize = fileToUpload.length())
} else {
fileToUpload = workingFile
// Fix: OpenableColumns.SIZE may return -1 or 0

View file

@ -38,7 +38,6 @@ android {
}
dependencies {
implementation libs.jetbrains.kotlinStdlibJdk7
implementation libs.androidx.appCompat
implementation libs.androidx.fragmentKtx
implementation libs.androidx.exifinterface

View file

@ -15,7 +15,7 @@ kapt {
// Note: 2 digits max for each value
ext.versionMajor = 1
ext.versionMinor = 3
ext.versionPatch = 4
ext.versionPatch = 5
static def getGitTimestamp() {
def cmd = 'git show -s --format=%ct'
@ -341,7 +341,6 @@ dependencies {
implementation project(":library:ui-styles")
implementation 'androidx.multidex:multidex:2.0.1'
implementation libs.jetbrains.kotlinStdlibJdk7
implementation libs.jetbrains.coroutinesCore
implementation libs.jetbrains.coroutinesAndroid
@ -472,10 +471,7 @@ dependencies {
gplayImplementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'
implementation "androidx.emoji:emoji-appcompat:1.1.0"
implementation ('com.github.BillCarsonFr:JsonViewer:0.6'){
exclude group: 'com.airbnb.android'
}
implementation ('com.github.BillCarsonFr:JsonViewer:0.7')
// WebRTC
// org.webrtc:google-webrtc is for development purposes only

View file

@ -83,10 +83,9 @@
android:name="android.max_aspect"
android:value="9.9" />
<!-- Disable Android Auto supports see https://github.com/vector-im/element-android/issues/4205 -->
<!--meta-data
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" /-->
android:resource="@xml/automotive_app_desc" />
<activity
android:name=".features.MainActivity"
@ -420,4 +419,4 @@
</provider>
</application>
</manifest>
</manifest>

View file

@ -34,8 +34,8 @@ enum class Command(val command: String, val parameters: String, @StringRes val d
RESET_USER_POWER_LEVEL("/deop", "<user-id>", R.string.command_description_deop_user, false),
ROOM_NAME("/roomname", "<name>", R.string.command_description_room_name, false),
INVITE("/invite", "<user-id> [reason]", R.string.command_description_invite_user, false),
JOIN_ROOM("/join", "<room-alias> [reason]", R.string.command_description_join_room, false),
PART("/part", "<room-alias> [reason]", R.string.command_description_part_room, false),
JOIN_ROOM("/join", "<room-address> [reason]", R.string.command_description_join_room, false),
PART("/part", "[<room-address>]", R.string.command_description_part_room, false),
TOPIC("/topic", "<topic>", R.string.command_description_topic, false),
KICK_USER("/kick", "<user-id> [reason]", R.string.command_description_kick_user, false),
CHANGE_DISPLAY_NAME("/nick", "<display-name>", R.string.command_description_nick, false),

View file

@ -158,21 +158,10 @@ object CommandParser {
}
}
Command.PART.command -> {
if (messageParts.size >= 2) {
val roomAlias = messageParts[1]
if (roomAlias.isNotEmpty()) {
ParsedCommand.PartRoom(
roomAlias,
textMessage.substring(Command.PART.length + roomAlias.length)
.trim()
.takeIf { it.isNotBlank() }
)
} else {
ParsedCommand.ErrorSyntax(Command.PART)
}
} else {
ParsedCommand.ErrorSyntax(Command.PART)
when (messageParts.size) {
1 -> ParsedCommand.PartRoom(null)
2 -> ParsedCommand.PartRoom(messageParts[1])
else -> ParsedCommand.ErrorSyntax(Command.PART)
}
}
Command.ROOM_NAME.command -> {

View file

@ -49,7 +49,7 @@ sealed class ParsedCommand {
class Invite(val userId: String, val reason: String?) : ParsedCommand()
class Invite3Pid(val threePid: ThreePid) : ParsedCommand()
class JoinRoom(val roomAlias: String, val reason: String?) : ParsedCommand()
class PartRoom(val roomAlias: String, val reason: String?) : ParsedCommand()
class PartRoom(val roomAlias: String?) : ParsedCommand()
class ChangeTopic(val topic: String) : ParsedCommand()
class KickUser(val userId: String, val reason: String?) : ParsedCommand()
class ChangeDisplayName(val displayName: String) : ParsedCommand()

View file

@ -18,6 +18,7 @@ package im.vector.app.features.form
import android.text.Editable
import android.text.InputFilter
import android.text.InputType
import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.TextView
@ -106,9 +107,9 @@ abstract class FormEditTextItem : VectorEpoxyModel<FormEditTextItem.Holder>() {
}
holder.textInputEditText.isEnabled = enabled
inputType?.let { holder.textInputEditText.inputType = it }
holder.textInputEditText.isSingleLine = singleLine
holder.textInputEditText.imeOptions = imeOptions ?: EditorInfo.IME_ACTION_NONE
configureInputType(holder)
configureImeOptions(holder)
holder.textInputEditText.addTextChangedListenerOnce(onTextChangeListener)
holder.textInputEditText.setOnEditorActionListener(editorActionListener)
@ -124,6 +125,37 @@ abstract class FormEditTextItem : VectorEpoxyModel<FormEditTextItem.Holder>() {
}
}
/**
* Configure the inputType of the EditText, input type should be always defined
* especially when we want to use a single line, we set the InputType to InputType.TYPE_CLASS_TEXT
* while the default for the EditText is InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE
*/
private fun configureInputType(holder: Holder) {
val newInputType =
inputType ?: when (singleLine) {
true -> InputType.TYPE_CLASS_TEXT
false -> InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE
}
// This is a must in order to avoid extreme lag in some devices, on fast typing
if (holder.textInputEditText.inputType != newInputType) {
holder.textInputEditText.inputType = newInputType
}
}
/**
* Configure the imeOptions of the EditText, when imeOptions are not defined by the developer
* EditorInfo.IME_ACTION_NEXT will be used for singleLine EditTexts to disable "new line"
* while EditorInfo.IME_ACTION_NONE will be used for all the other cases
*/
private fun configureImeOptions(holder: Holder) {
holder.textInputEditText.imeOptions =
imeOptions ?: when (singleLine) {
true -> EditorInfo.IME_ACTION_NEXT
false -> EditorInfo.IME_ACTION_NONE
}
}
override fun shouldSaveViewState(): Boolean {
return false
}

View file

@ -105,9 +105,9 @@ class HomeDetailFragment @Inject constructor(
override fun onPrepareOptionsMenu(menu: Menu) {
withState(viewModel) { state ->
menu.iterator().forEach { it.isVisible = state.currentTab is HomeTab.RoomList }
val isRoomList = state.currentTab is HomeTab.RoomList
menu.findItem(R.id.menu_home_mark_all_as_read).isVisible = isRoomList && hasUnreadRooms
}
menu.findItem(R.id.menu_home_mark_all_as_read).isVisible = hasUnreadRooms
super.onPrepareOptionsMenu(menu)
}

View file

@ -640,9 +640,11 @@ class RoomDetailFragment @Inject constructor(
}
}
.setOnEmojiPopupDismissListener {
views.composerLayout.views.composerEmojiButton.apply {
contentDescription = getString(R.string.a11y_open_emoji_picker)
setImageResource(R.drawable.ic_insert_emoji)
if (isAdded) {
views.composerLayout.views.composerEmojiButton.apply {
contentDescription = getString(R.string.a11y_open_emoji_picker)
setImageResource(R.drawable.ic_insert_emoji)
}
}
}
.build(views.composerLayout.views.composerEditText)
@ -1387,7 +1389,7 @@ class RoomDetailFragment @Inject constructor(
lazyLoadedViews.inviteView(false)?.isVisible = false
if (mainState.tombstoneEvent == null) {
views.composerLayout.isInvisible = !textComposerState.isComposerVisible
views.voiceMessageRecorderView.isVisible = !textComposerState.isSendButtonVisible
views.voiceMessageRecorderView.isVisible = textComposerState.isVoiceMessageRecorderVisible
views.composerLayout.views.sendButton.isInvisible = !textComposerState.isSendButtonVisible
views.composerLayout.setRoomEncrypted(summary.isEncrypted)
// views.composerLayout.alwaysShowSendButton = false
@ -1450,8 +1452,8 @@ class RoomDetailFragment @Inject constructor(
private fun renderSendMessageResult(sendMessageResult: TextComposerViewEvents.SendMessageResult) {
when (sendMessageResult) {
is TextComposerViewEvents.SlashCommandHandled -> {
sendMessageResult.messageRes?.let { showSnackWithMessage(getString(it)) }
is TextComposerViewEvents.SlashCommandLoading -> {
showLoading(null)
}
is TextComposerViewEvents.SlashCommandError -> {
displayCommandError(getString(R.string.command_problem_with_parameters, sendMessageResult.command.command))
@ -1460,9 +1462,12 @@ class RoomDetailFragment @Inject constructor(
displayCommandError(getString(R.string.unrecognized_command, sendMessageResult.command))
}
is TextComposerViewEvents.SlashCommandResultOk -> {
dismissLoadingDialog()
views.composerLayout.setTextIfDifferent("")
sendMessageResult.messageRes?.let { showSnackWithMessage(getString(it)) }
}
is TextComposerViewEvents.SlashCommandResultError -> {
dismissLoadingDialog()
displayCommandError(errorFormatter.toHumanReadable(sendMessageResult.throwable))
}
is TextComposerViewEvents.SlashCommandNotImplemented -> {

View file

@ -32,8 +32,8 @@ sealed class TextComposerViewEvents : VectorViewEvents {
data class JoinRoomCommandSuccess(val roomId: String) : SendMessageResult()
class SlashCommandError(val command: Command) : SendMessageResult()
class SlashCommandUnknown(val command: String) : SendMessageResult()
data class SlashCommandHandled(@StringRes val messageRes: Int? = null) : SendMessageResult()
object SlashCommandResultOk : SendMessageResult()
object SlashCommandLoading : SendMessageResult()
data class SlashCommandResultOk(@StringRes val messageRes: Int? = null) : SendMessageResult()
class SlashCommandResultError(val throwable: Throwable) : SendMessageResult()
data class OpenRoomMemberProfile(val userId: String) : TextComposerViewEvents()

View file

@ -178,19 +178,15 @@ class TextComposerViewModel @AssistedInject constructor(
}
is ParsedCommand.ChangeRoomName -> {
handleChangeRoomNameSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.Invite -> {
handleInviteSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.Invite3Pid -> {
handleInvite3pidSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.SetUserPowerLevel -> {
handleSetUserPowerLevel(slashCommandResult)
popDraft()
}
is ParsedCommand.ClearScalarToken -> {
// TODO
@ -198,55 +194,49 @@ class TextComposerViewModel @AssistedInject constructor(
}
is ParsedCommand.SetMarkdown -> {
vectorPreferences.setMarkdownEnabled(slashCommandResult.enable)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled(
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk(
if (slashCommandResult.enable) R.string.markdown_has_been_enabled else R.string.markdown_has_been_disabled))
popDraft()
}
is ParsedCommand.BanUser -> {
handleBanSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.UnbanUser -> {
handleUnbanSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.IgnoreUser -> {
handleIgnoreSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.UnignoreUser -> {
handleUnignoreSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.KickUser -> {
handleKickSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.JoinRoom -> {
handleJoinToAnotherRoomSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.PartRoom -> {
// TODO
_viewEvents.post(TextComposerViewEvents.SlashCommandNotImplemented)
handlePartSlashCommand(slashCommandResult)
}
is ParsedCommand.SendEmote -> {
room.sendTextMessage(slashCommandResult.message, msgType = MessageType.MSGTYPE_EMOTE, autoMarkdown = action.autoMarkdown)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendRainbow -> {
slashCommandResult.message.toString().let {
room.sendFormattedTextMessage(it, rainbowGenerator.generate(it))
}
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendRainbowEmote -> {
slashCommandResult.message.toString().let {
room.sendFormattedTextMessage(it, rainbowGenerator.generate(it), MessageType.MSGTYPE_EMOTE)
}
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendSpoiler -> {
@ -254,61 +244,56 @@ class TextComposerViewModel @AssistedInject constructor(
"[${stringProvider.getString(R.string.spoiler)}](${slashCommandResult.message})",
"<span data-mx-spoiler>${slashCommandResult.message}</span>"
)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendShrug -> {
sendPrefixedMessage("¯\\_(ツ)_/¯", slashCommandResult.message)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendLenny -> {
sendPrefixedMessage("( ͡° ͜ʖ ͡°)", slashCommandResult.message)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendChatEffect -> {
sendChatEffect(slashCommandResult)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.SendPoll -> {
room.sendPoll(slashCommandResult.question, slashCommandResult.options.mapIndexed { index, s -> OptionItem(s, "$index. $s") })
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
is ParsedCommand.ChangeTopic -> {
handleChangeTopicSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.ChangeDisplayName -> {
handleChangeDisplayNameSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.ChangeDisplayNameForRoom -> {
handleChangeDisplayNameForRoomSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.ChangeRoomAvatar -> {
handleChangeRoomAvatarSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.ChangeAvatarForRoom -> {
handleChangeAvatarForRoomSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.ShowUser -> {
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
handleWhoisSlashCommand(slashCommandResult)
popDraft()
}
is ParsedCommand.DiscardSession -> {
if (room.isEncrypted()) {
session.cryptoService().discardOutboundSession(room.roomId)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
} else {
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
_viewEvents.post(
TextComposerViewEvents
.ShowMessage(stringProvider.getString(R.string.command_description_discard_session_not_handled))
@ -316,6 +301,7 @@ class TextComposerViewModel @AssistedInject constructor(
}
}
is ParsedCommand.CreateSpace -> {
_viewEvents.post(TextComposerViewEvents.SlashCommandLoading)
viewModelScope.launch(Dispatchers.IO) {
try {
val params = CreateSpaceParams().apply {
@ -330,14 +316,16 @@ class TextComposerViewModel @AssistedInject constructor(
null,
true
)
popDraft()
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
} catch (failure: Throwable) {
_viewEvents.post(TextComposerViewEvents.SlashCommandResultError(failure))
}
}
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
popDraft()
Unit
}
is ParsedCommand.AddToSpace -> {
_viewEvents.post(TextComposerViewEvents.SlashCommandLoading)
viewModelScope.launch(Dispatchers.IO) {
try {
session.spaceService().getSpace(slashCommandResult.spaceId)
@ -347,34 +335,38 @@ class TextComposerViewModel @AssistedInject constructor(
null,
false
)
popDraft()
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
} catch (failure: Throwable) {
_viewEvents.post(TextComposerViewEvents.SlashCommandResultError(failure))
}
}
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
popDraft()
Unit
}
is ParsedCommand.JoinSpace -> {
_viewEvents.post(TextComposerViewEvents.SlashCommandLoading)
viewModelScope.launch(Dispatchers.IO) {
try {
session.spaceService().joinSpace(slashCommandResult.spaceIdOrAlias)
popDraft()
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
} catch (failure: Throwable) {
_viewEvents.post(TextComposerViewEvents.SlashCommandResultError(failure))
}
}
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
popDraft()
Unit
}
is ParsedCommand.LeaveRoom -> {
viewModelScope.launch(Dispatchers.IO) {
try {
session.getRoom(slashCommandResult.roomId)?.leave(null)
popDraft()
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
} catch (failure: Throwable) {
_viewEvents.post(TextComposerViewEvents.SlashCommandResultError(failure))
}
}
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
popDraft()
Unit
}
is ParsedCommand.UpgradeRoom -> {
_viewEvents.post(
@ -383,7 +375,7 @@ class TextComposerViewModel @AssistedInject constructor(
room.roomSummary()?.isPublic ?: false
)
)
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandResultOk())
popDraft()
}
}.exhaustive
@ -580,6 +572,20 @@ class TextComposerViewModel @AssistedInject constructor(
}
}
private fun handlePartSlashCommand(command: ParsedCommand.PartRoom) {
launchSlashCommandFlowSuspendable {
if (command.roomAlias == null) {
// Leave the current room
room
} else {
session.getRoomSummary(roomIdOrAlias = command.roomAlias)
?.roomId
?.let { session.getRoom(it) }
}
?.leave(reason = null)
}
}
private fun handleKickSlashCommand(kick: ParsedCommand.KickUser) {
launchSlashCommandFlowSuspendable {
room.kick(kick.userId, kick.reason)
@ -692,12 +698,13 @@ class TextComposerViewModel @AssistedInject constructor(
}
private fun launchSlashCommandFlowSuspendable(block: suspend () -> Unit) {
_viewEvents.post(TextComposerViewEvents.SlashCommandHandled())
_viewEvents.post(TextComposerViewEvents.SlashCommandLoading)
viewModelScope.launch {
val event = try {
block()
TextComposerViewEvents.SlashCommandResultOk
} catch (failure: Exception) {
popDraft()
TextComposerViewEvents.SlashCommandResultOk()
} catch (failure: Throwable) {
TextComposerViewEvents.SlashCommandResultError(failure)
}
_viewEvents.post(event)

View file

@ -49,8 +49,8 @@ data class TextComposerViewState(
val sendMode: SendMode = SendMode.REGULAR("", false)
) : MavericksState {
val isComposerVisible: Boolean
get() = canSendMessage && !isVoiceRecording
val isComposerVisible = canSendMessage && !isVoiceRecording
val isVoiceMessageRecorderVisible = canSendMessage && !isSendButtonVisible
constructor(args: RoomDetailArgs) : this(roomId = args.roomId)
}

View file

@ -0,0 +1,41 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.notifications
/**
* A FIFO circular buffer of T
* This class is not thread safe
*/
class CircularCache<T : Any>(cacheSize: Int, factory: (Int) -> Array<T?>) {
companion object {
inline fun <reified T : Any> create(cacheSize: Int) = CircularCache(cacheSize) { Array<T?>(cacheSize) { null } }
}
private val cache = factory(cacheSize)
private var writeIndex = 0
fun contains(key: T): Boolean = cache.contains(key)
fun put(key: T) {
if (writeIndex == cache.size) {
writeIndex = 0
}
cache[writeIndex] = key
writeIndex++
}
}

View file

@ -84,6 +84,13 @@ class NotificationDrawerManager @Inject constructor(private val context: Context
private var useCompleteNotificationFormat = vectorPreferences.useCompleteNotificationFormat()
/**
* An in memory FIFO cache of the seen events.
* Acts as a notification debouncer to stop already dismissed push notifications from
* displaying again when the /sync response is delayed.
*/
private val seenEventIds = CircularCache.create<String>(cacheSize = 25)
/**
Should be called as soon as a new event is ready to be displayed.
The notification corresponding to this event will not be displayed until
@ -141,7 +148,13 @@ class NotificationDrawerManager @Inject constructor(private val context: Context
}
} else {
// Not an edit
eventList.add(notifiableEvent)
if (seenEventIds.contains(notifiableEvent.eventId)) {
// we've already seen the event, lets skip
Timber.d("onNotifiableEventReceived(): skipping event, already seen")
} else {
seenEventIds.put(notifiableEvent.eventId)
eventList.add(notifiableEvent)
}
}
}
}
@ -266,7 +279,7 @@ class NotificationDrawerManager @Inject constructor(private val context: Context
is InviteNotifiableEvent -> {
if (autoAcceptInvites.hideInvites) {
// Forget this event
eventIterator.remove()
eventIterator.remove()
} else {
invitationEvents.add(event)
}

View file

@ -561,7 +561,7 @@ class NotificationUtils @Inject constructor(private val context: Context,
// TODO Group should be current user display name
.setGroup(stringProvider.getString(R.string.app_name))
// In order to avoid notification making sound twice (due to the summary notification)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_ALL)
.setSmallIcon(smallIcon)
// Set primary color (important for Wear 2.0 Notifications).
.setColor(accentColor)
@ -644,7 +644,7 @@ class NotificationUtils @Inject constructor(private val context: Context,
.setContentTitle(stringProvider.getString(R.string.app_name))
.setContentText(inviteNotifiableEvent.description)
.setGroup(stringProvider.getString(R.string.app_name))
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_ALL)
.setSmallIcon(smallIcon)
.setColor(accentColor)
.apply {
@ -708,7 +708,7 @@ class NotificationUtils @Inject constructor(private val context: Context,
.setContentTitle(stringProvider.getString(R.string.app_name))
.setContentText(simpleNotifiableEvent.description)
.setGroup(stringProvider.getString(R.string.app_name))
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_ALL)
.setSmallIcon(smallIcon)
.setColor(accentColor)
.setAutoCancel(true)
@ -801,6 +801,7 @@ class NotificationUtils @Inject constructor(private val context: Context,
val smallIcon = R.drawable.ic_status_bar
return NotificationCompat.Builder(context, if (noisy) NOISY_NOTIFICATION_CHANNEL_ID else SILENT_NOTIFICATION_CHANNEL_ID)
.setOnlyAlertOnce(true)
// used in compat < N, after summary is built based on child notifications
.setWhen(lastMessageTimestamp)
.setStyle(style)

View file

@ -1325,4 +1325,9 @@
<string name="missing_permissions_title">تصاريح ناقصة</string>
<string name="denied_permission_voice_message">لإرسال رسائل صوتية امنح تصريح الوصول للميكريفون.</string>
<string name="denied_permission_camera">لإكمال هذا الإجراء امنح تصريح الوصول للكميرا عبر إعدادات النظام.</string>
<string name="keys_backup_setup_creating_backup">ينشئ نسخة احتياطية</string>
<string name="keys_backup_setup_step2_button_title">عيّن عبارة مرور</string>
<string name="keys_backup_setup_step2_text_title">أمّن النسخ الاختياطي بعبارة مرور.</string>
<string name="keys_backup_setup_step1_manual_export">تصدير المفاتيح يدويًا</string>
<string name="keys_backup_setup_step1_advanced">(متقدم)</string>
</resources>

View file

@ -335,7 +335,7 @@
<string name="disable">Vyřadit</string>
<string name="dialog_title_confirmation">Potvrzení</string>
<string name="dialog_title_warning">Varování</string>
<string name="bottom_action_home">Domů</string>
<string name="bottom_action_home">Úvod</string>
<string name="bottom_action_favourites">Oblíbené</string>
<string name="bottom_action_people">Lidé</string>
<string name="bottom_action_rooms">Místnosti</string>
@ -1297,7 +1297,7 @@
<string name="command_description_unban_user">Zruší zákaz uživateli s daným id</string>
<string name="command_description_op_user">Určit úroveň pokročilosti uživatele</string>
<string name="command_description_invite_user">Pozve uživatele s daným id do této místnosti</string>
<string name="command_description_join_room">Vstoupí do místnosti s daným aliasem</string>
<string name="command_description_join_room">Vstoupí do místnosti s danou adresou</string>
<string name="command_description_part_room">Opustit místnost</string>
<string name="command_description_topic">Určit téma místnosti</string>
<string name="command_description_kick_user">Nakopne uživatele s daným id</string>
@ -1316,7 +1316,7 @@
<string name="community_name_hint">Příklad</string>
<string name="community_id">Id komunity</string>
<string name="community_id_hint">příklad</string>
<string name="group_details_home">Doma</string>
<string name="group_details_home">Úvod</string>
<string name="group_details_people">Lidé</string>
<string name="group_details_rooms">Místnosti</string>
<string name="no_users_placeholder">Žádní uživatelé</string>
@ -2725,16 +2725,16 @@
<string name="event_status_sent_message">Zpráva odeslána</string>
<string name="a11y_unchecked">Neoznačeno</string>
<string name="labs_use_restricted_join_rule">Experimentální, prostor - omezená místnost.</string>
<string name="spaces_beta_welcome_to_spaces_desc">Spaces představují nový způsob seskupování místností a osob.</string>
<string name="spaces_beta_welcome_to_spaces_desc">Prostory představují nový způsob seskupování místností a osob.</string>
<string name="create_spaces_room_private_header_desc">Založme pro každé místnost. Později můžete přidat i další, včetně již existujících.</string>
<string name="create_spaces_room_private_header">Na jakých tématech pracujete\?</string>
<string name="create_spaces_room_public_header_desc">Založíme pro ně místnosti. Můžete přidat další později.</string>
<string name="create_spaces_details_private_header">Doplňte nějaké podrobnosti, aby jej lidé mohli identifikovat. Můžete je kdykoli změnit.</string>
<string name="create_spaces_type_header">Spaces jsou nový způsob organizace místností a lidí</string>
<string name="spaces_header">Spaces</string>
<string name="create_spaces_type_header">Prostory jsou nový způsob organizace místností a lidí</string>
<string name="spaces_header">Prostory</string>
<string name="labs_use_restricted_join_rule_desc">Varování, nutná podpora serveru a experimentální verze místnosti</string>
<string name="you_are_invited">Jste zváni</string>
<string name="spaces_beta_welcome_to_spaces">Vítejte ve Spaces!</string>
<string name="spaces_beta_welcome_to_spaces">Vítejte v prostorech!</string>
<string name="space_add_existing_rooms">Přidat existující místnosti a prostor</string>
<string name="leave_space">Opustit prostor</string>
<string name="space_add_child_title">Přidat místnosti</string>
@ -2764,7 +2764,7 @@
<string name="invite_people_menu">Pozvat lidi</string>
<string name="invite_people_to_your_space">Pozvěte do svého prostoru lidi</string>
<string name="create_space_topic_hint">Popis</string>
<string name="create_spaces_loading_message">Zakládám Space</string>
<string name="create_spaces_loading_message">Vytvářím prostor</string>
<string name="create_spaces_default_public_random_room_name">Nahodilé</string>
<string name="create_spaces_default_public_room_name">Obecné</string>
<string name="create_spaces_room_public_header">Jaké diskuse si přejete vést v %s\?</string>
@ -2775,15 +2775,15 @@
<string name="space_type_private">Privátní</string>
<string name="space_type_public_desc">Otevřený pro všechny, nejlepší pro komunity</string>
<string name="space_type_public">Veřejný</string>
<string name="create_spaces_private_teammates">Privátní Space pro Vás a Vaše kolegy</string>
<string name="create_spaces_private_teammates">Privátní prostor pro Vás a Vaše kolegy</string>
<string name="create_spaces_me_and_teammates">Já a kolegové</string>
<string name="create_spaces_organise_rooms">Privátní Space k organizaci Vašich místností</string>
<string name="create_spaces_organise_rooms">Privátní prostor k organizaci Vašich místností</string>
<string name="create_spaces_just_me">Jen já</string>
<string name="create_spaces_make_sure_access">Ujistěte se, že ti správní lidé mají přístup do %s. Můžete změnit později.</string>
<string name="create_spaces_who_are_you_working_with">S kým pracujete\?</string>
<string name="create_spaces_join_info_help">K vstupu do existujícího Space potřebujete pozvání.</string>
<string name="create_spaces_join_info_help">Ke vstupu do existujícího prostoru potřebujete pozvání.</string>
<string name="create_spaces_you_can_change_later">Můžete změnit později</string>
<string name="create_spaces_choose_type_label">Jaký typ Space chcete založit\?</string>
<string name="create_spaces_choose_type_label">Jaký typ prostoru chcete založit\?</string>
<string name="your_private_space">Váš privátní prostor</string>
<string name="your_public_space">Váš veřejný prostor</string>
<string name="add_space">Přidat prostor</string>
@ -2802,7 +2802,7 @@
<string name="room_settings_guest_access_title">Dovolit hostům vstoupit</string>
<string name="spaces_invited_header">Pozvání</string>
<string name="suggested_header">Doporučené místnosti</string>
<string name="space_manage_rooms_and_spaces">Správa místností a Spaces</string>
<string name="space_manage_rooms_and_spaces">Správa místností a prostorů</string>
<string name="space_mark_as_not_suggested">Označit za nikoli doporučené</string>
<string name="space_mark_as_suggested">Označit za doporučené</string>
<string name="space_suggested">Doporučeno</string>
@ -2827,9 +2827,9 @@
\nK přidávání místností nemáte oprávnění.</string>
<string name="this_space_has_no_rooms">Tento prostor nemá žádné místnosti</string>
<string name="spaces_no_server_support_description">Další informace získáte od správce domovského serveru</string>
<string name="spaces_no_server_support_title">Vypadá to, že váš domovský server zatím Spaces nepodporuje</string>
<string name="spaces_no_server_support_title">Vypadá to, že váš domovský server zatím Prostory nepodporuje</string>
<string name="spaces_feeling_experimental_subspace">Chcete experimentovat\?
\nDo Spaceu můžete přidat existující Spaces.</string>
\nDo prostoru můžete přidat existující prostory.</string>
<string name="space_add_rooms">Přidat místnosti</string>
<string name="space_leave_prompt_msg_as_admin">Jste jediným správcem tohoto prostoru. Jeho opuštění bude znamenat, že nad ním nebude mít nikdo kontrolu.</string>
<string name="space_leave_prompt_msg_private">Pokud nebudete znovu pozváni, nebudete se moci připojit.</string>
@ -2840,9 +2840,9 @@
<string name="feedback_failed">Zpětnou vazbu se nepodařilo odeslat (%s)</string>
<string name="feedback_sent">Děkujeme, vaše zpětná vazba byla úspěšně odeslána</string>
<string name="you_may_contact_me">V případě dalších dotazů se na mě můžete obrátit</string>
<string name="send_feedback_space_info">Používáte beta verzi Spaces. Váš feedback pomůže při tvorbě dalších verzí. Vaše platforma a uživatelské jméno budou zaznamenány, abychom mohli Váš feedback co nejlépe využít.</string>
<string name="send_feedback_space_info">Používáte beta verzi prostorů. Vaše zpětná vazba pomůže při tvorbě dalších verzí. Vaše platforma a uživatelské jméno budou zaznamenány, abychom mohli vaši zpětnou vazbu co nejlépe využít.</string>
<string name="feedback">Zpětná vazba</string>
<string name="send_feedback_space_title">Feedback na Spaces</string>
<string name="send_feedback_space_title">Zpětná vazba prostorů</string>
<string name="error_jitsi_join_conf">Omlouváme se, při pokusu o připojení ke konferenci došlo k chybě</string>
<string name="unnamed_room">Nepojmenovaná místnost</string>
<string name="private_space">Soukromý prostor</string>
@ -2860,7 +2860,7 @@
<string name="teammate_spaces_might_not_join">V současné době se lidé nemohou připojit k soukromým místnostem, které jste vytvořili.
\n
\nV rámci beta verze to zlepšíme, ale jen jsme vás chtěli informovat.</string>
<string name="teammate_spaces_arent_quite_ready">Spaces pro spolupracovníky nejsou ještě zcela připravené, ale přesto je můžete vyzkoušet</string>
<string name="teammate_spaces_arent_quite_ready">Prostory pro spolupracovníky nejsou ještě zcela připravené, ale přesto je můžete vyzkoušet</string>
<string name="error_failed_to_join_room">Omlouváme se, došlo k chybě během pokusu o přistoupení: %s</string>
<string name="create_space_alias_hint">Adresa prostoru</string>
<string name="space_settings_alias_subtitle">Prohlédnout a spravovat adresy tohoto prostoru.</string>
@ -2900,17 +2900,17 @@
<item quantity="few">%d zmeškané hlasové hovory</item>
<item quantity="other">%d zmeškaných hlasových hovorů</item>
</plurals>
<string name="decide_which_spaces_can_access">Rozhodněte, které Spaces mají přístup do této místnosti. Pokud je vybrán prostor, jeho členové budou moci najít název místnosti a připojit se k ní.</string>
<string name="other_spaces_or_rooms_you_might_not_know">Další Spaces nebo místnosti, které možná neznáte</string>
<string name="decide_which_spaces_can_access">Rozhodněte, které prostory mají přístup do této místnosti. Pokud je vybrán prostor, jeho členové budou moci najít název místnosti a připojit se k ní.</string>
<string name="other_spaces_or_rooms_you_might_not_know">Další prostory nebo místnosti, které možná neznáte</string>
<string name="space_you_know_that_contains_this_room">Prostor, o kterém víte, že obsahuje tuto místnost</string>
<string name="decide_who_can_find_and_join">Rozhodněte, kdo může tuto místnost najít a připojit se k ní.</string>
<string name="tap_to_edit_spaces">Klepnutím upravíte Spaces</string>
<string name="allow_anyone_in_room_to_access">Povolit vyhledání a přístup komukoli v %s. Můžete vybrat i další Spaces.</string>
<string name="tap_to_edit_spaces">Klepnutím upravíte prostory</string>
<string name="allow_anyone_in_room_to_access">Povolit vyhledání a přístup komukoli v %s. Můžete vybrat i další prostory.</string>
<string name="upgrade_required">Vyžadována aktualizace</string>
<string name="upgrade_room_for_restricted_no_param">Každý, kdo se nachází v nadřazeném prostoru, bude moci tuto místnost najít a připojit se k ní - není třeba všechny zvát ručně. Tuto možnost budete moci kdykoli změnit v nastavení místnosti.</string>
<string name="upgrade_room_for_restricted">Kdokoli v %s bude moci tuto místnost najít a připojit se k ní - není třeba všechny zvát ručně. Toto nastavení budete moci kdykoli změnit v nastavení místnosti.</string>
<string name="voice_message_tap_to_stop_toast">Klepnutím na nahrávku ji zastavíte nebo posloucháte</string>
<string name="select_spaces">Vybrat Spaces</string>
<string name="select_spaces">Vybrat prostory</string>
<string name="upgrade_room_for_restricted_note">Upozorňujeme, že aktualizací vznikne nová verze místnosti. Všechny aktuální zprávy zůstanou v této archivované místnosti.</string>
<string name="voice_message_reply_content">Hlasová zpráva (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Nelze odpovídat ani upravovat, když je hlasová zpráva aktivní</string>
@ -2919,15 +2919,15 @@
<string name="labs_use_voice_message">Povolit hlasovou zprávu</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds zbývá</string>
<string name="voice_message_release_to_send_toast">Podržením nahrajte, uvolněním odešlete</string>
<string name="a11y_delete_recorded_voice_message">Odstranit nahranou hlasovou zprávu</string>
<string name="a11y_delete_recorded_voice_message">Odstranit záznam</string>
<string name="a11y_recording_voice_message">Nahrát hlasovou zprávu</string>
<string name="a11y_pause_voice_message">Pozastavit hlasovou zprávu</string>
<string name="a11y_play_voice_message">Přehrát hlasovou zprávu</string>
<string name="a11y_lock_voice_message">Zámek hlasové zprávy</string>
<string name="voice_message_slide_to_cancel">Posunutím zrušíte</string>
<string name="a11y_start_voice_message">Zahájení hlasové zprávy</string>
<string name="a11y_start_voice_message">Nahrát hlasovou zprávu</string>
<string name="sent_a_voice_message">Hlasová zpráva</string>
<string name="spaces_which_can_access">Spaces, které mají přístup</string>
<string name="spaces_which_can_access">Prostory, které mají přístup</string>
<string name="allow_space_member_to_find_and_access">Umožněte členům prostoru ho najít a zpřístupnit.</string>
<string name="room_create_member_of_space_name_can_join">Členové prostoru %s mohou vyhledávat, prohlížet a připojovat se.</string>
<string name="room_settings_room_access_private_invite_only_title">Soukromé (pouze pro pozvané)</string>
@ -2952,8 +2952,8 @@
<string name="to_help_space_members_find_and_join">Chcete-li členům prostoru pomoci najít soukromou místnost a připojit se k ní, přejděte do nastavení dané místnosti klepnutím na avatar.</string>
<string name="help_space_members">Pomozte členům prostoru najít soukromé místnosti</string>
<string name="this_makes_it_easy_for_rooms_to_stay_private_to_a_space">Díky tomu mohou místnosti zůstat soukromé a zároveň je mohou lidé v prostoru najít a připojit se k nim. Všechny nové místnosti v prostoru budou mít tuto možnost k dispozici.</string>
<string name="help_people_in_spaces_find_and_join">Pomozte lidem ve Spaces, aby sami našli soukromé místnosti a připojili se k nim, není třeba všechny zvát ručně.</string>
<string name="new_let_people_in_spaces_find_and_join">Novinka: Nechat lidi v Spaces vyhledat a připojit se k soukromým místnostem</string>
<string name="help_people_in_spaces_find_and_join">Pomozte lidem v prostorech, aby sami našli soukromé místnosti a připojili se k nim, není třeba všechny zvát ručně.</string>
<string name="new_let_people_in_spaces_find_and_join">Novinka: Nechat lidi v prostorech vyhledat a připojit se k soukromým místnostem</string>
<string name="call_jitsi_started">Skupinový hovor zahájen</string>
<string name="all_rooms_youre_in_will_be_shown_in_home">Všechny místnosti, ve kterých se nacházíte, se zobrazí v domovském zobrazení.</string>
<string name="preference_show_all_rooms_in_home">Zobrazit všechny místnosti v domovském zobrazení</string>
@ -2998,7 +2998,7 @@
<string name="audio_call_with_participant">Hlasový hovor s %s</string>
<string name="video_call_with_participant">Videohovor s %s</string>
<string name="call_ringing">Vyzvánění…</string>
<string name="spaces">Spaces</string>
<string name="spaces">Prostory</string>
<string name="learn_more">Dozvědět se více</string>
<string name="space_add_space_to_any_space_you_manage">Přidejte prostor do jakéhokoli prostoru, který spravujete.</string>
<string name="space_add_existing_spaces">Přidat stávající prostory</string>
@ -3045,4 +3045,20 @@
<string name="space_participants_kick_prompt_msg">vykopnutí uživatele je z tohoto prostoru odstraní.
\n
\nAbyste jim zabránili v dalším vstupu, měli byste je raději vykázat.</string>
<string name="command_description_lenny">Předsune ( ͡° ͜ʖ ͡°) do textové zprávy</string>
<string name="a11y_stop_voice_message">Zastavit nahrávání</string>
<string name="identity_server_consent_dialog_neutral_policy">Zásady</string>
<string name="settings_discovery_no_policy_provided">Server identit neposkytuje žádné zásady</string>
<string name="settings_discovery_hide_identity_server_policy_title">Skrýt zásady serveru identit</string>
<string name="settings_discovery_show_identity_server_policy_title">Zobrazit zásady serveru identit</string>
<string name="command_description_whois">Zobrazí informace o uživateli</string>
<string name="command_description_avatar_for_room">Změní vašeho avatara pouze v této místnosti</string>
<string name="command_description_room_avatar">Změní avatar aktuální místnosti</string>
<string name="command_description_nick_for_room">Změní vaši zobrazovanou přezdívku pouze v aktuální místnosti</string>
<string name="command_description_room_name">Nastaví název místnosti</string>
<string name="command_description_unignore_user">Přestane ignorovat uživatele a zobrazí jeho zprávy</string>
<string name="command_description_ignore_user">Ignoruje uživatele a skrývá jeho zprávy</string>
<string name="a11y_presence_unavailable">Nedostupný</string>
<string name="a11y_presence_offline">Offline</string>
<string name="a11y_presence_online">Online</string>
</resources>

View file

@ -1,2 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="login_splash_text3">Extend &amp; customise your experience</string>
<string name="home_filter_placeholder_favorites">Filter favourites</string>
<string name="room_list_quick_actions_favorite_remove">Remove from favourites</string>
<string name="room_list_quick_actions_favorite_add">Add to favourites</string>
<string name="room_recents_favourites">FAVOURITES</string>
<string name="bootstrap_crosssigning_progress_save_ssk">Synchronising Self Signing key</string>
<string name="bootstrap_crosssigning_progress_save_usk">Synchronising User key</string>
<string name="bootstrap_crosssigning_progress_save_msk">Synchronising Master key</string>
<string name="initialize_cross_signing">Initialise CrossSigning</string>
<string name="login_error_threepid_denied">Your email domain is not authorised to register on this server</string>
<string name="unrecognized_command">Unrecognised command: %s</string>
<string name="settings_background_fdroid_sync_mode_real_time">Optimised for real time</string>
<string name="settings_background_fdroid_sync_mode_battery">Optimised for battery</string>
<string name="settings_background_sync">Background synchronisation</string>
<string name="settings_troubleshoot_test_battery_quickfix">Ignore Optimisation</string>
<string name="template_settings_troubleshoot_test_battery_success">${app_name} is not affected by Battery Optimisation.</string>
<string name="settings_troubleshoot_test_battery_title">Battery Optimisation</string>
<string name="room_settings_de_prioritize">De-prioritise</string>
<string name="call_error_camera_init_failed">Cannot initialise the camera</string>
<string name="error_unauthorized">Unauthorised, missing valid authentication credentials</string>
<string name="notification_sync_init">Initialising service</string>
</resources>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="resources_language">en</string>
<string name="resources_country_code">GB</string>
<string name="resources_script">Latn</string>
</resources>

View file

@ -1556,7 +1556,7 @@
<string name="command_description_op_user">Määra kasutaja õigused</string>
<string name="command_description_deop_user">Eemalda antud tunnusega kasutajalt haldusõigused selles jututoas</string>
<string name="command_description_invite_user">Kutsub nimetatud kasutajatunnusega kasutaja sellesse jututuppa</string>
<string name="command_description_join_room">Liitu antud aadressiga jututoaga</string>
<string name="command_description_join_room">Liitu sellise aadressiga jututoaga</string>
<string name="command_description_part_room">Lahku jututoast</string>
<string name="command_description_topic">Määra jututoa teema</string>
<string name="command_description_kick_user">Müksa selle tunnusega kasutaja jututoast välja</string>
@ -3002,4 +3002,7 @@
<string name="command_description_room_name">Määrab jututoa nime</string>
<string name="command_description_unignore_user">Lõpeta kasutaja eiramine ja näita edaspidi tema sõnumeid</string>
<string name="command_description_ignore_user">Eirab kasutajat peites kõik tema sõnumid sinu eest</string>
<string name="a11y_presence_unavailable">Pole leitav</string>
<string name="a11y_presence_offline">Võrgust väljas</string>
<string name="a11y_presence_online">Võrgus</string>
</resources>

View file

@ -3002,4 +3002,7 @@
<string name="command_description_room_name">نام اتاق را تنظیم می‌کند</string>
<string name="command_description_unignore_user">به کاربری چشم گشوده و پیام‌های بعدیش را نشان می‌دهد</string>
<string name="command_description_ignore_user">از کاربری چشم‌پوشی کرده و پیام‌هایش را از شما پنهان می‌کند</string>
<string name="a11y_presence_unavailable">ناموجود</string>
<string name="a11y_presence_offline">برون‌خط</string>
<string name="a11y_presence_online">برخط</string>
</resources>

View file

@ -357,7 +357,7 @@
<string name="auth_use_server_options">Muokkaa palvelinasetuksia</string>
<string name="auth_email_validation_message">Tarkista sähköpostisi jatkaaksesi rekisteröintiä</string>
<string name="auth_threepid_warning_message">Rekisteröityminen sähköpostiosoitteella ja puhelinnumerolla samaan aikaan ei ole mahdollista kunnes API on olemassa. Ainoastaan puhelinnumero otetaan huomioon.\n\nVoit lisätä sähköpostiosoitteen tiliisi asetuksissa.</string>
<string name="auth_recaptcha_message">Varmista ettet ole robotti</string>
<string name="auth_recaptcha_message">Tämä kotipalvelin haluaa varmistaa, ettet ole robotti</string>
<string name="auth_username_in_use">Käyttäjätunnus on jo käytössä</string>
<string name="auth_home_server">Kotipalvelin:</string>
<string name="auth_identity_server">Identiteettipalvelin:</string>
@ -522,7 +522,7 @@
<string name="room_resend_unsent_messages">Lähetä lähettämättömät viestit</string>
<string name="room_delete_unsent_messages">Poista lähettämättömät viestit</string>
<string name="room_message_file_not_found">Tiedostoa ei löydy</string>
<string name="room_do_not_have_permission_to_post">Sinulla ei ole oikeutta lähettää viestejä tähän huoneeseen</string>
<string name="room_do_not_have_permission_to_post">Sinulla ei ole oikeutta lähettää viestejä tähän huoneeseen.</string>
<!-- unrecognized SSL certificate -->
<string name="ssl_trust">Luota</string>
<string name="ssl_do_not_trust">Älä luota</string>
@ -790,7 +790,7 @@
<string name="select_room_directory">Valitse huoneluettelo</string>
<string name="directory_server_fail_to_retrieve_server">Palvelin saattaa olla tavoittamattomissa tai ylikuormitettu</string>
<string name="directory_server_type_homeserver">Syötä kotipalvelin, jolta julkiset huoneet listataan</string>
<string name="directory_server_placeholder">Kotipalvelimen URL-osoite</string>
<string name="directory_server_placeholder">Palvelimen nimi</string>
<string name="directory_server_all_rooms_on_server">Kaikki huoneet palvelimella %s</string>
<string name="directory_server_native_rooms">Kaikki alkuperäiset %s huoneet</string>
<!-- historical -->
@ -1035,7 +1035,7 @@
<item quantity="one">%1$s huone löydetty kohteelle %2$s</item>
<item quantity="other">%1$s huonetta löydetty kohteelle %2$s</item>
</plurals>
<string name="settings_notification_advanced">Yksilöidyt ilmoitusasetukset</string>
<string name="settings_notification_advanced">Edistyneet ilmoitusasetukset</string>
<string name="settings_notification_by_event">Ilmoituksen tärkeys tapahtumakohtaisesti</string>
<string name="settings_notification_privacy">Ilmoitusten yksityisyys</string>
<string name="settings_notification_troubleshoot">Ratkaise ilmoituksien ongelmia</string>
@ -1517,7 +1517,7 @@
<string name="encryption_information_device_name_with_warning">Julkinen nimi (näkyy ihmisille, joihin olet yhteydessä)</string>
<string name="device_name_warning">Istunnon julkinen nimi näkyy ihmisille, joihin olet yhteydessä</string>
<string name="widget_integration_review_terms">Jatkaaksesi sinun täytyy hyväksyä palvelun käyttöehdot.</string>
<string name="identity_server_not_defined">Et käytä identiteettipalvelinta</string>
<string name="identity_server_not_defined">Et käytä mitään identiteettipalvelinta</string>
<string name="identity_server_not_defined_for_password_reset">Identiteettipalvelinta ei ole määritetty, salasanan palautus vaaditaan.</string>
<string name="error_user_already_logged_in">Näyttää, että yrität yhdistää toiseen kotipalvelimeen. Haluatko kirjautua ulos\?</string>
<string name="push_gateway_item_url">URL-osoite:</string>
@ -1707,7 +1707,7 @@
<string name="login_splash_submit">Aloita</string>
<string name="login_server_title">Valitse palvelin</string>
<string name="login_server_text">Kuten sähköpostissa, tunnuksilla on yksi koti, mutta voit keskustella koko maailman kanssa</string>
<string name="login_server_matrix_org_text">Liity miljoonien joukkoon suurimmalla julkisella palvelimella</string>
<string name="login_server_matrix_org_text">Liity veloituksetta miljoonien joukkoon suurimmalla julkisella palvelimella</string>
<string name="login_server_modular_text">Korkealuokkaista isännöintiä organisaatioille</string>
<string name="login_server_modular_learn_more">Lue lisää</string>
<string name="login_server_other_title">Muut</string>
@ -1770,7 +1770,7 @@
<string name="login_msisdn_confirm_hint">Syötä koodi</string>
<string name="login_msisdn_confirm_send_again">Lähetä uudelleen</string>
<string name="login_msisdn_confirm_submit">Seuraava</string>
<string name="login_msisdn_error_not_international">Kansainvälisten puhelinnumeroiden pitää alkaa \'+\' merkillä</string>
<string name="login_msisdn_error_not_international">Kansainvälisten puhelinnumeroiden pitää alkaa merkillä \'+\'</string>
<string name="login_msisdn_error_other">Puhelinnumero vaikuttaa epäkelvolta. Tarkista numero</string>
<string name="login_signup_to">Rekisteröidy palvelimelle %1$s</string>
<string name="login_signin_username_hint">Käyttäjätunnus tai sähköpostiosoite</string>
@ -2099,7 +2099,7 @@
<string name="room_participants_action_cancel_invite_prompt_msg">Haluatko peruuttaa tämän käyttäjän kutsun\?</string>
<string name="room_participants_leave_private_warning">Tämä huone ei ole julkinen. Jos poistut, et voi liittyä takaisin ilman kutsua.</string>
<string name="settings_security_prevent_screenshots_summary">Tämän asetuksen käyttöön ottaminen lisää FLAG_SECURE kaikkiin toimintoihin. Käynnistä sovellus uudestaan, jotta muutos tulee voimaan.</string>
<string name="settings_security_prevent_screenshots_title">Estä sovelluksen kuvankaappaukset</string>
<string name="settings_security_prevent_screenshots_title">Estä kuvakaappausten ottaminen sovelluksesta</string>
<string name="cannot_dm_self">Et voi lähettää yksityisviestiä itsellesi!</string>
<string name="warning_unsaved_change_discard">Hylkää muutokset</string>
<string name="invalid_qr_code_uri">Virheellinen QR-koodi (virheellinen URI)!</string>
@ -2116,7 +2116,7 @@
<string name="disabled_integration_dialog_content">Ota integraatiot asetuksista käyttöön tekeäksesi tämän.</string>
<string name="disabled_integration_dialog_title">Integraatiot ovat poissa käytöstä</string>
<string name="room_manage_integrations">Integraatioiden hallinta</string>
<string name="login_msisdn_notice">Käytä kansainvälistä muotoa (puhelinnumeron on alettava \'+\')</string>
<string name="login_msisdn_notice">Käytä kansainvälistä muotoa (puhelinnumeron on alettava merkillä \'+\')</string>
<string name="settings_emails_and_phone_numbers_title">Sähköpostiosoitteet ja puhelinnumerot</string>
<string name="settings_emails_and_phone_numbers_summary">Hallitse Matrix-tiliisi linkitettyjä sähköpostiosoitteita ja puhelinnumeroita</string>
<string name="change_password_summary">Aseta tilille uusi salasana…</string>
@ -2260,4 +2260,413 @@
<string name="notice_widget_jitsi_added">%1$s aloitti videopuhelun</string>
<string name="notice_room_server_acl_updated_title_by_you">Muutit huoneen palvelimien käyttäjäoikeuslistaa.</string>
<string name="notice_room_server_acl_updated_title">%s muutti huoneen palvelimien käyttäjäoikeuslistaa.</string>
<string name="link_this_email_settings_link">Linkitä tämä sähköpostiosoite tiliisi</string>
<string name="voice_message_reply_content">Ääniviesti (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Vastaaminen tai muokkaaminen ei ole mahdollista, kun ääniviesti on aktiivinen</string>
<string name="error_voice_message_unable_to_record">Ääniviestiä ei voi äänittää</string>
<string name="error_voice_message_unable_to_play">Tätä ääniviestiä ei voi toistaa</string>
<string name="labs_use_voice_message">Käytä ääniviestiä</string>
<string name="voice_message_tap_to_stop_toast">Napauta äänitystä pysäyttääksesi tai kuunnellaksesi</string>
<string name="voice_message_n_seconds_warning_toast">%1$d s jäljellä</string>
<string name="a11y_delete_recorded_voice_message">Poista äänitys</string>
<string name="a11y_recording_voice_message">Äänitetään ääniviestiä</string>
<string name="a11y_stop_voice_message">Pysäytä äänitys</string>
<string name="a11y_pause_voice_message">Keskeytä ääniviesti</string>
<string name="a11y_play_voice_message">Toista ääniviesti</string>
<string name="voice_message_slide_to_cancel">Liu\'uta peruaksesi</string>
<string name="a11y_start_voice_message">Äänitä ääniviesti</string>
<string name="call_jitsi_started">Ryhmäpuhelu alkoi</string>
<string name="error_failed_to_join_room">Liittymisen yhteydessä tapahtui virhe: %s</string>
<string name="room_upgrade_to_recommended_version">Päivitä suositeltuun huoneversioon</string>
<string name="upgrade_room_no_power_to_manage">Tarvitset oikeuden huoneen päivittämiseen</string>
<string name="upgrade_room_auto_invite">Kutsu käyttäjiä automaattisesti</string>
<string name="upgrade_private_room">Päivitä yksityinen huone</string>
<string name="upgrade_public_room">Päivitä julkinen huone</string>
<string name="upgrade_required">Päivitys vaaditaan</string>
<string name="upgrade">Päivitä</string>
<string name="it_may_take_some_time">Odota hetki, tämä saattaa kestää jonkin aikaa.</string>
<string name="unnamed_room">Nimetön huone</string>
<string name="this_space_has_no_rooms_admin">Jotkin huoneet saattavat olla piilotettuja, koska ne ovat yksityisiä. Liittyäksesi tarvitset kutsun.</string>
<string name="this_space_has_no_rooms_not_admin">Jotkin huoneet saattavat olla piilotettuja, koska ne ovat yksityisiä. Liittyäksesi tarvitset kutsun.
\nSinulla ei ole oikeutta lisätä huoneita.</string>
<string name="this_space_has_no_rooms">Tässä avaruudessa ei ole huoneita</string>
<string name="spaces_no_server_support_description">Ole yhteydessä kotipalvelimesi ylläpitäjään saadaksesi lisätietoja</string>
<string name="spaces_no_server_support_title">Vaikuttaa siltä, ettei kotipalvelimesi tue vielä avaruuksia</string>
<string name="spaces_feeling_experimental_subspace">Onko olosi kokeellinen\?
\nVoit lisätä olemassa olevia avaruuksia avaruuteen.</string>
<string name="space_manage_rooms_and_spaces">Hallitse huoneita ja avaruuksia</string>
<string name="space_suggested">Ehdotettu</string>
<string name="make_this_space_public">Tee tästä avaruudesta julkinen</string>
<string name="space_settings_manage_rooms">Hallitse huoneita</string>
<string name="user_invites_you">%s kutsuu sinut</string>
<string name="labs_use_restricted_join_rule">Kokeellinen avaruus - Rajattu huone.</string>
<string name="you_are_invited">Sinut on kutsuttu</string>
<string name="spaces_beta_welcome_to_spaces_desc">Avaruudet ovat uusi tapa ryhmitellä huoneita ja ihmisiä.</string>
<string name="spaces_beta_welcome_to_spaces">Tervetuloa avaruuksien pariin!</string>
<string name="space_add_rooms">Lisää huoneita</string>
<string name="space_add_space_to_any_space_you_manage">Lisää avaruus mihin tahansa hallitsemaasi avaruuteen.</string>
<string name="space_add_existing_spaces">Lisää olemassa olevia avaruuksia</string>
<string name="space_add_existing_rooms_only">Lisää olemassa olevia huoneita</string>
<string name="space_leave_prompt_msg_private">Et voi liittyä uudelleen, ellei sinua kutsuta uudelleen.</string>
<string name="space_leave_prompt_msg_only_you">Olet ainoa henkilö täällä. Jos poistut, kukaan ei voi liittyä tänne tulevaisuudessa, et edes sinä.</string>
<string name="space_leave_prompt_msg_with_name">Haluatko varmasti poistua avaruudesta %s\?</string>
<string name="leave_space">Poistu avaruudesta</string>
<string name="space_add_child_title">Lisää huoneita</string>
<string name="space_explore_activity_title">Selaa huoneita</string>
<plurals name="space_people_you_know">
<item quantity="one">%d tuntemasi henkilö on jo liittynyt</item>
<item quantity="other">%d tuntemaasi henkilöä on jo liittynyt</item>
</plurals>
<string name="suggested_rooms_pills_on_empty_header">Tervetuloa avaruuteen %1$s, %2$s.</string>
<string name="join_anyway">Liity silti</string>
<string name="join_space">Liity avaruuteen</string>
<string name="create_space">Luo avaruus</string>
<string name="skip_for_now">Ohita toistaiseksi</string>
<string name="share_space_link_message">Liity avaruuteeni %1$s %2$s</string>
<string name="invite_to_space_with_name_desc">He voivat selata avaruutta %s</string>
<string name="invite_to_space_with_name">Kutsu avaruuteen %s</string>
<string name="invite_by_link">Jaa linkki</string>
<string name="invite_by_mxid_or_mail">Kutsu käyttäjänimellä tai sähköpostilla</string>
<string name="invite_by_mxid">Kutsu käyttäjänimellä</string>
<string name="invite_by_email">Kutsu sähköpostitse</string>
<string name="invite_to_space">Kutsu avaruuteen %s</string>
<string name="invite_people_menu">Kutsu ihmisiä</string>
<string name="invite_people_to_your_space">Kutsu ihmisiä avaruuteesi</string>
<string name="create_space_topic_hint">Kuvaus</string>
<string name="create_spaces_loading_message">Luodaan avaruutta…</string>
<string name="create_spaces_default_public_random_room_name">Satunnainen</string>
<string name="create_spaces_default_public_room_name">Yleinen</string>
<string name="create_spaces_room_private_header">Minkä asioiden parissa työskentelette\?</string>
<string name="create_space_error_empty_field_space_name">Anna sille nimi jatkaaksesi.</string>
<string name="create_spaces_details_private_header">Lisää hieman tietoja, jotta ihmiset tunnistavat sen. Voit muuttaa näitä tietoja milloin tahansa.</string>
<string name="create_spaces_details_public_header">Lisää hieman tietoja, jotta se erottuu muista. Voit muuttaa näitä tietoja milloin tahansa.</string>
<string name="activity_create_space_title">Luo avaruus</string>
<string name="space_type_private">Yksityinen</string>
<string name="space_type_public_desc">Avoin kaikille, paras vaihtoehto yhteisöille</string>
<string name="space_type_public">Julkinen</string>
<string name="create_spaces_organise_rooms">Yksityinen avaruus huoneiden järjestämiseen</string>
<string name="create_spaces_just_me">Vain minä</string>
<string name="create_spaces_who_are_you_working_with">Kenen kanssa työskentelet\?</string>
<string name="create_spaces_join_info_help">Tarvitset kutsun liittyäksesi olemassa olevaan avaruuteen.</string>
<string name="create_spaces_you_can_change_later">Voit muuttaa tämän myöhemmin</string>
<string name="create_spaces_choose_type_label">Minkä tyyppisen avaruuden haluat luoda\?</string>
<string name="create_spaces_type_header">Avaruudet ovat uusi tapa ryhmitellä huoneita ja ihmisiä</string>
<string name="your_private_space">Yksityinen avaruutesi</string>
<string name="your_public_space">Julkinen avaruutesi</string>
<string name="add_space">Lisää avaruus</string>
<string name="private_space">Yksityinen avaruus</string>
<string name="public_space">Julkinen avaruus</string>
<string name="event_status_delete_all_failed_dialog_message">Haluatko poistaa kaikki lähettämättömät viestit tästä huoneesta\?</string>
<string name="event_status_delete_all_failed_dialog_title">Poista lähettämättömät viestit</string>
<string name="event_status_cancel_sending_dialog_message">Haluatko perua viestin lähettämisen\?</string>
<string name="event_status_a11y_delete_all">Poista kaikki epäonnistuneet viestit</string>
<string name="event_status_a11y_failed">Epäonnistui</string>
<string name="event_status_a11y_sent">Lähetetty</string>
<string name="event_status_a11y_sending">Lähetetään</string>
<string name="command_description_upgrade_room">Päivittää huoneen uuteen versioon</string>
<string name="command_description_create_space">Luo avaruus</string>
<string name="dev_tools_error_no_message_type">Viestin tyyppi puuttuu</string>
<string name="dev_tools_error_no_content">Ei sisältöä</string>
<string name="dev_tools_edit_content">Muokkaa sisältöä</string>
<string name="dev_tools_menu_name">Kehittäjätyökalut</string>
<string name="a11y_public_space">Julkinen avaruus</string>
<string name="a11y_public_room">Julkinen huone</string>
<string name="a11y_view_read_receipts">Näytä lukukuittaukset</string>
<string name="a11y_rule_notify_off">Älä ilmoita</string>
<string name="a11y_rule_notify_silent">Ilmoita ilman ääntä</string>
<string name="a11y_rule_notify_noisy">Ilmoita äänen kera</string>
<string name="a11y_error_message_not_sent">Viestiä ei lähetetty virheen vuoksi</string>
<string name="a11y_close_emoji_picker">Sulje emojivalitsin</string>
<string name="a11y_open_emoji_picker">Avaa emojivalitsin</string>
<string name="a11y_selected">Valittu</string>
<string name="a11y_video">Video</string>
<string name="a11y_error_some_message_not_sent">Joitain viestejä ei ole lähetetty</string>
<string name="a11y_image">Kuva</string>
<string name="a11y_import_key_from_file">Tuo avain tiedostosta</string>
<string name="a11y_screenshot">Kuvakaappaus</string>
<string name="authentication_error">Tunnistautuminen epäonnistui</string>
<string name="template_re_authentication_default_confirm_text">${app_name} vaatii tämän toimenpiteen suorittamiseksi, että annat kirjautumistietosi.</string>
<string name="re_authentication_activity_title">Tunnistautuminen uudelleen vaaditaan</string>
<string name="call_slide_to_end_conference">Liu\'uta lopettaaksesi puhelun</string>
<string name="call_transfer_unknown_person">Tuntematon henkilö</string>
<string name="call_transfer_users_tab_title">Käyttäjät</string>
<string name="call_tap_to_return">%1$s Napauta palataksesi</string>
<string name="call_one_active">Aktiivinen puhelu (%1$s) ·</string>
<plurals name="call_active_status">
<item quantity="one">Aktiivinen puhelu ·</item>
<item quantity="other">%1$d aktiivista puhelua ·</item>
</plurals>
<plurals name="call_one_active_and_other_paused">
<item quantity="one">1 aktiivinen puhelu (%1$s) · 1 keskeytetty puhelu</item>
<item quantity="other">1 aktiivinen puhelu (%1$s) · %2$d keskeytettyä puhelua</item>
</plurals>
<plurals name="call_only_paused">
<item quantity="one">Keskeytetty puhelu</item>
<item quantity="other">%1$d keskeytettyä puhelua</item>
</plurals>
<string name="call_only_active">Aktiivinen puhelu (%1$s)</string>
<string name="call_dial_pad_title">Numeronäppäimistö</string>
<string name="call_tile_connection_failed">Yhteys epäonnistui</string>
<string name="call_tile_no_answer">Ei vastausta</string>
<string name="call_tile_video_missed">Vastaamaton videopuhelu</string>
<string name="call_tile_voice_missed">Vastaamaton äänipuhelu</string>
<string name="call_tile_video_declined">Kieltäydytty videopuhelusta</string>
<string name="call_tile_voice_declined">Kieltäydytty äänipuhelusta</string>
<string name="call_tile_video_call_has_ended">Videopuhelu päättyi • %1$s</string>
<string name="call_tile_voice_call_has_ended">Äänipuhelu päättyi • %1$s</string>
<string name="call_tile_video_active">Aktiivinen videopuhelu</string>
<string name="call_tile_voice_active">Aktiivinen äänipuhelu</string>
<string name="call_tile_video_incoming">Saapuva videopuhelu</string>
<string name="call_tile_voice_incoming">Saapuva äänipuhelu</string>
<string name="call_tile_call_back">Soita takaisin</string>
<string name="call_tile_ended">Puhelu on päättynyt</string>
<string name="call_tile_other_declined">%1$s kieltäytyi tästä puhelusta</string>
<string name="call_tile_you_declined_this_call">Kieltäydyit tästä puhelusta</string>
<string name="call_tile_you_declined">Kieltäydyit puhelusta %s</string>
<string name="call_tile_in_call">Olet parhaillaan tässä puhelussa</string>
<string name="call_tile_other_started_call">%1$s aloitti puhelun</string>
<string name="call_tile_you_started_call">Aloitit puhelun</string>
<string name="warning_unsaved_change">Tallentamattomia muutoksia. Hylätäänkö muutokset\?</string>
<string name="warning_room_not_created_yet">Huonetta ei ole vielä luotu. Perutaanko huoneen luominen\?</string>
<string name="universal_link_malformed">Linkki oli muodostettu väärin</string>
<string name="room_error_not_found">Tätä huonetta ei löydy. Varmista että se on olemassa.</string>
<string name="auth_pin_confirm_to_disable_title">Vahvista PIN-koodi poistaaksesi PIN-koodin käytöstä</string>
<string name="settings_security_pin_code_change_pin_summary">Vaihda nykyinen PIN-koodisi</string>
<string name="settings_security_pin_code_change_pin_title">Vaihda PIN-koodi</string>
<string name="template_settings_security_pin_code_grace_period_summary_off">PIN-koodi vaaditaan joka kerta, kun avaat sovelluksen ${app_name}.</string>
<string name="template_settings_security_pin_code_grace_period_summary_on">PIN-koodi vaaditaan, kun sovellusta ${app_name} ei ole käytetty 2 minuuttiin.</string>
<string name="settings_security_pin_code_grace_period_title">Vaadi PIN-koodi 2 minuutin jälkeen</string>
<string name="settings_security_pin_code_notifications_summary_off">Näytä vain lukemattomien viestien määrä yksinkertaisessa ilmoituksessa.</string>
<string name="settings_security_pin_code_notifications_summary_on">Näytä tiedot kuten huoneiden nimet ja viestien sisältö.</string>
<string name="settings_security_pin_code_notifications_title">Näytä sisältö ilmoituksissa</string>
<string name="template_settings_security_pin_code_use_biometrics_summary_off">PIN-koodi on ainoa tapa avata sovelluksen ${app_name} lukitus.</string>
<string name="settings_security_pin_code_use_biometrics_title">Ota biometriikka käyttöön</string>
<string name="settings_security_pin_code_title">Ota PIN-koodi käyttöön</string>
<string name="settings_security_application_protection_summary">Suojaa pääsy käyttäen PIN-koodia ja biometriikkaa.</string>
<string name="settings_security_application_protection_title">Suojaa pääsy</string>
<string name="settings_security_application_protection_screen_title">Määritä suojaus</string>
<string name="auth_pin_new_pin_action">Uusi PIN-koodi</string>
<string name="auth_pin_reset_title">Nollaa PIN-koodi</string>
<string name="auth_pin_forgot">Unohditko PIN-koodisi\?</string>
<string name="auth_pin_title">Anna PIN-koodi</string>
<string name="create_pin_confirm_title">Vahvista PIN-koodi</string>
<string name="create_pin_title">Valitse PIN-koodi turvallisuuden parantamiseksi</string>
<string name="too_many_pin_failures">Liian monta virhettä, sinut on kirjattu ulos</string>
<string name="wrong_pin_message_last_remaining_attempt">Varoitus! Viimeinen yrityskerta ennen uloskirjaamista!</string>
<plurals name="entries">
<item quantity="one">%d tietue</item>
<item quantity="other">%d tietuetta</item>
</plurals>
<plurals name="wrong_pin_message_remaining_attempts">
<item quantity="one">Väärä koodi, %d yritys jäljellä</item>
<item quantity="other">Väärä koodi, %d yritystä jäljellä</item>
</plurals>
<string name="alert_push_are_disabled_description">Katselmoi asetukset ottaaksesi push-ilmoitukset käyttöön</string>
<string name="alert_push_are_disabled_title">Push-ilmoitukset ovat pois käytöstä</string>
<string name="phone_book_perform_lookup">Etsi yhteystietojasi Matrixista</string>
<string name="empty_phone_book">Puhelimen osoitekirja on tyhjä</string>
<string name="add_from_phone_book">Lisää puhelimen osoitekirjasta</string>
<string name="disclaimer_positive_button">LUE LISÄÄ</string>
<string name="disclaimer_negative_button">SELVÄ</string>
<string name="disclaimer_content">Olemme iloisia uuden nimen lanseerauksesta! Sovelluksesi on ajan tasalla ja olet kirjautunut tilillesi.</string>
<string name="disclaimer_title">Riot on nyt Element!</string>
<string name="crypto_utd">Salausta ei voi purkaa</string>
<string name="room_settings_save_success">Muutit huoneen asetuksia onnistuneesti</string>
<string name="a11y_start_camera">Käynnistä kamera</string>
<string name="a11y_stop_camera">Pysäytä kamera</string>
<string name="a11y_unmute_microphone">Poista mikrofonin mykistys</string>
<string name="a11y_mute_microphone">Mykistä mikrofoni</string>
<string name="identity_server_set_alternative_submit">Lähetä</string>
<string name="identity_server_set_alternative_notice_no_default">Anna identiteettipalvelimen URL-osoite</string>
<string name="identity_server_set_alternative_notice">Vaihtoehtoisesti voit kirjoittaa minkä tahansa muun identiteettipalvelimen URL-osoitteen</string>
<string name="identity_server_set_default_submit">Käytä %1$s</string>
<string name="identity_server_error_terms_not_signed">Hyväksy ensin identiteettipalvelimen ehdot asetusten kautta.</string>
<string name="identity_server_error_no_identity_server_configured">Määritä ensin identiteettipalvelin.</string>
<string name="identity_server_error_outdated_home_server">Tämä toiminto ei ole mahdollinen. Kotipalvelin on vanhentunut.</string>
<string name="template_identity_server_error_outdated_identity_server">Tämä identiteettipalvelin on vanhentunut. ${app_name} tukee vain API V2:ta.</string>
<string name="disconnect_identity_server_dialog_content">Katkaistaanko yhteys identiteettipalvelimeen %s\?</string>
<string name="choose_locale_loading_locales">Ladataan käytettävissä olevia kieliä…</string>
<string name="user_code_my_code">Oma koodi</string>
<string name="invite_users_to_room_failure">Käyttäjiä ei voitu kutsua. Tarkista käyttäjät, jotka haluat kutsua, ja yritä uudelleen.</string>
<string name="external_link_confirmation_message">Linkki %1$s vie sinut toiselle sivustolle: %2$s.
\n
\nHaluatko varmasti jatkaa\?</string>
<string name="error_empty_field_choose_password">Valitse salasana.</string>
<string name="error_empty_field_choose_user_name">Valitse käyttäjänimi.</string>
<string name="mark_as_verified">Merkitse luotetuksi</string>
<string name="cross_signing_verify_by_emoji">Vahvista vuorovaikutteisesti emojilla</string>
<string name="crosssigning_verify_session">Vahvista kirjautuminen</string>
<string name="verify_other_sessions">Vahvista kaikki istuntosi varmistaaksesi, että tilisi ja viestisi ovat turvassa</string>
<string name="review_logins">Katselmoi missä olet sisäänkirjautuneena</string>
<string name="encrypted_unverified">Salattu vahvistamattomalla laitteella</string>
<string name="unencrypted">Salaamaton</string>
<string name="use_recovery_key">Käytä palautusavainta</string>
<string name="command_description_discard_session_not_handled">Tuettu vain salatuissa huoneissa</string>
<string name="error_saving_media_file">Mediatiedostoa ei voitu tallentaa</string>
<string name="new_session_review_with_info">%1$s (%2$s)</string>
<string name="recovery_key_empty_error_message">Anna palautusavain</string>
<string name="bootstrap_invalid_recovery_key">Ei kelvollinen palautusavain</string>
<string name="use_file">Käytä tiedostoa</string>
<string name="upgrade_security">Salauksen päivitys saatavilla</string>
<string name="auth_invalid_login_deactivated_account">Tämä tili on deaktivoitu.</string>
<string name="auth_invalid_login_param_space_in_password">Virheellinen käyttäjänimi ja/tai salasana. Annettu salasana alkaa tai päättyy välilyönnillä, tarkista salasana.</string>
<string name="error_failed_to_import_keys">Avainten tuonti epäonnistui</string>
<string name="add_a_topic_link_text">Lisää aihe</string>
<string name="this_is_the_beginning_of_room_no_name">Tämä on keskustelun alku.</string>
<string name="room_created_summary_item_by_you">Loit ja määritit huoneen.</string>
<string name="room_created_summary_item">%s loi ja määritti huoneen.</string>
<string name="encryption_unknown_algorithm_tile_description">Tämän huoneen käyttämä salaus ei ole tuettu</string>
<string name="encryption_not_enabled">Salaus ei käytössä</string>
<string name="direct_room_encryption_enabled_tile_description">Viestit tässä huoneessa ovat päästä päähän -salattuja.</string>
<string name="encryption_enabled_tile_description">Viestit tässä huoneessa ovat päästä päähän -salattuja. Lue lisää ja vahvista käyttäjät heidän profiilissaan.</string>
<string name="encryption_enabled">Salaus käytössä</string>
<string name="send_images_and_video_with_original_size">Lähetä media alkuperäisessä koossa</string>
<plurals name="send_videos_with_original_size">
<item quantity="one">Lähetä video alkuperäisessä koossa</item>
<item quantity="other">Lähetä videot alkuperäisessä koossa</item>
</plurals>
<string name="no_connectivity_to_the_server_indicator_airplane">Lentokonetila on päällä</string>
<string name="settings_server_room_version_unstable">epävakaa</string>
<string name="settings_server_room_version_stable">vakaa</string>
<string name="settings_server_default_room_version">Oletusversio</string>
<string name="settings_server_room_versions">Huoneversiot 👓</string>
<string name="settings_server_upload_size_unknown">Raja ei ole tiedossa.</string>
<string name="settings_server_upload_size_content">Kotipalvelimesi hyväksyy liitteitä (tiedostoja, mediaa jne.) joiden koko on enintään %s.</string>
<string name="settings_server_upload_size_title">Palvelimen asettama tiedoston lähetysraja</string>
<string name="settings_server_version">Palvelimen versio</string>
<string name="settings_server_name">Palvelimen nimi</string>
<string name="room_settings_enable_encryption_no_permission">Sinulla ei ole oikeutta ottaa salausta käyttöön tässä huoneessa.</string>
<string name="direct_room_profile_encrypted_subtitle">Viestit täällä ovat päästä päähän -salattuja.
\n
\nViestisi turvataan lukolla ja vain sinä sekä vastaanottaja omaatte avaimet, joilla salauksen voi purkaa.</string>
<string name="direct_room_profile_not_encrypted_subtitle">Viestit täällä eivät ole päästä päähän -salattuja.</string>
<string name="verification_scan_with_this_device">Skannaa tällä laitteella</string>
<string name="sent_a_voice_message">Ääni</string>
<string name="create_space_in_progress">Luodaan avaruutta…</string>
<string name="create_room_alias_invalid">Jotkin merkit eivät ole sallittuja</string>
<string name="create_room_alias_empty">Anna huoneen osoite</string>
<string name="create_room_alias_already_in_use">Tämä osoite on jo käytössä</string>
<string name="create_space_alias_hint">Avaruuden osoite</string>
<string name="command_description_lenny">Lisää ( ͡° ͜ʖ ͡°) tavalliseen viestiin</string>
<string name="login_signin_matrix_id_password_notice">Jos et muista salasanaasi, palaa nollaamaan se.</string>
<string name="does_not_look_like_valid_email">Ei vaikuta kelvolliselta sähköpostiosoitteelta</string>
<string name="login_server_url_form_common_notice">Anna sen palvelimen osoite, jota haluat käyttää</string>
<string name="login_clear_homeserver_history">Tyhjennä historia</string>
<string name="direct_room_join_rules_invite">%1$s asetti huoneen pääsyvaatimukseksi kutsun.</string>
<string name="room_join_rules_invite_by_you">Asetit huoneen pääsyvaatimukseksi kutsun.</string>
<string name="room_join_rules_public_by_you">Teit huoneen julkiseksi kaikille, jotka tuntevat linkin.</string>
<string name="notice_member_no_changes_by_you">Et tehnyt muutoksia</string>
<string name="room_list_quick_actions_room_settings">Huoneen asetukset</string>
<string name="uploads_files_no_result">Tässä huoneessa ei ole tiedostoja</string>
<string name="uploads_media_no_result">Tässä huoneessa ei ole mediaa</string>
<string name="attachment_viewer_item_x_of_y">%1$d/%2$d</string>
<string name="rotate_and_crop_screen_title">Kierrä ja rajaa</string>
<string name="error_file_too_big_simple">Tiedosto on liian suuri lähetettäväksi.</string>
<string name="a11y_beta">Tämä ominaisuus on beetavaiheessa</string>
<string name="settings_text_message_sent_wrong_code">Vahvistuskoodi ei ole oikein.</string>
<string name="settings_discovery_consent_action_give_consent">Anna hyväksyntä</string>
<string name="settings_discovery_consent_action_revoke">Kumoa antamani hyväksyntä</string>
<string name="send_file_step_compressing_video">Pakataan videota %d%%</string>
<string name="send_file_step_compressing_image">Pakataan kuvaa…</string>
<string name="give_feedback">Anna palautetta</string>
<string name="feedback_failed">Palautteen lähetys epäonnistui (%s)</string>
<string name="feedback_sent">Kiitos, palautteesi on lähetetty onnistuneesti</string>
<string name="you_may_contact_me">Voitte olla yhteydessä minuun, jos teillä on lisäkysymyksiä</string>
<string name="feedback">Palaute</string>
<string name="send_feedback_space_title">Palaute avaruuksista</string>
<string name="room_preview_no_preview_join">Tätä huonetta ei voi esikatsella. Haluatko liittyä siihen\?</string>
<string name="create_new_space">Luo uusi avaruus</string>
<string name="recovery_key_export_saved">Palautusavain on tallennettu.</string>
<string name="command_description_whois">Näyttää tietoja käyttäjästä</string>
<string name="command_description_nick_for_room">Vaihtaa näyttönimesi vain nykyisessä huoneessa</string>
<string name="command_description_room_name">Asettaa huoneen nimen</string>
<string name="directory_add_a_new_server">Lisää uusi palvelin</string>
<plurals name="encryption_import_room_keys_success">
<item quantity="one">%1$d/%2$d avain tuotu onnistuneesti.</item>
<item quantity="other">%1$d/%2$d avainta tuotu onnistuneesti.</item>
</plurals>
<string name="encryption_exported_successfully">Avaimet viety onnistuneesti</string>
<string name="room_settings_room_version_title">Huoneen versio</string>
<string name="decide_who_can_find_and_join">Päätä kuka voi löytää huoneen ja liittyä siihen.</string>
<string name="tap_to_edit_spaces">Napauta muokataksesi avaruuksia</string>
<string name="select_spaces">Valitse avaruudet</string>
<string name="room_create_member_of_space_name_can_join">Avaruuden %s jäsenet voivat löytää, esikatsella ja liittyä.</string>
<string name="room_settings_room_access_restricted_title">Vain avaruuden jäsenet</string>
<string name="room_settings_space_access_public_description">Kuka tahansa voi löytää ja liittyä avaruuteen</string>
<string name="room_settings_room_access_public_description">Kuka tahansa voi löytää ja liittyä huoneeseen</string>
<string name="room_settings_room_access_public_title">Julkinen</string>
<string name="room_settings_room_access_private_description">Vain kutsutut henkilöt voivat löytää ja liittyä</string>
<string name="room_settings_room_access_private_invite_only_title">Yksityinen (vain kutsulla)</string>
<string name="room_settings_room_access_private_title">Yksityinen</string>
<string name="room_alias_action_publish">Julkaise tämä osoite</string>
<string name="room_alias_local_address_add">Lisää paikallinen osoite</string>
<string name="room_alias_delete_confirmation">Poistetaanko osoite \"%1$s\"\?</string>
<string name="room_alias_published_alias_add_manually_submit">Julkaise</string>
<string name="room_alias_published_other">Muut julkaistut osoitteet:</string>
<string name="room_settings_guest_access_title">Salli vieraiden liittyä</string>
<string name="room_settings_space_access_title">Avaruuden pääsy</string>
<string name="room_settings_room_access_title">Huoneen pääsy</string>
<string name="room_settings_access_rules_pref_dialog_title">Kenellä on pääsy\?</string>
<string name="room_settings_room_notifications_account_settings">Tilin asetukset</string>
<string name="settings_show_emoji_keyboard_summary">Lisää painike viestin lähetysikkunaan emoji-näppäimistön avaamiseksi</string>
<string name="settings_room_invitations">Huonekutsut</string>
<string name="settings_messages_containing_keywords">Avainsanat</string>
<string name="settings_encrypted_group_messages">Salatut ryhmäviestit</string>
<string name="settings_group_messages">Ryhmäviestit</string>
<string name="settings_encrypted_direct_messages">Salatut suoraviestit</string>
<string name="settings_messages_direct_messages">Suoraviestit</string>
<string name="settings_messages_containing_username">Käyttäjänimeni</string>
<string name="settings_messages_containing_display_name">Näyttönimeni</string>
<string name="settings_troubleshoot_test_notification_notification_clicked">Ilmoitusta on napsautettu!</string>
<string name="settings_notification_keyword_contains_invalid_character">Avainsanat eivät voi sisältää \'%s\'</string>
<string name="settings_notification_keyword_contains_dot">Avainsanat eivät voi alkaa merkillä \'.\'</string>
<string name="settings_notification_new_keyword">Lisää uusi avainsana</string>
<string name="settings_notification_your_keywords">Avainsanoistani</string>
<string name="settings_notification_notify_me_for">Ilmoita minulle</string>
<string name="settings_notification_other">Muu</string>
<string name="settings_notification_mentions_and_keywords">Maininnat ja avainsanat</string>
<string name="settings_notification_default">Oletusilmoitukset</string>
<string name="settings_notification_emails_enable_for_email">Lähetä sähköposti-ilmoituksia osoitteeseen %s</string>
<string name="settings_notification_emails_no_emails">Jotta voit vastaanottaa sähköposti-ilmoituksia, sido sähköpostiosoite Matrix-tiliisi</string>
<string name="settings_notification_emails_category">Sähköposti-ilmoitus</string>
<string name="settings_remove_three_pid_confirmation_content">Poistetaanko %s\?</string>
<string name="room_settings_none">Ei mitään</string>
<string name="room_settings_mention_and_keyword_only">Vain maininnat ja avainsanat</string>
<string name="search_is_not_supported_in_e2e_room">Hakeminen salatuista huoneista ei ole vielä tuettu.</string>
<string name="room_permissions_change_space_name">Vaihda avaruuden nimeä</string>
<string name="room_permissions_enable_space_encryption">Ota avaruuden salaus käyttöön</string>
<string name="space_settings_permissions_title">Avaruuden käyttöoikeudet</string>
<string name="continue_anyway">Jatka silti</string>
<string name="call_remove_jitsi_widget_progress">Lopetetaan puhelu…</string>
<string name="call_ended_invite_timeout_title">Ei vastausta</string>
<string name="call_ended_user_busy_description">Käyttäjä, jolle soitit, on varattu.</string>
<string name="call_ended_user_busy_title">Käyttäjä on varattu</string>
<string name="call_held_by_you">Laitoit puhelun pitoon</string>
<string name="call_held_by_user">%s laittoi puhelun pitoon</string>
<string name="call_hold_action">Pitoon</string>
<string name="call_resume_action">Palaa</string>
<string name="audio_call_with_participant">Äänipuhelu henkilön %s kanssa</string>
<string name="video_call_with_participant">Videopuhelu henkilön %s kanssa</string>
<plurals name="missed_video_call">
<item quantity="one">Vastaamatta jäänyt videopuhelu</item>
<item quantity="other">%d vastaamatta jäänyttä videopuhelua</item>
</plurals>
<plurals name="missed_audio_call">
<item quantity="one">Vastaamatta jäänyt puhelu</item>
<item quantity="other">%d vastaamatta jäänyttä puhelua</item>
</plurals>
<string name="call_ringing">Puhelu soi…</string>
<string name="login_error_ssl_peer_unverified">SSL-virhe: vertaisen identiteettiä ei ole vahvistettu.</string>
<string name="auth_msisdn_already_defined">Tämä puhelinnumero on jo käytössä.</string>
<string name="use_as_default_and_do_not_ask_again">Käytä oletuksena, älä kysy uudelleen</string>
<string name="option_always_ask">Kysy aina</string>
<string name="hs_client_url">Kotipalvelimen rajapinnan URL-osoite</string>
<string name="spaces_header">Avaruudet</string>
<string name="spaces_invited_header">Kutsut</string>
<string name="settings_category_room_directory">Huonehakemisto</string>
<string name="suggested_header">Ehdotetut huoneet</string>
<string name="dialog_edit_hint">Uusi arvo</string>
<string name="missing_permissions_title">Puuttuvat oikeudet</string>
<string name="spaces">Avaruudet</string>
<string name="learn_more">Lue lisää</string>
</resources>

View file

@ -984,7 +984,7 @@
<string name="command_description_op_user">Définit le rang dun utilisateur</string>
<string name="command_description_deop_user">Rétrograde lutilisateur avec lidentifiant fourni</string>
<string name="command_description_invite_user">Invite lutilisateur avec lidentifiant fourni dans le salon actuel</string>
<string name="command_description_join_room">Rejoint le salon avec lalias fourni</string>
<string name="command_description_join_room">Rejoint le salon avec ladresse fournie</string>
<string name="command_description_part_room">Quitte le salon</string>
<string name="command_description_topic">Définit le sujet du salon</string>
<string name="command_description_kick_user">Expulse lutilisateur avec lidentifiant fourni</string>
@ -2776,7 +2776,7 @@
<item quantity="one">Envoyer la vidéo en taille originale</item>
<item quantity="other">Envoyer les vidéos en taille originale</item>
</plurals>
<string name="space_leave_prompt_msg_as_admin">Vous êtes administrateur de cet espace, assurez-vous davoir transféré les droits dadministration à un autre membre avant de partir.</string>
<string name="space_leave_prompt_msg_as_admin">Vous êtes le seul administrateur de cet espace. En le quittant, plus personne naura le contrôle dessus.</string>
<string name="send_feedback_space_info">Vous utilisez une version bêta des espaces. Vos remarques aideront à concevoir les prochaines versions. Votre plateforme et votre nom dutilisateur seront marqués pour nous aider à utiliser vos remarques autant que possible.</string>
<string name="this_space_has_no_rooms_admin">Il se peut que certains salons soient masqués parce quils sont privés et vous avez besoin dune invitation.</string>
<string name="this_space_has_no_rooms_not_admin">Il se peut que certains salons soient masqués parce quils sont privés et vous avez besoin dune invitation.
@ -2787,7 +2787,7 @@
<string name="spaces_feeling_experimental_subspace">Envie dexpérimenter \?
\nVous pouvez ajouter des espaces existants à un espace.</string>
<string name="space_add_rooms">Ajouter des salons</string>
<string name="space_leave_prompt_msg_private">Cet espace nest pas public. Vous ne pourrez pas le rejoindre sans invitation.</string>
<string name="space_leave_prompt_msg_private">Il vous sera impossible de revenir à moins dy être réinvité.</string>
<string name="space_leave_prompt_msg_only_you">Vous êtes la seule personne ici. Si vous partez, personne ne pourra entrer à lavenir, même pas vous.</string>
<string name="invite_to_space">Inviter à %s</string>
<string name="a11y_beta">Cette fonctionnalité est en bêta</string>
@ -2863,13 +2863,13 @@
<string name="voice_message_tap_to_stop_toast">Touchez lenregistrement pour larrêter ou lécouter</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds restant</string>
<string name="voice_message_release_to_send_toast">Maintenir pour enregistrer, relâcher pour envoyer</string>
<string name="a11y_delete_recorded_voice_message">Supprimer lenregistrement du message vocal</string>
<string name="a11y_delete_recorded_voice_message">Supprimer lenregistrement</string>
<string name="a11y_recording_voice_message">Enregistrement du message vocal</string>
<string name="a11y_pause_voice_message">Mettre en pause le message vocal</string>
<string name="a11y_play_voice_message">Lire le message vocal</string>
<string name="a11y_lock_voice_message">Verrou de message vocal</string>
<string name="voice_message_slide_to_cancel">Glisser pour annuler</string>
<string name="a11y_start_voice_message">Démarrer un message vocal</string>
<string name="a11y_start_voice_message">Enregistrer un message vocal</string>
<string name="allow_anyone_in_room_to_access">Autoriser quiconque dans %s à trouver et venir. Vous pouvez également sélectionner dautres espaces.</string>
<string name="upgrade_required">Mise-à-jour nécessaire</string>
<string name="sent_a_voice_message">Vocal</string>
@ -2951,4 +2951,65 @@
<string name="call_ringing">Appel en cours…</string>
<string name="spaces">Espaces</string>
<string name="learn_more">En savoir plus</string>
<string name="a11y_stop_voice_message">Arrêter lenregistrement</string>
<string name="space_add_space_to_any_space_you_manage">Ajouter un espace à un espace que vous gérez.</string>
<string name="space_add_existing_spaces">Ajouter des espaces existants</string>
<string name="space_add_existing_rooms_only">Ajouter des salons existants</string>
<string name="pick_tings_to_leave">Choisissez les endroits à quitter</string>
<string name="leave_specific_ones">Quitter certains salons et espaces…</string>
<string name="dont_leave_any">Ne quitter aucun salon ni espace</string>
<string name="you_will_leave_all_in">Vous allez quitter tous les salons et espaces de %s.</string>
<string name="leave_all_rooms_and_spaces">Quitter tous les salons et espaces</string>
<string name="space_leave_prompt_msg_with_name">Voulez-vous vraiment quitter %s \?</string>
<string name="discovery_section">Découverte (%s)</string>
<string name="finish_setup">Terminer le réglage</string>
<string name="discovery_invite">Inviter par courriel, trouver des contacts et plus…</string>
<string name="finish_setting_up_discovery">Terminer le réglage de la découverte.</string>
<string name="create_space_identity_server_info_none">Vous nutilisez actuellement pas de serveur didentité. Pour inviter des proches et quils puissent vous trouver, configurez-en un ci-dessous.</string>
<string name="create_spaces_invite_public_header">Qui sont vos proches \?</string>
<string name="invite_by_mxid_or_mail">Inviter par nom dutilisateur ou courriel</string>
<string name="create_spaces_invite_public_header_desc">Assurez-vous que laccès à la société %s est accordé aux bonnes personnes. Vous pourrez en inviter dautres plus tard.</string>
<string name="command_description_add_to_space">Ajouter à lespace mentionné</string>
<string name="create_space_in_progress">Création de lespace…</string>
<string name="command_description_lenny">Ajoute ( ͡° ͜ʖ ͡°) devant un message en texte brut</string>
<string name="settings_developer_mode_show_info_on_screen_summary">Affiche des informations nécessaire au débogage de lapplication</string>
<string name="settings_developer_mode_show_info_on_screen_title">Afficher les informations de débogage à lécran</string>
<string name="does_not_look_like_valid_email">Ceci ne ressemble pas à une adresse de courriel valide</string>
<string name="identity_server_consent_dialog_neutral_policy">Politique</string>
<string name="settings_discovery_no_policy_provided">Aucune politique fournie par le serveur didentité</string>
<string name="settings_discovery_hide_identity_server_policy_title">Cacher la politique du serveur didentité</string>
<string name="settings_discovery_show_identity_server_policy_title">Afficher la politique du serveur didentité</string>
<string name="open_discovery_settings">Ouvrir les réglages de découverte</string>
<string name="user_directory_search_hint_2">Rechercher par nom, identifiant ou courriel</string>
<string name="create_new_space">Créer un nouvel espace</string>
<string name="command_description_whois">Affiche des informations à propos de lutilisateur</string>
<string name="command_description_avatar_for_room">Change votre avatar seulement dans le salon actuel</string>
<string name="command_description_room_avatar">Change lavatar du salon actuel</string>
<string name="command_description_nick_for_room">Change votre nom daffichage seulement dans le salon actuel</string>
<string name="command_description_room_name">Définit le nom du salon</string>
<string name="command_description_unignore_user">Arrêter dignorer un utilisateur, en affichant ses messages à partir de maintenant</string>
<string name="command_description_ignore_user">Ignore un utilisateur, en masquant ses messages</string>
<string name="room_settings_space_access_public_description">Tout le monde peut trouver cet espace et le rejoindre</string>
<string name="room_settings_space_access_title">Accès à lespace</string>
<string name="room_settings_access_rules_pref_dialog_title">Qui peut accéder \?</string>
<string name="settings_notification_emails_enable_for_email">Activer les notifications par courriel pour %s</string>
<string name="settings_notification_emails_no_emails">Pour recevoir des courriels de notification, veuillez associer une adresse de courriel à votre compte Matrix</string>
<string name="settings_notification_emails_category">Notification par courriel</string>
<string name="room_permissions_upgrade_the_space">Mettre-à-jour lespace</string>
<string name="room_permissions_change_space_name">Changer le nom de lespace</string>
<string name="room_permissions_enable_space_encryption">Activer le chiffrement de lespace</string>
<string name="room_permissions_change_main_address_for_the_space">Changer ladresse principale de lespace</string>
<string name="room_permissions_change_space_avatar">Changer lavatar de lespace</string>
<string name="space_permissions_notice_read_only">Vous navez pas la permission de changer les rôles requis pour changer différentes parties de cet espace</string>
<string name="space_permissions_notice">Sélectionner les rôles nécessaires pour modifier les différentes parties de cet espace</string>
<string name="space_settings_permissions_subtitle">Voir et mettre-à-jour les rôles requis pour changer différentes parties de lespace.</string>
<string name="space_settings_permissions_title">Permissions de lespace</string>
<string name="space_participants_unban_prompt_msg">Annuler lexclusion des utilisateurs leur permettra de revenir dans cet espace.</string>
<string name="space_participants_ban_prompt_msg">Lexclusion des utilisateurs va les expulser de cet espace et les empêcher de revenir.</string>
<string name="space_participants_kick_prompt_msg">Lexpulsion des utilisateurs va les supprimer de cet espace
\n
\nPour les empêcher de revenir, vous devriez les exclure.</string>
<string name="a11y_presence_unavailable">Indisponible</string>
<string name="a11y_presence_offline">Hors ligne</string>
<string name="a11y_presence_online">En ligne</string>
</resources>

View file

@ -942,7 +942,7 @@ Matrixban az üzenetek láthatósága hasonlít az e-mailre. Az üzenet törlés
<string name="command_description_op_user">Felhasználó hozzáférési szintjének meghatározása</string>
<string name="command_description_deop_user">Meghatározott azonosítójú felhasználó hozzáférési szintjének visszaállítása</string>
<string name="command_description_invite_user">Megadott azonosítójú felhasználó meghívása a szobába</string>
<string name="command_description_join_room">Megadott becenévvel csatlakozik a szobához</string>
<string name="command_description_join_room">Megadott címmel csatlakozik a szobához</string>
<string name="command_description_part_room">Kilépés a szobából</string>
<string name="command_description_topic">A szoba témájának beállítása</string>
<string name="command_description_kick_user">Megadott azonosítójú felhasználó kirúgása</string>
@ -3007,4 +3007,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró
<string name="command_description_room_name">Szobanév beállítása</string>
<string name="command_description_unignore_user">A felhasználó újbóli figyelembe vétele, és az üzenetei megjelenítése a jövőben</string>
<string name="command_description_ignore_user">Figyelmen kívül hagy egy felhasználót, elrejtve előled az üzeneteit</string>
<string name="a11y_presence_unavailable">Elérhetetlen</string>
<string name="a11y_presence_offline">Kapcsolat nélkül</string>
<string name="a11y_presence_online">Kapcsolódva</string>
</resources>

View file

@ -89,7 +89,7 @@
<string name="send_bug_report">Laporan bug</string>
<string name="send_bug_report_app_crashed">Aplikasi gagal saat terakhir digunakan. Apakah Anda ingin membuka halaman laporan kegagalan\?</string>
<string name="join_room">Gabung di Ruangan</string>
<string name="identity_url">URL Server Identitas</string>
<string name="identity_url">URL server identitas</string>
<string name="start_voice_call">Mulai Panggilan Suara</string>
<string name="auth_login">Masuk</string>
<string name="auth_register">Buat Akun</string>
@ -135,7 +135,7 @@
<string name="reject">Tolak</string>
<string name="later">Nanti</string>
<string name="send_anyway">Kirim Saja</string>
<string name="template_no_contact_access_placeholder">${app_name} belum diijinkan untuk mengakses kontak lokal</string>
<string name="template_no_contact_access_placeholder">${app_name} belum diizinkan untuk mengakses kontak lokal</string>
<string name="send_bug_report_include_crash_logs">Kirim log gangguan</string>
<string name="huge">Raksasa</string>
<string name="small">Kecil</string>
@ -157,8 +157,8 @@
\nBergabung sebagai %1$s atau %2$s</string>
<string name="ongoing_conference_call_voice">suara</string>
<string name="ongoing_conference_call_video">video</string>
<string name="missing_permissions_warning">Beberapa fitur tidak dapat digunakan karena aplikasi belum mendapat ijin…</string>
<string name="missing_permissions_to_start_conf_call">Anda membutuhkan ijin mengundang untuk memulai panggilan massal di ruang ini</string>
<string name="missing_permissions_warning">Beberapa fitur tidak dapat digunakan karena aplikasi belum mendapat izin…</string>
<string name="missing_permissions_to_start_conf_call">Anda membutuhkan izin mengundang untuk memulai panggilan massal di ruang ini</string>
<string name="room_no_conference_call_in_encrypted_rooms">Panggilan massal tidak dapat diselenggarakan di ruang terenkripsi</string>
<string name="action_historical">Jejak Percakapan</string>
<string name="copied_to_clipboard">Gandakan ke clipboard</string>
@ -215,7 +215,7 @@
<string name="incoming_voice_call">Panggilan Suara Masuk</string>
<string name="call_in_progress">Panggilan Sedang Berlangsung…</string>
<string name="call_error_ice_failed">Hubungan Media Gagal</string>
<string name="auth_identity_server">Server Identitas:</string>
<string name="auth_identity_server">Server identitas:</string>
<string name="call_error_camera_init_failed">Tidak dapat memulai kamera</string>
<string name="call_error_answered_elsewhere">panggilan terjawab di tempat lain</string>
<string name="media_picker_both_capture_title">Ambil gambar atau video</string>
@ -375,7 +375,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan
<string name="room_resend_unsent_messages">Kirim ulang pesan yang belum terkirim</string>
<string name="room_delete_unsent_messages">Hapus pesan yang belum terkirim</string>
<string name="room_message_file_not_found">Berkas tidak ditemukan</string>
<string name="room_do_not_have_permission_to_post">Anda tidak mempunyai ijin untuk mengirim di ruang ini.</string>
<string name="room_do_not_have_permission_to_post">Anda tidak mempunyai izin untuk mengirim di ruang ini.</string>
<plurals name="room_new_messages_notification">
<item quantity="other">%d pesan baru</item>
</plurals>
@ -437,7 +437,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan
<string name="room_settings_mention_only">Hanya sebutan</string>
<string name="room_settings_mute">Diamkan</string>
<string name="room_settings_favourite">Favorit</string>
<string name="room_settings_de_prioritize">Menurunkan prioritas</string>
<string name="room_settings_de_prioritize">Turunkan prioritas</string>
<string name="room_settings_direct_chat">Percakapan Langsung</string>
<string name="room_settings_leave_conversation">Tinggalkan Percakapan</string>
<string name="room_settings_forget">Lupakan</string>
@ -448,7 +448,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan
<string name="room_sliding_menu_term_and_conditions">Syarat &amp; ketentuan</string>
<string name="room_sliding_menu_third_party_notices">Pemberitahuan pihak ketiga</string>
<string name="room_sliding_menu_copyright">Hak Cipta</string>
<string name="room_sliding_menu_privacy_policy">Kebijakan Pribadi</string>
<string name="room_sliding_menu_privacy_policy">Kebijakan privasi</string>
<string name="settings_profile_picture">Gambar Profil</string>
<string name="settings_display_name">Nama Layar</string>
<string name="settings_email_address">Email</string>
@ -525,7 +525,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan
<string name="command_description_unban_user">Cabut larangan pengguna dengan id berikut</string>
<string name="command_description_op_user">Tentukan tingkat kuasa seorang pengguna</string>
<string name="command_description_invite_user">Undang pengguna dengan id berikut bergabung ke ruang ini</string>
<string name="command_description_join_room">Gabung ke ruang dengan alias berikut</string>
<string name="command_description_join_room">Gabung ke ruangan dengan alamat berikut</string>
<string name="command_description_part_room">Tinggalkan ruang</string>
<string name="command_description_topic">Tentukan topik ruang</string>
<string name="command_description_kick_user">Keluarkan pengguna dengan id berikut</string>
@ -565,7 +565,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan
<string name="dialog_user_consent_content">Untuk terus menggunakan homeserver %1$s Anda harus membaca dan menyetujui syarat dan ketentuan.</string>
<string name="avatar">Avatar</string>
<string name="dialog_user_consent_submit">Baca sekarang</string>
<string name="deactivate_account_title">Deaktivasi Akun</string>
<string name="deactivate_account_title">Nonaktifkan Akun</string>
<string name="deactivate_account_content">Ini akan mengakibatkan akun Anda tidak dapat digunakan secara permanen. Anda tidak akan dapat masuk dan orang lain tidak dapat mendaftar ulang dengan ID pengguna yang sama. Ini akan mengakibatkan akun Anda keluar dari semua ruang tempat Anda berpartisipasi serta menghapus semua detail akun dari server identitas Anda. <b>Tindakan ini tidak dapat diubah</b>.
\n
\nMenonaktifkan akun Anda <b>tidak membuat kami melupakan pesan-pesan yang Anda kirim secara default</b>. Jika Anda ingin kami melupakan pesan-pesan Anda, mohon centang kotak berikut.
@ -573,7 +573,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan
\nKeterbacaan pesan di Matrix serupa dengan email. Dengan kami melupakan pesan-pesan Anda berarti pesan-pesan yang Anda kirim tidak akan dibagikan kepada pengguna baru ataupun yang belum terdaftar, tetapi pengguna yang terdaftar yang mempunyai mengakses pesan-pesan tersebut masih bisa mengakses salinan mereka.</string>
<string name="deactivate_account_delete_checkbox">Mohon lupakan semua pesan yang telah saya kirim ketika akun saya dideaktivasi (Peringatan: ini akan mengakibatkan pengguna di masa depan melihat percakapan yang tidak lengkap)</string>
<string name="deactivate_account_prompt_password">Untuk melanjutkan, masukkan kata sandi Anda:</string>
<string name="deactivate_account_submit">Deaktivasi Akun</string>
<string name="deactivate_account_submit">Nonaktifkan Akun</string>
<string name="error_empty_field_your_password">Mohon masukkan kata sandi Anda.</string>
<string name="room_tombstone_versioned_description">Ruangan ini telah berubah dan tidak lagi aktif.</string>
<string name="room_tombstone_continuation_link">Percakapan berlanjut di sini</string>
@ -643,7 +643,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="room_settings_category_advanced_title">Lanjutan</string>
<string name="room_settings_room_internal_id">ID internal ruang ini</string>
<string name="room_settings_addresses_pref_title">Alamat</string>
<string name="room_settings_labs_pref_title">Lab</string>
<string name="room_settings_labs_pref_title">Uji Coba</string>
<string name="room_settings_labs_warning_message">Ini adalah fitur uji coba dan mungkin rusak tanpa terduga. Hati-hati menggunakannya.</string>
<string name="room_settings_labs_end_to_end">Enkripsi Ujung-ke-Ujung</string>
<string name="room_settings_labs_end_to_end_is_active">Enkripsi Ujung-ke-Ujung aktif</string>
@ -698,13 +698,13 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="notification_listening_for_events">Mendengarkan peristiwa</string>
<string name="settings_third_party_notices">Pemberitahuan pihak ketiga</string>
<string name="settings_copyright">Hak Cipta</string>
<string name="settings_privacy_policy">Kebijakan Pribadi</string>
<string name="settings_privacy_policy">Kebijakan privasi</string>
<string name="settings_clear_cache">Bersihkan cache</string>
<string name="settings_clear_media_cache">Bersihkan cache media</string>
<string name="settings_keep_media">Pertahankan media</string>
<string name="settings_user_settings">Pengaturan pengguna</string>
<string name="settings_user_settings">Pengaturan Pengguna</string>
<string name="settings_notifications">Pemberitahuan</string>
<string name="settings_ignored_users">Pengguna yang diabaikan</string>
<string name="settings_ignored_users">Pengguna yang Diabaikan</string>
<string name="settings_other">Lainnya</string>
<string name="settings_advanced">Lanjutan</string>
<string name="settings_cryptography">Kriptografi</string>
@ -721,16 +721,16 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="settings_12_24_timestamps">Tampilkan waktu kirim dalam format 12 jam</string>
<string name="settings_vibrate_on_mention">Bergetar ketika menyebut seorang pengguna</string>
<string name="settings_preview_media_before_sending">Pratinjau media sebelum dikirim</string>
<string name="settings_deactivate_account_section">Deaktivasi akun</string>
<string name="settings_deactivate_my_account">Deaktivasi akunku</string>
<string name="settings_deactivate_account_section">Nonaktifkan akun</string>
<string name="settings_deactivate_my_account">Nonaktifkan akun saya</string>
<string name="startup_notification_privacy_title">Kerahasiaan Notifikasi</string>
<string name="template_startup_notification_privacy_message">${app_name} dapat beroperasi di balik layar untuk mengurus pemberitahuan Anda dengan aman dan rahasia. Ini dapat mempengaruhi masa tahan baterai.</string>
<string name="startup_notification_privacy_button_grant">Kabulkan permisi</string>
<string name="startup_notification_privacy_button_grant">Beri izin</string>
<string name="startup_notification_privacy_button_other">Pilih opsi lain</string>
<string name="settings_analytics">Analitik</string>
<string name="settings_opt_in_of_analytics">Kirim data analitik</string>
<string name="template_settings_opt_in_of_analytics_summary">${app_name} mengumpulkan data analitik anonim dalam upaya kami meningkatkan aplikasi.</string>
<string name="template_settings_opt_in_of_analytics_prompt">Mohon aktifkan analitik untuk membantu kami meningkatkan ${app_name}.</string>
<string name="template_settings_opt_in_of_analytics_prompt">Silakan aktifkan analitik untuk membantu kami meningkatkan ${app_name}.</string>
<string name="settings_opt_in_of_analytics_ok">Ya, saya ingin membantu!</string>
<string name="settings_data_save_mode">Mode hemat data</string>
<string name="devices_details_dialog_title">Rincian perangkat</string>
@ -743,10 +743,10 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
\nUntuk melanjutkan operasi ini, mohon masukkan kata sandi anda.</string>
<string name="devices_delete_dialog_title">Otentikasi</string>
<string name="devices_delete_pswd">Kata Sandi:</string>
<string name="devices_delete_submit_button_label">Serahkan</string>
<string name="devices_delete_submit_button_label">Kirim</string>
<string name="settings_logged_in">Masuk sebagai</string>
<string name="settings_home_server">Homeserver</string>
<string name="settings_identity_server">Server Identitas</string>
<string name="settings_identity_server">Server identitas</string>
<string name="settings_user_interface">Antarmuka pengguna</string>
<string name="settings_interface_language">Bahasa</string>
<string name="settings_select_language">Pilih bahasa</string>
@ -797,7 +797,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="dialog_title_error">Error</string>
<string name="auth_accept_policies">Mohon telaah dan terima kebijakan homeserver ini:</string>
<string name="settings_call_category">Panggilan</string>
<string name="template_settings_call_ringtone_use_app_ringtone">Gunakan nada dering semula ${app_name} untuk panggilan masuk</string>
<string name="template_settings_call_ringtone_use_app_ringtone">Gunakan nada dering bawaan ${app_name} untuk panggilan masuk</string>
<string name="settings_call_ringtone_title">Nada dering panggilan masuk</string>
<string name="settings_call_ringtone_dialog_title">Pilih nada dering untuk panggilan:</string>
<string name="video_call_in_progress">Panggilan Video Sedang Berlangsung…</string>
@ -902,16 +902,16 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="settings_send_typing_notifs">Kirim pemberitahuan mengetik</string>
<string name="settings_send_typing_notifs_summary">Beritahu pengguna lain bahwa Anda sedang mengetik.</string>
<string name="settings_send_markdown">Format markdown</string>
<string name="settings_send_markdown_summary">Format pesan menggunakan sintaks markdown sebelum dikirim. Ini mengijinkan format lanjutan seperti menggunakan tanda bintang untuk menunjukkan teks miring.</string>
<string name="settings_send_markdown_summary">Format pesan menggunakan sintaks markdown sebelum dikirim. Ini mengizinkan format lanjutan seperti menggunakan tanda bintang untuk menunjukkan teks miring.</string>
<string name="settings_show_read_receipts">Tunjukkan tanda telah dibaca</string>
<string name="settings_show_read_receipts_summary">Klik tanda telah dibaca untuk daftar yang lebih rinci.</string>
<string name="settings_show_join_leave_messages">Tunjukkan kejadian bergabung dan meninggalkan</string>
<string name="settings_show_join_leave_messages_summary">Undangan, pengeluaran, dan larangan tidak terpengaruh.</string>
<string name="settings_show_avatar_display_name_changes_messages">Tunjukkan kejadian akun</string>
<string name="notice_room_server_acl_set_allowed">• Server-server yang cocok dengan %s diizinkan.</string>
<string name="notice_room_server_acl_set_banned">• Server-server yang cocok dengan %s dilarangkan.</string>
<string name="notice_room_server_acl_set_title_by_you">Anda mengatur server ACL untuk ruangan ini.</string>
<string name="notice_room_server_acl_set_title">%s mengatur server ACL untuk ruangan ini.</string>
<string name="notice_room_server_acl_set_allowed">• Server yang cocok dengan %s diizinkan.</string>
<string name="notice_room_server_acl_set_banned">• Server yang cocok dengan %s dilarangkan.</string>
<string name="notice_room_server_acl_set_title_by_you">Anda mengatur ACL server untuk ruangan ini.</string>
<string name="notice_room_server_acl_set_title">%s mengatur ACL server untuk ruangan ini.</string>
<string name="notice_direct_room_update_by_you">Anda meningkatkan di sini.</string>
<string name="notice_direct_room_update">%s meningkatkan di sini.</string>
<string name="notice_room_update_by_you">Anda meningkatkan ruangan ini.</string>
@ -919,69 +919,69 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="notice_end_to_end_by_you">Anda mengaktifkan enkripsi ujung-ke-ujung (%1$s)</string>
<string name="notice_end_to_end">%1$s mengaktifkan enkripsi ujung-ke-ujung (%2$s)</string>
<string name="notice_room_visibility_unknown">tidak diketahui (%s).</string>
<string name="notice_room_visibility_world_readable">siapa pun.</string>
<string name="notice_room_visibility_world_readable">siapa saja.</string>
<string name="notice_room_visibility_shared">semua anggota ruangan.</string>
<string name="notice_room_visibility_joined">semua anggota ruangan, dari kapan mereka bergabung.</string>
<string name="notice_room_visibility_invited">semua anggota ruangan, dari kapan mereka diundang.</string>
<string name="notice_room_visibility_joined">semua anggota ruangan, sejak mereka bergabung.</string>
<string name="notice_room_visibility_invited">semua anggota ruangan, sejak mereka diundang.</string>
<string name="notice_made_future_direct_room_visibility_by_you">Anda membuat riwayat pesanan masa depan terlihat dengan %1$s</string>
<string name="notice_made_future_direct_room_visibility">%1$s membuat riwayat pesanan masa depan terlihat dengan %2$s</string>
<string name="notice_made_future_room_visibility_by_you">Anda membuat riwayat ruangan masa depan terlihat dengan %1$s</string>
<string name="notice_made_future_room_visibility">%1$s membuat riwayat ruangan masa depan terlihat dengan %2$s</string>
<string name="notice_ended_call_by_you">Anda mengakhiri panggilan.</string>
<string name="notice_ended_call">%s mengakhiri panggilan.</string>
<string name="notice_ended_call_by_you">Anda mengakhiri panggilan ini.</string>
<string name="notice_ended_call">%s mengakhiri panggilan ini.</string>
<string name="notice_call_candidates">%s mengirimkan data untuk mengatur panggilan.</string>
<string name="notice_call_candidates_by_you">Anda mengirimkan data untuk mengatur panggilan.</string>
<string name="notice_answered_call">%s menjawab panggilan.</string>
<string name="notice_answered_call_by_you">Anda menjawab panggilan.</string>
<string name="notice_placed_voice_call_by_you">Anda menempatkan panggilan suara.</string>
<string name="notice_placed_voice_call">%s menempatkan panggilan suara.</string>
<string name="notice_placed_video_call_by_you">Anda menempatkan panggilan video.</string>
<string name="notice_placed_video_call">%s menempatkan panggilan video.</string>
<string name="notice_answered_call">%s menjawab panggilan ini.</string>
<string name="notice_answered_call_by_you">Anda menjawab panggilan ini.</string>
<string name="notice_placed_voice_call_by_you">Anda melakukan panggilan suara.</string>
<string name="notice_placed_voice_call">%s melakukan panggilan suara.</string>
<string name="notice_placed_video_call_by_you">Anda melakukan panggilan video.</string>
<string name="notice_placed_video_call">%s melakukan panggilan video.</string>
<string name="notice_room_name_changed_by_you">Anda mengubah nama kamar menjadi: %1$s</string>
<string name="notice_room_name_changed">%1$s mengubah nama ruangan menjadi: %2$s</string>
<string name="notice_room_avatar_changed_by_you">Anda mengubah avatar ruangan</string>
<string name="notice_room_avatar_changed">%1$s mengubah avatar ruangan</string>
<string name="notice_room_avatar_changed_by_you">Anda mengubah avatar ruangan ini</string>
<string name="notice_room_avatar_changed">%1$s mengubah avatar ruangan ini</string>
<string name="notice_room_topic_changed_by_you">Anda mengubah topik menjadi: %1$s</string>
<string name="notice_room_topic_changed">%1$s mengubah topik menjadi: %2$s</string>
<string name="notice_display_name_removed_by_you">Anda menghapus nama tampilan Anda (sebelumnya adalah %1$s)</string>
<string name="notice_display_name_changed_from_by_you">Anda mengubah nama tampilan Anda dari %1$s ke %2$s</string>
<string name="notice_display_name_removed">%1$s menghapus nama tampilan mereka (sebelumnya adalah %2$s)</string>
<string name="notice_display_name_changed_from">%1$s mengubah nama tampilan mereka dari %2$s ke %3$s</string>
<string name="notice_display_name_removed">%1$s menghapus nama tampilannya (sebelumnya adalah %2$s)</string>
<string name="notice_display_name_changed_from">%1$s mengubah nama tampilannya dari %2$s ke %3$s</string>
<string name="notice_display_name_set_by_you">Anda menetapkan nama tampilan Anda ke %1$s</string>
<string name="notice_display_name_set">%1$s menetapkan nama tampilannya ke %2$s</string>
<string name="notice_avatar_url_changed_by_you">Anda mengubah avatar Anda</string>
<string name="notice_avatar_url_changed">%1$s mengubah avatarnya</string>
<string name="notice_room_withdraw_by_you">Anda menarik undangannya %1$s</string>
<string name="notice_room_withdraw">%1$s menarik undangannya %2$s</string>
<string name="notice_room_withdraw_by_you">Anda menghapus undangannya %1$s</string>
<string name="notice_room_withdraw">%1$s menghapus undangannya %2$s</string>
<string name="notice_room_ban_by_you">Anda mencekal %1$s</string>
<string name="notice_room_ban">%1$s mencekal %2$s</string>
<string name="notice_room_unban_by_you">Anda membatalkan pencekalan %1$s</string>
<string name="notice_room_unban">%1$s membatalkan pencekalan %2$s</string>
<string name="notice_room_unban_by_you">Anda menghilangkan pencekalan %1$s</string>
<string name="notice_room_unban">%1$s menghilangkan pencekalan %2$s</string>
<string name="notice_room_kick_by_you">Anda mengeluarkan %1$s</string>
<string name="notice_room_kick">%1$s mengeluarkan %2$s</string>
<string name="notice_room_reject_by_you">Anda menolak undangan</string>
<string name="notice_room_reject">%1$s menolak undangan</string>
<string name="notice_direct_room_leave_by_you">Anda meninggalkan ruangan</string>
<string name="notice_direct_room_leave">%1$s meninggalkan ruangan</string>
<string name="notice_room_leave_by_you">Anda meninggalkan ruangan</string>
<string name="notice_room_leave">%1$s meninggalkan ruangan</string>
<string name="notice_room_reject_by_you">Anda menolak undangannya</string>
<string name="notice_room_reject">%1$s menolak undangannya</string>
<string name="notice_direct_room_leave_by_you">Anda meninggalkan ruangan ini</string>
<string name="notice_direct_room_leave">%1$s meninggalkan ruangan ini</string>
<string name="notice_room_leave_by_you">Anda meninggalkan ruangan ini</string>
<string name="notice_room_leave">%1$s meninggalkan ruangan ini</string>
<string name="notice_direct_room_join_by_you">Anda bergabung</string>
<string name="notice_direct_room_join">%1$s bergabung</string>
<string name="notice_room_join_by_you">Anda bergabung ruangan</string>
<string name="notice_room_join">%1$s bergabung ruangan</string>
<string name="notice_room_join_by_you">Anda bergabung ke ruangan ini</string>
<string name="notice_room_join">%1$s bergabung ke ruangan ini</string>
<string name="notice_room_invite_you">%1$s mengundang Anda</string>
<string name="notice_room_invite_by_you">Anda mengundang %1$s</string>
<string name="notice_room_invite">%1$s mengundang %2$s</string>
<string name="notice_direct_room_created_by_you">Anda membuat diskusi</string>
<string name="notice_direct_room_created">%1$s membuat diskusi</string>
<string name="notice_room_created_by_you">Anda membuat ruangan</string>
<string name="notice_room_created">%1$s menciptakan ruangan</string>
<string name="notice_room_created_by_you">Anda membuat ruangan ini</string>
<string name="notice_room_created">%1$s membuat ruangan ini</string>
<string name="notice_room_invite_no_invitee_by_you">Undangan Anda</string>
<string name="notice_room_invite_no_invitee">Undangan %s</string>
<string name="summary_you_sent_sticker">Anda mengirim sticker.</string>
<string name="summary_user_sent_sticker">%1$s mengirim stiker.</string>
<string name="summary_you_sent_image">Anda mengirim gambar.</string>
<string name="summary_user_sent_image">%1$s mengirim gambar.</string>
<string name="summary_you_sent_sticker">Anda mengirim sebuah sticker.</string>
<string name="summary_user_sent_sticker">%1$s mengirim sebuah stiker.</string>
<string name="summary_you_sent_image">Anda mengirim sebuah gambar.</string>
<string name="summary_user_sent_image">%1$s mengirim sebuah gambar.</string>
<string name="summary_message">%1$s: %2$s</string>
<string name="settings_background_fdroid_sync_mode_real_time">Dioptimalkan untuk real-time</string>
<string name="template_settings_background_fdroid_sync_mode_battery_description">${app_name} akan mengsinkron di latar belakang dengan cara yang akan mempertahankan sumber daya (baterai) yang terbatas.
@ -1021,12 +1021,12 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="room_permissions_modify_widgets">Mengubah widget</string>
<string name="room_permissions_notify_everyone">Beritahu semuanya</string>
<string name="room_permissions_remove_messages_sent_by_others">Menghapus pesan yang dikirim dari yang lain</string>
<string name="room_permissions_change_settings">Mengubah pengaturan</string>
<string name="room_permissions_change_settings">Ubah pengaturan</string>
<string name="room_permissions_default_role">Role bawaan</string>
<string name="room_permissions_notice_read_only">Anda tidak diizinkan untuk memperbarui peran yang diperlukan untuk mengubah berbagai bagian ruangan</string>
<string name="room_permissions_notice">Pilih role yang diperlukan untuk mengubah berbagai bagian ruangan</string>
<string name="room_permissions_title">Izin</string>
<string name="room_settings_permissions_subtitle">Lihat dan perbarui role yang diperlukan untuk mengubah berbagai bagian ruangan.</string>
<string name="room_settings_permissions_subtitle">Lihat dan perbarui peran yang diperlukan untuk mengubah berbagai bagian ruangan.</string>
<string name="room_settings_permissions_title">Izin ruangan</string>
<string name="room_participants_unban_prompt_msg">Membatalkan pencekalan pengguna akan mengizinkan mereka untuk bergabung ke ruangan.</string>
<string name="room_participants_unban_title">Batalkan pencekalan pengguna</string>
@ -1106,7 +1106,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="call_failed_no_ice_title">Panggilan gagal karena konfigurasi server yang salah</string>
<string name="hs_client_url">URL API homeserver</string>
<string name="send_bug_report_include_key_share_history">Kirim sejarah permintaan pemberian kunci</string>
<string name="spaces_header">Spaces</string>
<string name="spaces_header">Space</string>
<string name="spaces_invited_header">Undangan</string>
<string name="settings_room_directory_show_all_rooms_summary">Tampilkan semua ruangan di direktori ruangan, termasuk ruangan dengan konten eksplisit.</string>
<string name="settings_room_directory_show_all_rooms">Tampilkan ruangan dengan konten eksplisit</string>
@ -1433,12 +1433,12 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="other_spaces_or_rooms_you_might_not_know">Space atau ruangan lain yang mungkin tidak Anda ketahui</string>
<string name="space_you_know_that_contains_this_room">Space yang Anda tahu berisi ruangan ini</string>
<string name="decide_who_can_find_and_join">Tentukan siapa yang dapat menemukan dan bergabung ruangan ini.</string>
<string name="tap_to_edit_spaces">Tap untuk mengedit space</string>
<string name="tap_to_edit_spaces">Ketuk untuk mengedit space</string>
<string name="select_spaces">Pilih space</string>
<string name="decide_which_spaces_can_access">Tentukan space mana yang dapat mengakses ruangan ini. Jika space dipilih, anggotanya dapat menemukan dan bergabung dengan nama Ruangan.</string>
<string name="spaces_which_can_access">Space yang dapat diakses</string>
<string name="allow_space_member_to_find_and_access">Izinkan anggota space untuk menemukan dan akses.</string>
<string name="room_create_member_of_space_name_can_join">Anggota Space %s bisa menemukan, pratinjau, dan bergabung.</string>
<string name="room_create_member_of_space_name_can_join">Anggota space %s bisa menemukan, pratinjau, dan bergabung.</string>
<string name="room_settings_room_access_restricted_description">Siapa saja di space dengan ruangan ini dapat menemukan dan bergabung. Hanya admin ruang ini yang dapat menambahkannya ke space.</string>
<string name="room_settings_room_access_restricted_title">Anggota space saja</string>
<string name="room_settings_room_access_public_description">Siapa saja dapat menemukan ruangan ini dan bergabung</string>
@ -1446,7 +1446,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="room_settings_room_access_private_description">Hanya orang yang diundang yang dapat menemukan dan bergabung</string>
<string name="room_settings_room_access_private_invite_only_title">Pribadi (Undangan Saja)</string>
<string name="room_settings_room_access_private_title">Pribadi</string>
<string name="room_settings_room_access_entry_unknown">Setelan akses yang tidak diketahui (%s)</string>
<string name="room_settings_room_access_entry_unknown">Pengaturan akses yang tidak diketahui (%s)</string>
<string name="room_settings_room_access_entry_knock">Siapa saja dapat mengetuk ruangan, anggota kemudian dapat menerima atau menolak</string>
<string name="room_alias_publish_to_directory_error">Tidak dapat mengambil visibilitas direktori ruangan saat ini (%1$s).</string>
<string name="room_alias_publish_to_directory">Publikasikan ruangan ini ke publik di direktori ruangan %1$s\?</string>
@ -1477,7 +1477,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="room_settings_guest_access_title">Izinkan tamu untuk bergabung</string>
<string name="room_settings_room_access_title">Akses ruangan</string>
<string name="room_settings_room_read_history_dialog_subtitle">Perubahan siapa yang dapat membaca riwayat hanya akan berlaku untuk pesan berikutnya di ruang ini. Visibilitas sejarah yang ada tidak akan berubah.</string>
<string name="room_settings_room_notifications_account_settings">Setelan akun</string>
<string name="room_settings_room_notifications_account_settings">Pengaturan akun</string>
<string name="room_settings_room_notifications_manage_notifications">Anda dapat mengelola notifikasi di %1$s.</string>
<string name="room_settings_room_notifications_encryption_notice">Harap dicatat bahwa sebutan &amp; pemberitahuan keyword tidak tersedia di ruangan terenkripsi di ponsel.</string>
<string name="room_settings_room_notifications_notify_me">Beritahu saya untuk</string>
@ -1491,12 +1491,12 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="account_phone_number_error">Terjadi kesalahan saat memverifikasi nomor telepon Anda.</string>
<string name="passwords_do_not_match">Sandi tidak cocok</string>
<string name="settings_emails_and_phone_numbers_summary">Kelola email dan nomor telepon yang ditautkan ke akun Matrix Anda</string>
<string name="settings_emails_and_phone_numbers_title">Surel dan nomor telepon</string>
<string name="settings_emails_and_phone_numbers_title">Email dan nomor telepon</string>
<string name="settings_fail_to_update_password_invalid_current_password">Sandi tidak valid</string>
<string name="settings_password">Sandi</string>
<string name="settings_change_password_submit">Perbarui Sandi</string>
<string name="account_email_error">Terjadi kesalahan saat memverifikasi email Anda.</string>
<string name="disabled_integration_dialog_content">Aktifkan \'Izinkan integrasi\' di Setelan untuk melakukan ini.</string>
<string name="disabled_integration_dialog_content">Aktifkan \'Izinkan integrasi\' di Pengaturan untuk melakukan ini.</string>
<string name="disabled_integration_dialog_title">Integrasi dinonaktifkan</string>
<string name="settings_integration_manager">Pengelola integrasi</string>
<string name="startup_notification_fdroid_battery_optim_button_grant">Berikan izin</string>
@ -1560,8 +1560,8 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="settings_notification_other">Lainnya</string>
<string name="settings_notification_mentions_and_keywords">Sebutan dan Keyword</string>
<string name="settings_notification_default">Notifikasi Bawaan</string>
<string name="room_settings_none">Tidak Ada</string>
<string name="room_settings_mention_and_keyword_only">Hanya Sebutan &amp; Keyword</string>
<string name="room_settings_none">Tidak ada</string>
<string name="room_settings_mention_and_keyword_only">Hanya sebutan &amp; keyword</string>
<string name="call_remove_jitsi_widget_progress">Mengakhiri panggilan…</string>
<string name="call_ended_invite_timeout_title">Tidak ada jawaban</string>
<string name="call_ended_user_busy_description">Pengguna yang Anda panggil sedang sibuk.</string>
@ -1569,7 +1569,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="audio_call_with_participant">Panggilan suara dengan %s</string>
<string name="video_call_with_participant">Panggilan video dengan %s</string>
<string name="call_ringing">Panggilan berdering…</string>
<string name="spaces">Spaces</string>
<string name="spaces">Space</string>
<string name="learn_more">Pelajari Lebih Lanjut</string>
<string name="settings_discovery_confirm_mail_not_clicked">Kami mengirimi Anda email konfirmasi ke %s, mohon periksa email Anda dan klik tautan konfirmasi</string>
<string name="settings_discovery_no_mails">Opsi penemuan akan muncul setelah Anda menambahkan email.</string>
@ -1745,7 +1745,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="settings_discovery_emails_title">Surel yang dapat ditemukan</string>
<string name="settings_discovery_identity_server_info_none">Saat ini Anda tidak menggunakan server identitas. Untuk menemukan dan dapat ditemukan oleh kontak yang Anda kenal, atur salah satu di bawah ini.</string>
<string name="settings_discovery_identity_server_info">Saat ini Anda menggunakan %1$s untuk menemukan dan dapat ditemukan oleh kontak yang Anda kenal.</string>
<string name="change_identity_server">Ganti server identitas</string>
<string name="change_identity_server">Ubah server identitas</string>
<string name="add_identity_server">Atur server identitas</string>
<string name="disconnect_identity_server">Putuskan server identitas</string>
<string name="identity_server">Server identitas</string>
@ -1794,9 +1794,9 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="send_suggestion_sent">Terima kasih, saran Anda telah dikirim</string>
<string name="feedback_sent">Terima kasih, masukan Anda telah dikirim</string>
<string name="you_may_contact_me">Anda dapat menghubungi saya jika Anda memiliki pertanyaan lanjutan</string>
<string name="send_feedback_space_info">Anda menggunakan versi beta space. Masukan Anda akan membantu menginformasikan versi berikutnya. Platform dan nama pengguna Anda akan dicatat untuk membantu kami menggunakan masukan Anda sebanyak yang kami bisa.</string>
<string name="send_feedback_space_info">Anda menggunakan space versi beta. Masukan Anda akan membantu menginformasikan versi berikutnya. Platform dan nama pengguna Anda akan dicatat untuk membantu kami menggunakan masukan Anda sebanyak yang kami bisa.</string>
<string name="feedback">Masukan</string>
<string name="send_feedback_space_title">Masukan spaces</string>
<string name="send_feedback_space_title">Masukan tentang space</string>
<string name="send_suggestion_failed">Saran gagal dikirim (%s)</string>
<string name="send_suggestion_report_placeholder">Jelaskan saran Anda di sini</string>
<string name="send_suggestion_content">Masukkan saran Anda di bawah.</string>
@ -2215,7 +2215,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="settings_rageshake">Rageshake</string>
<string name="settings_developer_mode_summary">Mode pengembang akan mengaktifkan fitur tersembunyi dan mungkin juga membuat aplikasinya kurang stabil. Untuk pengembang saja!</string>
<string name="settings_developer_mode">Mode pengembang</string>
<string name="settings_advanced_settings">Pengaturan lanjutan</string>
<string name="settings_advanced_settings">Pengaturan Lanjutan</string>
<string name="settings_show_devices_list">Lihat semua sesi saya</string>
<string name="notification_initial_sync">Sinkronisasi Awal…</string>
<string name="bug_report_error_too_short">Deskripsi terlalu pendek</string>
@ -2366,7 +2366,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
\nAnda tidak memiliki izin untuk menambahkan ruangan.</string>
<string name="this_space_has_no_rooms">Space ini belum ada ruangan</string>
<string name="spaces_no_server_support_description">Mohon kontak admin homeserver Anda untuk informasi lanjut</string>
<string name="spaces_no_server_support_title">Sepertinya homeserver Anda belum mendukung Spaces</string>
<string name="spaces_no_server_support_title">Sepertinya homeserver Anda belum mendukung fitur space</string>
<string name="spaces_feeling_experimental_subspace">Merasa eksperimental\?
\nAnda dapat menambahkan space yang sudah ada ke space.</string>
<string name="all_rooms_youre_in_will_be_shown_in_home">Semua ruangan yang Anda berada akan ditampilkan juga di Beranda.</string>
@ -2402,7 +2402,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<plurals name="space_people_you_know">
<item quantity="other">%d orang yang Anda tahu telah bergabung</item>
</plurals>
<string name="suggested_rooms_pills_on_empty_header">Selamat datang ke %1$s, %2$s.</string>
<string name="suggested_rooms_pills_on_empty_header">Selamat datang di %1$s, %2$s.</string>
<string name="suggested_rooms_pills_on_empty_text">Anda tidak berada di ruangan apapun saat ini. Di bawah adalah ruangan yang disarankan, tetapi Anda bisa mencari lebih banyak dengan tombol hijau di bawah kanan.</string>
<string name="discovery_section">Penjelajahan (%s)</string>
<string name="finish_setup">Selesaikan penyiapan</string>
@ -2452,7 +2452,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="create_spaces_make_sure_access">Pastikan orang yang tepat memiliki akses ke %s. Anda dapat mengubahnya nanti.</string>
<string name="create_spaces_who_are_you_working_with">Dengan siapa Anda bekerja\?</string>
<string name="create_spaces_join_info_help">Untuk bergabung ke space yang sudah ada, Anda membutuhkan undangan ke space itu.</string>
<string name="create_spaces_you_can_change_later">Anda bisa mengubahnya nanti</string>
<string name="create_spaces_you_can_change_later">Anda dapat mengubahnya nanti</string>
<string name="create_spaces_choose_type_label">Tipe space apa yang Anda ingin buat\?</string>
<string name="create_spaces_type_header">Space adalah cara baru untuk mengelompokkan ruangan dan pengguna</string>
<string name="your_private_space">Space privat Anda</string>
@ -2470,9 +2470,9 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="event_status_a11y_sending">Mengirim</string>
<string name="command_description_upgrade_room">Meningkatkan ruangan ke versi baru</string>
<string name="command_description_leave_room">Tinggalkan ruangan dengan ID yang diberikan (atau ruangan saat ini jika null)</string>
<string name="command_description_join_space">Bergabung ke Space dengan ID yang diberikan</string>
<string name="command_description_add_to_space">Tambah ke Space yang dicantumkan</string>
<string name="command_description_create_space">Buat Space</string>
<string name="command_description_join_space">Bergabung ke space dengan ID yang diberikan</string>
<string name="command_description_add_to_space">Tambah ke space yang dicantumkan</string>
<string name="command_description_create_space">Buat sebuah Space</string>
<string name="dev_tools_event_content_hint">Konten peristiwa</string>
<string name="dev_tools_success_state_event">Peristiwa keadaan dikirim!</string>
<string name="dev_tools_success_event">Peristiwa dikirim!</string>
@ -2950,4 +2950,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="command_description_room_avatar">Mengubah avatar ruangan saat ini</string>
<string name="command_description_avatar_for_room">Mengubah avatar Anda di ruangan saat ini saja</string>
<string name="command_description_whois">Menampilkan</string>
<string name="a11y_presence_unavailable">Tidak Tersedia</string>
<string name="a11y_presence_offline">Offline</string>
<string name="a11y_presence_online">Online</string>
</resources>

View file

@ -286,7 +286,7 @@
<string name="view_decrypted_source">Vedi il codice sorgente decifrato</string>
<string name="delete">Elimina</string>
<string name="rename">Rinomina</string>
<string name="report_content">Segnala questo contenuto</string>
<string name="report_content">Segnala contenuto</string>
<string name="active_call">Chiamata in corso</string>
<string name="ongoing_conference_call">Avvio conferenza.
\nUnisciti come %1$s o %2$s</string>
@ -2909,10 +2909,10 @@
<string name="voice_message_tap_to_stop_toast">Tocca la registrazione per fermare o ascoltare</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds rimasti</string>
<string name="voice_message_release_to_send_toast">Tieni premuto per registrare, rilascia per inviare</string>
<string name="a11y_delete_recorded_voice_message">Elimina messaggio vocale registrato</string>
<string name="a11y_delete_recorded_voice_message">Elimina la registrazione</string>
<string name="a11y_recording_voice_message">Registrazione messaggio vocale</string>
<string name="a11y_pause_voice_message">Pausa messaggio vocale</string>
<string name="a11y_start_voice_message">Inizia messaggio vocale</string>
<string name="a11y_start_voice_message">Registra messaggio vocale</string>
<string name="a11y_play_voice_message">Riproduci messaggio vocale</string>
<string name="a11y_lock_voice_message">Blocco messaggio vocale</string>
<string name="voice_message_slide_to_cancel">Scorri per annullare</string>
@ -3042,4 +3042,20 @@
<string name="space_participants_kick_prompt_msg">buttando fuori l\'utente verrà rimosso da questo spazio.
\n
\nPer impedire che possa rientrare, dovresti invece bandirlo.</string>
<string name="a11y_stop_voice_message">Ferma la registrazione</string>
<string name="command_description_lenny">Antepone ( ͡° ͜ʖ ͡°) ad un messaggio di testo</string>
<string name="identity_server_consent_dialog_neutral_policy">Informativa</string>
<string name="settings_discovery_no_policy_provided">Nessun informativa fornita dal server d\'identità</string>
<string name="settings_discovery_hide_identity_server_policy_title">Nascondi l\'informativa del server d\'identità</string>
<string name="settings_discovery_show_identity_server_policy_title">Mostra l\'informativa del server d\'identità</string>
<string name="command_description_whois">Mostra le informazioni di un utente</string>
<string name="command_description_avatar_for_room">Cambia il tuo avatar solo nella stanza attuale</string>
<string name="command_description_room_avatar">Cambia l\'avatar della stanza attuale</string>
<string name="command_description_nick_for_room">Cambia il tuo nick solo nella stanza attuale</string>
<string name="command_description_room_name">Imposta il nome della stanza</string>
<string name="command_description_unignore_user">Smetti di ignorare un utente, mostrando i suoi messaggi successivi</string>
<string name="command_description_ignore_user">Ignora un utente, non mostrandoti i suoi messaggi</string>
<string name="a11y_presence_unavailable">Non disponibile</string>
<string name="a11y_presence_offline">Offline</string>
<string name="a11y_presence_online">Online</string>
</resources>

File diff suppressed because it is too large Load diff

View file

@ -2386,8 +2386,8 @@ Spróbuj uruchomić ponownie aplikację.</string>
\nCzy na pewno kontynuować\?</string>
<string name="external_link_confirmation_title">Kliknij dwukrotnie w ten link</string>
<string name="error_empty_field_choose_password">Wybierz hasło.</string>
<string name="notice_room_server_acl_set_banned">• Dopasowanie serwera %s jest zbanowane.</string>
<string name="notice_room_server_acl_set_allowed">• Dopasowanie serwera %s jest dozwolone.</string>
<string name="notice_room_server_acl_set_banned">• Dopasowanie serwerów %s jest zbanowane.</string>
<string name="notice_room_server_acl_set_allowed">• Dopasowanie serwerów %s jest dozwolone.</string>
<string name="notice_room_server_acl_set_title_by_you">Ustawiłeś serwer ACL dla tego pokoju.</string>
<string name="notice_room_server_acl_set_title">%s ustawił(a) serwer ACL dla tego pokoju.</string>
<string name="notice_direct_room_update_by_you">Uaktualniłeś tutaj.</string>

View file

@ -1094,7 +1094,7 @@
<string name="command_description_op_user">Define nível de poder de um/uma usuário(a)</string>
<string name="command_description_deop_user">Desopa usuária(o) com id dada</string>
<string name="command_description_invite_user">Convida usuária(o) com id dada para esta sala</string>
<string name="command_description_join_room">Junta-se a sala com alias dado</string>
<string name="command_description_join_room">Junta-se a sala com endereço dado</string>
<string name="command_description_part_room">Sair de sala</string>
<string name="command_description_topic">Definir o tópico da sala</string>
<string name="command_description_kick_user">Expulsa a(o) usuária(o) com id dada</string>
@ -3072,4 +3072,7 @@
<string name="command_description_room_name">Define o nome da sala</string>
<string name="command_description_unignore_user">Para de ignorar um/uma usuário(a), mostrando as mensagens dele/dela de agora em diante</string>
<string name="command_description_ignore_user">Ignora um/uma usuário(a), escondendo as mensagens dele/dela de você</string>
<string name="a11y_presence_unavailable">Indisponível</string>
<string name="a11y_presence_offline">Offline</string>
<string name="a11y_presence_online">Online</string>
</resources>

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