diff --git a/.github/workflows/triage-incoming.yml b/.github/workflows/triage-incoming.yml index 3bb5ab73aa..4ecc824424 100644 --- a/.github/workflows/triage-incoming.yml +++ b/.github/workflows/triage-incoming.yml @@ -2,13 +2,11 @@ name: Move new issues onto Issue triage board on: issues: - types: [ opened ] + types: [opened] jobs: automate-project-columns: runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' # Skip in forks steps: - uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488 with: diff --git a/.github/workflows/triage-move-labelled.yml b/.github/workflows/triage-move-labelled.yml index 96d302ceea..67c4e9dbab 100644 --- a/.github/workflows/triage-move-labelled.yml +++ b/.github/workflows/triage-move-labelled.yml @@ -2,14 +2,12 @@ name: Move labelled issues to correct boards and columns on: issues: - types: [ labeled ] - + types: [labeled] + jobs: move_needs_info_issues: name: X-Needs-Info issues to Need info column on triage board runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' # Skip in forks steps: - uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338 with: @@ -21,16 +19,15 @@ jobs: add_priority_design_issues_to_project: name: P1 X-Needs-Design to Design project board runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - contains(github.event.issue.labels.*.name, 'X-Needs-Design') && - (contains(github.event.issue.labels.*.name, 'S-Critical') && - (contains(github.event.issue.labels.*.name, 'O-Frequent') || + if: > + contains(github.event.issue.labels.*.name, 'X-Needs-Design') && + (contains(github.event.issue.labels.*.name, 'S-Critical') && + (contains(github.event.issue.labels.*.name, 'O-Frequent') || contains(github.event.issue.labels.*.name, 'O-Occasional')) || - contains(github.event.issue.labels.*.name, 'S-Major') && - contains(github.event.issue.labels.*.name, 'O-Frequent') || - contains(github.event.issue.labels.*.name, 'A11y') && - contains(github.event.issue.labels.*.name, 'O-Frequent')) + contains(github.event.issue.labels.*.name, 'S-Major') && + contains(github.event.issue.labels.*.name, 'O-Frequent') || + contains(github.event.issue.labels.*.name, 'A11y') && + contains(github.event.issue.labels.*.name, 'O-Frequent')) steps: - uses: octokit/graphql-action@v2.x id: add_to_project @@ -50,38 +47,36 @@ jobs: PROJECT_ID: "PN_kwDOAM0swc0sUA" GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }} - # delight_issues_to_board: - # name: Spaces issues to new Delight project board - # runs-on: ubuntu-latest - # if: | - # github.repository == 'vector-im/element-android' && # Skip in forks - # contains(github.event.issue.labels.*.name, 'A-Spaces') || - # contains(github.event.issue.labels.*.name, 'A-Space-Settings') || - # contains(github.event.issue.labels.*.name, 'A-Subspaces') - # steps: - # - uses: octokit/graphql-action@v2.x - # with: - # headers: '{"GraphQL-Features": "projects_next_graphql"}' - # query: | - # mutation add_to_project($projectid:ID!,$contentid:ID!) { - # addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) { - # projectNextItem { - # id - # } - # } - # } - # projectid: ${{ env.PROJECT_ID }} - # contentid: ${{ github.event.issue.node_id }} - # env: - # PROJECT_ID: "PN_kwDOAM0swc1HvQ" - # GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }} +# delight_issues_to_board: +# name: Spaces issues to new Delight project board +# runs-on: ubuntu-latest +# if: > +# contains(github.event.issue.labels.*.name, 'A-Spaces') || +# contains(github.event.issue.labels.*.name, 'A-Space-Settings') || +# contains(github.event.issue.labels.*.name, 'A-Subspaces') +# steps: +# - uses: octokit/graphql-action@v2.x +# with: +# headers: '{"GraphQL-Features": "projects_next_graphql"}' +# query: | +# mutation add_to_project($projectid:ID!,$contentid:ID!) { +# addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) { +# projectNextItem { +# id +# } +# } +# } +# projectid: ${{ env.PROJECT_ID }} +# contentid: ${{ github.event.issue.node_id }} +# env: +# PROJECT_ID: "PN_kwDOAM0swc1HvQ" +# GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }} move_voice-message_issues: name: A-Voice Messages to voice message board runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - contains(github.event.issue.labels.*.name, 'A-Voice Messages') + if: > + contains(github.event.issue.labels.*.name, 'A-Voice Messages') steps: - uses: octokit/graphql-action@v2.x with: @@ -103,9 +98,8 @@ jobs: move_threads_issues: name: A-Threads to Thread board runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - contains(github.event.issue.labels.*.name, 'A-Threads') + if: > + contains(github.event.issue.labels.*.name, 'A-Threads') steps: - uses: octokit/graphql-action@v2.x with: @@ -127,9 +121,8 @@ jobs: move_message_bubbles_issues: name: A-Message-Bubbles to Message bubbles board runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') + if: > + contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') steps: - uses: octokit/graphql-action@v2.x with: diff --git a/.github/workflows/triage-move-unlabelled.yml b/.github/workflows/triage-move-unlabelled.yml index 5f13165939..94bd049b91 100644 --- a/.github/workflows/triage-move-unlabelled.yml +++ b/.github/workflows/triage-move-unlabelled.yml @@ -2,15 +2,15 @@ name: Move unlabelled from needs info columns to triaged on: issues: - types: [ unlabeled ] - + types: [unlabeled] + jobs: Move_Unabeled_Issue_On_Project_Board: name: Move no longer X-Needs-Info issues to Triaged runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - !contains(github.event.issue.labels.*.name, 'X-Needs-Info') + if: > + ${{ + !contains(github.event.issue.labels.*.name, 'X-Needs-Info') }} env: BOARD_NAME: "Issue triage" OWNER: ${{ github.repository_owner }} diff --git a/.github/workflows/triage-priority-bugs.yml b/.github/workflows/triage-priority-bugs.yml index 7564387a1c..976879a3ae 100644 --- a/.github/workflows/triage-priority-bugs.yml +++ b/.github/workflows/triage-priority-bugs.yml @@ -2,29 +2,28 @@ name: Move P1 bugs to boards on: issues: - types: [ labeled, unlabeled ] + types: [labeled, unlabeled] jobs: p1_issues_to_team_workboard: runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - (!contains(github.event.issue.labels.*.name, 'A-E2EE') && - !contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') && - !contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') && - !contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') && - !contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification') && - !contains(github.event.issue.labels.*.name, 'A-Spaces') && - !contains(github.event.issue.labels.*.name, 'A-Spaces-Settings') && - !contains(github.event.issue.labels.*.name, 'A-Subspaces')) && - (contains(github.event.issue.labels.*.name, 'T-Defect') && - contains(github.event.issue.labels.*.name, 'S-Critical') && - (contains(github.event.issue.labels.*.name, 'O-Frequent') || + if: > + (!contains(github.event.issue.labels.*.name, 'A-E2EE') && + !contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') && + !contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') && + !contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') && + !contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification') && + !contains(github.event.issue.labels.*.name, 'A-Spaces') && + !contains(github.event.issue.labels.*.name, 'A-Spaces-Settings') && + !contains(github.event.issue.labels.*.name, 'A-Subspaces')) && + (contains(github.event.issue.labels.*.name, 'T-Defect') && + contains(github.event.issue.labels.*.name, 'S-Critical') && + (contains(github.event.issue.labels.*.name, 'O-Frequent') || contains(github.event.issue.labels.*.name, 'O-Occasional')) || - contains(github.event.issue.labels.*.name, 'S-Major') && - contains(github.event.issue.labels.*.name, 'O-Frequent') || - contains(github.event.issue.labels.*.name, 'A11y') && - contains(github.event.issue.labels.*.name, 'O-Frequent')) + contains(github.event.issue.labels.*.name, 'S-Major') && + contains(github.event.issue.labels.*.name, 'O-Frequent') || + contains(github.event.issue.labels.*.name, 'A11y') && + contains(github.event.issue.labels.*.name, 'O-Frequent')) steps: - uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488 with: @@ -34,21 +33,20 @@ jobs: P1_issues_to_crypto_team_workboard: runs-on: ubuntu-latest - if: | - github.repository == 'vector-im/element-android' && # Skip in forks - (contains(github.event.issue.labels.*.name, 'A-E2EE') || - contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') || - contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') || - contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') || - contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) && - (contains(github.event.issue.labels.*.name, 'T-Defect') && - contains(github.event.issue.labels.*.name, 'S-Critical') && - (contains(github.event.issue.labels.*.name, 'O-Frequent') || + if: > + (contains(github.event.issue.labels.*.name, 'A-E2EE') || + contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') || + contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') || + contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') || + contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) && + (contains(github.event.issue.labels.*.name, 'T-Defect') && + contains(github.event.issue.labels.*.name, 'S-Critical') && + (contains(github.event.issue.labels.*.name, 'O-Frequent') || contains(github.event.issue.labels.*.name, 'O-Occasional')) || - contains(github.event.issue.labels.*.name, 'S-Major') && - contains(github.event.issue.labels.*.name, 'O-Frequent') || - contains(github.event.issue.labels.*.name, 'A11y') && - contains(github.event.issue.labels.*.name, 'O-Frequent')) + contains(github.event.issue.labels.*.name, 'S-Major') && + contains(github.event.issue.labels.*.name, 'O-Frequent') || + contains(github.event.issue.labels.*.name, 'A11y') && + contains(github.event.issue.labels.*.name, 'O-Frequent')) steps: - uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488 with: diff --git a/changelog.d/4405.feature b/changelog.d/4405.feature new file mode 100644 index 0000000000..9a840a9d12 --- /dev/null +++ b/changelog.d/4405.feature @@ -0,0 +1 @@ +Change internal timeline management. \ No newline at end of file diff --git a/changelog.d/4405.removal b/changelog.d/4405.removal new file mode 100644 index 0000000000..2d1543cb2b --- /dev/null +++ b/changelog.d/4405.removal @@ -0,0 +1 @@ +Introduce method onStateUpdated on Timeline.Callback \ No newline at end of file diff --git a/changelog.d/4745.misc b/changelog.d/4745.misc new file mode 100644 index 0000000000..458422d112 --- /dev/null +++ b/changelog.d/4745.misc @@ -0,0 +1 @@ +Open share UI provides by the system when sharing media or text. \ No newline at end of file diff --git a/changelog.d/4749.bugfix b/changelog.d/4749.bugfix new file mode 100644 index 0000000000..5ea29f66a0 --- /dev/null +++ b/changelog.d/4749.bugfix @@ -0,0 +1 @@ +Fix for broken unread message indicator on the room list when there are no messages in the room. \ No newline at end of file diff --git a/changelog.d/4837.bugfix b/changelog.d/4837.bugfix new file mode 100644 index 0000000000..d1eae295f5 --- /dev/null +++ b/changelog.d/4837.bugfix @@ -0,0 +1 @@ +Stop using CharSequence as EpoxyAttribute because it can lead to crash if the CharSequence mutates during rendering. \ No newline at end of file diff --git a/changelog.d/4847.bugfix b/changelog.d/4847.bugfix new file mode 100644 index 0000000000..d311882934 --- /dev/null +++ b/changelog.d/4847.bugfix @@ -0,0 +1 @@ +Translate the error observed when the user is not allowed to join a room \ No newline at end of file diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40103090.txt b/fastlane/metadata/android/cs-CZ/changelogs/40103090.txt new file mode 100644 index 0000000000..fe61a48d12 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Přidání podpory pro návrh hlasové zprávy. Opravy mnoha chyb! +Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/de-DE/changelogs/40103050.txt b/fastlane/metadata/android/de-DE/changelogs/40103050.txt new file mode 100644 index 0000000000..a3e40e9e03 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/40103050.txt @@ -0,0 +1,2 @@ +Änderungen in dieser Version: Unterstützung für Anwesenheitsstatus in Direktnachrichten (Momentan auf matrix.org deaktiviert), Android Auto funktioniert wieder. +Änderungsliste: https://github.com/vector-im/element-android/releases/tag/v1.3.5 diff --git a/fastlane/metadata/android/de-DE/changelogs/40103060.txt b/fastlane/metadata/android/de-DE/changelogs/40103060.txt new file mode 100644 index 0000000000..dcd8d3634d --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/40103060.txt @@ -0,0 +1,2 @@ +Änderungen in dieser Version: Unterstützung für Anwesenheitsstatus in Direktnachrichten (Momentan auf matrix.org deaktiviert), Android Auto funktioniert wieder. +Änderungsliste: https://github.com/vector-im/element-android/releases/tag/v1.3.6 diff --git a/fastlane/metadata/android/de-DE/changelogs/40103090.txt b/fastlane/metadata/android/de-DE/changelogs/40103090.txt new file mode 100644 index 0000000000..028df4942f --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Hauptänderungen: Verbesserungen bei Sprachnachrichten, Bugfixes. +Änderungsliste: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/et/changelogs/40103090.txt b/fastlane/metadata/android/et/changelogs/40103090.txt new file mode 100644 index 0000000000..e931ba5386 --- /dev/null +++ b/fastlane/metadata/android/et/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Põhilised muutused selles versioonis: Häälsõnumite võimalus. Palju veaparandusi! +Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/fa/changelogs/40103090.txt b/fastlane/metadata/android/fa/changelogs/40103090.txt new file mode 100644 index 0000000000..75810a0e23 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/40103090.txt @@ -0,0 +1,2 @@ +تغییرات عمده در این نگارش: افزودن پشتیبان از چرک‌نویس‌های صوتی. رفع چندین مشکل! +گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/fr-FR/changelogs/40103090.txt b/fastlane/metadata/android/fr-FR/changelogs/40103090.txt new file mode 100644 index 0000000000..3394e5ccfa --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Principaux changements pour cette version : Ajout du support pour les brouillons de messages vocaux. Beaucoup de corrections de bugs ! +Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/hu-HU/changelogs/40103090.txt b/fastlane/metadata/android/hu-HU/changelogs/40103090.txt new file mode 100644 index 0000000000..d4189121bb --- /dev/null +++ b/fastlane/metadata/android/hu-HU/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Fő változás ebben a verzióban: Hang üzenet piszkozat támogatás. Sok egyéb hibajavítás. +Teljes változásnapló: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/id/changelogs/40103090.txt b/fastlane/metadata/android/id/changelogs/40103090.txt new file mode 100644 index 0000000000..b371ba9fab --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Perubahan utama di versi ini: Tambahkan dukungan untuk draf pesan suara. Banyak perbaikan bug! +Changelog lengkap: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/id/short_description.txt b/fastlane/metadata/android/id/short_description.txt index 1cd770dd73..72c520403c 100644 --- a/fastlane/metadata/android/id/short_description.txt +++ b/fastlane/metadata/android/id/short_description.txt @@ -1 +1 @@ -Perpesanan grup - perpesanan, panggilan suara dan video grup terenkripsi +Perpesanan grup — perpesanan, panggilan suara dan video grup terenkripsi diff --git a/fastlane/metadata/android/id/title.txt b/fastlane/metadata/android/id/title.txt index aec5dc9351..08ad7afa67 100644 --- a/fastlane/metadata/android/id/title.txt +++ b/fastlane/metadata/android/id/title.txt @@ -1 +1 @@ -Element - Perpesanan Aman +Element — Perpesanan Aman diff --git a/fastlane/metadata/android/it-IT/changelogs/40103090.txt b/fastlane/metadata/android/it-IT/changelogs/40103090.txt new file mode 100644 index 0000000000..d91ecfe530 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Modifiche principali in questa versione: aggiunto supporto per le bozze dei vocali. Molte correzioni! +Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/pt-BR/changelogs/40103090.txt b/fastlane/metadata/android/pt-BR/changelogs/40103090.txt new file mode 100644 index 0000000000..9f67fd2d62 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Principais mudanças nesta versão: Adicionar suporte para rascunho de mensagem de voz. Muitos consertos de bugs! +Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/sk/changelogs/40103060.txt b/fastlane/metadata/android/sk/changelogs/40103060.txt new file mode 100644 index 0000000000..c9a3b8bb75 --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/40103060.txt @@ -0,0 +1,2 @@ +Hlavné zmeny v tejto verzii: Pridanie podpory prítomnosti pre miestnosť s priamymi správami (poznámka: prítomnosť je na matrix.org vypnutá). Opätovné pridanie podpory Android Auto. +Úplný zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.3.6 diff --git a/fastlane/metadata/android/sk/changelogs/40103090.txt b/fastlane/metadata/android/sk/changelogs/40103090.txt new file mode 100644 index 0000000000..d719d5055c --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Hlavné zmeny v tejto verzii: Pridanie podpory pre návrh hlasovej správy. Oprava mnohých chýb! +Úplný zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/sk/full_description.txt b/fastlane/metadata/android/sk/full_description.txt index b4c9e98777..78661e961e 100644 --- a/fastlane/metadata/android/sk/full_description.txt +++ b/fastlane/metadata/android/sk/full_description.txt @@ -1,30 +1,41 @@ -Element je inovatívny kolaboračný komunikátor a messenger ktorý: +Element je zabezpečený messenger a zároveň aplikácia na tímovú spoluprácu, ktorá je ideálna na skupinové konverzácie pri práci na diaľku. Táto komunikačná aplikácia využíva end-to-end šifrovanie na poskytovanie výkonných videokonferencií, zdieľania súborov a hlasových hovorov. -1. Ponecháva kontrolu nad vaším súkromím -2. Umožňuje komunikovať s kýmkoľvek v sieti Matrix a vďaka integráciám aj s rôznymi inými aplikáciami ako napríklad Slack -3. Chráni vás pred reklamami, zhromažďovaním údajov a uzavretými platformami -4. Posilňuje vašu bezpečnosť vďaka E2E šifrovaniu a krížovému podpisovaniu určenému na overovanie ostatných +Funkcie aplikácie Element zahŕňajú: +- Pokročilé nástroje na online komunikáciu +- Plne šifrované správy umožňujúce bezpečnejšiu firemnú komunikáciu aj pre pracovníkov na diaľku +- Decentralizované konverzácie založené na open source frameworku Matrix +- Bezpečné zdieľanie súborov so šifrovanými údajmi pri správe projektov +- Videochaty s funkciou Voice over IP a zdieľaním obrazovky +- Jednoduchá integrácia s obľúbenými nástrojmi na online spoluprácu, nástrojmi na riadenie projektov, službami VoIP a inými aplikáciami na tímovú komunikáciu -Element sa od ostatných komunikačných a kolaboračných aplikácií odlišuje tým, že je decentralizovaný a open-source. +Element sa úplne líši od ostatných aplikácií na zasielanie správ a spoluprácu. Funguje na Matrixe, otvorenej sieti na bezpečné posielanie správ a decentralizovanú komunikáciu. Umožňuje vlastný hosting, aby používatelia získali maximálne vlastníctvo a kontrolu nad svojimi údajmi a správami. -S Elementom sa môžete pripojiť k vlastnému serveru alebo si môžete vybrať server s dôveryhodným poskytovateľom, čím si zachováte súkromie, vlastníctvo a kontrolu nad vašimi konverzáciami a údajmi. Získate tak prístup do otvorenej siete a teda nie ste limitovaní na komunikáciu len s ostatnými Element používateľmi. A samozrejme je vaša komunikácia dobre zabezpečná. +Súkromie a šifrovanie správ +Element vás chráni pred nežiaducimi reklamami, ťažbou údajov a tzv. walled gardens. Zabezpečuje tiež všetky vaše údaje, video a hlasovú komunikáciu jeden na jedného prostredníctvom end-to-end šifrovania a overovania zariadení krížovým podpisovaním +Element vám poskytuje kontrolu nad vaším súkromím a zároveň vám umožňuje bezpečne komunikovať s kýmkoľvek v sieti Matrix alebo s inými nástrojmi na podnikovú spoluprácu vďaka integrácii s aplikáciami, ako je napríklad Slack. -Element všetko toto dokáže vďaka tomu, že pracuje podľa protokolu Matrix - štandardu na otvorenú, decentralizovanú komunikáciu. +Element môže byť na vašom vlastnom serveri. +Aby ste mali väčšiu kontrolu nad svojimi citlivými údajmi a konverzáciami, Element môže byť na vašom vlastnom serveri alebo si môžete vybrať ľubovoľný hosting založený na systéme Matrix - štandarde pre decentralizovanú komunikáciu s otvoreným zdrojovým kódom. Element vám poskytuje súkromie, súlad s bezpečnostnými predpismi a flexibilitu integrácie. -Element vám dáva kontrolu tým, že si samy vyberiete, ako budete spravovať (ang. host) vaše konverzácie. Priamo v aplikácii Element si môžete vybrať z rôznych spôsobov hostovania: +Vlastnite svoje údaje +Vy rozhodujete o tom, kde budú vaše údaje a správy uložené. Bez rizika ťažby údajov alebo prístupu tretích strán. -1. Získajte účet zdarma na verejnom servery matrix.org od vývojárov protokolu Matrix alebo si vyberte z tísíce iných serverov hostovaných dobrovoľníkmi -2. Hostujte si účet spustením vlastného servera použitím vlastného hardvéru -3. Prihláste sa k účtu na vlastnom servery objednaním služieb na platforme Element Matrix Services +Element vám dáva kontrolu rôznymi spôsobmi: +1. Získajte bezplatné konto na verejnom serveri matrix.org, ktorý hostia vývojári Matrixu, alebo si vyberte z tisícov verejných serverov, ktoré hostia dobrovoľníci. +2. Vlastný hosting účtu spustením servera na vlastnej IT infraštruktúre. +3. Zaregistrujte si účet na vlastnom serveri tak, že si jednoducho predplatíte hostingovú platformu Element Matrix Services. -Prečo si vybrať Element? +Otvorené zasielanie správ a spolupráca +Môžete komunikovať s kýmkoľvek v sieti Matrix, či už používa aplikáciu Element, inú aplikáciu Matrix alebo dokonca ak používa inú aplikáciu na zasielanie správ. -PONECHAJTE SI VAŠE ÚDAJE: Len vy rozhodujete o tom, kde si budete uchovávať vaše správy a ostatné údaje. Len vy vlastníte vaše údaje a riadite zaobchádzanie s nimi, nie nejaká megakorporácia, ktorá z nich ťaží alebo ich poskytuje tretím stranám. +Vynikajúce zabezpečenie +Skutočné end-to-end šifrovanie (správy môžu dešifrovať len účastníci konverzácie) a krížové overovanie zariadení. -OTVORENÁ KOMUNIKÁCIA a KOLABORÁCIA: Konverzovať môžete s kýmkoľvek v otvorenej sieti Matrix nezávisle na tom, či používa Element, inú kompatibilnú aplikáciu, ba dokkonca aj s tými, ktorí používajú úplne inú platformu určenú na okamžitú komunikáciu ako sú Slack, IRC alebo XMPP. +Kompletná komunikácia a integrácia +Správy, hlasové a video hovory, zdieľanie súborov, zdieľanie obrazovky a celý rad integrácií, botov a widgetov. Vytvárajte miestnosti, komunity, zostaňte v kontakte a vybavujte veci. -VEĽMI VYSOKÉ ZABEZPEČENIE: Skutočné šifrovanie od zariadenia k zariadeniu (len diskutujúci môžu dešifrovať správy) a krížové podpisovanie určené na overovanie jednotlivých zariadení členov konverzácií. +Nadviažte tam, kde ste skončili +Buďte v kontakte, nech ste kdekoľvek, vďaka plne synchronizovanej histórii správ vo všetkých zariadeniach a na webe na adrese https://app.element.io. -KOMPLETNÁ KOMUNIKÁCIA: Okamžité správy, telefonáty a video hovory, zdieľanie súborov, zdieľanie obrazovky a veľké množstvo integrácií, botov a widgetov. Vytvorte si vlastné miestnosti, založte komunity, ostante v kontakte a vyriešte problémy. - -KDEKOĽVEK SA NACHÁDZATE: Ostante v kontakte kdekoľvek ste s plne synchronizovanou históriou konverzácií naprieč všetkými vašimi zariadeniami a aj cez web na adrese https://app.element.io. +Otvorený zdroj +Element Android je projekt s otvoreným zdrojovým kódom, ktorého hostiteľom je GitHub. Nahlasujte chyby a/alebo prispievajte k jeho vývoju na adrese https://github.com/vector-im/element-android. diff --git a/fastlane/metadata/android/sk/title.txt b/fastlane/metadata/android/sk/title.txt index dd02c784e8..fa7155e82e 100644 --- a/fastlane/metadata/android/sk/title.txt +++ b/fastlane/metadata/android/sk/title.txt @@ -1 +1 @@ -Element (kedysi Riot.im) +Element - Bezpečný messenger diff --git a/fastlane/metadata/android/sq/changelogs/40103090.txt b/fastlane/metadata/android/sq/changelogs/40103090.txt new file mode 100644 index 0000000000..2dae814fc1 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Shtim mbulimi për skica mesazhesh zanore. Mjaft ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/sv-SE/changelogs/40103090.txt b/fastlane/metadata/android/sv-SE/changelogs/40103090.txt new file mode 100644 index 0000000000..dce7ffe5a7 --- /dev/null +++ b/fastlane/metadata/android/sv-SE/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Huvudsakliga ändringar i den här versionen: Lägg till stöd för röstmeddelandeutkast. Många buggfixar! +Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/uk/changelogs/40103090.txt b/fastlane/metadata/android/uk/changelogs/40103090.txt new file mode 100644 index 0000000000..37f8959d4c --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/40103090.txt @@ -0,0 +1,2 @@ +Основні зміни в цій версії: підтримка чернеток голосових повідомлень. Багато виправлень помилок! +Повний журнал змін: https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103090.txt b/fastlane/metadata/android/zh-CN/changelogs/40103090.txt new file mode 100644 index 0000000000..7eb68d61e4 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/40103090.txt @@ -0,0 +1,2 @@ +版本的主要变化:增加了对语音信息草稿的支持。许多修正! +完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/fastlane/metadata/android/zh-TW/changelogs/40103090.txt b/fastlane/metadata/android/zh-TW/changelogs/40103090.txt new file mode 100644 index 0000000000..c74a27acbf --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40103090.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:新增對語音訊息草稿的支援。許多臭蟲修復! +完整的變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.3.9 diff --git a/library/ui-styles/src/main/res/values/stylable_pool_result_line.xml b/library/ui-styles/src/main/res/values/stylable_pool_result_line.xml deleted file mode 100644 index 93e9851106..0000000000 --- a/library/ui-styles/src/main/res/values/stylable_pool_result_line.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt index 8e21828562..3cb699378f 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt @@ -145,36 +145,9 @@ class CommonTestHelper(context: Context) { * @param nbOfMessages the number of time the message will be sent */ fun sendTextMessage(room: Room, message: String, nbOfMessages: Int, timeout: Long = TestConstants.timeOutMillis): List { - val sentEvents = ArrayList(nbOfMessages) val timeline = room.createTimeline(null, TimelineSettings(10)) timeline.start() - waitWithLatch(timeout + 1_000L * nbOfMessages) { latch -> - val timelineListener = object : Timeline.Listener { - override fun onTimelineFailure(throwable: Throwable) { - } - - override fun onNewTimelineEvents(eventIds: List) { - // noop - } - - override fun onTimelineUpdated(snapshot: List) { - val newMessages = snapshot - .filter { it.root.sendState == SendState.SYNCED } - .filter { it.root.getClearType() == EventType.MESSAGE } - .filter { it.root.getClearContent().toModel()?.body?.startsWith(message) == true } - - Timber.v("New synced message size: ${newMessages.size}") - if (newMessages.size == nbOfMessages) { - sentEvents.addAll(newMessages) - // Remove listener now, if not at the next update sendEvents could change - timeline.removeListener(this) - latch.countDown() - } - } - } - timeline.addListener(timelineListener) - sendTextMessagesBatched(room, message, nbOfMessages) - } + val sentEvents = sendTextMessagesBatched(timeline, room, message, nbOfMessages, timeout) timeline.dispose() // Check that all events has been created assertEquals("Message number do not match $sentEvents", nbOfMessages.toLong(), sentEvents.size.toLong()) @@ -182,9 +155,10 @@ class CommonTestHelper(context: Context) { } /** - * Will send nb of messages provided by count parameter but waits a bit every 10 messages to avoid gap in sync + * Will send nb of messages provided by count parameter but waits every 10 messages to avoid gap in sync */ - private fun sendTextMessagesBatched(room: Room, message: String, count: Int) { + private fun sendTextMessagesBatched(timeline: Timeline, room: Room, message: String, count: Int, timeout: Long): List { + val sentEvents = ArrayList(count) (1 until count + 1) .map { "$message #$it" } .chunked(10) @@ -192,8 +166,34 @@ class CommonTestHelper(context: Context) { batchedMessages.forEach { formattedMessage -> room.sendTextMessage(formattedMessage) } - Thread.sleep(1_000L) + waitWithLatch(timeout) { latch -> + val timelineListener = object : Timeline.Listener { + + override fun onTimelineUpdated(snapshot: List) { + val allSentMessages = snapshot + .filter { it.root.sendState == SendState.SYNCED } + .filter { it.root.getClearType() == EventType.MESSAGE } + .filter { it.root.getClearContent().toModel()?.body?.startsWith(message) == true } + + val hasSyncedAllBatchedMessages = allSentMessages + .map { + it.root.getClearContent().toModel()?.body + } + .containsAll(batchedMessages) + + if (allSentMessages.size == count) { + sentEvents.addAll(allSentMessages) + } + if (hasSyncedAllBatchedMessages) { + timeline.removeListener(this) + latch.countDown() + } + } + } + timeline.addListener(timelineListener) + } } + return sentEvents } // PRIVATE METHODS ***************************************************************************** @@ -332,13 +332,6 @@ class CommonTestHelper(context: Context) { fun createEventListener(latch: CountDownLatch, predicate: (List) -> Boolean): Timeline.Listener { return object : Timeline.Listener { - override fun onTimelineFailure(throwable: Throwable) { - // noop - } - - override fun onNewTimelineEvents(eventIds: List) { - // noop - } override fun onTimelineUpdated(snapshot: List) { if (predicate(snapshot)) { diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt deleted file mode 100644 index 7628f287c9..0000000000 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 2020 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.session.room.timeline - -import org.amshove.kluent.shouldBeFalse -import org.amshove.kluent.shouldBeTrue -import org.junit.Assert.assertTrue -import org.junit.FixMethodOrder -import org.junit.Test -import org.junit.runner.RunWith -import org.junit.runners.JUnit4 -import org.junit.runners.MethodSorters -import org.matrix.android.sdk.InstrumentedTest -import org.matrix.android.sdk.api.extensions.orFalse -import org.matrix.android.sdk.api.session.events.model.EventType -import org.matrix.android.sdk.api.session.events.model.toModel -import org.matrix.android.sdk.api.session.room.model.message.MessageContent -import org.matrix.android.sdk.api.session.room.timeline.Timeline -import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings -import org.matrix.android.sdk.common.CommonTestHelper -import org.matrix.android.sdk.common.CryptoTestHelper -import org.matrix.android.sdk.common.checkSendOrder -import timber.log.Timber -import java.util.concurrent.CountDownLatch - -@RunWith(JUnit4::class) -@FixMethodOrder(MethodSorters.JVM) -class TimelineBackToPreviousLastForwardTest : InstrumentedTest { - - private val commonTestHelper = CommonTestHelper(context()) - private val cryptoTestHelper = CryptoTestHelper(commonTestHelper) - - /** - * This test ensure that if we have a chunk in the timeline which is due to a sync, and we click to permalink of an - * even contained in a previous lastForward chunk, we will be able to go back to the live - */ - @Test - fun backToPreviousLastForwardTest() { - val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoom(false) - - val aliceSession = cryptoTestData.firstSession - val bobSession = cryptoTestData.secondSession!! - val aliceRoomId = cryptoTestData.roomId - - aliceSession.cryptoService().setWarnOnUnknownDevices(false) - bobSession.cryptoService().setWarnOnUnknownDevices(false) - - val roomFromAlicePOV = aliceSession.getRoom(aliceRoomId)!! - val roomFromBobPOV = bobSession.getRoom(aliceRoomId)!! - - val bobTimeline = roomFromBobPOV.createTimeline(null, TimelineSettings(30)) - bobTimeline.start() - - var roomCreationEventId: String? = null - - run { - val lock = CountDownLatch(1) - val eventsListener = commonTestHelper.createEventListener(lock) { snapshot -> - Timber.e("Bob timeline updated: with ${snapshot.size} events:") - snapshot.forEach { - Timber.w(" event ${it.root}") - } - - roomCreationEventId = snapshot.lastOrNull()?.root?.eventId - // Ok, we have the 8 first messages of the initial sync (room creation and bob join event) - snapshot.size == 8 - } - - bobTimeline.addListener(eventsListener) - commonTestHelper.await(lock) - bobTimeline.removeAllListeners() - - bobTimeline.hasMoreToLoad(Timeline.Direction.BACKWARDS).shouldBeFalse() - bobTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS).shouldBeFalse() - } - - // Bob stop to sync - bobSession.stopSync() - - val messageRoot = "First messages from Alice" - - // Alice sends 30 messages - commonTestHelper.sendTextMessage( - roomFromAlicePOV, - messageRoot, - 30) - - // Bob start to sync - bobSession.startSync(true) - - run { - val lock = CountDownLatch(1) - val eventsListener = commonTestHelper.createEventListener(lock) { snapshot -> - Timber.e("Bob timeline updated: with ${snapshot.size} events:") - snapshot.forEach { - Timber.w(" event ${it.root}") - } - - // Ok, we have the 10 last messages from Alice. - snapshot.size == 10 && - snapshot.all { it.root.content.toModel()?.body?.startsWith(messageRoot).orFalse() } - } - - bobTimeline.addListener(eventsListener) - commonTestHelper.await(lock) - bobTimeline.removeAllListeners() - - bobTimeline.hasMoreToLoad(Timeline.Direction.BACKWARDS).shouldBeTrue() - bobTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS).shouldBeFalse() - } - - // Bob navigate to the first event (room creation event), so inside the previous last forward chunk - run { - val lock = CountDownLatch(1) - val eventsListener = commonTestHelper.createEventListener(lock) { snapshot -> - Timber.e("Bob timeline updated: with ${snapshot.size} events:") - snapshot.forEach { - Timber.w(" event ${it.root}") - } - - // The event is in db, so it is fetch and auto pagination occurs, half of the number of events we have for this chunk (?) - snapshot.size == 4 - } - - bobTimeline.addListener(eventsListener) - - // Restart the timeline to the first sent event, which is already in the database, so pagination should start automatically - assertTrue(roomFromBobPOV.getTimeLineEvent(roomCreationEventId!!) != null) - - bobTimeline.restartWithEventId(roomCreationEventId) - - commonTestHelper.await(lock) - bobTimeline.removeAllListeners() - - bobTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS).shouldBeTrue() - bobTimeline.hasMoreToLoad(Timeline.Direction.BACKWARDS).shouldBeFalse() - } - - // Bob scroll to the future - run { - val lock = CountDownLatch(1) - val eventsListener = commonTestHelper.createEventListener(lock) { snapshot -> - Timber.e("Bob timeline updated: with ${snapshot.size} events:") - snapshot.forEach { - Timber.w(" event ${it.root}") - } - - // Bob can see the first event of the room (so Back pagination has worked) - snapshot.lastOrNull()?.root?.getClearType() == EventType.STATE_ROOM_CREATE && - // 8 for room creation item, and 30 for the forward pagination - snapshot.size == 38 && - snapshot.checkSendOrder(messageRoot, 30, 0) - } - - bobTimeline.addListener(eventsListener) - - bobTimeline.paginate(Timeline.Direction.FORWARDS, 50) - - commonTestHelper.await(lock) - bobTimeline.removeAllListeners() - - bobTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS).shouldBeFalse() - bobTimeline.hasMoreToLoad(Timeline.Direction.BACKWARDS).shouldBeFalse() - } - bobTimeline.dispose() - - cryptoTestData.cleanUp(commonTestHelper) - } -} diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt index bc9722c922..05a43de0ac 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt @@ -16,6 +16,8 @@ package org.matrix.android.sdk.session.room.timeline +import kotlinx.coroutines.runBlocking +import org.amshove.kluent.internal.assertEquals import org.amshove.kluent.shouldBeFalse import org.amshove.kluent.shouldBeTrue import org.junit.FixMethodOrder @@ -123,54 +125,29 @@ class TimelineForwardPaginationTest : InstrumentedTest { // Alice paginates BACKWARD and FORWARD of 50 events each // Then she can only navigate FORWARD run { - val lock = CountDownLatch(1) - val aliceEventsListener = commonTestHelper.createEventListener(lock) { snapshot -> - Timber.e("Alice timeline updated: with ${snapshot.size} events:") - snapshot.forEach { - Timber.w(" event ${it.root.content}") - } - - // Alice can see the first event of the room (so Back pagination has worked) - snapshot.lastOrNull()?.root?.getClearType() == EventType.STATE_ROOM_CREATE && - // 6 for room creation item (backward pagination), 1 for the context, and 50 for the forward pagination - snapshot.size == 57 // 6 + 1 + 50 + val snapshot = runBlocking { + aliceTimeline.awaitPaginate(Timeline.Direction.BACKWARDS, 50) + aliceTimeline.awaitPaginate(Timeline.Direction.FORWARDS, 50) } - - aliceTimeline.addListener(aliceEventsListener) - - // Restart the timeline to the first sent event - // We ask to load event backward and forward - aliceTimeline.paginate(Timeline.Direction.BACKWARDS, 50) - aliceTimeline.paginate(Timeline.Direction.FORWARDS, 50) - - commonTestHelper.await(lock) - aliceTimeline.removeAllListeners() - aliceTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS).shouldBeTrue() aliceTimeline.hasMoreToLoad(Timeline.Direction.BACKWARDS).shouldBeFalse() + + assertEquals(EventType.STATE_ROOM_CREATE, snapshot.lastOrNull()?.root?.getClearType()) + // 6 for room creation item (backward pagination), 1 for the context, and 50 for the forward pagination + // 6 + 1 + 50 + assertEquals(57, snapshot.size) } // Alice paginates once again FORWARD for 50 events // All the timeline is retrieved, she cannot paginate anymore in both direction run { - val lock = CountDownLatch(1) - val aliceEventsListener = commonTestHelper.createEventListener(lock) { snapshot -> - Timber.e("Alice timeline updated: with ${snapshot.size} events:") - snapshot.forEach { - Timber.w(" event ${it.root.content}") - } - // 6 for room creation item (backward pagination),and numberOfMessagesToSend (all the message of the room) - snapshot.size == 6 + numberOfMessagesToSend && - snapshot.checkSendOrder(message, numberOfMessagesToSend, 0) - } - - aliceTimeline.addListener(aliceEventsListener) - // Ask for a forward pagination - aliceTimeline.paginate(Timeline.Direction.FORWARDS, 50) - - commonTestHelper.await(lock) - aliceTimeline.removeAllListeners() + val snapshot = runBlocking { + aliceTimeline.awaitPaginate(Timeline.Direction.FORWARDS, 50) + } + // 6 for room creation item (backward pagination),and numberOfMessagesToSend (all the message of the room) + snapshot.size == 6 + numberOfMessagesToSend && + snapshot.checkSendOrder(message, numberOfMessagesToSend, 0) // The timeline is fully loaded aliceTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS).shouldBeFalse() diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt index e865fe17da..c6fdec150d 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt @@ -168,10 +168,8 @@ class TimelinePreviousLastForwardTest : InstrumentedTest { bobTimeline.addListener(eventsListener) - // Restart the timeline to the first sent event, and paginate in both direction + // Restart the timeline to the first sent event bobTimeline.restartWithEventId(firstMessageFromAliceId) - bobTimeline.paginate(Timeline.Direction.BACKWARDS, 50) - bobTimeline.paginate(Timeline.Direction.FORWARDS, 50) commonTestHelper.await(lock) bobTimeline.removeAllListeners() diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineSimpleBackPaginationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineSimpleBackPaginationTest.kt new file mode 100644 index 0000000000..b75df9b5a2 --- /dev/null +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineSimpleBackPaginationTest.kt @@ -0,0 +1,104 @@ +/* + * Copyright 2020 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.session.room.timeline + +import kotlinx.coroutines.runBlocking +import org.amshove.kluent.internal.assertEquals +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import org.junit.runners.MethodSorters +import org.matrix.android.sdk.InstrumentedTest +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.events.model.isTextMessage +import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent +import org.matrix.android.sdk.api.session.room.timeline.Timeline +import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings +import org.matrix.android.sdk.common.CommonTestHelper +import org.matrix.android.sdk.common.CryptoTestHelper +import org.matrix.android.sdk.common.TestConstants + +@RunWith(JUnit4::class) +@FixMethodOrder(MethodSorters.JVM) +class TimelineSimpleBackPaginationTest : InstrumentedTest { + + private val commonTestHelper = CommonTestHelper(context()) + private val cryptoTestHelper = CryptoTestHelper(commonTestHelper) + + @Test + fun timeline_backPaginate_shouldReachEndOfTimeline() { + val numberOfMessagesToSent = 200 + + val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoom(false) + + val aliceSession = cryptoTestData.firstSession + val bobSession = cryptoTestData.secondSession!! + val roomId = cryptoTestData.roomId + + aliceSession.cryptoService().setWarnOnUnknownDevices(false) + bobSession.cryptoService().setWarnOnUnknownDevices(false) + + val roomFromAlicePOV = aliceSession.getRoom(roomId)!! + val roomFromBobPOV = bobSession.getRoom(roomId)!! + + // Alice sends X messages + val message = "Message from Alice" + commonTestHelper.sendTextMessage( + roomFromAlicePOV, + message, + numberOfMessagesToSent) + + val bobTimeline = roomFromBobPOV.createTimeline(null, TimelineSettings(30)) + bobTimeline.start() + + commonTestHelper.waitWithLatch(timeout = TestConstants.timeOutMillis * 10) { + val listener = object : Timeline.Listener { + + override fun onStateUpdated(direction: Timeline.Direction, state: Timeline.PaginationState) { + if (direction == Timeline.Direction.FORWARDS) { + return + } + if (state.hasMoreToLoad && !state.loading) { + bobTimeline.paginate(Timeline.Direction.BACKWARDS, 30) + } else if (!state.hasMoreToLoad) { + bobTimeline.removeListener(this) + it.countDown() + } + } + } + bobTimeline.addListener(listener) + bobTimeline.paginate(Timeline.Direction.BACKWARDS, 30) + } + assertEquals(false, bobTimeline.hasMoreToLoad(Timeline.Direction.FORWARDS)) + assertEquals(false, bobTimeline.hasMoreToLoad(Timeline.Direction.BACKWARDS)) + + val onlySentEvents = runBlocking { + bobTimeline.getSnapshot() + } + .filter { + it.root.isTextMessage() + }.filter { + (it.root.content.toModel())?.body?.startsWith(message).orFalse() + } + assertEquals(numberOfMessagesToSent, onlySentEvents.size) + + bobTimeline.dispose() + cryptoTestData.cleanUp(commonTestHelper) + } +} diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt deleted file mode 100644 index 9be0a5d5af..0000000000 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2020 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.session.room.timeline - -import com.zhuinden.monarchy.Monarchy -import org.matrix.android.sdk.InstrumentedTest - -internal class TimelineTest : InstrumentedTest { - - companion object { - private const val ROOM_ID = "roomId" - } - - private lateinit var monarchy: Monarchy - -// @Before -// fun setup() { -// Timber.plant(Timber.DebugTree()) -// Realm.init(context()) -// val testConfiguration = RealmConfiguration.Builder().name("test-realm") -// .modules(SessionRealmModule()).build() -// -// Realm.deleteRealm(testConfiguration) -// monarchy = Monarchy.Builder().setRealmConfiguration(testConfiguration).build() -// RoomDataHelper.fakeInitialSync(monarchy, ROOM_ID) -// } -// -// private fun createTimeline(initialEventId: String? = null): Timeline { -// val taskExecutor = TaskExecutor(testCoroutineDispatchers) -// val tokenChunkEventPersistor = TokenChunkEventPersistor(monarchy) -// val paginationTask = FakePaginationTask @Inject constructor(tokenChunkEventPersistor) -// val getContextOfEventTask = FakeGetContextOfEventTask @Inject constructor(tokenChunkEventPersistor) -// val roomMemberExtractor = SenderRoomMemberExtractor(ROOM_ID) -// val timelineEventFactory = TimelineEventFactory(roomMemberExtractor, EventRelationExtractor()) -// return DefaultTimeline( -// ROOM_ID, -// initialEventId, -// monarchy.realmConfiguration, -// taskExecutor, -// getContextOfEventTask, -// timelineEventFactory, -// paginationTask, -// null) -// } -// -// @Test -// fun backPaginate_shouldLoadMoreEvents_whenPaginateIsCalled() { -// val timeline = createTimeline() -// timeline.start() -// val paginationCount = 30 -// var initialLoad = 0 -// val latch = CountDownLatch(2) -// var timelineEvents: List = emptyList() -// timeline.listener = object : Timeline.Listener { -// override fun onTimelineUpdated(snapshot: List) { -// if (snapshot.isNotEmpty()) { -// if (initialLoad == 0) { -// initialLoad = snapshot.size -// } -// timelineEvents = snapshot -// latch.countDown() -// timeline.paginate(Timeline.Direction.BACKWARDS, paginationCount) -// } -// } -// } -// latch.await() -// timelineEvents.size shouldBeEqualTo initialLoad + paginationCount -// timeline.dispose() -// } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt index 06c88db831..241e5f3b9b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt @@ -71,14 +71,10 @@ interface Timeline { fun paginate(direction: Direction, count: Int) /** - * Returns the number of sending events + * This is the same than the regular paginate method but waits for the results instead + * of relying on the timeline listener. */ - fun pendingEventCount(): Int - - /** - * Returns the number of failed sending events. - */ - fun failedToDeliverEventCount(): Int + suspend fun awaitPaginate(direction: Direction, count: Int): List /** * Returns the index of a built event or null. @@ -86,14 +82,14 @@ interface Timeline { fun getIndexOfEvent(eventId: String?): Int? /** - * Returns the built [TimelineEvent] at index or null + * Returns the current pagination state for the direction. */ - fun getTimelineEventAtIndex(index: Int): TimelineEvent? + fun getPaginationState(direction: Direction): PaginationState /** - * Returns the built [TimelineEvent] with eventId or null + * Returns a snapshot of the timeline in his current state. */ - fun getTimelineEventWithId(eventId: String?): TimelineEvent? + fun getSnapshot(): List interface Listener { /** @@ -101,19 +97,33 @@ interface Timeline { * The latest event is the first in the list * @param snapshot the most up to date snapshot */ - fun onTimelineUpdated(snapshot: List) + fun onTimelineUpdated(snapshot: List) = Unit /** * Called whenever an error we can't recover from occurred */ - fun onTimelineFailure(throwable: Throwable) + fun onTimelineFailure(throwable: Throwable) = Unit /** * Called when new events come through the sync */ - fun onNewTimelineEvents(eventIds: List) + fun onNewTimelineEvents(eventIds: List) = Unit + + /** + * Called when the pagination state has changed in one direction + */ + fun onStateUpdated(direction: Direction, state: PaginationState) = Unit } + /** + * Pagination state + */ + data class PaginationState( + val hasMoreToLoad: Boolean = true, + val loading: Boolean = false, + val inError: Boolean = false + ) + /** * This is used to paginate in one or another direction. */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt index 932439c81c..45dc322420 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt @@ -47,6 +47,10 @@ data class TimelineEvent( */ val localId: Long, val eventId: String, + /** + * This display index is the position in the current chunk. + * It's not unique on the timeline as it's reset on each chunk. + */ val displayIndex: Int, val senderInfo: SenderInfo, val annotations: EventAnnotationsSummary? = null, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt deleted file mode 100644 index 7341d4656a..0000000000 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2020 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.database - -import io.realm.Realm -import io.realm.RealmConfiguration -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.SessionLifecycleObserver -import org.matrix.android.sdk.internal.database.helper.nextDisplayIndex -import org.matrix.android.sdk.internal.database.model.ChunkEntity -import org.matrix.android.sdk.internal.database.model.ChunkEntityFields -import org.matrix.android.sdk.internal.database.model.EventEntity -import org.matrix.android.sdk.internal.database.model.RoomEntity -import org.matrix.android.sdk.internal.database.model.TimelineEventEntity -import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields -import org.matrix.android.sdk.internal.database.model.deleteOnCascade -import org.matrix.android.sdk.internal.di.SessionDatabase -import org.matrix.android.sdk.internal.session.room.timeline.PaginationDirection -import org.matrix.android.sdk.internal.task.TaskExecutor -import timber.log.Timber -import javax.inject.Inject - -private const val MAX_NUMBER_OF_EVENTS_IN_DB = 35_000L -private const val MIN_NUMBER_OF_EVENTS_BY_CHUNK = 300 - -/** - * This class makes sure to stay under a maximum number of events as it makes Realm to be unusable when listening to events - * when the database is getting too big. This will try incrementally to remove the biggest chunks until we get below the threshold. - * We make sure to still have a minimum number of events so it's not becoming unusable. - * So this won't work for users with a big number of very active rooms. - */ -internal class DatabaseCleaner @Inject constructor(@SessionDatabase private val realmConfiguration: RealmConfiguration, - private val taskExecutor: TaskExecutor) : SessionLifecycleObserver { - - override fun onSessionStarted(session: Session) { - taskExecutor.executorScope.launch(Dispatchers.Default) { - awaitTransaction(realmConfiguration) { realm -> - val allRooms = realm.where(RoomEntity::class.java).findAll() - Timber.v("There are ${allRooms.size} rooms in this session") - cleanUp(realm, MAX_NUMBER_OF_EVENTS_IN_DB / 2L) - } - } - } - - private fun cleanUp(realm: Realm, threshold: Long) { - val numberOfEvents = realm.where(EventEntity::class.java).findAll().size - val numberOfTimelineEvents = realm.where(TimelineEventEntity::class.java).findAll().size - Timber.v("Number of events in db: $numberOfEvents | Number of timeline events in db: $numberOfTimelineEvents") - if (threshold <= MIN_NUMBER_OF_EVENTS_BY_CHUNK || numberOfTimelineEvents < MAX_NUMBER_OF_EVENTS_IN_DB) { - Timber.v("Db is low enough") - } else { - val thresholdChunks = realm.where(ChunkEntity::class.java) - .greaterThan(ChunkEntityFields.NUMBER_OF_TIMELINE_EVENTS, threshold) - .findAll() - - Timber.v("There are ${thresholdChunks.size} chunks to clean with more than $threshold events") - for (chunk in thresholdChunks) { - val maxDisplayIndex = chunk.nextDisplayIndex(PaginationDirection.FORWARDS) - val thresholdDisplayIndex = maxDisplayIndex - threshold - val eventsToRemove = chunk.timelineEvents.where().lessThan(TimelineEventEntityFields.DISPLAY_INDEX, thresholdDisplayIndex).findAll() - Timber.v("There are ${eventsToRemove.size} events to clean in chunk: ${chunk.identifier()} from room ${chunk.room?.first()?.roomId}") - chunk.numberOfTimelineEvents = chunk.numberOfTimelineEvents - eventsToRemove.size - eventsToRemove.forEach { - val canDeleteRoot = it.root?.stateKey == null - it.deleteOnCascade(canDeleteRoot) - } - // We reset the prevToken so we will need to fetch again. - chunk.prevToken = null - } - cleanUp(realm, (threshold / 1.5).toLong()) - } - } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt index 2256d93100..508af250c2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt @@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent import org.matrix.android.sdk.api.session.room.model.VersioningState import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent import org.matrix.android.sdk.api.session.room.model.tag.RoomTag +import org.matrix.android.sdk.internal.database.model.ChunkEntityFields import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntityFields import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntityFields import org.matrix.android.sdk.internal.database.model.EditionOfEventFields @@ -54,7 +55,7 @@ internal class RealmSessionStoreMigration @Inject constructor( ) : RealmMigration { companion object { - const val SESSION_STORE_SCHEMA_VERSION = 19L + const val SESSION_STORE_SCHEMA_VERSION = 20L } /** @@ -86,6 +87,7 @@ internal class RealmSessionStoreMigration @Inject constructor( if (oldVersion <= 16) migrateTo17(realm) if (oldVersion <= 17) migrateTo18(realm) if (oldVersion <= 18) migrateTo19(realm) + if (oldVersion <= 19) migrateTo20(realm) } private fun migrateTo1(realm: DynamicRealm) { @@ -390,4 +392,26 @@ internal class RealmSessionStoreMigration @Inject constructor( } } } + + private fun migrateTo20(realm: DynamicRealm) { + Timber.d("Step 19 -> 20") + realm.schema.get("ChunkEntity")?.apply { + if (hasField("numberOfTimelineEvents")) { + removeField("numberOfTimelineEvents") + } + var cleanOldChunks = false + if (!hasField(ChunkEntityFields.NEXT_CHUNK.`$`)) { + cleanOldChunks = true + addRealmObjectField(ChunkEntityFields.NEXT_CHUNK.`$`, this) + } + if (!hasField(ChunkEntityFields.PREV_CHUNK.`$`)) { + cleanOldChunks = true + addRealmObjectField(ChunkEntityFields.PREV_CHUNK.`$`, this) + } + if (cleanOldChunks) { + val chunkEntities = realm.where("ChunkEntity").equalTo(ChunkEntityFields.IS_LAST_FORWARD, false).findAll() + chunkEntities.deleteAllFromRealm() + } + } + } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt index f74e4b0f4c..c21bf74d93 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt @@ -110,7 +110,7 @@ internal fun ChunkEntity.addTimelineEvent(roomId: String, true } } - numberOfTimelineEvents++ + // numberOfTimelineEvents++ timelineEvents.add(timelineEventEntity) } @@ -191,3 +191,29 @@ internal fun ChunkEntity.nextDisplayIndex(direction: PaginationDirection): Int { } } } + +internal fun ChunkEntity.doesNextChunksVerifyCondition(linkCondition: (ChunkEntity) -> Boolean): Boolean { + var nextChunkToCheck = this.nextChunk + while (nextChunkToCheck != null) { + if (linkCondition(nextChunkToCheck)) { + return true + } + nextChunkToCheck = nextChunkToCheck.nextChunk + } + return false +} + +internal fun ChunkEntity.isMoreRecentThan(chunkToCheck: ChunkEntity): Boolean { + if (this.isLastForward) return true + if (chunkToCheck.isLastForward) return false + // Check if the chunk to check is linked to this one + if (chunkToCheck.doesNextChunksVerifyCondition { it == this }) { + return true + } + // Otherwise check if this chunk is linked to last forward + if (this.doesNextChunksVerifyCondition { it.isLastForward }) { + return true + } + // We don't know, so we assume it's false + return false +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt index 3993e8e799..1d2cbcad51 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt @@ -28,3 +28,13 @@ internal fun TimelineEventEntity.Companion.nextId(realm: Realm): Long { currentIdNum.toLong() + 1 } } + +internal fun TimelineEventEntity.isMoreRecentThan(eventToCheck: TimelineEventEntity): Boolean { + val currentChunk = this.chunk?.first() ?: return false + val chunkToCheck = eventToCheck.chunk?.firstOrNull() ?: return false + return if (currentChunk == chunkToCheck) { + this.displayIndex >= eventToCheck.displayIndex + } else { + currentChunk.isMoreRecentThan(chunkToCheck) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt index 68533a3c19..ecb602019a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt @@ -27,9 +27,10 @@ import org.matrix.android.sdk.internal.extensions.clearWith internal open class ChunkEntity(@Index var prevToken: String? = null, // Because of gaps we can have several chunks with nextToken == null @Index var nextToken: String? = null, + var prevChunk: ChunkEntity? = null, + var nextChunk: ChunkEntity? = null, var stateEvents: RealmList = RealmList(), var timelineEvents: RealmList = RealmList(), - var numberOfTimelineEvents: Long = 0, // Only one chunk will have isLastForward == true @Index var isLastForward: Boolean = false, @Index var isLastBackward: Boolean = false diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt index 836fc4efaf..ce2d1efc1d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt @@ -40,8 +40,6 @@ internal open class EventEntity(@Index var eventId: String = "", var unsignedData: String? = null, var redacts: String? = null, var decryptionResultJson: String? = null, - var decryptionErrorCode: String? = null, - var decryptionErrorReason: String? = null, var ageLocalTs: Long? = null ) : RealmObject() { @@ -55,6 +53,16 @@ internal open class EventEntity(@Index var eventId: String = "", sendStateStr = value.name } + var decryptionErrorCode: String? = null + set(value) { + if (value != field) field = value + } + + var decryptionErrorReason: String? = null + set(value) { + if (value != field) field = value + } + companion object fun setDecryptionResult(result: MXEventDecryptionResult, clearEvent: JsonDict? = null) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt index 30bbde70c2..185f0e2dcc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt @@ -46,7 +46,5 @@ internal fun TimelineEventEntity.deleteOnCascade(canDeleteRoot: Boolean) { if (canDeleteRoot) { root?.deleteFromRealm() } - annotations?.deleteOnCascade() - readReceipts?.deleteOnCascade() deleteFromRealm() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt index 60096777d9..c9c96b9cc1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt @@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.database.query import io.realm.Realm import io.realm.RealmConfiguration import org.matrix.android.sdk.api.session.events.model.LocalEcho +import org.matrix.android.sdk.internal.database.helper.isMoreRecentThan import org.matrix.android.sdk.internal.database.model.ChunkEntity import org.matrix.android.sdk.internal.database.model.ReadMarkerEntity import org.matrix.android.sdk.internal.database.model.ReadReceiptEntity @@ -33,28 +34,26 @@ internal fun isEventRead(realmConfiguration: RealmConfiguration, if (LocalEcho.isLocalEchoId(eventId)) { return true } + // If we don't know if the event has been read, we assume it's not var isEventRead = false Realm.getInstance(realmConfiguration).use { realm -> - val liveChunk = ChunkEntity.findLastForwardChunkOfRoom(realm, roomId) ?: return@use - val eventToCheck = liveChunk.timelineEvents.find(eventId) + val latestEvent = TimelineEventEntity.latestEvent(realm, roomId, true) + // If latest event is from you we are sure the event is read + if (latestEvent?.root?.sender == userId) { + return true + } + val eventToCheck = TimelineEventEntity.where(realm, roomId, eventId).findFirst() isEventRead = when { - eventToCheck == null -> hasReadMissingEvent( - realm = realm, - latestChunkEntity = liveChunk, - roomId = roomId, - userId = userId, - eventId = eventId - ) + eventToCheck == null -> false eventToCheck.root?.sender == userId -> true else -> { val readReceipt = ReadReceiptEntity.where(realm, roomId, userId).findFirst() ?: return@use - val readReceiptIndex = liveChunk.timelineEvents.find(readReceipt.eventId)?.displayIndex ?: Int.MIN_VALUE - eventToCheck.displayIndex <= readReceiptIndex + val readReceiptEvent = TimelineEventEntity.where(realm, roomId, readReceipt.eventId).findFirst() ?: return@use + readReceiptEvent.isMoreRecentThan(eventToCheck) } } } - return isEventRead } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt index ebc2176a13..e2cfea479d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt @@ -47,7 +47,6 @@ import org.matrix.android.sdk.internal.crypto.secrets.DefaultSharedSecretStorage import org.matrix.android.sdk.internal.crypto.tasks.DefaultRedactEventTask import org.matrix.android.sdk.internal.crypto.tasks.RedactEventTask import org.matrix.android.sdk.internal.crypto.verification.VerificationMessageProcessor -import org.matrix.android.sdk.internal.database.DatabaseCleaner import org.matrix.android.sdk.internal.database.EventInsertLiveObserver import org.matrix.android.sdk.internal.database.RealmSessionProvider import org.matrix.android.sdk.internal.database.SessionRealmConfigurationFactory @@ -339,10 +338,6 @@ internal abstract class SessionModule { @IntoSet abstract fun bindIdentityService(service: DefaultIdentityService): SessionLifecycleObserver - @Binds - @IntoSet - abstract fun bindDatabaseCleaner(cleaner: DatabaseCleaner): SessionLifecycleObserver - @Binds @IntoSet abstract fun bindRealmSessionProvider(provider: RealmSessionProvider): SessionLifecycleObserver diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt index 28f55a01ee..b30c66c82e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt @@ -34,12 +34,10 @@ import org.matrix.android.sdk.internal.database.query.isEventRead import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.UserId -import org.matrix.android.sdk.internal.task.TaskExecutor internal class DefaultReadService @AssistedInject constructor( @Assisted private val roomId: String, @SessionDatabase private val monarchy: Monarchy, - private val taskExecutor: TaskExecutor, private val setReadMarkersTask: SetReadMarkersTask, private val readReceiptsSummaryMapper: ReadReceiptsSummaryMapper, @UserId private val userId: String diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt index 3556cabb33..f3ff38e237 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt @@ -136,7 +136,7 @@ internal class RoomSummaryUpdater @Inject constructor( roomSummaryEntity.hasUnreadMessages = roomSummaryEntity.notificationCount > 0 || // avoid this call if we are sure there are unread events - !isEventRead(realm.configuration, userId, roomId, latestPreviewableEvent?.eventId) + latestPreviewableEvent?.let { !isEventRead(realm.configuration, userId, roomId, it.eventId) } ?: false roomSummaryEntity.setDisplayName(roomDisplayNameResolver.resolve(realm, roomId)) roomSummaryEntity.avatarUrl = roomAvatarResolver.resolve(realm, roomId) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index 2744b5129e..71823cd458 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright (c) 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. @@ -16,172 +16,328 @@ package org.matrix.android.sdk.internal.session.room.timeline -import io.realm.OrderedCollectionChangeSet -import io.realm.OrderedRealmCollectionChangeListener import io.realm.Realm import io.realm.RealmConfiguration -import io.realm.RealmQuery -import io.realm.RealmResults -import io.realm.Sort -import kotlinx.coroutines.runBlocking -import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.extensions.orFalse +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.android.asCoroutineDispatcher +import kotlinx.coroutines.cancelChildren +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.sample +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import okhttp3.internal.closeQuietly +import org.matrix.android.sdk.api.MatrixCoroutineDispatchers import org.matrix.android.sdk.api.extensions.tryOrNull -import org.matrix.android.sdk.api.session.events.model.EventType -import org.matrix.android.sdk.api.session.room.send.SendState import org.matrix.android.sdk.api.session.room.timeline.Timeline import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings -import org.matrix.android.sdk.api.util.CancelableBag -import org.matrix.android.sdk.internal.database.RealmSessionProvider -import org.matrix.android.sdk.internal.database.mapper.EventMapper import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper -import org.matrix.android.sdk.internal.database.model.ChunkEntity -import org.matrix.android.sdk.internal.database.model.RoomEntity -import org.matrix.android.sdk.internal.database.model.TimelineEventEntity -import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields -import org.matrix.android.sdk.internal.database.query.findAllInRoomWithSendStates -import org.matrix.android.sdk.internal.database.query.where -import org.matrix.android.sdk.internal.database.query.whereRoomId import org.matrix.android.sdk.internal.session.room.membership.LoadRoomMembersTask import org.matrix.android.sdk.internal.session.sync.handler.room.ReadReceiptHandler import org.matrix.android.sdk.internal.session.sync.handler.room.ThreadsAwarenessHandler -import org.matrix.android.sdk.internal.task.TaskExecutor -import org.matrix.android.sdk.internal.task.configureWith -import org.matrix.android.sdk.internal.util.Debouncer +import org.matrix.android.sdk.internal.task.SemaphoreCoroutineSequencer import org.matrix.android.sdk.internal.util.createBackgroundHandler -import org.matrix.android.sdk.internal.util.createUIHandler import timber.log.Timber -import java.util.Collections import java.util.UUID import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference -import kotlin.math.max -private const val MIN_FETCHING_COUNT = 30 - -internal class DefaultTimeline( - private val roomId: String, - private var initialEventId: String? = null, - private val realmConfiguration: RealmConfiguration, - private val taskExecutor: TaskExecutor, - private val contextOfEventTask: GetContextOfEventTask, - private val fetchTokenAndPaginateTask: FetchTokenAndPaginateTask, - private val paginationTask: PaginationTask, - private val timelineEventMapper: TimelineEventMapper, - private val settings: TimelineSettings, - private val timelineInput: TimelineInput, - private val eventDecryptor: TimelineEventDecryptor, - private val realmSessionProvider: RealmSessionProvider, - private val loadRoomMembersTask: LoadRoomMembersTask, - private val threadsAwarenessHandler: ThreadsAwarenessHandler, - private val readReceiptHandler: ReadReceiptHandler -) : Timeline, - TimelineInput.Listener, - UIEchoManager.Listener { +internal class DefaultTimeline(private val roomId: String, + private val initialEventId: String?, + private val realmConfiguration: RealmConfiguration, + private val loadRoomMembersTask: LoadRoomMembersTask, + private val readReceiptHandler: ReadReceiptHandler, + private val settings: TimelineSettings, + private val coroutineDispatchers: MatrixCoroutineDispatchers, + paginationTask: PaginationTask, + getEventTask: GetContextOfEventTask, + fetchTokenAndPaginateTask: FetchTokenAndPaginateTask, + timelineEventMapper: TimelineEventMapper, + timelineInput: TimelineInput, + threadsAwarenessHandler: ThreadsAwarenessHandler, + eventDecryptor: TimelineEventDecryptor) : Timeline { companion object { - val BACKGROUND_HANDLER = createBackgroundHandler("TIMELINE_DB_THREAD") + val BACKGROUND_HANDLER = createBackgroundHandler("DefaultTimeline_Thread") } - private val listeners = CopyOnWriteArrayList() - private val isStarted = AtomicBoolean(false) - private val isReady = AtomicBoolean(false) - private val mainHandler = createUIHandler() - private val backgroundRealm = AtomicReference() - private val cancelableBag = CancelableBag() - private val debouncer = Debouncer(mainHandler) - - private lateinit var timelineEvents: RealmResults - private lateinit var sendingEvents: RealmResults - - private var prevDisplayIndex: Int? = null - private var nextDisplayIndex: Int? = null - - private val uiEchoManager = UIEchoManager(settings, this) - - private val builtEvents = Collections.synchronizedList(ArrayList()) - private val builtEventsIdMap = Collections.synchronizedMap(HashMap()) - private val backwardsState = AtomicReference(TimelineState()) - private val forwardsState = AtomicReference(TimelineState()) - override val timelineID = UUID.randomUUID().toString() - override val isLive - get() = !hasMoreToLoad(Timeline.Direction.FORWARDS) + private val listeners = CopyOnWriteArrayList() + private val isStarted = AtomicBoolean(false) + private val forwardState = AtomicReference(Timeline.PaginationState()) + private val backwardState = AtomicReference(Timeline.PaginationState()) - private val eventsChangeListener = OrderedRealmCollectionChangeListener> { results, changeSet -> - if (!results.isLoaded || !results.isValid) { - return@OrderedRealmCollectionChangeListener + private val backgroundRealm = AtomicReference() + private val timelineDispatcher = BACKGROUND_HANDLER.asCoroutineDispatcher() + private val timelineScope = CoroutineScope(SupervisorJob() + timelineDispatcher) + private val sequencer = SemaphoreCoroutineSequencer() + private val postSnapshotSignalFlow = MutableSharedFlow(0) + + private val strategyDependencies = LoadTimelineStrategy.Dependencies( + timelineSettings = settings, + realm = backgroundRealm, + eventDecryptor = eventDecryptor, + paginationTask = paginationTask, + fetchTokenAndPaginateTask = fetchTokenAndPaginateTask, + getContextOfEventTask = getEventTask, + timelineInput = timelineInput, + timelineEventMapper = timelineEventMapper, + threadsAwarenessHandler = threadsAwarenessHandler, + onEventsUpdated = this::sendSignalToPostSnapshot, + onLimitedTimeline = this::onLimitedTimeline, + onNewTimelineEvents = this::onNewTimelineEvents + ) + + private var strategy: LoadTimelineStrategy = buildStrategy(LoadTimelineStrategy.Mode.Live) + + override val isLive: Boolean + get() = !getPaginationState(Timeline.Direction.FORWARDS).hasMoreToLoad + + override fun addListener(listener: Timeline.Listener): Boolean { + listeners.add(listener) + timelineScope.launch { + val snapshot = strategy.buildSnapshot() + withContext(coroutineDispatchers.main) { + tryOrNull { listener.onTimelineUpdated(snapshot) } + } } - Timber.v("## SendEvent: [${System.currentTimeMillis()}] DB update for room $roomId") - handleUpdates(results, changeSet) + return true } - // Public methods ****************************************************************************** + override fun removeListener(listener: Timeline.Listener): Boolean { + return listeners.remove(listener) + } + + override fun removeAllListeners() { + listeners.clear() + } + + override fun start() { + timelineScope.launch { + loadRoomMembersIfNeeded() + } + timelineScope.launch { + sequencer.post { + if (isStarted.compareAndSet(false, true)) { + val realm = Realm.getInstance(realmConfiguration) + ensureReadReceiptAreLoaded(realm) + backgroundRealm.set(realm) + listenToPostSnapshotSignals() + openAround(initialEventId) + postSnapshot() + } + } + } + } + + override fun dispose() { + timelineScope.coroutineContext.cancelChildren() + timelineScope.launch { + sequencer.post { + if (isStarted.compareAndSet(true, false)) { + strategy.onStop() + backgroundRealm.get().closeQuietly() + } + } + } + } + + override fun restartWithEventId(eventId: String?) { + timelineScope.launch { + openAround(eventId) + postSnapshot() + } + } + + override fun hasMoreToLoad(direction: Timeline.Direction): Boolean { + return getPaginationState(direction).hasMoreToLoad + } override fun paginate(direction: Timeline.Direction, count: Int) { - BACKGROUND_HANDLER.post { - if (!canPaginate(direction)) { - return@post - } - Timber.v("Paginate $direction of $count items") - val startDisplayIndex = if (direction == Timeline.Direction.BACKWARDS) prevDisplayIndex else nextDisplayIndex - val shouldPostSnapshot = paginateInternal(startDisplayIndex, direction, count) - if (shouldPostSnapshot) { + timelineScope.launch { + val postSnapshot = loadMore(count, direction, fetchOnServerIfNeeded = true) + if (postSnapshot) { postSnapshot() } } } - override fun pendingEventCount(): Int { - return realmSessionProvider.withRealm { - RoomEntity.where(it, roomId).findFirst()?.sendingTimelineEvents?.count() ?: 0 + override suspend fun awaitPaginate(direction: Timeline.Direction, count: Int): List { + withContext(timelineDispatcher) { + loadMore(count, direction, fetchOnServerIfNeeded = true) + } + return getSnapshot() + } + + override fun getSnapshot(): List { + return strategy.buildSnapshot() + } + + override fun getIndexOfEvent(eventId: String?): Int? { + if (eventId == null) return null + return strategy.getBuiltEventIndex(eventId) + } + + override fun getPaginationState(direction: Timeline.Direction): Timeline.PaginationState { + return if (direction == Timeline.Direction.BACKWARDS) { + backwardState + } else { + forwardState + }.get() + } + + private suspend fun loadMore(count: Int, direction: Timeline.Direction, fetchOnServerIfNeeded: Boolean): Boolean { + val baseLogMessage = "loadMore(count: $count, direction: $direction, roomId: $roomId, fetchOnServer: $fetchOnServerIfNeeded)" + Timber.v("$baseLogMessage started") + if (!isStarted.get()) { + throw IllegalStateException("You should call start before using timeline") + } + val currentState = getPaginationState(direction) + if (!currentState.hasMoreToLoad) { + Timber.v("$baseLogMessage : nothing more to load") + return false + } + if (currentState.loading) { + Timber.v("$baseLogMessage : already loading") + return false + } + updateState(direction) { + it.copy(loading = true) + } + val loadMoreResult = strategy.loadMore(count, direction, fetchOnServerIfNeeded) + Timber.v("$baseLogMessage: result $loadMoreResult") + val hasMoreToLoad = loadMoreResult != LoadMoreResult.REACHED_END + updateState(direction) { + it.copy(loading = false, hasMoreToLoad = hasMoreToLoad) + } + return true + } + + private suspend fun openAround(eventId: String?) = withContext(timelineDispatcher) { + val baseLogMessage = "openAround(eventId: $eventId)" + Timber.v("$baseLogMessage started") + if (!isStarted.get()) { + throw IllegalStateException("You should call start before using timeline") + } + strategy.onStop() + strategy = if (eventId == null) { + buildStrategy(LoadTimelineStrategy.Mode.Live) + } else { + buildStrategy(LoadTimelineStrategy.Mode.Permalink(eventId)) + } + initPaginationStates(eventId) + strategy.onStart() + loadMore( + count = strategyDependencies.timelineSettings.initialSize, + direction = Timeline.Direction.BACKWARDS, + fetchOnServerIfNeeded = false + ) + Timber.v("$baseLogMessage finished") + } + + private fun initPaginationStates(eventId: String?) { + updateState(Timeline.Direction.FORWARDS) { + it.copy(loading = false, hasMoreToLoad = eventId != null) + } + updateState(Timeline.Direction.BACKWARDS) { + it.copy(loading = false, hasMoreToLoad = true) } } - override fun failedToDeliverEventCount(): Int { - return realmSessionProvider.withRealm { - TimelineEventEntity.findAllInRoomWithSendStates(it, roomId, SendState.HAS_FAILED_STATES).count() + private fun sendSignalToPostSnapshot(withThrottling: Boolean) { + timelineScope.launch { + if (withThrottling) { + postSnapshotSignalFlow.emit(Unit) + } else { + postSnapshot() + } } } - override fun start() { - if (isStarted.compareAndSet(false, true)) { - Timber.v("Start timeline for roomId: $roomId and eventId: $initialEventId") - timelineInput.listeners.add(this) - BACKGROUND_HANDLER.post { - eventDecryptor.start() - val realm = Realm.getInstance(realmConfiguration) - backgroundRealm.set(realm) - - val roomEntity = RoomEntity.where(realm, roomId = roomId).findFirst() - ?: throw IllegalStateException("Can't open a timeline without a room") - - // We don't want to filter here because some sending events that are not displayed - // are still used for ui echo (relation like reaction) - sendingEvents = roomEntity.sendingTimelineEvents.where()/*.filterEventsWithSettings()*/.findAll() - sendingEvents.addChangeListener { events -> - uiEchoManager.onSentEventsInDatabase(events.map { it.eventId }) + @Suppress("EXPERIMENTAL_API_USAGE") + private fun listenToPostSnapshotSignals() { + postSnapshotSignalFlow + .sample(150) + .onEach { postSnapshot() } + .launchIn(timelineScope) + } - timelineEvents = buildEventQuery(realm).sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING).findAll() - timelineEvents.addChangeListener(eventsChangeListener) - handleInitialLoad() - loadRoomMembersTask - .configureWith(LoadRoomMembersTask.Params(roomId)) - .executeBy(taskExecutor) + private fun onLimitedTimeline() { + timelineScope.launch { + initPaginationStates(null) + loadMore(settings.initialSize, Timeline.Direction.BACKWARDS, false) + postSnapshot() + } + } - // Ensure ReadReceipt from init sync are loaded - ensureReadReceiptAreLoaded(realm) - - isReady.set(true) + private suspend fun postSnapshot() { + val snapshot = strategy.buildSnapshot() + Timber.v("Post snapshot of ${snapshot.size} events") + withContext(coroutineDispatchers.main) { + listeners.forEach { + tryOrNull { it.onTimelineUpdated(snapshot) } } } } + private fun onNewTimelineEvents(eventIds: List) { + timelineScope.launch(coroutineDispatchers.main) { + listeners.forEach { + tryOrNull { it.onNewTimelineEvents(eventIds) } + } + } + } + + private fun updateState(direction: Timeline.Direction, update: (Timeline.PaginationState) -> Timeline.PaginationState) { + val stateReference = when (direction) { + Timeline.Direction.FORWARDS -> forwardState + Timeline.Direction.BACKWARDS -> backwardState + } + val currentValue = stateReference.get() + val newValue = update(currentValue) + stateReference.set(newValue) + if (newValue != currentValue) { + postPaginationState(direction, newValue) + } + } + + private fun postPaginationState(direction: Timeline.Direction, state: Timeline.PaginationState) { + timelineScope.launch(coroutineDispatchers.main) { + Timber.v("Post $direction pagination state: $state ") + listeners.forEach { + tryOrNull { it.onStateUpdated(direction, state) } + } + } + } + + private fun buildStrategy(mode: LoadTimelineStrategy.Mode): LoadTimelineStrategy { + return LoadTimelineStrategy( + roomId = roomId, + timelineId = timelineID, + mode = mode, + dependencies = strategyDependencies + ) + } + + private suspend fun loadRoomMembersIfNeeded() { + val loadRoomMembersParam = LoadRoomMembersTask.Params(roomId) + try { + loadRoomMembersTask.execute(loadRoomMembersParam) + } catch (failure: Throwable) { + Timber.v("Failed to load room members. Retry in 10s.") + delay(10_000L) + loadRoomMembersIfNeeded() + } + } + private fun ensureReadReceiptAreLoaded(realm: Realm) { readReceiptHandler.getContentFromInitSync(roomId) ?.also { @@ -194,560 +350,4 @@ internal class DefaultTimeline( } } } - - override fun dispose() { - if (isStarted.compareAndSet(true, false)) { - isReady.set(false) - timelineInput.listeners.remove(this) - Timber.v("Dispose timeline for roomId: $roomId and eventId: $initialEventId") - cancelableBag.cancel() - BACKGROUND_HANDLER.removeCallbacksAndMessages(null) - BACKGROUND_HANDLER.post { - if (this::sendingEvents.isInitialized) { - sendingEvents.removeAllChangeListeners() - } - if (this::timelineEvents.isInitialized) { - timelineEvents.removeAllChangeListeners() - } - clearAllValues() - backgroundRealm.getAndSet(null).also { - it?.close() - } - eventDecryptor.destroy() - } - } - } - - override fun restartWithEventId(eventId: String?) { - dispose() - initialEventId = eventId - start() - postSnapshot() - } - - override fun getTimelineEventAtIndex(index: Int): TimelineEvent? { - return builtEvents.getOrNull(index) - } - - override fun getIndexOfEvent(eventId: String?): Int? { - return builtEventsIdMap[eventId] - } - - override fun getTimelineEventWithId(eventId: String?): TimelineEvent? { - return builtEventsIdMap[eventId]?.let { - getTimelineEventAtIndex(it) - } - } - - override fun hasMoreToLoad(direction: Timeline.Direction): Boolean { - return hasMoreInCache(direction) || !hasReachedEnd(direction) - } - - override fun addListener(listener: Timeline.Listener): Boolean { - if (listeners.contains(listener)) { - return false - } - return listeners.add(listener).also { - postSnapshot() - } - } - - override fun removeListener(listener: Timeline.Listener): Boolean { - return listeners.remove(listener) - } - - override fun removeAllListeners() { - listeners.clear() - } - - override fun onNewTimelineEvents(roomId: String, eventIds: List) { - if (isLive && this.roomId == roomId) { - listeners.forEach { - it.onNewTimelineEvents(eventIds) - } - } - } - - override fun onLocalEchoCreated(roomId: String, timelineEvent: TimelineEvent) { - if (roomId != this.roomId || !isLive) return - uiEchoManager.onLocalEchoCreated(timelineEvent) - listeners.forEach { - tryOrNull { - it.onNewTimelineEvents(listOf(timelineEvent.eventId)) - } - } - postSnapshot() - } - - override fun onLocalEchoUpdated(roomId: String, eventId: String, sendState: SendState) { - if (roomId != this.roomId || !isLive) return - if (uiEchoManager.onSendStateUpdated(eventId, sendState)) { - postSnapshot() - } - } - - override fun rebuildEvent(eventId: String, builder: (TimelineEvent) -> TimelineEvent?): Boolean { - return tryOrNull { - builtEventsIdMap[eventId]?.let { builtIndex -> - // Update the relation of existing event - builtEvents[builtIndex]?.let { te -> - val rebuiltEvent = builder(te) - // If rebuilt event is filtered its returned as null and should be removed. - if (rebuiltEvent == null) { - builtEventsIdMap.remove(eventId) - builtEventsIdMap.entries.filter { it.value > builtIndex }.forEach { it.setValue(it.value - 1) } - builtEvents.removeAt(builtIndex) - } else { - builtEvents[builtIndex] = rebuiltEvent - } - true - } - } - } ?: false - } - -// Private methods ***************************************************************************** - - private fun hasMoreInCache(direction: Timeline.Direction) = getState(direction).hasMoreInCache - - private fun hasReachedEnd(direction: Timeline.Direction) = getState(direction).hasReachedEnd - - private fun updateLoadingStates(results: RealmResults) { - val lastCacheEvent = results.lastOrNull() - val firstCacheEvent = results.firstOrNull() - val chunkEntity = getLiveChunk() - - updateState(Timeline.Direction.FORWARDS) { - it.copy( - hasMoreInCache = !builtEventsIdMap.containsKey(firstCacheEvent?.eventId), - hasReachedEnd = chunkEntity?.isLastForward ?: false - ) - } - updateState(Timeline.Direction.BACKWARDS) { - it.copy( - hasMoreInCache = !builtEventsIdMap.containsKey(lastCacheEvent?.eventId), - hasReachedEnd = chunkEntity?.isLastBackward ?: false || lastCacheEvent?.root?.type == EventType.STATE_ROOM_CREATE - ) - } - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - * @return true if createSnapshot should be posted - */ - private fun paginateInternal(startDisplayIndex: Int?, - direction: Timeline.Direction, - count: Int): Boolean { - if (count == 0) { - return false - } - updateState(direction) { it.copy(requestedPaginationCount = count, isPaginating = true) } - val builtCount = buildTimelineEvents(startDisplayIndex, direction, count.toLong()) - val shouldFetchMore = builtCount < count && !hasReachedEnd(direction) - if (shouldFetchMore) { - val newRequestedCount = count - builtCount - updateState(direction) { it.copy(requestedPaginationCount = newRequestedCount) } - val fetchingCount = max(MIN_FETCHING_COUNT, newRequestedCount) - executePaginationTask(direction, fetchingCount) - } else { - updateState(direction) { it.copy(isPaginating = false, requestedPaginationCount = 0) } - } - return !shouldFetchMore - } - - private fun createSnapshot(): List { - return buildSendingEvents() + builtEvents.toList() - } - - private fun buildSendingEvents(): List { - val builtSendingEvents = mutableListOf() - if (hasReachedEnd(Timeline.Direction.FORWARDS) && !hasMoreInCache(Timeline.Direction.FORWARDS)) { - uiEchoManager.getInMemorySendingEvents() - .updateWithUiEchoInto(builtSendingEvents) - sendingEvents - .filter { timelineEvent -> - builtSendingEvents.none { it.eventId == timelineEvent.eventId } - } - .map { timelineEventMapper.map(it) } - .updateWithUiEchoInto(builtSendingEvents) - } - return builtSendingEvents - } - - private fun List.updateWithUiEchoInto(target: MutableList) { - target.addAll( - // Get most up to date send state (in memory) - map { uiEchoManager.updateSentStateWithUiEcho(it) } - ) - } - - private fun canPaginate(direction: Timeline.Direction): Boolean { - return isReady.get() && !getState(direction).isPaginating && hasMoreToLoad(direction) - } - - private fun getState(direction: Timeline.Direction): TimelineState { - return when (direction) { - Timeline.Direction.FORWARDS -> forwardsState.get() - Timeline.Direction.BACKWARDS -> backwardsState.get() - } - } - - private fun updateState(direction: Timeline.Direction, update: (TimelineState) -> TimelineState) { - val stateReference = when (direction) { - Timeline.Direction.FORWARDS -> forwardsState - Timeline.Direction.BACKWARDS -> backwardsState - } - val currentValue = stateReference.get() - val newValue = update(currentValue) - stateReference.set(newValue) - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - */ - private fun handleInitialLoad() { - var shouldFetchInitialEvent = false - val currentInitialEventId = initialEventId - val initialDisplayIndex = if (currentInitialEventId == null) { - timelineEvents.firstOrNull()?.displayIndex - } else { - val initialEvent = timelineEvents.where() - .equalTo(TimelineEventEntityFields.EVENT_ID, initialEventId) - .findFirst() - - shouldFetchInitialEvent = initialEvent == null - initialEvent?.displayIndex - } - prevDisplayIndex = initialDisplayIndex - nextDisplayIndex = initialDisplayIndex - if (currentInitialEventId != null && shouldFetchInitialEvent) { - fetchEvent(currentInitialEventId) - } else { - val count = timelineEvents.size.coerceAtMost(settings.initialSize) - if (initialEventId == null) { - paginateInternal(initialDisplayIndex, Timeline.Direction.BACKWARDS, count) - } else { - paginateInternal(initialDisplayIndex, Timeline.Direction.FORWARDS, (count / 2).coerceAtLeast(1)) - paginateInternal(initialDisplayIndex?.minus(1), Timeline.Direction.BACKWARDS, (count / 2).coerceAtLeast(1)) - } - } - postSnapshot() - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - */ - private fun handleUpdates(results: RealmResults, changeSet: OrderedCollectionChangeSet) { - // If changeSet has deletion we are having a gap, so we clear everything - if (changeSet.deletionRanges.isNotEmpty()) { - clearAllValues() - } - var postSnapshot = false - changeSet.insertionRanges.forEach { range -> - val (startDisplayIndex, direction) = if (range.startIndex == 0) { - Pair(results[range.length - 1]!!.displayIndex, Timeline.Direction.FORWARDS) - } else { - Pair(results[range.startIndex]!!.displayIndex, Timeline.Direction.BACKWARDS) - } - val state = getState(direction) - if (state.isPaginating) { - // We are getting new items from pagination - postSnapshot = paginateInternal(startDisplayIndex, direction, state.requestedPaginationCount) - } else { - // We are getting new items from sync - buildTimelineEvents(startDisplayIndex, direction, range.length.toLong()) - postSnapshot = true - } - } - changeSet.changes.forEach { index -> - val eventEntity = results[index] - eventEntity?.eventId?.let { eventId -> - postSnapshot = rebuildEvent(eventId) { - buildTimelineEvent(eventEntity) - } || postSnapshot - } - } - if (postSnapshot) { - postSnapshot() - } - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - */ - private fun executePaginationTask(direction: Timeline.Direction, limit: Int) { - val currentChunk = getLiveChunk() - val token = if (direction == Timeline.Direction.BACKWARDS) currentChunk?.prevToken else currentChunk?.nextToken - if (token == null) { - if (direction == Timeline.Direction.BACKWARDS || - (direction == Timeline.Direction.FORWARDS && currentChunk?.hasBeenALastForwardChunk().orFalse())) { - // We are in the case where event exists, but we do not know the token. - // Fetch (again) the last event to get a token - val lastKnownEventId = if (direction == Timeline.Direction.FORWARDS) { - timelineEvents.firstOrNull()?.eventId - } else { - timelineEvents.lastOrNull()?.eventId - } - if (lastKnownEventId == null) { - updateState(direction) { it.copy(isPaginating = false, requestedPaginationCount = 0) } - } else { - val params = FetchTokenAndPaginateTask.Params( - roomId = roomId, - limit = limit, - direction = direction.toPaginationDirection(), - lastKnownEventId = lastKnownEventId - ) - cancelableBag += fetchTokenAndPaginateTask - .configureWith(params) { - this.callback = createPaginationCallback(limit, direction) - } - .executeBy(taskExecutor) - } - } else { - updateState(direction) { it.copy(isPaginating = false, requestedPaginationCount = 0) } - } - } else { - val params = PaginationTask.Params( - roomId = roomId, - from = token, - direction = direction.toPaginationDirection(), - limit = limit - ) - Timber.v("Should fetch $limit items $direction") - cancelableBag += paginationTask - .configureWith(params) { - this.callback = createPaginationCallback(limit, direction) - } - .executeBy(taskExecutor) - } - } - - // For debug purpose only - private fun dumpAndLogChunks() { - val liveChunk = getLiveChunk() - Timber.w("Live chunk: $liveChunk") - - Realm.getInstance(realmConfiguration).use { realm -> - ChunkEntity.where(realm, roomId).findAll() - .also { Timber.w("Found ${it.size} chunks") } - .forEach { - Timber.w("") - Timber.w("ChunkEntity: $it") - Timber.w("prevToken: ${it.prevToken}") - Timber.w("nextToken: ${it.nextToken}") - Timber.w("isLastBackward: ${it.isLastBackward}") - Timber.w("isLastForward: ${it.isLastForward}") - it.timelineEvents.forEach { tle -> - Timber.w(" TLE: ${tle.root?.content}") - } - } - } - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - */ - private fun getTokenLive(direction: Timeline.Direction): String? { - val chunkEntity = getLiveChunk() ?: return null - return if (direction == Timeline.Direction.BACKWARDS) chunkEntity.prevToken else chunkEntity.nextToken - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - * Return the current Chunk - */ - private fun getLiveChunk(): ChunkEntity? { - return timelineEvents.firstOrNull()?.chunk?.firstOrNull() - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - * @return the number of items who have been added - */ - private fun buildTimelineEvents(startDisplayIndex: Int?, - direction: Timeline.Direction, - count: Long): Int { - if (count < 1 || startDisplayIndex == null) { - return 0 - } - val start = System.currentTimeMillis() - val offsetResults = getOffsetResults(startDisplayIndex, direction, count) - if (offsetResults.isEmpty()) { - return 0 - } - val offsetIndex = offsetResults.last()!!.displayIndex - if (direction == Timeline.Direction.BACKWARDS) { - prevDisplayIndex = offsetIndex - 1 - } else { - nextDisplayIndex = offsetIndex + 1 - } - - // Prerequisite to in order for the ThreadsAwarenessHandler to work properly - fetchRootThreadEventsIfNeeded(offsetResults) - - offsetResults.forEach { eventEntity -> - - val timelineEvent = buildTimelineEvent(eventEntity) - val transactionId = timelineEvent.root.unsignedData?.transactionId - uiEchoManager.onSyncedEvent(transactionId) - - if (timelineEvent.isEncrypted() && - timelineEvent.root.mxDecryptionResult == null) { - timelineEvent.root.eventId?.also { eventDecryptor.requestDecryption(TimelineEventDecryptor.DecryptionRequest(timelineEvent.root, timelineID)) } - } - - val position = if (direction == Timeline.Direction.FORWARDS) 0 else builtEvents.size - builtEvents.add(position, timelineEvent) - // Need to shift :/ - builtEventsIdMap.entries.filter { it.value >= position }.forEach { it.setValue(it.value + 1) } - builtEventsIdMap[eventEntity.eventId] = position - } - val time = System.currentTimeMillis() - start - Timber.v("Built ${offsetResults.size} items from db in $time ms") - // For the case where wo reach the lastForward chunk - updateLoadingStates(timelineEvents) - return offsetResults.size - } - - /** - * This function is responsible to fetch and store the root event of a thread event - * in order to be able to display the event to the user appropriately - */ - private fun fetchRootThreadEventsIfNeeded(offsetResults: RealmResults) = runBlocking { - val eventEntityList = offsetResults - .mapNotNull { - it?.root - }.map { - EventMapper.map(it) - } - threadsAwarenessHandler.fetchRootThreadEventsIfNeeded(eventEntityList) - } - - private fun buildTimelineEvent(eventEntity: TimelineEventEntity): TimelineEvent { - return timelineEventMapper.map( - timelineEventEntity = eventEntity, - buildReadReceipts = settings.buildReadReceipts - ).let { timelineEvent -> - // eventually enhance with ui echo? - uiEchoManager.decorateEventWithReactionUiEcho(timelineEvent) ?: timelineEvent - } - } - - /** - * This has to be called on TimelineThread as it accesses realm live results - */ - private fun getOffsetResults(startDisplayIndex: Int, - direction: Timeline.Direction, - count: Long): RealmResults { - val offsetQuery = timelineEvents.where() - if (direction == Timeline.Direction.BACKWARDS) { - offsetQuery - .sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING) - .lessThanOrEqualTo(TimelineEventEntityFields.DISPLAY_INDEX, startDisplayIndex) - } else { - offsetQuery - .sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.ASCENDING) - .greaterThanOrEqualTo(TimelineEventEntityFields.DISPLAY_INDEX, startDisplayIndex) - } - return offsetQuery - .limit(count) - .findAll() - } - - private fun buildEventQuery(realm: Realm): RealmQuery { - return if (initialEventId == null) { - TimelineEventEntity - .whereRoomId(realm, roomId = roomId) - .equalTo(TimelineEventEntityFields.CHUNK.IS_LAST_FORWARD, true) - } else { - TimelineEventEntity - .whereRoomId(realm, roomId = roomId) - .`in`("${TimelineEventEntityFields.CHUNK.TIMELINE_EVENTS}.${TimelineEventEntityFields.EVENT_ID}", arrayOf(initialEventId)) - } - } - - private fun fetchEvent(eventId: String) { - val params = GetContextOfEventTask.Params(roomId, eventId) - cancelableBag += contextOfEventTask.configureWith(params) { - callback = object : MatrixCallback { - override fun onSuccess(data: TokenChunkEventPersistor.Result) { - postSnapshot() - } - - override fun onFailure(failure: Throwable) { - postFailure(failure) - } - } - } - .executeBy(taskExecutor) - } - - private fun postSnapshot() { - BACKGROUND_HANDLER.post { - if (isReady.get().not()) { - return@post - } - updateLoadingStates(timelineEvents) - val snapshot = createSnapshot() - val runnable = Runnable { - listeners.forEach { - it.onTimelineUpdated(snapshot) - } - } - debouncer.debounce("post_snapshot", runnable, 1) - } - } - - private fun postFailure(throwable: Throwable) { - if (isReady.get().not()) { - return - } - val runnable = Runnable { - listeners.forEach { - it.onTimelineFailure(throwable) - } - } - mainHandler.post(runnable) - } - - private fun clearAllValues() { - prevDisplayIndex = null - nextDisplayIndex = null - builtEvents.clear() - builtEventsIdMap.clear() - backwardsState.set(TimelineState()) - forwardsState.set(TimelineState()) - } - - private fun createPaginationCallback(limit: Int, direction: Timeline.Direction): MatrixCallback { - return object : MatrixCallback { - override fun onSuccess(data: TokenChunkEventPersistor.Result) { - when (data) { - TokenChunkEventPersistor.Result.SUCCESS -> { - Timber.v("Success fetching $limit items $direction from pagination request") - } - TokenChunkEventPersistor.Result.REACHED_END -> { - postSnapshot() - } - TokenChunkEventPersistor.Result.SHOULD_FETCH_MORE -> - // Database won't be updated, so we force pagination request - BACKGROUND_HANDLER.post { - executePaginationTask(direction, limit) - } - } - } - - override fun onFailure(failure: Throwable) { - updateState(direction) { it.copy(isPaginating = false, requestedPaginationCount = 0) } - postSnapshot() - Timber.v("Failure fetching $limit items $direction from pagination request") - } - } - } - - // Extension methods *************************************************************************** - - private fun Timeline.Direction.toPaginationDirection(): PaginationDirection { - return if (this == Timeline.Direction.BACKWARDS) PaginationDirection.BACKWARDS else PaginationDirection.FORWARDS - } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt index 75e7e774df..126374b430 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt @@ -23,6 +23,7 @@ import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import io.realm.Sort import io.realm.kotlin.where +import org.matrix.android.sdk.api.MatrixCoroutineDispatchers import org.matrix.android.sdk.api.session.events.model.isImageMessage import org.matrix.android.sdk.api.session.events.model.isVideoMessage import org.matrix.android.sdk.api.session.room.timeline.Timeline @@ -54,7 +55,8 @@ internal class DefaultTimelineService @AssistedInject constructor( private val timelineEventMapper: TimelineEventMapper, private val loadRoomMembersTask: LoadRoomMembersTask, private val threadsAwarenessHandler: ThreadsAwarenessHandler, - private val readReceiptHandler: ReadReceiptHandler + private val readReceiptHandler: ReadReceiptHandler, + private val coroutineDispatchers: MatrixCoroutineDispatchers ) : TimelineService { @AssistedFactory @@ -66,19 +68,18 @@ internal class DefaultTimelineService @AssistedInject constructor( return DefaultTimeline( roomId = roomId, initialEventId = eventId, + settings = settings, realmConfiguration = monarchy.realmConfiguration, - taskExecutor = taskExecutor, - contextOfEventTask = contextOfEventTask, + coroutineDispatchers = coroutineDispatchers, paginationTask = paginationTask, timelineEventMapper = timelineEventMapper, - settings = settings, timelineInput = timelineInput, eventDecryptor = eventDecryptor, fetchTokenAndPaginateTask = fetchTokenAndPaginateTask, - realmSessionProvider = realmSessionProvider, loadRoomMembersTask = loadRoomMembersTask, - threadsAwarenessHandler = threadsAwarenessHandler, - readReceiptHandler = readReceiptHandler + readReceiptHandler = readReceiptHandler, + getEventTask = contextOfEventTask, + threadsAwarenessHandler = threadsAwarenessHandler ) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadMoreResult.kt similarity index 76% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineState.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadMoreResult.kt index 0143d9bab3..c419e8325e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadMoreResult.kt @@ -16,9 +16,8 @@ package org.matrix.android.sdk.internal.session.room.timeline -internal data class TimelineState( - val hasReachedEnd: Boolean = false, - val hasMoreInCache: Boolean = true, - val isPaginating: Boolean = false, - val requestedPaginationCount: Int = 0 -) +internal enum class LoadMoreResult { + REACHED_END, + SUCCESS, + FAILURE +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt new file mode 100644 index 0000000000..528b564e8b --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt @@ -0,0 +1,232 @@ +/* + * Copyright (c) 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.room.timeline + +import io.realm.OrderedCollectionChangeSet +import io.realm.OrderedRealmCollectionChangeListener +import io.realm.Realm +import io.realm.RealmResults +import kotlinx.coroutines.CompletableDeferred +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.room.send.SendState +import org.matrix.android.sdk.api.session.room.timeline.Timeline +import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent +import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings +import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper +import org.matrix.android.sdk.internal.database.model.ChunkEntity +import org.matrix.android.sdk.internal.database.model.ChunkEntityFields +import org.matrix.android.sdk.internal.database.query.findAllIncludingEvents +import org.matrix.android.sdk.internal.database.query.where +import org.matrix.android.sdk.internal.session.sync.handler.room.ThreadsAwarenessHandler +import java.util.concurrent.atomic.AtomicReference + +/** + * This class is responsible for keeping an instance of chunkEntity and timelineChunk according to the strategy. + * There is 2 different mode: Live and Permalink. + * In Live, we will query for the live chunk (isLastForward = true). + * In Permalink, we will query for the chunk including the eventId we are looking for. + * Once we got a ChunkEntity we wrap it with TimelineChunk class so we dispatch any methods for loading data. + */ + +internal class LoadTimelineStrategy( + private val roomId: String, + private val timelineId: String, + private val mode: Mode, + private val dependencies: Dependencies) { + + sealed interface Mode { + object Live : Mode + data class Permalink(val originEventId: String) : Mode + + fun originEventId(): String? { + return if (this is Permalink) { + originEventId + } else { + null + } + } + } + + data class Dependencies( + val timelineSettings: TimelineSettings, + val realm: AtomicReference, + val eventDecryptor: TimelineEventDecryptor, + val paginationTask: PaginationTask, + val fetchTokenAndPaginateTask: FetchTokenAndPaginateTask, + val getContextOfEventTask: GetContextOfEventTask, + val timelineInput: TimelineInput, + val timelineEventMapper: TimelineEventMapper, + val threadsAwarenessHandler: ThreadsAwarenessHandler, + val onEventsUpdated: (Boolean) -> Unit, + val onLimitedTimeline: () -> Unit, + val onNewTimelineEvents: (List) -> Unit + ) + + private var getContextLatch: CompletableDeferred? = null + private var chunkEntity: RealmResults? = null + private var timelineChunk: TimelineChunk? = null + + private val chunkEntityListener = OrderedRealmCollectionChangeListener { _: RealmResults, changeSet: OrderedCollectionChangeSet -> + // Can be call either when you open a permalink on an unknown event + // or when there is a gap in the timeline. + val shouldRebuildChunk = changeSet.insertions.isNotEmpty() + if (shouldRebuildChunk) { + timelineChunk?.close(closeNext = true, closePrev = true) + timelineChunk = chunkEntity?.createTimelineChunk() + // If we are waiting for a result of get context, post completion + getContextLatch?.complete(Unit) + // If we have a gap, just tell the timeline about it. + if (timelineChunk?.hasReachedLastForward().orFalse()) { + dependencies.onLimitedTimeline() + } + } + } + + private val uiEchoManagerListener = object : UIEchoManager.Listener { + override fun rebuildEvent(eventId: String, builder: (TimelineEvent) -> TimelineEvent?): Boolean { + return timelineChunk?.rebuildEvent(eventId, builder, searchInNext = true, searchInPrev = true).orFalse() + } + } + + private val timelineInputListener = object : TimelineInput.Listener { + + override fun onLocalEchoCreated(roomId: String, timelineEvent: TimelineEvent) { + if (roomId != this@LoadTimelineStrategy.roomId) { + return + } + if (uiEchoManager.onLocalEchoCreated(timelineEvent)) { + dependencies.onNewTimelineEvents(listOf(timelineEvent.eventId)) + dependencies.onEventsUpdated(false) + } + } + + override fun onLocalEchoUpdated(roomId: String, eventId: String, sendState: SendState) { + if (roomId != this@LoadTimelineStrategy.roomId) { + return + } + if (uiEchoManager.onSendStateUpdated(eventId, sendState)) { + dependencies.onEventsUpdated(false) + } + } + + override fun onNewTimelineEvents(roomId: String, eventIds: List) { + if (roomId == this@LoadTimelineStrategy.roomId && hasReachedLastForward()) { + dependencies.onNewTimelineEvents(eventIds) + } + } + } + + private val uiEchoManager = UIEchoManager(uiEchoManagerListener) + private val sendingEventsDataSource: SendingEventsDataSource = RealmSendingEventsDataSource( + roomId = roomId, + realm = dependencies.realm, + uiEchoManager = uiEchoManager, + timelineEventMapper = dependencies.timelineEventMapper, + onEventsUpdated = dependencies.onEventsUpdated + ) + + fun onStart() { + dependencies.eventDecryptor.start() + dependencies.timelineInput.listeners.add(timelineInputListener) + val realm = dependencies.realm.get() + sendingEventsDataSource.start() + chunkEntity = getChunkEntity(realm).also { + it.addChangeListener(chunkEntityListener) + timelineChunk = it.createTimelineChunk() + } + } + + fun onStop() { + dependencies.eventDecryptor.destroy() + dependencies.timelineInput.listeners.remove(timelineInputListener) + chunkEntity?.removeChangeListener(chunkEntityListener) + sendingEventsDataSource.stop() + timelineChunk?.close(closeNext = true, closePrev = true) + getContextLatch?.cancel() + chunkEntity = null + timelineChunk = null + } + + suspend fun loadMore(count: Int, direction: Timeline.Direction, fetchOnServerIfNeeded: Boolean = true): LoadMoreResult { + if (mode is Mode.Permalink && timelineChunk == null) { + val params = GetContextOfEventTask.Params(roomId, mode.originEventId) + try { + getContextLatch = CompletableDeferred() + dependencies.getContextOfEventTask.execute(params) + // waits for the query to be fulfilled + getContextLatch?.await() + getContextLatch = null + } catch (failure: Throwable) { + return LoadMoreResult.FAILURE + } + } + return timelineChunk?.loadMore(count, direction, fetchOnServerIfNeeded) ?: LoadMoreResult.FAILURE + } + + fun getBuiltEventIndex(eventId: String): Int? { + return timelineChunk?.getBuiltEventIndex(eventId, searchInNext = true, searchInPrev = true) + } + + fun getBuiltEvent(eventId: String): TimelineEvent? { + return timelineChunk?.getBuiltEvent(eventId, searchInNext = true, searchInPrev = true) + } + + fun buildSnapshot(): List { + return buildSendingEvents() + timelineChunk?.builtItems(includesNext = true, includesPrev = true).orEmpty() + } + + private fun buildSendingEvents(): List { + return if (hasReachedLastForward()) { + sendingEventsDataSource.buildSendingEvents() + } else { + emptyList() + } + } + + private fun getChunkEntity(realm: Realm): RealmResults { + return if (mode is Mode.Permalink) { + ChunkEntity.findAllIncludingEvents(realm, listOf(mode.originEventId)) + } else { + ChunkEntity.where(realm, roomId) + .equalTo(ChunkEntityFields.IS_LAST_FORWARD, true) + .findAll() + } + } + + private fun hasReachedLastForward(): Boolean { + return timelineChunk?.hasReachedLastForward().orFalse() + } + + private fun RealmResults.createTimelineChunk(): TimelineChunk? { + return firstOrNull()?.let { + return TimelineChunk( + chunkEntity = it, + timelineSettings = dependencies.timelineSettings, + roomId = roomId, + timelineId = timelineId, + eventDecryptor = dependencies.eventDecryptor, + paginationTask = dependencies.paginationTask, + fetchTokenAndPaginateTask = dependencies.fetchTokenAndPaginateTask, + timelineEventMapper = dependencies.timelineEventMapper, + uiEchoManager = uiEchoManager, + threadsAwarenessHandler = dependencies.threadsAwarenessHandler, + initialEventId = mode.originEventId(), + onBuiltEvents = dependencies.onEventsUpdated + ) + } + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/SendingEventsDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/SendingEventsDataSource.kt new file mode 100644 index 0000000000..a98de1c595 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/SendingEventsDataSource.kt @@ -0,0 +1,86 @@ +/* + * Copyright (c) 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.room.timeline + +import io.realm.Realm +import io.realm.RealmChangeListener +import io.realm.RealmList +import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent +import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper +import org.matrix.android.sdk.internal.database.model.RoomEntity +import org.matrix.android.sdk.internal.database.model.TimelineEventEntity +import org.matrix.android.sdk.internal.database.query.where +import java.util.concurrent.atomic.AtomicReference + +internal interface SendingEventsDataSource { + fun start() + fun stop() + fun buildSendingEvents(): List +} + +internal class RealmSendingEventsDataSource( + private val roomId: String, + private val realm: AtomicReference, + private val uiEchoManager: UIEchoManager, + private val timelineEventMapper: TimelineEventMapper, + private val onEventsUpdated: (Boolean) -> Unit +) : SendingEventsDataSource { + + private var roomEntity: RoomEntity? = null + private var sendingTimelineEvents: RealmList? = null + private var frozenSendingTimelineEvents: RealmList? = null + + private val sendingTimelineEventsListener = RealmChangeListener> { events -> + uiEchoManager.onSentEventsInDatabase(events.map { it.eventId }) + frozenSendingTimelineEvents = sendingTimelineEvents?.freeze() + onEventsUpdated(false) + } + + override fun start() { + val safeRealm = realm.get() + roomEntity = RoomEntity.where(safeRealm, roomId = roomId).findFirst() + sendingTimelineEvents = roomEntity?.sendingTimelineEvents + sendingTimelineEvents?.addChangeListener(sendingTimelineEventsListener) + } + + override fun stop() { + sendingTimelineEvents?.removeChangeListener(sendingTimelineEventsListener) + sendingTimelineEvents = null + roomEntity = null + } + + override fun buildSendingEvents(): List { + val builtSendingEvents = mutableListOf() + uiEchoManager.getInMemorySendingEvents() + .addWithUiEcho(builtSendingEvents) + frozenSendingTimelineEvents + ?.filter { timelineEvent -> + builtSendingEvents.none { it.eventId == timelineEvent.eventId } + } + ?.map { + timelineEventMapper.map(it) + }?.addWithUiEcho(builtSendingEvents) + + return builtSendingEvents + } + + private fun List.addWithUiEcho(target: MutableList) { + target.addAll( + map { uiEchoManager.updateSentStateWithUiEcho(it) } + ) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineChunk.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineChunk.kt new file mode 100644 index 0000000000..14cba2a4b8 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineChunk.kt @@ -0,0 +1,479 @@ +/* + * Copyright (c) 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.room.timeline + +import io.realm.OrderedCollectionChangeSet +import io.realm.OrderedRealmCollectionChangeListener +import io.realm.RealmObjectChangeListener +import io.realm.RealmQuery +import io.realm.RealmResults +import io.realm.Sort +import kotlinx.coroutines.CompletableDeferred +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.extensions.tryOrNull +import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.room.timeline.Timeline +import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent +import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings +import org.matrix.android.sdk.internal.database.mapper.EventMapper +import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper +import org.matrix.android.sdk.internal.database.model.ChunkEntity +import org.matrix.android.sdk.internal.database.model.ChunkEntityFields +import org.matrix.android.sdk.internal.database.model.TimelineEventEntity +import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields +import org.matrix.android.sdk.internal.session.sync.handler.room.ThreadsAwarenessHandler +import timber.log.Timber +import java.util.Collections +import java.util.concurrent.atomic.AtomicBoolean + +/** + * This is a wrapper around a ChunkEntity in the database. + * It does mainly listen to the db timeline events. + * It also triggers pagination to the server when needed, or dispatch to the prev or next chunk if any. + */ +internal class TimelineChunk(private val chunkEntity: ChunkEntity, + private val timelineSettings: TimelineSettings, + private val roomId: String, + private val timelineId: String, + private val eventDecryptor: TimelineEventDecryptor, + private val paginationTask: PaginationTask, + private val fetchTokenAndPaginateTask: FetchTokenAndPaginateTask, + private val timelineEventMapper: TimelineEventMapper, + private val uiEchoManager: UIEchoManager? = null, + private val threadsAwarenessHandler: ThreadsAwarenessHandler, + private val initialEventId: String?, + private val onBuiltEvents: (Boolean) -> Unit) { + + private val isLastForward = AtomicBoolean(chunkEntity.isLastForward) + private val isLastBackward = AtomicBoolean(chunkEntity.isLastBackward) + private var prevChunkLatch: CompletableDeferred? = null + private var nextChunkLatch: CompletableDeferred? = null + + private val chunkObjectListener = RealmObjectChangeListener { _, changeSet -> + if (changeSet == null) return@RealmObjectChangeListener + if (changeSet.isDeleted.orFalse()) { + return@RealmObjectChangeListener + } + Timber.v("on chunk (${chunkEntity.identifier()}) changed: ${changeSet.changedFields?.joinToString(",")}") + if (changeSet.isFieldChanged(ChunkEntityFields.IS_LAST_FORWARD)) { + isLastForward.set(chunkEntity.isLastForward) + } + if (changeSet.isFieldChanged(ChunkEntityFields.IS_LAST_BACKWARD)) { + isLastBackward.set(chunkEntity.isLastBackward) + } + if (changeSet.isFieldChanged(ChunkEntityFields.NEXT_CHUNK.`$`)) { + nextChunk = createTimelineChunk(chunkEntity.nextChunk) + nextChunkLatch?.complete(Unit) + } + if (changeSet.isFieldChanged(ChunkEntityFields.PREV_CHUNK.`$`)) { + prevChunk = createTimelineChunk(chunkEntity.prevChunk) + prevChunkLatch?.complete(Unit) + } + } + + private val timelineEventsChangeListener = + OrderedRealmCollectionChangeListener { results: RealmResults, changeSet: OrderedCollectionChangeSet -> + Timber.v("on timeline events chunk update") + val frozenResults = results.freeze() + handleDatabaseChangeSet(frozenResults, changeSet) + } + + private var timelineEventEntities: RealmResults = chunkEntity.sortedTimelineEvents() + private val builtEvents: MutableList = Collections.synchronizedList(ArrayList()) + private val builtEventsIndexes: MutableMap = Collections.synchronizedMap(HashMap()) + + private var nextChunk: TimelineChunk? = null + private var prevChunk: TimelineChunk? = null + + init { + timelineEventEntities.addChangeListener(timelineEventsChangeListener) + chunkEntity.addChangeListener(chunkObjectListener) + } + + fun hasReachedLastForward(): Boolean { + return if (isLastForward.get()) { + true + } else { + nextChunk?.hasReachedLastForward().orFalse() + } + } + + fun builtItems(includesNext: Boolean, includesPrev: Boolean): List { + val deepBuiltItems = ArrayList(builtEvents.size) + if (includesNext) { + val nextEvents = nextChunk?.builtItems(includesNext = true, includesPrev = false).orEmpty() + deepBuiltItems.addAll(nextEvents) + } + deepBuiltItems.addAll(builtEvents) + if (includesPrev) { + val prevEvents = prevChunk?.builtItems(includesNext = false, includesPrev = true).orEmpty() + deepBuiltItems.addAll(prevEvents) + } + return deepBuiltItems + } + + /** + * This will take care of loading and building events of this chunk for the given direction and count. + * If @param fetchFromServerIfNeeded is true, it will try to fetch more events on server to get the right amount of data. + * This method will also post a snapshot as soon the data is built from db to avoid waiting for server response. + */ + suspend fun loadMore(count: Int, direction: Timeline.Direction, fetchOnServerIfNeeded: Boolean = true): LoadMoreResult { + if (direction == Timeline.Direction.FORWARDS && nextChunk != null) { + return nextChunk?.loadMore(count, direction, fetchOnServerIfNeeded) ?: LoadMoreResult.FAILURE + } else if (direction == Timeline.Direction.BACKWARDS && prevChunk != null) { + return prevChunk?.loadMore(count, direction, fetchOnServerIfNeeded) ?: LoadMoreResult.FAILURE + } + val loadFromStorageCount = loadFromStorage(count, direction) + Timber.v("Has loaded $loadFromStorageCount items from storage in $direction") + val offsetCount = count - loadFromStorageCount + return if (direction == Timeline.Direction.FORWARDS && isLastForward.get()) { + LoadMoreResult.REACHED_END + } else if (direction == Timeline.Direction.BACKWARDS && isLastBackward.get()) { + LoadMoreResult.REACHED_END + } else if (offsetCount == 0) { + LoadMoreResult.SUCCESS + } else { + delegateLoadMore(fetchOnServerIfNeeded, offsetCount, direction) + } + } + + private suspend fun delegateLoadMore(fetchFromServerIfNeeded: Boolean, offsetCount: Int, direction: Timeline.Direction): LoadMoreResult { + return if (direction == Timeline.Direction.FORWARDS) { + val nextChunkEntity = chunkEntity.nextChunk + when { + nextChunkEntity != null -> { + if (nextChunk == null) { + nextChunk = createTimelineChunk(nextChunkEntity) + } + nextChunk?.loadMore(offsetCount, direction, fetchFromServerIfNeeded) ?: LoadMoreResult.FAILURE + } + fetchFromServerIfNeeded -> { + fetchFromServer(offsetCount, chunkEntity.nextToken, direction) + } + else -> { + LoadMoreResult.SUCCESS + } + } + } else { + val prevChunkEntity = chunkEntity.prevChunk + when { + prevChunkEntity != null -> { + if (prevChunk == null) { + prevChunk = createTimelineChunk(prevChunkEntity) + } + prevChunk?.loadMore(offsetCount, direction, fetchFromServerIfNeeded) ?: LoadMoreResult.FAILURE + } + fetchFromServerIfNeeded -> { + fetchFromServer(offsetCount, chunkEntity.prevToken, direction) + } + else -> { + LoadMoreResult.SUCCESS + } + } + } + } + + fun getBuiltEventIndex(eventId: String, searchInNext: Boolean, searchInPrev: Boolean): Int? { + val builtEventIndex = builtEventsIndexes[eventId] + if (builtEventIndex != null) { + return getOffsetIndex() + builtEventIndex + } + if (searchInNext) { + val nextBuiltEventIndex = nextChunk?.getBuiltEventIndex(eventId, searchInNext = true, searchInPrev = false) + if (nextBuiltEventIndex != null) { + return nextBuiltEventIndex + } + } + if (searchInPrev) { + val prevBuiltEventIndex = prevChunk?.getBuiltEventIndex(eventId, searchInNext = false, searchInPrev = true) + if (prevBuiltEventIndex != null) { + return prevBuiltEventIndex + } + } + return null + } + + fun getBuiltEvent(eventId: String, searchInNext: Boolean, searchInPrev: Boolean): TimelineEvent? { + val builtEventIndex = builtEventsIndexes[eventId] + if (builtEventIndex != null) { + return builtEvents.getOrNull(builtEventIndex) + } + if (searchInNext) { + val nextBuiltEvent = nextChunk?.getBuiltEvent(eventId, searchInNext = true, searchInPrev = false) + if (nextBuiltEvent != null) { + return nextBuiltEvent + } + } + if (searchInPrev) { + val prevBuiltEvent = prevChunk?.getBuiltEvent(eventId, searchInNext = false, searchInPrev = true) + if (prevBuiltEvent != null) { + return prevBuiltEvent + } + } + return null + } + + fun rebuildEvent(eventId: String, builder: (TimelineEvent) -> TimelineEvent?, searchInNext: Boolean, searchInPrev: Boolean): Boolean { + return tryOrNull { + val builtIndex = getBuiltEventIndex(eventId, searchInNext = false, searchInPrev = false) + if (builtIndex == null) { + val foundInPrev = searchInPrev && prevChunk?.rebuildEvent(eventId, builder, searchInNext = false, searchInPrev = true).orFalse() + if (foundInPrev) { + return true + } + if (searchInNext) { + return prevChunk?.rebuildEvent(eventId, builder, searchInPrev = false, searchInNext = true).orFalse() + } + return false + } + // Update the relation of existing event + builtEvents.getOrNull(builtIndex)?.let { te -> + val rebuiltEvent = builder(te) + builtEvents[builtIndex] = rebuiltEvent!! + true + } + } + ?: false + } + + fun close(closeNext: Boolean, closePrev: Boolean) { + if (closeNext) { + nextChunk?.close(closeNext = true, closePrev = false) + } + if (closePrev) { + prevChunk?.close(closeNext = false, closePrev = true) + } + nextChunk = null + nextChunkLatch?.cancel() + prevChunk = null + prevChunkLatch?.cancel() + chunkEntity.removeChangeListener(chunkObjectListener) + timelineEventEntities.removeChangeListener(timelineEventsChangeListener) + } + + /** + * This method tries to read events from the current chunk. + */ + private suspend fun loadFromStorage(count: Int, direction: Timeline.Direction): Int { + val displayIndex = getNextDisplayIndex(direction) ?: return 0 + val baseQuery = timelineEventEntities.where() + val timelineEvents = baseQuery.offsets(direction, count, displayIndex).findAll().orEmpty() + if (timelineEvents.isEmpty()) return 0 + fetchRootThreadEventsIfNeeded(timelineEvents) + if (direction == Timeline.Direction.FORWARDS) { + builtEventsIndexes.entries.forEach { it.setValue(it.value + timelineEvents.size) } + } + timelineEvents + .mapIndexed { index, timelineEventEntity -> + val timelineEvent = timelineEventEntity.buildAndDecryptIfNeeded() + if (timelineEvent.root.type == EventType.STATE_ROOM_CREATE) { + isLastBackward.set(true) + } + if (direction == Timeline.Direction.FORWARDS) { + builtEventsIndexes[timelineEvent.eventId] = index + builtEvents.add(index, timelineEvent) + } else { + builtEventsIndexes[timelineEvent.eventId] = builtEvents.size + builtEvents.add(timelineEvent) + } + } + return timelineEvents.size + } + + /** + * This function is responsible to fetch and store the root event of a thread event + * in order to be able to display the event to the user appropriately + */ + private suspend fun fetchRootThreadEventsIfNeeded(offsetResults: List) { + val eventEntityList = offsetResults + .mapNotNull { + it.root + }.map { + EventMapper.map(it) + } + threadsAwarenessHandler.fetchRootThreadEventsIfNeeded(eventEntityList) + } + + private fun TimelineEventEntity.buildAndDecryptIfNeeded(): TimelineEvent { + val timelineEvent = buildTimelineEvent(this) + val transactionId = timelineEvent.root.unsignedData?.transactionId + uiEchoManager?.onSyncedEvent(transactionId) + if (timelineEvent.isEncrypted() && + timelineEvent.root.mxDecryptionResult == null) { + timelineEvent.root.eventId?.also { eventDecryptor.requestDecryption(TimelineEventDecryptor.DecryptionRequest(timelineEvent.root, timelineId)) } + } + return timelineEvent + } + + private fun buildTimelineEvent(eventEntity: TimelineEventEntity) = timelineEventMapper.map( + timelineEventEntity = eventEntity, + buildReadReceipts = timelineSettings.buildReadReceipts + ).let { + // eventually enhance with ui echo? + (uiEchoManager?.decorateEventWithReactionUiEcho(it) ?: it) + } + + /** + * Will try to fetch a new chunk on the home server. + * It will take care to update the database by inserting new events and linking new chunk + * with this one. + */ + private suspend fun fetchFromServer(count: Int, token: String?, direction: Timeline.Direction): LoadMoreResult { + val latch = if (direction == Timeline.Direction.FORWARDS) { + nextChunkLatch = CompletableDeferred() + nextChunkLatch + } else { + prevChunkLatch = CompletableDeferred() + prevChunkLatch + } + val loadMoreResult = try { + if (token == null) { + if (direction == Timeline.Direction.BACKWARDS || !chunkEntity.hasBeenALastForwardChunk()) return LoadMoreResult.REACHED_END + val lastKnownEventId = chunkEntity.sortedTimelineEvents().firstOrNull()?.eventId ?: return LoadMoreResult.FAILURE + val taskParams = FetchTokenAndPaginateTask.Params(roomId, lastKnownEventId, direction.toPaginationDirection(), count) + fetchTokenAndPaginateTask.execute(taskParams).toLoadMoreResult() + } else { + Timber.v("Fetch $count more events on server") + val taskParams = PaginationTask.Params(roomId, token, direction.toPaginationDirection(), count) + paginationTask.execute(taskParams).toLoadMoreResult() + } + } catch (failure: Throwable) { + Timber.e("Failed to fetch from server: $failure", failure) + LoadMoreResult.FAILURE + } + return if (loadMoreResult == LoadMoreResult.SUCCESS) { + latch?.await() + loadMore(count, direction, fetchOnServerIfNeeded = false) + } else { + loadMoreResult + } + } + + private fun TokenChunkEventPersistor.Result.toLoadMoreResult(): LoadMoreResult { + return when (this) { + TokenChunkEventPersistor.Result.REACHED_END -> LoadMoreResult.REACHED_END + TokenChunkEventPersistor.Result.SHOULD_FETCH_MORE, + TokenChunkEventPersistor.Result.SUCCESS -> LoadMoreResult.SUCCESS + } + } + + private fun getOffsetIndex(): Int { + var offset = 0 + var currentNextChunk = nextChunk + while (currentNextChunk != null) { + offset += currentNextChunk.builtEvents.size + currentNextChunk = currentNextChunk.nextChunk + } + return offset + } + + /** + * This method is responsible for managing insertions and updates of events on this chunk. + * + */ + private fun handleDatabaseChangeSet(frozenResults: RealmResults, changeSet: OrderedCollectionChangeSet) { + val insertions = changeSet.insertionRanges + for (range in insertions) { + val newItems = frozenResults + .subList(range.startIndex, range.startIndex + range.length) + .map { it.buildAndDecryptIfNeeded() } + builtEventsIndexes.entries.filter { it.value >= range.startIndex }.forEach { it.setValue(it.value + range.length) } + newItems.mapIndexed { index, timelineEvent -> + if (timelineEvent.root.type == EventType.STATE_ROOM_CREATE) { + isLastBackward.set(true) + } + val correctedIndex = range.startIndex + index + builtEvents.add(correctedIndex, timelineEvent) + builtEventsIndexes[timelineEvent.eventId] = correctedIndex + } + } + val modifications = changeSet.changeRanges + for (range in modifications) { + for (modificationIndex in (range.startIndex until range.startIndex + range.length)) { + val updatedEntity = frozenResults[modificationIndex] ?: continue + try { + builtEvents[modificationIndex] = updatedEntity.buildAndDecryptIfNeeded() + } catch (failure: Throwable) { + Timber.v("Fail to update items at index: $modificationIndex") + } + } + } + if (insertions.isNotEmpty() || modifications.isNotEmpty()) { + onBuiltEvents(true) + } + } + + private fun getNextDisplayIndex(direction: Timeline.Direction): Int? { + val frozenTimelineEvents = timelineEventEntities.freeze() + if (frozenTimelineEvents.isEmpty()) { + return null + } + return if (builtEvents.isEmpty()) { + if (initialEventId != null) { + frozenTimelineEvents.where().equalTo(TimelineEventEntityFields.EVENT_ID, initialEventId).findFirst()?.displayIndex + } else if (direction == Timeline.Direction.BACKWARDS) { + frozenTimelineEvents.first()?.displayIndex + } else { + frozenTimelineEvents.last()?.displayIndex + } + } else if (direction == Timeline.Direction.FORWARDS) { + builtEvents.first().displayIndex + 1 + } else { + builtEvents.last().displayIndex - 1 + } + } + + private fun createTimelineChunk(chunkEntity: ChunkEntity?): TimelineChunk? { + if (chunkEntity == null) return null + return TimelineChunk( + chunkEntity = chunkEntity, + timelineSettings = timelineSettings, + roomId = roomId, + timelineId = timelineId, + eventDecryptor = eventDecryptor, + paginationTask = paginationTask, + fetchTokenAndPaginateTask = fetchTokenAndPaginateTask, + timelineEventMapper = timelineEventMapper, + uiEchoManager = uiEchoManager, + threadsAwarenessHandler = threadsAwarenessHandler, + initialEventId = null, + onBuiltEvents = this.onBuiltEvents + ) + } +} + +private fun RealmQuery.offsets( + direction: Timeline.Direction, + count: Int, + startDisplayIndex: Int +): RealmQuery { + sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING) + if (direction == Timeline.Direction.BACKWARDS) { + lessThanOrEqualTo(TimelineEventEntityFields.DISPLAY_INDEX, startDisplayIndex) + } else { + greaterThanOrEqualTo(TimelineEventEntityFields.DISPLAY_INDEX, startDisplayIndex) + } + return limit(count.toLong()) +} + +private fun Timeline.Direction.toPaginationDirection(): PaginationDirection { + return if (this == Timeline.Direction.BACKWARDS) PaginationDirection.BACKWARDS else PaginationDirection.FORWARDS +} + +private fun ChunkEntity.sortedTimelineEvents(): RealmResults { + return timelineEvents.sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING) +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineInput.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineInput.kt index cdc85ea722..a953db0704 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineInput.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineInput.kt @@ -23,6 +23,9 @@ import javax.inject.Inject @SessionScope internal class TimelineInput @Inject constructor() { + + val listeners = mutableSetOf() + fun onLocalEchoCreated(roomId: String, timelineEvent: TimelineEvent) { listeners.toSet().forEach { it.onLocalEchoCreated(roomId, timelineEvent) } } @@ -35,8 +38,6 @@ internal class TimelineInput @Inject constructor() { listeners.toSet().forEach { it.onNewTimelineEvents(roomId, eventIds) } } - val listeners = mutableSetOf() - internal interface Listener { fun onLocalEchoCreated(roomId: String, timelineEvent: TimelineEvent) = Unit fun onLocalEchoUpdated(roomId: String, eventId: String, sendState: SendState) = Unit diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt index dbcc37a918..4625155c0a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt @@ -25,94 +25,25 @@ import org.matrix.android.sdk.api.session.room.send.SendState import org.matrix.android.sdk.internal.database.helper.addIfNecessary import org.matrix.android.sdk.internal.database.helper.addStateEvent import org.matrix.android.sdk.internal.database.helper.addTimelineEvent -import org.matrix.android.sdk.internal.database.helper.merge import org.matrix.android.sdk.internal.database.mapper.toEntity import org.matrix.android.sdk.internal.database.model.ChunkEntity import org.matrix.android.sdk.internal.database.model.EventInsertType import org.matrix.android.sdk.internal.database.model.RoomEntity -import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity -import org.matrix.android.sdk.internal.database.model.deleteOnCascade +import org.matrix.android.sdk.internal.database.model.TimelineEventEntity import org.matrix.android.sdk.internal.database.query.copyToRealmOrIgnore import org.matrix.android.sdk.internal.database.query.create import org.matrix.android.sdk.internal.database.query.find -import org.matrix.android.sdk.internal.database.query.findAllIncludingEvents -import org.matrix.android.sdk.internal.database.query.findLastForwardChunkOfRoom -import org.matrix.android.sdk.internal.database.query.getOrCreate import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.SessionDatabase -import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryEventsHelper import org.matrix.android.sdk.internal.util.awaitTransaction import timber.log.Timber import javax.inject.Inject /** - * Insert Chunk in DB, and eventually merge with existing chunk event + * Insert Chunk in DB, and eventually link next and previous chunk in db. */ internal class TokenChunkEventPersistor @Inject constructor(@SessionDatabase private val monarchy: Monarchy) { - /** - *
-     * ========================================================================================================
-     * | Backward case                                                                                        |
-     * ========================================================================================================
-     *
-     *                               *--------------------------*        *--------------------------*
-     *                               | startToken1              |        | startToken1              |
-     *                               *--------------------------*        *--------------------------*
-     *                               |                          |        |                          |
-     *                               |                          |        |                          |
-     *                               |  receivedChunk backward  |        |                          |
-     *                               |         Events           |        |                          |
-     *                               |                          |        |                          |
-     *                               |                          |        |                          |
-     *                               |                          |        |                          |
-     * *--------------------------*  *--------------------------*        |                          |
-     * | startToken0              |  | endToken1                |   =>   |       Merged chunk       |
-     * *--------------------------*  *--------------------------*        |          Events          |
-     * |                          |                                      |                          |
-     * |                          |                                      |                          |
-     * |      Current Chunk       |                                      |                          |
-     * |         Events           |                                      |                          |
-     * |                          |                                      |                          |
-     * |                          |                                      |                          |
-     * |                          |                                      |                          |
-     * *--------------------------*                                      *--------------------------*
-     * | endToken0                |                                      | endToken0                |
-     * *--------------------------*                                      *--------------------------*
-     *
-     *
-     * ========================================================================================================
-     * | Forward case                                                                                         |
-     * ========================================================================================================
-     *
-     * *--------------------------*                                      *--------------------------*
-     * | startToken0              |                                      | startToken0              |
-     * *--------------------------*                                      *--------------------------*
-     * |                          |                                      |                          |
-     * |                          |                                      |                          |
-     * |      Current Chunk       |                                      |                          |
-     * |         Events           |                                      |                          |
-     * |                          |                                      |                          |
-     * |                          |                                      |                          |
-     * |                          |                                      |                          |
-     * *--------------------------*  *--------------------------*        |                          |
-     * | endToken0                |  | startToken1              |   =>   |       Merged chunk       |
-     * *--------------------------*  *--------------------------*        |          Events          |
-     *                               |                          |        |                          |
-     *                               |                          |        |                          |
-     *                               |  receivedChunk forward   |        |                          |
-     *                               |         Events           |        |                          |
-     *                               |                          |        |                          |
-     *                               |                          |        |                          |
-     *                               |                          |        |                          |
-     *                               *--------------------------*        *--------------------------*
-     *                               | endToken1                |        | endToken1                |
-     *                               *--------------------------*        *--------------------------*
-     *
-     * ========================================================================================================
-     * 
- */ - enum class Result { SHOULD_FETCH_MORE, REACHED_END, @@ -136,21 +67,21 @@ internal class TokenChunkEventPersistor @Inject constructor(@SessionDatabase pri prevToken = receivedChunk.end } + val existingChunk = ChunkEntity.find(realm, roomId, prevToken = prevToken, nextToken = nextToken) + if (existingChunk != null) { + Timber.v("This chunk is already in the db, returns") + return@awaitTransaction + } val prevChunk = ChunkEntity.find(realm, roomId, nextToken = prevToken) val nextChunk = ChunkEntity.find(realm, roomId, prevToken = nextToken) - - // The current chunk is the one we will keep all along the merge processChanges. - // We try to look for a chunk next to the token, - // otherwise we create a whole new one which is unlinked (not live) - val currentChunk = if (direction == PaginationDirection.FORWARDS) { - prevChunk?.apply { this.nextToken = nextToken } - } else { - nextChunk?.apply { this.prevToken = prevToken } + val currentChunk = ChunkEntity.create(realm, prevToken = prevToken, nextToken = nextToken).apply { + this.nextChunk = nextChunk + this.prevChunk = prevChunk } - ?: ChunkEntity.create(realm, prevToken, nextToken) - - if (receivedChunk.events.isNullOrEmpty() && !receivedChunk.hasMore()) { - handleReachEnd(realm, roomId, direction, currentChunk) + nextChunk?.prevChunk = currentChunk + prevChunk?.nextChunk = currentChunk + if (receivedChunk.events.isEmpty() && !receivedChunk.hasMore()) { + handleReachEnd(roomId, direction, currentChunk) } else { handlePagination(realm, roomId, direction, receivedChunk, currentChunk) } @@ -166,17 +97,10 @@ internal class TokenChunkEventPersistor @Inject constructor(@SessionDatabase pri } } - private fun handleReachEnd(realm: Realm, roomId: String, direction: PaginationDirection, currentChunk: ChunkEntity) { + private fun handleReachEnd(roomId: String, direction: PaginationDirection, currentChunk: ChunkEntity) { Timber.v("Reach end of $roomId") if (direction == PaginationDirection.FORWARDS) { - val currentLastForwardChunk = ChunkEntity.findLastForwardChunkOfRoom(realm, roomId) - if (currentChunk != currentLastForwardChunk) { - currentChunk.isLastForward = true - currentLastForwardChunk?.deleteOnCascade(deleteStateEvents = false, canDeleteRoot = false) - RoomSummaryEntity.where(realm, roomId).findFirst()?.apply { - latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId) - } - } + Timber.v("We should keep the lastForward chunk unique, the one from sync") } else { currentChunk.isLastBackward = true } @@ -204,44 +128,50 @@ internal class TokenChunkEventPersistor @Inject constructor(@SessionDatabase pri roomMemberContentsByUser[stateEvent.stateKey] = stateEvent.content.toModel() } } - val eventIds = ArrayList(eventList.size) - eventList.forEach { event -> - if (event.eventId == null || event.senderId == null) { - return@forEach - } - val ageLocalTs = event.unsignedData?.age?.let { now - it } - eventIds.add(event.eventId) - val eventEntity = event.toEntity(roomId, SendState.SYNCED, ageLocalTs).copyToRealmOrIgnore(realm, EventInsertType.PAGINATION) - if (event.type == EventType.STATE_ROOM_MEMBER && event.stateKey != null) { - val contentToUse = if (direction == PaginationDirection.BACKWARDS) { - event.prevContent - } else { - event.content + run processTimelineEvents@{ + eventList.forEach { event -> + if (event.eventId == null || event.senderId == null) { + return@forEach } - roomMemberContentsByUser[event.stateKey] = contentToUse.toModel() + // We check for the timeline event with this id + val eventId = event.eventId + val existingTimelineEvent = TimelineEventEntity.where(realm, roomId, eventId).findFirst() + // If it exists, we want to stop here, just link the prevChunk + val existingChunk = existingTimelineEvent?.chunk?.firstOrNull() + if (existingChunk != null) { + when (direction) { + PaginationDirection.BACKWARDS -> { + if (currentChunk.nextChunk == existingChunk) { + Timber.w("Avoid double link, shouldn't happen in an ideal world") + } else { + currentChunk.prevChunk = existingChunk + existingChunk.nextChunk = currentChunk + } + } + PaginationDirection.FORWARDS -> { + if (currentChunk.prevChunk == existingChunk) { + Timber.w("Avoid double link, shouldn't happen in an ideal world") + } else { + currentChunk.nextChunk = existingChunk + existingChunk.prevChunk = currentChunk + } + } + } + // Stop processing here + return@processTimelineEvents + } + val ageLocalTs = event.unsignedData?.age?.let { now - it } + val eventEntity = event.toEntity(roomId, SendState.SYNCED, ageLocalTs).copyToRealmOrIgnore(realm, EventInsertType.PAGINATION) + if (event.type == EventType.STATE_ROOM_MEMBER && event.stateKey != null) { + val contentToUse = if (direction == PaginationDirection.BACKWARDS) { + event.prevContent + } else { + event.content + } + roomMemberContentsByUser[event.stateKey] = contentToUse.toModel() + } + currentChunk.addTimelineEvent(roomId, eventEntity, direction, roomMemberContentsByUser) } - - currentChunk.addTimelineEvent(roomId, eventEntity, direction, roomMemberContentsByUser) - } - // Find all the chunks which contain at least one event from the list of eventIds - val chunks = ChunkEntity.findAllIncludingEvents(realm, eventIds) - Timber.d("Found ${chunks.size} chunks containing at least one of the eventIds") - val chunksToDelete = ArrayList() - chunks.forEach { - if (it != currentChunk) { - Timber.d("Merge $it") - currentChunk.merge(roomId, it, direction) - chunksToDelete.add(it) - } - } - chunksToDelete.forEach { - it.deleteOnCascade(deleteStateEvents = false, canDeleteRoot = false) - } - val roomSummaryEntity = RoomSummaryEntity.getOrCreate(realm, roomId) - val shouldUpdateSummary = roomSummaryEntity.latestPreviewableEvent == null || - (chunksToDelete.isNotEmpty() && currentChunk.isLastForward && direction == PaginationDirection.FORWARDS) - if (shouldUpdateSummary) { - roomSummaryEntity.latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId) } if (currentChunk.isValid) { RoomEntity.where(realm, roomId).findFirst()?.addIfNecessary(currentChunk) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/UIEchoManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/UIEchoManager.kt index 4804fbd731..16d36c0cd9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/UIEchoManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/UIEchoManager.kt @@ -24,14 +24,10 @@ import org.matrix.android.sdk.api.session.room.model.ReactionAggregatedSummary import org.matrix.android.sdk.api.session.room.model.relation.ReactionContent import org.matrix.android.sdk.api.session.room.send.SendState import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent -import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings import timber.log.Timber import java.util.Collections -internal class UIEchoManager( - private val settings: TimelineSettings, - private val listener: Listener -) { +internal class UIEchoManager(private val listener: Listener) { interface Listener { fun rebuildEvent(eventId: String, builder: (TimelineEvent) -> TimelineEvent?): Boolean @@ -70,13 +66,12 @@ internal class UIEchoManager( return existingState != sendState } - fun onLocalEchoCreated(timelineEvent: TimelineEvent) { - // Manage some ui echos (do it before filter because actual event could be filtered out) + fun onLocalEchoCreated(timelineEvent: TimelineEvent): Boolean { when (timelineEvent.root.getClearType()) { EventType.REDACTION -> { } EventType.REACTION -> { - val content = timelineEvent.root.content?.toModel() + val content: ReactionContent? = timelineEvent.root.content?.toModel() if (RelationType.ANNOTATION == content?.relatesTo?.type) { val reaction = content.relatesTo.key val relatedEventID = content.relatesTo.eventId @@ -96,11 +91,12 @@ internal class UIEchoManager( } Timber.v("On local echo created: ${timelineEvent.eventId}") inMemorySendingEvents.add(0, timelineEvent) + return true } - fun decorateEventWithReactionUiEcho(timelineEvent: TimelineEvent): TimelineEvent? { + fun decorateEventWithReactionUiEcho(timelineEvent: TimelineEvent): TimelineEvent { val relatedEventID = timelineEvent.eventId - val contents = inMemoryReactions[relatedEventID] ?: return null + val contents = inMemoryReactions[relatedEventID] ?: return timelineEvent var existingAnnotationSummary = timelineEvent.annotations ?: EventAnnotationsSummary( relatedEventID diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt index 1a7e15e14c..f090975cad 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt @@ -345,15 +345,17 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle syncLocalTimestampMillis: Long, aggregator: SyncResponsePostTreatmentAggregator): ChunkEntity { val lastChunk = ChunkEntity.findLastForwardChunkOfRoom(realm, roomEntity.roomId) + if (isLimited && lastChunk != null) { + lastChunk.deleteOnCascade(deleteStateEvents = true, canDeleteRoot = true) + } val chunkEntity = if (!isLimited && lastChunk != null) { lastChunk } else { - realm.createObject().apply { this.prevToken = prevToken } + realm.createObject().apply { + this.prevToken = prevToken + this.isLastForward = true + } } - // Only one chunk has isLastForward set to true - lastChunk?.isLastForward = false - chunkEntity.isLastForward = true - val eventIds = ArrayList(eventList.size) val roomMemberContentsByUser = HashMap() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt index c52c6a404e..313fb6319d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt @@ -36,6 +36,7 @@ import org.matrix.android.sdk.internal.session.sync.model.accountdata.AcceptedTe import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask import org.matrix.android.sdk.internal.session.user.accountdata.UserAccountDataDataSource import org.matrix.android.sdk.internal.util.ensureTrailingSlash +import timber.log.Timber import javax.inject.Inject internal class DefaultTermsService @Inject constructor( @@ -63,19 +64,28 @@ internal class DefaultTermsService @Inject constructor( */ override suspend fun getHomeserverTerms(baseUrl: String): TermsResponse { return try { + val request = baseUrl + NetworkConstants.URI_API_PREFIX_PATH_R0 + "register" executeRequest(null) { - termsAPI.register(baseUrl + NetworkConstants.URI_API_PREFIX_PATH_R0 + "register") + termsAPI.register(request) } // Return empty result if it succeed, but it should never happen + Timber.w("Request $request succeeded, it should never happen") TermsResponse() } catch (throwable: Throwable) { - @Suppress("UNCHECKED_CAST") - TermsResponse( - policies = (throwable.toRegistrationFlowResponse() - ?.params - ?.get(LoginFlowTypes.TERMS) as? JsonDict) - ?.get("policies") as? JsonDict - ) + val registrationFlowResponse = throwable.toRegistrationFlowResponse() + if (registrationFlowResponse != null) { + @Suppress("UNCHECKED_CAST") + TermsResponse( + policies = (registrationFlowResponse + .params + ?.get(LoginFlowTypes.TERMS) as? JsonDict) + ?.get("policies") as? JsonDict + ) + } else { + // Other error + Timber.e(throwable, "Error while getting homeserver terms") + throw throwable + } } } diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index cbfaf20247..2698429b13 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -32,8 +32,6 @@ import static ### Rubbish from merge. Please delete those lines (sometimes in comment) -<<<<<<< ->>>>>>> ### carry return before "}". Please remove empty lines. \n\s*\n\s*\} @@ -160,7 +158,7 @@ Formatter\.formatShortFileSize===1 # android\.text\.TextUtils ### This is not a rule, but a warning: the number of "enum class" has changed. For Json classes, it is mandatory that they have `@JsonClass(generateAdapter = false)`. If the enum is not used as a Json class, change the value in file forbidden_strings_in_code.txt -enum class===116 +enum class===117 ### Do not import temporary legacy classes import org.matrix.android.sdk.internal.legacy.riot===3 diff --git a/vector/lint.xml b/vector/lint.xml index 9d9b208df7..818349da24 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -72,6 +72,7 @@ + تحذير! لم تُرسل الرسائل بسبب وجود أجهزة مجهولة. ماذا أفعل؟ %1$s. ‏%2$s. ليس ’⁨%s⁩‘ تنسيقا صالحا لاختصار @@ -586,11 +577,9 @@ الغرفة ⁨%s⁩ غير ظاهرة. لقد أضفت جهازا جديدا ’⁨%s⁩‘ يطلب مفاتيح التعمية. تجاهل الطلب - خطأ في الأمر لم يُفهم الأمر: ⁨%s⁩ - - أزل + أزل تحتاج تصريح الدعوة لبدء اجتماع في هذه الغرفة أو ردّ سريع @@ -699,14 +688,14 @@ رجاءً اسمح بالوصول في المنبثقة التالية لتستكشف مستخدميك في دفتر العناوين من Element. حُفظت - عايِن + عايِن يُزامن… أُرسلت الدعوة إلى ⁨%s⁩ غير المرتبط بهذا الحساب. لربما عليك الولوج بحساب آخر، أو إضافة هذا البريد إلى حسابك هذا. تحاول الوصول إلى ⁨%s⁩. أتريد الانضمام للمشاركة في النقاش؟ إحدى الغرف عضو واحد - ادعُ + ادعُ انضم إلى الغرفة لقد أكّدت عنوان بريدي الإلكتروني قائمة علامات القراءة @@ -737,7 +726,6 @@ ابحث رشّح أعضاء الغرفة الناس - أولوية منخفضة كل الرسائل (مزعج) كل الرسائل الإشارات فقط @@ -774,13 +762,11 @@ %d ودجة نشطة %d ودجة نشطة - أضِف تطبيقات ماترِكس يطلب جهازك غير المؤكّد ”‏⁨%s⁩“ مفاتيح التعمية. ابدأ التأكيد شارِك دون تأكيد رسالة معمّاة - أنشئ اسم المجتمع معرّف المجتمع @@ -853,7 +839,6 @@ معطّل مزعج ما زالت مكالمات الاجتماعات قيد التطوير وقد لا يُعتمد عليها. - تحتوي هذه الغرفة أجهزة مجهولة لم يُتأكّد منها. يعني هذا عدم وجود أي ضمانات بأن الأجهزة هي فعلا ملك لمن يستخدمها. ننصحك بأن تبدأ عملية التأكيد لكل جهاز وذلك قبل أن تتابع. يمكنك طبعا إرسال الرسالة دون تأكيد إن أردت ذلك. @@ -875,8 +860,6 @@ قد يعني هذا بأن أحدهم يعترض الاتصال بعدوانية، أو أن هاتفك لا يثق بالشهادة التي قدّمها الخادوم البعيد. إن قال مدير الخادوم بأن هذا متوقع، فتأكد من أن البصمة أدناه تطابق البصمة التي وفّرها. تغيّرت الشهادة من شهادة كنت تثق بها إلى شهادة لا تثق بها. لربما جدّد الخادوم شهادته. راسل إدارة الخادوم واسألهم عن البصمة المتوقعة. - انضم - ابدأ دردشة تصفح الدليل لم يُعثر على غرف تطابق ‏⁨%2$s⁩ @@ -918,13 +901,12 @@ يجب أن يكون مستوى السلطة عددا صحيحا موجبا. مثال مثال - الغرفة دعوة أرسل إلى أرسِل ملصقا رُخص الأطراف الثالثة - نزِّل + نزِّل أرسِل صوتًا أرسِل ملصقًا ليس ثمة أية حزمة ملصقات مفعّلة حاليًا. @@ -935,8 +917,8 @@ أُرسل طلب المفتاح. أُرسل الطلب رجاءً أطلِق Element في جهاز آخر يقدر على فك تعمية الرسالة ليُرسل المفاتيح إلى هذا الجهاز. - انطِق - امسح + انطِق + امسح متّصل غير متّصل خامل @@ -1097,7 +1079,7 @@ ظهور الرسائل في «ماترِكس» شبيه كثيرًا بالبريد الإلكتروني. نسياننا لرسائلك يعني أن الرسائل التي أرسلتها لن تُشارك مع أي مستخدم جديد أو غير مسجّل، إلا أن المستخدمين المسجّلين الذي يقدرون على الوصول إليها سيمتلكون نسخة عنها. طُلب مفتاح البصمة Ed25519 الرسائل الآمنة - تخطي + تخطي تم خطأ المكالمات @@ -1114,14 +1096,14 @@ ليس لديك تصريح لبدء إجتماع ليس لديك تصريح لبدء إجتماع في هذه الغرفة إبدأ بالمحادثة - إعادة ضبط - إصرف - أوقف - شغل - إفصل - أبّطل + إعادة ضبط + إصرف + أوقف + شغل + إفصل + أبّطل لاشيء - إبقى + إبقى ستفقد الوصول إلى رسائلك المشفرة إلا إذا أخذت نسخة إحتياطية من مفاتيحك قبل تسجيلك للخروج. نسخة إحتياطية هل أنت متأكد؟ @@ -1313,11 +1295,11 @@ أمتأكد من الخروج؟ رَفض قبُول - رَفض - مراجعة - تجاهل - إِجهَاض - قبُول + رَفض + مراجعة + تجاهل + إِجهَاض + قبُول اتصل على أي حال لا يمكن مكالمة نفسك تَعَلَّم المَزِيد diff --git a/vector/src/main/res/values-az/strings.xml b/vector/src/main/res/values-az/strings.xml index 3821dcfb73..d92a66f2c3 100644 --- a/vector/src/main/res/values-az/strings.xml +++ b/vector/src/main/res/values-az/strings.xml @@ -50,7 +50,7 @@ %1$s %2$s üçün dəvəti qəbul etdi ** Şifrəni aça bilmir: %s ** - Göndərənin cihazı bu mesaj üçün açarları bizə göndərməyib. + Göndərənin cihazı bu mesaj üçün açarları bizə göndərməyib. Redaktə etmək olmur Mesaj göndərmək olmur diff --git a/vector/src/main/res/values-b+sr+Latn/strings.xml b/vector/src/main/res/values-b+sr+Latn/strings.xml index c5f3d3b407..942c012bfc 100644 --- a/vector/src/main/res/values-b+sr+Latn/strings.xml +++ b/vector/src/main/res/values-b+sr+Latn/strings.xml @@ -34,18 +34,18 @@ Učitavanje… U redu - Otkaži - Sačuvaj - Napusti - Ostani - Pošalji - Pošalji ponovo - Ukloni - Podeli + Otkaži + Sačuvaj + Napusti + Ostani + Pošalji + Pošalji ponovo + Ukloni + Podeli Kasnije - Prosledi - Obriši - Preimenuj + Prosledi + Obriši + Preimenuj Konferencijski poziv u toku. \nPriključi se kao %1$s ili %2$s Glas @@ -60,14 +60,14 @@ Ipak zovi Ipak pošalji ili - Pošalji pozivnicu - Prihvati - Preskoči + Pošalji pozivnicu + Prihvati + Preskoči Gotovo - Obustavi - Ignoriši - Pregledaj - Odbaci + Obustavi + Ignoriši + Pregledaj + Odbaci Izađi Akcije @@ -81,7 +81,7 @@ Označi kao pročitano Otvori Zatvori - Onemogući + Onemogući Potvrda Upozorenje @@ -128,7 +128,7 @@ Ponovi lozinku Potvrdite vašu novu lozinku Pogrešno korisničko ime i/ili lozinka - Obriši + Obriši Vidi izvor Prijavi sadržaj Napredak (%s%%) diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 13e254acf7..f6c80b4817 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -47,7 +47,7 @@ В момента не е възможно да се присъедините отново към празна стая. Имейл адрес Телефонен номер - Устройството на подателя не изпрати ключовете за това съобщение. + Устройството на подателя не изпрати ключовете за това съобщение. %1$s изпрати стикер. Покана от %s Покана за стая @@ -212,7 +212,6 @@ Създадохте дискусията %1$s създаде дискусията Шифровано съобщение - Светла тема Тъмна тема Черна тема @@ -272,20 +271,20 @@ Информация за общността Зареждане… ОК - Откажи - Запази - Напусни - Изпрати - Изпрати отново - Премахни - Цитирай - Сподели + Откажи + Запази + Напусни + Изпрати + Изпрати отново + Премахни + Цитирай + Сподели По-късно - Препрати + Препрати Permalink Виж източника - Изтрий - Преименувай + Изтрий + Преименувай Докладвай съдържанието Активен разговор Следене за събития @@ -305,7 +304,7 @@ Групови разговори не се поддържат в шифровани стаи Изпрати въпреки това или - Покани + Покани Офлайн Изход Действия @@ -318,7 +317,7 @@ Бърз отговор Отвори Затвори - Изключи + Изключи Потвърждение Предупреждение Начало @@ -517,17 +516,6 @@ СЪОБЩЕНИЯ ХОРА ФАЙЛОВЕ - ВЛЕЗ - ДИРЕКТОРИЯ - ЛЮБИМИ - СТАИ - НИСЪК ПРИОРИТЕТ - ПОКАНИ - Започни чат - Създай стая - Присъедини се към стая - Присъединяване към стая - Напишете ID или псевдоним на стая Прегледай директорията %d стая @@ -759,7 +747,6 @@ %d активно приспособление %d активни приспособления - Неуспешно създаване на приспособление. Неуспешно изпращане на заявката. Нивото на достъп трябва да бъде позитивно число. @@ -793,10 +780,10 @@ ДА НЕ Продължи - Премахни - Влез - Прегледай - Откажи + Премахни + Влез + Прегледай + Откажи Повторно присъединяване Забрави стаята Профилна снимка @@ -861,19 +848,15 @@ Най-голям Огромен Използване на камерата на телефона - Добавихте ново устройство \'%s\', което изисква ключове за шифроване. Вашето непотвърдено устройство \'%s\' изисква ключове за шифроване. Започни потвърждението Сподели без потвърждение Игнорирай поканата - Предупреждение! Груповите разговори са в процес на разработка и не са надеждни. - Грешка в командата Неразпозната команда: %s - Изключено Шумно Създай @@ -882,7 +865,6 @@ Пример ID на общност пример - Начало Хора Стаи @@ -937,9 +919,9 @@ За да продължите, моля въведете паролата си: Деактивирай акаунта Лицензи от трети страни - Изтегли - Говори - Изчисти + Изтегли + Говори + Изчисти Изисквай повторно ключове за шифроване от другите ми устройства. Заявката за ключове беше изпратена. Изпратена заявка @@ -1037,7 +1019,7 @@ +%d %d+ Звънни въпреки това - Приемам + Приемам Моля прегледайте и приемете политиките на сървъра: Обаждания Използвай мелодията по подразбиране на ${app_name} за входящи повиквания @@ -1133,7 +1115,7 @@ Резервно копие на ключовете Използвай резервно копие на ключовете Резервното копиране на ключовете не е завършило. Моля почакайте… - Пропусни + Пропусни Готово Разширени настройки за известия Важност на известията според типа събитие @@ -1230,8 +1212,8 @@ Сигурни ли сте? Резервно копие Ако не направите резервно копие на ключовете преди да излезете, ще загубите достъп до шифрованите съобщения. - Остани - Прекрати + Остани + Прекрати Сигурни ли сте, че искате да се отпишете\? Режим икономия на данни игнорира уведомленията за пишещи хора, както и информация за онлайн статуса на потребители. Възстановяване на шифровани съобщения @@ -1277,7 +1259,7 @@ Изчисляване на ключ за възстановяване… Изтегляне на ключове… Импортиране на ключове… - Отхвърли + Отхвърли URL адресът не е достъпен, моля проверете Устройството Ви използва остарял TLS протокол за сигурност, който е уязвим към атаки. За ваша безопасност няма да може да се свържете Изпращай съобщения с Enter @@ -1387,8 +1369,8 @@ Стаи Вашите стаи се показват тук Реакции - Съгласен съм - Харесвам + Съгласен съм + Харесвам Добави реакция Виж реакциите Реакции @@ -1470,8 +1452,8 @@ Филтрирай по потребител или ID… Присъединяване в стая… Виж историята на редакциите - Прегледай - Откажи + Прегледай + Откажи За да продължите трябва да приемете условията за използване на услугата. Условия за ползване Прегледай условията @@ -1479,8 +1461,8 @@ Използвайте ботове, връзки с други мрежи, приспособления и стикери Прочетете на Нищо - Оттегли - Прекъсни + Оттегли + Прекъсни Не е настроен сървър за самоличност. Обаждането се провали поради грешно настроен сървър Попитайте администратора на сървъра (%1$s) да конфигурира TURN сървър за да може разговорите да работят надеждно. @@ -1782,8 +1764,8 @@ Съобщението беше изтрито Показвай премахнатите съобщения Показвай индикатор на мястото на премахнатите съобщения - Възпроизведи - Пауза + Възпроизведи + Пауза Причина за изгонване Изгонване на потребител Сигурни ли сте, че искате да откажете изпратената към този потребител покана\? @@ -1836,8 +1818,8 @@ Нямате привилегии да започнете разговор в тази стая Нямате привилегии да започнете конферентен разговор Нямате привилегии да стартирате конферентен разговор в тази стая - Нулирай - Затвори + Нулирай + Затвори Кръстосано-подписване Новата ви сесия вече е потвърдена и има достъп до шифрованите съобщения. Другите потребители ще я виждат като доверена. Съобщенията с този потребител са шифровани от-край-до-край и не могат да бъдат разчетени от трети страни. @@ -1921,7 +1903,6 @@ Изчакване… Резултат от проверка Реагира с: %s - Бот бутони Анкета Стикер Файл @@ -2065,15 +2046,6 @@ Ако не можете да достъпите съществуваща сесия Използвай парола или ключ за възстановяване Създава проста анкета - Избрана опция - - %d глас - Финални резултати - %d гласа - Финални резултати - - - %d глас - %d гласа - Изтриване на профилните данни от тип %1$s\? \n \nВнимавайте с това - може да доведе до неочаквано поведение. @@ -2174,7 +2146,7 @@ Поддържа се само в шифровани стаи Принудително премахва текущата изходяща групова сесия от шифрованата стая Използвайте последната версия на ${app_name} за устройствата си: - или друг Matrix клиент поддържаш кръстосано-подписване + или друг Matrix клиент поддържаш кръстосано-подписване ${app_name} iOS \n${app_name} Android ${app_name} Web diff --git a/vector/src/main/res/values-bn-rBD/strings.xml b/vector/src/main/res/values-bn-rBD/strings.xml index db2ee10bbc..f834222d25 100644 --- a/vector/src/main/res/values-bn-rBD/strings.xml +++ b/vector/src/main/res/values-bn-rBD/strings.xml @@ -395,17 +395,6 @@ %d ঘরগুলি ব্রাউস নির্দেশনা - আদর্শ ঘরের পরিচয় অথবা একটা ঘর আর উপনাম - যোগকরুন একটা ঘর - যোগদান করুন ঘরে - ঘর তৈরিকরা - চ্যাট শুরু করুন - আমন্ত্রণ - কম গুরুত্ব - ঘরগুলি - প্রিয় - নির্দেশক - যোগদান নথি লোকজন বার্তাগুলি @@ -686,7 +675,7 @@ ত্রুটি সতর্কতা প্রতিপাদন - অক্ষম + অক্ষম ক্লিপবোর্ডে অনুলিপি করা হয়েছে অনুলিপি বন্ধ @@ -705,10 +694,10 @@ বন্ধ করুন পতন গ্রহণ - পতন - পর্যালোচনা - উপেক্ষা - বাতিল + পতন + পর্যালোচনা + উপেক্ষা + বাতিল সম্পন্ন \'%s\' একটি উপনাম জন্য বৈধ বিন্যাস নয় অবৈধ উদীয়মান বিন্যাস @@ -911,10 +900,10 @@ রায়ট এমনভাবে পটভূমিতে সিঙ্ক হবে যা ডিভাইসের সীমিত সংস্থান (ব্যাটারি) সংরক্ষণ করে। \nআপনার ডিভাইস রিসোর্স স্থিতির উপর নির্ভর করে সিঙ্কটি অপারেটিং সিস্টেম দ্বারা পিছিয়ে যেতে পারে। ব্যাটারির জন্য অনুকূলিত - বাদ - স্বীকার + বাদ + স্বীকার অফলাইন - আমন্ত্রণ + আমন্ত্রণ বা যেকোন ভাবেই পাঠাও যেকোন ভাবেই কল করুন @@ -929,33 +918,33 @@ ধ্বনি চলমান সম্মেলন কল। \n %1$s বা %2$s হিসাবলে জুড়ুন - বাতিল - থামাও - চালু + বাতিল + থামাও + চালু সক্রিয় কল কন্টেন্ট রিপোর্ট করুন - বিযুক্ত - রদ কর + বিযুক্ত + রদ কর কোনটা না - পুনঃনামকরণ - মুছুন + পুনঃনামকরণ + মুছুন ডিক্রিপ্টেড সোর্স দেখুন সোর্স দেখুন পার্মালিঙ্ক - ফরওয়ার্ড + ফরওয়ার্ড পরে - পরিষ্কার - বলা - ভাগ - ডাউনলোড - উদ্ধৃতি - অপসারণ - আবার পাঠান - পাঠান - থাক - ত্যাগ - সংরক্ষিত - বাতিল + পরিষ্কার + বলা + ভাগ + ডাউনলোড + উদ্ধৃতি + অপসারণ + আবার পাঠান + পাঠান + থাক + ত্যাগ + সংরক্ষিত + বাতিল ঠিক লোড হচ্ছে… তৃতীয় পক্ষের লাইসেন্সগুলি @@ -1077,7 +1066,7 @@ চিত্র আপলোড করতে ব্যর্থ বার্তা পাঠাতে অক্ষম পুনরায় প্রতিক্রিয়া করতে পারেনি - প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি। + প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি। ** ডিক্রিপ্ট করতে অক্ষম: %s ** %1$s %2$s থেকে %3$s পর্যন্ত %1$s %2$s এর পাওয়ার স্তর পরিবর্তন করেছে। @@ -1290,10 +1279,10 @@ সিঙ্ক করা হচ্ছে… হেডার খোলো সদস্যদের তালিকা - প্রত্যাখ্যান - প্রিভিউ - যোগদান - অপসারণ + প্রত্যাখ্যান + প্রিভিউ + যোগদান + অপসারণ প্রলম্বিত না হ্যাঁ diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index 0fd00b03fe..1307061350 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -99,7 +99,7 @@ %1$s %2$s এর পাওয়ার স্তর পরিবর্তন করেছে। %1$s %2$s থেকে %3$s পর্যন্ত ** ডিক্রিপ্ট করতে অক্ষম: %s ** - প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি। + প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি। পুনরায় প্রতিক্রিয়া করতে পারেনি বার্তা পাঠাতে অক্ষম চিত্র আপলোড করতে ব্যর্থ @@ -226,25 +226,25 @@ লোড হচ্ছে… ঠিক - বাতিল - সংরক্ষিত - ত্যাগ - থাক - পাঠান - আবার পাঠান - অপসারণ - উদ্ধৃতি - ডাউনলোড - ভাগ - বলা - পরিষ্কার + বাতিল + সংরক্ষিত + ত্যাগ + থাক + পাঠান + আবার পাঠান + অপসারণ + উদ্ধৃতি + ডাউনলোড + ভাগ + বলা + পরিষ্কার পরে - ফরওয়ার্ড + ফরওয়ার্ড পার্মালিঙ্ক সোর্স দেখুন ডিক্রিপ্টেড সোর্স দেখুন - মুছুন - পুনঃনামকরণ + মুছুন + পুনঃনামকরণ কন্টেন্ট রিপোর্ট করুন সক্রিয় কল চলমান সম্মেলন কল। @@ -261,13 +261,13 @@ যেকোন ভাবেই কল করুন যেকোন ভাবেই পাঠাও বা - আমন্ত্রণ + আমন্ত্রণ অফলাইন - স্বীকার - বাদ + স্বীকার + বাদ সম্পন্ন - বাতিল - উপেক্ষা + বাতিল + উপেক্ষা প্রস্থান ক্রিয়াকলাপ @@ -282,7 +282,7 @@ খুলুন বন্ধ ক্লিপবোর্ডে অনুলিপি করা হয়েছে - অক্ষম + অক্ষম প্রতিপাদন সতর্কতা @@ -529,10 +529,10 @@ না প্রলম্বিত - অপসারণ - যোগদান - প্রিভিউ - প্রত্যাখ্যান + অপসারণ + যোগদান + প্রিভিউ + প্রত্যাখ্যান সদস্যদের তালিকা হেডার খোলো @@ -684,18 +684,6 @@ লোকজন নথি - যোগদান - নির্দেশক - প্রিয় - ঘরগুলি - "কম গুরুত্ব " - আমন্ত্রণ - চ্যাট শুরু করুন - ঘর তৈরিকরা - যোগদান করুন ঘরে - যোগকরুন একটা ঘর - আদর্শ ঘরের পরিচয় অথবা একটা ঘর আর উপনাম - ব্রাউস নির্দেশনা "একটা ঘর " @@ -1260,10 +1248,10 @@ কর্ম প্রদর্শন করে দেওয়া আইডি সঙ্গে ব্যবহারকারী কে নিষিদ্ধ করে কোনটা না - রদ কর - বিযুক্ত - পর্যালোচনা - পতন + রদ কর + বিযুক্ত + পর্যালোচনা + পতন কোনও পরিচয় সার্ভার কনফিগার করা নেই। @@ -1427,9 +1415,9 @@ এই হোমসার্ভারটি তার মাসিক অ্যাক্টিভ ব্যবহারকারীর সীমাটিতে আঘাত করেছে তাই কিছু ব্যবহারকারী লগ ইন করতে পারবেন না এই হোমসার্ভারটি তার মাসিক সক্রিয় ব্যবহারকারীর সীমাতে ছুঁয়েছে। - চালু - থামাও - বাতিল + চালু + থামাও + বাতিল অনুলিপি diff --git a/vector/src/main/res/values-bs/strings.xml b/vector/src/main/res/values-bs/strings.xml index 8628a56a26..01cf6ae13d 100644 --- a/vector/src/main/res/values-bs/strings.xml +++ b/vector/src/main/res/values-bs/strings.xml @@ -18,21 +18,21 @@ Istorijski Izvještaj o Greški OK - Otkaži - Snimi - Napusti - Pošalji - Pošalji Ponovo - Uredi - Citat - Podijeli + Otkaži + Snimi + Napusti + Pošalji + Pošalji Ponovo + Uredi + Citat + Podijeli Poslije - Proslijedi + Proslijedi Permalink Pogledaj Izvor Pogledaj Dekriptovani Izvor - Izbriši - Preimenuj + Izbriši + Preimenuj Prijavi sadržaj Aktivni poziv "Konferencijski poziv u toku.\nPridruži se putem %1$s ili %2$s." @@ -46,7 +46,7 @@ Konferencijski pozivi nisu podržani u šifriranim sobama Ipak pošalji ili - Pozovi + Pozovi Offline Odjavi se Glasovni Poziv @@ -58,7 +58,7 @@ Otvori Zatvori Kopirano - Isključi + Isključi Potvrda Upozorenje Naslovna @@ -226,10 +226,10 @@ Dopustite pristup sljedećem skočnom prozoru da biste otkrili kontakte koji kor DA NE Nastavi - Ukloni - Spoji - Pregled - Odbij + Ukloni + Spoji + Pregled + Odbij Idi na prvu nepročitanu poruku. Pozvani ste da %s se pridružite u ovu sobu Ova je pozivnica poslana na%, koja nije povezana s ovim računom. @@ -318,17 +318,6 @@ Da li ste sigurani? PORUKE LJUDI FAJLOVI - PRIDRUŽI SE - DIREKTORIJ - FAVORITI - SOBE - NISKI PRIORITET - POZIVI - Započni razgovor - Napravi sobu - Pridruži se sobi - Pridriži se u sobu - Upišite ID sobe ili alias sobe Pretražite imenik Traži direktorij.. Favorit diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 9f8f2a98b0..d55d9b8fd5 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -38,7 +38,7 @@ %1$s ha enviat una invitació a %2$s perquè s\'uneixi a la sala %1$s ha acceptat la invitació de %2$s ** No s\'ha pogut desxifrar: %s ** - El dispositiu del remitent no ens ha enviat les claus per aquest missatge. + El dispositiu del remitent no ens ha enviat les claus per aquest missatge. No s\'ha pogut redactar No s\'ha pogut enviar el missatge No s\'ha pogut pujar la imatge @@ -48,7 +48,6 @@ %1$s a canviat el seu àlies a %2$s %s ha realitzat una videotrucada. %s ha realitzat una trucada de veu. - Invitació de %s Convida a la sala %1$s i %2$s @@ -263,16 +262,13 @@ %1$s ha iniciat una videoconferència Has iniciat una videoconferència %1$s ha finalitzat la videoconferència - Tema clar Tema fosc Tema negre - Sincronitzant… Escoltant esdeveniments Notificacions amb so Notificacions silencioses - Missatges Sala Configuració @@ -280,23 +276,22 @@ Historial Informe d\'errors Detalls de la comunitat - D\'acord - Cancel·la - Desa - Marxa - Envia - Reenvia - Elimina - Cita - Comparteix + Cancel·la + Desa + Marxa + Envia + Reenvia + Elimina + Cita + Comparteix Més tard - Reenvia + Reenvia Enllaç permanent Visualitza el codi font Visualitza el codi font desencriptat - Elimina - Canvia el nom + Elimina + Canvia el nom Informa del contingut Trucada activa Videoconferència en curs. @@ -311,9 +306,8 @@ No s\'admeten conferències en sales xifrades Envia igualment o - Convida + Convida Fora de línia - Tanca la sessió Trucada Videotrucada @@ -324,25 +318,20 @@ Obre Tanca S\'ha copiat al porta-retalls - Desactiva - + Desactiva Confirmació Avís - Inici Preferits Persones Sales - Filtra noms de sala Filtra preferits Filtra persones Filtra noms de sala Filtra noms de comunitat - Invitacions Prioritat baixa - Xats personals Llibreta d\'adreces local Directori d\'usuari @@ -350,7 +339,6 @@ No hi ha xats No has donat permís a ${app_name} perquè pugui accedir als teus contactes locals Sense resultats - Sales Directori de sala No hi ha sales @@ -359,7 +347,6 @@ %d usuari %d usuaris - Convida Comunitats No hi ha grups @@ -395,7 +382,6 @@ Fes una foto o un vídeo Fes una foto Fes un vídeo - Entra Crea un compte Tramet @@ -443,7 +429,6 @@ La contrasenya s\'ha reiniciat. \n \nSe t\'ha desconnectat de totes les teves sessions i no rebràs més notificacions. Per reactivar les notificacions, torna a iniciar sessió a cada dispositiu. - La URL ha de començar per http[s]:// No s\'ha pogut iniciar la sessió: error de xarxa No s\'ha pogut iniciar la sessió @@ -458,28 +443,20 @@ S\'han enviat massa peticions Aquest nom d\'usuari ja està en ús L\'enllaç del correu electrònic que encara no heu fet clic - - Llista de confirmacions de lectura - - Envia com Original Gran Mitjana Petita - "Voleu cancel·lar la baixada? Voleu cancel·lar la pujada? %d s %1$dm %2$ds - Ahir Avui - Nom de la sala Tema de la sala - Truca Trucada establerta Establint la trucada… @@ -493,10 +470,8 @@ Ha fallat la connexió de mitjans No es pot iniciar la càmera s\'ha contestat la trucada des d\'un altre lloc - Fes una foto o un vídeo" No es poden gravar vídeos" - Informació Per poder enviar i desar fitxers adjunts, ${app_name} necessita permís per accedir a la galeria de fotos i vídeos. \n @@ -517,31 +492,25 @@ \n \nPermets que ${app_name} accedeixi als teus contactes amb aquesta finalitat\? No s\'ha realitzat l\'acció per falta de permisos - Desat Desar a baixades? NO Continua - - Elimina - Uneix-te - Previsualitza - Rebutja - + Elimina + Uneix-te + Previsualitza + Rebutja Vés fins al primer no llegit - L\'usuari %s t\'ha convidat a unir-te a aquesta sala Aquesta invitació s\'ha enviat a %s, que no està associat amb aquest compte. \nPotser hauries d\'iniciar sessió amb un compte diferent o afegir aquest correu electrònic al teu compte. Estàs intentant accedir a %s. Vols unir-te per poder participar en la discussió\? una sala Això és una previsualització de la sala. Les interaccions de la sala estan desactivades. - Nou xat Afegeix un participant 1 participant - Marxa de la sala Estàs segur que vols marxar de la sala\? Estàs segur que vols eliminar %s d\'aquest xat\? @@ -570,7 +539,6 @@ \nN\'estàs segur\? Estàs segur que vols convidar a %s a aquest xat\? Si vetes un usuari, se l\'expulsarà d\'aquesta sala i no podrà tornar a unir-s\'hi. - Convida per ID CONTACTES LOCALS (%d) DIRECTORI D\'USUARI (%s) @@ -578,7 +546,6 @@ Convida un usuari per ID Introdueix un o més correus electrònics o identificadors de Matrix Correu electrònic o ID de Matrix - Cerca %s està escrivint… %1$s & %2$s estan escrivint… @@ -594,7 +561,6 @@ Elimina els missatges no enviats No s\'ha trobat el fitxer No tens permís per publicar en aquesta sala. - Confia No hi confiïs Tanca sessió @@ -606,7 +572,6 @@ El certificat ha canviat respecte aquell en el qual el telefon confia. Això NO ÉS GENS HABITUAL. Es recomana que NO ACCEPTEU el certificat nou. El certificat en el que confiàveu ha canviat per un en el que no confieu. El servidor pot haver renovat el certificat. Contacteu amb l\'administrador del servidor per saber l\'empremta digital esperada. Només accepteu el certificat si l\'administrador del servidor ha publicat una empremta digital que coincideixi amb l\'anterior. - Detalls de la sala Participants Fitxers @@ -614,14 +579,12 @@ L\'ID és incorrecte. Ha de ser una adreça de correu electrònic o un identificador de Matrix com \'@partlocal:domini\' CONVIDATS S\'HAN UNIT - Motiu per informar d\'aquest contingut Vols amagar tots els missatges d\'aquest usuari\? \n \nTingues en compte que aquesta acció reiniciarà l\'aplicació i pot trigar una estona. Cancel·la la pujada Cancel·la la baixada - Cerca Filtra els participants de la sala No hi ha resultats @@ -629,29 +592,14 @@ MISSATGES PARTICIPANTS FITXERS - - UNEIX-TE - DIRECTORI - PREFERITS - SALES - PRIORITAT BAIXA - CONVIDA - Inicia un xat - Crea una sala - Uneix-te a la sala - Uneix-te a una sala - Escriviu un id de sala o un àlies de sala - Navega pel directori S\'està cercant al directori… - Preferit Treu prioritat Xat directe Marxa del xat Oblida Afegeix a la pantalla d\'inici - Missatges Configuració Versió @@ -659,7 +607,6 @@ Avisos de tercers Copyright Política de privacitat - Foto de perfil Àlies Correu electrònic @@ -711,7 +658,6 @@ Mostra sempre l\'hora a tots els missatges Mostra l\'hora en el format de 12 hores Vibra quan mencionin un usuari - Analítiques Mode d\'estalvi de dades Detalls de la sessió @@ -758,42 +704,33 @@ S\'ha produït un error mentre es validava el número de telèfon Codi Insígnia - Tres dies Una setmana Un mes Per sempre - - Foto de la sala Nom de la sala Tema Etiqueta de la sala Etiquetat com a: - Preferit Prioritat baixa Cap - Accés i visibilitat Mostra aquesta sala al directori de sales Accés a la sala Permisos de lectura de l\'històric de la sala Qui pot llegir l\'històric\? Qui pot accedir a la sala? - Qualsevol Només participants (a partir del moment en què es seleccioni aquesta opció) Només participants (des de que són convidats) Només participants (des de que s\'uneixen a la sala) - La sala ha de tenir una adreça per tal d\'unir-s\'hi. Només persones que hagin estat convidades Qualsevol que tingui l\'enllaç de la sala, a part dels convidats Qualsevol que tingui l\'enllaç de la sala, inclosos els convidats - Usuaris vetats - Avançat ID intern d\'aquesta sala Adreces @@ -804,7 +741,6 @@ Necessites tancar la sessió per poder activar el xifrat. Xifra només a sessions verificades No enviïs mai, des d\'aquesta sessió, missatges xifrats a sessions no verificades en aquesta sala. - Aquesta sala no té adreces locals Adreça nova (p.e. #foo:matrix.org) Aquesta sala no mostra insígnies per a cap comunitat @@ -823,12 +759,9 @@ El xifrat en aquesta sala està desactivat. Activa el xifrat \n(avís: no es podrà desactivar!) - Directori Tema - %s ha intentat carregar un moment concret de la cronologia d\'aquesta sala però no l\'ha trobat. - Informació de l\'encriptació d\'extrem a extrem Informació d\'esdeveniment ID d\'usuari @@ -872,23 +805,19 @@ Verifica comparant el següent amb la configuració d\'usuari de la teva altra sessió: Si no coincideixen pot ser que la seguretat de la comunicació estigui compromesa. Verifica que les claus coincideixen - La sala conté sessions desconegudes Aquesta sala conté sessions desconegudes que no han estat verificades. \nAixò vol dir que no hi ha garanties de que aquestes sessions pertanyin als usuaris que diuen ser. \nRecomanem que, abans de continuar, duguis a terme el procés de verificació de cadascuna de les sessions. Però, si ho prefereixes, pots reenviar el missatge sense la verificació. \n \nSessions desconegudes: - Tria un directori de sales És possible que el servidor no estigui disponible o que estigui sobrecarregat Introdueix un servidor base per veure les seves sales públiques URL del servidor base Totes les sales del servidor %s Totes les sales natives de %s - Busca a l\'historial - Mida de la font Molt petita Petita @@ -897,12 +826,10 @@ Molt gran Més gran Enorme - Necessites permisos per gestionar ginys en aquesta sala Ha fallat la creació del giny Fes conferències amb jitsi Confirmes que vols eliminar el giny d\'aquesta sala\? - No s\'ha pogut crear el giny. No s\'ha pogut enviar la sol·licitud. El nivell d\'autoritat ha de ser un enter positiu. @@ -913,30 +840,24 @@ La sala %s no és visible. Afegeix aplicacions de Matrix Utilitza la càmera nativa - Has afegit una nova sessió \'%s\' que està sol·licitant les claus de xifrat. La teva sessió no verificada \'%s\' està sol·licitant les claus de xifrat. Inicia la verificació Comparteix sense verificar Ignora la sol·licitut - Avís! Les conferències estan en desenvolupament i pot ser que no funcionin bé. - Error de comandament Ordre no reconegut: %s - Apagat Amb so Missatge xifrat - Crea Crea una comunitat Nom de la comunitat Exemple ID de la comunitat exemple - Inici Usuaris Sales @@ -1007,13 +928,12 @@ %d giny actiu %d ginys actius - Envia un adhesiu Envia un adhesiu Llicències de tercers - Baixa - Parla - Esborra + Baixa + Parla + Esborra Envia veu seguir amb… Ho sento, no s\'ha trobat cap aplicació externa per completar l\'acció. @@ -1138,7 +1058,7 @@ Ho sentim, s\'ha produït un error desplega plega - Accepta + Accepta Trucada Utilitza el to de trucada d\'${app_name} predeterminat per trucades entrants To de trucada entrant @@ -1204,7 +1124,7 @@ No s\'ha trobat cap APK de Google Play Services vàlid. Les notificacions poden no funcionar correctament. Còpia de seguretat de les claus Utilitza la còpia de seguretat de les claus - Omet + Omet Fet Configuració de notificacions avançada Importància de les notificacions per esdeveniment @@ -1340,8 +1260,8 @@ Utilitza la còpia de seguretat de les claus N\'estàs segur\? Còpia de seguretat - Queda\'t - Avorta + Queda\'t + Avorta Estàs segur que vols tancar la sessió\? Recuperació de missatges xifrats Introduïu un nom d\'usuari. @@ -1390,7 +1310,7 @@ \n \nSi no has configurat el nou mètode de recuperació, un atacant podria estar intentant accedir al teu compte. Canvia la contrasenya del teu compte i configura un nou mètode de recuperació a la configuració immediatament. Inicialitzant servei - Ignora + Ignora Inicia sessió amb la inscripció única (SSO) Aquesta URL no està disponible , si us plau verifiqueu-la El teu dispositiu està utilitzant una versió obsoleta del protocol de seguretat TLS, vulnerable a atacs. Per a la teva pròpia seguretat, no et pots connectar @@ -1501,8 +1421,8 @@ Sales Les teves sales es mostraran aquí. Clica el + de la part inferior dreta per buscar-ne d\'existents o per crear-ne una. Reaccions - Confirmar - M\'agrada + Confirmar + M\'agrada Afegir reacció Veure reaccions Reaccions @@ -1593,7 +1513,7 @@ Penja Rebutja Accepta - Rebutja + Rebutja No s\'ha pogut eliminar el giny No s\'ha pogut afegir el giny No pots iniciar una trucada amb tu mateix, espera que els participants acceptin la invitació @@ -1606,19 +1526,19 @@ No tens permís per iniciar una trucada en aquesta sala No tens permís per iniciar una conferència No tens permís per iniciar una videoconferència en aquesta sala - Reinicia - Omet - Atura - Desconnecta - Revoca + Reinicia + Omet + Atura + Desconnecta + Revoca Cap Trucada activa (%s) Demana confirmació abans d\'iniciar una trucada Evita trucada accidental La descripció és massa curta Envia l\'historial de sol·licituds de compartició de claus - Revisa - Reprodueix + Revisa + Reprodueix Activa l\'HD Desactiva l\'HD Posterior @@ -2025,7 +1945,7 @@ Obre el xat Silencia el micròfon El codi PIN és l\'única manera de desbloquejar ${app_name}. - o un altre client Matrix compatible amb la signatura creuada + o un altre client Matrix compatible amb la signatura creuada La signatura creuada no està activada La signatura creuada està activada \nClaus no fiables @@ -2252,15 +2172,6 @@ Si no pots accedir a una sessió existent Utilitza una frase de recuperació o una clau Crea una votació simple - Opció seleccionada - - %d vot - Resultat final - %d vots - Resultat final - - - %d vot - %d vots - Vols eliminar les dades del compte de tipus %1$s\? \n \nVés en compte, pot ser que provoqui comportaments inesperats. @@ -2522,7 +2433,6 @@ Esperant… Conclusió de la verificació Ha reaccionat amb: %s - Botons de bot Votació Adhesiu Imatge. diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 92ffbe0b46..22a566e2ca 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -40,7 +40,7 @@ %1$s do této místnosti pozvali %2$s %1$s přijali pozvání pro %2$s ** Nelze dešifrovat: %s ** - Odesílatelovo zařízení nám neposlalo klíče pro tuto zprávu. + Odesílatelovo zařízení nám neposlalo klíče pro tuto zprávu. Nelze vymazat Zprávu nelze odeslat Obrázek nelze nahrát @@ -280,18 +280,18 @@ Místnost Nastavení OK - Uložit + Uložit Načítám… - Zrušit - Odeslat - Opustit - Sdílet - Předat + Zrušit + Odeslat + Opustit + Sdílet + Předat Zobrazit zdroj - Odstranit - Přejmenovat + Odstranit + Přejmenovat nebo - Pozvat + Pozvat Offline Zapomenout místnost Probíhá synchronizace… @@ -302,9 +302,9 @@ Historický Podrobnosti o komunitě Naslouchám událostem - Poslat znovu - Odstranit - Citovat + Poslat znovu + Odstranit + Citovat Později Trvalý odkaz Zobrazit dešifrovaný zdroj @@ -333,7 +333,7 @@ Otevřít Zavřít Zkopírovat do schránky - Vyřadit + Vyřadit Potvrzení Varování Úvod @@ -452,12 +452,12 @@ Toto uživatelské jméno je již použito Odeslat nálepku Licenční smlouvy třetích stran - Stáhnout - Hovořit - Vymazat + Stáhnout + Hovořit + Vymazat Z důvodu chybějících práv není tato akce možná. Přesto volat - Přijmout + Přijmout Chyba Systémová upozornění Prosím, popište chybu. Co jste provedli\? Jaké bylo očekávané chování\? Co se ve skutečnosti stalo\? @@ -537,16 +537,16 @@ ANO NE Pokračovat - Odstranit - Vstoupit - Náhled + Odstranit + Vstoupit + Náhled Byli jste pozváni od %s ke vstupu do místnosti Žádost odeslána Prosím, spusťte ${app_name} na jiném zařízení, které může dešifrovat zprávu, aby poslalo klíče této relaci. Seznam doručenek Seznam skupin Omlouváme se, ale akce nebyla provedena z důvodu chybějících oprávnění - Odmítnout + Odmítnout Zobrazit členy Otevřít záhlaví Synchronizuji… @@ -673,10 +673,10 @@ Opravdu\? Záloha Pokud nezazálohujete své klíče před odhlášením, přijdete o přístup ke svým zašifrovaným zprávám. - Zůstat - Přeskočit + Zůstat + Přeskočit Hotovo - Zrušit + Zrušit Opravdu se chcete odhlásit\? Video hovor probíhá… ${app_name} potřebuje oprávnění pro přístup k Vaší kameře a mikrofonu pro uskutečnění video hovoru. @@ -714,17 +714,6 @@ ZPRÁVY LIDÉ SOUBORY - VSTOUPIT - ADRESÁŘ - OBLÍBENÉ - MÍSTNOSTI - NÍZKÁ PRIORITA - POZVÁNKY - Začít konverzaci - Vytvořit místnost - Vstoupit do místnosti - Vstoupit do místnosti - Zadejte ID nebo přezdívku místnosti Procházet adresář %d místnost @@ -767,13 +756,13 @@ Důležitost oznámení na základě události Spouštím služby Ověřit relaci - Odpojit - Ignorovat - Odmítnout + Odpojit + Ignorovat + Odmítnout Označit za přečtené Žádný - Zrušit - Přehled + Zrušit + Přehled Není konfigurován žádný ověřovací server. Volání se nezdařilo kvůli chybné konfiguraci serveru Prosím, požádejte administrátora domovského serveru (%1$s) o konfiguraci TURN serveru, aby hovory fungovaly spolehlivě. @@ -925,8 +914,8 @@ Ostatní Pokročilé Integrace - Použijte správce integrací ke správě botů, můstků, widgetů a nálepkových sad. -\nSprávci integrací obdrží konfigurační data a mohou změnit widgety, poslat pozvánky do místností a nastavit power levels Vaším jménem. + Pomocí správce integrace můžete spravovat boty, propojení, widgety a balíčky nálepek. +\nSprávci integrací přijímají konfigurační data a mohou vaším jménem upravovat widgety, odesílat pozvánky do místností a nastavovat úrovně oprávnění. Kryptografie Správa kryprografických klíčů Cíle oznámení @@ -1542,8 +1531,8 @@ Místnosti Tady budou zobrazeny Vaše místnosti. K vyhledání existujících místností nebo založení nové klepněte na + vpravo dole. Reakce - Souhlasit - Líbí se + Souhlasit + Líbí se Přidat reakci Ukázat reakce Reakce @@ -1625,7 +1614,7 @@ Všeobecné podmínky Pročíst všeobecné podmínky Nechte se najít druhými - Použijte boty, můstky, widgety a nálepkové sady + Použijte boty, propojení, widgety a balíčky nálepek Čtěte na Server pro identity Odpojit server pro identity @@ -1944,7 +1933,7 @@ Zapnout koncové šifrování… Jakmile zapnuto, šifrování nelze vypnout. Zapnout šifrování\? - Jakmile zapnuto, šifrování místnosti nelze vypnout. Zprávy odeslané v zašifrované místnosti nemohou být čteny serverem, ale pouze účastníky místnosti. Zapnutím šifrování mohou boty a můstky přestat správně pracovat. + Jakmile je šifrování místnosti zapnuto, nelze jej vypnout. Zprávy odeslané v zašifrované místnosti nemohou být čteny serverem, ale pouze účastníky místnosti. Zapnutí šifrování může zabránit správnému fungování mnoha botů a propojení. Zapnout šifrování Za účelem bezpečnosti ověřte %s kontrolou jednorázového kódu. Za účelem bezpečnosti to proveďte osobně nebo použijte jiný způsob komunikace. @@ -1996,17 +1985,6 @@ Spojení k serveru bylo ztraceno Vývojářské nástroje Údaje účtu - - %d hlas - %d hlasy - %d hlasů - - - %d hlas - Konečné výsledky - %d hlasy - Konečné výsledky - %d hlasů - Konečné výsledky - - Zvolená možnost Vytvoří jednoduché hlasování Použijte metodu obnovy Pokud se nemůžete dostat do existující relace @@ -2155,7 +2133,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - nebo jiný Matrix klient schopný křížového podepisování + nebo jiný Matrix klient schopný křížového podepisování Použijte na svých zařízeních nejnovější ${app_name}: Vynutí zahození probíhající skupinové relace v šifrované místnosti Podporováno jen v šifrovaných místnostech @@ -2210,9 +2188,9 @@ Jinak můžete zadat URL jakéhokoli jiného serveru identit Zadejte URL serveru identit Odeslat - Přehrát - Pozastavit - Odmítnout + Přehrát + Pozastavit + Odmítnout Nemáte povolení zahájit konferenční hovor v této místnosti Konference již probíhá! Zahájit video schůzku @@ -2366,7 +2344,7 @@ Nemůžete číst tuto zprávu Čekám na tuto zprávu, může to chvíli trvat Nelze dešifrovat - Vzhledem ke koncovému se může stát, že budete muset počkat, než zpráva dorazí, protože vám nebyly správně odeslány šifrovací klíče. + Jelikož se používá koncové šifrování, může se stát, že budete muset počkat, než zpráva dorazí, protože vám nebyly správně odeslány šifrovací klíče. Nemůžete číst tuto zprávu, protože odesílatel Vás blokuje Nemůžete číst tuto zprávu, protože Vaše relace není pro odesílatele důvěryhodná Nemůžete číst tuto zprávu, protože odesílatel účelově neposlal klíče @@ -2417,7 +2395,6 @@ Zobrazit stavové události účastníků v místnosti Zahrnuje události pozvat/vstoupit/opustit/vykopnout/vykázat a změny avatara/veřejného jména. Hlasování - Tlačítka botů Reagoval(a): %s Výsledek ověření Odkaz byl chybně zformován @@ -2490,7 +2467,7 @@ Filtrovat vykázané uživatele Nemáte oprávnění k zahájení hovoru Nemáte oprávnění k zahájení konferenčního hovoru - Resetovat + Resetovat Odkaz na Matrix QR kód nebyl oskenován! Neplatný QR kód (neplatné URI)! @@ -2759,7 +2736,7 @@ Budou moci %s prozkoumat Pozvat do %s Sdílet odkaz - Pozvat podle uživatelského jména + Pozvat podle uživatelského jména Pozvat emailem V tomto okamžiku jste to jen Vy. %s bude s dalšími lepší. Pozvat lidi @@ -3015,7 +2992,7 @@ Pozvání e-mailem, vyhledávání kontaktů a další… Dokončit nastavení objevování. V současné době nepoužíváte server identit. Chcete-li pozvat kolegy a být pro ně zjistitelní, nakonfigurujte jej níže. - Pozvat pomocí uživatelského jména nebo e-mailu + Pozvat pomocí uživatelského jména nebo e-mailu Zajistěte, aby měli do společnosti %s přístup ti správní lidé. Další můžete pozvat později. Kdo jsou vaši kolegové\? Přidat do daného prostoru @@ -3089,4 +3066,54 @@ Souhlasíte se zasíláním těchto informací\? Pro nalezení existujících kontaktů, je třeba odeslat kontaktní informace (e-maily a telefonní čísla) na server identity. Před odesláním vaše údaje zaheslujeme kvůli ochraně osobních údajů. Nyní ne + Opravdu chcete toto hlasování odstranit\? Po odstranění ho již nebude možné obnovit. + Odstranit hlasování + Hlasování skončilo + Hlas odeslán + Povolit hlasování + Ukončit hlasování + Toto zastaví možnost hlasování a zobrazí se konečné výsledky. + Ukončit toto hlasování\? + vítězná volba + Ukončit hlasování + + Konečný výsledek na základě %1$d hlasu + Konečný výsledek na základě %1$d hlasů + Konečný výsledek na základě %1$d hlasů + + + Nikdo nehlasoval + %1$d hlasů. Hlasujte pro zobrazení výsledků + %1$d hlasů. Hlasujte pro zobrazení výsledků + + + Na základě %1$d hlasu + Na základě %1$d hlasů + Na základě %1$d hlasů + + + %1$d hlas + %1$d hlasy + %1$d hlasů + + Systémová nastavení + Verze + Získejte pomoc při používání Elementu + Nápověda a podpora + Nápověda + Právní dokumenty + Tento server neposkytuje žádné zásady. + Knihovny třetích stran + Zásady vašeho serveru identit + Zásady vašeho domovského serveru + Zásady aplikace ${app_name} + Tuto funkci můžete kdykoli vypnout v nastavení + Nesdílíme informace s třetími stranami + Nezaznamenáváme ani neprofilujeme žádné údaje o účtu + zde + Pomozte nám identifikovat problémy a vylepšit Element sdílením anonymních údajů o používání. Abychom pochopili, jak lidé používají více zařízení, vygenerujeme náhodný identifikátor sdílený vašimi zařízeními. +\n +\nMůžete si přečíst všechny naše podmínky %s. + Pomozte vylepšit Element + Povolit \ No newline at end of file diff --git a/vector/src/main/res/values-da/strings.xml b/vector/src/main/res/values-da/strings.xml index 077bf0efda..57d8e5c547 100644 --- a/vector/src/main/res/values-da/strings.xml +++ b/vector/src/main/res/values-da/strings.xml @@ -39,7 +39,7 @@ %1$s inviterede %2$s til rummet %1$s accepterede invitationen til %2$s ** Kunne ikke dekryptere: %s ** - Afsenderens enhed har ikke sendt os nøglerne til denne besked. + Afsenderens enhed har ikke sendt os nøglerne til denne besked. Kunne ikke hemmeligholde Kunne ikke sende besked Kunne ikke uploade billede @@ -68,21 +68,21 @@ Medlemsdetaljer Historisk OK - Afbryd - Gem - Forlad - Send - Send igen - Tilbagehold - Citér - Del + Afbryd + Gem + Forlad + Send + Send igen + Tilbagehold + Citér + Del Senere - Videresend + Videresend Permanent link Se Kilde Se Dekrypteret Kilde - Slet - Omdøb + Slet + Omdøb Rapporter indhold Aktivt opkald Igangværende konferenceopkald.\nForbind med %1$s eller %2$s @@ -96,7 +96,7 @@ Konferenceopkald er ikke understøttede i krypterede rum Send Alligevel eller - Invitér + Invitér Offline Log ud Stemmeopkald @@ -108,7 +108,7 @@ Åben Luk Kopieret til udklipsholder - Slå fra + Slå fra Bekræftigelse Advarsel Hjem @@ -282,10 +282,10 @@ Vil du give ${app_name} adgang til dine kontakter? JA NEJ Fortsæt - Fjern - Forbind - Forhåndsvisning - Afvis + Fjern + Forbind + Forhåndsvisning + Afvis Spring til første ulæste besked. Du er blevet inviteret til at forbinde til dette rum af %s Denne invitation blev sendt til %s som ikke er tilknyttet denne konto. @@ -407,14 +407,6 @@ Er du sikker? MEDDELELSER FOLK FILER - OVERSIGT - FAVORITTER - RUM - LAV PRIORITET - INVITATIONER - Start chat - Opret rum - Indtast ID eller alias på et rum Gennemse oversigt 1 rum diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index eadddc69cc..c1c7165ded 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -39,24 +39,16 @@ %1$s hat eine Einladung an %2$s gesendet %1$s hat die Einladung in %2$s akzeptiert ** Nicht entschlüsselbar: %s ** - Das absendende Gerät hat uns keine Schlüssel für diese Nachricht übermittelt. - + Das absendende Gerät hat uns keine Schlüssel für diese Nachricht übermittelt. Entfernen nicht möglich Nachricht kann nicht gesendet werden Bild konnte nicht hochgeladen werden - Netzwerk-Fehler Matrix-Fehler - - - - Es ist aktuell nicht möglich, einen leeren Raum erneut zu betreten. - E-Mail-Adresse Telefonnummer %1$s hat einen Sticker gesendet. - Einladung von %s Raumeinladung %1$s und %2$s @@ -79,7 +71,8 @@ Erste Synchronisation: \nImportiere Räume Erste Synchronisation: -\nImportiere betretene Räume +\nLade deine Konversationen +\nWenn du vielen Räumen beigetreten bist, kann das eine Weile dauern Erste Synchronisation: \nImportiere eingeladene Räume Erste Synchronisation: @@ -270,7 +263,6 @@ Du hast eine Videokonferenz beendet Du hast eine Videokonferenz gestartet Videokonferenz von %1$s gestartet - Nachrichten "Raum Einstellungen @@ -279,23 +271,22 @@ Akzeptiere Ablehnen Anruf beenden - Ok - Abbrechen - Speichern - Verlassen - Senden - Erneut senden - Entfernen - Zitieren - Teilen + Abbrechen + Speichern + Verlassen + Senden + Erneut senden + Entfernen + Zitieren + Teilen Später - Weiterleiten + Weiterleiten Permalink Rohdaten anzeigen Entschlüsselte Rohdaten anzeigen - Löschen - Umbenennen + Löschen + Umbenennen Inhalt melden Aktives Gespräch Laufendes Konferenzgespräch @@ -310,8 +301,7 @@ Konferenzgespräche in verschlüsselten Räumen werden nicht unterstützt Trotzdem senden oder - Einladen - + Einladen Abmelden Sprachanruf Videoanruf @@ -322,31 +312,25 @@ Öffnen Schließen In Zwischenablage kopiert - Deaktivieren - + Deaktivieren Bestätigung Warnung - Home Favoriten Personen Räume - Raumnamen filtern Favoriten filtern Personen filtern Raumnamen filtern - Einladungen Niedrige Priorität - Konversationen Lokales Adressbuch Nur Matrix-Kontakte Keine Konversationen ${app_name} wurde nicht erlaubt, auf lokale Kontakte zuzugreifen Keine Ergebnisse - Räume Raumverzeichnis Keine Räume @@ -382,7 +366,6 @@ Videoanruf starten Dateien senden Foto oder Video aufnehmen - Anmelden Konto erstellen Absenden @@ -428,7 +411,6 @@ Dein Passwort wurde zurückgesetzt. \n \nDu wurdest aus allen Sitzungen abgemeldet und wirst keine Push-Benachrichtigungen mehr erhalten. Um die Push-Benachrichtigungen wieder zu aktivieren, musst du dich auf jedem Gerät erneut anmelden. - URL muss mit \'http[s]://\' beginnen Login unmöglich: Netzwerkfehler Login unmöglich @@ -443,28 +425,20 @@ Es wurden zu viele Anfragen gesendet Dieser Benutzername wird bereits verwendet Der Link in der E-Mail wurde noch nicht geöffnet - - Lesebestätigungsliste - - Sende als Original Groß Mittel Klein - Download abbrechen? Upload abbrechen? %d s %1$dm:%2$ds - Gestern Heute - Raumname Raumthema - Anruf verbunden Verbindungsaufbau… Anruf beendet @@ -477,10 +451,8 @@ Medien-Verbindung fehlgeschlagen Kann Kamera nicht initialisieren Anruf woanders entgegengenommen - Foto oder Video aufnehmen Video kann nicht aufgenommen werden - Information ${app_name} benötigt die Berechtigung, auf deine Fotos und Videos zugreifen zu können, um Anhänge zu senden und zu speichern.\n\nBitte erlaube den Zugriff im nächsten Dialog, um Dateien von deinem Gerät zu versenden. ${app_name} benötigt die Berechtigung, auf deine Kamera zugreifen zu können, um Bilder aufzunehmen und Video-Anrufe durchzuführen. @@ -499,31 +471,25 @@ \n \nStimmst du der Nutzung deines Adressbuchs zu diesem Zweck zu\? Entschuldige. Die Aktion wurde aufgrund fehlender Berechtigungen nicht ausgeführt - Gespeichert In Downloads speichern? Ja Nein Fortsetzen - - Entfernen - Betreten - Vorschau - Ablehnen - + Entfernen + Betreten + Vorschau + Ablehnen Zur ersten ungelesenen Nachricht - Du wurdest von %s in diesen Raum eingeladen Diese Einladung wurde an %s gesendet, welche nicht mit diesem Konto verknüpft ist. \nDu kannst dich mit einem anderen Konto anmelden oder diese E-Mail-Adresse zu diesem Konto hinzufügen. Du möchtest auf %s zugreifen. Möchtest du den Raum betreten, um an der Diskussion teilzunehmen? einen Raum Das ist die Vorschau des Raums. Interaktionen mit dem Raum sind deaktiviert. - Neuer Chat Mitglied hinzufügen 1 Mitglied - Raum verlassen Raum wirklich verlassen\? %s wirklich aus diesem Chat entfernen möchtest\? @@ -551,14 +517,12 @@ Du wirst diese Änderung nicht rückgängig machen können, da die Person dieselbe Berechtigungsstufe wie du erhalten wird. \nBist du sicher\? "Bist du sicher, dass du %s in diesen Chat einladen willst?" - Mit ID einladen LOKALE KONTAKTE (%d) Nur Matrix-Benutzer Benutzer per ID einladen Bitte gib eine oder mehrere E-Mail-Adressen oder eine Matrix-ID ein E-Mail oder Matrix-ID - Suchen %s schreibt… %1$s & %2$s schreiben… @@ -574,7 +538,6 @@ Nicht gesendete Nachrichten löschen Datei nicht gefunden Du bist nicht berechtigt, in diesen Raum zu schreiben. - Vertrauen Nicht vertrauen Abmelden @@ -586,7 +549,6 @@ Das Zertifikat unterscheidet sich von dem Zertifikat, dem dein Gerät ursprünglich vertraut hat. Dies ist SEHR UNGEWÖHNLICH. Es wird empfohlen, dass du dieses neue Zertifikat NICHT AKZEPTIERST. Das Zertifikat hat sich von einem ursprünglich vertrauenswürdigem Zertifikat in ein nicht vertrauenswürdiges Zertifikat geändert. Eventuell wurde das Zertifikat des Servers erneuert. Bitte erkundige dich beim Server-Administrator, welcher Fingerprint als vertrauenswürdig gilt. Akzeptiere das Zertifikat nur dann, wenn der Server-Administrator einen Fingerprint veröffentlicht hat, der mit dem obigen übereinstimmt. - Raumdetails Personen Dateien @@ -594,14 +556,12 @@ Ungültige ID. Eine E-Mail-Adresse oder eine Matrix-ID (\'@localpart:domain\') ist erforderlich EINGELADEN TEILNEHMER - Grund für das Melden dieses Inhalts Möchtest du alle Nachrichten dieses Nutzers verbergen\? \n \nBeachte: Diese Aktion wird die App neu starten und einige Zeit brauchen. Hochladen abbrechen Herunterladen abbrechen - Suchen Raummitglieder filtern Keine Suchergebnisse @@ -609,28 +569,13 @@ NACHRICHTEN PERSONEN DATEIEN - - BEITRETEN - VERZEICHNIS - FAVORITEN - RÄUME - NIEDRIGE PRIORITÄT - EINLADUNGEN - Gespräch beginnen - Raum erstellen - Raum beitreten - Einem Raum beitreten - Raum-ID oder Raum-Alias eingeben - Verzeichnis durchsuchen Verzeichnis wird durchsucht… - Favorit Niedrige Priorität Direkter Chat Konversation verlassen Vergessen - Nachrichten Einstellungen Version @@ -638,7 +583,6 @@ Nutzungshinweise von Drittanbietern Urheberrechtserklärung Datenschutzerklärung - Profilbild Anzeigename E-Mail-Adresse @@ -666,7 +610,6 @@ Urheberrechtserklärung Datenschutzerklärung Cache leeren - Nutzereinstellungen Benachrichtigungen Ignorierte Benutzer @@ -722,37 +665,29 @@ Hier Aktivierungscode eintragen Fehler beim Verifizieren der Telefonnummer Code - - Raumbild Raumname Thema Raummarkierung Markiert als: - Favorit Niedrige Priorität Keine - Zugriff und Sichtbarkeit Diesen Raum im Raumverzeichnis anzeigen Raumzugriff Lesbarkeit des Chatverlaufs Wer kann den Chatverlauf lesen? Wer kann auf diesen Raum zugreifen? - Alle Nur Mitglieder Nur Mitglieder (ab Einladung) Nur Mitglieder (ab Beitreten) - Um einen Link zu einem Raum erstellen zu können, muss dieser eine Adresse haben. Nur eingeladene Personen Alle, die den Raumlink kennen (ausgenommen Gäste) Alle, die den Raumlink kennen (auch Gäste) - Verbannte Benutzer - Erweitert Interne ID dieses Raumes Adressen @@ -763,7 +698,6 @@ Du musst dich abmelden, um die Verschlüsselung aktivieren zu können. Nur für verifizierte Sitzungen verschlüsseln Niemals verschlüsselte Nachrichten an unverifizierte Sitzungen in diesem Raum von dieser Sitzung senden. - Dieser Raum hat keine lokalen Adressen Neue Adresse (z. B. #foo:matrix.org) Ungültiges Adressformat @@ -777,11 +711,8 @@ Verschlüsselung ist in diesem Raum aktiviert. Verschlüsselung ist in diesem Raum deaktiviert. Verschlüsselung aktivieren \n(Warnung: Kann nicht wieder deaktiviert werden!) - Verzeichnis - %s versuchte einen bestimmten Punkt in diesem Chatverlauf zu laden, konnte ihn aber nicht finden. - Ende-zu-Ende-Verschlüsselungs-Informationen Ereignisinformation Nutzer-ID @@ -825,21 +756,18 @@ Vergleiche die folgenden Zeichen mit den Einstellungen in der Sitzung des anderen Nutzers und bestätige: Falls sie nicht übereinstimmen, wurde die Kommunikation vielleicht kompromittiert. Ich bestätige, dass die Schlüssel übereinstimmen - Raum enthält unbekannte Sitzungen Dieser Raum enthält unbekannte Sitzungen, die noch nicht verifiziert wurden. \nEs gibt also keine Garantie, dass diese Sitzung wirklich der angegebenen Person gehören. \nWir empfehlen, den Verifizierungsprozess für jedes Gerät zu durchlaufen, bevor du fortfährst. Du kannst die Nachricht aber auch ohne Verifizierung senden, wenn du das vorziehst. \n \nUnbekannte Sitzungen: - Raumverzeichnis auswählen Der Server kann nicht verfügbar oder überlastet sein Gib einen Home-Server ein, um seine öffentlichen Räume aufzulisten Server-Name Alle Räume auf dem %s-Server Alle nativen %s-Räume - Suche nach historischen Bedienoberfläche Sprache @@ -870,7 +798,6 @@ Widget konnte nicht erstellt werden Konferenzgespräche mit Jitsi durchführen Soll das Widget wirklich aus diesem Raum gelöscht werden? - Widget konnte nicht erstellt werden. Berechtigungslevel muss eine positive ganze Zahl sein. Du bist nicht Mitglied in diesem Raum. @@ -897,17 +824,14 @@ Foto aufnehmen Video aufnehmen Systemeigene Kamera verwenden - Ohne Verifizierung teilen Anfrage ignorieren Anonymisierte Analysedaten Fehlerbericht Warnung! Konferenzgespräche werden noch entwickelt und sind vielleicht nicht zuverlässig. - Befehlsfehler Unbekanntes Kommando: %s - Aus Laut Verschlüsselte Nachricht @@ -941,7 +865,6 @@ Beispiel Community-ID Beispiel - Startseite Personen Räume @@ -999,7 +922,6 @@ %d aktives Widget %d aktive Widgets - Profilbild %d Mitgliedsänderung @@ -1047,9 +969,9 @@ Um fortzufahren, bitte Passwort eingeben: Account deaktivieren Drittanbieter-Lizenzen - Download - Sprechen - Leeren + Download + Sprechen + Leeren Schlüssel von deinen anderen Sitzungen erneut anfordern. Schlüsselanfrage gesendet. Anfrage gesendet @@ -1156,7 +1078,7 @@ Formatiere Nachrichten mittels Markdown-Syntax, bevor sie gesendet werden. Dies erlaubt erweiterte Formatierungen wie Sternchen (*), um kursiven Text anzuzeigen. Lesebestätigungen zeigen Klicke auf die Lesebestätigungen für eine detailliertere Liste. - Einladungen, Kicks und Banns bleiben unberührt. + Einladungen, Kicks und Banns werden weiterhin angezeigt. Passwort Starte die System-Kamera anstelle der angepassten Kamera. Diese Option erfordert eine externe Anwendung um Sprachnachrichten aufzuzeichnen. @@ -1170,7 +1092,7 @@ Nutze den Standard-Klingelton von ${app_name} für eingehende Anrufe Klingelton für eingehende Anrufe Wähle Klingelton für Anrufe: - Akzeptieren + Akzeptieren Bitte lese und akzeptiere die Richtlinien dieses Home-Servers: Tests ausführen Läuft… (%1$d von %2$d) @@ -1243,7 +1165,7 @@ Schlüsselsicherung Schlüsselsicherung verwenden Schlüsselsicherung ist nicht abgeschlossen. Bitte warten… - Überspringen + Überspringen Fertig Erweiterte Benachrichtigungseinstellungen Angepasste Einstellungen. @@ -1341,8 +1263,8 @@ Sicher\? Sicherung Alle verschlüsselten Nachrichten gehen verloren, wenn Du dich abmeldest ohne die Schlüssel gesichert zu haben. - Bleiben - Abbrechen + Bleiben + Abbrechen Wirklich abmelden\? Wiederherstellung verschlüsselter Nachrichten Bitte gib einen Benutzernamen ein. @@ -1387,7 +1309,7 @@ Berechne Wiederherstellungsschlüssel… Lade Schlüssel herunter… Importiere Schlüssel… - Ignorieren + Ignorieren Mit Single-Sign-On anmelden Diese URL ist nicht erreichbar, bitte prüfen Dein Gerät nutzt eine veraltetes TLS-Sicherheitsprotokoll, das anfällig für Angriffe ist. Zu deiner Sicherheit wirst du nicht in der Lage sein, dich zu verbinden @@ -1478,8 +1400,8 @@ Räume Deine Räume werden hier angezeigt. Drück auf das + unten rechts, um bestehende zu durchstöbern oder neue zu eröffnen. Reaktionen - Zustimmen - Mag ich + Zustimmen + Mag ich Reaktion hinzufügen Reaktionen ansehen Reaktionen @@ -1574,12 +1496,12 @@ Beginne mit der Eingabe, um Ergebnisse zu erhalten Filtern nach Benutzername oder ID… Raum betreten… - Ablehnen + Ablehnen App-ID: - Überprüfung + Überprüfung Keine - Widerrufen - Trennen + Widerrufen + Trennen Kein Identitätsserver konfiguriert. Anruf aufgrund eines Serverfehlers fehlgeschlagen Versuche es mit %s @@ -2016,21 +1938,12 @@ Initialisiere Cross-Signing Schlüssel zurücksetzen QR-Code - Fast geschafft! Zeigt %s dasselbe Schild an\? + Fast geschafft! Zeigt %s ein Häkchen\? Ja Nein Verbindung zum Server wurde unterbrochen Entwicklerwerkzeuge Kontodaten - - %d Stimme - %d Stimmen - - - %d Stimme - Endergebnis - %d Stimmen - Endergebnis - - Ausgewählte Option Erstellt eine einfache Umfrage Nutze eine Wiederherstellungsmethode Wenn du auf keine existierende Sitzung zugreifen kannst @@ -2121,7 +2034,7 @@ %s setzen Fehlerbehebung %s hat den Raum erstellt und konfiguriert. - Fast geschafft! Zeigt das andere Gerät das gleiche Schild an\? + Fast geschafft! Zeigt das andere Gerät ein Häkchen an\? Fast geschafft! Warte auf Bestätigung… Verschlüsselte Direktnachrichten Nachricht… @@ -2160,7 +2073,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - oder einen anderen cross-signing-fähigen Matrix Client + oder einen anderen cross-signing-fähigen Matrix Client Nutze die neueste Version von ${app_name} auf deinen anderen Geräten: Erzwingt das Verwerfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum Wird nur in verschlüsselten Räumen unterstützt @@ -2199,12 +2112,12 @@ Einladungen gesendet an %1$s und %2$d weitere Benutzer Wir konnten den Benutzer nicht einladen. Bitte überprüfe den Benutzernamen, welchen du einladen möchtest und versuche es erneut. - Pause + Pause Kopieren Benachrichtigungen ${app_name}-Anruf fehlgeschlagen - Abspielen - Ablehnen + Abspielen + Ablehnen Erfolg Echtzeitverbindung konnte nicht hergestellt werden. \nBitte den Administrator deines Home-Servers, einen TURN-Server zu konfigurieren, dass Anrufe zuverlässig funktionieren. @@ -2433,7 +2346,6 @@ Status-Ereignisse der Raummitglieder zeigen Bezieht Einladungs-/Beitritts-/Verlassen-/Entfernen-/Verbannen-Ereignisse und Avatar-/Anzeigenamen-Wechsel mit ein. Umfrage - Bot-Schaltflächen Reagierte mit: %s Der Link war fehlerhaft Du bist nicht berechtigt, einen Anruf in diesem Raum zu starten @@ -2441,7 +2353,7 @@ Kontodaten vom Typ %1$s löschen\? \n \nVorsicht! Es kann zu unerwartetem Verhalten führen. - Zurücksetzen + Zurücksetzen Pushempfang fehlgeschlagen. Lösung könnte eine Neuinstallation der Applikation sein. Die Applikation empfängt den PUSH Die Applikation wartet auf den PUSH @@ -2658,7 +2570,7 @@ Zurückrufen Dieser Anruf wurde beendet %1$s hat diesen Anruf abgelehnt - Du hast diesen Anruf %s abgelehnt + Du hast diesen Anruf abgelehnt %s Du nimmst zur Zeit an diesem Anruf teil %1$s hat einen Anruf gestartet Du hast einen Anruf gestartet @@ -2779,7 +2691,7 @@ Nur zu diesem Raum In Space \"%s\" einladen Link teilen - Mithilfe eines Benutzernamens einladen + Mithilfe eines Benutzernamens einladen Mithilfe einer E-Mail-Adresse einladen Personen einladen Lade Personen in deinen Space ein @@ -3002,7 +2914,7 @@ Du wirst alle Räume und Spaces in %s verlassen. Alle Räume und Spaces verlassen Willst du %s wirklich verlassen\? - Mit Benutzername oder E-Mail einladen + Mit Benutzername oder E-Mail einladen Zum ausgewählten Space hinzufügen Erstelle Space… Hilfreiche Informationen zur Fehlersuche anzeigen @@ -3066,9 +2978,31 @@ Raum verlassen! Heimserver auswählen Es konnte kein Heimserver mit der Adresse %s gefunden werden. Bitte überprüfe die Adresse oder wähle den Heimserver manuell. - Untergeordneten Space hinzufügen + Untergeordneten Space hinzufügen. Bist du dir wirklich sicher, dass du diese Informationen senden willst\? E-Mail-Adressen und Telefonnummern an %s senden Nicht jetzt Auf Benachrichtigungen warten + Externe Bibliotheken + Du kannst dies jederzeit in den Einstellungen deaktivieren + Wir teilen keine Informationen mit Drittpersonen + Wir erfassen und analysieren keine Accountdaten + Hilf uns dabei Probleme zu identifizieren und Element zu verbessern, indem du anonyme Nutzungsdaten teilst. Um zu verstehen, wie Personen mehrere Geräte benutzen, werden wir eine zufällige Kennung generieren, die zwischen deinen Geräten geteilt wird. +\n +\nDu kannst alle unsere Bedingungen lesen %s. + Stelle sicher, dass die richtigen Personen Zugriff auf %s haben. Du kannst jederzeit weitere Personen einladen. + Wer ist Mitglied deines Teams\? + Der Identitätsserver gibt keine Bedingungen an + Bedingungen des Identitätsservers ausblenden + Bedingungen des Identitätsservers anzeigen + Systemeinstellungen + Versionen + Erhalte Hilfe bei der Bedienung von Element + Hilfe und Unterstützung + Hilfe + Rechtliches + Entscheide, welche Spaces Zugriff auf den Raum haben sollen. Die Mitglieder der Spaces können diesen Räumen beitreten. + hier + Hilf mit, Element zu verbessern + Aktivieren \ No newline at end of file diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 1ae7629fef..da46dab8e6 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -38,7 +38,7 @@ Ο/Η %1$s δέχτηκε την πρόσκληση για το %2$s ** Αδυναμία αποκρυπτογράφησης: %s ** - Η συσκευή του/της αποστολέα δεν μας έχει στείλει τα κλειδιά για αυτό το μήνυμα. + Η συσκευή του/της αποστολέα δεν μας έχει στείλει τα κλειδιά για αυτό το μήνυμα. Αποτυχία αποστολής μηνύματος @@ -70,7 +70,7 @@ Ο/Η %1$s έστειλε μία πρόσκληση στον/στην %2$s για να εισέλθει στο δωμάτιο Δεν είναι δυνατή ακόμα η επανείσοδος σε ένα άδειο δωμάτιο. - Ακύρωση + Ακύρωση Κλείσιμο Απευθείας συνομιλία Ευρετήριο @@ -78,18 +78,17 @@ Αρχεία Παράλειψη Προκειμένου να διαγνωστούν προβλήματα, τα αρχεία καταγραφής από αυτόν τον πελάτη θα σταλούν με αυτήν την αναφορά σφάλματος. Αν προτιμάτε να στείλετε μόνο το παραπάνω κείμενο, απενεργοποιήστε: - Αποχώρηση + Αποχώρηση Μηνύματα από bots Μόνιμος σύνδεσμος Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά; - Παράθεση - Απόρριψη - Αφαίρεση - Αποστολή ξανά + Παράθεση + Απόρριψη + Αφαίρεση + Αποστολή ξανά Ευρετήριο - Αποστολή + Αποστολή Αποστολή πληροφοριών - Έναρξη συνομιλίας Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος Προβολή αποκρυπτογραφημένου κώδικα Προβολή κώδικα @@ -109,7 +108,7 @@ Αναφορά σφάλματος Πληροφορίες κοινότητας Φόρτωση… - Αποθήκευση + Αποθήκευση Κρυπτογραφημένο μήνυμα Ανοιχτόχρωμο θέμα Σκουρόχρωμο θέμα @@ -117,9 +116,9 @@ Αποστολή αυτοκόλλητου Άδειες τρίτων Αργότερα - Μπροστά - Διαγραφή - Μετονομασία + Μπροστά + Διαγραφή + Μετονομασία Αναφορά περιεχομένου Ενεργή κλήση Βίντεο @@ -127,9 +126,9 @@ Αυτή η ενέργεια δεν είναι δυνατή λόγω ελλιπών δικαιωμάτων. Πληροφορίες συσκευής ή - Πρόσκληση + Πρόσκληση Εκτός σύνδεσης - Αποδοχή + Αποδοχή Έξοδος Ενέργειες Αποσύνδεση @@ -139,7 +138,7 @@ Σημείωση όλων ως αναγνωσμένων Γρήγορη απάντηση Άνοιγμα - Απενεργοποίηση + Απενεργοποίηση Επιβεβαίωση Σφάλμα Αγαπημένα @@ -359,22 +358,22 @@ Είστε σίγουρος; Δημιουργία αντίγραφου ασφαλείας Θα χάσετε την πρόσβαση στα κρυπτογραφημένα μηνύματά σας, εκτός εάν δημιουργήσετε αντίγραφα ασφαλείας των κλειδιών σας πριν αποσυνδεθείτε. - Αφαίρεση - Κατεβάστε - Διαμοιρασμός - Καθαρισμός - Ανάκληση - Αποσύνδεση - Παύση + Αφαίρεση + Κατεβάστε + Διαμοιρασμός + Καθαρισμός + Ανάκληση + Αποσύνδεση + Παύση Прямі повідомлення - Απόρριψη + Απόρριψη Απόρριψη Αποδοχή - Ανασκόπηση - Αγνοείστε - Διακόψτε + Ανασκόπηση + Αγνοείστε + Διακόψτε Ολοκληρώθηκε - Παραλείψτε + Παραλείψτε Στείλτε ούτως ή άλλως Καλέστε ούτως ή άλλως Οι κλήσεις συνδιάσκεψης δεν υποστηρίζονται σε κρυπτογραφημένες αίθουσες @@ -391,11 +390,11 @@ Δεν έχετε άδεια να ξεκινήσετε μια κλήση συνδιάσκεψης Δεν έχετε άδεια να ξεκινήσετε μια κλήση συνδιάσκεψης σε αυτήν την αίθουσα Χρειάζεστε άδεια για να προσκαλέσετε να ξεκινήσει μια διάσκεψη σε αυτήν την αίθουσα - Επαναφορά - Απόρριψη - Παίξε + Επαναφορά + Απόρριψη + Παίξε Κανένα - Παραμείνατε + Παραμείνατε H δημιουργία αντιγράφων κλειδιού ασφαλείας θα πρέπει να είναι ενεργή σε όλες τις συνεδρίες σας για να αποφύγετε την απώλεια πρόσβασης στα κρυπτογραφημένα μηνύματά σας. Επαναφόρτωση γραφικού στοιχείου Αποτυχία φόρτωσης γραφικού στοιχείου @@ -561,7 +560,7 @@ \nΗ ορατότητα μηνυμάτων δουλεύει σαν το ηλεκτρονικό ταχυδρομείο. Το να ξεχαστούν τα μηνύματα σημαίνει οτι μηνύματα τα οποία έχετε στείλει δεν θα σταλούν σε νέους ή μη-εγγεγραμμένους χρήστες, αλλα εγγεγραμμένοι χρήστες οι οποίοι έχουν ήδη πρόσβαση σε αυτά τα μηνύματα θα μπορούν ακόμα να τα δούν. Λησμόνηση δωματίου Αυτό το δωμάτιο έχει αντικατασταθεί και δεν είναι πια ενεργό - Μιλήστε + Μιλήστε Παράβλεψη Αποσύνδεση Δεν εμπιστεύομαι @@ -594,13 +593,6 @@ Ρυθμίσεις Λεπτομέρειες Δωματίου ΚΑΛΕΣΜΕΝΟΣ/Η - Πληκτρολογείστε ταυτότητα (ID) δωματίου ή ψευδώνυμο δωματίου - Ένταξη στο δωμάτιο - Δημιουργία δωματίου - ΠΡΟΣΚΛΗΣΕΙΣ - ΧΑΜΗΛΗ ΠΡΟΤΕΡΑΙΟΤΗΤΑ - ΔΩΜΑΤΙΑ - ΣΥΜΜΕΤΟΧΗ Η αναζήτηση σε κρυπτογραφημένα δωμάτια δεν υποστηρίζεται ακόμα. ΑΡΧΕΙΑ ΜΗΝΥΜΑΤΑ diff --git a/vector/src/main/res/values-en-rGB/strings.xml b/vector/src/main/res/values-en-rGB/strings.xml index 76003bbc69..eaa0d1f8ec 100644 --- a/vector/src/main/res/values-en-rGB/strings.xml +++ b/vector/src/main/res/values-en-rGB/strings.xml @@ -4,7 +4,6 @@ Filter favourites Remove from favourites Add to favourites - FAVOURITES Synchronising Self Signing key Synchronising User key Synchronising Master key diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index c8f0f5fd02..81b92b9bf5 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -14,7 +14,7 @@ %1$s nuligis inviton por %2$s %1$s ŝanĝis sian profilbildon ** Ne eblas malĉifri: %s ** - La aparato de la sendinto ne sendis al ni la ŝlosilojn por tiu mesaĝo. + La aparato de la sendinto ne sendis al ni la ŝlosilojn por tiu mesaĝo. %1$s: %2$s %1$s ŝanĝis sian prezentan nomon al %2$s %1$s ŝanĝis sian prezentan nomon de %2$s al %3$s @@ -227,24 +227,24 @@ Permesiloj de eksteraj liverantoj Enlegante… Bone - Nuligi - Konservi - Eliri - Sendi - Resendi - Forigi - Citi - Elŝuti - Kunhavigi - Paroli - Forviŝi + Nuligi + Konservi + Eliri + Sendi + Resendi + Forigi + Citi + Elŝuti + Kunhavigi + Paroli + Forviŝi Poste - Plusendi + Plusendi Fiksligilo Vidi fonton Vidi malĉifritan fonton - Forigi - Alinomi + Forigi + Alinomi Detaloj pri ano Historia Raporti enhavon @@ -261,7 +261,7 @@ Informoj pri salutaĵo Tamen sendi - Inviti + Inviti Eksterrete Eliri Agoj @@ -285,7 +285,6 @@ Agordoj PERSONOJ DOSIEROJ - ALIĜI Personoj Ĉambroj Neniuj uzantoj @@ -305,26 +304,26 @@ Ĉu vi certas\? Savkopii Vi perdos aliron al viaj ĉifritaj mesaĝoj, se vi ne savkopios viajn ŝlosilojn antaŭ adiaŭo. - Resti + Resti Neniu - Senvalidigi - Malkonekti + Senvalidigi + Malkonekti Vi bezonas permeson inviti por komenci grupan vokon en ĉi tiu ĉambro Grupaj vokoj ne estas subtenataj de ĉifrataj ĉambroj - Akcepti - Preterpasi + Akcepti + Preterpasi Finite - Ĉesigi - Malatenti - Kontroli - Rifuzi + Ĉesigi + Malatenti + Kontroli + Rifuzi Adiaŭi Ĉu vi certe volas adiaŭi\? Marki ĉion legita Historia Marki legita Kopiiĝis al tondujo - Malŝalti + Malŝalti Konfirmo Averto Eraro @@ -482,13 +481,6 @@ Neniuj rezultoj ĈAMBROJ MESAĜOJ - ELSTARIGITAJ - ĈAMBROJ - INVITOJ - Komenci babilon - Krei ĉambron - Aliĝi al ĉambro - Aliĝi al ĉambro %d ĉambro %d ĉambroj @@ -638,10 +630,10 @@ JES NE Daŭrigi - Forigi - Aliĝi - Antaŭrigardi - Rifuzi + Forigi + Aliĝi + Antaŭrigardi + Rifuzi Listigi ĉambranojn Spegulante… Vi estis invitita al ĉi tiu ĉambro de %s @@ -725,9 +717,9 @@ Malfermi agordojn Agordoj de konto. Sciigoj estas ŝaltitaj por via konto. - Ludi - Paŭzigi - Eksigi + Ludi + Paŭzigi + Eksigi Vi ne havas permeson ekigi grupan vokon en ĉi tiu ĉambro Grupa voko jam daŭras! Komenci grupan vidvokon @@ -803,7 +795,6 @@ Atendante… Rezulto de kontrolo Reagis per: %s - Butonoj de robotoj Enketo Glumarko Dosiero @@ -1139,8 +1130,8 @@ Reagoj Vidi reagojn Aldoni reagon - Ŝati - Konsenti + Ŝati + Konsenti Reagoj Viaj ĉambroj montriĝos ĉi tie. Tuŝetu al la «+» dekstre sube por trovi jam ekzistantajn, aŭ fari viajn proprajn. Ĉambroj @@ -1878,8 +1869,6 @@ %1$s ĉambro trovita por %2$s %1$s ĉambroj trovitaj por %2$s - Entajpu identigilon de ĉambro aŭ kromnomon de ĉambro - MALALTA PRIORITATO Serĉado en ĉifritaj ĉambroj ankoraŭ en estas subtenata. Filtri forbaritajn uzantojn Akceptu la atestilon nur se administranto de la servilo publikigis fingrospuron akordan kun tiu ĉi-supre. @@ -1986,7 +1975,7 @@ Vi ne havas permeson komenci vokon Vi ne havas permeson komenci vokon en ĉi tiu ĉambro Vi ne havas permeson komenci grupan vokon - Restarigi + Restarigi Listo de ĉambroj Replenigu per via %s por konfirmi ĝin. Pretigi delegajn subskribojn @@ -2140,7 +2129,7 @@ Por daŭrigi, necesas via %1$s aŭ via %2$s. Subtenata nur en ĉifritaj ĉambroj Uzu la plej freŝan version de ${app_name} per aliaj viaj aparatoj: - aŭ alian klienton de Matrix kapablan je delegaj subskriboj + aŭ alian klienton de Matrix kapablan je delegaj subskriboj ${app_name} iOS \n${app_name} Android ${app_name} Web (por TTT) @@ -2232,15 +2221,6 @@ Se vi ne povas aliri jaman salutaĵon Uzi rehavan pasfrazon aŭ ŝlosilon Faras simplan enketon - Elektita elekteblo - - %d voĉo – finaj rezultoj - %d voĉoj – finaj rezultoj - - - %d voĉo - %d voĉoj - Ĉu forigi la datumojn de konto de la speco «%1$s»\? \n \nForu tion zorge, ĝi povus kaŭzi neatenditan konduton. @@ -2361,7 +2341,6 @@ Inkluzivigi la ĉambron en katalogo de ĉambroj Serĉante tra katalogo… Foliumi katalogon - KATALOGO KATALOGO DE UZANTOJ (%s) Katalogo de uzantoj La ĉambro ankoraŭ ne kreiĝis. Ĉu nuligi kreadon de la ĉambro\? @@ -2694,7 +2673,7 @@ Oni povos esplori en %s Inviti al %s Havigi ligilon - Inviti per uzantonomo + Inviti per uzantonomo Inviti per retpoŝto Nun ĉeestas nur vi. %s eĉ pli bonos kun aliuloj. Inviti al %s @@ -2877,7 +2856,7 @@ Foriri de ĉiuj ĉambroj kaj aroj Ĉu vi certe volas foriri de %s\? Trovado (%s) - Inviti laŭ uzantonomo aŭ retpoŝtadreso + Inviti laŭ uzantonomo aŭ retpoŝtadreso Aldoni al la aro Aktiva voko (%1$s) · diff --git a/vector/src/main/res/values-es-rMX/strings.xml b/vector/src/main/res/values-es-rMX/strings.xml index b96e90fbe2..44d3704a53 100644 --- a/vector/src/main/res/values-es-rMX/strings.xml +++ b/vector/src/main/res/values-es-rMX/strings.xml @@ -43,34 +43,26 @@ %1$s aceptó la invitación de %2$s ** No se puede descifrar: %s ** - El dispositivo del remitente no nos ha enviado las claves de este mensaje. + El dispositivo del remitente no nos ha enviado las claves de este mensaje. - No se pudo redactar No se puede enviar el mensaje La subida de la imagen falló - Error de la red Error de Matrix - - - - No es posible volver a unirse a una sala vacía. - Correo electrónico Número telefónico %1$s envió una calcomanía. - Invitación de %s Invitación de Sala %1$s y %2$s @@ -86,29 +78,27 @@ Mensaje eliminado por %1$s Mensaje eliminado [motivo: %1$s] Mensaje eliminado por %1$s [motivo: %2$s] - Mensajes Sala Configuraciones Detalles de los miembros Historial - OK - Cancelar - Guardar - Salir - Enviar - Reenviar - Borrar - Citar - Compartir + Cancelar + Guardar + Salir + Enviar + Reenviar + Borrar + Citar + Compartir Luego - Reenviar + Reenviar Enlace Permanente Ver Fuente Ver Fuente Descifrada - Borrar - Renombrar + Borrar + Renombrar Reportar contenido Llamada activa Llamada de conferencia en proceso.\nUnirse con %1$s o %2$s. @@ -122,8 +112,7 @@ Las llamadas de conferencia no se pueden realizar en salas cifradas Enviar de todos modos o - Invitar - + Invitar Cerrar la sesión Llamada de Voz Llamada de Video @@ -134,31 +123,25 @@ Abrir Cerrar Copiado - Desactivar - + Desactivar Confirmación Advertencia - Home Favoritos Personas Salas - Filtrar salas Filtrar favoritos Filtrar personas Filtrar salas - Invitaciones Prioridad baja - Conversaciones Libreta local de direcciones Solamente contactos Matrix Sin conversaciones No ha permitido a ${app_name} acceder a sus contactos locales Sin resultados - Salas Directorio de salas Sin salas @@ -194,7 +177,6 @@ Comenzar Llamada de video Enviar archivos Tomar foto o video - Iniciar sesión Crear cuenta Entregar @@ -238,7 +220,6 @@ Un correo fue enviado a %s. Una vez que sigas el enlace, seleccione abajo. Falló la verificación de correo electrónico: asegúrese de haber hecho clic en el correo Su contraseña fue actualizada.\n\nHaz sido desconectado de todos tus dispositivos y las notificaciones están apagadas. Para encender las notificaciones, entre su cuenta en cada dispositivo. - El enlace sólo puede comenzar con http[s]:// Sesión falló: Error con la red Sesión falló @@ -253,28 +234,20 @@ Demasiadas peticiones enviadas Este nombre de usuario ya está reservado para otra persona El enlace que no siguió - - Lista de Recibos de Lectura - - Enviar como Original Grande Mediano Chico - "¿Cancelar la descarga? ¿Cancelar la subida? %d s %1$dm %2$ds - Ayer Hoy - Nombre de la Sala Tema de la Sala - Llamada conectada La llamada se está conectando… Llamada finalizada @@ -287,10 +260,8 @@ Conexión de media falló La cámara no se pudo encender llamada fue contestada en otra parte - Tomar una foto o grabar un video" No pudo grabar video" - Información ${app_name} necesita tu permiso para entrar en tu almacenaje de fotos y videos para enviar y guardar archivos.\n\nPor favor permite el acceso en el siguiente mensaje para poder enviar archivos desde su dispostivo. ${app_name} necesita tu permiso para usar tu cámara para tomar fotos y hacer llamadas de video. @@ -303,30 +274,24 @@ ¿Permitir el acceso a ${app_name} para leer tus contactos ? Perdón. Operación no realizada debido a permisos faltantes - Guardado ¿Guardar en Descargas\? NO Continuar - - Retirar - Entrar - Preestreno - Rechazar - + Retirar + Entrar + Preestreno + Rechazar Saltar al primer mensaje no leído. - Has sido invitado por %s a entrar a esta sala Esta invitación fue enviado a %s, que no esta asociado con esta cuenta.\nTal vez desea entrar con otra cuenta, o añadir este correo electrónico a esta cuenta. Estás intentando entrar a %s. ¿Desea entrar para participar en la conversación? una sala Esto es un preestreno de esta sala. Los interacciones están impedidos. - Chat Nuevo Añadir miembro 1 miembro - Salir de la sala ¿Estás seguro que quieres salir de la sala? ¿Estás seguro que quieres quitar a %s de este chat? @@ -353,14 +318,12 @@ Mostrar lista de dispositivos No podrás deshacer este cambio porque estás provocando que el usuario tenga el mismo poder que el tuyo.\n¿Estás seguro? "¿Estás seguro que quieres invitar a %s que entre en este chat?" - Invitado por ID CONTACTOS LOCALES (%d) Solmente usuarios de Matrix Invitar usuario por ID Ingrese una o varias direcciones de correo o ID Matrix Correo o ID Matrix - Buscar %s está escribiendo… %1$s & %2$s están escribiendo… @@ -376,7 +339,6 @@ Borrar mensajes no enviados No se pudo encontrar el archivo No tienes permiso para enviar en esta sala - Confiar No confiar Salir @@ -388,7 +350,6 @@ El certificado cambio de el que confiaba tu dispositivo. Esto es MUY RARO. Se recomienda que no aceptes el certificado nuevo. El certificado cambio de uno que confiaba tu dispositivo a un certificado desconfiado. El servidor posiblemente actualizo su certificado. Pongase en contacto con el administrador de el servidor para la huella esperada. SOLAMENTE acepta el certificado de arriba si coincide con el certificado que publicó el administrador de el servidor. - Detalles de la Sala Personas Archivos @@ -396,13 +357,11 @@ Identificación malformada. Debe ser correo electrónico o identificación de Matrix como \'@localpart:domain\' INVITADO ENTRO - Razón por reportar este contenido ¿Desea ocultar todos los mensajes de este usuario\? \nConsidere que esta acción reiniciará la aplicación y tardar un tiempo. Cancelar Subida Cancelar Descarga - Buscar Buscar miembros No hay resultados @@ -410,28 +369,13 @@ MENSAJES PERSONAS ARCHIVOS - - ENTRAR - DIRECTORIO - FAVORITOS - SALAS - BAJA PRIORIDAD - INVITACIONES - Comenzar chat - Crear sala - Unirse a la sala - Unirse a una sala - Type a room id or a room alias - Buscar directorio Buscando directorio… - Destacar Despriorizar Chat Directo Salir de la Conversacion Forget - Mensajes Configuraciones Versión @@ -439,7 +383,6 @@ Avisos de partidos terceros Derechos de autor Políticas de privacidad - Foto de Perfil Nombre Visible Correo Electrónico @@ -467,7 +410,6 @@ Derechos de autor Políticas de privacidad Borrar memoria cache - Configuraciones de Usuario Notificaciones Usuarios ignorados @@ -520,37 +462,29 @@ Escribe un código de activación Error en la validación de tu número telefónico Código - - Foto de la Sala Nombre de la Sala Tema Etiqueta de la Sala Etiquetado como: - Destacar Baja prioridad Ninguno - Acceso y Visibilidad Inscribir esta sala en el directorio de salas Acceso a la Sala Historial y Legibilidad de la Sala ¿Quien puede leer el historial? ¿Quien puede entrar a la sala? - Todos Solamente miembros (desde seleccionar esta opción) Solamente miembros (desde su invitación) Solamente miembros (desde entrar a la sala) - Para hacer enlace a una sala debe tener una dirección. Solamente los invitados Los que saben el enlace de esta sala, excepto húespedes Los que saben el enlace de la sala, incluso húespedes - Usuarios prohibidos - Avanzado La identificación interna de esta sala Direcciones @@ -561,7 +495,6 @@ Necesitas salir de tu cuenta para encender el cifrado. Cifrar solamente para dispositivos verificados Nunca enviar mensajes cifrados a dispositivos no verificados en esta sala de este dispositivo. - Esta sala no tiene direcciones locales Dirección nueva (e.g #foo:matrix.org") Formato de alias no válido @@ -575,11 +508,8 @@ La cifración está encendida en esta sala. La cifración está apagada en esta sala. Encender cifración \n(¡Aviso: no se puede apagar!) - Directorio - %s estuvo intentando cargar un punto especifico en el historial de esta sala pero no lo pudo encontrar. - Información de la cifración de Persona-a-Persona Información de eventos Identificación de usuario @@ -621,26 +551,23 @@ Para verificar que este dispositivo es confiable, por favor contacte el dueño de este dispositivo por otro medio (e.g. cara-a-cara o por llamada) y verifique que la clave de este dispositivo que ellos ven en su página de configuraciones coincide con el de abajo: Si coinciden, seleccione Verificar. Si no, otro esta interceptando este dispositivo y vas a querer bloquearlo.\nEn el futuro, este procceso será mas sofisticado. Verifico que las claves coinciden - Esta sala contiene dispositivos desconocidos Esta sala contiene dispositivos desconocidos que no se han verificado. Esto significa que no se garantiza que los dispositivos pertenezcan a las personas que dicen de que son. Recomendamos que los verifiques todos antes de continuar. Sin embargo, puedes reenviar el mensaje sin verificarlos si prefieres. Dispositivos desconocidos: - Select a room directory The server may be unavailable or overloaded Type a homeserver to list public rooms from Homeserver URL All rooms on %s server All native %s rooms - Search for historical Sincronizando… Cargando… - Descargar - Hablar + Descargar + Hablar Desconectado Salir Acciones @@ -705,7 +632,7 @@ Dispositivos desconocidos:
Detectar eventos Notificaciones ruidosas Notificaciones silenciosas - Borrar + Borrar Debido a que faltan permisos, esta acción no es posible. Informe de error Detalles sobre la comunidad diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index bf41e3c6d1..570d074a2d 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -39,24 +39,16 @@ %1$s invitó a %2$s a unirse a la sala %1$s aceptó la invitación para %2$s ** No es posible descifrar: %s ** - El dispositivo emisor no nos ha enviado las claves para este mensaje. - + El dispositivo emisor no nos ha enviado las claves para este mensaje. No se pudo redactar No es posible enviar el mensaje No se pudo cargar la imagen - Error de red Error de Matrix - - - - Actualmente no es posible volver a unirse a una sala vacía. - Dirección de correo electrónico Número telefónico %1$s envió una pegatina. - Invitación de %s Invitación a Sala %1$s y %2$s @@ -270,29 +262,27 @@ Videoconferencia terminada por %1$s Has empezado una videoconferencia Videoconferencia empezada por %1$s - Mensajes Sala Ajustes Detalles de Miembro Histórico - Correcto - Cancelar - Guardar - Salir - Enviar - Reenviar - Eliminar - Citar - Compartir + Cancelar + Guardar + Salir + Enviar + Reenviar + Eliminar + Citar + Compartir Más Tarde - Reenviar + Reenviar Enlace Permanente Ver Fuente Ver Fuente Descifrada - Eliminar - Renombrar + Eliminar + Renombrar Reportar contenido Llamada activa Llamada de conferencia en curso. @@ -307,8 +297,7 @@ No se admiten llamadas de conferencia en salas cifradas Enviar de Todos Modos o - Invitar - + Invitar Cerrar sesión Llamada de Voz Llamada de Vídeo @@ -319,31 +308,25 @@ Abrir Cerrar Copiado al portapapeles - Deshabilitar - + Deshabilitar Confirmación Advertencia - Inicio Favoritos Personas Salas y Grupos - Filtrar salas Filtrar favoritos Filtrar personas Filtrar salas - Invitaciones Prioridad baja - Conversaciones Agenda de contactos local Solo contactos de Matrix No hay conversaciones No permitiste que ${app_name} acceda a tus contactos locales No hay resultados - Salas Directorio de salas No hay salas @@ -379,7 +362,6 @@ Iniciar Llamada de Vídeo Enviar archivos Tomar foto o vídeo - Iniciar sesión Crear cuenta Enviar @@ -427,7 +409,6 @@ Tu contraseña fue restablecida. \n \nSe ha cerrado sesión en todas tus sesiones y ya no recibirás notificaciones push. Para volver a habilitar las notificaciones, vuelve a iniciar sesión en cada dispositivo. - La URL debe comenzar con http[s]:// No es posible iniciar sesión: Error de red No es posible iniciar sesión @@ -442,28 +423,20 @@ Se enviaron demasiadas solicitudes Este nombre de usuario ya está en uso El enlace del correo electrónico que aún no se ha seguido - - Lista de Recibos de Lectura - - Enviar como Original Grande Mediano Pequeño - "¿Cancelar la descarga? ¿Cancelar la subida? %d s %1$dmin %2$dseg - Ayer Hoy - Nombre de la sala Tema de la sala - Llamada conectada Conectando llamada… Llamada finalizada @@ -476,10 +449,8 @@ Falló la Conexión de Medios No se puede iniciar la cámara llamada contestada en otra parte - Tomar una foto o un vídeo No se puede grabar vídeo - Información ${app_name} necesita permiso para acceder a tu biblioteca de fotos y vídeos para enviar y guardar archivos adjuntos. \n @@ -502,31 +473,25 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua \n \n¿Permitir que ${app_name} acceda a tus contactos \? Lo sentimos. Acción no realizada, debido a que faltan permisos - Guardado ¿Guardar en descargas? NO Continuar - - Eliminar - Unirse - Vista Previa - Rechazar - + Eliminar + Unirse + Vista Previa + Rechazar Mensajes no leídos. - Has sido invitado por %s a unirte a esta sala Esta invitación fue enviada a %s, que no esta asociado a esta cuenta. \nQuizás quieras iniciar sesión con otra cuenta, o añadir este correo electrónico a esta cuenta. Estás intentando acceder a %s. ¿Quieres unirte para participar en la discusión? una sala Esta es una vista previa de esta sala. Las interacciones dentro de la sala se han deshabilitado. - Nueva Conversación Añadir miembro 1 miembro - Salir de la sala ¿Seguro que quieres salir de la sala? ¿Seguro que quieres eliminar a %s de esta conversación? @@ -554,14 +519,12 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua No podrás deshacer este cambio porque estás ascendiendo al usuario al mismo nivel de autoridad que tú. \n¿Estás seguro\? ¿Seguro que quieres invitar a %s a esta conversación? - Invitar por ID CONTACTOS LOCALES (%d) Solo usuarios de Matrix Invitar usuario por ID Por favor, ingresa una o más direcciones de correo electrónico o ID de Matrix Correo electrónico o ID de Matrix - Buscar %s está escribiendo… %1$s y %2$s están escribiendo… @@ -577,7 +540,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Eliminar mensajes no enviados Archivo no encontrado No tienes permiso para publicar en esta sala - Confiar No confiar Cerrar Sesión @@ -589,7 +551,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua El certificado cambió de uno que era confiable para tu teléfono. Esto es MUY INUSUAL. Se recomienda NO ACEPTAR este nuevo certificado. El certificado cambió de uno que era confiable a uno que no es confiable. El servidor puede haber renovado su certificado. Contacta al administrador del servidor para obtener la huella digital. Solo acepta el certificado si el administrador del servidor ha publicado una huella digital que coincide con la anterior. - Detalles de Sala Personas Archivos @@ -597,14 +558,12 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua ID mal formada. Debería ser una dirección de correo electrónico o una ID de Matrix como \'@partelocal:dominio\' INVITADOS SE UNIERON - Motivo para reportar este contenido ¿Quieres ocultar todos los mensajes de este usuario\? \n \nTen en cuenta que esta acción reiniciará la aplicación y puede tardar algo de tiempo. Cancelar Subida Cancelar Descarga - Buscar Filtrar miembros de la sala No hay resultados @@ -612,28 +571,13 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua MENSAJES PERSONAS ARCHIVOS - - UNIRSE - DIRECTORIO - FAVORITOS - SALAS - PRIORIDAD BAJA - INVITACIONES - Iniciar conversación - Crear sala - Unirse a la sala - Unirse a una sala - Escribe una ID o alias de sala - Explorar directorio Buscando directorio… - Agregar a Favoritos Dejar de priorizar Conversación Directa Salir de la Conversación Olvidar - Mensajes Ajustes Versión @@ -641,7 +585,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Avisos de terceros Derechos de autor Política de privacidad - Imagen de Perfil Nombre Público Correo Electrónico @@ -669,7 +612,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Derechos de autor Política de privacidad Borrar caché - Ajustes de usuario Notificaciones Usuarios ignorados @@ -725,37 +667,29 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Ingresa un código de activación Error en la validación de tu número telefónico Código - - Imagen de Sala Nombre de Sala Tema Etiqueta de Sala Etiquetado como: - Agregar a Favoritos Prioridad baja Ninguno - Acceso y visibilidad Listar esta sala en el directorio de salas Acceso a Sala Legibilidad del Historial de la Sala ¿Quién puede leer el historial? ¿Quién puede acceder a esta sala? - Todos Solo miembros (desde el momento en que se selecciona esta opción) Solo miembros (desde que fueron invitados) Solo miembros (desde que se unieron) - Para crear un enlace a una sala, debe tener una dirección. Solo personas que han sido invitadas Cualquier persona que conozca el enlace a esta sala, excepto invitados Cualquier persona que conozca el enlace a esta sala, incluyendo invitados - Usuarios vetados - Avanzado La ID interna de esta sala Direcciones @@ -766,7 +700,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Necesitas cerrar sesión para poder habilitar el cifrado. Cifrar solo a sesiones verificadas Nunca enviar mensajes cifrados a sesiones sin verificar en esta sala desde esta sesión. - Esta sala no tiene direcciones locales Dirección nueva (ej. #foo:matrix.org) Formato de alias inválido @@ -781,11 +714,8 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua El cifrado está deshabilitado en esta sala. Habilitar cifrado \n(advertencia: ¡no se puede volver a deshabilitar!) - Directorio - %s estaba intentando cargar un momento específico en la línea de tiempo de esta sala pero no pudo encontrarlo. - Información de cifrado Extremo-a-Extremo Información de eventos ID de Usuario @@ -829,21 +759,18 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Para verificar que esta sesión es confiable, por favor contacta a su dueño por algún otro medio (ej. cara a cara o por teléfono) y pregúntale si la clave que ve en sus Ajustes de Usuario para esta sesión coincide con la clave a continuación: Si coincide, presione el botón de verificar a continuación. Si no coincide, entonces alguien está interceptando esta sesión y probablemente debería prohibirlo. En el futuro, este proceso de verificación será más sofisticado. Verifico que las claves coinciden - La sala contiene sesiones desconocidas Esta sala contiene sesiones desconocidas que no han sido verificadas. \nEsto significa que no hay garantía de que las sesiones pertenezcan a los usuarios a los que dicen pertenecer. \nRecomendamos que hagas el proceso de verificación por cada sesión antes de continuar. Pero puedes reenviar el mensaje sin verificarlas si prefieres. \n \nSesiones desconocidas: - Selecciona un directorio de salas El servidor puede estar no disponible o sobrecargado Escribe un servidor doméstico desde donde listar las salas públicas Nombre del servidor Todas las salas en el servidor %s Todas las salas nativas de %s - Buscar en el historial Interfaz de usuario Idioma @@ -889,7 +816,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua La creación del componente falló Crear llamadas de conferencia con jitsi ¿Seguro que quieres eliminar el widget de esta sala\? - No es posible crear el componente. El envío de la solicitud falló. El nivel de autoridad debe ser un número entero positivo. @@ -900,19 +826,15 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua La sala %s no está visible. Añadir aplicaciones de Matrix Utilizar cámara nativa - Has añadido una nueva sesión \'%s\', que está solicitando claves de cifrado. Tu sesión sin verificar \'%s\' está solicitando claves de cifrado. Iniciar verificación Compartir sin verificar Ignorar solicitud - ¡Advertencia! Las llamadas de conferencia están en desarrollo y pueden no ser confiables. - Error de comando Comando no reconocido: %s - Desactivado Ruidoso Mensaje cifrado @@ -950,7 +872,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Ejemplo ID de Comunidad ejemplo - Inicio Personas Salas @@ -1010,7 +931,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua %d componente activo %d componentes activos - Enviar una pegatina Actualmente no tienes ningún paquete de stickers habilitado. \n @@ -1040,7 +960,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua • Las notificaciones no mostrarán el contenido del mensaje Desactivar cuenta Desactivar mi cuenta - Descargar + Descargar Sí, ¡quiero ayudar! Conceder permiso Enviar audio @@ -1051,10 +971,10 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Elige otra opción Falta un parámetro requerido. Solicitud enviada - Conversar + Conversar Por favor, inicia ${app_name} en otro dispositivo que pueda descifrar el mensaje para que pueda enviar las claves a esta sesión. Licencias de terceros - Borrar + Borrar continuar con… Lo sentimos, no se encontró ninguna aplicación externa para completar esta acción. Volver a solicitar las claves de cifrado de tus otras sesiones. @@ -1144,7 +1064,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua expandir colapsar Llamar de todos modos - Aceptar + Aceptar Por favor revisa y acepta las reglas de este servidor doméstico: Llamadas Usar el tono de llamada normal de ${app_name} para llamadas entrantes @@ -1167,11 +1087,11 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua ¿Estás seguro\? Copia de seguridad Perderá el acceso a sus mensajes cifrados si cierra sesión sin hacer una copia de seguridad de sus claves. - Quedarse - Saltar + Quedarse + Saltar Hecho - Cancelar - Ignorar + Cancelar + Ignorar Marcar como leído Iniciar sesión con un solo registro Tu dispositivo usa una versión anticuada e insegura del protocolo de seguridad TLS. Por tu seguridad no puedes conectarte @@ -1492,8 +1412,8 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Salas Tus salas se mostrarán aquí. Pulsa el botón + abajo a la derecha para buscar o crear salas propias. Reacciones - De acuerdo - Me gusta + De acuerdo + Me gusta Añadir reacción Ver reacciones Reacciones @@ -1528,10 +1448,10 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Por favor escriba su sugerencia a continuación. Describa su sugerencia aquí Ninguno - Revocar - Desconectar - Revisar - Declinar + Revocar + Desconectar + Revisar + Declinar No se ha configurado un servidor de identidad. La llamada ha fallado por un servidor mal configurado Intente usar %s @@ -1777,9 +1697,9 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua La dirección de coreo electrónico no está asociada a ninguna cuenta. Reiniciar contraseña en %1$s ¡Las claves ya están al día! - Reproducir - Pausar - Descartar + Reproducir + Pausar + Descartar Copiar Correcto Notificaciones @@ -1966,7 +1886,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Modo Avión Activado Herramientas de desarrollo Datos de cuenta - Seleccionar Opcion Nuevo inicio de sesión Advertencia: Eliminar… @@ -2226,14 +2145,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua %1$s (%2$s) iniciado sesión con una nueva sesión: Hasta que este usuario confíe en esta sesión, los mensajes enviados hacia y desde ella se etiquetan con advertencias. Alternativamente, puede verificarlo manualmente. ¡Casi ahí! ¿Es %s muestra el mismo escudo\? - - %d voto - %d votos - - - %d voto - Resultados finales - %d votos - Resultados finales - Crea una encuesta simple Use una contraseña o clave de recuperación Si no puede acceder a una sesión existente @@ -2342,7 +2253,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua \n${app_name} de escritorio ${app_name} iOS \n${app_name} Android - u otro cliente Matrix con capacidad de firma cruzada + u otro cliente Matrix con capacidad de firma cruzada Utilice la última versión de ${app_name} en sus otros dispositivos: Obliga a descartar la sesión de grupo saliente actual en una sala cifrada Solo se admite en salas cifradas @@ -2438,7 +2349,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua \n \nTus mensajes están asegurados con un candado. Solo tú y tú destinatario tenéis las llaves especiales para descifrarlos. Los mensajes aquí no están cifrados Extremo-a-Extremo. - Botones de Bot Encuesta Eliminar de baja prioridad Añadir a Baja prioridad @@ -2461,7 +2371,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua No posee permisos para iniciar una llamada No posee permisos para iniciar una llamada en esta sala No posee permisos para iniciar una conferencia - Resetear + Resetear Descartar cambios Hay cambios sin salvar. ¿Descartar los cambios\? La sala todavía no ha sido creada. ¿Cancelar la creación\? @@ -2626,7 +2536,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Sólo a esta sala Invitar a %s Compartir enlace - Invitar por nombre de usuario + Invitar por nombre de usuario Invitar por correo electrónico Invitar a %s Invitar gente a tu espacio @@ -2930,7 +2840,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Invitar por correo electrónico, buscar contactos y más… Terminé de configurar el descubrimiento. Actualmente no está utilizando un servidor de identidad. Para invitar a compañeros de equipo y ser detectado por ellos, configure uno a continuación. - Invitar por nombre de usuario o correo + Invitar por nombre de usuario o correo Asegúrate que las personas adecuadas tengan acceso a %s. Puede invitar a más persona más tarde. ¿Quiénes son tus compañeros de equipo\? Agregar al espacio dado diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 894eec751b..43a98881f2 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -44,7 +44,7 @@ %1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s %1$s võttis vastu kutse %2$s nimel ** Ei õnnestu dekrüptida: %s ** - Sõnumi saatja seade ei ole selle sõnumi jaoks saatnud dekrüptimisvõtmeid. + Sõnumi saatja seade ei ole selle sõnumi jaoks saatnud dekrüptimisvõtmeid. Ei saanud muuta sõnumit Sõnumi saatmine ei õnnestunud Pildi üleslaadimine ei õnnestunud @@ -296,28 +296,28 @@ Kolmandate osapoolte litsentsid Laeme… Sobib - Tühista - Salvesta - Lahku - Jää - Saada - Saada uuesti - Eemalda - Tsiteeri - Laadi alla - Jaga - Räägi - Eemalda + Tühista + Salvesta + Lahku + Jää + Saada + Saada uuesti + Eemalda + Tsiteeri + Laadi alla + Jaga + Räägi + Eemalda Hiljem - Edasta + Edasta Püsiviide Lähtekood Näita dekrüptitud lähtekoodi - Kustuta - Muuda nime + Kustuta + Muuda nime Ei midagi - Tunnista kehtetuks - Katkesta ühendus + Tunnista kehtetuks + Katkesta ühendus Teata kahtlasest sisust Kõne on käsil Konverentsikõne on käsil. @@ -334,15 +334,15 @@ Helista siiski Saada ikkagi või - Kutsu + Kutsu Võrgust väljas - Võta vastu - Jäta vahele + Võta vastu + Jäta vahele Valmis - Katkesta - Eira - Vaata üle - Keeldu + Katkesta + Eira + Vaata üle + Keeldu Välju Tegevused Logi välja @@ -357,7 +357,7 @@ Ava Sulge Kopeeritud lõikelauale - Lülita välja + Lülita välja Kinnitus Hoiatus Viga @@ -508,9 +508,9 @@ Ei sisaldanud korrektset JSON\'it Liiga palju samaaegseid sisselogimispäringuid See kasutajanimi on juba kasutusel - Esita - Peata - Loobu + Esita + Peata + Loobu Kopeeri Õnnestus Teavitused @@ -597,10 +597,10 @@ JAH EI Jätka - Eemalda - Liitu - Eelvaade - Hülga + Eemalda + Liitu + Eelvaade + Hülga Sünkroniseerin… Mine lugemata sõnumite juurde Sa oled kutsutud siia jututuppa %s poolt @@ -636,16 +636,6 @@ SÕNUMID INIMESED FAILID - LIITU - LEMMIKUD - JUTUTOAD - VÄHETÄHTIS - KUTSED - Alusta vestlust - Loo jututuba - Liitu jututoaga - Liitu jututoaga - Sisesta jututoa tunnus, nimi või alias Sirvi kataloogi Otsevestlus VAATA @@ -787,8 +777,8 @@ Verifitseerimisprotsess aegus Sinu jututoad kuvatakse siin. Olemasolevate jututubade leidmiseks või uute tegemiseks klõpsi all paremal nurgas asuvat + nuppu. Reageerimised - Nõus - Meeldib + Nõus + Meeldib Lisa reaktsioon Reageerimised Sõnum on kustutatud @@ -1209,7 +1199,6 @@ Eira Sõrmejälg (%s): Serveri õigsust ei olnud võimalik kontrollida. - LOEND Lahenda teavitustega seotud vigu Vigade tuvastamine Käivita testid @@ -2243,15 +2232,6 @@ Lennurežiim on kasutusel Arendaja töövahendid Kasutajakonto andmed - - %d hääl - %d häält - - - %d hääl - lõplikud tulemused - %d häält - lõplikud tulemused - - Tehtud valik Loob lihtsa hääletuse Kasuta taastamiseks mõeldud paroolifraasi või võtit Kui sa ei pääse ligi olemasolevale sessioonile @@ -2336,7 +2316,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - või mõnda teist Matrix\'i klienti, mis oskab risttunnustamist + või mõnda teist Matrix\'i klienti, mis oskab risttunnustamist Kasuta oma muus seadmes kõige uuemat ${app_name}\'i versiooni: Sunnib loobuma praeguse krüptitud jututoa rühmavestluse seansist Funktsionaalsus on toetatud ainult krüptitud jututubades @@ -2371,7 +2351,6 @@ Näita jututoa liikmete olekusündmusi Sealhulgas kutsumisi, liitumisi, lahkumisi, müksamisi, keelamisi ning tunnuspildi ja kuvatava nime muutusi. Küsitlus - Robotinupud Reageeris: %s Verifitseerimise tulemus Link oli vigane @@ -2431,7 +2410,7 @@ Otsi suhtluskeelu saanud kasutajaid Sul ei ole õigusi siin jututoas helistamiseks Sul ei ole piisavalt õigusi, et selles jututoas alustada konverentsikõnet - Taasta algolek + Taasta algolek Loobu muudatustest Sa oled teinud muudatusi, mis on veel salvestamata. Kas soovid muudatustest loobuda\? See jututuba on veel loomata. Kas katkestame selle tegevuse\? @@ -2700,7 +2679,7 @@ Nad saavad tutvuda %s kogukonnakeskusega Kutse kasutajale %s Jaga linki - Kutsu kasutajanime alusel + Kutsu kasutajanime alusel Saada kutse e-kirjaga Hetkel oled siin vaid sina. Aga %s läheb aina paremaks, kui teised liituvad. Kutsu teisi kasutajaid @@ -2959,7 +2938,7 @@ Kutsu e-posti aadressi alusel, leia tuttavaid, jne… Lõpeta leitavuse seadistamine. Hetkel sa ei kasuta isikutuvastusserverit. Kaaslastele kutse saatmiseks ning end teistele leitavaks tegemiseks palun seadista ta alljärgnevalt. - Kutsu kasutajanime või e-posti aadressi alusel + Kutsu kasutajanime või e-posti aadressi alusel Kontrolli, et vajalikel inimestel oleks ligipääs %s kogukonda. Teistele võid kutse saata ka hiljem. Kes on su kaasteelised\? Lisa näidatud kogukonnakeskusesse @@ -3032,4 +3011,49 @@ Selleks et leida tuttavaid, sa peaksid saatma oma kontaktteavet (telefoninumbreid ja/või e-posti aadresse) siin rakenduses seadistatud isikutuvastusserverile. Parema andmeturvalisuse nimel me ei saada teavet mitte loetava tekstina, vaid räsina. Kas sa oled nõus selle teabe edastamisega\? Mitte praegu + Hääletatud + Kas sa oled kindel, et soovid küsitlust kustutada\? Seda tegevust sa ei saa hiljem tagasi pöörata. + Kustuta küsitlus + Küsitlus on lõppenud + Võta küsitlused kasutusele + Lõpeta küsitlus + Sellega ei saa enam keegi oma arvamust avaldada ning kuvame lõplikud tulemused. + Kas lõpetame selle küsitluse\? + Lõpeta küsitlus + + %1$d\'l häälel põhinev lõpptulemus + %1$d\'l häälel põhinev lõpptulemus + + + Juba on %1$d hääletanu. Tulemuste nägemiseks pead hääletama + Juba on %1$d hääletanut. Tulemuste nägemiseks pead hääletama + + + Põhineb %1$d\'l häälel + Põhineb %1$d\'l häälel + + + %1$d hääl + %1$d häält + + Süsteemiseadistused + Versioonid + Element\'i kasutamiseks vajalik abiteave + Abiteave ja kasutajatugi + Abiteave + Juriidiline teave + Sellel serveril puuduvad kasutustingimused. + Sinu isikutuvastusserveri kasutustingimused + Kolmandate osapoolte litsentsid + Sinu koduserveri kasutustingimused + ${app_name} kasutustingimused + Seadistustest saad alati määrata, et see funktsionaalsus pole kasutusel + Meie ei jaga teavet kolmandate osapooltega + Meie ei salvesta ega profileeri sinu kasutajakonto andmeid + siit + Võimalike vigade leidmiseks ja Element\'i arendamiseks jaga meiega anonüümseid andmeid. Selleks, et mõistaksime, kuidas kasutajad erinevaid seadmeid pruugivad me loome sinu seadmetele ühise juhusliku tunnuse. +\n +\nMeie kasutustingimused leiad siit - %s. + Aita Element\'i arendamisel + Võta kasutusele \ No newline at end of file diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 8963d3e40c..21777ffe6c 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -43,7 +43,7 @@ %1$s erabiltzaileak %2$s gelarako gonbidapena onartu du ** Ezin izan da deszifratu: %s ** - Igorlearen gailuak ez dizkigu mezu honetarako gakoak bidali. + Igorlearen gailuak ez dizkigu mezu honetarako gakoak bidali. Ezin izan da kendu Ezin izan da mezua bidali @@ -142,21 +142,21 @@ Historiala Ados - Utzi - Gorde - Atera - Bidali - Birbidali - Kendu - Aipua - Partekatu + Utzi + Gorde + Atera + Bidali + Birbidali + Kendu + Aipua + Partekatu Geroago - Birbidali + Birbidali Esteka iraunkorra Ikusi iturburua Ikusi deszifratutako iturburua - Ezabatu - Aldatu izena + Ezabatu + Aldatu izena Salatu edukia Dei aktiboa Konferentzia deia abian. @@ -171,7 +171,7 @@ Konferentzia deiak ez daude onartuta zifratutako geletan Bidali hala ere edo - Gonbidatu + Gonbidatu Amaitu saioa Ahots deia @@ -183,7 +183,7 @@ Ireki Itxi Arbelera kopiatuta - Desgaitu + Desgaitu Berrespena Abisua @@ -368,10 +368,10 @@ Baimendu sarbidea hurrengo laster-leihoan deia egin ahal izateko. EZ Jarraitu - Kendu - Elkartu - Aurreikusi - Baztertu + Kendu + Elkartu + Aurreikusi + Baztertu Jauzi irakurri gabeko lehen mezura. @@ -489,18 +489,6 @@ Kontuan izan ekintza honek aplikazioa berrabiaraziko duela eta denbora bat behar JENDEA FITXATEGIAK - ELKARTU - DIREKTORIOA - GOGOKOAK - GELAK - LEHENTASUN BAXUA - GONBIDAPENAK - Hasi txata - Sortu gela - Elkartu gelara - Elkartu gela batetara - Idatzi gelaren IDa edo ezizena - Arakatu direktorioa Direktorioa bilatzen… @@ -784,7 +772,6 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
Sortu konferentzia deiak Jitsi bidez Ziur trepeta ezabatu nahi duzula gela honetatik? - Ezin izan da trepeta sortu. Eskariaren bidalketak huts egin du. Botere maila osoko zenbaki positibo bat izan behar da. @@ -803,22 +790,18 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
Erabili kamera natiboa - \'%s\' saio berria gehitu duzu, eta zifratze-gakoak eskatzen ari da. Egiaztatu gabeko zure \'%s\' saioa zifratze-gakoak eskatzen ari da. Hasi egiaztaketa Partekatu egiaztatu gabe Ezikusi eskaria - Abisua! Konferentzia deiak garapenean daude eta agian ez dabiltza behar bezala. - Komandoaren errorea Komando ezezaguna: %s - Ez Zaratatsua @@ -873,7 +856,6 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
Komunitatearen IDa adibidea - Hasiera Jendea Gelak @@ -946,7 +928,6 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
%d trepeta aktibo - Hartzailearen abatarra Jakinarazpen abatarra Abatarra @@ -998,9 +979,9 @@ Matrix-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ah Jarraitzeko, sartu zure pasahitza: Hirugarrengoen lizentziak - Deskargatu - Hitz egin - Garbitu + Deskargatu + Hitz egin + Garbitu Eskatu berriro zifratze-gakoak zure beste saioetatik. Gako eskaria bidalita. @@ -1153,7 +1134,7 @@ Matrix-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ah Markdown aktibatu da. Markdown desaktibatu da. - Onartu + Onartu Irakurri eta onartu hasiera-zerbitzari honen baldintzak: @@ -1246,7 +1227,7 @@ Hurrengo pantailan ${app_name}-i bigarren planoan aritzeko baimena eskatuko zaiz Erabili gakoen babes-kopia Gakoen babes-kopia ez da amaitu, itxaron mesedez… - Saltatu + Saltatu Egina Jakinarazpenen ezarpen aurreratuak @@ -1373,9 +1354,9 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
Zerbitzua hasieratzen Zure mezu zifratuetara sarbidea galduko duzu ez baduzu gakoen babes-kopia egiten saioa amaitu aurretik. - Geratu - Abortatu - Ezikusi + Geratu + Abortatu + Ezikusi Ziur saioa amaitu nahi duzula\? Hasi saioa Single sign-on bidez @@ -1560,8 +1541,8 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
Zure gelak hemen bistaratuko dira Erreakzioak - Ados - Gogokoa + Ados + Gogokoa Gehitu erreakzioa Ikusi errekzioak Erreakzioak @@ -1676,10 +1657,10 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada.
Ikusi edizioen historiala Bat ere ez - Indargabetu - Deskonektatu - Berrikusi - Ukatu + Indargabetu + Deskonektatu + Berrikusi + Ukatu Ez da identitate-zerbitzaririk konfiguratu. @@ -2233,15 +2214,6 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Erabiltzaile-izena Garapen tresnak Kontuaren datuak - - boto %d - %d boto - - - boto %d - Azken emaitza - %d boto - Azken emaitza - - Hautatutako aukera Inkesta sinplea sortzen du Erabili berreskuratze metodo bat Ezin baduzu badagoen saio bat erabili @@ -2417,7 +2389,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - edo zeharka sinatzeko gaitasuna duen beste Matrix bezero bat + edo zeharka sinatzeko gaitasuna duen beste Matrix bezero bat Erabili azken ${app_name} bertsioa zure beste gailuetan: Uneko irteerako talde saioa zifratutako gela batean baztertzera behartzen du Zifratutako gelatan onartzen da soilik diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 353db01f32..99573339e8 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -45,7 +45,7 @@ %1$s دعوت پیوستن به اتاق %2$s را باطل کرد %1$s دعوت برای %2$s را پذیرفت ** ناتوان در رمزگشایی: %s ** - دستگاه فرستنده، کلیدهای این پیام را برایمان نفرستاده است. + دستگاه فرستنده، کلیدهای این پیام را برایمان نفرستاده است. ناتوان در فرستادن پیام شکست در بارگذاری تصویر خطای شبکه @@ -229,17 +229,17 @@ گزارش اشکال در حال بارگذاری… باشه - لغو - ذخیره - ترک کردن - ارسال - ارسال دوباره - نقل قول - هم‌رسانی + لغو + ذخیره + ترک کردن + ارسال + ارسال دوباره + نقل قول + هم‌رسانی بعداً مشاهده منبع - حذف - تغییر نام + حذف + تغییر نام گزارش محتوا تماس فعال صوتی @@ -247,7 +247,7 @@ اطّلاعات نشست به هر حال ارسال کن یا - دعوت + دعوت آفلاین خروج خروج از حساب @@ -259,7 +259,7 @@ گشودن بستن در کلیپ‌بورد کپی شد - غیرفعال + غیرفعال هشدار خانه اتاق‌ها @@ -330,7 +330,7 @@ به هر حال تماس بگیر نمی‌توان تماس را آغاز کرد نمی‌توان تماس را شروع کرد، لطفاً بعداً تلاش نمایید - پذیرفتن + پذیرفتن کنش‌ها تایید خطا @@ -399,10 +399,10 @@ نه در دانلودها ذخیره شود؟ ادامه - برداشتن - پیوستن - پیش‌نمایش - رد کردن + برداشتن + پیوستن + پیش‌نمایش + رد کردن فهرست اعضا تماس برقرار شد در حال برقراری تماس… @@ -454,19 +454,19 @@ دعوت ترک این اتاق حذف از این اتاق - ماندن - برداشتن - بارگیری + ماندن + برداشتن + بارگیری کنفرانس در حال برگذاری است. \nبه صورت %1$s یا %2$s به آن بپیوندید به خاطر نداشتن مجوز دسترسی، برخی امکانات ممکن است در دسترس نباشند… به خاطر نداشتن مجوز دسترسی، این اقدام ممکن نیست. برای آغاز کنفرانس نیاز به دسترسی دعوت اعضا دارید تماس گروهی در اتاق‌های رمزنگاری شده پشتیبانی نمی‌شود - رد شدن + رد شدن انجام شد - انصراف - نادیده‌گرفتن + انصراف + نادیده‌گرفتن مطمئنید که می‌خواهید از حسابتان خارج شوید؟ علامت‌گذاری به عنوان خوانده شده ورود با سامانه‌های احراز هویت مرکزی @@ -489,9 +489,9 @@ پشتیبان‌گیری در صورت عدم پشتیبان‌گیری از کلیدهای خود پیش از خروج، دسترسی شما به پیام‌های رمزنگاری شده از بین می‌رود. گواهی‌نامه‌های شخص ثالث - صحبت - پاک کردن - هدایت + صحبت + پاک کردن + هدایت پیوند دائمی مشاهده منبع رمزگشایی شده تاریخی @@ -507,9 +507,9 @@ لطفاً المنت را روی افزاره‌ای دیگر که می‌تواند پیام را رمزگشایی کند، اجرا کنید تا بتواند کلیدها را به این نشست بفرستد. فهرست رسیدهای خواندن آیا مطمئن هستید؟ - قطع اتصال - بررسی - نپذیرفتن + قطع اتصال + بررسی + نپذیرفتن دوباره از من نپرس رایانامه‌ای برای بازیابی تنظیم کرده تا بتوانید در صورت نیاز، از طریقش به دست افرادی که می‌شناسید، قابل کشف باشید. ثبت شماره تلفن (بعدا در صورت دلخواه می توانید از آن برای شناسایی دوستان خود استفاده کنید). @@ -519,7 +519,6 @@ فرستادن یک پاسخ (رمزنشده)… پالایش اعضای اتاق اتاق‌ها - اتاق‌ها %d اتاق %d اتاق @@ -674,8 +673,8 @@ اتاق‌ها اتاق‌هایتان این‌جا نشان داده خواهند شد. برای یافتن موارد موجود یا ایجاد خودتان روی + در پایین سمت راست بزنید. بازخودها - موافقت - پسند + موافقت + پسند افزودن بازخورد دیدن بازخوردها بازخوردها @@ -766,7 +765,7 @@ ابزارهای توسعه تأیید نشست هیچ - ابطال + ابطال هیچ کارساز هویتی پیکربندی نشده. تماس به دلیل پیکربندی بد کارساز، شکست خورد از %s استفاده کنید @@ -849,12 +848,12 @@ گذرواژه تنظیمات گذرواژهٔ حساب - پخش - توقف + پخش + توقف رونوشت موفقیت آگاهی‌ها - خاتمه + خاتمه اجازهٔ شروع تماس کنفرانسی در این اتاق را ندارید اجازهٔ شروع تماس در این اتاق را ندارید کنفرانسی در حال اجراست! @@ -940,16 +939,6 @@ جست‌وجو افراد پرونده‌ها - پیوستن - شاخه - محبوب‌ها - کم‌اهمیت - دعوت‌ها - شروع گپ - ایجاد اتاق - پیوستن به اتاق - پیوستن به یک اتاق - شناسهٔ اتاق یا نام مستعارش را بنویسید مرور شاخه جست‌وجو کردن شاخه… تمام پیام‌ها (پرصدا) @@ -1367,7 +1356,6 @@ پرونده برچسب نظرسنجی - دکمه‌های بات واکنش داده با: %s نتیجه‌گیری تأیید در حال انتظار… @@ -1448,15 +1436,6 @@ اتّصال به کارساز از دست رفت حالت هواپیما روشن است داده‌های حساب - - %d رأی - %d رأی - - - %d رأی - نتایج نهایی - %d رأی - نتایج نهایی - - انتخاب گزیده ایجاد نظرسنجی‌ای ساده استفاده از یک کلید یا عبارت بازیابی اگر به نشست‌های موجود دسترسی ندارید @@ -1606,7 +1585,7 @@ برای ادامه از %1$s یا %2$sتان استفاده کنید. پشتیبانی‌شده فقط در اتاق‌های رمزشده از آخرین نگارش المنت روی دیگر افزاره‌تان استفاده کنید: - یا دیگر کاره‌های ماتریکس دادای قابلیت ورود چندگانه + یا دیگر کاره‌های ماتریکس دادای قابلیت ورود چندگانه تأیید دستی با متن تأیید ورود جدیدی که به حسابتان دسترسی دارد: %1$s تأیید همهٔ نشست‌هایتان برای اطمینان از این که حساب و پیام‌هایتان امنند @@ -1690,7 +1669,7 @@ پیکربندی آگاهی‌ها اجازهٔ آغاز یک تماس را ندارید اجازهٔ آغاز یک تماس کنفرانسی را ندارید - بازنشانی + بازنشانی انتخاب گزینه‌ی دیگر مجوز دادن المنت می تواند در پس‌زمینه اجرا شده تا آگاهی‌هایتان را به صورت ایمن و محرمانه مدیریت کند. ممکن است بر مصرف باتری تأثیر بگذارد. @@ -2700,7 +2679,7 @@ آنها قادر به کاوش در %s خواهند بود دعوت به %s به اشتراک‌گذاری لینک - دعوت با شناسه‌کاربری + دعوت با شناسه‌کاربری دعوت با ایمیل در حال حاضر فقط شما هستید. %s با دیگران حتی بهتر خواهد بود. دعوت افراد @@ -2960,7 +2939,7 @@ پایان برپا سازی کشف. همگروهی‌هایتان کیند؟ در حال حاضر از کارساز هویتی استفاده نمی‌کنید. برای دعوت همگروهی‌ها و قابل کشف بودن به دستشان، در پایین یکی پیکربندی کنید. - دعوت با نام کاربری یا نامه + دعوت با نام کاربری یا نامه مطمئن شوید افراد درستی به %s دسترسی دارند. بعداً می‌توانید تفراد بیش‌تری را دعوت‌کنید. افزودن به فضای داده شده ایجاد کردن فضا… @@ -3032,4 +3011,50 @@ با فرستادن این اطّلاعات موافقید؟ اکنون نه برای کشف آشنایان موجود، لازم است اطلاعات آشنایان (رایانامه‌ها و شماره تلفن‌ها) را به کارساز هویتتان بفرستید. برای محرمانگیتان، داده‌هایتان را پیش از فرستادن، در هم می‌ریزیم. + با هم‌رسانی داده‌ّای استفادهٔ ناشناس، در تشخیص مشکل‌ها و بهبود المنت یاریمان کنید. برای درک چگونگی استفادهٔ مردم از چندین افزاره، شناسه‌ای کاتوره‌ای بین افزاره‌هایتان هم‌رسانی خواهیم کرد. +\n +\nمی‌توانید از %s قوانینمان را بخوانید. + مطمئنید که می خواهید این نظرسنجی را بردارید؟ پس از این کار، قادر به بازگردانیش نیستید. + برداشتن نظرسنجی + نظرسنجی پایان یافت + رأی داده شد + به کار انداختن نظرسنجی‌ها + پایان نظرسنجی + این کار اجازهٔ رأی دادن افراد را پایان داده و نتیجهٔ نهایی نظرسنجی را نمایش خواهد داد. + پایان این نظرسنجی؟ + گزینهٔ غالب + پایان نظرسنجی + + نتیجهٔ نهایی بر مبنای %1$d رأی + نتیجهٔ نهایی بر مبنای %1$d رأی + + + رأیی داده نشده + %1$d رأی داده شده. برای دیدن نتیجه، رأی دهید + + + بر مبنای %1$d رأی + بر مبنای %1$d رأی + + + %1$d رأی + %1$d رأی + + تنظیمات سامانه + نگارش‌ها + کمک در استفاده از المنت + کمک و پشتیانی + کمک + موارد حقوقی + این کارساز هیچ سیاستی فراهم نکرده. + کتاب‌خانه‌های سوم شخص + سیاست کارساز هویتتان + سیاست کارساز خانگیتان + سیاست ${app_name} + می‌توانید هر زمان، در تنظیمات خاموشش کنید + ما اطّلاعات را با سوم‌شخص‌ها هم‌رسانی نمی‌کنیم + ما هیچ دادهٔ حسابی را ذخیره یا نمایه نمی‌کنیم + این‌جا + کمک به بهبود المنت + به کار انداختن \ No newline at end of file diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index 2137cfff60..127287167b 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -38,7 +38,7 @@ %1$s lähetti liittymiskutsun huoneeseen käyttäjälle %2$s %1$s hyväksyi kutsun käyttäjän %2$s puolesta ** Salauksen purku epäonnistui: %s ** - Lähettäjän laite ei ole lähettänyt avaimia tähän viestiin. + Lähettäjän laite ei ole lähettänyt avaimia tähän viestiin. Viestin lähetys epäonnistui Kuvan lataaminen epäonnistui Verkkovirhe @@ -48,9 +48,7 @@ Puhelinnumero Takaisinveto epäonnistui %1$s: %2$s - Kutsu käyttäjältä %s - Huonekutsu %1$s ja %2$s Tyhjä huone @@ -208,32 +206,27 @@ %1$s loi huoneen Lähetit tarran. Lähetit kuvan. - Viestit Huone Asetukset Jäsenen tiedot Historiallinen - OK - Peruuta - Tallenna - Poistu - Lähetä - Lähetä uudelleen - Poista - - Lainaa - Jaa + Peruuta + Tallenna + Poistu + Lähetä + Lähetä uudelleen + Poista + Lainaa + Jaa Myöhemmin - Lähetä edelleen + Lähetä edelleen Pysyvä linkki Lähdekoodi Näytä salaamaton lähde - - - Poista - Nimeä uudelleen + Poista + Nimeä uudelleen Ilmoita epäilyttävästä sisällöstä Puhelu meneillään Ryhmäpuhelu meneillään. @@ -248,8 +241,7 @@ Ryhmäpuhelut eivät ole tuettuja salatuissa huoneissa Lähetä silti tai - Kutsu - + Kutsu Kirjaudu ulos Äänipuhelu Videopuhelu @@ -260,31 +252,25 @@ Avaa Sulje Kopioitu leikepöydälle - Poista käytöstä - + Poista käytöstä Vahvistus Varoitus - Koti Suosikit Ihmiset Huoneet - Suodata huoneista Suodata suosikeista Suodata henkilöistä Suodata huoneista - Kutsut Matala prioriteetti - Keskustelut Paikalliset yhteystiedot Ainoastaan Matrix-yhteyshenkilöt Ei keskusteluita Et ole sallinut ${app_name}ille pääsyä paikallisiin yhteystietoihisi Ei tuloksia - Huoneet Huoneluettelo Ei huoneita @@ -314,17 +300,12 @@ Kirjaudu ulos Kotipalvelimen URL-osoite Identiteettipalvelimen URL-osoite - Etsi - - Aloita uusi keskustelu Aloita puhelu Aloita videopuhelu - Lähetä tiedostoja Ota kuva tai video - Kirjaudu sisään Luo tili Lähetä @@ -361,23 +342,19 @@ Käyttäjätunnus on jo käytössä Kotipalvelin: Identiteettipalvelin: - Olen varmistanut sähköpostiosoitteeni Palauttaaksesi salasanasi, anna tiliisi liitetty sähköpostiosoite: Anna tiliisi liitetty sähköpostiosoite. Anna uusi salasana. Osoitteeseen %s on lähetetty sähköposti. Kun olet avannut siinä olevan linkin, paina alla olevaa nappia. - Sähköpostiosoitteesi vahvistaminen epäonnistui. Varmista, että klikkasit sähköpostissa olevaa linkkiä Salasanasi on vaihdettu.\n\nSinut on kirjauduttu ulos kaikista laitteistasi, etkä enää saa viesti-ilmoituksia. Ottaaksesi käyttöön ilmoitukset uudelleen, kirjaudu sisään uudelleen kaikilla laitteillasi. - URL-osoitteen on alettava seuraavasti: http[s]:// Kirjautuminen epäonnistui: Verkkovirhe Kirjautuminen epäonnistui Rekisteröityminen epäonnistui: Verkkovirhe Rekisteröityminen epäonnistui Rekisteröityminen epäonnistui: sähköpostin varmistaminen epäonnistui - Syötäthän toimivan osoitteen Väärä käyttäjätunnus tai salasana Annettua tunnistetta ei hyväksytty @@ -386,29 +363,20 @@ Liian monta pyyntöä Käyttäjänimi on jo käytössä Sähköpostiisi lähetetty linkki, jota ei ole vielä klikattu - - - Lukukuittaukset - - Valitse koko Alkuperäinen Iso Keskikokoinen Pieni - Peru lataus? Peru lähetys? %d s %1$d min %2$d s - Eilen Tänään - Huoneen nimi Huoneen aihe - Yhdistetty Yhdistetään… Puhelu loppui @@ -418,17 +386,11 @@ Saapuva puhelu Puhelu käynnissä… Toinen puoli ei vastannut. - Mediayhteys epäonnistui Kameran alustus epäonnistui puheluun vastattiin muualta - - Ota kuva tai video" - Videointi epäonnistui - - Huomio ${app_name} tarvitsee käyttöluvan mediagalleriaasi lähettäkseen liitteitä.\n\nSalli tiedostojen käyttö seuraavalla näytöllä liittääksesi kuvia ja muita tiedostoja viesteihin. ${app_name} tarvitsee käyttöluvan kameraan ottaakseen kuvia ja suorittakseen videopuheluita. @@ -447,32 +409,25 @@ \n \nSaako ${app_name} käyttää yhteystietojasi tätä varten\? Toimenpide epäonnistui puuttuvien käyttölupien takia - Tallennettu Tallenna latauskansioon\? KYLLÄ EI Jatka - - Poista - Liity - Esikatsele - Hylkää - + Poista + Liity + Esikatsele + Hylkää Siirry ensimmäiseen lukemattomaan viestiin. - %s on kutsunut sinut huoneeseen Tämä kutsu lähetettiin osoitteeseen %s, jota ei ole liitetty tiliisi. \nVoit kirjautua sisään toisella tilillä tai lisätä tämän sähköpostiosoitteen tiliisi. Olet avaamassa huonetta %s. Haluatko liittyä huoneeseen osallistuaksesi keskusteluun? huone - Tämä on huoneen esikatselu. Liity huoneeseen osallistuaksesi keskusteluun. - Uusi keskustelu Lisää jäsen yksi jäsen - Poistu huoneesta Haluatko varmasti poistua huoneesta? Haluatko varmasti poistaa käyttäjän %s tästä keskustelusta\? @@ -499,19 +454,16 @@ Näytä istuntolista Olet ylentämässä käyttäjää samalle tasolle kuin oma käyttäjätasosi. Et voi perua tätä toimintoa.\nOletko varma? Haluatko kutsua käyttäjän %s tähän keskusteluun\? - Kutsu tunnisteella PAIKALLISET YHTEYSTIEDOT (%d) Vain Matrix-käyttäjät Kutsu käyttäjä tunnisteella Syötä yksi tai useampi sähköpostiosoite tai Matrix-tunniste Sähköposti tai Matrix-tunniste - Etsi %s kirjoittaa… %1$s ja %2$s kirjoittavat… %1$s, %2$s ja muita kirjoittaa… - Lähetä salattu viesti… Lähetä viesti (salaamaton)… Yhteys palvelimeen katkesi. @@ -523,21 +475,17 @@ Poista lähettämättömät viestit Tiedostoa ei löydy Sinulla ei ole oikeutta lähettää viestejä tähän huoneeseen. - Luota Älä luota Kirjaudu ulos Jätä huomiotta - Sormenjälki (%s): Palvelimen identiteettiä ei voitu vahvistaa. - Tämä voi tarkoittaa että joku yrittää kaapata sinun viestintääsi tai että laitteesi ei luota palvelimen varmenteeseen. Jos palvelimen ylläpitäjä on ilmoittanut, että tämä on odotettua, varmista että alla oleva sormenjälki on sama kuin hänen antamansa. Sertifikaatti johon laitteesi luotti aikaisemmin on vaihtunut. Tämä on HYVIN EPÄTAVALLISTA. On suositeltavaa, että ET hyväksy tätä uutta sertifikaattia. Sertifikaatti on vaihtunut ennestään luotetusta ei-luotettuun. Palvelin on voinut uusia sertifikaattinsa. Kysy palvelimen ylläpitäjältä, mikä sormenjäljen pitäisi olla. Hyväksy sertifikaatti vain, jos palvelimen ylläpitäjä on julkaissut sormenjäljen, joka täsmää yllä olevan kanssa. - Huoneen tiedot Henkilöt Tiedostot @@ -545,14 +493,12 @@ Epämuotoinen tunnus. Anna sähköpostiosoite tai Matrix-tunnus (esim. \'@tunnus:verkkotunnus\') KUTSUTUT JÄSENET - Syy sisällön ilmoittamiseen Haluatko piilottaa kaikki tämän käyttäjän viestit\? \n \nHuomaa, että tämä toiminto käynnistää sovelluksen uudelleen ja siinä saattaa kestää jonkin aikaa. Peru lähetys Peru lataus - Etsi Etsi huoneen jäsenistä Ei tuloksia @@ -560,29 +506,13 @@ VIESTIT HENKILÖT TIEDOSTOT - - LIITY - LUETTELO - SUOSIKIT - HUONEET - MATALA TÄRKEYS - - KUTSUT - Aloita keskustelu - Luo huone - Liity huoneeseen - Liity huoneeseen - Syötä huonetunniste tai -alias - Selaa luetteloa Haetaan luettelosta… - Suosikki Matala tärkeys Yksityiskeskustelu Poistu keskustelusta Unohda - Viestit Asetukset Versio @@ -590,7 +520,6 @@ Kolmannen osapuolen tiedot Tekijänoikeustiedot Tietosuojakäytäntö - Profiilikuva Nimi Sähköposti @@ -618,7 +547,6 @@ Tekijänoikeus Tietosuojakäytäntö Tyhjennä välimuisti - Käyttäjäasetukset Ilmoitukset Piilotetut henkilöt @@ -647,7 +575,6 @@ Kirjautuneena nimellä Kotipalvelin Identiteettipalvelin - Odotetaan vahvistusta Tarkista sähköpostisi ja klikkaa sinne saamaasi linkkiä. Kun olet tehnyt tämän, paina jatka. Sähköpostin vahvistaminen epäonnistui. Tarkista sähköpostisi ja avaa lähettämässämme viestissä oleva linkki. Tämän jälkeen paina painiketta ”jatka”. @@ -665,7 +592,6 @@ \nHuomaa, että tämä toiminto käynnistää sovelluksen uudelleen ja siinä saattaa kestää jonkin aikaa. Haluatko poistaa tämän ilmoituskohteen? Haluatko varmasti poistaa kohteen %1$s %2$s\? - Valitse maa Maa Valitse maa @@ -676,37 +602,29 @@ Anna aktivointikoodi Puhelinnumeron validointi epäonnistui Aktivointikoodi - - Huoneen kuva Huoneen nimi Aihe Huoneen luokittelu Luokiteltu: - Suosikki Matala tärkeys Ei mikään - Näkyvyys ja pääsy Listaa tämä huone huoneluettelossa Huoneen pääsy Huoneen historian näkyvyys Ketkä saavat nähdä huoneen historian\? Ketkä pääsevät tähän huoneeseen\? - Kuka tahansa Vain jäsenet (tämän asetuksen valitsemisesta alkaen) Vain jäsenet (heidän kutsumisestaan alkaen) Vain jäsenet (heidän liittymisestään alkaen) - Linkittääksesi huoneeseen, sillä pitää olla osoite. Vain kutsutut Kaikki, jotka tietävät huoneen osoitteen (paitsi vieraat) Kaikki jotka tietävät huoneen osoitteen, mukaanlukien vieraat - Porttikiellon saaneet käyttäjät - Lisäasetukset Tämän huoneen sisäinen ID Osoitteet @@ -717,7 +635,6 @@ Kirjaudu ulos salauksen aktivoimiseksi. Lähetä salatut viestit vain vahvistetuille laitteille Älä lähetä tältä laitteelta salattuja viestejä tämän huoneen vahvistamattomille laitteille. - Huoneella ei ole paikallisia osoitteita Uusi osoite (esim. #foo:matrix.org") Virheellinen aliaksen muoto @@ -732,14 +649,9 @@ Tämä huone ei käytä salausta. Ota salaus käyttöön \n(varoitus: salausta ei voi poistaa käytöstä!) - Luettelo - %s yritti ladata tietyn kohdan huoneen historiassa, mutta sitä ei löytynyt. - - Päästä päähän -salauksen lisätiedot - Tapahtuman tiedot Käyttäjän Matrix-ID Curve25519-ID-avain @@ -780,20 +692,16 @@ Poista kielto Vahvista laite Vahvistaaksesi, että tähän laitteeseen voi luottaa, ota yhteyttä sen omistajaan jollain muulla tavalla (esimerkiksi soittamalla tai tapaamalla) ja varmista että hänen laitteensa avain on sama kuin alla oleva: - Jos avaimet eivät täsmää, keskustelusi eivät luultavasti ole turvassa. Vahvistan, että avaimet täsmäävät - Huoneessa on tuntemattomia istuntoja Huoneessa on tuntemattomia laitteita joita ei ole vahvistettu.\nLaitteet eivät välttämättä kuulu väitetyille omistajilleen.\nJokainen uusi laite kannattaa vahvistaa ennen kuin jatkat, mutta voit myös lähettää viestit vahvistamattomille laitteille.\n\nTuntemattomat laitteet: - Valitse huoneluettelo Palvelin saattaa olla tavoittamattomissa tai ylikuormitettu Syötä kotipalvelin, jolta julkiset huoneet listataan Palvelimen nimi Kaikki huoneet palvelimella %s Kaikki alkuperäiset %s huoneet - Etsi historiasta Käyttäjäluettelo KÄYTTÄJÄHAKEMISTO (%s) @@ -839,7 +747,6 @@ Pienoissovelluksen luonti epäonnistui Luo konferenssipuheluita jitsin avulla Haluatko varmasti poistaa pienoissovelluksen tästä huoneesta\? - Sovelmaa ei voitu luoda. Pyynnön lähetys epäonnistui. Oikeustason täytyy olla positiivinen luku. @@ -850,19 +757,15 @@ Huone %s ei ole näkyvillä. Lisää integraatioita Käytä järjestelmän kamerasovellusta - Lisäsit uuden istunnon \'%s\', joka pyytää salausavaimia. Vahvistamaton laitteesi \'%s\' pyytää salausavaimia. Aloita varmennus Jaa ilman varmennusta Hylkää pyyntö - Varoitus! Konferenssipuhelut ovat kehitysvaiheessa eivätkä välttämättä luotettavia. - Komentovirhe Tuntematon komento: %s - Pois Äänekäs Salattu viesti @@ -897,7 +800,6 @@ Esimerkki Yhteisön ID esimerkki - Koti Ihmiset Huoneet @@ -938,9 +840,9 @@ Lähetä tarra Oletko varma? Kolmannen osapuolen lisenssit - Lataa - Hyväksy - Ohita + Lataa + Hyväksy + Ohita Oletko varma, että haluat kirjautua ulos? Virhe Jos mahdollista, kirjoita kuvaus englanniksi. @@ -960,13 +862,13 @@ Käytä avainten varmuuskopiointia Varmuuskopioi Menetät pääsyn salattuihin viesteihisi, ellet varmuuskopioi avaimiasi ennen uloskirjautumista. - Pysy - Puhu - Tyhjennä + Pysy + Puhu + Tyhjennä Tätä toimintoa ei voi tehdä puuttuvien oikeuksien takia. Soita silti Valmis - Keskeytä + Keskeytä Toiminnot Järjestelmähälytykset Lähetä ääntä @@ -1337,7 +1239,7 @@ Versio Algoritmi Allekirjoitus - Jätä huomiotta + Jätä huomiotta Kirjaudu sisään kertakirjautumisella Tämä osoite ei ole saavutettavissa. Tarkistathan osoitteen Laitteesi käyttää vanhentunutta, haavoittuvaista TLS-protokollan versiota. Turvallisuutesi tähden et voi muodostaa yhteyttä @@ -1416,8 +1318,8 @@ Huoneet Huoneesi näytetään tässä. Napsauta + oikeasta alakulmasta aloittaaksesi. Reaktiot - Samaa mieltä - Tykkää + Samaa mieltä + Tykkää Lisää reaktio Näytä reaktiot Reaktiot @@ -1500,8 +1402,8 @@ Huoneluettelo Julkaise tämä huone huoneluettelossa Viesti-ilmoitusten säännöt - Katkaise yhteys - Kieltäydy + Katkaise yhteys + Kieltäydy Identiteettipalvelinta ei ole määritetty. Puhelu epäonnistui väärin määritetyn palvelimen takia Älä kysy uudestaan @@ -1584,8 +1486,8 @@ Tekstiviesti on lähetetty numeroon %s. Syötä sen sisältämä varmistuskoodi. Viesti-ilmoitusten sääntöjä ei ole määritetty Luo uusi yksityiskeskustelu - Kumoa - Tarkasta + Kumoa + Tarkasta Aseta puhelinnumerosi, ja voit myöhemmin antaa muiden löytää sinut puhelinnumerosi perusteella. Aseta sähköpostisi tunnuksen palautusta varten. Myöhemmin voit asettaa sähköpostisi tai puhelinnumerosi löydettäviksi, jotta sinut voi löytää näillä tiedoilla. Aseta sähköpostisi tunnuksen palautusta varten. Myöhemmin voit asettaa sähköpostisi tai puhelinnumerosi löydettäviksi, jotta sinut voi löytää näillä tiedoilla. @@ -1954,14 +1856,6 @@ Ei Yhteys kotipalvelimeen on poikki Kehittäjätyökalut - - %d ääni - %d ääntä - - - %d ääni - lopulliset tulokset - %d ääntä - lopulliset tulokset - Luo yksinkertaisen äänestyksen Jos et pääse käsiksi olemassaolevaan istuntoon Uusi sisäänkirjautuminen @@ -2030,10 +1924,10 @@ Sinulla ei ole oikeuksia puhelun aloittamiseen tässä huoneessa Sinulla ei ole oikeuksia ryhmäpuhelun aloittamiseen Sinulla ei ole oikeuksia ryhmäpuhelun aloittamiseen tässä huoneessa - Nollaa - Jätä huomiotta - Tauko - Toista + Nollaa + Jätä huomiotta + Tauko + Toista Käyttäjän huomiotta jättäminen piilottaa kyseisen käyttäjän viestit sinulta. \n \nVoit perua tämän milloin tahansa yleisissä asetuksissa. @@ -2326,8 +2220,8 @@ He voivat selata avaruutta %s Kutsu avaruuteen %s Jaa linkki - Kutsu käyttäjänimellä tai sähköpostilla - Kutsu käyttäjänimellä + Kutsu käyttäjänimellä tai sähköpostilla + Kutsu käyttäjänimellä Kutsu sähköpostitse Kutsu avaruuteen %s Kutsu ihmisiä diff --git a/vector/src/main/res/values-fr-rCA/strings.xml b/vector/src/main/res/values-fr-rCA/strings.xml index cf9c07efb6..29ff6cf9bf 100644 --- a/vector/src/main/res/values-fr-rCA/strings.xml +++ b/vector/src/main/res/values-fr-rCA/strings.xml @@ -62,7 +62,6 @@ Si vous n’avez pas accès à une session existante Utiliser une phrase secrète ou une clé de récupération Crée un sondage simple - Option sélectionnée Supprimer les données du compte de type %1$s \? \n \nÀ utiliser avec précaution, ceci peut entraîner des comportements inattendus. @@ -190,7 +189,6 @@ En attente… Conclusion de la vérification A réagi avec : %s - Boutons de robot Sondage Autocollants Fichier @@ -427,8 +425,8 @@ Réactions Voir les réactions Ajouter une réaction - J’aime - D’accord + J’aime + D’accord Réactions Vos salons seront affichés ici. Appuyez sur le « + » en bas à droite pour trouver ceux existant ou en créer de nouveaux. Salons @@ -518,14 +516,6 @@ Envoyer l’image en taille originale Envoyer les images en taille originale - - %d vote − Résultats finaux - %d votes − Résultats finaux - - - %d vote - %d votes - %d session active %d sessions actives @@ -818,7 +808,7 @@ Seulement pris en charge dans les salons chiffrés Force la session de groupe sortante actuelle dans un salon chiffré à être abandonnée Utilisez la dernière version de ${app_name} sur vos autres appareils : - ou un autre client Matrix qui prend en charge la signature croisée + ou un autre client Matrix qui prend en charge la signature croisée ${app_name} iOS \n${app_name} Android ${app_name} Web @@ -1458,17 +1448,6 @@ Notification sonore pour chaque message Recherche dans le répertoire… Parcourir le répertoire - Saisissez un identifiant ou un alias de salon - Rejoindre un salon - Rejoindre le salon - Créer un salon - Nouvelle discussion - INVITATIONS - PRIORITÉ BASSE - SALONS - FAVORIS - RÉPERTOIRE - REJOINDRE La recherche dans les salons chiffrés n\'est pas encore prise en charge. FICHIERS PARTICIPANTS @@ -2004,7 +1983,7 @@ Attention Confirmation Revenir - Désactiver + Désactiver Copié dans le presse-papiers Dé-publier Changer @@ -2025,15 +2004,15 @@ Raccrocher Refuser Accepter - Refuser - Examiner - Ignorer - Annuler + Refuser + Examiner + Ignorer + Annuler Terminé - Passer - Accepter + Passer + Accepter Hors ligne - Inviter + Inviter ou Envoyer quand même Appeler quand même @@ -2058,34 +2037,34 @@ Téléconférence en cours. \nLa rejoindre en %1$s ou en %2$s Commencer une conversation - Réinitialiser - Ignorer - Pause - Lancer + Réinitialiser + Ignorer + Pause + Lancer Appel en cours Signaler le contenu - Déconnecter - Révoquer + Déconnecter + Révoquer Aucun - Renommer - Supprimer + Renommer + Supprimer Afficher la source déchiffrée Afficher la source Permalien - Transférer + Transférer Plus tard - Effacer - Parler - Partager - Télécharger - Citer - Effacer - Renvoyer - Envoyer - Rester - Quitter - Enregistrer - Annuler + Effacer + Parler + Partager + Télécharger + Citer + Effacer + Renvoyer + Envoyer + Rester + Quitter + Enregistrer + Annuler OK Chargement… Licences tierces @@ -2375,7 +2354,7 @@ Erreur de réseau Envoi du message impossible Effacement impossible - L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message. + L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message. ** Déchiffrement impossible : %s ** %1$s de %2$s à %3$s %1$s a modifié le rang de %2$s. @@ -2524,10 +2503,10 @@ Synchronisation… Développer l’entête Liste les membres - Rejeter - Aperçu - Rejoindre - Supprimer + Rejeter + Aperçu + Rejoindre + Supprimer Continuer NON OUI @@ -2768,7 +2747,7 @@ Permettra de parcourir les salons de %s Inviter dans %s Partager le lien - Inviter par nom d’utilisateur + Inviter par nom d’utilisateur Inviter par courriel Vous êtes seul·e pour l’instant. %s sera plus agréable avec de la compagnie. Inviter à %s diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index a6ee72c98a..4abe66dc6e 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -39,7 +39,7 @@ %1$s a envoyé une invitation à %2$s pour rejoindre le salon %1$s a accepté l’invitation de %2$s ** Déchiffrement impossible : %s ** - L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message. + L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message. Effacement impossible Envoi du message impossible L’envoi de l’image a échoué @@ -240,18 +240,18 @@ Informations sur ce participant Historique OK - Annuler - Enregistrer - Envoyer - Renvoyer - Partager + Annuler + Enregistrer + Envoyer + Renvoyer + Partager Plus tard - Transférer + Transférer Permalien Afficher la source Afficher la source déchiffrée - Supprimer - Renommer + Supprimer + Renommer Signaler le contenu Appel en cours Téléconférence en cours. @@ -265,7 +265,7 @@ Informations sur la session Les téléconférences ne sont pas prises en charge dans les salons chiffrés ou - Inviter + Inviter Se déconnecter Appel audio Appel vidéo @@ -276,7 +276,7 @@ Ouvrir Fermer Copié dans le presse-papiers - Désactiver + Désactiver Confirmation Attention Accueil @@ -300,7 +300,7 @@ Aucun salon Aucun salon public disponible Salon - Effacer + Effacer Envoyer quand même Envoyer les journaux Envoyer les journaux d’erreur @@ -386,10 +386,10 @@ OUI NON Continuer - Supprimer - Rejoindre - Aperçu - Rejeter + Supprimer + Rejoindre + Aperçu + Rejeter un salon Nouvelle discussion Ajouter un membre @@ -444,16 +444,6 @@ MESSAGES PARTICIPANTS FICHIERS - REJOINDRE - RÉPERTOIRE - FAVORIS - SALONS - PRIORITÉ BASSE - INVITATIONS - Nouvelle discussion - Créer un salon - Rejoindre le salon - Rejoindre un salon Parcourir le répertoire Recherche dans le répertoire… Favori @@ -635,8 +625,8 @@ Annuler l’envoi \? %d s %1$d min %2$d s - Quitter - Citer + Quitter + Citer Le correspondant n’a pas décroché. Prendre une photo ou une vidéo Information @@ -694,7 +684,6 @@ Voulez-vous cacher tous les messages de cet utilisateur \? \n \nVeuillez noter que cette action redémarrera l’application et pourra prendre un certain temps. - Saisissez un identifiant ou un alias de salon Allumer l’écran pendant 3 secondes Quand je suis invité sur un salon Paramètres utilisateur @@ -789,7 +778,6 @@ La création du widget a échoué Créer des appels en téléconférence avec jitsi Voulez-vous vraiment supprimer le widget de ce salon ? - Impossible de créer le widget. Échec de l’envoi de la requête. Le rang doit être un entier positif. @@ -813,14 +801,11 @@ Prendre une vidéo Statistiques d’utilisation Utiliser la caméra de l’appareil - Rapport d’anomalie Attention ! L’appel en téléconférence est en cours de développement et peut ne pas être fiable. - Erreur de commande Commande non reconnue : %s - Désactivé Notification sonore Message chiffré @@ -855,7 +840,6 @@ Exemple Identifiant de communauté Exemple - Accueil Personnes Salons @@ -913,7 +897,6 @@ %d widgets actif %d widgets actifs - Avatar %d changement de statut @@ -960,9 +943,9 @@ Pour poursuivre, veuillez renseigner votre mot de passe : Désactiver le compte Licences tierces - Télécharger - Parler - Effacer + Télécharger + Parler + Effacer Redemander les clés de chiffrement à vos autres sessions. Demande de clé envoyée. Demande envoyée @@ -1083,7 +1066,7 @@ Utiliser la sonnerie par défaut de ${app_name} pour les appels entrants Sonnerie d’appel entrant Sélectionner la sonnerie pour les appels : - Accepter + Accepter Veuillez lire et accepter les politiques de ce serveur d’accueil : Résoudre les problèmes de notification Diagnostics de résolution de problème @@ -1156,7 +1139,7 @@ Sauvegarde de clé Utiliser la sauvegarde de clé La sauvegarde des clés n’est pas terminée, veuillez patienter… - Passer + Passer Terminé Paramètres de notification avancés Importance des notifications par évènement @@ -1253,8 +1236,8 @@ En êtes-vous sûr \? Sauvegarder Vous n’aurez plus accès à vos messages chiffrés, sauf si vous sauvegardez vos clés avant de vous déconnecter. - Rester - Annuler + Rester + Annuler Voulez-vous vraiment vous déconnecter ? Le mode d’économie de données utilise un filtre spécifique qui ignore les notifications de présence et de saisie. Récupération des messages chiffrés @@ -1300,7 +1283,7 @@ Traitement de la clé de récupération… Téléchargement des clés… Importation des clés… - Ignorer + Ignorer Se connecter avec l’authentification unique Cette URL est injoignable, veuillez la vérifier Votre appareil utilise une version obsolète du protocole de sécurité TLS, vulnérable aux attaques. Pour votre sécurité vous ne pourrez pas vous connecter @@ -1412,8 +1395,8 @@ Salons Vos salons seront affichés ici. Appuyez sur le « + » en bas à droite pour trouver ceux existant ou en créer de nouveaux. Réactions - D’accord - J’aime + D’accord + J’aime Ajouter une réaction Voir les réactions Réactions @@ -1493,8 +1476,8 @@ Filtrer par nom d’utilisateur ou identifiant… En train de rejoindre le salon… Voir l’historique des éditions - Examiner - Refuser + Examiner + Refuser Pour continuer, vous devez accepter les conditions de ce service. Conditions de service Examiner les conditions @@ -1502,8 +1485,8 @@ Utiliser des robots, passerelles, widgets et jeux d’autocollants Lu à Aucun - Révoquer - Déconnecter + Révoquer + Déconnecter Aucun serveur d’identité configuré. L’appel a échoué en raison d’un serveur mal configuré Demandez à l’administrateur de votre serveur d’accueil (%1$s) de configurer un serveur TURN afin que les appels fonctionnent de manière fiable. @@ -1937,15 +1920,6 @@ Nom d’utilisateur Outils de développement Données du compte - - %d vote - %d votes - - - %d vote − Résultats finaux - %d votes − Résultats finaux - - Option sélectionnée Crée un sondage simple Utiliser une phrase secrète ou une clé de récupération Si vous n’avez pas accès à une session existante @@ -2073,7 +2047,7 @@ \n${app_name} pour Bureau ${app_name} iOS \n${app_name} Android - ou un autre client Matrix qui prend en charge la signature croisée + ou un autre client Matrix qui prend en charge la signature croisée Utilisez la dernière version de ${app_name} sur vos autres appareils : Force la session de groupe sortante actuelle dans un salon chiffré à être abandonnée Seulement pris en charge dans les salons chiffrés @@ -2147,9 +2121,9 @@ Sinon, vous pouvez renseigner n’importe quelle autre URL de serveur d’identité Renseignez l’URL d’un serveur d’identité Valider - Lancer - Pause - Ignorer + Lancer + Pause + Ignorer Vous n’avez pas la permission de lancer une téléconférence dans ce salon Vous n\'avez pas la permission de lancer un appel dans ce salon Une téléconférence est déjà en cours ! @@ -2252,7 +2226,6 @@ Les messages ici sont chiffrés de bout en bout. \n \nVos messages sont sécurisés avec des verrous et seuls vous et le destinataire en possédez la clé unique pour les déverrouiller. - Boutons de robot Autocollants Ce serveur d\'accueil utilise une version obsolète. Demandez à l’administrateur de votre serveur d\'accueil de le mettre à jour. Vous pouvez continuer, mais certaines fonctionnalités peuvent ne pas fonctionner correctement. Entrez l’adresse du serveur que vous voulez utiliser @@ -2388,7 +2361,7 @@ Frontale Vous n’avez pas la permission de lancer un appel Vous n’avez pas la permission de lancer une téléconférence - Réinitialiser + Réinitialiser Échec de la révocation du bannissement de l’utilisateur Vérifiez vos paramètres pour activer les notifications push Stockez votre clé de sécurité en lieu sûr comme un gestionnaire de mots de passe ou un coffre-fort. @@ -2729,7 +2702,7 @@ Permettra de parcourir les salons de %s Inviter dans %s Partager le lien - Inviter par nom d’utilisateur + Inviter par nom d’utilisateur Inviter par e-mail Vous êtes seul pour l’instant. %s sera plus agréable avec de la compagnie. Invitez des personnes dans votre espace @@ -2968,7 +2941,7 @@ Terminer le réglage de la découverte. Vous n’utilisez actuellement pas de serveur d’identité. Pour inviter des proches et qu’ils puissent vous trouver, configurez-en un ci-dessous. Qui sont vos proches \? - Inviter par nom d’utilisateur ou courriel + Inviter par nom d’utilisateur ou courriel Assurez-vous que l’accès à la société %s est accordé aux bonnes personnes. Vous pourrez en inviter d’autres plus tard. Ajouter à l’espace mentionné Création de l’espace… @@ -3039,4 +3012,50 @@ Êtes vous d’accord d’envoyer ces informations \? Pour découvrir des contacts existants, il vous faut envoyer les informations de contact (adresses de courriel et numéros de téléphone) à votre serveur d’identité. Les données seront condensées avant l’envoi pour respecter la vie privée. Pas maintenant + Êtes-vous sûr de vouloir retirer ce sondage \? Vous ne pourrez plus le récupérer une fois supprimé. + Supprimer le sondage + Sondage terminé + Vote exprimé + Activer les sondages + Terminer le sondage + Cela empêchera les gens de voter et affichera le résultat final du sondage. + Terminer ce sondage \? + option gagnante + Terminer le sondage + + Résultat final sur la base de %1$d vote + Résultat final sur la base de %1$d votes + + + Aucun vote exprimé + %1$d votes exprimés. Votez pour voir les résultats + + + Sur la base de %1$d vote + Sur la base de %1$d votes + + + %1$d vote + %1$d votes + + Paramètres système + Versions + Obtenir de l’aide pour utiliser Element + Aide et support + Aide + Mentions légales + Ce serveur ne fournit aucune politique. + Bibliothèques tierces + La politique de votre serveur d’identité + La politique de votre serveur d’accueil + Politique de ${app_name} + Vous pouvez désactiver ceci à tout moment dans les paramètres + Nous ne partageons pas d’information avec des tierces parties + Nous n’enregistrons ou ne profilons aucune donnée du compte + ici + Aidez nous à identifier les problèmes et améliorer Element en envoyant des rapports d’usage anonymes. Pour comprendre de quelle manière les gens utilisent Element sur plusieurs appareils, nous créeront un identifiant aléatoire commun à tous vos appareils. +\n +\nVous pouvez lire toutes les conditions %s. + Aider à améliorer Element + Activer \ No newline at end of file diff --git a/vector/src/main/res/values-fy/strings.xml b/vector/src/main/res/values-fy/strings.xml index e2817c87d1..6c476689a8 100644 --- a/vector/src/main/res/values-fy/strings.xml +++ b/vector/src/main/res/values-fy/strings.xml @@ -32,28 +32,28 @@ Lisinsjes fan tredde partijen Lade… OK - Annulearje - Bewarje - Ferlitte - Bliuwe - Ferstjoere - Opnij ferstjoere - Fuortsmite - Sitearje - Downloade - Diele - Ynsprekke - Wiskje + Annulearje + Bewarje + Ferlitte + Bliuwe + Ferstjoere + Opnij ferstjoere + Fuortsmite + Sitearje + Downloade + Diele + Ynsprekke + Wiskje Letter - Trochstjoere + Trochstjoere Permalink Boarne werjaan Untskoattele boarne werjaan - Fuortsmite - Omneame + Fuortsmite + Omneame Gjin - Ynlûke - Ferbining ferbrekke + Ynlûke + Ferbining ferbrekke Ynhâld melde Aktive oprop Rinnend gearkomstpetear. @@ -70,15 +70,15 @@ Dochs belje Dochs ferstjoere of - Utnûgje + Utnûgje Offline - Akseptearje - Oerslaan + Akseptearje + Oerslaan Klear - Ofbrekke - Negearje - Beoardielje - Wegerje + Ofbrekke + Negearje + Beoardielje + Wegerje Ofslute Aksjes Ofmelde @@ -93,7 +93,7 @@ Iepenje Slute Nei klamboerd kopiearre - Utskeakelje + Utskeakelje Befêstiging Warskôging Flater @@ -295,9 +295,9 @@ Suggestje dwaan in keamer Nije chat - Ynsjen - Meidwaan - Fuortsmite + Ynsjen + Meidwaan + Fuortsmite Trochgean NEE JA @@ -548,8 +548,8 @@ Untwikkelersmodus Kontakt opnimme mei behearder Dit is ûnfoech - Skoftsje - Ofspylje + Skoftsje + Ofspylje Ferstjoere Jo brûke gjin identiteitsserver Unbekende flater @@ -859,11 +859,6 @@ Profylôfbylding Ferzje %s Ferzje - ÚTNÛGINGEN - LEGE PRIORITEIT - KEAMERS - FAVORITEN - MAP KEAMERS Gjin resultaten Download annulearje @@ -1064,8 +1059,8 @@ Missende tastimmingen Romten Mear ynfo - Opnij ynstelle - Slute + Opnij ynstelle + Slute Jo binne op dit stuit yn dit petear Jo aktuele pinkoade wizigje Aktuele taal @@ -1163,7 +1158,7 @@ %1$s hat de útnûging wegere. Reden: %2$s Inisjele syngronisaasje: \nKryptografy ymportearje - It apparaat fan de ôfstjoerder hat gjin kaaien foar dit berjocht stjoerd. + It apparaat fan de ôfstjoerder hat gjin kaaien foar dit berjocht stjoerd. %1$s fan %2$s nei %3$s %1$s hat it machtigingsnivo fan %2$s oanpast. Jo hawwe it machtigingsnivo fan %1$s oanpast. @@ -1278,7 +1273,7 @@ Gean nei net-lêzen Opskrift iepenje Ledelist - Ofwize + Ofwize Tagong jaan ta jo kontaktpersoanen. Om de QR-koade te scannen moatte jo tagong ta de kamera jaan. Sorry. De aksje is net tapast fanwegen ûntbrekkende rjochten @@ -1416,12 +1411,6 @@ %d keamers Katalogus trochblêdzje - Fier in petear(by)namme yn - In keamer yngean - De keamer yngean - Petear oanmeitsje - Petear starte - LID WURDE Sykjen yn fersifere keamers wurdt op dit stuit net stipe. BESTANNEN PERSOANEN diff --git a/vector/src/main/res/values-ga/strings.xml b/vector/src/main/res/values-ga/strings.xml index c5df827ee6..8638ebec5a 100644 --- a/vector/src/main/res/values-ga/strings.xml +++ b/vector/src/main/res/values-ga/strings.xml @@ -54,10 +54,10 @@ Ag sioncronú… - Diúltaigh - Réamhamharc - Téigh isteach - Bain + Diúltaigh + Réamhamharc + Téigh isteach + Bain Lean ar aghaidh NÍL @@ -101,7 +101,7 @@ Rabhadh Deimhniú Fill - Cuir as feidhm + Cuir as feidhm Neamhfoilsigh Athraigh Cuir @@ -113,42 +113,42 @@ Fág Diúltaigh Glac - Diúltaigh - Athbhreithnigh - Déan neamhaird de - Tobscoir + Diúltaigh + Athbhreithnigh + Déan neamhaird de + Tobscoir Críochnaithe - Léim - Glac + Léim + Glac As líne - Tabhair cuireadh + Tabhair cuireadh Fís Guth - Athshocraigh - Cuir uait - Cuir ar sos - Cuir ar siúl - Dícheangail - Cúlghair + Athshocraigh + Cuir uait + Cuir ar sos + Cuir ar siúl + Dícheangail + Cúlghair Níl aon cheann - Athainmnigh - Bain amach + Athainmnigh + Bain amach Nasc buan - Seol ar aghaidh + Seol ar aghaidh Níos deireanaí - Glan - Labhair - Roinn le - Íoslódáil - Luaigh - Bain - Athsheol - Seol - Fan - Fág - Sábháil - Cealaigh + Glan + Labhair + Roinn le + Íoslódáil + Luaigh + Bain + Athsheol + Seol + Fan + Fág + Sábháil + Cealaigh Ceart go leor Ag lódáil… Stairiúil diff --git a/vector/src/main/res/values-gl/strings.xml b/vector/src/main/res/values-gl/strings.xml index 4af9956161..087871dba9 100644 --- a/vector/src/main/res/values-gl/strings.xml +++ b/vector/src/main/res/values-gl/strings.xml @@ -42,7 +42,7 @@ %1$s envioulle un convite a %2$s para que entre na sala %1$s aceptou o convite para %2$s ** Imposíbel descifrar: %s ** - O dispositivo do que envía non enviou as chaves desta mensaxe. + O dispositivo do que envía non enviou as chaves desta mensaxe. Non se puido redactar Non foi posíbel enviar a mensaxe Erro da conexión @@ -277,23 +277,23 @@ Detalles da comunidade Cargando… Aceptar - Cancelar - Gardar - Saír - Enviar - Enviar de novo - Redactar - Citar - Compartir + Cancelar + Gardar + Saír + Enviar + Enviar de novo + Redactar + Citar + Compartir Despois Ligazón permanente Ver a fonte Ver a fonte descifrada - Borrar - Renomear + Borrar + Renomear Chamada en curso A escoita de eventos - Adiante + Adiante Informar sobre contido Conferencia en curso. \nÚnete con %1$s ou %2$s @@ -307,7 +307,7 @@ As chamadas de conferencia non están soportadas en salas cifradas Enviar igualmente ou - Convidar + Convidar Fóra de liña Saír Accións @@ -321,7 +321,7 @@ Abrir Pechar Copiado ao portaretallos - Desactivar + Desactivar Confirmación Aviso Inicio @@ -349,9 +349,9 @@ Sen salas públicas accesibles Enviar unha icona Licenzas de terceiras partes - Descargar - Falar - Limpar + Descargar + Falar + Limpar 1 usuaria %d usuarias @@ -443,8 +443,8 @@ Hoxe Chamar Continuar - Eliminar - Rexeitar + Eliminar + Rexeitar Ir á primeira mensaxe non lida. Deixar a sala Crear @@ -482,11 +482,6 @@ MENSAXES XENTE FICHEIROS - Convites - Iniciar conversa - Crear sala - Unirse á sala - Unirse á sala Buscando cartafol… Todas as mensaxes (alto) Todas as mensaxes @@ -751,8 +746,8 @@ Gardar nas descargas? SI NON - Unirse - Vista previa + Unirse + Vista previa Este convite enviouse a %s, que non está asociada a esta conta. \nPodes conectarte cunha conta diferente, ou engadir este email á túa conta. unha sala @@ -779,11 +774,6 @@ UNIUSE Cancelar a subida Cancelar a descarga - UNIRSE - DIRECTORIO - FAVORITOS - SALAS - BAIXA PRIORIDADE 1 sala %d salas @@ -832,14 +822,14 @@ Por defecto no sistema Debido á falta de permisos, esta acción non é posible. Iniciar Chat - Restablecer - Desbotar - Deter - Reproducir - Desconectar - Revogar + Restablecer + Desbotar + Deter + Reproducir + Desconectar + Revogar Nada - Permanecer + Permanecer Vas perder o acceso ás túas mensaxes cifradas a non ser que fagas unha copia de apoio das chaves antes de desconectar. Copiar Tes a certeza\? diff --git a/vector/src/main/res/values-hr/strings.xml b/vector/src/main/res/values-hr/strings.xml index ae1e86433d..9a2c71a522 100644 --- a/vector/src/main/res/values-hr/strings.xml +++ b/vector/src/main/res/values-hr/strings.xml @@ -32,28 +32,28 @@ Licence trećih strana Učitavanje… U redu - Odustani - Spremi - Napusti - Ostani - Pošalji - Pošalji ponovno - Ukloni - Citiraj - Preuzmi - Podijeli - Izgovori - Obriši + Odustani + Spremi + Napusti + Ostani + Pošalji + Pošalji ponovno + Ukloni + Citiraj + Preuzmi + Podijeli + Izgovori + Obriši Kasnije - Proslijedi + Proslijedi Stalna poveznica Vidi izvor Vidi dešifrirani izvor - Izbriši - Preimenuj + Izbriši + Preimenuj Nije podešeno - Opozovi - Odspoji se + Opozovi + Odspoji se Prijavi sadržaj Aktivni poziv Konferencijski poziv u tijeku. @@ -70,15 +70,15 @@ Svejedno zovi Svejedno pošalji ili - Pozovi + Pozovi Odspojen - Prihvati - Preskoči + Prihvati + Preskoči Dovršeno - Obustavi - Zanemari - Pregledaj - Odbij + Obustavi + Zanemari + Pregledaj + Odbij Izađi Radnje Odjavi se @@ -93,7 +93,7 @@ Otvori Zatvori Kopirano u spremnik - Onemogući + Onemogući Potvrda Upozorenje Greška @@ -315,10 +315,10 @@ DA NE Nastavi - Ukloni - Pridruži se - Pregledaj - Odbij + Ukloni + Pridruži se + Pregledaj + Odbij Nabroji članove Otvori zaglavlje Sinkroniziranje… @@ -454,17 +454,6 @@ PORUKE OSOBE DATOTEKE - PRIDRUŽILI SE - POPIS - OMILJENO - SOBE - NISKI PRIORITET - POZIVNICE - Započni ćaskanje - Izradi sobu - Pridruži se sobi - Pridruži se sobi - Unesite identitet ili alternativni naziv sobe Pregledaj popis %d soba @@ -934,8 +923,8 @@ Sobe Ovdje će biti prikazane Vaše sobe Reakcije - Složi se - Sviđa mi se + Složi se + Sviđa mi se Dodaj reakciju Pogledaj reakcije Reakcije diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index 3ed5e62486..043dc86fbf 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -39,7 +39,7 @@ %1$s meghívót küldött %2$s számára, hogy csatlakozzon a szobához %1$s elfogadta a meghívót ebbe: %2$s ** Visszafejtés sikertelen: %s ** - A küldő eszköze nem küldte el a kulcsokat ehhez az üzenethez. + A küldő eszköze nem küldte el a kulcsokat ehhez az üzenethez. Kitakarás sikertelen Üzenet küldése sikertelen Kép feltöltése sikertelen @@ -198,20 +198,20 @@ Beállítások Előzmények OK - Mégse - Mentés - Elhagyás - Küldés - Újraküldés - Törlés - Idézés - Megosztás + Mégse + Mentés + Elhagyás + Küldés + Újraküldés + Törlés + Idézés + Megosztás Később Állandó hivatkozás Forrás megtekintése Visszafejtett forrás megtekintése - Törlés - Átnevezés + Törlés + Átnevezés Tartalom Bejelentése Aktív hívás Folyamatban lévő konferenciahívás. @@ -226,7 +226,7 @@ A titkosított szobákban nem támogatott a konferenciahívás Küldés mindenképpen vagy - Meghívás + Meghívás Kijelentkezés Hanghívás Videohívás @@ -239,7 +239,7 @@ Vágólapra másolva Megerősítés Figyelmeztetés - Tiltás + Tiltás Kezdőképernyő Kedvencek Emberek @@ -405,14 +405,14 @@ IGEN NEM Folytatás - Eltávolítás - Csatlakozás - Előnézet - Elutasítás + Eltávolítás + Csatlakozás + Előnézet + Elutasítás Ugrás az olvasatlanra Meg lettél hívva, hogy csatlakozz ehhez a szobához %s által Tagok adatai - Továbbítás + Továbbítás Ez a meghívó erre a címre lett küldve: %s, ami nincs összekötve a felhasználóddal. \nHa gondolod jelentkezz be egy másik felhasználóval, vagy add hozzá ezt az e-mail címet a felhasználódhoz. "%s szobához próbálsz hozzáférni. Szeretnél csatlakozni, hogy részt tudj venni a beszélgetésben?" @@ -500,17 +500,6 @@ Vedd figyelembe, hogy az alkalmazás újraindul ami sok időt vehet igénybe."< ÜZENETEK EMBEREK FÁJLOK - BELÉPÉS - KÖNYVTÁR - KEDVENCEK - SZOBÁK - ALACSONY PRIORITÁSÚ - MEGHÍVÁSOK - Csevegés indítása - Szoba létrehozása - Csatlakozás szobához - Csatlakozás egy szobához - Írd be a szoba azonosítóját vagy nevét Könyvtár böngészése Könyvtár keresése… Kedvenc @@ -745,7 +734,6 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.Kisalkalmazás létrehozása sikertelen Hozz létre konferencia hívást a jitsi segítségével Biztos vagy benne hogy törölni akarod ezt a kisalkalmazást ebből a szobából? - Kisalkalmazás létrehozása sikertelen. Felkérés elküldése sikertelen. Az erősségi szintnek egy pozitív egész számnak kell lennie. @@ -771,14 +759,11 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.Videofelvétel Elemzés Beépített kamera használata - Hibajelentés Figyelmeztetés! A konferenciabeszélgetés fejlesztés alatt van, elképzelhető, hogy nem működik még megfelelően. - Utasítás hiba Ismeretlen utasítás: %s - Ki Hangos Titkosított üzenet @@ -811,7 +796,6 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.Példa Közösség azonosító példa - Szobák Emberek Nincsenek felhasználók @@ -876,7 +860,6 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.%d aktív kisalkalmazás %d aktív kisalkalmazás - Profilkép Címzett profilképe Észlelési profilkép @@ -918,9 +901,9 @@ Matrixban az üzenetek láthatósága hasonlít az e-mailre. Az üzenet törlés A folytatáshoz add meg a jelszavadat: Fiók felfüggesztése Harmadik felektől származó licencek - Letöltés - Beszéd - Törlés + Letöltés + Beszéd + Törlés Végpontok közötti titkosításhoz használt kulcsok újrakérése a többi munkamenetedtől. Kulcs újrakérve. Kérés elküldve @@ -1041,7 +1024,7 @@ Matrixban az üzenetek láthatósága hasonlít az e-mailre. Az üzenet törlés Az alapértelmezett ${app_name} csengőhang használata bejövő hívásokhoz Bejövő hívás csengőhangja Csengőhang kiválasztása a hívásokhoz: - Elfogadás + Elfogadás Nézd át és fogadd el a Matrix-kiszolgáló házirendjét: Értesítéshibák felderítése Hibakereső diagnosztika @@ -1112,7 +1095,7 @@ Bármi amit a ${app_name} el akar végezni amíg a háttérben fut, agresszívan Kulcsmentés Kulcsmentés használata A kulcsok biztonsági mentése még tart, kis türelmet… - Kihagyás + Kihagyás Kész Haladó Értesítés beállítások Értesítés fontosságának beállítása eseménynél @@ -1209,15 +1192,15 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törlik.Biztos vagy benne? Mentés Elveszted a hozzáférésedet a titkosított üzeneteidhez, ha nem mented el a titkosítási kulcsaidat kilépés előtt. - Maradás - Megszakítás + Maradás + Megszakítás Biztos, hogy ki akarsz lépni? Az adatkímélő mód kiszűri az állapotjelentéseket és a gépelés jelentést az adatfolyamból. Titkosított Üzenetek Visszaállítása Kérlek add meg a felhasználói nevedet. Kulcs Mentés használatának megkezdése (Haladó) - Kulcsok kimentése kézzel + Kulcsok exportálása kézzel Védd a mentésedet jelmondattal. A kulcsaid másolatait titkosítva a Matrix szervereden fogjuk tárolni. Védd jelszóval a mentést, a biztonság érdekében. \n @@ -1256,7 +1239,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Visszaállítási kulcs kiszámítása… Kulcsok letöltése… Kulcsok betöltése… - Figyelmen kívül hagyás + Figyelmen kívül hagyás Belépés egyszeri bejelelentkezéssel Ez az URL nem érhető el, ellenőrizd Az eszközöd elavult TLS biztonsági protokollt használ, amely támadható, a biztonságod érdekében nem csatlakozhatsz @@ -1366,8 +1349,8 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Szobák A szobáidat itt láthatod. Koppints a + -ra jobbra lent a meglévők kereséséhez vagy egy saját indításához. Reakciók - Egyetértek - Kedvelem + Egyetértek + Kedvelem Reakció hozzáadása Reakciók megjelenítése Reakciók @@ -1449,8 +1432,8 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Szűrés felhasználói névre vagy azonosítóra… Szobába belépés… Szerkesztési napló megtekintése - Átnézés - Elutasítás + Átnézés + Elutasítás A továbblépéshez el kell fogadnod a Felhasználási feltételeket. Felhasználási feltételek Feltételek átnézése @@ -1458,8 +1441,8 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Használj botokat, hidakat (bridges), kisalkalmazásokat és matrica csomagokat Olvasd itt Nincs - Visszavonás - Bontás + Visszavonás + Bontás Nincs beállítva azonosítási kiszolgáló. A hívás a hibásan beállított kiszolgáló miatt sikertelen Kérd meg a Matrix-kiszolgálód (%1$s) rendszergazdáját, hogy állítson be egy TURN-kiszolgálót, hogy a hívások megbízhatóan működjenek. @@ -1798,7 +1781,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró QR kód kép Ellenőrzés: %s Ellenőrizve: %s - Várakozás erre: %s… + Várakozás %s felhasználóra… A nagyobb biztonsághoz ellenőrizd ezt: %s az egyszeri kód összehasonlításával mindkét eszközön. \n \nA legnagyobb biztonság érdekében ezt tedd meg személyesen. @@ -1885,7 +1868,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró %1$s (%2$s) új munkamenetet használva jelentkezett be: Amíg a felhasználó nem jelöli megbízhatónak ezt a munkamenetet addig a munkamenetből küldött és a munkamenetbe érkező üzenetek figyelmeztetéssel lesznek ellátva. Vagy te is ellenőrizheted a munkamenetet. Eszközök közötti hitelesítés inicializálása - Visszaállítási Kulcsok + Kulcsok alaphelyzetbe állítása QR kód Majdnem kész! %s is ugyanazt a pipát mutatja\? Igen @@ -1894,15 +1877,6 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Felhasználónév Fejlesztői Eszközök Fiók Adatok - - %d szavazat - %d szavazat - - - %d szavazat – Végeredmény - %d szavazat – Végeredmény - - Kiválasztott Beállítások Egyszerű szavazás készítése Használd a visszaállítási eljárást Ha nem érsz el létező munkamenetet @@ -1988,7 +1962,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró %s elkészítette és beállította a szobát. Majdnem kész! A másik eszközöd is ugyanazt a pipát mutatja\? Majdnem kész! Várakozás a megerősítésre… - Várakozás erre: %s… + Várakozás %s felhasználóra… A kulcsok betöltése sikertelen Értesítések beállítása Az üzenetek „@room”-ot tartalmaznak @@ -2029,7 +2003,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - "vagy más eszközök közötti hitelesítést támogató Matrix-klienst" + "vagy más eszközök közötti hitelesítést támogató Matrix-klienst" Az ${app_name} legújabb kliensét használd a többi eszközödön: A jelenlegi csoport munkamenet törlését kikényszeríti a titkosított szobában Csak a titkosított szobákban támogatott @@ -2104,7 +2078,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró %1$s használata Vagy beírhatsz más azonosítási szerver URL-t Add meg az azonosítási szerver URL-jét - Szünet + Szünet Másolás Siker Értesítések @@ -2137,8 +2111,8 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Új Biztonsági Kulcs generálása, vagy a jelenlegi mentésedhez új Biztonsági Jelmondat megadása. A jelenlegi Kulcsod vagy Jelmondatod ki lesz cserélve erre. Az integrációk ki vannak kapcsolva - Lejátszás - Eltüntetés + Lejátszás + Eltüntetés Nincs engedélyed konferenciahívást indítani ebben a szobában Már folyamatban van egy konferencia! Videomegbeszélés indítása @@ -2333,7 +2307,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Fogadás Nincsen jogosultságod konferenciahívás indításához Csevegés indítása - Visszaállítás + Visszaállítás Engedélyezd a névjegyek elérését. Ez a telefonszám már meg van adva. Kulcs megosztási kérések naplójának küldése @@ -2483,7 +2457,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Figyelmeztetés szerver oldali támogatás és kísérleti szoba verzió szükséges Kísérleti Tér - Korlátozott szobák. Meghívtak - Szobák és emberek csoportosításának új lehetősége a Terek használata. + A Terek használata egy új lehetőség a szobák és felhasználók csoportosítására. Üdv a Terekben! Szobák hozzáadása Létező szobák és tér hozzáadása @@ -2511,7 +2485,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Felfedezhetik ezt: %s Meghívó ide: %s Megosztás hivatkozás - Meghívás felhasználónévvel + Meghívás felhasználónévvel Meghívás e-maillel Egyelőre csak te vagy itt, %s még jobb lehet másokkal együtt. Meghívó ide: %s @@ -2526,12 +2500,12 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Készítünk szobákat számukra. Később még adhatsz hozzájuk. Milyen beszélgetéseket szeretnél itt: %s\? A folytatáshoz adj neki nevet. - Adj hozzá információkat amik segítenek az embereknek beazonosítani. Bármikor megváltoztathatod. + Adj hozzá információkat amik segítenek felismerni ezt a teret. Bármikor megváltoztathatod. Adj hozzá pár információt, hogy tűnjön ki. Bármikor megváltoztathatod. Tér készítése Csak meghívóval, saját célra és csoportoknak ideális Privát - Nyílt tér mindenkinek, a legjobb a közösségeknek + Mindenki számára szabadon hozzáférhető, a közösségeknek ajánlott Nyilvános Privát tér neked és a csoporttársaidnak Én és a csoporttársaim @@ -2543,7 +2517,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Létező térbe való belépéshez meghívó szükséges. Ezt később meg lehet változtatni Milyen típusú teret szeretnél készíteni\? - Szobák és emberek csoportosításának új lehetősége a Terek használata + A Terek használata egy új lehetőség a szobák és felhasználók csoportosítására Privát tér Nyilvános tér Tér hozzáadása @@ -2643,7 +2617,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Jelenlegi PIN kód megváltoztatása PIN megváltoztatása ${app_name} megnyitásához mindig PIN kód szükséges. - Ha nem használsz ilyent: ${app_name} akkor 2 perc elteltével PIN kód megadása szükséges. + Ha 2 percnél hosszabb ideig nem használod az ${app_name} Element alkalmazást, PIN kódot fog kérni. 2 perc elteltével PIN szükséges Eszköz specifikus biometrikus azonosítás engedélyezése, mint ujjlenyomat vagy arcfelismerés. @@ -2692,7 +2666,6 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró \nAz üzeneteidet zárolással vannak biztosítva és csak neked és a címzetteknek van meg a kulcs hozzá. Itt az üzenetek nincsenek végponttól végpontig titkosítva. Azonosítás eredménye - Bot Gomb Szavazás Szoba létrehozása… Néhány karakter nem engedélyezett @@ -2707,7 +2680,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Folytatás ezzel: %s Vagy Állíts be címet ehhez a szobához, hogy a felhasználók a matrix szervereden megtalálhassák (%1$s) - Meghívásossá tetted. + Meghívásossá tetted ezt a beszélgetést. %1$s meghívásossá tette. Szoba beállításai Alacsony prioritásúak közül kivesz @@ -2730,7 +2703,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Videó tömörítése (%d%%) Kép tömörítése… Teljes tartalom megmutatása titkosított szobákban - Visszajelzés adása + Visszajelzés küldése A visszajelzésed nem sikerült elküldeni (%s) Köszönjük, a visszajelzésed sikeresen elküldésre került Ha további kérdés merülne fel, kapcsolatba léphetnek velem @@ -2922,7 +2895,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Videóhívás elutasítva Hanghívás elutasítva Videóhívás befejeződött • %1$s - Videóhívás befejeződött • %1$s + Hívás befejeződött • %1$s Videó hívás folyamatban Hanghívás folyamatban Bejövő videó hívás @@ -2964,7 +2937,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró E-mail alapú meghívás, kapcsolatok megtalálása és sok más… Felderíthetőségi beállítás befejezése. Jelenleg nem használsz azonosítási szolgáltatást. Ahhoz, hogy a csoporttársaidat meghívd vagy megtaláljanak állíts be egyet alább. - Meghívás felhasználói névvel vagy e-mail címmel + Meghívás felhasználói névvel vagy e-mail címmel Ellenőrizd, hogy a megfelelő személyeknek van hozzáférése ehhez a céghez: %s. Később meghívhatsz másokat is. Kik a csoporttársaid\? A megadott térhez adás @@ -3037,4 +3010,50 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró A meglévő kapcsolatok felderítéséhez információkat (e-mail cím és telefonszám) kell elküldeni az azonosítási szolgáltatónak. Az adatok az adatvédelem miatt hashelve lesznek elküldve. Beleegyezel az információk elküldésébe\? Nem most + Engedélyezés + Biztosan törlöd ezt a szavazást\? Ezt a műveletet később nem lehet visszavonni. + Szavazás törlése + Szavazás lezárva + Szavazat leadva + Szavazások bekapcsolása + Szavazás lezárása + Ez megszünteti az új szavazatok leadásának lehetőségét, és kijelzi a végleges eredményt. + Lezárod a szavazást\? + Szavazás lezárása + + Eredmény %1$d szavazat alapján + Eredmény %1$d szavazat alapján + + + Nem szavazott senki + %1$d leadott szavazat. Szavazz az eredmények megtekintéséhez + + + %1$d szavazat alapján + %1$d szavazat alapján + + + %1$d szavazat + %1$d szavazat + + Rendszerbeállítások + Verziók + Segítség az Element használatában + Segítség és támogatás + Segítség + Ez a szerver nem adott meg szabályzatot. + Harmadik féltől származó programkönyvtárak + Az azonosítási szervered szabályzata + A Matrix szervered szabályzata + ${app_name} szabályzat + Később akármikor kikapcsolhatod a beállításokban + Nem osztjuk meg az információt harmadik féllel + Nem küldünk és nem profilozunk semmilyen fiók adatot + itt + Segíts észrevennünk a hibákat, és jobbá tenni az Element-et a névtelen használati adatok küldése által. Ahhoz, hogy megértsük, hogyan használnak a felhasználók egyszerre több eszközt, egy véletlenszerű azonosítót generálunk, ami az eszközeid között meg lesz osztva. +\n +\nElolvashatod a feltételeinket %s. + Segíts az Element-et jobbá tenni + nyerő válasz + Jogi dolgok \ No newline at end of file diff --git a/vector/src/main/res/values-in/strings.xml b/vector/src/main/res/values-in/strings.xml index b0a8d4f07c..385e5dcc9e 100644 --- a/vector/src/main/res/values-in/strings.xml +++ b/vector/src/main/res/values-in/strings.xml @@ -12,18 +12,18 @@ Pengaturan Detail Anggota OK - Batal - Simpan - Tinggalkan - Kirim - Kutip - Bagikan - Hapus - Ubah Nama + Batal + Simpan + Tinggalkan + Kirim + Kutip + Bagikan + Hapus + Ubah Nama Laporkan Konten Informasi Perangkat atau - Undang + Undang Panggilan Suara Panggilan Video Balasan Cepat @@ -31,7 +31,7 @@ Konfirmasi Buka Tutup - Nonaktifkan + Nonaktifkan Favorit Cari ruang Cari favorit @@ -66,8 +66,8 @@ Nomor Telpon (piihan) Ulangi kata sandi Konfirmasi kata sandi baru - Kirim Ulang - Teruskan + Kirim Ulang + Teruskan Tampilkan Sumber Buat Tautan Tampilkan Sumber Terdekripsi @@ -129,10 +129,10 @@ YA TIDAK Lanjut - Hapus - Gabung - Pratinjau - Tolak + Hapus + Gabung + Pratinjau + Tolak Nanti Kirim Saja ${app_name} belum diizinkan untuk mengakses kontak lokal @@ -152,7 +152,7 @@ perangkat tidak diketahui Terverifikasi Jejak Percakapan - Hapus + Hapus Panggilan massal sedang berlangsung. \nBergabung sebagai %1$s atau %2$s suara @@ -245,9 +245,9 @@ Kirimkan Sticker Lisensi Pihak Ketiga Memuat… - Unduh - Bicaralah - Bersihkan + Unduh + Bicaralah + Bersihkan Ini tidak dapat dilakukan karena belum mendapat permisi. Keluar Tindakan @@ -290,7 +290,7 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan Daftar Anggota Buka kop Menyinkronkan… - Arahkan ke yang belum terbaca + Arahkan ke pesan yang belum dibaca Anda telah diundang untuk bergabung ke ruang ini oleh %s Undangan ini dikirim oleh %s, yang tidak terhubung dengan akun ini. \nAnda mungkin ingin masuk dengan akun lain, atau tambahkan email ini ke akun Anda. @@ -413,17 +413,6 @@ Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yan PESAN ORANG BERKAS - GABUNG - DIREKTORI - FAVORIT - RUANG - PRIORITAS RENDAH - UNDANGAN - Mulai percakapan - Buat ruang - Gabung ke ruang - Gabung ke ruang - Ketik id atau alias ruang Jelajahi direktori %d ruangan @@ -617,10 +606,10 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Semua ruang bawaan %s Ketik di sini… - %d pesan pemberitahuan yang belum terbaca + %d pesan pemberitahuan yang belum dibaca - %d pesan pemberitahuan yang belum terbaca + %d pesan pemberitahuan yang belum dibaca Prioritas rendah Tidak Ada @@ -714,7 +703,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Negara Nomor Telepon Tampilan halaman awal Semat ruang yang pemberitahuannya terlewatkan - Semat ruang yang pesannya belum terbaca + Pin ruangan dengan pesan yang belum dibaca Perangkat Pratinjau URL dalam obrolan Tampilkan waktu kirim untuk seluruh pesan @@ -793,7 +782,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Avatar penerima Demosi pengguna dengan id berikut Tetap Panggil - Terima + Terima Error Mohon telaah dan terima kebijakan homeserver ini: Panggilan @@ -873,9 +862,9 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Yakin\? Cadangkan Akses ke pesan terenkripsi akan hilang apabila Anda tidak mencadangkan kunci sebelum mencopot akun. - Lewatkan + Lewatkan Selesai - Hentikan + Hentikan Anda yakin ingin mencopot akun\? Pengaturan Pemberitahuan Lanjutan Urgensi pemberitahuan lewat kejadian @@ -1122,13 +1111,13 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Ganti Tambah Salin - Tandai sebagai terbaca + Tandai sebagai dibaca Tutup Telepon Tolak Terima - Tolak - Tinjauan - Abaikan + Tolak + Tinjauan + Abaikan Gagal menghapus widget Gagal menambahkan widget Anda tidak dapat melakukan panggilan dengan diri sendiri, tunggu untuk peserta untuk menerima undangan @@ -1146,14 +1135,14 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Untuk melakukan tindakan ini, silakan berikan izin Kamera dari pengaturan sistem. Beberapa izin hilang untuk melakukan tindakan ini, mohon berikan izin dari pengaturan sistem. Mulai Mengobrol - Atur Ulang - Hilangkan - Jeda - Mainkan - Putuskan - Batalkan + Atur Ulang + Hilangkan + Jeda + Mainkan + Putuskan + Batalkan Tidak Ada - Tetap + Tetap Verifikasi sesi Inisialisasi layanan Standar Sistem @@ -1273,7 +1262,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Tidak dapat mengunggah gambar Tidak dapat dihapus Tidak dapat mengirim pesan - Perangkat pengirim belum mengirimi kami kunci untuk pesan ini. + Perangkat pengirim belum mengirimi kami kunci untuk pesan ini. ** Tidak dapat mendekripsi: %s ** %1$s dari %2$s ke %3$s Anda mengubah tingkat daya %1$s. @@ -1393,7 +1382,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Widget aktif LIHAT %1$s: %2$s - ** Gagal mengirim - mohon buka ruangan + ** Gagal mengirim — mohon buka ruangan Saya Undangan Baru Pesan Baru @@ -1626,7 +1615,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Ini adalah percakapan Anda. Miliki percakapan Anda. Jaga percakapan tetap pribadi dengan enkripsi Chat dengan orang-orang secara langsung atau dalam grup - Pesan belum terbaca + Pesan yang belum dibaca Anda membuatnya khusus undangan. %1$s membuatnya khusus undangan. Anda membuat akses ruangan khusus undangan. @@ -2029,8 +2018,8 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Reaksi Tampilkan Reaksi Tambah Reaksi - Suka - Setuju + Suka + Setuju Reaksi Ruangan Anda akan ditampilkan di sini. Ketuk tombol + untuk memulai yang baru. Ruangan @@ -2173,7 +2162,6 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Menunggu… Kesimpulan Verifikasi Bereaksi dengan: %s - Tombol Bot Poll Stiker File @@ -2323,8 +2311,8 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Bantu orang-orang di space untuk menemukan dan bergabung ruangan privat sendiri, tidak perlu mengundang semua secara manual. Baru: Izinkan orang-orang di space untuk menemukan dan bergabung ruangan privat Dicatat bahwa meningkatkan akan membuat versi baru dari ruangannya. Semua pesan saat ini akan tetap di ruangan yang diarsip. - Siapa saja di induk ruangan dapat menemukan dan bergabung ke ruangan ini - tidak perlu mengundang semua secara manual. Anda dapat mengubahnya di pengaturan ruangan kapan saja. - Siapa saja di %s dapat menemukan dan bergabung ke ruangan ini - tidak perlu mengundang semua secara manual. Anda dapat mengubahnya di pengaturan ruangan kapan saja. + Siapa saja di induk ruangan dapat menemukan dan bergabung ke ruangan ini — tidak perlu mengundang semua secara manual. Anda dapat mengubahnya di pengaturan ruangan kapan saja. + Siapa saja di %s dapat menemukan dan bergabung ke ruangan ini — tidak perlu mengundang semua secara manual. Anda dapat mengubahnya di pengaturan ruangan kapan saja. Pesan Suara (%1$s) Tidak dapat membalas atau mengedit saat pesan suara aktif Tidak dapat merekam sebuah pesan suara @@ -2422,8 +2410,8 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Mereka akan dapat menjelajahi %s Undang ke %s Bagikan tautan - Undang dari nama pengguna atau email - Undang dari nama pengguna + Undang dari nama pengguna atau email + Undang dari nama pengguna Undang dari email Hanya Anda saja saat ini. %s akan lebih baik dengan orang lain. Undang ke %s @@ -2641,7 +2629,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Tautan ini %1$s akan membawa Anda ke situs lain: %2$s. \n \nApakah Anda yakin untuk melanjutkan\? - Space Eksperimental - Ruangan yang Dibatasi. + Space Eksperimental — Ruangan yang Dibatasi. Tambahkan sebuah space ke space apa saja yang Anda bisa kelola. Beri nama untuk melanjutkan. Gagal untuk memvalidasi PIN, mohon ketuk yang baru. @@ -2684,7 +2672,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Memaksa sesi kelompok outbound saat ini di ruang terenkripsi untuk dihapus Gunakan ${app_name} di perangkat Anda yang lain: Gunakan ${app_name} di perangkat Anda yang lain, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} untuk Android, atau client Matrix lainnya yang mendukung tanda tangan silang - atau client Matrix lainnya yang mendukung tanda tangan silang + atau client Matrix lainnya yang mendukung tanda tangan silang ${app_name} iOS \n${app_name} Android ${app_name} Web @@ -2888,13 +2876,6 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Sign In Baru Gunakan Frasa Sandi Pemulihan atau Kunci Membuat poll sederhana - Opsi yang Dipilih - - %d suara - Hasil akhir - - - %d suara - Hapus data akun dengan tipe %1$s\? \n \nHati-hati menggunakannya, ini dapat menyebabkan perilaku yang tidak terduga. @@ -2979,4 +2960,46 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Apakah Anda setuju untuk mengirimkan info ini\? Untuk menemukan kontak yang sudah ada, Anda harus mengirim info kontak (email dan nomor telepon) ke server identitas Anda. Kami meng-hash data Anda sebelum mengirim untuk privasi. Nanti + Apakah Anda yakin untuk menghapus poll ini\? Anda tidak akan dapat memulihkannya setelah dihapus. + Hapus poll + Poll berakhir + Suara diberikan + Aktifkan Poll + Akhiri poll + Ini akan menghentikan orang-orang untuk dapat memberikan suara dan akan menampilkan hasil akhir poll. + Akhiri poll ini\? + opsi pemenang + Akhiri poll + + Hasil akhir berdasarkan oleh %1$d suara + + + %1$d suara diberikan. Berikan suara untuk melihat hasilnya + + + Berdasarkan oleh %1$d suara + + + %1$d suara + + Pengaturan sistem + Versi + Dapatkan bantuan dalam menggunakan Element + Bantuan dan dukungan + Bantuan + Hukum + Server ini tidak memiliki sebuah kebijakan. + Perpustakaan pihak ketiga + Kebijakan server identitas Anda + Kebijakan homeserver Anda + Kebijakan ${app_name} + Anda dapat mematikannya kapan saja di pengaturan + Kami tidak membagikan informasi ini dengan pihak ketiga + Kami tidak merekam atau memprofil data akun apapun + di sini + Bantu kami mengidentifikasi masalah-masalah dan membuat Element lebih baik dengan membagikan data penggunaan anonim. Untuk memahami bagaimana orang-orang menggunakan beberapa perangkat-perangkat, kami akan membuat pengenal acak, yang dibagikan oleh perangkat Anda. +\n +\nAnda dapat membaca semua kebijakan kami %s. + Bantu buat Element lebih baik + Aktifkan \ No newline at end of file diff --git a/vector/src/main/res/values-is/strings.xml b/vector/src/main/res/values-is/strings.xml index 6512cc3b7d..c1a97bb605 100644 --- a/vector/src/main/res/values-is/strings.xml +++ b/vector/src/main/res/values-is/strings.xml @@ -46,7 +46,7 @@ %1$s uppfærði notandasniðið sitt %2$s %1$s sendi boð til %2$s um þátttöku í spjallrásinni %1$s samþykkti boð um að taka þátt í %2$s - Tæki sendandans hefur ekki sent okkur dulritunarlyklana fyrir þessi skilaboð. + Tæki sendandans hefur ekki sent okkur dulritunarlyklana fyrir þessi skilaboð. Gat ekki ritstýrt Ekki er í augnablikinu hægt að taka aftur þátt í spjallrás sem er tóm. Boð á spjallrás @@ -73,24 +73,24 @@ Nánar um samfélag Hleð inn… Í lagi - Hætta við - Vista - Fara út - Senda - Endursenda - Ritstýra - Tilvitnun - Deila + Hætta við + Vista + Fara út + Senda + Endursenda + Ritstýra + Tilvitnun + Deila Seinna - Áframsenda + Áframsenda Varanlegur tengill Skoða frumkóða - Eyða - Endurnefna + Eyða + Endurnefna Upplýsingar um tæki Senda samt eða - Bjóða + Bjóða Ónettengt Fara út Aðgerðir @@ -103,7 +103,7 @@ Opna Loka Afritað á klippispjald - Gera óvirkt + Gera óvirkt Staðfesting Aðvörun Heim @@ -199,10 +199,10 @@ NEI Halda áfram - Fjarlægja - Taka þátt - Forskoðun - Hafna + Fjarlægja + Taka þátt + Forskoðun + Hafna Listi yfir meðlimi Opna haus Samstilli… @@ -259,16 +259,6 @@ SKILABOÐ FÓLK SKRÁR - TAKA ÞÁTT - MAPPA - EFTIRLÆTI - SPJALLRÁSIR - LÍTILL FORGANGUR - BOÐSGESTIR - Hefja spjall - Búa til spjallrás - Taka þátt í spjallrás - Taka þátt í spjallrás Vafra í möppu %d spjallrás @@ -402,22 +392,18 @@ %d virkur viðmótshluti %d virkir viðmótshlutar - Þú ert ekki á þessari spjallrás. Þú hefur ekki réttindi til þess að gera þetta á þessari spjallrás. Spjallrásin %s er ekki sýnileg. Aðvörun! Skipanavilla Óþekkt skipun: %s - Slökkt Hávært Dulrituð skilaboð - Búa til Dæmi dæmi - Heim Fólk Spjallrásir @@ -465,7 +451,6 @@ samtali svarað annars staðar Boð um samtal Nota innbyggða myndavél - Búa til samfélag Heiti samfélags Auðkenni samfélags @@ -502,7 +487,6 @@ Hefja sannvottun Deila án sannvottunar Hunsa beiðni - Þér hefur verið sparkað úr %1$s af %2$s Þú hefur verið settur í bann á %1$s af %2$s Tilraunir @@ -626,7 +610,6 @@ Bjóða miðað við auðkenni TENGILIÐIR Á TÆKI (%d) Bjóða notendum miðað við auðkenni - Settu inn auðkenni eða samheiti spjallrásar %1$s spjallrás fannst fyrir %2$s %1$s spjallrásir fundust fyrir %2$s @@ -681,7 +664,6 @@ Þú bættir við nýju tæki \'%s\', sem er að krefjast dulritunarlykla. ósannvottaða tækið þitt \'%s\' er að krefjast dulritunarlykla. Símafundir eru í þróun og gætu verið óáreiðanlegir. - Kerfisstjóri samfélagsins hefur ekki gefið upp ítarlega lýsingu fyrir þetta samfélag. Skrifaðu heimanetþjón til að telja upp opinberar spjallrásir á Vantar spjallrásarauðkenni í beiðni. diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 72dbd52011..43bdfe5f55 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -39,7 +39,7 @@ %1$s ha mandato un invito a %2$s per entrare alla stanza %1$s ha accettato l\'invito a %2$s ** Impossibile decriptare: %s ** - Il dispositivo del mittente non ha inviato le chiavi per questo messaggio. + Il dispositivo del mittente non ha inviato le chiavi per questo messaggio. Impossibile riscrivere Impossibile inviare il messaggio Invio dell\'immagine fallito @@ -49,7 +49,6 @@ Indirizzo email Numero di telefono %1$s ha inviato uno sticker. - Invito da %s Invito nella stanza %1$s e %2$s @@ -264,29 +263,27 @@ Hai terminato la videoconferenza Videoconferenza terminata da %1$s Videoconferenza iniziata da %1$s - Messaggi Stanza Impostazioni Dettagli sui membri Cronologia - OK - Annulla - Salva - Esci - Invia - Rispedisci - Rimuovi - Cita - Condividi + Annulla + Salva + Esci + Invia + Rispedisci + Rimuovi + Cita + Condividi Ultimi - Inoltra + Inoltra URL Link Vedi il codice sorgente Vedi il codice sorgente decifrato - Elimina - Rinomina + Elimina + Rinomina Segnala contenuto Chiamata in corso Avvio conferenza. @@ -301,9 +298,8 @@ Le stanze criptate non supportano le conferenze Invia comunque o - Invita + Invita Disconnesso - Disconnetti Chiamata audio Chiamata video @@ -314,24 +310,19 @@ Apri Chiudi Copiato negli appunti - Disabilita - + Disabilita Conferma Attenzione - Home Preferiti Chat dirette Stanze - Cerca Cerca tra i preferiti Cerca tra le chat dirette Cerca tra le stanze - Inviti Bassa priorità - Conversazioni Rubrica locale Elenco utenti @@ -339,7 +330,6 @@ Nessuna conversazione ${app_name} non ha avuto l\'autorizzazione ad accedere alla tua Rubrica locale Nessun risultato - Stanze Elenco stanze Nessuna stanza @@ -378,7 +368,6 @@ Accetta Rifiuta Riaggancia - Accedi Crea account Invia @@ -426,7 +415,6 @@ La tua password è stata reimpostata. \n \nSei stato disconnesso da tutte le sessioni e non riceverai più alcuna notifica. Per ripristinare le notifiche, riconnettiti su ciascun dispositivo. - L\'URL deve iniziare con http[s]:// Impossibile accedere: errore di rete Impossibile accedere @@ -441,28 +429,20 @@ Sono state inviate troppe richieste Questo nome utente è già in uso Il link nella mail non è ancora stato cliccato - - Elenco ricevute lette - - Invia come Originario Grande Medio Piccolo - "Annullare il download? Annullare l\'upload? %d s %1$dm %2$ds - Ieri Oggi - Nome stanza Argomento stanza - Chiamata in corso Chiamata in connessione… Chiamata terminata @@ -475,10 +455,8 @@ La connessione al supporto multimediale è fallita Impossibile avviare la fotocamera chiamata risposta altrove - Fai una foto o un video Impossibile registrare video - Informazione ${app_name} deve essere autorizzato ad accedere alla tua Galleria di foto e video per poter inviare e salvare allegati. \n @@ -499,31 +477,25 @@ \n \nTi sta bene comunicare i dati di tutti i tuoi contatti per questo scopo\? Purtroppo l\'azione non è stata eseguita a causa di autorizzazioni mancanti - Salvato Salvare nei download? NO Continua - - Rimuovi - Entra - Anteprima - Rifiuta - + Rimuovi + Entra + Anteprima + Rifiuta Vai ai non letti - Sei stato invitato da %s a entrare in questa stanza Questo invito è stato spedito a %s, che non è associato a questo account. \nPuoi aggiungere questa email al tuo account o provare ad accedere con un account differente. Stai provando ad accedere a %s. Vuoi entrare e partecipare alla discussione\? una stanza Questa è l\'anteprima della stanza. Le interazioni sono disabilitate. - Nuova chat Aggiungi utente 1 utente - Esci dalla stanza Sei sicuro di voler uscire dalla stanza? Sei sicuro di voler rimuovere %s da questa chat? @@ -551,7 +523,6 @@ La nomina non potrà essere annullata perché darai a questo utente i tuoi stessi poteri. \nSicuro di voler procedere\? Sicuro di voler invitare %s\? - Invita tramite ID utente CONTATTI LOCALI (%d) ELENCO UTENTI (%s) @@ -559,7 +530,6 @@ Invita tramite ID utente Per favore inserisci uno o più indirizzi email o ID utente Email o ID utente - Cerca %s sta scrivendo… %1$s & %2$s stanno scrivendo… @@ -575,7 +545,6 @@ Elimina i messaggi non inviati File non trovato Non hai il permesso di pubblicare in questa stanza. - Fidati Non fidarti Disconnetti @@ -587,7 +556,6 @@ Il certificato è diverso da quello precedentemente contrassegnato sul tuo telefono come \"affidabile\". Questa cosa è MOLTO INSOLITA. Si raccomanda di NON ACCETTARE questo nuovo certificato. Il certificato del server è cambiato: quello precedente era stato contrassegnato come affidabile ma quello attuale no. Può darsi che il certificato precedente sia scaduto e sia stato semplicemente sostituito con uno nuovo. Contatta l\'amministratore del server per verificare l\'impronta digitale in uso. Contrassegna il certificato come affidabile solo se l\'mpronta digitale comunicata dall\'amministratore del server corrisponde a quella qua sopra. - Dettagli stanza Utenti File @@ -595,14 +563,12 @@ ID malformato. Dovrebbe essere un indirizzo email o un ID utente Matrix come \'@localpart:domain\' INVITATI MEMBRI - Motivo per cui segnali questo contenuto Desideri nascondere tutti i messaggi di questo utente\? \n \nTieni presente che questa azione riavvierà l\'app e ciò potrebbe richiedere molto tempo. Annulla l\'Upload Annulla il Download - Cerca Cerca tra i membri della stanza Nessun risultato @@ -610,28 +576,13 @@ MESSAGGI UTENTI FILE - - ENTRA - ELENCO - PREFERITI - STANZE - BASSA PRIORITÀ - INVITI - Avvia chat - Crea stanza - Entra nella stanza - Entra in una stanza - Digita l\'ID stanza o il suo nome - Esplora l\'elenco Ricerca negli elenchi… - Preferito Bassa priorità Chat diretta Esci dalla conversazione Dimentica - Messaggi Impostazioni Versione @@ -639,7 +590,6 @@ Avvisi di terze parti Copyright Politica sulla privacy - Immagine del profilo Nome visualizzato Email @@ -729,42 +679,33 @@ Inserisci un codice di attivazione Errore durante la verifica del numero di telefono Codice - 3 giorni 1 settimana 1 mese Per sempre - - Icona della stanza Nome della stanza Argomento Etichetta dela stanza Etichetta come: - Preferito Bassa priorità Nessuna etichetta - Accesso e visibilità Mostra questa stanza nell\'elenco delle stanze pubbliche Accesso alla stanza Accesso alla Timeline Chi può leggere la Timeline\? Chi può entrare in questa stanza? - Chiunque Solo i membri (dal momento in cui questa opzione è stata selezionata) Solo i membri (dal momento in cui vengono invitati) Solo i membri (dal momento in cui entrano nella stanza) - Una stanza deve avere un indirizzo per poter essere linkata. Solo le persone che sono state invitate Chiunque conosca il link della stanza, eccetto gli ospiti Chiunque conosca il link della stanza, compresi gli ospiti - Utenti bannati - Avanzate ID interno della stanza Indirizzi @@ -775,7 +716,6 @@ Per abilitare la crittografia devi disconnetterti. Cripta solo per le sessioni verificate Da questa sessione non inviare mai messaggi cifrati alle sessioni non verificate presenti in questa stanza. - Questa stanza non ha indirizzi locali Nuovo indirizzo stanza (es. #foo:matrix.org) Il formato del nome della stanza non è corretto @@ -790,12 +730,9 @@ La Crittografia in questa stanza non è attiva. Attiva crittografia \n(attenzione: non potrà più essere disattivata!) - Elenco Tema - %s stava cercando di caricare un punto specifico nella cronologia di questa stanza ma non è stato in grado di trovarlo. - Informazioni sulla crittografia E2E Informazioni sull\'evento ID utente @@ -839,23 +776,19 @@ Conferma confrontando la seguente con le impostazioni utente della tua altra sessione: Se non corrispondono, la sicurezza delle tue comunicazioni potrebbe essere compromessa. Ho verificato che le chiavi corrispondono - La stanza contiene sessioni sconosciute Questa stanza contiene sessioni sconosciute che non sono state verificate. \nNon v\'è alcuna garanzia che le sessioni appartengano agli utenti dichiarati. \nTi consigliamo di verificare ogni sessione prima di continuare, ma se lo preferisci, è comunque possibile inviare il messaggio anche senza la verifica. \n \nSessioni sconosciute: - Scegli un elenco di stanze Il server potrebbe essere non disponibile o sovraccarico Inserisci un Home Server per vedere le sue stanze pubbliche Nome del server Tutte le stanze sull\'Home Server %s Tutte le stanze native %s - Cerca tra i messaggi passati - Dimensione font Minuscolo Piccolo @@ -873,7 +806,6 @@ Devi avere il permesso per poter gestire i widget in questa stanza Avvia una conferenza usando Jitsi Vuoi davvero eliminare questo widget dalla stanza\? - Impossibile creare il widget. L\'invio della richiesta è fallito. Non sei in questa stanza. @@ -959,22 +891,17 @@ %d widget attivo %d widget attivi - La stanza %s non è visibile. Usa la fotocamera di sistema - Hai aggiunto una nuova sessione \'%s\' che sta richiedendo le chiavi crittografiche. La tua sessione non verificata \'%s\' sta chiedendo le chiavi crittografiche. Avvia la verifica Condividi senza verificare Ignora la richiesta - Attenzione! Le conferenze sono in fase di sviluppo e potrebbero non essere affidabili. - Errore di comando Comando non riconosciuto: %s - Spento Rumoroso Crea @@ -983,7 +910,6 @@ Esempio ID comunità esempio - Home Stanze Nessun utente @@ -1046,9 +972,9 @@ Per continuare, inserisci la tua password: Disattiva l\'account Licenze di terze parti - Scarica - Parla - Svuota + Scarica + Parla + Svuota Richiedi di nuovo le chiavi di crittografia dalle tue altre sessioni. La richiesta della chiave è stata inviata. Richiesta inviata @@ -1170,7 +1096,7 @@ Usa la suoneria predefinita di ${app_name} per le chiamate in arrivo Suoneria delle chiamate in arrivo Scegli la suoneria per le chiamate: - Accetta + Accetta Per favore, leggi e accetta i termini di servizio di questo Home Server: Diagnostica delle notifiche Diagnosi dei problemi @@ -1242,7 +1168,7 @@ Backup delle chiavi Usa il Backup delle chiavi Il Backup delle chiavi non è concluso, attendere prego… - Salta + Salta Fatto Impostazioni di notifica avanzate Se ti disconnetti adesso perderai i tuoi messaggi cifrati @@ -1254,9 +1180,9 @@ Sei sicuro\? Backup Perderai l\'accesso ai tuoi messaggi criptati a meno che tu non faccia il Backup delle chiavi prima di disconnetterti. - Rimani - Interrompi - Ignora + Rimani + Interrompi + Ignora Sei sicuro di volerti disconnettere\? Accedi con single sign-on Questo URL è irraggiungibile. Per favore controllalo @@ -1492,8 +1418,8 @@ Stanze Le tue stanze verranno mostrate qui. Tocca il pulsante + per trovare quelle esistenti o crearne di nuove. Reazioni - D\'accordo - Piace + D\'accordo + Piace Aggiungi reazione Vedi le reazioni Reazioni @@ -1576,8 +1502,8 @@ Cerca per nome o ID utente … Sto entrando nella stanza … Visualizza Modifica Timeline - Leggi - Rifiuta + Leggi + Rifiuta Per continuare devi accettare i termini di servizio. Termini di servizio Leggi i termini di servizio @@ -1585,8 +1511,8 @@ Usa bot, bridge, widget e pacchetti di sticker Leggi su Nessuno - Revoca - Disconnetti + Revoca + Disconnetti Non è stato configurato alcun server d\'identità. Chiamata fallita a causa di un\'errata configurazione del server Chiedi all\'amministratore del tuo Home Server (%1$s) di configurare un server TURN affinché le chiamate funzionino in modo affidabile. @@ -2015,15 +1941,6 @@ Nome utente Strumenti per sviluppatori Dati account - - %d voto - %d voti - - - %d voto - Risultato finale - %d voti - Risultato finale - - Opzione selezionata Crea un semplice sondaggio Usa una Passphrase o un codice di recupero Se non puoi accedere a una sessione esistente @@ -2151,7 +2068,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - o un altro client Matrix che supporti la firma incrociata + o un altro client Matrix che supporti la firma incrociata Usa l\'ultima versione di ${app_name} anche sui tuoi altri dispositivi: Forza l\'attuale sessione di gruppo in uscita in una stanza cifrata ad essere scartata Supportato solo nelle stanze criptate @@ -2225,9 +2142,9 @@ In alternativa, puoi inserire l\'URL di un qualsiasi altro server d\'identità Inserisci l\'URL di un server d\'identità Invia - Avvia - Pausa - Annulla + Avvia + Pausa + Annulla Copia Completato Notifiche @@ -2425,7 +2342,6 @@ Mostra eventi di stato dei membri della stanza Includi eventi di invito/entrata/uscita/kick/ban e modifiche di avatar/nome. Sondaggio - Pulsanti bot Reagito con: %s Verifica conclusa Vuoi eliminare i dati dell\'account di tipo %1$s\? @@ -2479,7 +2395,7 @@ Filtra utenti banditi Non hai il permesso di avviare una chiamata Non hai il permesso di avviare una chiamata di gruppo - Reimposta + Reimposta Il codice PIN è richiesto ogni volta che apri ${app_name}. Il codice PIN è richiesto dopo 2 minuti di inattività su ${app_name}. Richiedi il PIN dopo 2 minuti @@ -2753,7 +2669,7 @@ Potranno esplorare %s Invita in %s Condividi link - Invita per nome utente + Invita per nome utente Invita per email Al momento ci sei solo tu. Con più persone %s sarà ancora migliore. Invita persone @@ -3013,7 +2929,7 @@ Termina configurazione Invita per email, trova contatti e altro… Attualmente non stai usando un server d\'identità. Per poter invitare compagni ed essere individuabile da loro, configurane uno sotto. - Invita per nome utente o email + Invita per nome utente o email Assicurati che le persone giuste abbiano accesso a %s. Puoi invitarne altre dopo. Chi sono i tuoi compagni di squadra\? Aggiungi allo spazio scelto @@ -3085,4 +3001,50 @@ Sei d\'accordo con l\'invio di queste informazioni\? Per trovare i contatti esistenti, devi inviare le informazioni dei contatti (email e numeri di telefono) al tuo server d\'identità. Facciamo un hash dei dati prima di inviarli per privacy. Non ora + Vuoi davvero rimuovere questo sondaggio\? Non potrai recuperarlo una volta rimosso. + Rimuovi sondaggio + Sondaggio terminato + Voto inviato + Attiva sondaggi + Termina sondaggio + Ciò impedirà alle persone di poter votare e mostrerà i risultati finali del sondaggio. + Terminare questo sondaggio\? + opzione vincente + Termina sondaggio + + Risultato finale basato su %1$d voto + Risultato finale basato su %1$d voti + + + Nessun voto + %1$d voti. Vota per vedere i risultati + + + Basato su %1$d voto + Basato su %1$d voti + + + %1$d voto + %1$d voti + + Impostazioni di sistema + Versioni + Ricevi aiuto nell\'uso di Element + Aiuto e supporto + Aiuto + Informazioni legali + Questo server non presenta alcuna informativa. + Librerie di terze parti + L\'informativa del tuo server d\'identità + L\'informativa del tuo homeserver + Informativa di ${app_name} + Puoi disattivarlo in qualsiasi momento nelle impostazioni + Non condividiamo informazioni con terze parti + Non registriamo o profiliamo alcun dato dell\'account + qui + Aiutaci a identificare problemi e a migliorare Element condividendo dati di utilizzo anonimi. Per capire come le persone usano diversi dispositivi, genereremo un identificativo casuale, condiviso dai tuoi dispositivi. +\n +\nPuoi leggere i nostri termini di servizio %s. + Aiuta a migliorare Element + Attiva \ No newline at end of file diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index ffda58abe6..5b06f0f742 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -6,7 +6,7 @@ שגיאה אזהרה אישור - השבת + השבת העתק ללוח הגזירים הסר פרסום הוסף @@ -26,15 +26,15 @@ נתק להסיר לקבל - יְרִידָה - סקירה - להתעלם - לְהַפִּיל + יְרִידָה + סקירה + להתעלם + לְהַפִּיל בוצע - לדלג - לְקַבֵּל + לדלג + לְקַבֵּל לא מקוון - להזמין + להזמין לשלוח בכל מקרה תתקשר בכל מקרה שיחות ועידה אינן נתמכות בחדרים מוצפנים @@ -59,33 +59,33 @@ וידאו קול התחל לצ\'וטט - אתחול - השהה - לנגן + אתחול + השהה + לנגן שיחה פעילה דווח על תוכן - התנתק - לבטל + התנתק + לבטל אין - שנה שם - מחק + שנה שם + מחק צפה במקור המפוענח צפה במקור הדף קישור קבוע - העבר + העבר מאוחר יותר - ניקוי - דבר - שתף - הורדה - צטט - הסר - שלח שוב - שלח - הישאר - עזיבה - שמירה - ביטול + ניקוי + דבר + שתף + הורדה + צטט + הסר + שלח שוב + שלח + הישאר + עזיבה + שמירה + ביטול אוקיי טוען… רישיונות צד ג \' @@ -102,7 +102,7 @@ או פתיחה כניסה - שחרר + שחרר גיבוי המפתחות לא הסתיים, אנא המתן … אמת מושב השתמש במפתח גיבוי @@ -297,10 +297,10 @@ מסנכרן… פתח כותרת חברי רשימה - דחייה - תצוגה מקדימה - הצטרף - הסר + דחייה + תצוגה מקדימה + הצטרף + הסר המשך לא כן @@ -684,17 +684,6 @@ %d חדרים חפש בתיקיות - הקלד מזהה חדר או כינוי לחדר - הצטרף לחדר - הצטרף לחדר - צור חדר - התחלת שיחת צ\'אט - הזמנות - עדיפות נמוכה - חדרים - מועדפים - תיקייה ראשית - הצטרף עדיין אין תמיכה בחיפוש בחדרים מוצפנים. קבצים אנשים @@ -825,10 +814,10 @@ %1$s ב %2$s ו %3$s %1$s ב %2$s - d% - d% - d% - d% + %d + %d + %d + %d הודעה %1$s: %2$d @@ -1283,7 +1272,6 @@ הכנתי עותק מסקנת אימות הגיב עם: %s - כפתורי בוט משאל מדבקה קובץ @@ -1730,8 +1718,8 @@ תגובות צפה בתגובות הוסף תגובה - אהבתי - מסכים + אהבתי + מסכים תגובות החדרים שלך יוצגו כאן. הקש על + שמאל למטה כדי למצוא את הקיים או התחל כמה משלך. חדרים @@ -2021,7 +2009,6 @@ אם אינך יכול לגשת להפעלה קיימת השתמש בביטוי סיסמה או מפתח שחזור יוצר סקר פשוט - אפשרות נבחרת למחוק את נתוני החשבון מסוג %1$s\? \n \nהשתמש בזהירות, זה עלול להוביל להתנהגות בלתי צפויה. @@ -2042,12 +2029,6 @@ השתמש במפתח אבטחה התקן הגן מפני אובדן גישה להודעות ונתונים מוצפנים על ידי גיבוי של מפתחות הצפנה בשרת שלך. - - %d הצבעה - %d הצבעות - %d הצבעות - %d הצבעות - כלי מפתחים מצב טיסה פועל הקישוריות לשרת אבדה @@ -2131,7 +2112,7 @@ נתמך רק בחדרים מוצפנים מכריח את ההפעלה הקבוצתית החוצה הנוכחית בחדר מוצפן להיזרק השתמש באלמנט האחרון במכשירים האחרים שלך: - או לקוח מטריקס אחר עם יכולת חתימה צולבת + או לקוח מטריקס אחר עם יכולת חתימה צולבת אלמנט iOS \nאלמנט אנדרואיד רשת האינטרנט @@ -2250,12 +2231,6 @@ שלח תמונות בגודל המקורי שלח תמונות בגודל המקורי - - %d הצבעה - תוצאות סופיות - %d הצבעות - תוצאות סופיות - %d הצבעעות - תוצאות סופיות - %d הצבעות - תוצאות סופיות - בחר PIN לאבטחה שגיאות רבות מדי, יצאת מהחשבון אַזהָרָה! ניסיון אחרון שנותר לפני היציאה! diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index abfe5d6ef9..8826c6ccea 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -47,7 +47,7 @@ %1$s は %2$s にルームに参加するよう招待状を送りました %1$sは%2$sの招待を受け入れました ** 解読できません: %s ** - 送信者の端末からこのメッセージのキーが送信されていません。 + 送信者の端末からこのメッセージのキーが送信されていません。 修正できませんでした メッセージを送信できません 画像のアップロードに失敗しました @@ -86,17 +86,17 @@ 設定 履歴 OK - キャンセル - 保存 - 退室 - 送信 - 再送信 - 削除 - 共有 - 削除 + キャンセル + 保存 + 退室 + 送信 + 再送信 + 削除 + 共有 + 削除 端末情報 暗号化された部屋での多人数通話はサポートされていません - 招待 + 招待 全ての発言を既読にする 履歴 すぐに返信 @@ -193,18 +193,18 @@ 同期中… メッセージ メンバー詳細 - 引用 + 引用 後で - 転送 + 転送 直リンク ソースコードを表示 または 確認 - 無効にする + 無効にする 送信中 (%s%%) このユーザ名はすでに使用されています - 削除 - 参加 + 削除 + 参加 あなたは %s さんに呼ばれてこの部屋へ参加しました 新しい会話 参加者を追加 @@ -347,7 +347,7 @@ 巨大 発言更新を確認 暗号解除されたソースコードを表示 - 名前変更 + 名前変更 切断中 会話を開始 音声通話を開始 @@ -424,8 +424,8 @@ 写真または動画の撮影 動画を記録できません 保存 - 試写 - 拒否 + 試写 + 拒否 管理者権限操作 通話 ダイレクトメッセージ @@ -450,14 +450,6 @@ 参加者 ファイル 部屋 - お気に入り - 部屋 - 低優先度 - 会話を開始 - 部屋を作成 - 部屋へ参加 - 部屋へ参加 - 参加 部屋一覧を見る 退室 会話 @@ -602,9 +594,6 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 ダウンロードをキャンセルする 検索 メッセージ - ディレクトリ - 招待 - 部屋のIDまたは部屋のエイリアスを入力してください ディレクトリを検索中… サードパーティの通知 このアプリのシステムの情報を見る。 @@ -651,15 +640,11 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 不明なデバイスが存在しているため、メッセージを送ることができませんでした。今 %1$s または %2$s しますか? 要求されたフィンガープリントキー Ed25519 jitsiを用いて会議通話を始める - 端末のカメラを使う - 警告! ビデオ会議は開発中であり、確実でない可能性があります。 - コマンドエラー 認識されないコマンド: %s - 音量大 暗号化されたメッセージ @@ -698,7 +683,6 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 コミュニティID - ホーム 参加者 部屋 @@ -745,9 +729,9 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 • 通知はメタデータのみを含みます スタンプを送る サードパーティーライセンス - ダウンロード - 話す - 消去 + ダウンロード + 話す + 消去 許可がないため、この操作を実行できません。 実行 システムアラート @@ -886,7 +870,7 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 畳む メッセージとエラーの場合 とにかく通話する - 了承 + 了承 このホームサーバーの方針を閲覧し承認してください: 通話設定画面 着信に${app_name}の既定の着信音を使う @@ -956,7 +940,7 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 カスタム設定。 起動時の実行 バックグラウンド制限の確認 - とどまる + とどまる 編集 返信 削除済みのメッセージ @@ -1053,21 +1037,21 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 この部屋内でのメッセージはエンドツーエンド暗号化されます。詳細の確認や検証はユーザーのプロフィールをご確認ください。 暗号化が有効化されていません 通知設定 - 切断 + 切断 ログアウトしますか? 既読にする コピー 成功 通知 サーバーの設定ミスにより通話に失敗しました - 破棄 - 再生 - 一時停止 - 消去 - スキップ + 破棄 + 再生 + 一時停止 + 消去 + スキップ 完了 - 無視 - レビュー + 無視 + レビュー 待機中… サムネイル暗号化中… サムネイル送信中 (%1$s / %2$s) @@ -1138,7 +1122,7 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 相手ユーザーのデバイスのコードをスキャンし、相互に安全性を検証します 相手のコードをスキャン スキャンできません - 断る + 断る 検証リクエスト 通話の開始前に確認する 意図しない通話を阻止する @@ -1168,7 +1152,7 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 終了 拒否 承諾 - 中止 + 中止 ウィジェットを削除できませんでした ウィジェットを追加できませんでした ビデオ通話を開始 @@ -1176,7 +1160,7 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 通話を開始する権限がありません このルームで通話を開始する権限がありません グループ通話を開始する権限がありません - リセット + リセット なし トピック ルーム名 @@ -1811,7 +1795,7 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 次に 次に 次に - ユーザー名で招待 + ユーザー名で招待 ユーザー名を選択してください。 ユーザー名やパスワードが正しくありません。 入力したパスワードは、スペースで開始または終了しますので、ご確認ください。 そのユーザー名は既に使用されています @@ -1893,8 +1877,8 @@ ${app_name}からあなた個人の電話帳への検索要求を許可する場 リアクション リアクションを見る リアクションを追加する - いいね - 同意 + いいね + 同意 リアクション ルームがここに表示されます。右下の[+]をタップして、既存のルームを検索するか、独自のルームを開始します。 ダイレクトメッセージの会話がここに表示されます。右下の[+]をタップして開始します。 diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 53e883baf6..e169b491c1 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -97,7 +97,7 @@ Tbeddleḍ aswir n tezmert n %1$s. %1$s ibeddel aswir n tezmert n %2$s. ** Awgelhen d awezɣi: %s ** - Ibenk n umazan ur aɣ-d-yuzin ara tisura i yizen-a. + Ibenk n umazan ur aɣ-d-yuzin ara tisura i yizen-a. Tuzna n yizen d tawezɣit Tuccḍa deg uẓeṭṭa Tuccḍa deg Matrix @@ -201,37 +201,37 @@ Tebɣiḍ s tidet\? Asali… IH - Sefsex - Sekles - Ffeɣ - Azen - Ɛawed azen - Sfeḍ - Tanebdurt - Sader - Bḍu + Sefsex + Sekles + Ffeɣ + Azen + Ɛawed azen + Sfeḍ + Tanebdurt + Sader + Bḍu Ticki Wali aɣbalu - Kkes - Beddel isem + Kkes + Beddel isem Ula yiwen - Ḥwi - Ffeɣ seg tuqqna + Ḥwi + Ffeɣ seg tuqqna Asiwel urmid - Ɣeṛ - Agi + Ɣeṛ + Agi Ur tesεiḍ ara tisirag ad tebduḍ asireg s usiwel deg texxamt-a Tukksa n uwiǧit ur teddi ara neɣ - Nced + Nced Beṛṛa n tuqqna - Qbel - Zgel + Qbel + Zgel Immed - Sefsex - Ttu - Senqed - Agwi + Sefsex + Ttu + Senqed + Agwi Ffeɣ Tigawin Ffeɣ seg tuqqna @@ -240,7 +240,7 @@ Ldi Mdel Nɣel - Sens + Sens Asentem Asmigel Tuccḍa @@ -291,10 +291,10 @@ Talɣut IH Kemmel - Sfeḍ - Rnu - Taskant - Agi + Sfeḍ + Rnu + Taskant + Agi Ffeɣ seg texxamt Snulfu-d Srid @@ -323,8 +323,6 @@ Nadi Sizdeg iɛeggalen n texxamt Ulac igmad - Bdu adiwenni - Rnu taxxamt Iznan i meṛṛa (sɛan ṣṣut) Iznan i meṛṛa Sens imesli @@ -620,10 +618,10 @@ Aḥraz n tsarut n useqdac Aḥraz Ad tesruḥeḍ anekcum ɣer yiznan-ik•im yettwawgelhen anagar ma tkelseḍ tisura-inek•inem send tuffɣa. - Qqim - Mmeslay - Sfeḍ - Ɣer sdat + Qqim + Mmeslay + Sfeḍ + Ɣer sdat Aseɣwen imezgi Senqed taɣbalut tawgelhent Agbur n uneqqis @@ -656,7 +654,7 @@ Sizdeg ismawen n texxamin Ilɣa s ṣṣut Turagin n wis tlata - Sgunfu + Sgunfu Asarag s usiwel iteddu \nRnu-d ɣer-s s %1$s neɣ s %2$s Sizdeg ismenyifen @@ -866,15 +864,6 @@ IZNAN IMDANEN IFUYLA - RNU - AKARAM - INURIFEN - TIXXAMIN - TAZWART TADDAYT - INEBGAWEN - Rnu ɣer texxamt - Rnu ɣer texxamt - Aru asulay n texxamt neɣ isem yettunefken i texxamt 1 texxamt %d texxamin @@ -939,7 +928,7 @@ Anedbal-ik·im n uqeddac issens awgelhen seg yixef ɣer yixef s wudem amezwer deg texxamin tusligin & yiznan usriden. Tiɣimiyin S tidet tebɣiḍ ad tekkseḍ aneḍru-a\? Err deg uqerru-k·m ma yella tekkseḍ asnifel n yisem neɣ asentel n texxamt, yemzer asnifel-a ad yettusefsex. - neɣ amsaɣ-nniḍen n Matrix yemṣadan d uzmul amdigan + neɣ amsaɣ-nniḍen n Matrix yemṣadan d uzmul amdigan Ḥettem tiɣimit n ugraw ara d-yeffɣen akka tura deg texxamt tawgelhant ad tettwakkes Sentem timagit-ik·im s usenqed n yinekcam-a seg yiwet gar tɣimiyin-inek·inem-nniḍen, serreḥ-as ad tekcem ɣer yiznan yettwawgelhen. D awezɣi ad ternuḍ izen-inek·inem uslig. Ttxil-k·m senqed iseqdacen i tebɣiḍ ad d-tnecdeḍ syen ɛreḍ tikkelt-nniḍen. @@ -1062,8 +1051,8 @@ Asuter yettwasefsex Tuccḍa tarussint Yettwanced-d sɣur %s - Qbel - Ḥemmel + Qbel + Ḥemmel Rnu taxxamt tamaynut Snifel azeṭṭa Meṛṛa timɣiwnin @@ -1453,7 +1442,6 @@ Ittraju %s… Isuli-d Isefka n umiḍan - Taxtirit yettefernen Anekcum amaynut Sekcem tasarut tuffirt n uḥraz uffir Ɣur-k·m: @@ -2112,14 +2100,6 @@ Tuqqna ɣer uqeddac truḥ Askar n usafag yermed Ifecka n tneflit - - %d tafrant - %d tifranin - - - %d tafrant - Igmaḍ n taggara - %d tifranin - Igmaḍ n taggara - Yerna assenqed afessas Seqdec tafyirt tuffirt n tririt neɣ tasarut Ma yella ur tezmireḍ ara ad tkecmeḍ ɣer tɣimit i yellan @@ -2295,7 +2275,6 @@ %d n tsintin Sken tidyanin n waddad n uɛeggal n texxamt - Tiqeffalin n uṛubut Taggrayt n usenqed Aseɣwen ur yemsil ara akken iwata Ur tesɛiḍ ara tasiregt ad tebduḍ asiwel deg texxamt-a @@ -2312,7 +2291,7 @@ Ur tesεiḍ ara azref ad tesiwleḍ Ur tesεiḍ ara azref ad tebduḍ asarag s tilifun Bdu asqerdec - Wennez + Wennez Rmed abyumitri Swel ammesten Mmesten anekcum s useqdec n PIN d ubyumtri. diff --git a/vector/src/main/res/values-ko/strings.xml b/vector/src/main/res/values-ko/strings.xml index fdc94d4821..d1a11f794a 100644 --- a/vector/src/main/res/values-ko/strings.xml +++ b/vector/src/main/res/values-ko/strings.xml @@ -45,7 +45,7 @@ %1$s님이 %2$s님에게 방 초대를 보냈습니다 %1$s님이 %2$s의 초대를 수락했습니다 ** 암호를 복호화할 수 없음: %s ** - 발신인의 기기에서 이 메시지의 키를 보내지 않았습니다. + 발신인의 기기에서 이 메시지의 키를 보내지 않았습니다. 검열할 수 없습니다 메시지를 보낼 수 없습니다 사진 업로드에 실패했습니다 @@ -93,20 +93,20 @@ 제 3자 라이선스 불러오는 중… - 취소 - 저장 - 떠나기 - 보내기 - 다시 보내기 - 감추기 - 인용 - 다운로드 - 공유 + 취소 + 저장 + 떠나기 + 보내기 + 다시 보내기 + 감추기 + 인용 + 다운로드 + 공유 고유 주소 소스 보기 복호화된 소스 보기 - 삭제 - 다시 이름 짓기 + 삭제 + 다시 이름 짓기 내용 신고하기 음성 영상 @@ -117,7 +117,7 @@ 기기 정보 무시하고 보내기 또는 - 초대 + 초대 오프라인 나가기 활동 @@ -130,7 +130,7 @@ 열기 닫기 클립보드에 복사되었습니다 - 비활성화 + 비활성화 확인 경고 오류 @@ -190,8 +190,8 @@ 키 백업하기 확신합니까\? 백업 - 머물기 - 넘기기 + 머물기 + 넘기기 완료 정말 로그아웃하시겠습니까\? 읽음으로 표시 @@ -234,19 +234,19 @@ 암호화된 메시지를 원하지 않습니다 키 백업 중… 로그아웃하기 전에 키를 백업하지 않으면 암호화된 메시지에 접근할 수 없습니다. - 말하기 - 지우기 + 말하기 + 지우기 - 가져오기 + 가져오기 현재 전화 회의 전화가 진행 중입니다. \n%1$s 또는 %2$s로 참가하세요 이 방에서 회의를 시작하려면 초대할 권한이 필요합니다 회의 전화는 암호화된 방에서 지원하지 않습니다 무시하고 통화 - 수락하기 - 중단 - 차단 + 수락하기 + 중단 + 차단 세계 검색 즐겨찾기 필터 사람 필터 @@ -375,10 +375,10 @@ 아니오 계속 - 제거 - 참가 - 미리보기 - 받지 않기 + 제거 + 참가 + 미리보기 + 받지 않기 구성원 목록 헤더 열기 동기화 중… @@ -506,17 +506,6 @@ 메시지 사람 파일 - 참가 - 목록 - 즐겨찾기 - - 중요하지 않음 - 초대 - 대화 시작 - 방 만들기 - 방 참가하기 - 방 참가하기 - 방 ID나 방 별칭을 입력 목록 찾기 %d개의 방 @@ -1228,8 +1217,8 @@ 방이 여기 표시됩니다 리액션 - 동의 - 좋아요 + 동의 + 좋아요 리액션 추가 리액션 보기 리액션 @@ -1309,8 +1298,8 @@ 사용자 이름 또는 ID로 필터… 방에 참가하는 중… 편집 기록 보기 - 검토 - 끊기 + 검토 + 끊기 계속 하려면 이 서비스 약관에 동의해야 합니다. 서비스 약관 조건 검토 @@ -1318,8 +1307,8 @@ 봇, 브릿지, 위젯과 스티커 팩을 사용하세요 읽은 시간 없음 - 취소 - 연결 해제 + 취소 + 연결 해제 설정된 ID 서버가 없습니다. 잘놋 설정된 서버로 인해 전화에 실패함 전화가 정상적으로 작동하도록 TURN 서버를 설정하려면 홈서버 (%1$s)의 관리자에게 연락해주세요. @@ -1480,8 +1469,8 @@ 권한 없음 이 작업을 수행하려면 시스템 설정에서 카메라 권한을 허용해주세요. 이 작업을 수행할 수 있는 일부 권한이 없습니다. 시스템 설정에서 권한을 허용해주세요. - 일시 정지 - 재생 + 일시 정지 + 재생 음성 메시지를 보내려면 마이크 권한을 허용해주세요. 삭제된 메시지 복사 diff --git a/vector/src/main/res/values-lt/strings.xml b/vector/src/main/res/values-lt/strings.xml index b18595388c..1a189047a7 100644 --- a/vector/src/main/res/values-lt/strings.xml +++ b/vector/src/main/res/values-lt/strings.xml @@ -53,10 +53,10 @@ Atsijungę Sukurti Sinchronizuojama… - Atmesti - Peržiūra - Prisijungti - Pašalinti + Atmesti + Peržiūra + Prisijungti + Pašalinti Tęsti NE TAIP @@ -99,7 +99,7 @@ Jūs pradėjote vaizdo skambutį. %s pradėjo vaizdo skambutį. %1$s pakeitė kambario pavadinimą į %2$s - Jūs pakeitėte kambario nuotrauka + Jūs pakeitėte kambario nuotrauką Jūs pakeitėte temą į %1$s %1$s pakeitė temą į: %2$s Jūs pakeitėte savo vardą iš %1$s į %2$s @@ -108,4 +108,22 @@ %1$s pakeitė savo vardą į %2$s Jūs pakeitėte savo profilio nuotrauką %1$s pakeitė savo profilio nuotrauką + arba + Daugiau rezultatų nėra + Rezultatų nėra + %s išsiuntė duomenis pokalbio nustatymui. + Jūs pakeitėte kambario pavadinimą į: %1$s + Jūs pakvietėte %1$s. Priežastis: %2$s + %1$s pakvietė %2$s. Priežastis: %3$s + Jūsų pakvietimas. Priežastis: %1$s + %1$s\'s pakvietimas. Priežastis: %2$s + %1$s pakvietė jus. Priežastis: %2$s + (profilio nuotrauka taip pat buvo pakeista) + Jūs pašalinote savo vardą (buvo %1$s) + %1$s pašalino savo vardą (buvo %2$s) + Visi kambario dalyviai, nuo tada, kai jie prisijungė prie kambario. + Jūs baigėte skambutį. + Jūs pradėjote balso skambutį. + %1$s pakeitė kambario nuotrauką + Nėra prieinamų viešųjų kambarių \ No newline at end of file diff --git a/vector/src/main/res/values-lv/strings.xml b/vector/src/main/res/values-lv/strings.xml index 7def907952..e5e61b7807 100644 --- a/vector/src/main/res/values-lv/strings.xml +++ b/vector/src/main/res/values-lv/strings.xml @@ -39,7 +39,7 @@ %1$s nosūtīja %2$s uzaicinājumu pievienoties istabai %1$s pieņēma uzaicinājumu %2$s ** Neizdodas atšifrēt: %s ** - Sūtītāja ierīce mums nav nenosūtījusi atslēgas priekš šīs ziņas. + Sūtītāja ierīce mums nav nenosūtījusi atslēgas priekš šīs ziņas. Nevarēja rediģēt Neizdodas nosūtīt ziņu Neizdevās augšuplādēt attēlu @@ -247,21 +247,21 @@ Dalībnieka informācija Bijušie Labi - Atcelt - Saglabāt - Pamest - Nosūtīt - Sūtīt atkārtoti - Rediģēt - Citēt - Dalīties + Atcelt + Saglabāt + Pamest + Nosūtīt + Sūtīt atkārtoti + Rediģēt + Citēt + Dalīties Vēlāk - Pārsūtīt + Pārsūtīt Iekšējā saite Skatīt pirmkodu Skatīt atšifrētu pirmkodu - Dzēst - Pārdēvēt + Dzēst + Pārdēvēt Ziņot par saturu Aktīvs zvans Turpinās konferences zvans. @@ -276,7 +276,7 @@ Konferences zvani netiek atbalstīti šifrētās istabās Nosūtīt jebkurā gadījumā vai - Uzaicināt + Uzaicināt Izrakstīties Balss zvans Video zvans @@ -287,7 +287,7 @@ Atvērt Aizvērt Nokopēts starpliktuvē - Atslēgt + Atslēgt Apstiprinājums Brīdinājums Uz sākumu @@ -483,10 +483,10 @@ Lūdzu dod piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespē Turpināt - Dzēst - Pievienoties - Piekšskatījums - Noraidīt + Dzēst + Pievienoties + Piekšskatījums + Noraidīt Pāriet uz pirmo neizlasīto ziņu %s jūs uzaicināja pievienoties šai istabai Uzaicinājums tika nosūtīts uz %s, kura nav piesaistīta šim kontam. @@ -578,17 +578,6 @@ Lūdzu dod piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespē ZIŅAS CILVĒKI FAILI - PIEVIENOTIES - KATALOGS - IZLASE - ISTABAS - ZEMA PRIORITĀTE - UZAICINĀJUMI - Sākt saraksti - Izveidot istabu - Ieiet istabā - Ieiet istabā - Ievadiet istabas ID vai aliasu Pārlūkot katalogu Meklē katalogā… Visas ziņas (ar skaņu) @@ -890,7 +879,6 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. %d aktīvi vidžeti %d aktīvu vidžetu - Neizdevās uzstādīt vidžetu. Neizdevās nosūtīt pieprasījumu. Pieejas līmenim jābūt lielākam par 0. @@ -901,30 +889,24 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Istaba %s ir neredzama. Pievienot Matrix lietotnes Lietot iebūvēto kameru - Tu pievienoji jaunu ierīci \'%s\', kura pieprasa šifrēšanas atslēgas. Tava neverificētā ierīce \'%s\' pieprasa šifrēšanas atslēgas. Sākt tās verifikāciju Dalīties bez verificēšanas Ignorēt pieprasījumu - Uzmanību! Konferences zvans ir izstrādes stadijā un var nebūt uzticams. - Komandas kļūda Nepazīstama komanda: %s - Izslēgts Ar skaņu Šifrēta ziņa - Izveidot Izveidot kopienu Kopienas nosaukums Piemērs Kopienas Id piemērs - Sākums Cilvēki Istabas @@ -960,7 +942,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Verificējiet visas savas sesijas, lai nodrošinātos, ka jūsu konts un ziņas ir drošībā Pārskatiet savas pierakstīšanās Nešifrēts - vai kādu citu Matrix lietotni ar cross-signing atbalstu + vai kādu citu Matrix lietotni ar cross-signing atbalstu Šis konts ir deaktivizēts. Šifrētas ziņas grupas čatos Šifrētas ziņas viens-pret-vienu čatos @@ -1221,25 +1203,25 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Vai tiešām vēlies izrakstīties\? Noraidīt Pieņemt - Noraidīt - Pārlūkot - Nerādīt nevienu šī dalībnieka ziņu - Pārtraukt + Noraidīt + Pārlūkot + Nerādīt nevienu šī dalībnieka ziņu + Pārtraukt Gatavs - Izlaist - Pieņemt + Izlaist + Pieņemt Jums nav atļaujas sākt konferences zvanu šajā istabā - Atiestatīt - Aizvērt - Pauzēt - Atskaņot - Atvienoties - Atsaukt + Atiestatīt + Aizvērt + Pauzēt + Atskaņot + Atvienoties + Atsaukt Nav - Notīrīt - Runāt - Lejupielādēt - Palikt + Notīrīt + Runāt + Lejupielādēt + Palikt Vai tiešām to vēlaties\? Verificēt ierīci Sistēmas noklusējuma @@ -1275,7 +1257,6 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Citas istabas Nesenās istabas Verifikācijas slēdziens - Bota pogas Aptauja Uzlīme Kāds no uzskaitītajiem var būt kompromitēts: @@ -1790,8 +1771,8 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Rādīt izdzēstās ziņas Apskatīt Reakcijas Pievienot Reakciju - Patīk - Piekrist + Patīk + Piekrist Jūsu sarunas tiks parādītas šeit. Nospiediet + ekrāna labējā, apakšējā stūrī, lai sāktu sarunas. Apskatiet nelasītas ziņas šeit Laipni lūgti mājās! @@ -2159,7 +2140,6 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Atslēgas jau ir atjauninātas! Pasākumu moderē telpas administrators, iemesls: %1$s Lietotājs izdzēsa notikumu, iemesls: %1$s - Izvēlētā Opcija Dzēst %1$s tipa konta datus\? \n \nLietojiet piesardzīgi, tas var izraisīt neparedzētu uzvedību. @@ -2351,8 +2331,8 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Viņi varēs izpētīt %s Uzaicināt uz %s Kopīgot saiti - Ielūgt pēc lietotājvārda vai pa e-pastu - Ielūgt pēc lietotājvārda + Ielūgt pēc lietotājvārda vai pa e-pastu + Ielūgt pēc lietotājvārda Ielūgt pa e-pastu Šobrīd esi tikai tu. %s būs vēl labāk kopā ar citiem. Uzaicināt uz %s @@ -2563,16 +2543,6 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Sūtīt attēlu ar oriģinālo izmēru Sūtīt attēlus ar oriģinālo izmēru - - %d balsu - Galīgie rezultāti - %d balss - Galīgie rezultāti - %d balsis - Galīgie rezultāti - - - %d balsu - %d balss - %d balsis - nestabila stabila Noklusējuma versija diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index db959072d7..86e199ebb8 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -58,11 +58,11 @@ വോയ്സ് കോൾ പ്രവർത്തനങ്ങൾ പുറത്തുകടക്കുക - അവഗണിക്കൂ + അവഗണിക്കൂ ചെയ്‌തു - ഒഴിവാക്കൂ + ഒഴിവാക്കൂ ഓഫ്‌ലൈൻ - ക്ഷണിക്കുക + ക്ഷണിക്കുക അല്ലെങ്കിൽ സെഷൻ വിശദാംശങ്ങൾ ഓഡിയോ മീറ്റിംഗ് ആരംഭിക്കുക @@ -72,14 +72,14 @@ കോൾ ആരംഭിക്കാൻ കഴിയില്ല, ദയവായി പിന്നീട് ശ്രമിക്കുക വീഡിയോ ചാറ്റിംഗ് ആരംഭിക്കുക - ഇല്ലാതാക്കൂ - മായ്ക്കുക - ഡൌൺലോഡ് ചെയ്യൂ - പങ്കിടുക - വീണ്ടും അയയ്ക്കൂ - അയയ്ക്കൂ - സംരക്ഷിക്കൂ - റദ്ദാക്കൂ + ഇല്ലാതാക്കൂ + മായ്ക്കുക + ഡൌൺലോഡ് ചെയ്യൂ + പങ്കിടുക + വീണ്ടും അയയ്ക്കൂ + അയയ്ക്കൂ + സംരക്ഷിക്കൂ + റദ്ദാക്കൂ ശരി ലഭ്യമാക്കുന്നു… നിങ്ങൾക്കു ഉറപ്പാണോ\? @@ -114,10 +114,10 @@ നിരസിക്കുക സ്വീകരിക്കുക ഒരു കോൾ ആരംഭിക്കാൻ നിങ്ങളെ അനുവദിച്ചിട്ടില്ല - ഒഴിവാക്കൂ - പേരുമാറ്റുക - സംസാരിക്കൂ - നീക്കംചെയ്യൂ + ഒഴിവാക്കൂ + പേരുമാറ്റുക + സംസാരിക്കൂ + നീക്കംചെയ്യൂ ബാക്കപ്പ് അംഗ വിശദാംശങ്ങൾ matrix.org തിരഞ്ഞെടുക്കൂ @@ -174,9 +174,9 @@ പുതിയ ചാറ്റ് ഒരു മുറി സമന്വയിപ്പിക്കുന്നു… - നിരസിക്കുക - ചേരുക - നീക്കംചെയ്യൂ + നിരസിക്കുക + ചേരുക + നീക്കംചെയ്യൂ തുടരുക ഇല്ല അതെ @@ -204,7 +204,7 @@ മുറികളില്ല മുറികൾ ഉറപ്പാക്കൽ - സ്വീകരിക്കുക + സ്വീകരിക്കുക പിന്നീട് വോയ്സ് Matrix ഉപയോക്താക്കൾ മാത്രം @@ -268,7 +268,6 @@ ക്രമീകരണങ്ങൾ സന്ദേശങ്ങൾ മറക്കൂ - മുറികൾ ഫയലുകൾ ആളുകൾ സന്ദേശങ്ങൾ @@ -282,7 +281,7 @@ കാരണം പുറത്താക്കൂ നിരോധിക്കൂ - പുനഃസജ്ജമാക്കൂ + പുനഃസജ്ജമാക്കൂ ഒന്നുമില്ല സജീവ കോൾ (%1$s) %1$s ഈ കോൾ നിരസിച്ചു @@ -297,8 +296,8 @@ ഹോം എന്തായാലും വിളിക്കൂ ആഗോള തിരയൽ - നിരസിക്കുക - പ്ലേ + നിരസിക്കുക + പ്ലേ പെർമാലിങ്ക് മൂന്നാം കക്ഷി ലൈസൻസുകൾ മുന്നറിയിപ്പ് @@ -382,10 +381,6 @@ %d മുറി %d മുറികൾ - ഒരു മുറിയിൽ ചേരുക - മുറിയിൽ ചേരുക - മുറി സൃഷ്ടിക്കൂ - ചാറ്റ് ആരംഭിക്കുക ഫലങ്ങളൊന്നുമില്ല മുറി വിശദാംശങ്ങൾ വിഷയം മാറ്റുക @@ -607,7 +602,7 @@ ചിത്രം അപ്‌ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു സന്ദേശം അയയ്‌ക്കാനായില്ല പുനഃക്രമീകരിക്കാൻ കഴിഞ്ഞില്ല - അയച്ചയാളുടെ ഉപകരണം ഈ സന്ദേശത്തിനുള്ള കീകൾ ഞങ്ങൾക്ക് അയച്ചിട്ടില്ല. + അയച്ചയാളുടെ ഉപകരണം ഈ സന്ദേശത്തിനുള്ള കീകൾ ഞങ്ങൾക്ക് അയച്ചിട്ടില്ല. ** ഡീക്രിപ്റ്റ് ചെയ്യാൻ കഴിഞ്ഞില്ല: %s ** %1$s %2$s ന്റെ അധികാര നില മാറ്റി. നിങ്ങൾ %1$s ന്റെ അധികാര നില മാറ്റി. @@ -657,7 +652,7 @@ %dസെ %dസെ - പ്രിവ്യൂ + പ്രിവ്യൂ ഹോൾഡ് പുനരാരംഭിക്കുക ചെറുത് @@ -671,16 +666,16 @@ കമ്മ്യൂണിറ്റികൾ കമ്മ്യൂണിറ്റികൾ പിശക് - അപ്രാപ്തമാക്കുക - അവലോകനം - ഉപേക്ഷിക്കുക - താൽക്കാലികമായി നിർത്തുക - വിച്ഛേദിക്കുക - അസാധുവാക്കുക - ഫോർവേഡ് - ഉദ്ധരണി - തുടരുക - വിടുക + അപ്രാപ്തമാക്കുക + അവലോകനം + ഉപേക്ഷിക്കുക + താൽക്കാലികമായി നിർത്തുക + വിച്ഛേദിക്കുക + അസാധുവാക്കുക + ഫോർവേഡ് + ഉദ്ധരണി + തുടരുക + വിടുക ഈ മുറിക്കായി %1$s എന്ന ഇതര വിലാസം നിങ്ങൾ ചേർത്തു. ഈ മുറിക്കായി %1$s എന്ന ഇതര വിലാസങ്ങൾ നിങ്ങൾ ചേർത്തു. @@ -713,8 +708,8 @@ മുറികൾ മാറ്റുക പ്രതികരണങ്ങൾ - ലൈക്ക് - സമ്മതിക്കുക + ലൈക്ക് + സമ്മതിക്കുക പ്രതികരണങ്ങൾ മുറികൾ സംഭാഷണങ്ങൾ @@ -802,8 +797,6 @@ പ്രാപ്തമാക്കുക പകർപ്പാവകാശം നിശബ്ദമാക്കുക - കഷണങ്ങൾ - ചേരുക തിരയുക അവഗണിക്കുക നിരോധനം മാറ്റുക @@ -890,7 +883,6 @@ നേരിട്ടുള്ള ചാറ്റ് ഡയറക്‌ടറിയിൽ തിരയുന്നു… ഡയറക്ടറി ബ്രൗസ് ചെയ്യുക - കുറഞ്ഞ മുൻ‌ഗണന ഡൗൺലോഡ് റദ്ദാക്കുക അപ്‌ലോഡ് റദ്ദാക്കുക diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 454e946f5a..f2173d6b3c 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -15,44 +15,44 @@ Er du sikker\? Laster… OK - Lukk - Lagre - Forlat - Send - Send på nytt - Fjern - Sitering - Nedlastning - Del - Tøm + Lukk + Lagre + Forlat + Send + Send på nytt + Fjern + Sitering + Nedlastning + Del + Tøm Senere - Neste + Neste Permalenke Vis kilden - Slett - Endre navn + Slett + Endre navn Ingen - Tilbakekall - Koble fra + Tilbakekall + Koble fra Stemme Film eller - Inviter + Inviter Frakoblet - Godta - Hopp over + Godta + Hopp over Fullført - Løp vekk - Ignorer - Gjennomgang - Avslå + Løp vekk + Ignorer + Gjennomgang + Avslå Avslutt Handlinger Logg ut Historisk Lukk Kopiert til utklippstavle - Slå av + Slå av Advarsel Feil Hjem @@ -103,10 +103,10 @@ JA NEI Fortsett - Fjern - Bli med - Forhåndsvisning - Avvis + Fjern + Bli med + Forhåndsvisning + Avvis Synkroniserer … %ds @@ -146,7 +146,6 @@ Avbryt nedlasting Ingen treff ROM - ROM Demp Direktesamtale Glem @@ -290,7 +289,7 @@ Prøv igjen Invitert av %s Reaksjoner - Liker + Liker Reaksjoner Endre Vennligst vent … @@ -545,8 +544,8 @@ Sikkerhetskopi Du kommer til å miste tilgang til dine enkrypterte meldinger med mindre du sikkerhetskopierer nøklene dine før du logger av. Tredjepartslinsenser - Bli - Snakk + Bli + Snakk Se dekryptert kilde Rapporter innhold Pågående konferansesamtale. @@ -609,9 +608,9 @@ Er du sikker på du vil starte en samtale med %s\? Er du sikker på du vil starte en lydsamtale\? Er du sikker på du vil starte en videosamtale\? - Spill av - Pause - Avslå + Spill av + Pause + Avslå Du har ikke rettigheter til å starte en konferansesamtale i dette rommet Det pågår allerede en konferanse! Start videomøte @@ -698,9 +697,6 @@ INVITERT MELDINGER FILER - Opprett et rom - Bli med i rommet - Bli med i et rom Betingelser og vilkår Personvernregler Legg til E-postadresse @@ -878,7 +874,7 @@ Du har ikke tillatelse til å starte en samtale Du har ikke tillatelse til å starte en samtale i dette rommet Du har ikke tillatelse til å starte en konferansesamtale - Tilbakestill + Tilbakestill Ugyldig brukernavn/passord Denne enheten bruker en utdatert TLS sikkerhetsprotokoll som er sårbar for angrep, for din egen sikkerhet får du ikke kople til serveren Klarte ikke registrere bruker @@ -1023,12 +1019,6 @@ %1$s rom funnet for %2$s Bla gjennom katalogen - Skriv inn et rom-ID eller et romalias - Start chat - LAV PRIORITET - FAVORITTER - KATALOG - BLI MED Søking i krypterte rom støttes ikke ennå. FOLK Årsak til å rapportere dette innholdet @@ -1179,7 +1169,7 @@ Velkommen hjem! Dine direktemeldinger vises her. Trykk på + nederst til høyre for å starte noen. Rommene dine vises her. Trykk på + nederst til høyre for å finne eksisterende eller start din egen. - Godta + Godta Se reaksjoner Arrangement slettet av bruker Sist redigert av %1$s på %2$s @@ -1613,7 +1603,6 @@ Varslingstjeneste Play Tjenester Sjekk Søker i katalogen… - INVITASJONER Ikke noe innhold Sender Mislyktes @@ -1629,7 +1618,7 @@ Nettverksfeil Kunne ikke laste opp bildet Kan ikke sende melding - Avsenderens enhet har ikke sendt oss nøklene til denne meldingen. + Avsenderens enhet har ikke sendt oss nøklene til denne meldingen. ** Kan ikke dekryptere: %s ** Tilpasset Tilpasset (%1$d) @@ -1654,7 +1643,7 @@ Du ba om en VoIP-konferanse %1$s ba om en VoIP-konferanse Du oppgraderte dette rommet. - %s oppgradert dette rommet. + %s oppgraderte dette rommet. Du har slått på end-to-end-kryptering (%1$s) %1$s slo på ende-til-ende-kryptering (%2$s) Du gjorde fremtidig romhistorie synlig for %1$s @@ -1756,4 +1745,17 @@ Pause talemelding Tar opp talemelding Alle i %s vil kunne finne og bli med i dette rommet - du trenger ikke å invitere alle manuelt. Du kan når som helst endre dette i rominnstillingene. + Du opphevet utestengingen av %1$s + %1$s opphevet utestengingen av %2$s + hvem som helst. + Du gjorde framtidige meldinger synlige til %1$s + %1$s gjorde framtidige meldinger synlige til %2$s + Du endret romnavnet til: %1$s + %1$s fjernet visningsnavnet sitt (det var %2$s) + Du endret visningsnavnet ditt fra %1$s til %2$s + %1$s endret visningsnavnet sitt fra %2$s til %3$s + Du endret visningsnavnet ditt til %1$s + %1$s endret visningsnavnet sitt til %2$s + %1$s utestengte %2$s + %ss invitasjon \ No newline at end of file diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 98ce426c8c..cdbb031833 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -39,23 +39,16 @@ %1$s heeft een uitnodiging naar %2$s gestuurd om het gesprek toe te treden %1$s heeft de uitnodiging voor %2$s aanvaard ** Kan niet ontsleutelen: %s ** - Het apparaat van de afzender heeft geen sleutels voor dit bericht gestuurd. - + Het apparaat van de afzender heeft geen sleutels voor dit bericht gestuurd. Kon niet verwijderd worden Kan bericht niet verzenden Uploaden van de afbeelding mislukt - Netwerkfout Matrix-fout - - - Het is momenteel niet mogelijk om een leeg gesprek opnieuw toe te treden. - E-mailadres Telefoonnummer %1$s heeft een sticker gestuurd. - Uitnodiging van %s Gespreksuitnodiging %1$s en %2$s @@ -116,29 +109,27 @@ %1$s heeft gasten de toegang tot het gesprek verhinderd. %1$s heeft eind-tot-eindversleuteling ingeschakeld. %1$s heeft eind-tot-eindversleuteling ingeschakeld (onbekend algoritme %2$s). - Berichten Gesprek Instellingen Info over deelnemer Historisch - Oké - Annuleren - Opslaan - Verlaten - Versturen - Opnieuw versturen - Verwijderen - Citeren - Delen + Annuleren + Opslaan + Verlaten + Versturen + Opnieuw versturen + Verwijderen + Citeren + Delen Later - Doorsturen + Doorsturen Permalink Bron weergeven Ontsleutelde bron weergeven - Verwijderen - Hernoemen + Verwijderen + Hernoemen Inhoud melden Actieve oproep Lopend vergadergesprek. @@ -153,8 +144,7 @@ Vergadergesprekken worden niet ondersteund in versleutelde gesprekken Toch sturen of - Uitnodigen - + Uitnodigen Afmelden Spraakoproep Video-oproep @@ -165,31 +155,25 @@ Openen Sluiten Gekopieerd naar klembord - Uitschakelen - + Uitschakelen Bevestiging Waarschuwing - Thuis Favorieten Personen Gesprekken - Gespreksnamen filteren Favorieten filteren Personen filteren Gespreksnamen filteren - Uitnodigingen Lage prioriteit - Gesprekken Lokale contactenlijst Alleen Matrix-contacten Geen gesprekken U heeft ${app_name} geen toegang tot uw lokale contacten gegeven Geen resultaten - Gesprekken Gesprekscatalogus Geen gesprekken @@ -225,7 +209,6 @@ Video-oproep beginnen Bestanden versturen Foto of video maken - Aanmelden Account aanmaken Indienen @@ -273,7 +256,6 @@ Uw wachtwoord is opnieuw ingesteld. \n \nU bent op alle sessies afgemeld en zult niet langer pushmeldingen ontvangen. Om meldingen opnieuw in te schakelen, meldt u zich op elk apparaat opnieuw aan. - URL moet met http[s]:// beginnen Aanmelden mislukt: netwerkfout Aanmelden mislukt @@ -288,28 +270,20 @@ Er zijn te veel verzoeken verstuurd Deze gebruikersnaam is al in gebruik Er is nog niet op de koppeling in de e-mail geklikt - - Leesbevestigingslijst - - Versturen als Origineel Groot Medium Klein - "Download annuleren? Upload annuleren? %d s %1$dm %2$ds - Gisteren Vandaag - Gespreksnaam Gespreksonderwerp - Oproep verbonden Oproep is aan het verbinden… Oproep beëindigd @@ -322,10 +296,8 @@ Mediaverbinding is mislukt Kan de camera niet initialiseren oproep elders opgenomen - Een afbeelding of video maken" Kan geen video opnemen" - Informatie ${app_name} heeft toegang nodig tot uw mediabestanden om bijlagen te verzenden en op te slaan. \n @@ -346,31 +318,25 @@ \n \nWilt u uw adresboek hiervoor delen\? Sorry. De actie is niet toegepast vanwege ontbrekende rechten - Opgeslagen In downloads opslaan? JA NEE Verdergaan - - Verwijderen - Toetreden - Voorvertoning - Afwijzen - + Verwijderen + Toetreden + Voorvertoning + Afwijzen Ga naar ongelezen - %s heeft u uitgenodigd in dit gesprek Deze uitnodiging is naar %s verstuurd, maar die is niet geassocieerd met deze account. \nMisschien wilt u zich met een andere account aanmelden, of dit e-mailadres aan deze account toevoegen. U probeert toegang te verkrijgen tot %s. Zou u het gesprek willen toetreden om eraan deel te nemen\? een gesprek Dit is een voorvertoning van dit gesprek. Gespreksinteracties zijn uitgeschakeld. - Nieuw gesprek Deelnemer toevoegen 1 deelnemer - Gesprek verlaten Weet u zeker dat u het gesprek wilt verlaten\? Weet u zeker dat u %s uit dit gesprek wilt verwijderen\? @@ -398,14 +364,12 @@ U kunt deze veranderingen niet ongedaan maken aangezien u de gebruiker tot hetzelfde niveau als uzelf promoveert. \nWeet u het zeker\? Weet u zeker dat u %s in dit gesprek wilt uitnodigen\? - Uitnodigen met ID LOKALE CONTACTEN (%d) Enkel Matrix-gebruikers Gebruiker uitnodigen met ID Voer één of meer e-mailadressen of Matrix-ID’s in E-mailadres of Matrix-ID - Zoeken %s is aan het typen… %1$s en %2$s zijn aan het typen… @@ -421,7 +385,6 @@ Onverstuurde berichten verwijderen Bestand niet gevonden U heeft geen toestemming om dit naar dit gesprek te sturen. - Vertrouwen Niet vertrouwen Afmelden @@ -433,7 +396,6 @@ Het certificaat is veranderd van één dat door uw telefoon werd vertrouwd naar een ander. Dit is HEEL ONGEBRUIKELIJK. Het wordt aangeraden om dit nieuwe certificaat NIET TE AANVAARDEN. Het certificaat is veranderd van een vertrouwd naar een onvertrouwd certificaat. De server heeft misschien zijn certificaat vernieuwd. Contacteer de serverbeheerder voor de verwachte vingerafdruk. Aanvaard het certificaat alleen als de serverbeheerder een vingerafdruk heeft gepubliceerd die overeenkomt met degene hierboven. - Info over gesprek Personen Bestanden @@ -441,14 +403,12 @@ Ongeldige ID. Het zou een e-mailadres of een Matrix-ID zoals ‘@gebruikersnaam:domein’ moeten zijn UITGENODIGD TOEGETREDEN - Reden voor het melden van deze inhoud Wilt u alle berichten van deze gebruiker verbergen\? \n \nLet op: deze actie zal de app opnieuw opstarten; dit kan even duren. Upload annuleren Download annuleren - Zoeken Gespreksleden filteren Geen resultaten @@ -456,28 +416,13 @@ BERICHTEN PERSONEN BESTANDEN - - TOETREDEN - CATALOGUS - FAVORIETEN - GESPREKKEN - LAGE PRIORITEIT - UITNODIGINGEN - Gesprek beginnen - Gesprek aanmaken - Gesprek toetreden - Treed een gesprek toe - Voer een gespreks(bij)naam in - Catalogus doorbladeren Catalogus wordt doorzocht… - Favoriet Lage prioriteit Tweegesprek Gesprek verlaten Vergeten - Berichten Instellingen Versie @@ -485,7 +430,6 @@ Derdepartijvermeldingen Copyright Privacybeleid - Profielfoto Naam E-mailadres @@ -513,7 +457,6 @@ Copyright Privacybeleid Cache wissen - Gebruikersinstellingen Meldingen Genegeerde gebruikers @@ -569,37 +512,29 @@ Voer een activeringscode in Er is een fout opgetreden bij het valideren van uw telefoonnummer Code - - Gespreksafbeelding Gespreksnaam Onderwerp Gesprekslabel Gelabeld als: - Favoriet Lage prioriteit Geen - Toegankelijk- en zichtbaarheid Dit gesprek vermelden in de gesprekscatalogus Toegang tot gesprek Toegang tot de gespreksgeschiedenis Wie kan er de geschiedenis lezen\? Wie heeft er toegang tot dit gesprek\? - Iedereen Alleen deelnemers (vanaf het moment dat deze optie wordt geselecteerd) Alleen deelnemers (vanaf het moment dat ze worden uitgenodigd) Alleen deelnemers (vanaf het moment dat ze toetreden) - Om naar een gesprek te verwijzen moet dit een adres hebben. Alleen personen die uitgenodigd zijn Iedereen die de koppeling van het gesprek kent, met uitzondering van gasten Iedereen die de koppeling van het gesprek kent, inclusief gasten - Verbannen gebruikers - Geavanceerd Interne ID van dit gesprek Adressen @@ -610,7 +545,6 @@ Eind-tot-eind-versleuteling is actief Alleen naar geverifieerde sessies versleutelen Ongeverifieerde sessies in dit gesprek nooit berichten sturen vanaf deze sessie. - Dit gesprek heeft geen lokale adressen Nieuw adres (bv. #foo:matrix.org) Ongeldig bijnaamformaat @@ -625,11 +559,8 @@ Versleuteling is uitgeschakeld in dit gesprek. Versleuteling inschakelen \n(let op: dit kan niet meer uitgeschakeld worden!) - Catalogus - %s heeft geprobeerd een specifiek punt in de geschiedenis van dit gesprek te laden, maar kon het niet vinden. - Informatie over eind-tot-eind-versleuteling Gebeurtenisinformatie Gebruikers-ID @@ -673,21 +604,18 @@ Om te verifiëren dat deze sessie vertrouwd kan worden, contacteert u de eigenaar via een andere methode (bv. persoonlijk of via een telefoontje) en vraagt u hem/haar of de sleutel die hij/zij ziet in zijn/haar Gebruikersinstellingen van deze sessie overeenkomt met de sleutel hieronder: Als het overeenkomt, drukt u op de knop ‘Verifiëren’ hieronder. Als het niet overeenkomt, dan onderschept iemand anders deze sessie en zou u het beter blokkeren. In de toekomst zal dit verificatieproces verbeterd worden. Ik verifieer dat de sleutels overeenkomen - Dit gesprek bevat onbekende sessies Dit gesprek bevat onbekende sessies die niet geverifieerd zijn. \nDit betekent dat er geen garantie is dat de sessies bij de gebruikers horen waartoe ze beweren te horen. \nWe raden u aan om bij elke sessie door het verificatieprocces heen te gaan voordat u verdergaat, maar u kunt het bericht ook zonder te verifiëren opnieuw versturen. \n \nOnbekende sessies: - Kies een gesprekscatalogus Het kan zijn dat de server niet beschikbaar of overbelast is Voer een thuisserver in om de publieke gesprekken ervan weer te geven Thuisserver-naam Alle gesprekken op server %s Alle lokale gesprekken op %s - Zoeken in de historiek Offline Gebruikerscatalogus @@ -724,7 +652,6 @@ Aanmaken van widget is mislukt Vergadergesprekken maken met jitsi Weet u zeker dat u deze widget uit dit gesprek wilt verwijderen\? - Kan widget niet aanmaken. Versturen van verzoek mislukt. Het machtsniveau moet een positief geheel getal zijn. @@ -744,19 +671,15 @@ Berichten die mijn gebruikersnaam bevatten Statistische gegevens Systeemcamera gebruiken - U heeft een nieuwe sessie ‘%s’ toegevoegd, die versleutelingssleutels aanvraagt. Uw ongeverifieerde sessie ‘%s’ vraagt versleutelingssleutels aan. Verificatie starten Delen zonder te verifiëren Verzoek negeren - Let op! Vergadergesprekken zijn in ontwikkeling en kunnen dus nog kuren vertonen. - Opdrachtfout Onbekende opdracht: %s - Uit Lawaaierig Versleuteld bericht @@ -828,14 +751,12 @@ %d actieve widget %d actieve widgets - Aanmaken Gemeenschap aanmaken Gemeenschapsnaam Voorbeeld Gemeenschaps-ID voorbeeld - Thuis Personen Gesprekken @@ -896,14 +817,14 @@ Voer uw wachtwoord in om verder te gaan: Account deactiveren Licenties van derde partijen - Downloaden - Inspreken + Downloaden + Inspreken Beveiligingssleutels van uw sessies opnieuw aanvragen. Sleutelaanvraag verstuurd. Aanvraag verstuurd Start ${app_name} op een ander apparaat dat het bericht kan ontsleutelen, zodat het de sleutels naar deze sessie kan sturen. Typ hier… - Wissen + Wissen Spraakbericht versturen doorgaan met… Sorry, er is geen externe toepassing gevonden om deze actie te voltooien. @@ -978,7 +899,7 @@ Gelieve %s om deze dienst te blijven gebruiken. Foutmelding Toch bellen - Aanvaarden + Aanvaarden Gelieve het beleid van deze thuisserver te lezen en aanvaarden: Oproepen Gebruik de standaardbeltoon van ${app_name} voor inkomende oproepen @@ -1011,11 +932,11 @@ Weet u het zeker\? Back-up maken U zult de toegang tot uw versleutelde berichten verliezen, tenzij u eerst een back-up van uw sleutels maakt vooraleer u zich afmeldt. - Blijven - Overslaan + Blijven + Overslaan Klaar - Afbreken - Negeren + Afbreken + Negeren Weet u zeker dat u zich wilt afmelden\? Markeren als gelezen Aanmelden met unieke aanmelding @@ -1326,10 +1247,10 @@ Gebruikers komen niet overeen Onbekende fout Geen - Intrekken - Verbinding verbreken - Nakijken - Weigeren + Intrekken + Verbinding verbreken + Nakijken + Weigeren Geen identiteitsserver geconfigureerd. Oproep mislukt door verkeerd geconfigureerde server Vraag de beheerder van uw thuisserver (%1$s) om een TURN-server te configureren om oproepen betrouwbaar te doen werken. @@ -1419,8 +1340,8 @@ Kamers Je kamers zullen hier worden weergegeven. Gebruik de + knop rechtsonder om een bestaande kamer te openen of een nieuwe aan te maken. Reacties - Bevestigen - Leuk vinden + Bevestigen + Leuk vinden Reactie Toevoegen Reacties Bekijken Reacties @@ -1443,8 +1364,8 @@ Gespreksnaam Publiek Iedereen zal dit gesprek kunnen toetreden - Pauzeren - Afspelen + Pauzeren + Afspelen U heeft het hoofdadres voor dit gesprek verwijderd. Je hebt %1$s uitgenodigd. Reden: %2$s Jouw uitnodiging. Reden: %1$s @@ -1588,7 +1509,6 @@ %1$ds over %s is toegetreden. Conclusie Bevestiging - Botknoppen Gespreksinstellingen Gespreksnaam Integraties Beheren @@ -1640,11 +1560,6 @@ Bevestiging Geannuleerd Sleutelverzoeken Verwijderen Bevestigen - Gekozen Optie - - %d stem - %d stemmen - Accountgegevens Dev Tools QR-code @@ -1896,8 +1811,8 @@ Spaces Meer Weten Begin met chatten - Herstellen - Afwijzen + Herstellen + Afwijzen Systeemstandaard Je hebt eind-tot-eindversleuteling ingeschakeld (onbekend algoritme %1$s). Je hebt eind-tot-eindversleuteling ingeschakeld. diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index ed8afce0c9..44981bda8a 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -40,7 +40,7 @@ %1$s inviterte %2$s til rommet %1$s sa ja til innbjodingi til %2$s ** Fekk ikkje til å dekryptera: %s ** - Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi. + Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi. Kunde ikkje gjera um Fekk ikkje til å senda meldingi Fekk ikkje til å lasta biletet upp @@ -82,24 +82,24 @@ Tredjepartilisensar Lastar… Greitt - Avbryt - Lagra - Forlat - Send - Send på nytt - Fjern - Siter - Last ned - Del - Snakk - Tøm + Avbryt + Lagra + Forlat + Send + Send på nytt + Fjern + Siter + Last ned + Del + Snakk + Tøm Seinare - Send vidare + Send vidare Permanent lenkje Vis kjelde Vis den dekrypterte kjelda - Slett - Gje nytt namn + Slett + Gje nytt namn Rapporter innhaldet Pågåande samtale Pågåande konferansesamtale. @@ -114,7 +114,7 @@ Konferansesamtalar er ikkje støtta i krypterte rom Send likevel eller - Inviter + Inviter Fråkopla Gå ut Handlingar @@ -128,7 +128,7 @@ Opna Lat att Kopier til utklippstavla - Skru av + Skru av Stadfesting Åtvaring Heim @@ -322,10 +322,10 @@ JA NEI Gå fram - Ta vekk - Bli med - Førehandsvisning - Avvis + Ta vekk + Bli med + Førehandsvisning + Avvis Medlemsoversikt Opne overskrift Synkroniserer… @@ -436,17 +436,6 @@ MELDINGAR FOLK FILER - VERT MED - UTVAL - YNDLINGAR - ROM - LÅGRETT - INNBJODINGAR - Start samtale - Laga eit rom - Vert med i romet - Vert med i eit rom - Skriv inn ein rom-ID eller eit romalias Bla gjennom katalog %d rom @@ -854,12 +843,12 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Ver venleg og %s for å heva grensa. Ver venleg og %s for å halda fram med å bruka tenesten. Ring likevel - Aksepter + Aksepter Feil - Hopp over + Hopp over Ferdig - Avbryt - Ignorer + Avbryt + Ignorer Sikker på at du vil logga ut\? Merk som lest Venligast sjå over og godta retningslinjene til heimtenaren: @@ -909,12 +898,12 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Er du sikker \? Sikkerheitskopier Du vil miste tilgang til dine krypterte meldingar, med mindre nøklane dine er sikkerheitskopierte før utlogging. - Bli + Bli Ingen - Trekk tilbake - Koble frå - Sjå gjennom - Avvis + Trekk tilbake + Koble frå + Sjå gjennom + Avvis Ingen identitetstenar er satt opp. Samtale feila fordi tenaren er satt opp feil Be administratoren for din heimetenar (%1$s) om, å setta opp ein \"TURN-server\" for å handtera samtalar på rett måte. @@ -993,7 +982,7 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Avanserte innstillingar Avanserte og tilpassa innstillingar Generelt - Spel av + Spel av Dette telefonnummeret er allereie definert. Skru HD av Front @@ -1017,8 +1006,9 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Du har ikkje lov til å starta ein konferansesamtale Du har ikkje lov til å starta ein konferansesamtale i dette rommet Start samtale - Nullstill - Pause + Nullstill + Pause Folk Folk + Du sende eit bilde. \ No newline at end of file diff --git a/vector/src/main/res/values-pa/strings.xml b/vector/src/main/res/values-pa/strings.xml new file mode 100644 index 0000000000..9037c25c0c --- /dev/null +++ b/vector/src/main/res/values-pa/strings.xml @@ -0,0 +1,113 @@ + + + %1$s ਨੇ %2$s ਲਈ ਸੱਦਾ ਰੱਦ ਕੀਤਾ + %1$s ਨੇ %2$s ਲਈ ਥਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਦਾ ਸੱਦਾ ਰੱਦ ਕੀਤਾ + ਤੁਸੀਂ %1$s ਲਈ ਥਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਦਾ ਸੱਦਾ ਰੱਦ ਕੀਤਾ + ਤੁਸੀਂ %1$s ਨੂੰ ਸੱਦਾ ਘੱਲਿਆ + %1$s ਨੇ %2$s ਨੂੰ ਸੱਦਾ ਘੱਲਿਆ + ਤੁਸੀਂ %1$s ਨੂੰ ਥਾਂ ਵਿੱਚ ਜੁੜਨ ਦਾ ਸੱਦਾ ਘੱਲਿਆ + %1$s ਨੇ %2$s ਨੂੰ ਥਾਂ ਵਿੱਚ ਜੁੜਨ ਦਾ ਸੱਦਾ ਘੱਲਿਆ + ਤੁਸੀਂ ਆਪਣੀ ਪ੍ਰੋਫ਼ਾਈਲ ਅੱਪਡੇਟ ਕੀਤੀ %1$s + %1$s ਨੇ ਆਪਣੀ ਪ੍ਰੋਫ਼ਾਈਲ ਅੱਪਡੇਟ ਕੀਤੀ %2$s + %1$s ਵੱਲੋਂ ਸੁਨੇਹਾ ਹਟਾਇਆ ਗਿਆ [ਕਾਰਨ: %2$s] + ਸੁਨੇਹਾ ਹਟਾਇਆ ਗਿਆ [ਕਾਰਨ: %1$s] + %1$s ਵਲੋਂ ਸੁਨੇਹਾ ਹਟਾਇਆ ਗਿਆ + ਸੁਨੇਹਾ ਹਟਾਇਆ ਗਿਆ + ਤੁਸੀਂ ਥਾਂ ਦਾ ਅਵਤਾਰ ਹਟਾਇਆ + %1$s ਨੇ ਥਾਂ ਦਾ ਅਵਤਾਰ ਹਟਾਇਆ + ਤੁਸੀਂ ਥਾਂ ਦਾ ਵਿਸ਼ਾ ਹਟਾਇਆ + %1$s ਨੇ ਥਾਂ ਦਾ ਵਿਸ਼ਾ ਹਟਾਇਆ + ਤੁਸੀਂ ਥਾਂ ਦਾ ਨਾਮ ਹਟਾਇਆ + %1$s ਨੂੰ ਥਾਂ ਦੇ ਨਾਮ ਵਿੱਚੋਂ ਹਟਾਇਆ ਗਿਆ + (ਅਵਤਾਰ ਵੀ ਬਦਲਿਆ ਗਿਆ) + VoIP ਕਾਨਫ਼ਰੰਸ ਮੁਕੰਮਲ + VoIP ਕਾਨਫ਼ਰੰਸ ਚਾਲੂ + ਤੁਸੀਂ ਇੱਕ VoIP ਕਾਨਫ਼ਰੰਸ ਦੀ ਬੇਨਤੀ ਕੀਤੀ + %1$s ਨੇ ਇੱਕ VoIP ਕਾਨਫ਼ਰੰਸ ਦੀ ਬੇਨਤੀ ਕੀਤੀ + 🎉 ਸਾਰੇ ਸਰਵਰਾਂ ਦੇ ਭਾਗ ਲੈਣ ਤੇ ਪਬੰਦੀ ਲਗਾ ਦਿੱਤੀ ਹੈ। ਇਹ ਥਾਂ ਹੁਣ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। + ਕੋਈ ਬਦਲਾਅ ਨਹੀਂ। + • IP literals ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਹੁਣ ਪਬੰਦੀਸ਼ੁਦਾ ਹਨ। + • IP literals ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਹੁਣ ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਹਨ। + • %s ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਸੂਚੀ ਵਿੱਚੋਂ ਹਟਾ ਦਿੱਤੇ ਗਏ ਹਨ। + • %s ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਹੁਣ ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਹਨ। + • %s ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਪਬੰਦੀਸ਼ੁਦਾ ਸੂਚੀ ਵਿੱਚੋਂ ਹਟਾ ਦਿੱਤੇ ਗਏ ਸਨ। + • %s ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਹੁਣ ਪਬੰਦੀਸ਼ੁਦਾ ਹਨ। + ਤੁਸੀਂ ਇਸ ਥਾਂ ਲਈ ਸਰਵਰ ACL ਬਦਲੇ। + %s ਨੇ ਇਸ ਥਾਂ ਲਈ ਸਰਵਰ ACL ਬਦਲੇ। + • IP literals ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਪਬੰਦੀਸ਼ੁਦਾ ਹਨ। + • IP literals ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਮਨਜ਼ੂਰ ਹਨ। + • %s ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਮਨਜ਼ੂਰ ਹਨ। + • %s ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਸਰਵਰ ਪਬੰਦੀਸ਼ੁਦਾ ਹਨ। + ਤੁਸੀਂ ਇਸ ਥਾਂ ਲਈ ਸਰਵਰ ACL ਸੈੱਟ ਕੀਤੇ। + %s ਨੇ ਇਸ ਥਾਂ ਲਈ ਸਰਵਰ ACL ਸੈੱਟ ਕੀਤੇ। + ਤੁਸੀਂ ਇੱਥੇ ਅੱਪਗ੍ਰੇਡ ਹੋਏ। + %s ਨੇ ਇੱਥੇ ਅੱਪਗ੍ਰੇਡ ਕੀਤਾ। + ਤੁਸੀਂ ਇਸ ਥਾਂ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕੀਤਾ। + %s ਨੇ ਇਸ ਥਾਂ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕੀਤਾ। + ਤੁਸੀਂ ਅੰਤ-ਤੋਂ-ਅੰਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਚਾਲੂ ਕੀਤੀ(%1$s) + %1$s ਨੇ ਅੰਤ-ਤੋਂ-ਅੰਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਚਾਲੂ ਕੀਤੀ(%2$s) + ਅਗਿਆਤ (%s)। + ਕੋਈ ਵੀ। + ਥਾਂ ਦੇ ਸਾਰੇ ਜੀ। + ਥਾਂ ਦੇ ਸਾਰੇ ਜੀ, ਜਦੋਂ ਤੋਂ ਉਹ ਜੁੜੇ ਹਨ। + ਥਾਂ ਦੇ ਸਾਰੇ ਜੀ, ਜਦੋਂ ਤੋਂ ਉਹਨਾਂ ਨੂੰ ਸੱਦਾ ਦਿੱਤਾ ਹੈ। + %s ਨੇ ਕਾਲ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਡਾਟਾ ਘੱਲਿਆ। + ਤੁਸੀਂ ਭਵਿੱਖ ਦੇ ਸੁਨੇਹੇ %1$s ਨੂੰ ਉਪਲੱਬਧ ਕਰਵਾਏ + %1$s ਨੇ ਭਵਿੱਖ ਦੇ ਸੁਨੇਹੇ %2$s ਨੂੰ ਉਪਲੱਬਧ ਕਰਵਾਏ + ਤੁਸੀਂ %1$s ਨੂੰ ਭਵਿੱਖ ਵਿੱਚ ਥਾਂ ਦਾ ਇਤਿਹਾਸ ਉਪਲੱਬਧ ਕਰਵਾਇਆ + %1$s ਨੇ ਭਵਿੱਖ ਵਿੱਚ ਥਾਂ ਦਾ ਇਤਿਹਾਸ %2$s ਨੂੰ ਉਪਲੱਬਧ ਕਰਵਾਇਆ + ਤੁਸੀਂ ਕਾਲ ਮੁਕਾਈ। + %s ਨੇ ਕਾਲ ਮੁਕਾਈ। + ਤੁਸੀਂ ਕਾਲ ਦਾ ਜਵਾਬ ਦਿੱਤਾ। + %s ਨੇ ਕਾਲ ਦਾ ਜਵਾਬ ਦਿੱਤਾ। + ਤੁਸੀਂ ਕਾਲ ਚਾਲੂ ਕਰਨ ਲਈ ਡਾਟਾ ਘੱਲਿਆ। + ਤੁਸੀਂ ਇੱਕ ਅਵਾਜ਼ ਵਾਲੀ ਕਾਲ ਸ਼ੁਰੂ ਕੀਤੀ। + %s ਨੇ ਅਵਾਜ਼ ਵਾਲੀ ਕਾਲ ਸ਼ੁਰੂ ਕੀਤੀ। + ਤੁਸੀਂ ਇੱਕ ਵੀਡੀਓ ਕਾਲ ਸ਼ੁਰੂ ਕੀਤੀ। + %s ਨੇ ਵੀਡੀਓ ਕਾਲ ਚਾਲੂ ਕੀਤੀ। + ਤੁਸੀਂ ਥਾਂ ਦਾ ਨਾਮ ਇਸ ਵਿੱਚ ਬਦਲਿਆ: %1$s + %1$s ਨੇ ਥਾਂ ਦਾ ਨਾਮ ਇਸ ਵਿੱਚ ਬਦਲਿਆ: %2$s + ਤੁਸੀਂ ਥਾਂ ਦਾ ਅਵਤਾਰ ਬਦਲਿਆ + %1$s ਨੇ ਥਾਂ ਦਾ ਅਵਤਾਰ ਬਦਲਿਆ + ਤੁਸੀਂ ਵਿਸ਼ੇ ਨੂੰ ਇਸ ਵਿੱਚ ਬਦਲਿਆ: %1$s + %1$s ਨੇ ਵਿਸ਼ੇ ਨੂੰ ਇਸ ਵਿੱਚ ਬਦਲਿਆ: %2$s + ਤੁਸੀਂ ਆਪਣਾ ਦਿਸਣ ਵਾਲਾ ਨਾਮ ਹਟਾਇਆ (ਇਹ %1$s ਸੀ) + %1$s ਨੇ ਆਪਣਾ ਦਿਸਣ ਵਾਲਾ ਨਾਮ ਹਟਾਇਆ (ਇਹ %2$s ਸੀ) + ਤੁਸੀਂ ਆਪਣਾ ਦਿਸਣ ਵਾਲਾ ਨਾਮ %1$s ਤੋਂ %2$s ਵਿੱਚ ਬਦਲਿਆ + %1$s ਨੇ ਆਪਣਾ ਦਿਸਣ ਵਾਲਾ ਨਾਮ %2$s ਤੋਂ %3$s ਵਿੱਚ ਬਦਲਿਆ + ਤੁਸੀਂ ਆਪਣਾ ਦਿਸਣ ਵਾਲਾ ਨਾਮ %1$s ਵਿੱਚ ਬਦਲਿਆ + %1$s ਨੇ ਆਪਣਾ ਦਿਸਣ ਵਾਲਾ ਨਾਮ %2$s ਵਿੱਚ ਬਦਲਿਆ + ਤੁਸੀਂ ਆਪਣਾ ਅਵਤਾਰ ਬਦਲਿਆ + %1$s ਨੇ ਆਪਣਾ ਅਵਤਾਰ ਬਦਲਿਆ + ਤੁਸੀਂ %1$s ਦਾ ਸੱਦਾ ਵਾਪਿਸ ਲਿਆ + %1$s ਨੇ %2$s ਦਾ ਸੱਦਾ ਵਾਪਿਸ ਲਿਆ + ਤੁਸੀਂ %1$s ਤੇ ਪਬੰਦੀ ਲਗਾਈ + %1$s ਨੇ %2$s ਤੇ ਪਬੰਦੀ ਲਗਾਈ + ਤੁਸੀਂ %1$s ਤੇ ਲੱਗੀ ਪਬੰਦੀ ਹਟਾਈ + %1$s ਨੇ %2$s ਤੇ ਲੱਗੀ ਪਬੰਦੀ ਹਟਾਈ + ਤੁਸੀਂ %1$s ਦੇ ਲੱਤ ਮਾਰ ਦਿੱਤੀ ਹੈ + %1$s ਨੇ %2$s ਦੇ ਲੱਤ ਮਾਰ ਦਿੱਤੀ ਹੈ + ਤੁਸੀਂ ਸੱਦਾ ਨਕਾਰ ਦਿੱਤਾ ਹੈ + %1$s ਨੇ ਸੱਦਾ ਨਕਾਰ ਦਿੱਤਾ ਹੈ + ਤੁਸੀਂ ਥਾਂ ਛੱਡ ਦਿੱਤੀ ਹੈ + %1$s ਨੇ ਥਾਂ ਛੱਡ ਦਿੱਤੀ ਹੈ + ਤੁਸੀਂ ਥਾਂ ਛੱਡ ਦਿੱਤੀ ਹੈ + %1$s ਨੇ ਥਾਂ ਛੱਡ ਦਿੱਤੀ ਹੈ + ਤੁਸੀਂ ਜੁੜੇ ਹੋ + %1$s ਜੁੜੇ ਹਨ + ਤੁਸੀਂ ਥਾਂ ਵਿੱਚ ਜੁੜੇ ਹੋ + %1$s ਥਾਂ ਵਿੱਚ ਜੁੜੇ ਹਨ + %1$s ਨੇ ਤਹਾਨੂੰ ਸੱਦਾ ਘੱਲਿਆ ਹੈ + ਤੁਸੀਂ %1$s ਨੂੰ ਸੱਦਾ ਘੱਲਿਆ ਹੈ + %1$s ਨੇ %2$s ਨੂੰ ਸੱਦਾ ਘੱਲਿਆ ਹੈ + ਤੁਸੀਂ ਚਰਚਾ ਚਾਲੂ ਕੀਤੀ ਹੈ + %1$s ਨੇ ਚਰਚਾ ਚਾਲੂ ਕੀਤੀ ਹੈ + ਤੁਸੀਂ ਇੱਕ ਥਾਂ ਬਣਾਈ ਹੈ + %1$s ਨੇ ਇੱਕ ਥਾਂ ਬਣਾਈ ਹੈ + ਤੁਹਾਡਾ ਸੱਦਾ + %s ਵੱਲੋਂ ਸੱਦਾ + ਤੁਸੀਂ ਇੱਕ ਸਟੀਕਰ ਘੱਲਿਆ ਹੈ। + %1$s ਨੇ ਇੱਕ ਸਟੀਕਰ ਘੱਲਿਆ ਹੈ। + ਤੁਸੀਂ ਇੱਕ ਤਸਵੀਰ ਘੱਲੀ ਹੈ। + %1$s ਨੇ ਇੱਕ ਤਸਵੀਰ ਘੱਲੀ ਹੈ। + \ No newline at end of file diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index d1ccbc8cc2..025a1e037c 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -56,7 +56,7 @@ %1$s zaktualizował swój profil %2$s %1$s wysłał(a) zaproszenie do %2$s aby dołączył(a) do tego pokoju %1$s zaakceptował(a) zaproszenie dla %2$s - Urządzenie nadawcy nie wysłało nam kluczy do tej wiadomości. + Urządzenie nadawcy nie wysłało nam kluczy do tej wiadomości. Nie można zredagować Obecnie nie jest możliwe ponowne dołączenie do pustego pokoju. Wiadomość usunięta @@ -89,21 +89,21 @@ Informacje o użytkowniku Archiwum OK - Anuluj - Zapisz - Opuść - Wyślij - Wyślij ponownie - Usuń - Cytuj - Udostępnij + Anuluj + Zapisz + Opuść + Wyślij + Wyślij ponownie + Usuń + Cytuj + Udostępnij Później - Przekaż + Przekaż Odnośnik bezpośredni Wyświetl źródło Wyświetl odszyfrowane źródło - Usuń - Zmień nazwę + Usuń + Zmień nazwę Zgłoś treść Aktywne połączenie Przychodzące połączenie grupowe. @@ -118,7 +118,7 @@ Połączenia grupowe nie są obsługiwane w szyfrowanych pokojach Wyślij mimo to i - Zaproś + Zaproś Offline Wyloguj się Połączenie głosowe @@ -130,7 +130,7 @@ Otwórz Zamknij Skopiowano do schowka - Wyłącz + Wyłącz Potwierdzenie Ostrzeżenie Home @@ -275,10 +275,10 @@ TAK NIE Kontynuuj - Usuń - Dołącz - Podgląd - Odrzuć + Usuń + Dołącz + Podgląd + Odrzuć Przejdź do pierwszej nieprzeczytanej wiadomości Zostałeś(-aś) zaproszony(-a) do tego pokoju przez %s Próbujesz uzyskać dostęp do %s. Czy chcesz dołączyć do pokoju, aby wziąć udział w dyskusji? @@ -357,17 +357,6 @@ WIADOMOŚCI LUDZIE PLIKI - DOŁĄCZ - KATALOG - ULUBIONE - POKÓJ - NISKI PRIORYTET - ZAPROSZENIA - Rozpocznij rozmowę - Utwórz pokój - Dołącz do pokoju - Dołącz do pokoju - Wprowadź ID lub nazwę pokoju Przeglądaj katalog Przeszukiwanie katalogu… Dodaj do ulubionych @@ -538,9 +527,7 @@ Ludzie Przykład przykład - Wiadomość zaszyfrowana - Utwórz Wyłączone Uwaga! @@ -698,8 +685,8 @@ Eksportuj klucze do pliku lokalnego Dołącz ponownie Zapomnij pokój - Pobierz - Wyczyść + Pobierz + Wyczyść Wyślij naklejkę Poproś ponownie o klucze szyfrujące z innych Twoich sesji. Prośba o klucz wysłana. @@ -766,7 +753,7 @@ Pokój %s nie jest widoczny. Użyj natywnej kamery - Mów + Mów Wyślij głos Nie masz obecnie aktywnych żadnych pakietów naklejek. \n @@ -959,7 +946,7 @@ Kliknij na potwierdzenie odbioru, aby wyświetlić szczegółową listę. Komenda „%s” potrzebuje więcej parametrów lub niektóre parametry są niepoprawne. Pokaż obszar informacyjny - Akceptuj + Akceptuj Przeczytaj i zaakceptuj zasady tego serwera domowego: Ta opcja wymaga aplikacji osoby trzeciej do nagrywania wiadomości. Uruchom Testy @@ -998,19 +985,19 @@ Połączenie wideo trwa… Kopia Zapasowa Klucza Kopia zapasowa kluczy nie jest zakończona, proszę czekać… - Pomiń + Pomiń Zaawansowane ustawienia powiadomień Sprawdź ustawienia Algorytm Stracisz zaszyfrowane wiadomości, jeśli się teraz wylogujesz Jesteś pewien? - Przerwij + Przerwij Czy na pewno chcesz się wylogować? Trwa tworzenie kopii zapasowej klucza. Jeśli wylogujesz się teraz utracisz dostęp do zaszyfrowanych wiadomości. Nie chcę moich zaszyfrowanych wiadomości Utracisz dostęp do zaszyfrowanych wiadomości, chyba że wykonasz kopię zapasową kluczy przed wylogowaniem się. - Zostań - Ignoruj + Zostań + Ignoruj Domyślna kompresja Konfiguruj głośne powiadomienia Konfiguruj ciche powiadomienia @@ -1094,8 +1081,8 @@ \nJeżeli nie ustawiałeś nowej metody odzyskiwania, atakujący mogą uzyskać dostęp do Twojego konta. Zmień hasło konta i ustaw nową metodę odzyskiwania jak najszybciej w Ustawieniach. Jesteś na bieżąco! Ten adres URL jest nieosiągalny, proszę sprawdź jego poprawność - Unieważnij - Rozłącz + Unieważnij + Rozłącz Nie pytaj ponownie To nie jest prawidłowy adres serwera Matrix Potwierdź swoje hasło @@ -1791,17 +1778,6 @@ Nie Narzędzia programistyczne Dane konta - - %d głos - %d głosów - - - - %d głos - wyniki końcowe - %d głosów - wyniki końcowe - - - Wybrana Opcja Tworzy prostą ankietę Użyj hasła odzyskiwania lub klucza Użyj klucza odzyskiwania lub hasła @@ -1824,8 +1800,8 @@ Wydarzenie usunięte przez użytkownika, przyczyna: %1$s Wydarzenie moderowane przez administratora pokoju, przyczyna: %1$s Klucze są już aktualne! - Sprawdź - Zrezygnuj + Sprawdź + Zrezygnuj Niezgodność klucza Niezgodność użytkowników Nie korzystasz z serwera tożsamości @@ -1836,8 +1812,8 @@ Nie masz więcej nieprzeczytanych wiadomości Witaj w domu! Reakcje - Zgoda - Lubię to + Zgoda + Lubię to Zobacz Reakcje Zdarzenie usunięte przez użytkownika Zdarzenie moderowane przez administratora pokoju @@ -1868,9 +1844,9 @@ Odśwież Użyj tej sesji do weryfikacji nowej, nadając jej dostęp do zaszyfrowanych wiadomości. To nie ja - Zamknij - Wstrzymaj - Odtwórz + Zamknij + Wstrzymaj + Odtwórz Nie posiadasz wymaganych uprawnień do rozpoczęcia połączenia w tym pokoju Odbierz Usuwanie widżetu nie powiodło się @@ -1968,7 +1944,7 @@ Nie udało się zaimportować kluczy Oczekiwanie na %s… Prawie gotowe! Oczekiwanie na potwierdzenie… - Prawie gotowe! Czy drugie urządzenie pokazuje taką samą tarczę\? + Prawie gotowe! Czy drugie urządzenie pokazuje tarczę\? "Temat: " Dodaj temat %s aby poinformować innych czego dotyczy konwersacja w tym pokoju. @@ -2061,9 +2037,9 @@ Dodaj Kopiuj Zakończ rozmowę - Zresetuj + Zresetuj Tryb samolotowy jest włączony - Prawie gotowe! Czy %s pokazuje taką samą tarczę\? + Prawie gotowe! Czy %s pokazuje tarczę\? Twój administrator serwera zablokował domyślne szyfrowanie punkt-punkt (e2e) w pokojach prywatnych w Wiadomościach Bezpośrednich. Nie masz uprawnień żeby uaktywnić szyfrowanie w tym pokoju. Wiadomość bezpośrednia @@ -2077,7 +2053,6 @@ Wiadomości tutaj nie są zaszyfrowane w trybie punkt-punkt (e2e). Weryfikacja wniosków Zareagowano: %s - Przyciski botów Tworzenie pokoju… Niektóre znaki nie są dozwolone Podaj adres pokoju @@ -2480,8 +2455,8 @@ Usunąłeś(aś) alternatywny adres %1$s dla tego pokoju. Usunąłeś(aś) alternatywne adresy %1$s dla tego pokoju. - - + Usunąłeś(aś) alternatywne adresy %1$s dla tego pokoju. + Usunąłeś(aś) alternatywne adresy %1$s dla tego pokoju. %1$s ustawił(a) główny adres tego pokoju na %2$s. @@ -2730,8 +2705,8 @@ Będą w stanie przeglądać %s Zaproś do %s Udostępnij link - Zaproś przez nazwę użytkownika lub email - Zaproś przez nazwę użytkownika + Zaproś przez nazwę użytkownika lub email + Zaproś przez nazwę użytkownika Zaproś przez email Aktualnie jesteś tylko Ty. %s będzie jeszcze lepsza kiedy dołączą inni. Zaproś do %s @@ -2871,7 +2846,7 @@ Opinie Synchronizacja klucza samopodpisującego (Self Signing key) Weryfikacja ręczna poprzez tekst - lub innego klienta Matrix z krzyżową weryfikacją nowych sesji logowania + lub innego klienta Matrix z krzyżową weryfikacją nowych sesji logowania Nie masz uprawnień do zmiany poziomu pokoju Oczekiwanie na historię szyfrowania Ten pokój pracuje na wersji pokoju %s, którą serwer domowy oznaczył jako niestabilną. @@ -3056,4 +3031,39 @@ Powiąż ten email ze swoim kontem Stwórzmy pokój dla każdego z nich. Możesz potem dodać kolejne, także te już istniejące. Nad czym pracujesz\? + Czy na pewno chcesz usunąć ankietę\? Nie będziesz w stanie jej odzyskać po usunięciu. + + Aktywne połączenie · + %1$d aktywnych połączeń · + %1$d aktywnych połączeń · + %1$d aktywnych połączeń · + + + Nieaktywne połączenie + %1$d nieaktywnych połączeń + %1$d nieaktywnych połączeń + %1$d nieaktywnych połączeń + + Zgadzasz się na wysłanie tych informacji\? + Ustawienia systemu + Wersje + Pomoc i wsparcie + Pomoc + Biblioteki zewnętrzne + Możesz to wyłączyć kiedy zechcesz w ustawieniach + Nie udostępniamy informacji podmiotom trzecim + Nie zbieramy i nie profilujemy danych użytkownika + tutaj + Pomóż nam znaleźć błędy i ulepszyć Element poprzez udostępnianie anonimowych danych użytkowania. Aby lepiej zrozumieć jak użytkownicy wykorzystują wiele urządzeń wygenerujemy losowy identyfikator dzielony pomiędzy Twoimi urządzeniami. +\n +\nWięcej informacji %s. + Pomóż usprawnić Element + Nie teraz + Włącz + + Usunąłeś(aś) %1$s jako adres tego pokoju. + Usunąłeś(aś) %1$s jako adresy tego pokoju. + Usunąłeś(aś) %1$s jako adresy tego pokoju. + Usunąłeś(aś) %1$s jako adresy tego pokoju. + \ No newline at end of file diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index de861e0e2f..f0aa98ca56 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -39,24 +39,16 @@ %1$s enviou um convite para %2$s para se juntar à sala %1$s aceitou o convite para %2$s ** Incapaz de decriptar: %s ** - O dispositivo do/da enviador(a) não nos enviou as chaves para esta mensagem. - + O dispositivo do/da enviador(a) não nos enviou as chaves para esta mensagem. Não foi possível redigir Não foi possível enviar mensagem Falha para fazer upload de imagem - Erro de rede Erro de Matrix - - - - Não é atualmente possível se re-juntar a uma sala vazia. - Endereço de email Número de telefone %1$s enviou um sticker. - Convite de %s Convite de Sala %1$s e %2$s @@ -271,7 +263,6 @@ Conferência de vídeo terminada por %1$s Você começou conferência de vídeo Conferência de vídeo começada por %1$s - Mensagens Sala Configurações @@ -280,23 +271,22 @@ Aceitar Declinar Desligar - OK - Cancelar - Salvar - Sair - Enviar - Reenviar - Remover - Citar - Compartilhar + Cancelar + Salvar + Sair + Enviar + Reenviar + Remover + Citar + Compartilhar Mais Tarde - Encaminhar + Encaminhar Permalink Visualizar Fonte Visualizar Fonte Decriptada - Deletar - Renomear + Deletar + Renomear Reportar Conteúdo Chamada ativa Chamada de conferência em curso. @@ -311,43 +301,36 @@ Chamadas de conferência não são suportadas em salas encriptadas Enviar Mesmo Assim ou - Convidar - + Convidar Fazer signout Chamar por Voz Chamar por Vídeo Pesquisa global Marcar tudo como lido Histórico - Responder rápido + Resposta rápida Abrir Fechar Copiado para clipboard - Desabilitar - + Desabilitar Confirmação Aviso - Home Favoritos Pessoas Salas - Filtrar nomes de salas Filtrar favoritos Filtrar pessoas Filtrar nomes de salas - Convites Baixa prioridade - Conversas Agenda de endereços local Contatos de Matrix somente Nenhuma conversa Você não permitiu que ${app_name} acesse seus contatos locais Nenhum resultado - Salas Diretório de salas Nenhuma sala @@ -383,7 +366,6 @@ Começar Chamada de Vídeo Enviar arquivos Tirar foto ou vídeo - Fazer login Criar Conta Submeter @@ -431,7 +413,6 @@ Sua senha tem sido resettada. \n \nVocê tem sido feito logout de todas as sessões e não vai mais receber notificações push. Para re-habilitar notificações, re-faça login em cada dispositivo. - URL deve começar com http[s]:// Incapaz de fazer login: Erro de rede Incapaz de fazer login @@ -446,28 +427,20 @@ Requisições demais tem sido enviadas Este nome de usuária(o) já é usado O link de email que não tem sido clicado ainda - - Lista de Recibos de Leitura - - Enviar como Original Grande Médio Pequeno - Cancelar o download? Cancelar o upload\? %d s %1$dm %2$ds - Ontem Hoje - Nome de sala Tópico de sala - Chamada conectada Chamada conectando… Chamada terminada @@ -480,10 +453,8 @@ Conexão de Mídia Falhou Não é possível inicializar a câmera chamada atendida em algum outro lugar - Tirar uma foto ou um vídeo Não é possível gravar vídeo - Informação ${app_name} precisa de permissão para acessar sua biblioteca de fotos e vídeos para enviar e salvar anexos. \n @@ -504,31 +475,25 @@ \n \nVocê concorda em compartilhar seu livro de endereços para este propósito\? Desculpe. Ação não performada, devido a permissões faltando - Salvo Salvar em downloads\? SIM NÃO Continuar - - Remover - Juntar-se - Previsualizar - Rejeitar - + Remover + Juntar-se + Previsualizar + Rejeitar Pular para não-lida(s) - Você tem sido convidada(o) para se juntar a esta sala por %s Este convite foi enviado para %s, que não está associada(o) com esta conta. \nVocê pode desejar fazer login com uma conta diferente, ou adicionar este email a sua conta. Você está tentando acessar %s. Você gostaria de se juntar a fim de participar na discussão\? uma sala Esta é uma previsualização desta sala. Interações de sala têm sido desabilitadas. - Novo Chat Adicionar membro 1 membro - Sair de sala Você tem certeza que você quer sair da sala\? Você tem certeza que você quer remover %s deste chat\? @@ -556,14 +521,12 @@ Você não vai ser capaz de desfazer esta mudança já que você está promovendo a(o) usuária(o) para ter o mesmo nível de poder que você. \nVocê tem certeza\? Você tem certeza você que quer convidar %s para este chat\? - Convidar por ID CONTATOS LOCAIS (%d) Usuárias(os) Matrix somente Convidar usuária(o) por ID Por favor entre um ou mais endereços de email ou ID Matrix Email ou ID Matrix - Pesquisar %s está digitando… %1$s & %2$s estão digitando… @@ -579,7 +542,6 @@ Deletar mensagens não-enviadas Arquivo não encontrado Você não tem permissão para postar nesta sala. - Confiar Não confiar Fazer logout @@ -591,7 +553,6 @@ O certificado tem mudado de um que era confiado por seu telefone. Isto é ALTAMENTE INCOMUM. É recomendado que você NÃO ACEITE este novo certificado. O certificado tem mudado de um previamente confiado para um que não é confiado. O servidor pode ter renovado seu certificado. Contacte o/a administrador(a) de servidor para a impressão digital esperada. Somente aceite o certificado se o/a administrador(a) de servidor tem publicado uma impressão digital que corresponde com a acima. - Detalhes de Sala Pessoas Arquivos @@ -599,14 +560,12 @@ ID malformada. Devia ser um endereço de email ou uma ID Matrix como \'@partlocal:dominio\' CONVIDADAS(OS) SE JUNTARAM - Razão por reportar este conteúdo Você quer esconder todas as mensagens desta(e) usuária(o)\? \n \nNote que esta ação vai recomeçar o app e pode levar algum tempo. Cancelar Upload Cancelar Download - Pesquisar Filtrar membros de sala Nenhum resultado @@ -614,28 +573,13 @@ MENSAGENS PESSOAS ARQUIVOS - - JUNTAR-SE - DIRETÓRIO - FAVORITOS - SALAS - BAIXA PRIORIDADE - CONVITES - Começar chat - Criar sala - Juntar-se a sala - Juntar-se a uma sala - Digite uma id de sala ou um alias de sala - Navegar diretório Pesquisando diretório… - Favoritar Des-prioritizar Chat Direto Sair de Conversa Esquecer - Mensagens Configurações Versão @@ -643,7 +587,6 @@ Notas de terceiros Copyright Política de privacidade - Imagem de Perfil Nome de Exibição Email @@ -665,13 +608,12 @@ Timeout de requisição de sinc Delay entre casa Sinc Versão - versão de olm + Versão de olm Termos & condições Notas de terceiros Copyright Política de privacidade Limpar cache - Configurações de usuária(o) Notificações Usuárias(os) ignoradas(os) @@ -727,37 +669,29 @@ Entre um código de ativação Erro enquanto validando seu número de telefone Código - - Foto da Sala Nome de Sala Tópico Etiqueta da Sala Etiquetada como: - Favoritar Baixa prioridade Nenhuma - Acesso e visibilidade Listar esta sala em diretório de salas Acesso a Sala Legibilidade de Histórico de Sala Quem pode ler o histórico\? Quem pode acessar esta sala? - Qualquer pessoa Membros somente (desde o ponto no tempo de seleção desta opção) Membros somente (desde que eles foram convidados) Membros somente (desde que eles se juntaram) - Para linkar a uma sala ela deve ter um endereço. Somente pessoas que têm sido convidadas Qualquer pessoa que sabe o link da sala, a parte de visitantes Qualquer pessoa que sabe o link da sala, incluindo visitantes - Usuárias(os) banidas(os) - Avançadas ID interno desta sala Endereços @@ -768,7 +702,6 @@ Você precisa fazer logout para ser capaz de habilitar a encriptação. Encriptar para sessões verificadas somente Nunca enviar mensagens encriptadas para sessões não-confirmadas nesta sala desta sessão. - Esta sala não tem nenhum endereço local Novo endereço (e.g. #foo:matrix.org) Formato de alias inválido @@ -783,11 +716,8 @@ Encriptação está desabilitada nesta sala. Habilitar encriptação \n(aviso: não pode ser desabilitada de novo!) - Diretório - %s estava tentando carregar um ponto específico na timeline desta sala mas foi incapaz de encontrá-lo. - Informação de encriptação ponta-a-ponta Informação de evento Id de usuária(o) @@ -831,21 +761,18 @@ Confirme ao comparar o seguinte com as Configurações de Usuária(o) em sua outra sessão: Se não corresponderem, a segurança de sua comunicação pode estar comprometida. Eu verifico que as chaves correspondem - Sala contém sessões desconhecidas Esta sala contém sessões desconhecidas que não têm sido verificadas. \nIsto significa que não há nenhuma garantia que as sessões pertencem às/aos usuárias(os) às/aos quais elas clamam pertencer. \nNós recomendamos que você passe pelo processo de verificação para cada sessão antes de continuar, mas você pode reenviar a mensagem sem verificar se você preferir. \n \nSessões desconhecidas: - Selecionar um diretório de salas O servidor pode estar indisponível ou sobrecarregado Digite um servidorcasa para de onde listar salas públicas Nome de servidor Todas as salas em servidor %s Todas as salas nativas de %s - Pesquisar por histórico Offline Diretório de usuárias(os) @@ -917,7 +844,6 @@ Criação de widget tem falhado Criar chamadas de conferência com jitsi Você tem certeza que você quer deletar o widget desta sala\? - Incapaz de criar widget. Falha para enviar requisição. Nível de poder deve ser um inteiro positivo. @@ -928,30 +854,24 @@ Sala %s não está visível. Adicionar apps Matrix Usar câmera nativa - Você adicionou uma nova sessão \'%s\', que está requisitando chaves de encriptação. Sua sessão não-verificada \'%s\' está requisitando chaves de encriptação. Começar verificação Compartilhar sem verificar Ignorar requisição - Aviso! Chamamento de conferência está em desenvolvimento e pode não ser estável. - Erro de comando Comando irreconhecido: %s - Desativada Barulhenta Mensagem encriptada - Criar Criar Comunidade Nome da comunidade Exemplo ID de comunidade exemplo - Home Pessoas Salas @@ -1012,7 +932,6 @@ %d widget ativo %d widgets ativos - Avatar de recibo Avatar de nota Avatar @@ -1022,9 +941,9 @@ O app precisa de permissão para rodar no background Enviar um sticker Licenças de terceiros - Fazer Download - Falar - Limpar + Fazer Download + Falar + Limpar Devido a permissões faltando, esta ação não é possível. Alertas de Sistema Se possível, por favor escreva a descrição em Inglês. @@ -1136,7 +1055,7 @@ Por favor %s para ter este limite aumentado. Por favor %s para continuar usando este serviço. Por favor crie uma frasepasse para encriptar as chaves exportadas. Você vai precisar entrar a mesma frasepasse para ser capaz de importar as chaves. - Aceitar + Aceitar Erro Por favor revise e aceite as políticas deste servidorcasa: Chamadas @@ -1261,10 +1180,10 @@ Fazer backup Você vai perder acesso a suas mensagens encriptadas a menos que faça backup de suas chaves antes de fazer signout. Assinatura - Ficar - Pular + Ficar + Pular Feito - Abortar + Abortar Você tem certeza que você quer fazer sign out\? Configurações de Notificações Avançadas Importância de notificação por evento @@ -1275,7 +1194,7 @@ Checar Configurações [%1$s] \nEste erro está fora de controle de ${app_name} e de acordo com Google, este erro indica que o dispositivo tem apps demais registrados com FCM. O erro somente ocorre em casos onde há números extremos de apps, então isso não devia afetar a/o usuária(o) média(o). - Ignorar + Ignorar Fazer sign-in com sign-on único Este URL não é alcançável, por favor cheque-o Seu dispositivo está usando um protocolo de segurança TLS desatualizado, vulnerável a ataque, para sua segurança você não vai ser capaz de se conectar @@ -1293,16 +1212,16 @@ Enviar mensagem com enter Verificar sessão Nenhum - Revogar - Desconectar - Revisar - Declinar + Revogar + Desconectar + Revisar + Declinar Marcar como lida Nenhum servidor de identidade configurado. Chamada falhou devido a servidor malconfigurado - Tocar - Pausar - Descartar + Tocar + Pausar + Descartar Copiar Sucesso Notificações @@ -1645,8 +1564,8 @@ Salas Suas salas vão ser exibidas aqui. Toque no + à direita fundo para encontrar umas existentes ou começar algumas propriamente suas. Reações - Concordo - Curtir + Concordo + Curtir Adicionar Reação Visualizar Reações Reações @@ -2129,15 +2048,6 @@ Modo avião está ligado Ferramentas Dev Dados de Conta - - %d voto - %d votos - - - %d voto - Resultados finais - %d votos - Resultados finais - - Opção Selecionada Cria uma sondagem simples Use uma Chave ou a Frasepasse de Recuperação Se você não pode acessar uma sessão existente @@ -2273,7 +2183,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - ou um outro cliente Matrix capaz de assinatura cruzada + ou um outro cliente Matrix capaz de assinatura cruzada Use o ${app_name} mais recente em seus outros dispositivos: Força a atual sessão de grupo de saída em uma sala encriptada a ser descartada Somente suportado em salas encriptadas @@ -2443,7 +2353,6 @@ Este número de telefone já está definido. Mostrar eventos de estado de membros de sala Sondagem - Botões de Bot Reagiu com: %s Conclusão de Verificação Deletar os dados de conta de tipo %1$s\? @@ -2492,7 +2401,7 @@ Pesquisar em salas encriptadas não é suportado ainda. Você não tem permissão para começar uma chamada Você não tem permissão para começar uma chamada de conferência - Resettar + Resettar %1$s fez isto somente convite. Você fez isto somente convite. %s juntou-se. @@ -2787,7 +2696,7 @@ Elas não vão fazer parte de %s Só a esta sala Compartilhar link - Convidar por nome de usuária(o) + Convidar por nome de usuária(o) Convidar por email Convidar pessoas Boas-vindas a %1$s, %2$s. @@ -3029,7 +2938,7 @@ Convidar por email, encontrar contatos e mais… Termine de configurar descoberta. Você não está atualmente usando um servidor de identidade. A fim de convidar colegas e ser descobertável por elas(es), configure um abaixo. - Convidar por nome de usuária(o) ou mail + Convidar por nome de usuária(o) ou mail Assegure que as pessoas certas têm acesso a companhia %s. Você pode convidar outras mais tarde. Quem são suas/seus colegas\? Adicionar ao dado Espaço @@ -3102,4 +3011,50 @@ Você concorda em enviar esta info\? Para descobrir contatos existentes, você precisa enviar info de contato (emails e números de telefone) para seu servidor de identidade. Nós hashamos seus dados antes de enviar por privacidade. Não agora + Você tem certeza que você quer remover esta sondagem\? Você não vai ser capaz de recuperá-la uma vez removida. + Remover sondagem + Sondagem terminada + Voto lançado + Habilitar Sondagens + Terminar sondagem + Isto vai parar pessoas de serem capazes de votar e vai exibir os resultados finais da sondagem. + Terminar esta sondagem\? + opção vencedora + Terminar sondagem + + Resultado final baseado em %1$d voto + Resultado final baseado em %1$d votos + + + %1$d voto lançado. Vote para ver os resultados + %1$d votos lançados. Vote para ver os resultados + + + Baseado em %1$d voto + Baseado em %1$d votos + + + %1$d voto + %1$d votos + + Versões + Conseguir ajuda com uso de Element + Jurídicos + Este servidor não provê nenhuma política. + Bibliotecas de terceiros + A política de seu servidor de identidade + A política de seu servidorcasa + Política de ${app_name} + Nós não gravamos ou perfilamos quaisquer dados de conta + Ajude-nos a identificar problemas e melhorar Element ao compartilhar dados de uso anônimos. Para entender como pessoas usam seus múltiplos dispositivos, nós vamos gerar um identificador aleatório, compartilhado por seus dispositivos. +\n +\nVocê pode ler todos os nossos termos %s. + Ajudar a melhorar Element + Configurações de sistema + Ajuda e suporte + Ajuda + Você pode desativar isto a qualquer hora em configurações + Nós não compartilhamos informação com terceiros + aqui + Habilitar \ No newline at end of file diff --git a/vector/src/main/res/values-pt/strings.xml b/vector/src/main/res/values-pt/strings.xml index b4aa314cba..76d5aa1ebe 100644 --- a/vector/src/main/res/values-pt/strings.xml +++ b/vector/src/main/res/values-pt/strings.xml @@ -39,23 +39,15 @@ %1$s enviou um convite para que %2$s se junte à sala %1$s aceitou o convite para %2$s ** Impossível decifrar: %s ** - O dispositivo de quem enviou a mensagem não nos enviou as chaves para esta mensagem. - + O dispositivo de quem enviou a mensagem não nos enviou as chaves para esta mensagem. Não foi possível apagar Não foi possível enviar a mensagem O envio da imagem falhou - Erro de conexão à Internet Erro do Matrix - - - - Ainda não é possível voltar a entrar numa sala vazia. - Endereço de e-mail Número de telefone - Convite de %s Convite para sala %1$s e %2$s @@ -64,29 +56,27 @@ %s fez o upgrade da sala. Mensagem removida Mensagem removida por %1$s - Mensagens Sala Definições Detalhes dos Membros Histórico - OK - Cancelar - Guardar - Sair - Enviar - Reenviar - Apagar - Citar - Partilhar + Cancelar + Guardar + Sair + Enviar + Reenviar + Apagar + Citar + Partilhar Depois - Encaminhar + Encaminhar Link permanente Ver fonte Ver o original decifrado - Apagar - Renomear + Apagar + Renomear Denunciar conteúdo Chamada ativa Chamada de grupo em curso.\nJunte-se por %1$s ou %2$s. @@ -100,8 +90,7 @@ Chamadas de conferência não são suportadas em salas cifradas Enviar na mesma ou - Convidar - + Convidar Sair Chamada de voz Chamada de vídeo @@ -112,31 +101,25 @@ Abrir Fechar Copiado para a área de transferência - Desativar - + Desativar Confirmação Aviso - Início Favoritos Pessoas Salas - Pesquisar salas Pesquisar favoritos Pesquisar pessoas Pesquisar salas - Convites Prioridade baixa - Conversas Lista de endereços local Apenas contactos do Matrix Não há conversas Não permitiu ao ${app_name} aceder aos seus contactos locais Sem resultados - Salas Lista de salas Sem salas @@ -172,7 +155,6 @@ Iniciar chamada de vídeo Enviar ficheiros Capturar foto ou vídeo - Iniciar sessão Registar Enviar @@ -220,7 +202,6 @@ Poderá adicionar o seu email ao seu perfil nas definições. A sua senha foi redefinida. A sessão foi terminada em todos os dispositivos e não receberá mais notificações. Para reactivar as notificações, inicie sessão novamente em cada um dos dispositivos. - URL tem que começar com http[s]:// Não foi possível iniciar sessão: Erro de rede Não foi possível iniciar sessão @@ -235,28 +216,20 @@ A sessão foi terminada em todos os dispositivos e não receberá mais notifica Foram enviados demasiados pedidos Este nome de utilizador já está a ser usado O link no email ainda não foi clicado - - Ler lista de recibos de leitura - - Enviar como Original Grande Média Pequena - Cancelar a transferência? Cancelar o envio? %d s %1$dm %2$ds - Ontem Hoje - Nome da sala Tópico da sala - Chamada estabelecida A estabelecer a chamada… Chamada terminada @@ -269,10 +242,8 @@ A sessão foi terminada em todos os dispositivos e não receberá mais notifica A ligação multimédia falhou Não foi possível iniciar a câmara chamada respondida noutro sítio - Tirar fotografia ou gravar um vídeo Não foi possível gravar vídeo - Informação O ${app_name} necessita de permissão para aceder ao seu armazenamento de fotos e vídeos para poder enviar e guardar anexos. @@ -295,31 +266,25 @@ Por favor, permita o acesso na próxima janela para poder encontrar utilizadores Permitir ao ${app_name} aceder aos seus contactos? Desculpe… A ação não foi realizada, por falta de permissões - Guardado Guardar nas transferências? SIM NÃO Continuar - - Remover - Entrar - Visualizar - Rejeitar - + Remover + Entrar + Visualizar + Rejeitar Ir para a primeira mensagem não lida. - Foi convidado para entrar nesta sala por %s Este convite foi enviado para %s, que não está associado com esta conta. Pode querer iniciar sessão com uma conta diferente, ou adicionar este email à sua conta. Está a tentar aceder a %s. Quer entrar na sala para poder participar na conversa? uma sala Isto é uma pré-visualização desta sala. As interações com a sala foram desativadas. - Nova conversa Adicionar membro 1 membro - Sair da sala Tem a certeza que quer sair da sala? Tem certeza que quer remover %s desta conversa? @@ -347,14 +312,12 @@ Pode querer iniciar sessão com uma conta diferente, ou adicionar este email à Não poderá reverter esta alteração visto que está a promover este utilizador para ter o mesmo nível de permissões que você. Tem a certeza? Tem a certeza que quer convidar %s para esta conversa? - Invite by ID CONTACTOS LOCAIS (%d) Apenas utilizadores Matrix Convidar utilizador por ID Insira um ou mais endereços de e-mail ou IDs Matrix E-mail ou ID Matrix - Pesquisar %s está a escrever… %1$s e %2$s estão a escrever… @@ -370,7 +333,6 @@ Tem a certeza? Apagar mensagens não enviadas Ficheiro não encontrado Não tem permissão para enviar mensagens nesta sala - Confiar Não confiar Sair @@ -382,7 +344,6 @@ Tem a certeza? O certificado mudou de um que era confiado pelo seu telefone. Isto é ALTAMENTE INVULGAR. Recomendamos que NÃO ACEITE este novo certificado. O certificado mudou de um que era anteriormente confiável para um que não é confiável. O servidor pode ter renovado o seu certificado. Contacte o administrador do servidor para obter a impressão digital expectável. Apenas aceite o certificado se o administrador do servidor publicou uma impressão digital que corresponde à impressão digital acima. - Detalhes da sala Pessoas Ficheiros @@ -390,14 +351,12 @@ Tem a certeza? ID mal formatado. Tem que ser um endereço de e-mail ou um ID Matrix como por exemplo \'@utilizador:domínio\' CONVIDADOS ENTRARAM - Motivos para denunciar este conteúdo Deseja ocultar todas as mensagens deste utilizador? Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo. Cancelar envio Cancelar transferência - Pesquisar Filtrar membros da sala Nenhum resultado @@ -405,28 +364,13 @@ Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo.< MENSAGENS PESSOAS FICHEIROS - - ENTRAR - LISTAGEM - FAVORITOS - SALAS - BAIXA PRIORIDADE - CONVITES - Iniciar conversa - Criar sala - Entrar na sala - Entrar numa sala - Insira o id ou o pseudónimo da sala - Navegar diretório A pesquisar o directório… - Adicionar aos favoritos Baixa prioridade Conversa direta Deixar a conversa Esquecer - Mensagens Definições Versão @@ -434,7 +378,6 @@ Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo.< Licenças de terceiros Direitos de autor Política de privacidade - Imagem do perfil Nome a apresentar E-mail @@ -462,7 +405,6 @@ Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo.< Direitos de autor Política de privacidade Limpar cache - Definições de utilizador Notificações Utilizadores ignorados @@ -518,37 +460,29 @@ Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo.< Insira o código de ativação Erro ao validar o seu número de telefone Código - - Foto da sala Nome da sala Tópico Etiqueta da sala Etiquetada como: - Adicionar aos favoritos Baixa prioridade Nenhum - Acesso e visibilidade Listar esta sala no diretório público de salas Acesso à sala Acesso ao histórico da sala Quem pode ler o histórico? Quem pode aceder a esta sala? - Qualquer pessoa Apenas membros (a partir do momento em que esta opção foi escolhida) Apenas membros (desde que foram convidados) Apenas membros (desde que entraram) - Para referenciar uma sala, ela necessita de ter um endereço. Apenas as pessoas que foram convidadas Qualquer pessoa que saiba o endereço da sala, exceto visitantes Qualquer pessoa que saiba o endereço da sala, incluindo visitantes - Utilizadores banidos - Avançadas ID interno desta sala Endereços @@ -559,7 +493,6 @@ Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo.< Precisa sair da sua conta para poder ativar a criptografia. Cifrar apenas para dispositivos verificados Nunca enviar mensagens cifradas para dispositivos não verificados nesta sala a partir deste dispositivo. - Esta sala não tem endereços locais Novo endereço (por exemplo: #foo:matrix.org) Formato inválido de endereço (alias) @@ -574,11 +507,8 @@ Note que esta acção irá reiniciar a aplicação e poderá levar algum tempo.< Criptografia está desativada nesta sala. Ativar criptografia (atenção: não é possível desativar novamente!) - Diretório - %s estava a tentar carregar um ponto específico do histórico da sala mas não foi possível encontrá-lo. - Informação sobre criptografia ponta-a-ponta Informação do evento ID do utilizador @@ -622,21 +552,18 @@ Atenção: este ficheiro poderá ser apagado se a aplicação for desinstalada.< Para confirmar que este dispositivo pode ser considerado confiável, entre em contacto com o seu dono usando outros meios (p. ex. pessoalmente ou através de uma chamada telefónica) e pergunte-lhe se a chave que ele vê nas suas Definições de Utilizador para este dispositivo é igual à chave abaixo: Se é igual, clique no botão verificar, abaixo. Se não é igual, então alguém está a interceptar este dispositivo e você poderá querer colocá-lo na lista negra. No futuro, este processo de verificação irá ser mais sofisticado. Eu confirmo que as chaves são iguais - A sala contém dispositivos desconhecidos Esta sala contém dispositivos desconhecidos que não foram verificados. Isso significa que não existe a garantia de que estes dispositivos pertencem a quem dizem pertencer. Recomendamos que faça o processo de verificação para cada dispositivo antes de continuar, mas você pode reenviar a mensagem sem efetuar a verificação se preferir. Dispositivos desconhecidos: - Selecione um diretório de salas O servidor pode estar indisponível ou sobrecarregado Insira um servidor a partir do qual listar as suas salas públicas URL do servidor (Homeserver) Todas as salas no servidor %s Todas as nativas de %s - Procurar histórico Manter ficheiros multimédia Mostrar sempre a hora das mensagens @@ -671,7 +598,6 @@ Dispositivos desconhecidos: Criação de widget falhou Criar chamadas de conferência com o jitsi Tem a certeza que quer remover o widget? - Não foi possível criar o widget. O envio do pedido falhou. Nível de utilizador tem que ser um inteiro positivo. @@ -690,9 +616,9 @@ Dispositivos desconhecidos: Enviar um autocolante Licenças de terceiros A carregar… - Descarregar - Falar - Limpar + Descarregar + Falar + Limpar Esta acção não é possível por falta de permissões. Sair Acções @@ -946,7 +872,7 @@ A visibilidade das mensagens no Matrix é parecida com a dos emails. O nosso esq Tem a certeza? Fazer Backup Irá perder acesso as suas mensagens encriptadas, se não fizer backup de suas chaves, antes de abandonar esta página. - Ficar + Ficar Utilize Backup de chaves Se sair desta página, irá perder as suas mensagens encriptadas Não quero as minhas mensagens encriptadas @@ -968,10 +894,10 @@ A visibilidade das mensagens no Matrix é parecida com a dos emails. O nosso esq Novo Backup de Chaves Apagando Backup … Ligar na mesma - Passar + Passar Terminado - Abortar - Aceitar + Abortar + Aceitar Tem a certeza que quer Sair? Apagar Backup Por favor veja e aceite, apolice para este servidor diff --git a/vector/src/main/res/values-ro/strings.xml b/vector/src/main/res/values-ro/strings.xml index 464a590f62..963cd405c0 100644 --- a/vector/src/main/res/values-ro/strings.xml +++ b/vector/src/main/res/values-ro/strings.xml @@ -183,12 +183,10 @@ %d camere %d de camere - CAMERE CAMERE Camere Camere sugerate Camere - FAVORITE Favorite Preferințe Adresă de e-mail @@ -335,10 +333,10 @@ Administrează camerele Revocați ignorarea utilizatorului Video - Șterge - Părăsește - Salvează - Anulează + Șterge + Părăsește + Salvează + Anulează Verificați sesiunea Invitația ta. Motivul: %1$s Invitația trimisă de %1$s. Motivul: %2$s @@ -389,7 +387,7 @@ A apărut o eroare în timpul incărcării imaginii Nu s-a putut trimite mesajul Nu se poate redacta - Dispozitivul expeditorului nu a trimis cheile de decriptare pentru acest mesaj. + Dispozitivul expeditorului nu a trimis cheile de decriptare pentru acest mesaj. Acum sunt blocate serverele ce au adrese IP ce se potrivesc. Acum sunt permise serverele ce au adrese IP ce se potrivesc. Sunt blocate serverele ce au adrese IP ce se potrivesc. diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index ad395de686..20bd6fd55a 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -39,24 +39,16 @@ %1$s отправил(а) приглашение %2$s присоединиться к комнате %1$s принял(а) приглашение от %2$s ** Невозможно расшифровать: %s ** - Устройство отправителя не предоставило нам ключ для расшифровки этого сообщения. - + Устройство отправителя не предоставило нам ключ для расшифровки этого сообщения. Не удалось изменить Не удалось отправить сообщение Не удалось загрузить изображение - Сетевая ошибка Ошибка Matrix - - - - В настоящее время невозможно вновь присоединиться к пустой комнате. - Адрес электронной почты Номер телефона %1$s отправил стикер. - Приглашение от %s Приглашение в комнату %1$s и %2$s @@ -286,7 +278,6 @@ %1$s завершил(а) видеоконференцию Вы начали видеоконференцию %1$s начал(а) видеоконференцию - Сообщения Комната Настройки @@ -295,23 +286,22 @@ Принять Отклонить Завершить звонок - OK - Отмена - Сохранить - Покинуть - Отправить - Повторить отправку - Удалить - Цитировать - Поделиться + Отмена + Сохранить + Покинуть + Отправить + Повторить отправку + Удалить + Цитировать + Поделиться Позже - Переслать + Переслать Копировать ссылку Просмотр исходного кода Просмотр расшифрованного исходного кода - Удалить - Переименовать + Удалить + Переименовать Пожаловаться на содержимое Активный вызов Ongoing conference call. @@ -326,8 +316,7 @@ Конференц звонки не поддерживаются в зашифрованных комнатах Все равно отправить или - Приглашение - + Приглашение Выйти из учётной записи Голосовой вызов Видео вызов @@ -338,31 +327,25 @@ Открыть Закрыть Скопировано в буфер - Отключить - + Отключить Подтверждение Предупреждение - Начало Избранные Люди Комнаты - Фильтр названия комнаты Фильтр избранного Фильтр людей Фильтр названия комнаты - Приглашения Маловажные - Беседы Локальные контакты Только Matrix контакты Нет диалогов Вы не дали доступ ${app_name} к внутренним контактам Нет результатов - Комнаты Список комнат Нет комнат @@ -400,7 +383,6 @@ Начать видеовызов Отправить файлы Камера - Вход Создать аккаунт Отправить @@ -448,7 +430,6 @@ Ваш пароль сброшен. \n \nОсуществлен выход на всех сессиях - вы не будете получать push уведомления. Для включения push уведомлений заново войдите на каждом из ваших устройств. - URL должен начинаться с http[s]:// Сбой входа: сетевая ошибка Сбой входа @@ -463,28 +444,20 @@ Отправлено слишком много запросов Логин уже используется Вы не перешли по высланной в email ссылке - - Чтение списка вступивших - - Отправить как Оригинал Крупный Средний Мелкий - "Отменить загрузку? Отменить загрузку? %d с %1$dм %2$dс - Вчера Сегодня - Название комнаты Тема комнаты - Вызов соединён Устанавливается соединение… Вызов закончен @@ -497,10 +470,8 @@ Медиавызов не удался Невозможно инициализировать камеру Звонок принят на другом устройстве - Снять фото или видео" Не удалось записать видео" - Element Информация ${app_name} нуждается в разрешении на доступ к вашей фото-и видеотеке для отправки и сохранения вложений. \n @@ -517,31 +488,25 @@ \n \nСогласны ли вы поделиться своей адресной книгой для этой цели\? Извините. Действие не выполнено из-за недостаточных разрешений - Сохранено Сохранить в загрузки? ДА НЕТ Продолжить - - Удалить - Присоединиться - Просмотр - Отклонить - + Удалить + Присоединиться + Просмотр + Отклонить Перейти к непрочитанному - %s пригласил вас присоединиться к этой комнате Приглашение пришло на адрес %s, который не связан с этим аккаунтом. \nВозможно, вы захотите войти в систему с другим аккаунтом или добавить этот email в свою учетную запись. Вы пытаетесь получить доступ к %s. Хотите присоединиться к обсуждению? комната Это пред. просмотр комнаты. Вы в режиме только чтения. - Новый чат Добавить участника 1 пользователь - Покинуть комнату Вы уверены, что хотите выйти из комнаты\? Вы уверены, что хотите исключить %s из чата? @@ -569,14 +534,12 @@ Вы не сможете отменить это действие, поскольку пользователь получит такой же уровень доступа, как и у вас. \nВы уверены\? "Вы уверены что хотите пригласить %s в этот чат?" - Пригласить по ID Локальные Контакты (%d) Только зарегистрированные Пригласить пользователя по ID Пожалуйста, введите один или несколько адресов email или Matrix ID Email или Matrix ID - Поиск %s печатает… %1$s & %2$s печатают… @@ -592,7 +555,6 @@ Удалить неотправленные сообщения Файл не найден У вас нет прав писать сообщения в этом чате. - Доверять Не доверять Выйти @@ -604,7 +566,6 @@ Сертификат сервера изменился и ваш телефон теперь ему не доверяет. Это ОЧЕНЬ ПОДОЗРИТЕЛЬНО. Рекомендуется, НЕ ДОВЕРЯТЬ этому новому сертификату. Сертификат изменился с ранее доверенного на недействительный. Возможно, сервер обновил свой сертификат. Свяжитесь с администратором сервера для получения ожидаемого отпечатка сертификата. Примите сертификат только если администратор сервера опубликовал отпечаток сертификата, который соответствует указанному выше. - Подробности комнаты Люди Файлы @@ -612,14 +573,12 @@ Некорректный ID. Используйте email или Matrix ID вида \'@localpart:domain\' ПРИГЛАШЕНЫ ПРИСОЕДИНИЛИСЬ - Причина отчета о контенте Вы хотите скрыть все сообщения этого пользователя\? \n \nУчтите, что это действие перезапустит приложение и может занять некоторое время. Отменить загрузку Отменить загрузку - Поиск Фильтр списка пользователей Нет результатов @@ -627,28 +586,13 @@ СООБЩЕНИЯ ЛЮДИ ФАЙЛЫ - - ПРИСОЕДИНИЛИСЬ - КАТАЛОГ - ИЗБРАННОЕ - КОМНАТЫ - МАЛОВАЖНЫЕ - ПРИГЛАШЕНИЯ - Начать чат - Создать комнату - Войти в комнату - Войти в комнату - Введите ID комнаты или псевдоним - Просмотр каталога Поиск в каталоге… - Избранное Уменьшить приоритет Прямой чат Покинуть обсуждение Забыть - Сообщения Настройки Версия @@ -656,7 +600,6 @@ Прочие уведомления Авторские права Политика конфиденциальности - Аватар Отображаемое имя Email @@ -684,7 +627,6 @@ Авторские права Политика конфиденциальности Очистить весь кэш - Параметры пользователя Уведомления Игнорируемые @@ -740,37 +682,29 @@ Введите код активации Ошибка проверки телефона Код - - Аватар комнаты Название комнаты Тема Метки комнаты Отмечено как: - Избранное Маловажные Нет - Доступность и видимость Отображать комнату в каталоге Доступ к комнате Доступ к истории комнаты Кто может читать историю? Кто имеет доступ к комнате? - Все Только участники (с момента выбора этой опции) Только участники (с момента приглашения) Только участники (с момента присоединения) - Для генерации ссылки команда должна иметь адрес. Только приглашенные Все у кого есть ссылка на комнату, кроме гостей Все у кого есть ссылка на комнату, включая гостей - Забаненные пользователи - Дополнительно Внутренний ID комнаты Адреса @@ -781,7 +715,6 @@ Вам необходимо выйти, чтобы включить шифрование. Шифровать сообщения только для проверенных сессий Никогда не отправлять шифрованное сообщение на непроверенные сессии в этой комнате с этой сессии. - У этой комнаты еще нет локального адреса Новый адрес (например #foo:matrix.org") Неверный формат псевдонима @@ -796,11 +729,8 @@ В этой комнате выключено шифрование. Включить шифрование \n(внимание: не может быть снова отключено!) - Каталог - %s пытается загрузить историю комнаты, но не может ее найти. - Информация о сквозном шифровании Информация о событии ID пользователя @@ -844,21 +774,18 @@ Чтобы убедиться, что этой сессии можно доверять, обратитесь к его владельцу, используя другие способы (например, лично или по телефону), и спросите, соответствует ли ключ, который он видит в настройках для этой сессии: Если совпадает, то нажмите кнопку подтвердить ниже. Если не совпадает, возможно кто-то пытается перехватить сессию и вы захотите добавить его в черный список. В будущем данный процесс будет улучшен. Я проверил, что ключи совпадают - Комната содержит неизвестные сессии Эта комната содержит неизвестные сессии, которые не были подтверждены. \nЭто означает, что эти сессии могут не принадлежать тем пользователям, на которых они претендуют. \nПеред продолжением рекомендуем вам пройти процесс проверки для каждой сессии, но вы можете отправить сообщение повторно, не проверяя. \n \nНеизвестные сессии: - Выбор списка комнат Сервер возможно недоступен или перегружен Введите домашний сервер для отображения списка публичных комнат Имя сервера Все комнаты на сервере %s Все местные комнаты %s - Поиск в истории Пользовательский интерфейс Язык @@ -893,7 +820,6 @@ Создание виджета не удалось Осуществлять конференц звонки через Jitsi Вы уверены, что хотите удалить виджет из этой комнаты? - Не удалось создать виджет. Не удалось отправить запрос. Уровень доступа должен быть числом больше 0. @@ -919,14 +845,11 @@ Снять видео Аналитика Использовать встроенную камеру - Сообщить об ошибке Внимание! Конференц-связь находится в разработке и может быть ненадежной. - Ошибка команды Нераспознанная команда: %s - Выкл Громко Зашифрованное сообщение @@ -960,7 +883,6 @@ Пример ID сообщества пример - Начало Люди Комнаты @@ -1000,7 +922,6 @@ %d активных виджетов - Аватар %d активный участник @@ -1086,9 +1007,9 @@ \n \nВидимость сообщений в Matrix похожа на электронную почту. Удаление ваших сообщений означает, что отправленные вами сообщения не будут показаны новым или не зарегистрированным пользователям, но те пользователи, которые уже получили эти сообщения - по прежнему будут их видеть. Лицензии сторонних производителей - Скачать - Говорить - Очистить + Скачать + Говорить + Очистить Перезапросить ключи шифрования у других ваших сессий. Отправлен запрос ключа. Запрос отправлен @@ -1216,7 +1137,7 @@ Всегда Для сообщений и ошибок Только для ошибок - Принимаю + Принимаю Результаты диагностики Запустить тесты Выполняется… (%1$d из %2$d) @@ -1296,7 +1217,7 @@ Резервное копирование ключей Используйте резервную копию ключа Резервное копирование ключей не завершено, пожалуйста, подождите… - Пропустить + Пропустить Готово Расширенные настройки уведомлений Значение уведомления по событию @@ -1396,8 +1317,8 @@ Уверены? Создание резервной копии Сделайте резервную копию ваших ключей или потеряете доступ к вашим зашифрованным сообщениям. - Остаться - Прервать + Остаться + Прервать Уверены, что хотите выйти? Пожалуйста, введите имя пользователя. (Расширенный) @@ -1445,7 +1366,7 @@ Импортирование ключей… Скачивание ключей… Вычисление ключа восстановления… - Игнорировать + Игнорировать Инициализация сервиса Отметить как прочитанное Войти с помощью единого входа @@ -1558,8 +1479,8 @@ Комнаты Здесь будут отображаться ваши комнаты. Коснитесь + внизу справа, чтобы найти существующие или создать свои. Реакции - Принять - Нравиться + Принять + Нравиться Добавить реакцию Просмотреть реакции Менеджер интеграции @@ -1639,8 +1560,8 @@ Фильтр по имени пользователя или ID… Присоединение к комнате… История изменений - Обзор - Отклонить + Обзор + Отклонить Для продолжения Вам необходимо принять Условия данного сервиса. Правила push-уведомлений не определены Нет зарегистрированных push-шлюзов @@ -1650,8 +1571,8 @@ Используйте ботов, мосты, виджеты и стикеры Читать в Никто - Отмена - Отключить + Отмена + Отключить Сервер идентификации не настроен. Звонок не состоялся из-за неправильно настроенного сервера Попросите администратора вашего домашнего сервера (%1$s) настроить TURN сервер, чтобы звонки работали надежно. @@ -1996,8 +1917,8 @@ \n \nПожалуйста, разрешите доступ в следующем всплывающем окне, чтобы экспортировать ключи вручную. Нет подключения к сети - Воспроизвести - Приостановить + Воспроизвести + Приостановить Копировать Выполнено Уведомления @@ -2020,7 +1941,7 @@ Вернуться к звонку Отменить приглашение Снизить собственные полномочия\? - Отклонить + Отклонить Вы не сможете отменить это изменение, поскольку вы понижаете себя в должности, а если вы последний привилегированный пользователь в комнате, то восстановить привилегии будет невозможно. Понизить Игнорировать пользователя @@ -2232,17 +2153,6 @@ Недоверенные Эта сессия является доверенной для безопасного обмена сообщениями, так как %1$s (%2$s) проверил(а) его: %1$s (%2$s) вошел(ла), используя новую сессию: - - %d голос - %d голоса - %d голосов - - - %d голос - финальные результаты - %d голоса - финальные результаты - %d голосов - финальные результаты - - Выберите вариант Создать простой опрос Новый вход Пока этот пользователь не доверяет этой сессии, сообщения, отправленные в обе стороны, помечаются предупреждениями. Кроме того, вы можете подтвердить сессию вручную. @@ -2346,7 +2256,7 @@ \n${app_name} для ПК ${app_name} для iOS \n${app_name} для Android - или другой, поддерживаемый кросс-подпись Matrix клиент + или другой, поддерживаемый кросс-подпись Matrix клиент Принудительно отбрасывает текущую групповую сессию для отправки сообщений в зашифрованную комнату Чтобы продолжить, используйте ваш %1$s или используйте ваш %2$s. Используйте ключ восстановления @@ -2508,7 +2418,6 @@ Показать события статуса участников комнаты Включает в себя события приглашения/ присоединения/выхода/исключения/бана и изменение аватара/отображаемого имени. Голосование - Кнопки бота Отреагировал: %s Результат проверки Ссылка была искажена @@ -2558,7 +2467,7 @@ Фильтр заблокированных пользователей У вас нет разрешения на запуск звонка У вас нет разрешения на запуск конференции - Сброс + Сброс Показать устройство, которое вы можете проверить сейчас Показать %d устройства, которые вы можете проверить сейчас @@ -2890,7 +2799,7 @@ Они смогут изучить %s Пригласить в %s Поделиться ссылкой - Пригласить по имени пользователя + Пригласить по имени пользователя Пригласить по электронной почте На данный момент здесь только вы. С другими в %s будет ещё лучше. Пригласить в %s @@ -3116,7 +3025,7 @@ Приглашение по электронной почте, поиск контактов и многое другое… Завершите настройку обнаружения. В настоящее время вы не используете сервер идентификации. Чтобы приглашать членов команды и быть доступным для них, настройте один из них ниже. - Приглашение по имени пользователя или по почте + Приглашение по имени пользователя или по почте Убедитесь, что нужные люди имеют доступ к %s. Вы можете пригласить больше людей позже. Кто ваши члены команды\? Добавить в данное пространство diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 4570de7f9f..138cf6af07 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -39,7 +39,7 @@ %1$s pozval/a %2$s vstúpiť do miestnosti %1$s prijal/a pozvanie pre %2$s ** Nie je možné dešifrovať: %s ** - Zo zariadenia odosieľateľa nebolo možné získať kľúče potrebné na dešifrovanie tejto správy. + Zo zariadenia odosieľateľa nebolo možné získať kľúče potrebné na dešifrovanie tejto správy. Nie je možné vymazať Nie je možné odoslať správu Nepodarilo sa nahrať obrázok @@ -72,8 +72,8 @@ Úvodná synchronizácia: \nNačítanie konverzácií \nAk ste sa pripojili k mnohým miestnostiam, môže to chvíľu trvať - Úvodná synchronizácia: -\nPrebieha import pozvaní + Počiatočná synchronizácia: +\nImport pozvaných miestností Úvodná synchronizácia: \nPrebieha import opustených miestností Úvodná synchronizácia: @@ -102,9 +102,9 @@ %1$s pridal/a adresy %2$s pre túto miestnosť. - %1$s odstránil/a adresu %2$s pre túto miestnosť. - %1$s odstránil/a adresy %3$s pre túto miestnosť. - %1$s odstránil/a adresy %3$s pre túto miestnosť. + %1$s odstránil/a %2$s adresu pre túto miestnosť. + %1$s odstránil/a %2$s adries pre túto miestnosť. + %1$s odstránil/a %2$s adresy pre túto miestnosť. %1$s pridal/a adresy %2$s a odstránil/a adresy %3$s pre túto miestnosť. %1$s nastavil/a hlavnú adresu tejto miestnosti %2$s. @@ -221,22 +221,22 @@ Podrobnosti o členovi Historické OK - Zrušiť - Uložiť - Opustiť - Odoslať - Odoslať znovu - Vymazať - Citovať - Zdieľať + Zrušiť + Uložiť + Opustiť + Odoslať + Odoslať znovu + Vymazať + Citovať + Zdieľať Neskôr - Preposlať + Preposlať Trvalý odkaz Zobraziť zdroj Zobraziť dešifrovaný zdroj - Vymazať - Premenovať - Ohlásiť obsah + Vymazať + Premenovať + Nahlásiť obsah Aktívny hovor Prebiehajúci konferenčný hovor. \nPripojte sa ako %1$s alebo %2$s @@ -250,7 +250,7 @@ Konferenčné hovory nie sú podporované v šifrovaných miestnostiach Napriek tomu odoslať alebo - Pozvanie + Pozvanie Nedostupný Odhlásiť sa Audio hovor @@ -262,7 +262,7 @@ Otvoriť Zavrieť Skopírované do schránky - Zakázať + Zakázať Potvrdenie Upozornenie Domov @@ -310,8 +310,8 @@ Vytvoriť účet Prihlásiť sa Odhlásiť sa - Adresa domovského servera - Adresa servera totožností + URL adresa domovského servera + URL adresa servera totožností Hľadať Začať novú konverzáciu Uskutočniť audio hovor @@ -433,10 +433,10 @@ ÁNO NIE Pokračovať - Odstrániť - Vstúpiť - Zobraziť náhľad - Odmietnuť + Odstrániť + Vstúpiť + Zobraziť náhľad + Odmietnuť Preskočiť na neprečítanú správu Používateľ %s vás pozval vstúpiť do tejto miestnosti Toto pozvanie bolo odoslané na emailovú adresu %s, ktorá nie je priradená k tomuto účtu. @@ -527,17 +527,6 @@ SPRÁVY ĽUDIA SÚBORY - VSTÚPIŤ - ADRESÁR - OBĽÚBENÉ - MIESTNOSTI - NÍZKA PRIORITA - POZVANIA - Začať konverzáciu - Vytvoriť miestnosť - Vstúpiť do miestnosti - Vstúpiť do miestnosti - Zadajte alias alebo ID miestnosti Prezrieť adresár Vyhľadávanie v adresári… Do obľúbených @@ -608,8 +597,8 @@ Aktualizovať verejné meno Naposledy videné %1$s @ %2$s - Táto operácia si vyžaduje dodatočné overenie. -Ak chcete pokračovať, prosím zadajte vaše heslo. + Táto operácia si vyžaduje dodatočné overenie. +\nAk chcete pokračovať, zadajte prosím vaše heslo. Overenie Heslo: Odoslať @@ -631,9 +620,9 @@ Ak chcete pokračovať, prosím zadajte vaše heslo. Potvrdiť nové heslo Nepodarilo sa zmeniť heslo Úspešne ste si zmenili heslo - Zobraziť všetky správy od používateľa %s? - -Pozor! Vykonaním tejto akcie reštartujete aplikáciu a opätovné načítanie môže chvíľu trvať. + Zobraziť všetky správy od %s\? +\n +\nUpozorňujeme, že táto akcia spôsobí reštart aplikácie a môže chvíľu trvať. Ste si istí, že chcete odstrániť tento cieľ oznámení? Ste si istí, že chcete odstrániť %1$s %2$s? Vyberte krajnu @@ -690,13 +679,13 @@ Pozor! Vykonaním tejto akcie reštartujete aplikáciu a opätovné načítanie Nebude určená hlavná adresa tejto miestnosti. Upozornenie - Hlavná adresa Nastaviť ako hlavnú adresu - Zrušiť nastavenie ako hlavná adresa + Zrušiť nastavenie ako hlavnej adresy Kopírovať ID miestnosti Kopírovať adresu miestnosti V tejto miestnosti je povolené šifrovanie. V tejto miestnosti nie je povolené šifrovanie. Povoliť šifrovanie -(Pozor: Nie je viac možné zakázať!) +\n(Pozor: nie je možné ho znova vypnúť!) Adresár Vzhľad %s sa pokúšal zobraziť konkrétny bod v histórii tejto miestnosti, no zodpovedajúcu udalosť sa nepodarilo nájsť. @@ -721,9 +710,9 @@ Pozor! Vykonaním tejto akcie reštartujete aplikáciu a opätovné načítanie Exportovať Zadajte heslo Potvrďte heslo - Šifrovacie kľúče miestností boli uložené do %s - -Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikácii Element. + Kľúče od miestnosti E2E boli uložené do \'%s\'. +\n +\nUpozornenie: Tento súbor sa môže vymazať, ak sa aplikácia odinštaluje. Importovať E2E kľúče miestností Importovať kľúče miestností Importovať kľúče z lokálneho súboru @@ -752,7 +741,7 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Vyberte adresár miestností Server môže byť nedostupný alebo preťažený Zadajte adresu domovského servera, z ktorého sa načíta zoznam verejných miestností - URL adresa domovského servera + Názov servera Všetky miestnosti na serveri %s Všetky Matrix miestnosti na serveri %s Hľadať historické @@ -768,7 +757,6 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Nie je možné vytvoriť widget Konferenčné hovory uskutočňovať použitím jitsi Ste si istí, že chcete odstrániť widget z tejto miestnosti? - Nie je možné vytvoriť widget. Nepodarilo sa odoslať požiadavku. Úroveň moci musí byť kladné celé číslo. @@ -778,28 +766,24 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác V požiadavke chýba user_id. Miestnosť %s nie je viditeľná. Pridať Matrix aplikácie - Pridali ste novú reláciu \'%s\', ktorá požaduje šifrovacie kľúče. Vaša neoverená relácia \'%s\' požaduje šifrovacie kľúče. Spustiť overenie Zdieľať bez overenia Ignorovať žiadosť - Hlučné oznámenia + Hlasné oznámenia Tiché oznámenia Hlásenie o chybe Poslať fotku Poslať video Štatistika Používať vstavaný fotoaparát a kameru - Upozornenie! Konferenčné hovory sú stále vo vývoji a nemusia byť úplne spoľahlivé. - Chybný príkaz Nerozpoznaný príkaz: %s - Vypnuté - Hlučné + Hlasné Šifrovaná správa Podrobnosti o komunite Načítavanie… @@ -814,11 +798,11 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Ste si istí, že chcete začať video hovor? Zoznam komunít Zakázanie používateľa ho vylúči z tejto miestnosti a zabráni mu v ďalšom vstupe. - Všetky správy (hlučné) + Všetky správy (hlasné) Všetky správy Len zmienky Umlčať - Pridať odkaz na domovskú obrazovku + Pridať na domovskú obrazovku Náhľady URL adries Vibrovať keď spomeniete iného používateľa Príslušnosť ku komunitám @@ -833,7 +817,6 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Príklad ID komunity príklad - Domov Ľudia Miestnosti @@ -852,9 +835,9 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Akcie Oznámiť chybu zatrasením zariadenia - 1 zmena stavu - %d zmeny stavu - %d zmien stavu + 1 zmena členstva + %d zmeny členstva + %d zmien členstva Zobraziť členov Otvoriť záhlavie @@ -890,9 +873,9 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác %d neprečítaných správ - 1 neprečítaná správa - %d neprečítané správy - %d neprečítaných správ + 1 neprečítaná oznámená správa + %d neprečítané oznámené správy + %d neprečítaných oznámených správ 1 miestnosť @@ -905,7 +888,6 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác %d aktívne widgety %d aktívnych widgetov - Potvrdenie o prečítaní Obrázok oznámenia Obrázok @@ -938,18 +920,18 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Ak chcete aj naďalej používať domovský server %1$s , mali by ste si prečítať a odsúhlasiť naše zmluvné podmienky. Prečítať teraz Deaktivovať účet - Toto spôsobí, že váš účet nebude viac použiteľný. Nebudete sa môcť opätovne prihlásiť a nikto sa nebude môcť znovu zaregistrovať s rovnakým používateľským ID. Deaktiváciou účtu opustíte všetky miestnosti, do ktorých ste kedy vstúpili a vaše kontaktné údaje budú odstránené zo servera totožností. Túto akciu nie je možné vrátiť späť.. - -Pri deaktivácii účtu predvolene neodstraňujeme vami odoslané správy. Ak si želáte uplatniť právo zabudnutia, zaškrtnite prosím zodpovedajúce pole nižšie. - -Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť správ elektronickej pošty. To, že zabudneme vaše správy v skutočnosti znamená, že správy ktoré ste už odoslali nebudú čitateľné pre nových alebo neregistrovaných používateľov, no registrovaní používatelia, ktorí už prístup k vašim správam majú, budú aj naďalej bez zmeny môcť pristupovať k ich vlastným kópiám vašich správ. + Tým sa vaše konto stane trvalo nepoužiteľným. Nebudete sa môcť prihlásiť a nikto nebude môcť opätovne zaregistrovať rovnaké ID používateľa. To spôsobí, že váš účet opustí všetky miestnosti, ktorých sa zúčastňuje, a odstráni údaje o vašom účte zo servera identity. Táto akcia je nezvratná. +\n +\nDeaktivácia vášho účtu nezapríčiní štandardne, že zabudneme na správy, ktoré ste odoslali. Ak chcete, aby sme vaše správy zabudli, označte nižšie uvedené políčko. +\n +\nViditeľnosť správ v Matrixe je podobná ako v prípade e-mailu. Naše zabudnutie vašich správ znamená, že správy, ktoré ste poslali, nebudú sprístupnené žiadnym novým alebo neregistrovaným používateľom, ale registrovaní používatelia, ktorí už majú prístup k týmto správam, budú mať stále prístup k ich kópii. Spolu s deaktivovaním účtu si želám odstrániť všetky mnou odoslané správy (Pozor: Môže sa stať, že noví používatelia uvidia neúplnú históriu konverzácií) Aby ste mohli pokračovať, prosím zadajte svoje heslo: Deaktivovať účet Licencie tretích strán - Stiahnuť - Hovoriť - Vymazať + Stiahnuť + Hovoriť + Vymazať Žiadosť o šifrovacie kľúče bola odoslaná. Žiadosť odoslaná Píšte sem… @@ -963,9 +945,9 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Túto akciu nie je možné vykonať, pretože neboli udelené všetky potrebné oprávnenia. Ak je to možné, prosím popis napíšte v angličtine. - 1 sekunda - %d sekundy - %d sekúnd + %ds + %ds + %ds 1 minúta @@ -1020,7 +1002,7 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp %d miestnosti %d miestností - Táto miestnosť bola nahradená inou a nie je viac aktívna + Táto miestnosť bola nahradená inou a nie je viac aktívna. Konverzácia pokračuje tu Táto miestnosť je pokračovaním predchádzajúcej konverzácii Staršie správy zobrazíte kliknutím sem @@ -1054,7 +1036,7 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp +%d %d+ Napriek tomu zavolať - Prijať + Prijať Prosím prečítajte si a odsúhlaste zmluvné podmienky tohoto domovského servera: Hovory Použiť predvolené zvonenie ${app_name} pre prichádzajúce hovory @@ -1096,9 +1078,9 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Token FCM sa nepodarilo získať: \n%1$s Registrácia tokenu - Token FCM úspešne zaregistrovaný na domovskom servery. - FCM token sa nepodarilo zaregistrovať na domoskom servery: -%1$s + Token FCM úspešne zaregistrovaný na domovskom serveri. + FCM token sa nepodarilo zaregistrovať na domovskom serveri: +\n %1$s Služba oznámení Služba oznámení je spustená. Služba oznámení nie je spustená. @@ -1112,11 +1094,11 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Služba sa automaticky nespustí po reštarte zariadenia a nedostanete po reštarte žiadne oznámenia, kým nespustíte ${app_name} aspoň raz. Povoliť spustenie služby po reštarte Kontrola obmedzenia spustenia na pozadí - Obmedzenie spustenia na pozadí nie je aktívne pre ${app_name}. Tento test je potrebné spustiť cez mobilné dáta (nie cez wifi). -%1$s - Obmedzenie spustenia na pozadí je aktívne pre ${app_name}. -Činnosť aplikácii bude agresívne obmedzovaná operačným systémom, keď je ${app_name} na pozadí. Môže to mať negatívny vplyv na doručovanie oznámení. -%1$s + Obmedzenie spustenia na pozadí nie je aktívne pre ${app_name}. Tento test je potrebné spustiť cez mobilné dáta (nie cez wifi). +\n%1$s + Pre ${app_name} sú povolené obmedzenia na pozadí. +\nPráca, ktorú sa aplikácia pokúsi vykonať, bude agresívne obmedzená, keď je na pozadí, čo môže ovplyvniť oznámenia. +\n%1$s Deaktivovať obmedzenia Optimalizácia batérie Chod ${app_name} nie je ovplyvnený nastavením optimalizácie batérie. @@ -1134,8 +1116,8 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Zobrazovať udalosti účtu Zahŕňa zmeny zobrazovaného mena a obrázka v profile. Pripojenie na pozadí - ${app_name} potrebuje na pozadí udržovať aktívne nenáročné spojenie, aby spoľahlivo fungovali oznámenia. -Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí pre ${app_name}. Prosím povoľte ho. + ${app_name} potrebuje na pozadí udržovať aktívne nenáročné spojenie, aby spoľahlivo fungovali oznámenia. +\nNa ďalšej obrazovke budete vyzvaní, aby ste povolili aplikácii ${názov_aplikácie}, aby sa vždy spúšťala na pozadí, prosím, prijmite. Udeliť oprávnenie Pri pokuse overiť vašu emailovú adresu sa vyskytla chyba. Heslo @@ -1160,11 +1142,11 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Ste si istí\? Zálohovať Skôr než sa odhlásite, zálohujte si šifrovacie kľúče, inak prídete o prístup k zašifrovaným správam. - Zostať - Vynechať + Zostať + Vynechať Hotovo - Prerušiť - Ignorovať + Prerušiť + Ignorovať Ste si istí, že sa chcete odhlásiť\? Označiť ako prečítané Prihlásiť sa použitím jediného prihlásenia @@ -1184,8 +1166,8 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí [%1$s] \nV zariadení nemáte nastavený účet Google. Prosím, pridajte si účet cez správcu účtov. Konfigurácia ${app_name} nemá vplyv na zobrazenie tejto chyby. Pridať účet - Aplikácia sa nepotrebuje pripájať k domovskému serveru, keď beží na pozadí, čo môže predĺžiť výdrž batérie - Nastaviť hlučné oznámenia + Aplikácia sa nemusí pripájať k domovskému serveru, keď beží na pozadí, čo môže predĺžiť výdrž batérie + Nastaviť hlasné oznámenia Nastaviť oznámenia prichádzajúceho hovoru Nastaviť tiché oznámenia Vybrať farbu upozornení LED, vibrácie, zvuky… @@ -1224,10 +1206,10 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Prosím zadajte meno používateľa. Overiť reláciu Žiadny - Zrušiť - Odpojiť sa - Náhlad - Odmietnuť + Zrušiť + Odpojiť sa + Náhlad + Odmietnuť Nebol nakonfigurovaný server totožnosti. Hovor zlyhal kvôli zle nakonfigurovanému serveru Prosím, požiadajte administrátora vášho domovského serveru (%1$s) o konfiguráciu TURN serveru, aby hovory fungovali spoľahlivo. @@ -1242,9 +1224,9 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Toto nie je platná adresa Matrix serveru Domovský server je nedostupný na tejto URL adrese, preverte to prosím Relácie - Prehrať - Pozastaviť - Odmietnuť + Prehrať + Pozastaviť + Odmietnuť Nemáte právo začať konferenčný hovor v tejto miestnosti Konferenčný hovor práve prebieha! Začať video schôdzu @@ -1275,7 +1257,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Zabrániť neúmyselnému telefonovaniu Žiadať potvrdenie pred uskutočnením hovoru Povoliť záložný server pre nadviazanie hovoru - Ak váš domovský server neponúka adresu servera turn, na nadviazanie hovorov sa použije %s (počas hovoru zdieľate svoju adresu IP) + Použije sa %s ako asistencia, keď ju váš domovský server neponúka (vaša IP adresa bude zdieľaná počas hovoru) Prebiehajúci hovor (%s) Návrat k hovoru Na uskutočnenie tejto akcie si prosím v nastaveniach pridajte server totožností. @@ -1303,7 +1285,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Potvrdiť vaše heslo Toto nie je možné urobiť cez mobilnú aplikáciu ${app_name} Je požadované overenie - Režim synchronizácie na pozadí (Experimentálne) + Režim synchronizácie na pozadí Optimalizovaný na využívanie batérie ${app_name} sa bude synchronizovať na pozadí s cieľom ušetriť limitované zdroje (batériu). \nV závislosti od kapacity prostriedkov zariadenia môže byť synchronizácia odložená operačným systémom na neskôr. @@ -1317,8 +1299,8 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí %s \nSynchronizácia môže byť odložená vzávislosti od kapacity zariadenia (batéria a režim spánku). Integrácie - Použite správcu integrácií na nastavenie botov, mostov, widgetov a balíčkov s nálepkami. -\nSprávci integrácií zbierajú údaje konfigurácie, môžu meniť widgety, posielať pozvania vstúpiť do miestnosti a nastavovať úroveň moci vo vašom mene. + Použite správcu integrácií na nastavenie botov, premostení, widgetov a balíčkov s nálepkami. +\nSprávcovia integrácie dostávajú konfiguračné údaje a môžu vo vašom mene upravovať widgety, posielať pozvánky do miestnosti a nastavovať úrovne oprávnení. Bezpečné zálohovanie Spravovať Nastaviť bezpečné zálohovanie @@ -1423,7 +1405,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí \n \nPozor: Keď odinštalujete aplikáciu Element, môže dôjsť k zmazaniu tohoto súboru. Kľúč obnovenia bol uložený. - Záloha už existuje na domovskom servery + Záloha už existuje na vašom domovskom serveri Zdá sa, že ste si už zálohovanie kľúčov nastavili z inej relácie. Chcete ho nahradiť zálohou, ktorú vytvárate teraz\? Nahradiť Zastaviť @@ -1565,12 +1547,12 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Vitajte doma! Tu nájdete neprečítané správy Konverzácie - Tu sa zobrazia priame konverzácie + Tu sa budú zobrazovať vaše konverzácie v priamych správach. Ťuknutím na + vpravo dole niektorú z nich spustíte. Miestnosti - Tu sa zobrazia vaše miestnosti + Tu sa zobrazia vaše miestnosti. Ťuknutím na + vpravo dole nájdete existujúce miestnosti alebo si môžete založiť vlastnú. Reakcie - Súhlasím - Páči sa mi + Súhlasím + Páči sa mi Pridať reakciu Zobraziť reakcie Reakcie @@ -1593,7 +1575,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Priame konverzácie Nová miestnosť VYTVORIŤ - Názov miestnosti + Názov Verejná Ktokoľvek môže vstúpiť do tejto miestnosti Adresár miestností @@ -1687,4 +1669,415 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Odsúhlaste podmienky používania služieb servera totožností (%s), aby vás ostatní mohli nájsť podľa emailovej adresy alebo telefónneho čísla. Povoliť podrobné záznamy. Podrobné záznamy pomôžu vývojárom poskytnúť viac detailov, keď posielate hlásenie o chybe. Aj keď je toto zapnuté, aplikácia nezaznamenáva obsah správ ani žiadne iné súkromné údaje. + Oznámenia + Viac + Zabezpečenie + Čakanie… + Nálepka + Súbor + Audio + Obrázok. + Video. + Nastavenia + Heslo + Upozornenie + Ďalej + Heslo + Používateľské meno + Ďalej + Ďalej + Ďalej + Email + Upozornenie + Úspech! + Pokračovať + Upozornenie! + Email + Ďalej + Adresa + Pokračovať + Ďalšie + Nastavenia + Stlmiť + SÚBORY + Nálepka + Galéria + Audio + Kamera + Kontakt + Súbor + Ďalšie + Nastavenia miestnosti + Zistiť viac + Overený %s + Overiť %s + Manuálne overiť + Žiadosť o overenie + Overenie odoslané + Prijali ste + Zrušili ste overenie + %s bolo zrušené + Nezabezpečené + Zhodujú sa + Povoliť šifrovanie + Režim pre vývojárov + Pokročilé nastavenia + Úvodná synchronizácia… + Prihlásiť sa + Prihlásiť sa + Matrix ID + Zastaralý domovský server + Poslať znova + Zadať kód + Telefónne číslo + Email (voliteľné) + Nové heslo + Prihlásiť sa + Zaregistrovať sa + Zistiť viac + Neprečítané správy + Len zmienky + Všetky správy + Ignorovať používateľa + IGNOROVAŤ POUŽÍVATEĽA + Je to nevyžiadaná správa + %s prečítané + Skryť heslo + Zobraziť heslo + Poslať prílohu + Verzie + Pomocník + Právne informácie + tu + Povoliť + Anketa + Nedostupný + Nedostupný + Pripojený + Kľúčové slová + \@miestnosť + Žiadne + Priestory + Hlas + Aktualizovať + nestabilná + stabilná + Spätná väzba + Navrhované + Popis + Náhodné + Všeobecné + Súkromný + Verejný + Verejná + Súkromná + Priestory + Pozvánky + Zlyhalo + Odoslané + Odosielanie + Typ + Vybrané + Video + Obrázok + Snímka obrazovky + Prepnúť + Používatelia + Podržať + alebo + Povolenia + Zverejniť + Zrušiť zverejnenie + Pridať + "Téma: " + Návrhy + Kontakty + Nedávne + Téma + Opustiť + Nastavenia + Obnoviť predvolené + Anketa + Kód + Téma + Rola + Odoslať + POZVAŤ + Nešifrované + Správa… + Koniec + Obnoviť + Odstrániť… + Upozornenie: + Nie + Áno + Dôveryhodné + Upozornenie + Overený + Overiť + Krížové podpisovanie + Časová os + Prestať ignorovať + Používatelia + Pozvánky + Vlastná úroveň + Moderátori + Správcovia + Nahrané súbory + + %1$s, %2$s, %3$s a %4$d ďalší + %1$s, %2$s, %3$s a %4$d ďalší + %1$s, %2$s, %3$s a %4$d ďalších + + %1$s, %2$s, %3$s a %4$s + %1$s, %2$s a %3$s + Nepodarilo sa overiť + Pokračovať s %s + Aktualizovať miestnosť + Zmeniť názov miestnosti + Zmeniť viditeľnosť histórie + Zapnúť šifrovanie miestnosti + Zmeniť obrázok miestnosti + Zrušiť zverejnenie tejto adresy + Zverejniť túto adresu + Ďalšie zverejnené adresy: + Nemôžete napísať priamu správu sebe! + Pridať tému + %1$d z %2$d + Žiadne ďalšie výsledky + Téma miestnosti (voliteľné) + %1$s a %2$s + Zadajte svoj PIN + Zrušiť stlmenie mikrofónu + Stlmiť mikrofón + Načítanie dostupných jazykov… + Ďalšie dostupné jazyky + Označiť ako dôveryhodné + Zapnúť krížové podpisovanie + Je dostupná aktualizácia šifrovania + Správy obsahujúce @miestnosť + Čaká sa na %s… + Šifrovanie nie je zapnuté + Udržujte ho v bezpečí + Toto som nebol ja + Nové prihlásenie + Overte toto prihlásenie + + %d aktívna relácia + %d aktívne relácie + %d aktívnych relácií + + Zobraziť všetky relácie + Zapnúť end-to-end šifrovanie… + Moderátor v %1$s + Správca v %1$s + Odchod z miestnosti… + Čaká sa na %s… + Overte pomocou emoji + Naskenujte ich kód + Overiť túto reláciu + Nezhodujú sa + Nedôveryhodné prihlásenie + Vymazať všetky údaje + Vymazať osobné údaje + Ste odhlásený + Prihláste sa znova + Ste odhlásený + Používateľské meno alebo emailová adresa + Potvrdiť telefónne číslo + Telefónne číslo (nepovinné) + Nastaviť telefónne číslo + Vybrať server + Opustiť túto miestnosť + Odstrániť z obľúbených + Pridať k obľúbeným + Oznámenie pomocou zvuku + Všetky správy (hlasné) + Nahlásiť tento obsah + %1$s dňa %2$s + Odstrániť anketu + Povoliť ankety + Ukončiť anketu + Ukončiť anketu + + %1$d hlas + %1$d hlasy + %1$d hlasov + + Systémové nastavenia + Teraz nie + Vytvoriť možnosti + Vytvoriť anketu + Vybrať domovský server + Vytváranie priestoru… + Adresa priestoru + Povolenia priestoru + Pripojenie zlyhalo + Nastavenia účtu + Vaše kľúčové slová + Zistiť viac + Aktualizácia miestnosti + Pozvánky do miestnosti + Skupinové správy + Priame správy + My používateľské meno + Predvolené oznámenia + %1$ds ostáva + Vyžaduje sa aktualizácia + Vybrať priestory + Predvolená verzia + Adresy priestoru + Adresa priestoru + Nepomenovaná miestnosť + Súkromný priestor + Verejný priestor + Verejný priestor + Neznáma osoba + Váš server + Pridať miestnosti + Poskytnite spätnú väzbu + Spätná väzba na priestory + Spravovať miestnosti + Verejná miestnosť + Kompresia obrázku… + Vždy sa opýtať + Opustiť priestor + Pridať miestnosti + Preskúmať miestnosti + Pripojiť sa k priestoru + Vytvoriť priestor + Zdieľať odkaz + Pozvať ľudí + Vytváranie priestoru… + Pridať priestor + Navrhované miestnosti + Správa odoslaná + Adresár miestností + DOZVEDIEŤ SA VIAC + ROZUMIEM + ${app_name} Android + Žiadna zmena. + Obsah udalosti + Upraviť obsah + Vývojárske nástroje + Vymazať obrázok + Zmeniť obrázok + Otvoriť widgety + + %d záznam + %d záznamy + %d záznamov + + Verzia servera + Názov servera + Nastavenia miestnosti + Verzia miestnosti + Nová hodnota + + Pozastavený hovor + %1$d pozastavené hovory + %1$d pozastavených hovorov + + Číselník + Zavolať späť + Vyčistiť históriu + Zmeniť tému + Zmeniť povolenia + Upraviť widgety + Poslať oznámenie všetkým + Zakázať používateľov + Vylúčiť používateľov + Zmeniť nastavenia + Pozvať používateľov + Odoslať správy + Predvolená rola + Oprávnenia v miestnosti + Predvolené nastavenie systému + Zmeniť PIN + Lokálne adresy + Hlavná adresa + Zverejnené adresy + Adresy miestnosti + Adresy miestnosti + Prístup k miestnosti + Pozvať priateľov + Pridať ľudí + Vytváranie miestnosti… + Adresa miestnosti + Skryť pokročilé možnosti + Zobraziť pokročilé možnosti + QR kód + Začať konverzáciu + Priama správa + Zahodiť zmeny + Nastavenia miestnosti + Názov miestnosti + Zapnúť biometrické údaje + Nastaviť ochranu + Obnoviť všetko + Vstúpili ste. + %s sa pripojil/a. + + %d pozvánka + %d pozvánky + %d pozvánok + + + %d sekunda + %d sekundy + %d sekúnd + + Odstrániť %s\? + Telefónne čísla + Emailové adresy + Zapnúť PIN + Nový PIN + Obnoviť PIN + Zabudli ste PIN kód\? + Potvrdiť PIN kód + Odvolať pozvánku + Zoznam kontaktov + Telefónny zoznam + Nie je možné dešifrovať + Názov miestnosti + Bezpečnostná fráza + Nastaviť + Bezpečné zálohovanie + Otvoriť konverzáciu + Použiť %1$s + Aktuálny jazyk + Pozvať používateľov + Pozývanie používateľov… + Pridať členov + Overiť prihlásenie + %1$s (%2$s) + Prístupová fráza pre obnovenie + Zadajte %s + Použiť súbor + Nastavenie oznámení + Šifrovanie zapnuté + Hotovo! + Potvrdiť %s + Heslo účtu + Kľúč správy + Overovanie zrušené + Potvrdiť odstránenie + Údaje o účte + Vývojárske nástroje + QR kód + Inicializovať krížové podpisovanie + Nedôveryhodné + Dokončiť zabezpečenie + Spravovať relácie + Aktívne relácie + Povoliť šifrovanie + Povoliť šifrovanie\? + Iné miestnosti + Nedávne miestnosti + Opustiť miestnosť + + Jedna osoba + %1$d osoby + %1$d osôb + \ No newline at end of file diff --git a/vector/src/main/res/values-sl/strings.xml b/vector/src/main/res/values-sl/strings.xml index 836a4c112e..c6e8ede589 100644 --- a/vector/src/main/res/values-sl/strings.xml +++ b/vector/src/main/res/values-sl/strings.xml @@ -3,8 +3,8 @@ Ime Prijava hrošča Pošlji ekransko sliko - Ponovno pošlji - Pošlji + Ponovno pošlji + Pošlji Sinhroniziram… Pridružil si se v sobi %1$s te je povabil diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 8f2abca53a..cba5e0f3bb 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -30,7 +30,7 @@ %1$s përditësoi profilin e tij %2$s %1$s pranoi ftesën tuaj për %2$s ** S’arrihet të shfshehtëzohet: %s ** - Pajisja e dërguesit nuk na ka dërguar kyçet për këtë mesazh. + Pajisja e dërguesit nuk na ka dërguar kyçet për këtë mesazh. S’u redaktua dot S’arrihet të dërgohet mesazh Ngarkimi i figurës dështoi @@ -273,23 +273,23 @@ Licenca nga palë të treta Po ngarkohet… OK - Anuloje - Ruaje - Dil - Dërgoje - Ridërgoje - Citim - Shkarkoje - Ndaje me të tjerë - Flisni - Pastroje + Anuloje + Ruaje + Dil + Dërgoje + Ridërgoje + Citim + Shkarkoje + Ndaje me të tjerë + Flisni + Pastroje Më vonë - Përpara + Përpara Permalidhje Shihini Burimin Shihni Burim të Shfshehtëzuar - Fshije - Riemërtojeni + Fshije + Riemërtojeni Raportoni Lëndë Thirrje aktive S’fillohet dot thirrja, ju lutemi, riprovoni më vonë @@ -297,7 +297,7 @@ Të dhëna Sesioni Thirre Sido Qoftë Dërgoje Sido Qoftë - Ftoje + Ftoje Jashtë linje Dalje Veprime @@ -310,7 +310,7 @@ Hape Mbylle U kopjua në të papastër - Çaktivizoje + Çaktivizoje Ripohim Kujdes Gabim @@ -447,10 +447,10 @@ Të ruhet te shkarkimet? PO Vazhdo - Hiqe - Bëhuni pjesë - Paraparje - Hidheni tej + Hiqe + Bëhuni pjesë + Paraparje + Hidheni tej Anëtarë liste Po njëkohësohet… Hidhu te të palexuarit @@ -554,17 +554,6 @@ MESAZHE PERSONA KARTELA - MERRNI PJESË - DREJTORI - TË PARAPËLQYERA - DHOMA - ME PËRPARËSI TË ULËT - FTESA - Filloni fjalosje - Krijo dhomë - Hyni në dhomë - Hyni në një dhomë - Shtypni një ID ose alias dhome Shfletoni në drejtori Po kërkohet në drejtori… Krejt mesazhet (e zhurmshme) @@ -933,7 +922,7 @@ Lazy-load anëtarët e dhomave Shërbyesi juaj nuk e mbulon ende lazy loading e anëtarëve të dhomës. Provoni më vonë. Po njëkohësohet… - Hiqe + Hiqe Për shkak lejesh që mungojnë, mund të mungojnë disa veçori… Ky veprim s’është i mundur, për shkak lejesh që mungojnë. Thirrjet konferencë nuk mbulohen në dhoma të fshehtëzuara @@ -1098,7 +1087,7 @@ U pretendua për kyç Ed25519 shenjash gishtash Kërkoni për të dikurshme Simbole - Pranoje + Pranoje Ju lutemi, merrni në shqyrtim dhe pranoni rregullat e këtij shërbyesi Home: Diagnostikoni Njoftime Diagnostikime @@ -1171,7 +1160,7 @@ Kopjeruajtje Kyçesh Përdor Kopjeruajtje Kyçesh Kopjeruajtja e kyçeve s’ka përfunduar, ju lutemi, pritni… - Anashkaloje + Anashkaloje U bë Rregullime të Mëtejshme Për Njoftimet Rëndësi njoftimi sipas aktesh @@ -1268,8 +1257,8 @@ A jeni i sigurt? Kopjeruaji Do të humbni hyrjen te mesazhet tuaj të fshehtëzuar, veç në bëfshi kopjeruajtje të kyçeve tuaj, përpara se të dilni nga llogaria. - Rri - Ndërprite + Rri + Ndërprite Jeni i sigurt se doni të dilni? Mënyra e ruajtjes së të dhënave aplikon një filtër specifik, që kështu përditësimet rreth pranish dhe njoftime mbi shtypje në tastierë lihen jashtë. Rimarrje Mesazhesh të Fshehtëzuar @@ -1306,7 +1295,7 @@ Version Algoritëm Nënshkrim - Shpërfille + Shpërfille Hyni me një hyrje njëshe Kjo URL s’kapet dot, ju lutemi, kontrollojeni Pajisja juaj përdor një protokoll TLS sigurie të vjetruar, pre sulmesh, për hir të sigurisë tuaj, s’do të jeni në gjendje të lidheni @@ -1424,8 +1413,8 @@ Dhoma Dhomat tuaja do të shfaqen këtu. Prekni + poshtë djathtas që të gjeni të tilla ekzistuese ose që të nisni një tuajën. Reagime - Pajtohem - E pëlqej + Pajtohem + E pëlqej Shtoni Reagim Shihni Reagime Reagime @@ -1505,8 +1494,8 @@ Filtrojini sipas emrash përdoruesish ose ID-sh… Po hyhet në dhomë… Shihni Historik Përpunimesh - Shqyrtojeni - Hidhe poshtw + Shqyrtojeni + Hidhe poshtw Që të vazhdohet, lypset të pranoni Kushtet e këtij shërbimi. Kushte Shërbimi Shqyrtoni Kushtet @@ -1514,8 +1503,8 @@ Përdorni robotë, ura, widget-e dhe paketa ngjitësish Lexoni te Asnjë - Shfuqizoje - Shkëputu + Shfuqizoje + Shkëputu S’ka shërbyes identitetesh të formësuar. Thirrja dështoi për shkak shërbyesi të keqformësuar Që thirrjet të funksionojnë në mënyrë të qëndrueshme, ju lutemi, kërkojini përgjegjësit të shërbyesit tuaj Home (%1$s) të formësojë një shërbyes TURN. @@ -1943,22 +1932,13 @@ Ky sesion është i besuar për shkëmbim të sigurt të mesazheve, ngaqë e verifikoi %1$s (%2$s): Gatit CrossSigning Zeroji Kyçet - Thuaje mbërritëm! A shfaq %s të njëjtën mburojë\? + Thuaje mbërritëm! A shfaq %s një shenjë\? Jo Humbi lidhja me shërbyesin Emër përdoruesi %s i verifikuar Mjete Zhvilluesi Të dhëna Llogarie - - %d votë - %d vota - - - %d votë - Përfundimet finale - %d vota - Përfundimet finale - - Mundësi e Përzgjedhur Krijoni një pyetësor të thjeshtë Përdorni Frazëkalim Rikthimesh ose Kyç Nëse s’hyni dot në një sesion ekzistues @@ -2041,7 +2021,7 @@ Fshehtëzim jo i aktivizuar Fshehtëzimi i përdorur nga kjo dhomë nuk mbulohet %s krijoi dhe formësoi dhomën. - Thuajse mbërritëm! A shfaq pajisja juaj tjetër të njëjtën mburojë\? + Thuajse mbërritëm! A shfaq pajisja juaj tjetër një shenjë\? Thuajse mbërritëm! Po pritet për ripohim… Po pritet për %s… S’u arrit të importohen kyçe @@ -2086,7 +2066,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - ose një tjetër klient Matrix i aftë për <em>cross-signing</em + ose një tjetër klient Matrix i aftë për <em>cross-signing</em Përdorni ${app_name}-in më të ri në pajisjet tuaja të tjera: Mbulohet vetëm për dhoma të fshehtëzuara Përdorni %1$s tuaj ose përdorni %2$s tuaj që të vazhdohet. @@ -2159,9 +2139,9 @@ Jepni URL-në e një shërbyesi identitetesh Parashtroje Hap termat e %s - Luaje - Pauzë - Hidhe poshtë + Luaje + Pauzë + Hidhe poshtë S’keni leje të nisni një thirrje konferencë në këtë dhomë S’keni leje të nisni thirrje në këtë dhomë Ka tashmë një konferencë në ecuri e sipër! @@ -2277,7 +2257,6 @@ Nëse s’e dini fjalëkalimin, kthehuni mbrapsht që ta ricaktoni. Ngjitës Pyetësor - Butona Roboti Reagoi me: %s Përfundim Verifikimi Veprime Përgjegjësi @@ -2689,7 +2668,7 @@ Do të jenë në gjendje të eksplorojnë %s Ftojeni në %s Jepuni lidhjen - Ftoni përmes emri përdoruesi + Ftoni përmes emri përdoruesi Ftoni përmes email-i Vetëm ju, hëpërhë. %s do të jetë edhe më mirë me të tjerë. Ftoni njerëz @@ -2948,7 +2927,7 @@ Ftoni me email, gjeni kontakte, etj… Përfundo ujdisjen e zbulimit. Aktualisht nuk përdorni ndonjë shërbyes identitetesh. Që të ftoni shokë të ekipit dhe të jeni i zbulueshëm prej tyre, formësoni një të tillë më poshtë. - Ftoni me emër përdoruesi ose email + Ftoni me emër përdoruesi ose email Sigurohuni se te %s e shoqërisë kanë hyrje personat e duhur. Më vonë mund të ftoni të tjerë. Cilët janë shokët tuaj të ekipit\? Shtoni te Hapësira e dhënë @@ -3019,4 +2998,47 @@ Është bërë dalja nga sesioni! U dol nga dhoma! Jo tani + Jeni i sigurt se doni të hiqet ky pyetësor\? Po u hoq, s’do të jeni në gjendje ta rimerrni. + Hiqe pyetësorin + Pyetësori përfundoi + U votua + Aktivizo Pyetësorë + Përfundoje pyetësorin + Kjo do t’ua bëjë njerëzve të pamundur të votojnë dhe do të shfaqë rezultatet përfundimtare të pyetësorit. + Të përfundohet pyetësori\? + Përfundoje pyetësorin + + Rezultati përfundimtar, bazua në %1$d votë + Rezultati përfundimtar, bazua në %1$d vota + + + Bazuar në %1$d votë + Bazuar në %1$d vota + + + %1$d votë + %1$d vota + + Jo i passhëm + Pyetësor + Rregullime sistemi + Versione + Merrni ndihmë për përdorimin e Element-it + Ndihmë dhe asistencë + Ndihmë + Ligjore + Ky shërbyes nuk jep ndonjë palë rregullash. + Biblioteka prej palësh të treta + Rregulla të shërbyesit tuaj të identiteteve + Rregulla të shërbyesit tuaj Home + Rregulla për ${app_name} + Këtë mund të çaktivizoni në çfarëdo kohe, që nga rregullimet + Nuk u japin hollësi palëve të treta + Nuk regjistrojmë ose profilizojmë ndonjë të dhënë llogarie + këtu + Ndihmonani të identifikojmë probleme dhe të përmirësojmë Element-in, duke ndarë me ne të dhëna anonime përdorimi. Për të kuptuar se si i përdorin njerëzit disa pajisje njëherësh, do të prodhojmë një identifikues kuturu, të përbashkët për pajisjet tuaja. +\n +\nMund të lexoni krejt kushtet tona %s. + Ndihmoni të përmirësohet Element-in + Aktivizoje \ No newline at end of file diff --git a/vector/src/main/res/values-sr/strings.xml b/vector/src/main/res/values-sr/strings.xml index 065fd3154b..e43d7bce24 100644 --- a/vector/src/main/res/values-sr/strings.xml +++ b/vector/src/main/res/values-sr/strings.xml @@ -67,7 +67,7 @@ Мрежна грешка Неуспело слање слике Не могу да пошаљем поруку - Уређај пошиљаоца није нам послао кључеве за ову поруку. + Уређај пошиљаоца није нам послао кључеве за ову поруку. Изменили сте ниво снаге корисника %1$s. посебно посебно (%1$d) @@ -300,21 +300,21 @@ Изгубићете приступ вашим шифрованим порукама уколико не направите резервну копију кључева пре него што се одјавите. Учитавам… У реду - Откажи - Сачувај - Напусти - Остани - Пошаљи - Пошаљи поново - Уклони - Подели - Прихвати - Прескочи + Откажи + Сачувај + Напусти + Остани + Пошаљи + Пошаљи поново + Уклони + Подели + Прихвати + Прескочи Готово - Обустави - Игнориши - Прегледај - Одбаци + Обустави + Игнориши + Прегледај + Одбаци Изађи Радње Одјави се @@ -327,7 +327,7 @@ Означи као прочитано Отвори Затвори - Искључи + Искључи Потврда Упозорење Грешка @@ -368,26 +368,26 @@ Врати се на екран за пријаву Пошаљи Пошаљи е-пошту за ресет - Преименуј - Обриши + Преименуј + Обриши Погледај дешифрован извор Погледај извор - Напред + Напред Касније - Очисти - Говори - Преузми - Цитирај + Очисти + Говори + Преузми + Цитирај Лиценце треће стране Детаљи о заједници Ослушкујем догађања системска Шифрована порука - Пусти + Пусти Активан позив Пријави садржај - Искључи се - Повуци + Искључи се + Повуци Ништа Резервна копија Употребите %1$s или %2$s да наставите. @@ -434,7 +434,7 @@ Одбаци Прихвати Ван везе - Позивница + Позивница или Свеједно пошаљи Свеједно позови @@ -447,9 +447,9 @@ Видео Глас Почни ћаскање - Ресет - Одбаци - Паузирај + Ресет + Одбаци + Паузирај Неуспешно иницијализовање камере Веза није успела Дописник није одговорио. @@ -706,10 +706,10 @@ Синхронизација… Отвори заглавље Листа чланова - Одбаци - Преглед - Придружи се - Избриши + Одбаци + Преглед + Придружи се + Избриши Настави Послати одговор (НЕшифрован)… Послати шифрован дговор… diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 9d880aaa70..c87f81d2f9 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -99,7 +99,7 @@ %1$s ändrade behörighetsnivå för %2$s. %1$s från %2$s till %3$s ** Kan inte avkryptera: %s ** - Avsändarens enhet har inte gett oss nycklarna för det här meddelandet. + Avsändarens enhet har inte gett oss nycklarna för det här meddelandet. Kunde inte dölja Kunde inte skicka meddelandet Misslyckades att ladda upp bilden @@ -295,28 +295,28 @@ Tredjepartslicenser Laddar… OK - Avbryt - Spara - Lämna - Stanna - Skicka - Skicka igen - Ta bort - Citera - Ladda ner - Dela - Prata - Rensa + Avbryt + Spara + Lämna + Stanna + Skicka + Skicka igen + Ta bort + Citera + Ladda ner + Dela + Prata + Rensa Senare - Vidarebefordra + Vidarebefordra Permanent länk Visa källkod Visa avkrypterad källkod - Radera - Döp om + Radera + Döp om Ingen - Återkalla - Koppla ifrån + Återkalla + Koppla ifrån Rapportera innehåll Aktivt samtal Pågående gruppsamtal. @@ -333,15 +333,15 @@ Ring ändå Skicka ändå eller - Bjud in + Bjud in Bortkopplad - Godkänn - Hoppa över + Godkänn + Hoppa över Färdig - Avbryt - Ignorera - Granska - Avslå + Avbryt + Ignorera + Granska + Avslå Avsluta Handlingar Logga ut @@ -356,7 +356,7 @@ Öppna Stäng Kopierat till klippbordet - Stäng av + Stäng av Bekräftelse Varning Fel @@ -580,10 +580,10 @@ JA NEJ Fortsätt - Ta bort - Gå med - Förhandsvisning - Avslå + Ta bort + Gå med + Förhandsvisning + Avslå Lista medlemmar Öppna rubrik Synkroniserar… @@ -647,7 +647,6 @@ Ignorera Filtrera rumsmedlemmar RUM - RUM %d rum %d rum @@ -1062,9 +1061,9 @@ Nuvarande språk Andra tillgängliga språk Laddar tillgängliga språk… - Spela - Pausa - Avfärda + Spela + Pausa + Avfärda Kopiera Framgång Aviseringar @@ -1292,16 +1291,6 @@ Sök Inga resultat MEDDELANDEN - GÅ MED - KATALOG - FAVORITER - LÅG PRIORITET - INBJUDNINGAR - Starta chatt - Skapa rum - Gå med i rum - Gå med i ett rum - Skriv ett rums-ID eller ett rumsalias Bläddra i katalogen Söker i katalog… Favorit @@ -1566,7 +1555,7 @@ Förhindra skärmdumpar av appen Att aktivera den här inställningen lägger till FLAG_SECURE till alla aktiviteter. Starta om appen för att inställningen ska få effekt. Använd senaste ${app_name} på dina andra enheter; ${app_name} Web, ${app_name} iOS, ${app_name} för Android, eller annan Matrixklient som stöder korssignering - eller en annan Matrixklient som städer korssignering + eller en annan Matrixklient som städer korssignering Använd senaste ${app_name} på dina andra enheter: Tvingar den nuvarande utgående gruppsessionen i ett krypterat rum att kasseras Säkerhetskopian kunde inte avkrypteras med den här återställningsnyckeln: vänligen verifiera att du skrev in rätt återställningsnyckel. @@ -1925,8 +1914,8 @@ Kom ikapp med olästa meddelanden här Konversationer Reaktioner - Acceptera - Gilla + Acceptera + Gilla Lägg till reaktion Visa reaktioner Reaktioner @@ -2184,15 +2173,6 @@ Nej Anslutningen till servern har tappats Flygplansläge är på - - %d röst - %d röster - - - %d röst - Slutgiltigt resultat - %d röster - Slutgiltigt resultat - - Valt alternativ Skapar en enkel omröstning Använd en återställningslösenfras eller -nyckel Ny inloggning @@ -2371,7 +2351,6 @@ Visa statushändelser angående rumsmedlemmar Inkluderar när personer bjuds in, går med, lämnar, kickas, bannas eller byter sin avatar eller sitt namn. Omröstning - Bottknappar Reagerade med: %s Verifieringsavslutning Länken var felformaterad @@ -2431,7 +2410,7 @@ Filtrera bannade användare Du har inte behörighet att starta ett samtal Du har inte behörighet att starta ett gruppsamtal - Återställ + Återställ Ämne Förkasta ändringar Det finns osparade ändringar. Förkasta ändringarna\? @@ -2711,7 +2690,7 @@ Föreslagna rum Bjud in till %s Dela länk - Bjud in med användarnamn + Bjud in med användarnamn Bjud in via e-post Det är bara du här för tillfället. %s kommer att vara ännu bättre med fler. Bjud in personer till ditt utrymme @@ -3002,7 +2981,7 @@ Bjud in med e-post, hitta kontakter och mer… Slutför inställning av upptäckbarhet. Du använder för närvarande ingen identitetsserver. För att bjuda in teammedlemmar och kunna upptäckas av dem, konfigurera en nedan. - Bjud in med användarnamn eller e-postadress + Bjud in med användarnamn eller e-postadress Otillgänglig Offline Online @@ -3032,4 +3011,50 @@ Inte nu För att hitta existerande kontakter så behöver du skicka kontaktinfo (e-postadresser och telefonnummer) till din identitetsserver. Vi hashar din data innan den skickas av sekretesskäl. Går du med på att skicka den här infon\? + Du kan stänga av detta när som helst i inställningarna + Vi delar inte information med tredje parter + Vi spelar inte in eller profilerar någon kontodata + här + Hjälp oss att identifiera problem och förbättra Element genom att dela anonym användningsdata. För att förstå hur personer använder multipla enheter så generar vi en slumpmässig identifierare som delas mellan dina enheter. +\n +\nDu kan läsa alla våra villkor %s. + Hjälp att förbättra Element + Aktivera + Är du säker på att du vill ta bort den här omröstningen\? Du kommer inte kunna få tillbaka den när den har tagits bort. + Ta bort omröstning + Omröstning avslutad + Röst avgiven + Aktivera omröstningar + Avsluta omröstningen + Det här kommer att stoppa personer från att rösta och visa det slutgiltiga resultatet av omröstningen. + Avsluta den här omröstningen\? + vinnande alternativ + Avsluta omröstning + + Slutgiltigt resultat baserat på %1$d röst + Slutgiltigt resultat baserat på %1$d röster + + + Baserat på %1$d röst + Baserat på %1$d röster + + + %1$d röst + %1$d röster + + Systeminställningar + Versioner + Få hjälp med att använda Element + Hjälp och support + Hjälp + Legalt + Den här servern förser ingen policy. + Tredjepartsbibliotek + Din identitetsservers policy + ${app_name}s policy + Din hemservers policy + + %1$d röst avgiven. Rösta för att se resultatet + %1$d röster avgivna. Rösta för att se resultatet + \ No newline at end of file diff --git a/vector/src/main/res/values-szl/strings.xml b/vector/src/main/res/values-szl/strings.xml index e060344ae4..ad3e626685 100644 --- a/vector/src/main/res/values-szl/strings.xml +++ b/vector/src/main/res/values-szl/strings.xml @@ -1,32 +1,32 @@ - Zawrzij - Strzim - Ôdtwōrz + Zawrzij + Strzim + Ôdtwōrz Aktywne połōnczynie Zgłoś zawartość - Rozłōncz - Ôdkoż + Rozłōncz + Ôdkoż Brak - Przemianuj - Skasuj + Przemianuj + Skasuj Pokoż ôdszyfrowane zdrzōdło Pokoż zdrzōdło Bezpostrzedni link - Przekoż + Przekoż Niyskorzij - Wymaż - Godej - Udostympnij - Pobier - Cytuj - Wymaż - Wyślij zaś - Wyślij - Ôstōń - Pociep - Spamiyntej - Pociep + Wymaż + Godej + Udostympnij + Pobier + Cytuj + Wymaż + Wyślij zaś + Wyślij + Ôstōń + Pociep + Spamiyntej + Pociep OK Wgrowanie… Licyncyje podmiotōw trzecich diff --git a/vector/src/main/res/values-te/strings.xml b/vector/src/main/res/values-te/strings.xml index 14232e65eb..ffe6c1d5a5 100644 --- a/vector/src/main/res/values-te/strings.xml +++ b/vector/src/main/res/values-te/strings.xml @@ -38,7 +38,7 @@ %2$sకోసం %1$s ఆహ్వానాన్ని అంగీకరించారు ** వ్యక్తీకరించడానికి సాధ్యం కాలేదు: %s ** - ఈ సందేశానికి పంపేవారి పరికరం మాకు కీలను పంపలేదు. + ఈ సందేశానికి పంపేవారి పరికరం మాకు కీలను పంపలేదు. గది స్క్రీన్ సందేశం పంపడం సాధ్యం కాలేదు @@ -69,32 +69,32 @@ గది అలాగే సభ్యుని వివరాలు - దాచు + దాచు సంకేతపదం మరచిపోయారా? - పంపు - చెరిపేయి - పంచుకొను - తొలగించు - ఆహ్వానము + పంపు + చెరిపేయి + పంచుకొను + తొలగించు + ఆహ్వానము తెరువు చారిత్రిక - వదిలివేయు - తిరిగిపంపు + వదిలివేయు + తిరిగిపంపు సందేశాలు అమరికలు - రద్దుచేయి + రద్దుచేయి తరువాత మూలాన్ని వీక్షించండి - పేరు మార్చండి + పేరు మార్చండి కాల్ను ప్రారంభించలేరు, దయచేసి తరువాత ప్రయత్నించండి పరికర సమాచారం లేదా విడియో కాల్ మూసివేయు క్లిప్బోర్డ్కు నకలు చేయబడింది - అచేతనపరచు + అచేతనపరచు నిర్ధారణ హెచ్చరిక @@ -133,8 +133,8 @@ బగ్ నివేదిక దయచేసి బగ్ను వివరించండి. మీరు ఎం చేసారు? మీరు ఏమి జరిగే అవకాశము ఉందనుకున్నారు? వాస్తవానికి ఏం జరిగింది? ఇక్కడ మీ సమస్యను వివరించండి - కోట్ - ముందుకు + కోట్ + ముందుకు పెర్మాలింక్ డెక్రిప్టెడ్ మూలాన్ని చూడండి నివేదిక వివరాలు @@ -253,9 +253,9 @@ కాదు కొనసాగించండి - తీసివేయి - చేరండి - తిరస్కరించు + తీసివేయి + చేరండి + తిరస్కరించు మొదటి చదవని సందేశానికి వెళ్ళు. @@ -348,17 +348,6 @@ ప్రజలు దస్త్రాలు - చేరు - డైరెక్టరీ - గదులు - తక్కువ ప్రాధాన్యత - ఆహ్వానాలు - చాట్ ప్రారంభించండి - గదిని సృష్టించండి - గదిలో చేరండి - ఒక గదిలో చేరండి - ఒక గది id లేదా ఒక గది alias టైప్ చేయండి - డైరెక్టరీలో విహరించండి డైరెక్టరీని వెతుకుతున్నాం.. @@ -559,7 +548,7 @@ "మీ కెమెరాను మరియు మీ శబ్ద ప్రసారిణి సాంగత్యం చేయడానికి రియోట్కు అనుమతి అవసరం. \n \nదయచేసి పిలుపు చేయడానికి వీలుగా తదుపరి పాప్-అప్ల్లో ప్రాప్యతను అనుమతించండి." - ప్రత్యేక ప్రదర్శన + ప్రత్యేక ప్రదర్శన ఇది ఈ గది యొక్క పరిదృశ్యం. గది పరస్పర చర్యలు నిలిపివేయబడ్డాయి. ఇది సరిపోలితే, దిగువ ధృవీకరించు బటన్ను నొక్కండి. అది కాకపోతే, అప్పుడు ఎవరో ఈ పరికరాన్ని అడ్డుకుంటున్నారు మరియు మీరు బహుశా బ్లాక్ బటన్ను నొక్కాలనుకుంటున్నారు. diff --git a/vector/src/main/res/values-th/strings.xml b/vector/src/main/res/values-th/strings.xml index 091dc268a0..fef5de0471 100644 --- a/vector/src/main/res/values-th/strings.xml +++ b/vector/src/main/res/values-th/strings.xml @@ -4,7 +4,7 @@ หรือ เปิด ปิด - ปิดใช้งาน + ปิดใช้งาน คำเตือน อ่านแล้ว ข้าม @@ -16,23 +16,23 @@ การตั้งค่า รายละเอียดสมาชิก ตกลง - ยกเลิก - บันทึก - ออก - ส่ง - ดาวน์โหลด - แบ่งปัน - พูด - ลบ - เปลี่ยนชื่อ - ข้าม + ยกเลิก + บันทึก + ออก + ส่ง + ดาวน์โหลด + แบ่งปัน + พูด + ลบ + เปลี่ยนชื่อ + ข้าม ส่งสติ๊กเกอร์ กำลังโหลด… - ส่งต่อ + ส่งต่อ ไม่มี รายงานเนื้อหา - เล่น - หยุดชั่วคราว + เล่น + หยุดชั่วคราว เสียง วิดีโอ หน้าหลัก @@ -141,26 +141,26 @@ วางสาย ปฏิเสธ ยอมรับ - ปฏิเสธ - เพิกเฉย + ปฏิเสธ + เพิกเฉย เสร็จสิ้น - ยอมรับ + ยอมรับ ออฟไลน์ - เชิญ + เชิญ ข้อมูลเซสชั่น ไม่สามารถเริ่มการโทร เริ่มการประชุมเสียง เริ่มการประชุมวิดีโอ เริ่มแชท - รีเซ็ต - ปิด - เลิกเชื่อมต่อ + รีเซ็ต + ปิด + เลิกเชื่อมต่อ ดูต้นฉบับที่ถอดรหัสแล้ว ดูต้นฉบับ ภายหลัง - เอาออก - ส่งใหม่ - อยู่ + เอาออก + ส่งใหม่ + อยู่ สำรองข้อมูล คุณแน่ใจหรือไม่\? รายละเอียดชุมชน @@ -173,7 +173,6 @@ %d ห้อง - เข้าร่วม ยังไม่รองรับการค้นหาในห้องที่เข้ารหัส ไฟล์ ผู้คน @@ -244,9 +243,9 @@ ห้อง ไปที่ข้อความแรกที่ยังไม่ได้อ่าน แสดงรายชื่อสมาชิก - ปฏิเสธ - แสดงตัวอย่าง - เข้าร่วม + ปฏิเสธ + แสดงตัวอย่าง + เข้าร่วม ดำเนินการต่อ ไม่ ใช่ @@ -262,7 +261,7 @@ ส่งข้อความเสียง เฉพาะรายชื่อผู้ติดต่อ Matrix ไม่มีห้องสาธารณะ - ยกเลิก + ยกเลิก ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว %1$s ได้ส่งสติ๊กเกอร์ คุณได้ส่งสติ๊กเกอร์ @@ -289,12 +288,6 @@ ลงทะเบียน กำลังค้นหาไดเรกทอรี… เรียกดูไดเรกทอรี - เข้าร่วมห้อง - เข้าร่วมห้อง - สร้างห้อง - เริ่มแชท - ห้อง - ไดเรกทอรี เข้าร่วมแล้ว ไดเรกทอรีผู้ใช้ (%s) ทำให้เป็นผู้ดูแล @@ -306,10 +299,9 @@ ส่งไฟล์ ไดเรกทอรีผู้ใช้ - ล้าง + ล้าง กำลังซิงค์… - เอาออก - รายการโปรด + เอาออก รหัสผ่าน เปลี่ยนรหัสผ่าน เส้นเวลา diff --git a/vector/src/main/res/values-tlh/strings.xml b/vector/src/main/res/values-tlh/strings.xml index 0f7f1ac8e9..4cefe5a9e4 100644 --- a/vector/src/main/res/values-tlh/strings.xml +++ b/vector/src/main/res/values-tlh/strings.xml @@ -20,21 +20,21 @@ vIcha\'rupbeHmoHltaH… luq - qIl - choq - mej - ngeH - ngeHqa\' - jatlhqa\' - lI\' - bon - jatlh - HuvmoH + qIl + choq + mej + ngeH + ngeHqa\' + jatlhqa\' + lI\' + bon + jatlh + HuvmoH SIbI\'Ha\' Hal legh So\'be\'lu\'bogh Hal legh - Qaw\' - pongqa\' + Qaw\' + pongqa\' QumchuqtaH ghogh mIllogh @@ -45,7 +45,7 @@ jIrI\'laHbe\' jan De\' ghap - ruSvep ngeH + ruSvep ngeH Qu\' Qagh ja\' @@ -66,7 +66,7 @@ mejchu\' Dat nej - Qotlh + Qotlh nuvpu\' pa\'mey @@ -147,7 +147,7 @@ ja\'chuq \'e\' mev naDev ja\'chuqqa\' pa\'vamDaq ja\'chuqqa\' - Qaw\' + Qaw\' Qagh ja\' Qagh yIDel! nuq DanID? nuq DapIH? qaS nuq? Qagh tu\'meH, janvamvo\' Qagh De\' ghajboghQonoSmey ngeHlu\'. Qaghvam De\', QonoS, jIH mIllogh je leghlaHbe\' vay\'. Dung ngutlhmey neH ngeH DaneHchugh, \'aplo\'vam yISIj: diff --git a/vector/src/main/res/values-tr/strings.xml b/vector/src/main/res/values-tr/strings.xml index 6fc2a5a738..de0762f3cf 100644 --- a/vector/src/main/res/values-tr/strings.xml +++ b/vector/src/main/res/values-tr/strings.xml @@ -16,27 +16,27 @@ Topluluk ayrıntıları Yükleniyor… Tamam - İptal - Kaydet + İptal + Kaydet Okunmamış ilk mesaja git. Çıkartma gönder 3. parti lisansları - Ayrıl - Gönder - Tekrar gönder - Sil - Alıntı - İndir - Paylaş - Konuş - Temizle + Ayrıl + Gönder + Tekrar gönder + Sil + Alıntı + İndir + Paylaş + Konuş + Temizle Sonra - İleri + İleri Kalıcı bağlantı Kaynağı İncele Deşifre Edilmiş Kaynağı İncele - Sil - Yeniden Adlandır + Sil + Yeniden Adlandır İçeriği bildir Şu anki görüşme Devam eden konferans görüşmesi. @@ -51,7 +51,7 @@ Konferans görüşmeleri şifreli (encrypted) odalarda desteklenmiyor Ne olursa olsun gönder veya - Davet et + Davet et Çevrimdışı Çık Aksiyonlar @@ -65,7 +65,7 @@ Kapa Panoya kopyalandı - Etkisizleştir + Etkisizleştir Onay Uyarı Ev @@ -159,13 +159,13 @@ Emin misiniz? Yedekle Oturumu kapatmadan önce anahtarlarınızı yedeklemezseniz şifrelenmiş mesajlarınıza erişiminizi kaybedeceksiniz. - Kal + Kal Eksik izinler nedeniyle bu eylem mümkün değil. Yine de Ara - Kabul Et - Atla + Kabul Et + Atla Tamamlandı - İptal Et + İptal Et Oturumunuzu kapatmak istediğinizden emin misiniz? Anahtarlar yedekleniyor… Tüm anahtarlar yedeklendi @@ -309,10 +309,10 @@ EVET HAYIR Devam et - Sil - Katıl - Önizleme - Reddet + Sil + Katıl + Önizleme + Reddet Üyeleri Listele Başlık Aç Eşzamanlanıyor… @@ -447,17 +447,6 @@ MESAJLAR KİŞİLER DOSYALAR - KATIL - DİZİN - FAVORİLER - ODALAR - DÜŞÜK ÖNCELİK - DAVETLER - Sohbet başlat - Oda oluştur - Odaya katıl - Bir odaya katıl - Oda ID\'si ya da takma adı girin Dizinlere gözat 1 oda @@ -1062,11 +1051,11 @@ Hizmet başlatılıyor Oturumu doğrula Hiç (Yok) - Geri Al - Bağlantıyı Kes - Yoksay - Gözden Geçir - Reddet + Geri Al + Bağlantıyı Kes + Yoksay + Gözden Geçir + Reddet Okunmuş olarak işaretle Arama yanlış yapılandırılmış sunucudan dolayı başarısız oldu %s kullanmayı deneyin @@ -1234,8 +1223,8 @@ Odalar Odalar burada görünecek. Mevcut odaları görmek ya da kendi odanızı kurmak için aşağıdan + butonuna tıklayın. Tepkiler - Bencede - Beğendim + Bencede + Beğendim Bir Tepki Ekle Tekpileri Görüntüle Tepkiler @@ -1270,9 +1259,9 @@ Batarya için optimize edildi Uygulama arka plandayken gelen mesajlar için uyarılmayacaksınız. Ayarlar güncellenemedi. - Oynat - Durdur - Kapat + Oynat + Durdur + Kapat Kopyala Başarılı Bildirimler @@ -1430,7 +1419,7 @@ Bu odada konferans görüşmesi başlatma izniniz yok Bu odada arama başlatma izniniz yok Sohbet etmeye başla - Sıfırla + Sıfırla Sistem Varsayılan Teması Bekleniyor Öneriler diff --git a/vector/src/main/res/values-tzm/strings.xml b/vector/src/main/res/values-tzm/strings.xml index 3566c14f0d..7ac06c77bb 100644 --- a/vector/src/main/res/values-tzm/strings.xml +++ b/vector/src/main/res/values-tzm/strings.xml @@ -39,7 +39,6 @@ Dɣer Azen Tuzinin - LKEM IFUYLA Rzu Ifuyla @@ -50,8 +49,8 @@ %das %das - Agy - Lkem + Agy + Lkem UHU YAH Aɣuri… @@ -66,21 +65,21 @@ Ṛẓem Tigawin Ffeɣ - Agy - Ɣer + Agy + Ɣer neɣ Afidyu - Ɣer - Kkes - Sfeḍ - Ssiwel - Bḍu - Agem - Ssifeḍ - Azen - Ffeɣ - Ḥḍu - Sser + Ɣer + Kkes + Sfeḍ + Ssiwel + Bḍu + Agem + Ssifeḍ + Azen + Ffeɣ + Ḥḍu + Sser WAX Asali… Tuzend yat twellaft. @@ -94,11 +93,11 @@ Azen Asentem Agy - Ttu - Agy + Ttu + Agy Awd yan - Sfeḍ - Qqim + Sfeḍ + Qqim Tegdeld %1$s igdel %1$s %2$s Teɣrid-d i %1$s diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index dff85c08a8..4446edcf00 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -4,7 +4,6 @@ %1$s надсилає зображення. %s запрошення %1$s запрошує %2$s - Запрошення від %s Запрошення до кімнати %1$s і %2$s @@ -45,7 +44,7 @@ %1$s надсилає запрошення %2$s приєднатися до кімнати %1$s приймає запрошення до %2$s ** Неможливо розшифрувати: %s ** - Пристрій відправника не надіслав нам ключ для цього повідомлення. + Пристрій відправника не надіслав нам ключ для цього повідомлення. Не вдається редагувати Не вдалося надіслати повідомлення Не вдалося завантажити зображення @@ -173,37 +172,33 @@ Ви відкликали запрошення для %1$s Ви заблокували %1$s Ви заблокували %1$s - Світла Тема Темна Тема OLED Тема - Синхронізація… Стеження за подіями - Повідомлення Кімната Налаштування Інформація про учасника Історія Звіт про ваду - Гаразд - Скасувати - Зберегти - Вийти - Надіслати - Надіслати ще раз - Прибрати - Цитувати - Поділитися + Скасувати + Зберегти + Вийти + Надіслати + Надіслати ще раз + Прибрати + Цитувати + Поділитися Пізніше - Переслати + Переслати Постійне посилання Переглянути початковий код Переглянути розшифроване джерело - Видалити - Перейменувати + Видалити + Перейменувати Поскаржитись на вміст Активний виклик Відбувається конференц-дзвінок. @@ -216,11 +211,10 @@ Не вдалося здійснити виклик Інформація про пристрій Конференц-дзвінки не підтримуються у зашифрованих кімнатах - Все одно надіслати + Усе одно надіслати або - Запрошення + Запрошення Не в мережі - Вийти з облікового запису Голосовий виклик Відеовиклик @@ -231,24 +225,19 @@ Відкрити Закрити Скопійовано до буфера обміну - Вимкнути - + Вимкнути Підтвердження Попередження - Домівка Обрані Люди Кімнати - Пошук кімнат Пошук обраних Пошук людей Пошук кімнат - Запрошення Неважливі - Бесіди Локальні контакти Каталог користувачів @@ -256,7 +245,6 @@ Немає бесід Ви не надали ${app_name} доступу до контактів Немає результатів - Кімнати Каталог кімнат Кімнати відсутні @@ -293,7 +281,6 @@ Здійснити відеовиклик Надсилання файлів Зняти світлину чи відео - Увійти Реєстрація Надіслати @@ -337,7 +324,6 @@ На адресу %s надіслано електронний лист. Як тільки ви перейдете за посиланням у ньому, натисніть нижче. Не вдалося перевірити email: переконайтеся, що ви перейшли за посиланням у листі Пароль скинуто.\n\nВсі ваші пристрої деаутентифіковано, а ви більше не отримаєте push-сповіщень. Щоб увімкнути їх, залогуйтеся знову на всіх пристроях. - URL має починатися з http[s]:// Збій входу: Мережева помилка Збій входу @@ -352,28 +338,20 @@ Надіслано забагато запитів Ім\'я користувача вже використовується Ви не перейшли за посиланням в електронному листі - - - Перегляд списку вступників - - + Список міток прочитання Надіслати як Оригінал Великий Середній Малий - "Скасувати завантаження? Скасувати відвантаження? %d с %1$dхв %2$dс - Вчора Сьогодні - Назва кімнати Тема кімнати - Виклик з\'єднано Встановлюється з\'єднання… Виклик завершено @@ -386,10 +364,8 @@ Медіавиклик не вдався Неможливо ініціювати камеру Дзвінок прийнято іншим пристроєм - Зняти світлину чи відео" Не вдалося записати відео" - Інформація Для передачі та збереження вкладень потрібен доступ до медіатеки.\n\nБудь ласка, надайте його у наступному виринаючому вікні, щоб отримати змогу надсилати файли з вашого телефону. Для зйомки та відеодзвінків необхідно мати доступ до камери. @@ -402,30 +378,24 @@ \n \nНадати ${app_name} доступ до ваших контактів\? Вибачте.. Дію не виконано через нестачу дозволів - Збережено Зберегти в завантаженнях? ТАК НІ Продовжити - - Видалити - Приєднатися - Попередній перегляд - Відхилити - + Видалити + Приєднатися + Попередній перегляд + Відхилити Перейти до непрочитаного - %s запросив(ла) вас приєднатися до цієї кімнати Запрошення надіслано на адресу %s, не пов\'язану з цим обліковим записом.\nВи можете увійти під іншим обліковим записом чи приєднати email до цього. Ви намагаєтесь отримати доступ до %s. Бажаєте приєднатися щоб взяти участь у обговоренні? кімната Це попередній перегляд кімнати. Ви в режимі лише читання. - Новий Чат Додати учасника 1 учасник - Вийти з кімнати Ви впевнені, що хочете вийти з кімнати\? Ви впевнені, що бажаєте вилучити %s з цієї кімнати\? @@ -453,7 +423,6 @@ Ви не зможете скасувати цю дію, оскільки надаєте користувачу той же рівень повноважень, що й у вас. \nВи впевнені\? Ви впевнені, що бажаєте запросити %s до цієї кімнати\? - Запросити за ID Локальні Контакти (%d) Каталог Користувачів (%s) @@ -461,7 +430,6 @@ Запросити користувача за ID Введіть одну чи декілька email адрес або Matrix ID Email або Matrix ID - Пошук %s друкує… %1$s & %2$s друкують… @@ -472,12 +440,11 @@ Повідомлення не надіслані. %1$s або %2$s зараз? Повідомлення не надіслані через присутність невідомих сеансів. %1$s або %2$s зараз\? Повторити надсилання - скасувати все + Скасувати все Надіслати ненадіслані повідомлення знову Видалити не надіслані повідомлення Файл не знайдено Ви не маєте дозволу писати повідомлення у цій кімнаті. - Довіряти Не довіряти Вийти @@ -489,7 +456,6 @@ Сертифікат почав відрізнятися від того, якому довіряв ваш телефон. Це ДУЖЕ НЕЗВИЧНО. Наполегливо радимо НЕ ПРИЙМАТИ цей новий сертифікат. Сертифікат змінився з довіреного на недовірений. Сервер міг оновити свій сертифікат. Зв\'яжіться з адміністратором сервера, щоб отримати дійсний відбиток. Приймайте сертифікат лише у випадку збігу відбитку вище з відбитком, оприлюдненим адміністратором сервера. - Деталі про кімнату Люди Файли @@ -497,14 +463,12 @@ Викривлений ID. Використовуйте email адресу або Matrix ID вигляду \'@localpart:domain\' ЗАПРОШЕНІ ПРИЄДНАЛИСЯ - Причина скарги на цей вміст Бажаєте сховати всі повідомлення цього користувача\? \n \nЗауважте, що це перезавантажить застосунок та може тривати деякий час. Скасувати відвантаження Скасувати завантаження - Пошук Фільтр переліку користувачів Тут порожньо @@ -512,28 +476,13 @@ ПОВІДОМЛЕННЯ ЛЮДИ ФАЙЛИ - - ПРИЄДНАЛИСЯ - КАТАЛОГ - ОБРАНІ - КІМНАТИ - НЕВАЖЛИВІ - ЗАПРОШЕННЯ - Почати чат - Створити кімнату - Увійти до кімнати - Увійти до кімнати - Введіть id кімнати чи аліас - Огляд каталогу Пошук у каталозі… - Обране Не терміново Особиста бесіда Вийти з бесіди Забути - Повідомлення Налаштування Версія @@ -541,7 +490,6 @@ Примітки третіх сторін Copyright Політика приватності - Аватар Показуване ім\'я Е-пошта @@ -591,7 +539,6 @@ Сеанси Показувати час надсилання для всіх повідомлень Показувати час надсилання у 12-годинному форматі - Телеметрія Режим економії трафіку Про пристрій @@ -604,7 +551,7 @@ Аутентифікація Пароль: Надіслати - Залоговано як + Ви увійшли як Домашній сервер Сервер ідентифікації Інтерфейс користувача @@ -637,42 +584,33 @@ Введіть код активації Сталася помилка під час перевірки вашого номера Код - 3 дні 1 тиждень 1 місяць Завжди - - Світлина кімнати Назва кімнати Тема Мітка кімнати Позначено як: - Улюблені Неважливі Жодного - Доступ та видимість Показувати кімнату в каталозі Доступ Прочитність історії Хто може читати історію повідомлень? Хто має доступ до кімнати? - Будь-хто Лише учасники (з моменту вибору цієї опції) Лише учасники (з моменту запрошення) Лише учасники (з моменту вступу) - Щоб посилатися на кімнату, вона повинна мати адресу. Лише запрошені Будь-хто з посиланням, окрім гостів Будь-хто з посиланням, включно з гостями - Заблоковані користувачі - Розширені Внутрішній ID кімнати Адреси @@ -683,7 +621,6 @@ Вийдіть з облікового запису, щоб отримати змогу увімкнути шифрування. Шифрувати лише для звірених сеансів Ніколи не надсилати зашифровані повідомлення з цього сеансу незвіреним сеансам у цій кімнаті. - Кімната не має локальної адреси Нова адреса (наприклад #foo:matrix.org) Хибний формат псевдоніма @@ -697,11 +634,8 @@ У цій кімнаті увімкнено шифрування. У цій кімнаті вимкнено шифрування. Увімкнути шифрування \n(увага: вимкнути його неможливо!) - Каталог - %s намагався завантажити певну точку зі стрічки подій цієї кімнати, але не зміг її знайти. - Дані про наскрізне шифрування Інформація про подію ID користувача @@ -745,23 +679,19 @@ Підтвердьте, порівнявши вказане за допомогою налаштувань користувача в іншому сеансі: Якщо вони відрізняються, безпека вашого зв\'язку може бути під загрозою. Я підтверджую, що ключі збігаються - Кімната містить невідомі сеанси Кімната містить незвірені невідомі сеанси. \nЦе означає відсутність будь-яких гарантій у тому, що сеанси належать тим користувачам, які заявляють про належність цих сеансів їм. \nМи радимо вам звірити кожен сеанс перед тим, як продовжити, проте ви можете перенадіслати повідомлення без звірки, якщо цього бажаєте. \n \nНевідомі сеанси: - Вибір каталогу кімнат Можливо сервер недоступний чи перевантажений Введіть сервер для показу каталогу публічних кімнат Ім\'я сервера Всі кімнати на сервері %s Усі кімнати сервера %s - Пошук в історії - Розмір шрифту Крихітний Дрібний @@ -770,12 +700,10 @@ Великий Найбільший Величезний - Вам потрібен дозвіл, щоб керувати віджетами у цій кімнаті Помилка створення віджету Здійснювати конференц дзвінки через Jitsi Ви впевнені, що бажаєте видалити віджет із цієї кімнати\? - Не вдалося створити віджет. Не вдалося надіслати запит. Рівень повноважень має бути цілим додатним числом. @@ -791,19 +719,16 @@ Записати відео Виклик Тема - Увага! Вимкнено Гучно Зашифроване повідомлення Використовувати рідну камеру - Щойно доданий вами пристрій \'%s\' править ключі шифрування. Ваш незвірений пристрій «%s» вимагає ключі шифрування. Почати перевірку Поділитись без перевірки Знехтувати запит - Помилка виконання команди Команду %s не розпізнано Відомості про спільноту @@ -842,16 +767,16 @@ \n \nДодати зараз\? - %d активний участник - %d активних участника - %d активних участників - + %d активний учасник + %d активні учасники + %d активних учасників + %d активних учасників - %d участник - %d участника - %d участників - + %d учасник + %d учасники + %d учасників + %d учасників Заблокованих користувачів буде вилучено з цієї кімнати й вони не зможуть приєднатися знову. @@ -866,9 +791,9 @@ • Сповіщення містять лише метадані • Зміст повідомлення було надійно розміщено на домашньому сервері Matrix Ліцензії сторонніх виробників - Завантажити - Говорити - Очистити + Завантажити + Говорити + Очистити Вдруге запитати ключі шифрування з інших ваших сеансів. Запит ключа надіслано. Запит надіслано @@ -1074,7 +999,7 @@ %1$s: %2$s +%d %d+ - Все одно подзвонити + Усе одно зателефонувати Вилучити Причина Попередній перегляд посилань у чаті, у разі якщо Ваш сервер підтримує таку можливість. @@ -1083,7 +1008,7 @@ Форматування Markdown Форматувати повідомлення з використанням синтаксису Markdown перед надсиланням. Це дає можливість розгорнутого форматування, як-от використання зірочок для показу курсивного тексту. Показувати підтвердження прочитання - Натискати на підтвердження прочитання для детального переліку. + Натискайте мітки прочитання для детального переліку. Показувати події приєднання та виходу Це не стосується запрошень, вилучень і блокувань. Показувати події облікових записів @@ -1098,7 +1023,7 @@ Використовувати стандартний рингтон ${app_name} для вхідних викликів Мелодія вхідного виклику Виберіть мелодію викликів: - Прийняти + Прийняти Будь ласка, ознайомтесь та прийміть правила цього серверу: Позначити прочитаним Запуск сервісу @@ -1144,12 +1069,12 @@ Покласти слухавку Відхилити Відповісти - Відмовити - Огляд - Знехтувати - Перервати + Відмовити + Огляд + Знехтувати + Перервати Готово - Пропустити + Пропустити Не вдалося видалити віджет Не вдалося додати віджет Ви не можете здійснити дзвінок із самим собою @@ -1160,12 +1085,12 @@ У вас немає повноважень на дзвінок у цій кімнаті У вас немає повноважень розпочати конференц-дзвінок У вас немає повноважень розпочати конференц-дзвінок у цій кімнаті - Скинути - Відхилити - Пауза - Грати - Від’єднатися - Залишитися + Скинути + Відхилити + Пауза + Грати + Від’єднатися + Залишитися Резервна копія Ви впевнені\? Використати резервну копію ключів @@ -1200,14 +1125,14 @@ Режим розробника Додаткові налаштування Розширені налаштування сповіщень - Голос та відео + Голос і відео Налаштування Інші сеанси Поточний сеанс Налаштування Сповіщення Налаштування - Відкликати + Відкликати немає Ви втратите доступ до своїх зашифрованих повідомлень, якщо не зробите резервну копію ключів перед виходом з системи. Безпечне резервне копіювання ключів має бути активним у всіх ваших сеансах, щоб не втратити доступу до ваших зашифрованих повідомлень. @@ -1281,7 +1206,7 @@ Фільтрувати бесіди… Бесіди У вас більше немає непрочитаних повідомлень - Все прочитано! + Усе прочитано! Встановти важливість сповіщень за подіями Сховати розширені Показати розширені @@ -1354,9 +1279,9 @@ Або захистіть свою резервну копію за допомогою ключа відновлення, зберігаючи її десь у безпеці. Створення резервної копії Встановіть парольну фразу - Ми збережемо зашифровану копію ваших ключів на вашому домашньому сервері. Захистіть свою резервну копію парольною фразою, щоб захистити її. + Ми збережемо зашифровану копію ваших ключів на вашому домашньому сервері. Захистіть свою резервну копію парольною фразою. \n -\nДля максимальної безпеки він повинен відрізнятися від пароля вашого облікового запису. +\nДля максимальної безпеки фраза повинна відрізнятися від пароля вашого облікового запису. Захистіть свою резервну копію за допомогою парольної фрази. Експорт ключів вручну Почати використовувати резервне копіювання ключів @@ -1834,7 +1759,7 @@ Не вдалося розшифрувати резервну копію цією парольною фразою: переконайтесь, що вказано правильну парольну фразу відновлення. Не знаєте вашої відновлювальної парольної фрази\? Ви можете %s. Парольна фраза відновлення - Забули або втратили усі можливості для відновлення\? Скинути все + Забули або втратили всі можливості для відновлення\? Скинути все Використати файл Скористатись парольною фразою відновлення або ключем Скористатись відновлювальними парольною фразою або ключем @@ -1850,7 +1775,7 @@ Новий вхід. Це були ви\? Оновити Скинути ключі - або будь-який інший, здатний до перехресного підписування, Matrix-клієнт + або будь-який інший, здатний до перехресного підписування, Matrix-клієнт Перехресне підписування не ввімкнене Перехресне підписування увімкнено. \nКлючі не є довіреними @@ -1925,8 +1850,8 @@ Зазначити %s Пароль облікового запису Ключ повідомлення - Подобається - Гаразд + Подобається + Гаразд Реакції Ви приєднались. Запрошування користувачів… @@ -2191,11 +2116,11 @@ Невідоме налаштування доступу (%s) Будь-хто може попроситися до кімнати, учасники можуть прийняти або відхилити Вітаємо в %1$s, %2$s. - Все одно приєднатися + Усе одно приєднатися Створити Простір Приєднатися до Простору Поділитися посиланням - Запросити за користувацьким іменем + Запросити за користувацьким іменем Запросити електронним листом Проведіть пальцем, щоб скасувати Записати голосове повідомлення @@ -2585,7 +2510,6 @@ Ми надіслали вам електронний лист для підтвердження на %s, відкрийте свою е-пошту та клацніть на посилання для підтвердження Ми надіслали вам електронний лист для підтвердження на %s, відкрийте свою е-пошту та клацніть на посилання для підтвердження Ви - Кнопки бота Опитування Файл Голосове @@ -2753,19 +2677,6 @@ Звірити порівнявши емоджі Звірити Створює просте опитування - Вибрана опція - - %d голос - Підсумок - %d голоси - Підсумок - %d голосів - Підсумок - %d голосів - Підсумок - - - %d голос - %d голоси - %d голосів - %d голосів - Ініціалізувати перехресне підписування %1$s (%2$s) входить за допомогою нового сеансу: нестабільна @@ -2875,7 +2786,7 @@ Попередження: вимагає підтримки сервера та експериментальної версії кімнати Бажаєте поекспериментувати\? \nМожете додати наявні простори до простору. - Експериментальний простір - обмежена кімната. + Експериментально: доступ до кімнати для будь-кого в просторі. Усі кімнати, у яких ви перебуваєте, буде показано на сторінці Домівка. Показувати у Домівці Перевірку скасовано @@ -3085,7 +2996,7 @@ Нове: Дозволити людям у просторах знаходити та приєднуватися до приватних кімнат Лише в цю кімнату Вони зможуть переглядати %s - Запрошення за іменем користувача або е-поштою + Запрошення за іменем користувача або е-поштою Головне Поділитися у тексті Показувати лише кількість непрочитаних повідомлень у звичайному сповіщенні. @@ -3118,12 +3029,12 @@ Це запрошення до простору надіслане %s, не пов\'язаній із вашим обліковим записом Це запрошення до кімнати надіслане %s, не пов\'язаній із вашим обліковим записом Кімнати можуть лишатися закритими для людей ззовні простору, водночас люди в просторі можуть знаходити їх і приєднуватися. Всі нові кімнати в просторі матимуть цю опцію. - Допомагає людям у просторах знаходити закриті кімнати й приєднуватися власноруч, без потреби вручну запрошувати всіх. + Допомагає людям у просторах знаходити закриті кімнати й приєднуватися самостійно, без потреби вручну запрошувати всіх. Зауважте, що поліпшення створить нову версію кімнати. Всі наявні повідомлення залишаться в цій архівованій кімнаті. Будь-хто в батьківському просторі зможемо знайти кімнату й долучитись — нема потреба вручну запрошувати всіх. Можна змінити це в налаштуваннях кімнати будь-коли. Будь-хто в %s зможе знайти кімнату й долучитись — нема потреби вручну запрошувати всіх. Можна змінити це в налаштуваннях кімнати будь-коли. Не вдалося відповісти чи редагувати, бо голосове повідомлення активне - Кімната — версії %s, яку домашній сервер позначив як нестабільну. + Кімната — версії %s, яку домашній сервер позначив нестабільною. Дозволити будь-кому в %s знаходити й доступатись. Можете також обрати інші простори. Поліпшення кімнати — серйозна операція. Її зазвичай радять, коли кімната нестабільна через вади, брак функціоналу чи вразливості безпеки. \nЗазвичай це впливає лише на деталі опрацювання кімнати сервером. @@ -3167,7 +3078,7 @@ Згенерувати ключ безпеки для зберігання в надійному місці, наприклад у менеджері паролів чи сейфі. Не вдалося створити особисте повідомлення. Перевірте користувачів, яких бажаєте запросити, й спробуйте ще. Не вдалося розшифрувати резервну копію цим відновлювальним ключем. Звірте, чи правильний ключ ви ввели. - Оберіть свій відновлювальний ключ, введіть його власноруч чи вставте з буферу обміну + Оберіть свій ключ відновлення, введіть його власноруч або вставте з буфера обміну Використати відновлювальний ключ %1$s або %2$s треба для продовження. Відновлювальний ключ резервного копіювання ключів @@ -3194,4 +3105,58 @@ Можете ввімкнути це, якщо в кімнаті співпрацюватимуть лише внутрішні команди на вашому домашньому сервері. Цього більше не можна буде змінити. Цей сеанс — користувача %1$s, а ви надаєте облікові дані користувача %2$s. Це не підтримується в ${app_name}. \nБудь ласка, спершу очистіть дані, а тоді ввійдіть в інший обліковий запис. + + %1$d голос. Проголосуйте, щоб побачити результати + %1$d голоси. Проголосуйте, щоб побачити результати + %1$d голосів. Проголосуйте, щоб побачити результати + %1$d голосів. Проголосуйте, щоб побачити результати + + Точно видалити опитування\? Ви не зможете відновити опитування після видалення. + Видалити опитування + Голосування завершене + Голос надіслано + Увімкнути опитування + Завершити опитування + Люди більше не зможуть голосувати, і будуть показані остаточні результати опитування. + Завершити це опитування\? + варіант-переможець + Завершити опитування + + Остаточний результат на підставі %1$d голосу + Остаточний результат на підставі %1$d голосів + Остаточний результат на підставі %1$d голосів + Остаточний результат на підставі %1$d голосів + + + На підставі %1$d голосу + На підставі %1$d голосів + На підставі %1$d голосів + На підставі %1$d голосів + + + %1$d голос + %1$d голоси + %1$d голосів + %1$d голосів + + Системні налаштування + Версії + Отримати допомогу в використанні Element + Довідка й підтримка + Довідка + Правові положення + Цей сервер не надає політики. + Сторонні бібліотеки + Політика вашого сервера ідентифікації + Політика вашого домашнього сервера + Політика ${app_name} + Можете вимкнути це коли завгодно в налаштуваннях + Ми не передаємо даних стороннім особам + Ми не записуємо й не аналізуємо жодних даних облікового запису + тут + Допомагайте нам визначати проблеми й удосконалювати Element, надсилаючи анонімні дані про використання. Щоб розуміти, як люди використовують кілька пристроїв, ми створимо спільний для ваших пристроїв випадковий ідентифікатор. +\n +\nМожете прочитати всі наші умови %s. + Допоможіть покращити Element + Увімкнути \ No newline at end of file diff --git a/vector/src/main/res/values-uz/strings.xml b/vector/src/main/res/values-uz/strings.xml index b705987cdf..5b61df1cda 100644 --- a/vector/src/main/res/values-uz/strings.xml +++ b/vector/src/main/res/values-uz/strings.xml @@ -1,14 +1,14 @@ Koʻtarish - Rad etish - Koʻrib chiqish - Eʼtiborsiz qoldirish - Tugatish + Rad etish + Koʻrib chiqish + Eʼtiborsiz qoldirish + Tugatish Bajarildi - O\'tkazib yuborish - Qabul qilish - Taklif qilish + O\'tkazib yuborish + Qabul qilish + Taklif qilish yoki Baribir joʻnatish Baribir qo\'ng\'iroq qilish @@ -27,18 +27,18 @@ Joriy konferts-aloaqa. \n%1$s yoki %2$s sifatida qoʻshilish Chatni boshlash - Qayta oʻrnatish - Bekor qilish - Ijro etmoq + Qayta oʻrnatish + Bekor qilish + Ijro etmoq Faol qo\'ng\'iroq Hisobot mazmuni - Ajratish - Bekor qilish + Ajratish + Bekor qilish Yoʻq Shifrlangan manbani ko‘rish Manbani ko‘rish Doimiy aloqa - Oldinga + Oldinga Keyinroq Uchinchi tomonlarning litsenziyalari Chiqishdan oldin kalitlarning zaxira nusxasini yaratmasangiz, shifrlangan xabarlardan foydalanishni yo‘qotishingiz mumkin. @@ -88,20 +88,20 @@ Qoʻngʻiroqni amalga oshirish imkoniyati yoʻq, iltimos keyinroq urunib koʻring Video Ovoz - Pauza - Qayta nomlash - Oʻchirib tashlash - Tozalash - Gapirish - Tarqatish - Yuklash - Oʻchirish - Qayta joʻnatish - Joʻnatish - Qolish - Chiqish - Saqlash - Bekor qilish + Pauza + Qayta nomlash + Oʻchirib tashlash + Tozalash + Gapirish + Tarqatish + Yuklash + Oʻchirish + Qayta joʻnatish + Joʻnatish + Qolish + Chiqish + Saqlash + Bekor qilish OK Yuklanmoqda… Sessiyani verifikatsiya qilish diff --git a/vector/src/main/res/values-vi/strings.xml b/vector/src/main/res/values-vi/strings.xml index 498ee9fbbb..882ec75d32 100644 --- a/vector/src/main/res/values-vi/strings.xml +++ b/vector/src/main/res/values-vi/strings.xml @@ -19,7 +19,7 @@ Phòng Không còn kết quả nào nữa Lọc danh sách yêu thích - Bỏ qua + Bỏ qua Đã có một cuộc hội thoại đang diễn ra! Không có kết quả nào Bạn chưa cho phép ${app_name} truy cập danh bạ của bạn @@ -35,7 +35,7 @@ Lọc tên phòng Lọc người Xác nhận - Tắt + Tắt Lọc tên phòng Cộng đồng Phòng @@ -63,9 +63,9 @@ Cúp máy Từ chối Đồng ý - Từ chối - Huỷ bỏ - Bỏ qua + Từ chối + Huỷ bỏ + Bỏ qua Ngoại tuyến hoặc Vẫn gọi @@ -73,8 +73,8 @@ Không thể bắt đầu cuộc gọi Bắt đầu cuộc họp âm thanh Xong - Đồng ý - Mời + Đồng ý + Mời Vẫn gửi Gọi hội thoại không được hỗ trợ trong phòng chat được mã hoá Thông tin phiên @@ -94,34 +94,34 @@ Có cuộc gọi đến. \nTham gia với tư cách %1$s hoặc %2$s Bắt đầu trò chuyện - Cài lại - Bỏ - Tạm dừng - Chạy + Cài lại + Bỏ + Tạm dừng + Chạy Cuộc gọi đang hoạt động Báo cáo nội dung - Ngắt kết nối - Rút lại + Ngắt kết nối + Rút lại Trống - Đặt lại tên - Xoá + Đặt lại tên + Xoá Xem nguồn đã được giải mã Xem nguồn Đường dẫn - Chuyển tiếp + Chuyển tiếp Để sau - Xoá - Nói - Chia sẻ - Tải xuống - Trích - Xoá - Gửi lại - Gửi - Ở lại - Thoát - Lưu - Huỷ + Xoá + Nói + Chia sẻ + Tải xuống + Trích + Xoá + Gửi lại + Gửi + Ở lại + Thoát + Lưu + Huỷ OK Đang tải… Giấy phép bên thứ ba @@ -291,7 +291,7 @@ Chuyển Kết nối Một số tin nhắn chưa được gửi - Phòng này có bản nháp chưa được gửi + có bản nháp chưa được gửi Xoá ảnh đại diện Thay đổi ảnh đại diện Hình ảnh @@ -327,7 +327,7 @@ Tải hình ảnh lên thất bại Không thể gửi tin nhắn Không thể rút lại - Thiết bị của người gửi chưa gửi cho chúng tôi mã khoá cho tin nhắn này. + Thiết bị của người gửi chưa gửi cho chúng tôi mã khoá cho tin nhắn này. ** Không thể giải mã: %s ** %1$s từ %2$s thành %3$s Tuỳ chỉnh @@ -504,7 +504,7 @@ Huỷ xuất bản Xoá tiện ích thất bại Thêm tiện ích thất bại - Xem xét + Xem xét Chuyển Đã cho vào danh sách đen Đã xác minh @@ -583,10 +583,10 @@ Đang đồng bộ… Mở tiêu đề Liệt kê các thành viên - Từ chối - Xem trước - Tham gia - Xoá + Từ chối + Xem trước + Tham gia + Xoá Tiếp tục KHÔNG @@ -753,13 +753,14 @@ Đồng bộ ban đầu: \nĐang nhập dữ liệu tài khoản Đồng bộ ban đầu: -\nĐang nhập các cộng đồng +\nĐang nhập các Community Đồng bộ ban đầu: \nĐang nhập các phòng đã rời khỏi Đồng bộ ban đầu: \nĐang nhập các phòng đã mời vào Đồng bộ ban đầu: -\nĐang nhập các phòng đã tham gia +\nTải hội thoại của bạn +\nNếu bạn đã tham gia nhiều phòng, điều này có thể mất một thời gian. Đồng bộ ban đầu: \nĐang nhập các phòng Đồng bộ ban đầu: @@ -855,20 +856,20 @@ \@room Tin nhắn trong chat nhóm được mã hóa Tin nhắn trong chat nhóm - Tin nhắn trực tiếp 1-1 được mã hóa - Tin nhắn trực tiếp 1-1 + Tin nhắn trực tiếp 1–1 được mã hóa + Tin nhắn trực tiếp 1–1 Tên đăng nhập của tôi Tên hiển thị của tôi Tin nhắn chứa @room Tin nhắn được gửi bởi bot Khi tôi được mời vào phòng Tin nhắn trong phòng chat nhóm - Tin nhắn trong phòng chat 1-1 + Tin nhắn trong phòng chat 1–1 Tin nhắn chứa tên đăng nhập của tôi Tin nhắn chứa trên tôi Khi phòng được nâng cấp phiên bản Tin nhắn mã hóa trong phòng chat nhóm - Tin nhắn mã hóa trong phòng chat 1-1 + Tin nhắn mã hóa trong phòng chat 1–1 Chọn màu LED, rung, âm thanh… Cấu hình thông báo im lặng Cấu hình thông báo cuộc gọi @@ -1094,9 +1095,9 @@ Hiện mật khẩu Đóng banner sao lưu khóa Tạo phòng chat mới - Tạo phòng chat 1-1 bằng cách quét mã QR - Tạo mới phòng chat 1-1 theo ID Matrix - Tạo mới phòng chat 1-1 + Tạo phòng chat 1–1 bằng cách quét mã QR + Tạo mới phòng chat 1–1 theo ID Matrix + Tạo mới phòng chat 1–1 Đóng menu tạo phòng… Mở menu tạo phòng Gửi tệp đính kèm @@ -1126,7 +1127,7 @@ Tìm Tên Tên hoặc ID Xem danh mục phòng chat - Gửi tin nhắn tới phòng 1-1 + Gửi tin nhắn tới phòng 1–1 Tạo phòng chat mới Không tìm thấy kết quả cần tìm\? Không tìm thấy, sử dụng chức năng thêm thành viên bằng username. @@ -1431,17 +1432,6 @@ %d phòng Duyệt danh mục phòng - Nhập ID hoặc tên phòng - Tham gia phòng - Tham gia phòng - Tạo phòng - Bắt đầu chat - LỜI MỜI - ƯU TIÊN THẤP - PHÒNG - YÊU THÍCH - DANH MỤC - THAM GIA Tìm kiếm trong phòng mã hóa chưa được hỗ trợ. FILES NGƯỜI @@ -1645,4 +1635,1365 @@ Định dạng không phù hợp \'%s\' không phải là một ID cộng đồng hợp lệ ID cộng đồng không hợp lệ + + %1$d cuộc gọi bị tạm dừng + + + %d mục + + + Mã sai, còn lại %d lần thử + + + Các lời mời đã gửi tới %1$s và %2$d người nữa + + + Hiển thị %d thiết bị bạn có thể xác minh ngay bây giờ + + + %d phiên đang hoạt động + + + %1$d người + + + Quá nhiều yêu cầu vừa được gửi. Bạn có thể thử lại trong %1$d giây… + + + Đang sao lưu %d khóa… + + + %d khóa mới vừa được thêm vào phiên này. + + + Đã khôi phục bản sao lưu với % d chìa khóa. + + + %d phòng + + + %d thành viên + + + %d widget hoạt động + + + %d thông báo + + + %1$s: %2$d tin nhắn + + + %d lời mời + + + %d phòng + + + %d tin nhắn được thông báo chưa đọc + + + %d tin nhắn được thông báo chưa đọc + + Bạn có chắc chắn muốn xóa cuộc thăm dò này không\? Bạn sẽ không thể phục hồi nó một khi bị xóa. + Xóa cuộc thăm dò ý kiến + Cuộc thăm dò kết thúc + Bỏ phiếu + Bật Cuộc thăm dò ý kiến + Kết thúc cuộc thăm dò ý kiến + Điều này sẽ ngăn mọi người có thể bỏ phiếu và sẽ hiển thị kết quả cuối cùng của cuộc thăm dò. + Kết thúc cuộc thăm dò này\? + tùy chọn người chiến thắng + Kết thúc cuộc thăm dò ý kiến + Câu hỏi không thể trống + TẠO CUỘC THĂM DÒ Ý KIẾN + THÊM TÙY CHỌN + Tùy chọn %1$d + Tạo tùy chọn + Câu hỏi hoặc chủ đề + Câu hỏi hoặc chủ đề thăm dò ý kiến + Tạo Cuộc thăm dò ý kiến + %s trong Cài đặt để nhận lời mời trực tiếp trong Element. + Liên kết email này với tài khoản của bạn + Lời mời này đến Space này đã được gửi đến %s không được liên kết với tài khoản của bạn + Lời mời này đến phòng này đã được gửi đến %s không được liên kết với tài khoản của bạn + Để giúp các thành viên Space tìm và tham gia một phòng riêng, hãy vào cài đặt của căn phòng đó bằng cách nhấn vào hình đại diện. + Giúp các thành viên Space tìm phòng riêng + Điều này giúp các phòng dễ dàng giữ riêng tư cho một Space, đồng thời cho phép mọi người trong Space tìm và tham gia cùng họ. Tất cả các phòng mới trong một Space sẽ có tùy chọn này có sẵn. + Giúp mọi người trong Space tự tìm và tham gia phòng riêng, không cần phải tự mời mọi người. + Mới: Cho phép mọi người trong Space tìm và tham gia phòng riêng + Xin lưu ý nâng cấp sẽ tạo ra một phiên bản mới của căn phòng. Tất cả các tin nhắn hiện tại sẽ ở trong phòng lưu trữ này. + Bất cứ ai trong Space cha mẹ sẽ có thể tìm và tham gia căn phòng này - không cần phải mời mọi người theo cách thủ công. Bạn sẽ có thể thay đổi điều này trong cài đặt phòng bất cứ lúc nào. + Bất kỳ ai trong %s sẽ có thể tìm và tham gia phòng này - không cần phải mời mọi người theo cách thủ công. Bạn sẽ có thể thay đổi điều này trong cài đặt phòng bất cứ lúc nào. + Tin nhắn Thoại (%1$s) + Không thể trả lời hoặc chỉnh sửa trong khi tin nhắn thoại đang hoạt động + Không thể ghi âm một tin nhắn thoại + Không thể phát tin nhắn thoại này + Bật tin nhắn thoại + Nhấn vào bản ghi âm của bạn để dừng hoặc nghe + %1$d còn lại + Giữ để ghi âm, bỏ ra để gửi + Xóa ghi âm + Đang ghi âm tin nhắn thoại + Dừng ghi âm + Tạm dừng Tin nhắn Thoại + Phát Tin nhắn Thoại + Khóa Tin nhắn Thoại + Vuốt để hủy + Ghi âm tin nhắn thoại + Cuộc gọi nhóm bắt đầu + Xin lỗi, lỗi đã xảy ra trong khi cố gắng gia nhập: %s + Nâng cấp lên phiên bản phòng được đề xuất + Phòng này đang chạy phiên bản phòng %s, mà homeerver này đã đánh dấu là không ổn định. + Cho phép bất kỳ ai trong %s tìm và truy nhập. Bạn cũng có thể chọn các Space khác. + Bạn cần sự cho phép để nâng cấp một phòng + Tự động cập nhật Space cha mẹ + Tự động mời người dùng + Bạn sẽ nâng cấp phòng này từ %1$s lên %2$s + Nâng cấp phòng là một hành động nâng cao và thường được khuyến khích khi phòng không ổn định do lỗi, thiếu tính năng hoặc lỗ hổng bảo mật. +\nĐiều này thường chỉ ảnh hưởng đến cách phòng được xử lý trên máy chủ. + Nâng cấp phòng riêng tư + Nâng cấp phòng công cộng + Yêu cầu nâng cấp + Nâng cấp + Hãy kiên nhẫn, có thể mất một thời gian. + Tham gia phòng thay thế + Hiện tại mọi người có thể không thể tham gia bất kỳ phòng riêng nào bạn làm. +\n +\nChúng tôi sẽ cải thiện điều này như một phần của bản beta, nhưng chỉ muốn cho bạn biết. + Space đồng đội chưa hoàn toàn sẵn sàng nhưng bạn vẫn có thể thử chúng + Phòng không tên + Một số phòng có thể bị ẩn vì chúng riêng tư và bạn cần một lời mời. + Một số phòng có thể bị ẩn vì chúng riêng tư và bạn cần một lời mời. +\nBạn không có quyền thêm phòng. + Space này không có phòng + Vui lòng liên hệ với quản trị viên homeerver của bạn để biết thêm thông tin + Có vẻ như homeerver của bạn chưa hỗ trợ Spaces + Cảm thấy thử nghiệm\? +\nBạn có thể thêm các Space hiện có vào một Space. + Tất cả các phòng bạn đang ở sẽ được hiển thị tại Home. + Hiển thị tất cả các phòng trong Home + Quản lý phòng và Space + Đánh dấu như không đề xuất + Đánh dấu như đề xuất + Đề nghị + Công khai Space này + Quản lý phòng + Tìm kiếm một người không có trong %s\? + %s mời bạn + Cảnh báo yêu cầu hỗ trợ máy chủ và phiên bản phòng thử nghiệm + Space thử nghiệm - Phòng hạn chế. + Bạn được mời + Space là một cách mới để nhóm phòng và con người. + Chào mừng đến Space! + Thêm phòng + Thêm một Space vào bất kỳ Space nào bạn quản lý. + Thêm Space hiện có + Thêm các phòng hiện có + Thêm các phòng và Space hiện có + Chọn những thứ để rời khỏi + Để lại các phòng và Space cụ thể… + Không rời bất kỳ phòng và Space nào + Bạn sẽ để tất cả các phòng và Space trong %s. + Rời khỏi tất cả phòng và Space + Bạn là quản trị viên duy nhất của không gian này. Rời khỏi nó sẽ có nghĩa là không ai có quyền kiểm soát nó. + Bạn sẽ không thể tham gia lại trừ khi bạn được mời lại. + Bạn là người duy nhất ở đây. Nếu bạn rời đi, sẽ không ai có thể tham gia trong tương lai, kể cả bạn + Bạn có chắc chắn muốn rời khỏi %s không\? + Rời khỏi Space + Thêm phòng + Khám phá phòng + Chào mừng bạn đến với %1$s, %2$s. + Bạn vẫn chưa ở trong phòng. Dưới đây là một số phòng được đề xuất, nhưng bạn có thể thấy nhiều hơn với đáy nút màu xanh lá cây bên phải. + Khám phá (%s) + Hoàn tất cài đặt + Mời qua email, tìm liên hệ và hơn thế nữa… + Hoàn tất việc cài đặt khám phá. + Hiện tại bạn không sử dụng máy chủ xác thực. Để mời đồng đội và có thể khám phá bởi họ, hãy cấu hình một bên dưới. + Tham gia Space + Tạo Space + Bỏ qua ngay bây giờ + Gia nhập Space của tôi %1$s %2$s + Mời theo tên người dùng hoặc thư + Mời theo tên người dùng + Mời qua email + Chỉ có anh lúc này thôi. %s sẽ còn tốt hơn với những người khác. + Mời đến %s + Mời mọi người + Mời mọi người vào Space của bạn + Sự mô tả + Đang tạo Space… + Ngẫu nhiên + Tổng quát + Hãy tạo ra một căn phòng cho mỗi người trong số họ. Bạn cũng có thể thêm nhiều hơn sau, bao gồm cả những cái đã có sẵn. + Bạn đang làm gì\? + Đảm bảo đúng người có quyền truy cập vào công ty %s. Bạn có thể mời thêm sau. + Đồng đội của bạn là ai\? + Chúng tôi sẽ tạo ra các phòng cho họ. Bạn cũng có thể thêm nhiều hơn sau. + Một số cuộc thảo luận bạn muốn có trong %s là gì\? + Đặt tên để tiếp tục. + Thêm một số chi tiết để giúp mọi người xác định nó. Bạn có thể thay đổi chúng bất cứ lúc nào. + Thêm một số chi tiết để giúp nó nổi bật. Bạn có thể thay đổi chúng bất cứ lúc nào. + Tạo một Space + Chỉ mời, tốt nhất cho bản thân hoặc các đội + Riêng tư + Mở cửa cho bất cứ ai, tốt nhất cho Community + Công cộng + Một Space riêng tư cho bạn và đồng đội của bạn + Tôi và các đồng đội + Một Space riêng tư để sắp xếp các phòng của bạn + Chỉ tôi + Đảm bảo đúng người có quyền truy nhập vào %s. Bạn có thể thay đổi điều này sau. + Bạn làm việc với ai\? + Để tham gia một Space hiện có, bạn cần một lời mời. + Bạn có thể thay đổi điều này sau + Bạn muốn tạo ra loại Space nào\? + Space là một cách mới để nhóm phòng và con người + Space riêng tư của bạn + Space công cộng của bạn + Thêm Space + Space riêng tư + Space công cộng + Tin nhắn gửi thất bại + Nâng cấp phòng lên phiên bản mới + Để lại phòng với id đã cho (hoặc phòng hiện tại nếu null) + Gia nhập Space với id đã cho + Thêm vào Space đã cho + Tạo một Space + Nội dung sự kiện + Sự kiện trạng thái được gửi! + Sự kiện được gửi! + Sự kiện bị hỏng + Loại tin nhắn bỏ lỡ + Nội dung sự kiện + Chìa khóa trạng thái + Loại + Gửi Sự kiện Trạng thái Tùy chỉnh + Sửa Nội dung + Sự kiện trạng thái + Gửi sự kiện trạng thái + Không có sẵn + Ngoại tuyến + Trực tuyến + Space công cộng + Phòng công cộng + Không kiểm tra + Kiểm tra + Nhập chìa khó từ tệp + Mở widget + Chụp màn hình + Vuốt để kết thúc cuộc gọi + Người dùng không biết + Chuyển sang %1$s + Tư vấn với %1$s + Tư vấn trước + %1$s nhấp nhẹ để trả về + Cuộc gọi đang hoạt động (%1$s) · + Cuộc gọi hiện hoạt động (%1$s) + Liên kết Matrix + Loại bỏ các thay đổi + Có những thay đổi chưa được lưu. Loại bỏ các thay đổi\? + Phòng vẫn chưa được tạo ra. Hủy bỏ việc tạo phòng\? + Liên kết bị hỏng + Mã QR không được quét! + Mã QR không hợp lệ (URI không hợp lệ)! + Không thể tự gửi tin nhắn trực tiếp! + Chia sẻ theo văn bản + Không thể tìm thấy phòng này. Hãy chắc chắn rằng nó tồn tại. + Không thể mở phòng nơi bạn bị cấm. + Xác nhận mã PIN để vô hiệu hóa MÃ PIN + Thay đổi mã PIN hiện tại của bạn + Thay đổi mã PIN + Mã PIN được yêu cầu mỗi khi bạn mở ${app_name}. + Mã PIN được yêu cầu sau 2 phút không sử dụng ${app_name}. + Yêu cầu mã PIN sau 2 phút + Chỉ hiển thị số lượng tin nhắn chưa đọc trong một thông báo đơn giản. + Hiển thị chi tiết như tên phòng và nội dung tin nhắn. + Hiện nội dung trong thông báo + Mã PIN là cách duy nhất để mở khóa ${app_name}. + Bật sinh trắc học cụ thể của thiết bị, như dấu vân tay và nhận dạng khuôn mặt. + Bật sinh trắc học + Nếu bạn muốn đặt lại mã PIN của mình, hãy nhấp vào quên mã PIN để đăng nhập và đặt lại. + Bật MÃ PIN + Cấu hình bảo vệ + Bảo vệ quyền truy cập bằng mã PIN và sinh trắc học. + Bảo vệ quyền truy cập + Để đặt lại mã PIN của mình, bạn sẽ cần đăng nhập lại và tạo mã PIN mới. + Mã PIN mới + Đặt lại mã PIN + Quên mã PIN\? + Nhập mã PIN của bạn + Xác thực mã PIN thất bại, vui lòng nhấp vào mã PIN mới. + Xác nhận mã PIN + Chọn mã PIN để bảo mật + Quá nhiều lỗi, bạn đã bị đăng xuất + Cảnh báo! Nỗ lực cuối cùng còn lại trước khi bị đăng xuất! + Xem lại cài đặt của bạn để bật thông báo Push + Thông báo Push bị vô hiệu hóa + Hủy cấm người dùng thất bại + Bị cấm bởi %1$s + Thu hồi lời mời đến %1$s\? + Thu hồi lời mời + Tìm kiếm danh bạ trên Matrix + Sổ danh bạ + Sổ danh bạ của bạn trống + Lấy lại danh bạ của bạn… + Tìm kiếm trong danh bạ của tôi + Danh bạ điện thoại + Danh bạ điện thoại của bạn trống rỗng + Thêm từ danh bạ điện thoại của tôi + Lưu khóa khôi phục trong + Bạn không thể truy nhập tin nhắn này + Đặt avatar + Bạn đã thay đổi cài đặt phòng thành công + Chủ đề + Tên phòng + Lưu trữ Khóa bảo mật của bạn ở nơi an toàn, như trình quản lý mật khẩu hoặc két sắt. + Lưu Khóa Bảo mật của bạn + Nhập lại Cụm từ Bảo mật của bạn để xác nhận. + Cụm từ Bảo mật + Nhập cụm từ bảo mật chỉ bạn biết, được sử dụng để bảo mật bí mật trên máy chủ của bạn. + Đặt Cụm từ Bảo mật + Lưu trữ Khóa bảo mật của bạn ở nơi an toàn, như trình quản lý mật khẩu hoặc két sắt. + Lưu Khóa Bảo mật của bạn + Nhập một cụm từ bí mật chỉ bạn biết và tạo khóa để sao lưu. + Sử dụng Cụm Bảo mật + Tạo khóa bảo mật để lưu trữ ở đâu đó an toàn như trình quản lý mật khẩu hoặc két sắt. + Sử dụng Khóa Bảo mật + Cài đặt + Bảo vệ chống mất quyền truy cập vào các tin nhắn và dữ liệu được mã hóa bằng cách sao lưu các khóa mã hóa trên máy chủ của bạn. + Bảo mật sao lưu + Thiết lập Sao lưu Bảo mật + Khởi động máy ảnh + Dừng máy ảnh + Bật tiếng micrô + Tắt tiếng micrô + Mở cuộc trò chuyện + Quyền + Đặt quyền + Xác nhận + Nhập URL của máy chủ xác thực + Ngoài ra, bạn có thể nhập bất kỳ URL máy chủ xác thực nào khác + Dùng %1$s + Homeerver của bạn (%1$s) đề xuất sử dụng %2$s cho máy chủ xác thực của bạn + Sự đồng ý của người dùng chưa được cung cấp. + Không có mối liên hệ hiện tại với mã định danh này. + Sự kết hợp đã thất bại. + Đối với quyền riêng tư của bạn, ${app_name} chỉ hỗ trợ gửi email và số điện thoại của người dùng băm. + Trước tiên, vui lòng chấp nhận các điều khoản của máy chủ nhận dạng trong cài đặt. + Trước tiên, vui lòng cấu hình máy chủ nhận dạng. + Hoạt động này là không thể. Homeerver đã lỗi thời. + Máy chủ nhận dạng này đã lỗi thời. ${app_name} chỉ hỗ trợ API V2. + Ngắt kết nối khỏi máy chủ nhận dạng %s\? + Mở các điều khoản của %s + Tải các ngôn ngữ có sẵn… + Các ngôn ngữ có sẵn khác + Ngôn ngữ hiện tại + Chia sẻ mã này với mọi người để họ có thể quét nó để thêm bạn và bắt đầu trò chuyện. + Mã của tôi + Chia sẻ mã của tôi + Quét mã QR + Chúng tôi không thể mời người dùng. Vui lòng kiểm tra người dùng bạn muốn mời và thử lại. + Nó không phải là mã QR Matrix hợp lệ + Lời mời được gửi đến %1$s và %2$s + Lời mời được gửi đến %1$s + 🔐️ Tham gia với tôi trên ${app_name} + Hey, nói chuyện với tôi trên ${app_name}: %s + Mời bạn bè + Mời Người dùng + Mời người dùng… + MỜI + Thêm người + Thêm thành viên + Chúng tôi không thể tạo ra DM của bạn. Vui lòng kiểm tra người dùng bạn muốn mời và thử lại. + Nối kết %1$s đang đưa bạn đến một trang khác: %2$s. +\n +\nBạn có chắc chắn muốn tiếp tục\? + Kiểm tra lại nối kết này + Vui lòng chọn mật khẩu. + Vui lòng chọn tên người dùng. + Thất bại trong việc thiết lập Xác thực chéo + Đánh dấu là Đáng tin cậy + Xác nhận danh tính của bạn bằng cách xác minh đăng nhập này, cấp cho nó quyền truy cập vào các tin nhắn được mã hóa. + Xác nhận danh tính của bạn bằng cách xác minh đăng nhập này từ một trong các phiên khác của bạn, cấp cho nó quyền truy cập vào các tin nhắn được mã hóa. + Xác minh tương tác bằng Emoji + Xác minh đăng nhập + Xác minh thủ công bằng Văn bản + Xác minh thông tin đăng nhập mới truy cập vào tài khoản của bạn: %1$s + Xác minh tất cả các phiên của bạn để đảm bảo tài khoản và tin nhắn của bạn được an toàn + Xem lại nơi bạn đăng nhập + Được mã hóa bởi một thiết bị chưa được xác minh + Không được mã hóa + gửi tuyết rơi ❄️ + gửi hoa giấy 🎉 + Gửi thông điệp đã cho với tuyết rơi + Gửi tin nhắn đã cho với hoa giấy + Bạn sẽ khởi động lại mà không có lịch sử, không có tin nhắn, thiết bị đáng tin cậy hoặc người dùng đáng tin cậy + Nếu bạn đặt lại mọi thứ + Chỉ làm điều này nếu bạn không có thiết bị nào khác mà bạn có thể xác minh thiết bị này. + Đặt lại mọi thứ + Quên hoặc mất tất cả các tùy chọn phục hồi\? Đặt lại mọi thứ + Không truy nhập được dung lượng lưu trữ an toàn + Sao lưu không thể giải mã được với Khóa Khôi phục này: vui lòng xác minh rằng bạn đã nhập Khóa Khôi phục chính xác. + Chọn Khóa Khôi phục của bạn hoặc nhập nó theo cách thủ công bằng cách nhập hoặc dán từ bảng tạm của bạn + Sử dụng Khóa Khôi phục + Dùng %1$s của bạn hoặc dùng %2$s của bạn để tiếp tục. + Chỉ được hỗ trợ trong các phòng được mã hóa + Buộc nhóm phiên hướng ra hiện tại trong một căn phòng được mã hóa phải bị loại bỏ + Sử dụng ${app_name mới nhất} trên các thiết bị khác của bạn: + hoặc một máy khách Matrix có khả năng xác thực chéo khác + ${app_name} iOS +\n${app_name} Android + ${app_name} Web +\n${app_name} Desktop + Sử dụng ${app_name} mới nhất trên các thiết bị khác của bạn, Web ${app_name}, Máy tính để bàn ${app_name}, ${app_name} iOS, ${app_name} cho Android hoặc một máy khách Matrix có khả năng xác thực chéo khác + Đặt mật khẩu tài khoản mới… + Không thể lưu tệp Media + Không thể thêm tệp Media vào Bộ sưu tập + Tệp Media được thêm vào Bộ sưu tập + Bật thiết đặt này thêm FLAG_SECURE cho tất cả các Hoạt động. Khởi động lại ứng dụng để thay đổi có hiệu lực. + Ngăn ảnh chụp màn hình của ứng dụng + Khóa khôi phục Sao lưu Chính + Không biết cụm mật khẩu Sao lưu Khóa của bạn, bạn có thể %s. + sử dụng khóa khôi phục Sao lưu Khóa của bạn + Nhập chìa khóa Cụm mật khẩu Sao lưu của bạn để tiếp tục. + %1$s (%2$s) + Lưu trữ bí mật khóa sao lưu trong SSSS + Tạo khóa SSSS từ khóa phục hồi + Tạo khóa SSSS từ cụm mật khẩu (%s) + Tạo khóa SSSS từ cụm mật khẩu + Nhận Khóa cong + Kiểm tra Khóa sao lưu (%s) + Kiểm tra Khóa sao lưu + Vui lòng nhập khóa khôi phục + Nó không phải là một khóa phục hồi hợp lệ + Cụm mật khẩu phục hồi + Nhập %s + Sử dụng Tệp + Nhập %s của bạn để tiếp tục + Xác minh bản thân và người khác để giữ an toàn cho cuộc trò chuyện của bạn + Bật xác thực chéo + Nâng cấp mã hóa có sẵn + Tin nhắn… + Tài khoản này đã bị vô hiệu hóa. + Tên người dùng và/hoặc mật khẩu không chính xác. Mật khẩu đã nhập bắt đầu hoặc kết thúc bằng không gian, vui lòng kiểm tra. + Gửi tin nhắn dưới dạng văn bản thuần túy, mà không giải thích nó dưới dạng đánh dấu + Đặt tầm quan trọng thông báo theo sự kiện + Khắc phục + Cấu hình thông báo + Thất bại trong việc nhập khóa + Đang chờ %s… + Gần xong! Đang chờ xác nhận… + + Kết quả cuối cùng dựa trên %1$d phiếu bầu + + + Đã bỏ %1$d phiếu bầu. Bỏ phiếu để xem kết quả + + + Dựa trên %1$d phiếu bầu + + + %1$d phiếu bầu + + + Ít nhất %1$s tùy chọn là cần thiết + + + %d người bạn biết đã tham gia + + + %1$d cuộc gọi đang hoạt động · + + + 1 cuộc gọi đang hoạt động (%1$s) · %2$d cuộc gọi bị tạm dừng + + Gần xong! Thiết bị khác có hiển thị dấu tick không\? + "Chủ đề: " + Thêm chủ đề + %s để cho mọi người biết căn phòng này là gì. + Đây là phần đầu của lịch sử thư trực tiếp của bạn với %s. + Đây là khởi đầu của cuộc trò chuyện này. + Đây là sự khởi đầu của %s. + Bạn đã tham gia. + %s đã tham gia. + Bạn đã tạo và cấu hình phòng. + %s đã tạo và cấu hình phòng. + Mã hóa được sử dụng bởi phòng này không được hỗ trợ + Mã hóa không được bật + Tin nhắn trong phòng này được mã hóa đầu cuối + Tin nhắn trong phòng này được mã hóa đầu cuối. Tìm hiểu thêm và xác minh người dùng trong hồ sơ của họ. + Mã hóa được bật + Nếu bạn hủy ngay bây giờ, bạn có thể mất tin nhắn và dữ liệu được mã hóa nếu bạn mất quyền truy cập vào thông tin đăng nhập của mình. +\n +\nBạn cũng có thể thiết lập Sao lưu Bảo mật và quản lý khóa của mình trong Cài đặt. + Thiết lập Cụm mật khẩu Phục hồi cho phép bạn bảo mật và mở khóa tin nhắn và tin cậy được mã hóa. + Thiết lập Cụm mật khẩu Phục hồi cho phép bạn bảo mật và mở khóa tin nhắn và tin cậy được mã hóa. +\n +\nNếu bạn không muốn đặt Mật khẩu Tin nhắn, hãy tạo Khóa Tin nhắn thay thế. + Bạn không thể làm điều đó từ điện thoại di động + Sao chép nó vào bộ nhớ đám mây cá nhân của bạn + Lưu nó trên khóa USB hoặc ổ đĩa sao lưu + In nó và lưu trữ nó ở đâu đó an toàn + %2$s &%1$s của bạn đã được đặt. +\n +\nGiữ chúng an toàn! Bạn sẽ cần chúng để mở khóa tin nhắn được mã hóa và bảo mật thông tin nếu bạn mất tất cả các phiên đang hoạt động của mình. + Đang cài đặt chìa khóa sao lưu + Đang đồng bộ chìa khóa đăng nhập của bản thân + Giới hạn là không rõ. + Homeerver của bạn chấp nhận phần đính kèm (tệp, media, v.v.) với kích thước lên tới %s. + Giới hạn tải lên tệp máy chủ + Phiên bản máy chủ + Tên máy chủ + Đăng xuất khỏi phiên này + Quản lý Phiên + Hiện Tất cả Phiên + Phiên Hoạt động + Người quản trị máy chủ của bạn đã vô hiệu hóa mã hóa đầu cuối theo mặc định trong phòng riêng và Tin nhắn trực tiếp. + Xác thực chéo không được bật + Xác thực chéo được kích hoạt. +\nCác khóa không đáng tin cậy + Xác thực chéo chéo được kích hoạt +\nChìa khóa được tin cậy. +\nKhóa riêng tư không được biết + Xác thực chéo được kích hoạt +\nKhóa riêng trên thiết bị. + Xác thực chéo + Phiên mới của bạn hiện đã được xác minh. Nó có quyền truy cập vào các tin nhắn được mã hóa của bạn và những người dùng khác sẽ thấy nó đáng tin cậy. + Tin nhắn với người dùng này được mã hóa đầu cuối và không thể được đọc bởi các bên thứ ba. + So sánh mã với mã được hiển thị trên màn hình của người dùng khác. + So sánh biểu tượng cảm xúc độc đáo, đảm bảo chúng xuất hiện theo cùng một thứ tự. + Để được an toàn, hãy làm điều này trực tiếp hoặc sử dụng một cách khác để giao tiếp. + Để an toàn, hãy xác minh %s bằng cách kiểm tra mã một lần. + Bật mã hóa + Sau khi được bật, mã hóa cho một căn phòng không thể bị vô hiệu hóa. Tin nhắn được gửi trong một căn phòng được mã hóa không thể được nhìn thấy bởi máy chủ, chỉ bởi những người tham gia của căn phòng. Cho phép mã hóa có thể ngăn nhiều bot và cầu hoạt động chính xác. + Bật mã hóa\? + Sau khi được bật, mã hóa không thể bị vô hiệu hóa. + Bạn không có quyền bật mã hóa trong phòng này. + Bật mã hóa đầu cuối… + Trình soạn thảo tin nhắn + Dòng thời gian + Gửi emote đã cho màu cầu vồng + Gửi tin nhắn đã cho có màu cầu vồng + Các phòng khác + Các phòng gần đây + Phiên này không thể chia sẻ xác minh này với các phiên khác của bạn. +\nViệc xác minh sẽ được lưu cục bộ và chia sẻ trong phiên bản tương lai của ứng dụng. + Hủy bỏ qua + ${app_name} gặp sự cố khi hiển thị nội dung sự kiện với id \'%1$s\' + ${app_name} không xử lý tin nhắn kiểu \'%1$s\' + ${app_name} không xử lý các sự kiện thuộc loại \'%1$s\' + Nhảy để đọc biên nhận + Tin nhắn trực tiếp + Tùy chỉnh (%1$d) trong %2$s + Mặc định trong %1$s + Người điều hành trong %1$s + Quản trị viên trong %1$s + Người dùng + Mời + Tùy chọn + Điều hành viên + Quản trị viên + Đang rời phòng… + Rời khỏi + Rời phòng + Tải lên + Thông báo + Cài đặt + Cài đặt phòng + Hành động Quản trị + Thêm + Tìm hiểu thêm + Bảo mật + Tin nhắn ở đây được mã hóa đầu cuối. +\n +\nTin nhắn của bạn được bảo mật bằng khóa và chỉ có bạn và người nhận có các khóa duy nhất để mở khóa chúng. + Tin nhắn trong phòng này được mã hóa đầu cuối. +\n +\nTin nhắn của bạn được bảo mật bằng khóa và chỉ có bạn và người nhận có các khóa duy nhất để mở khóa chúng. + Tin nhắn ở đây không được mã hóa đầu cuối. + Tin nhắn trong phòng này không được mã hóa đầu cuối. + Để bảo mật thêm, hãy xác minh %s bằng cách kiểm tra mã một lần trên cả hai thiết bị của bạn. +\n +\nĐể bảo mật tối đa, hãy làm điều này trực tiếp. + Đang chờ %s… + Đã xác minh %s + Xác minh %s + Hình ảnh mã QR + Nếu bạn không thể quét mã ở trên, hãy xác minh bằng cách so sánh một lựa chọn biểu tượng cảm xúc ngắn, duy nhất. + Xác minh bằng biểu tưởng cảm xúc + Xác minh bằng cách so sánh biểu tượng cảm xúc + Thay vào đó, xác minh bằng cách so sánh biểu tượng cảm xúc + Nếu bạn không trực tiếp, hãy so sánh biểu tượng cảm xúc thay thế + Không thể quét + Quét bằng thiết bị này + Quét mã của họ + Quét mã bằng thiết bị khác của bạn hoặc chuyển đổi và quét bằng thiết bị này + Quét mã bằng thiết bị của người dùng khác để xác minh lẫn nhau một cách an toàn + Bạn + Xác minh thủ công + Xác minh phiên này + Yêu cầu xác minh + Xác minh đã gửi + Bạn đã chấp nhận + %s đã chấp nhận + Bạn đã hủy bỏ + %s đã hủy bỏ + Đang chờ… + Kết luận xác minh + Phản ứng với: %s + Thăm dò ý kiến + Sticker + Tệp + Thoại + Âm thanh + Hình ảnh. + Video. + Một trong những điều sau đây có thể bị xâm phạm: +\n +\n - Homeserver của bạn +\n - Homeserver mà bạn đang xác minh được kết nối với +\n - Kết nối internet của bạn hoặc của người dùng khác +\n - Thiết bị của bạn hoặc thiết bị của người dùng khác + Không bảo mật + Tìm kiếm lá chắn màu xanh lá cây để đảm bảo người dùng được tin tưởng. Tin tưởng tất cả người dùng trong một căn phòng để đảm bảo phòng được an toàn. + Để bảo mật cuối cùng, hãy sử dụng một phương tiện giao tiếp đáng tin cậy khác hoặc làm điều này trực tiếp. + Xác minh người dùng này bằng cách xác nhận biểu tượng cảm xúc duy nhất sau đây xuất hiện trên màn hình của họ, theo cùng một thứ tự. + Chúng không phù hợp + Chúng phù hợp + Đăng nhập không tin cậy + Tên miền email của bạn không được phép đăng ký trên máy chủ này + Tạo Space… + Tạo phòng… + Một số ký tự không được phép + Vui lòng cung cấp địa chỉ phòng + Địa chỉ này đã được sử dụng + Địa chỉ Space + Địa chỉ phòng + Bạn có thể bật điều này nếu phòng sẽ chỉ được sử dụng để cộng tác với các nhóm nội bộ trên nhà của bạn. Điều này không thể thay đổi sau này. + Chặn bất kỳ ai không thuộc %s tham gia phòng này + Ẩn nâng cao + Hiện nâng cao + Sau khi được bật, mã hóa không thể bị vô hiệu hóa. + Bật mã hóa + Thêm ( ͡° ͜ʖ ͡°) vào một tin nhắn văn bản thuần túy + "Thêm ̄\\_(ツ)_/ ̄ vào một tin nhắn văn bản thuần túy" + Hiển thị một số thông tin hữu ích để giúp gỡ lỗi ứng dụng + Hiện thông tin debug trên màn hình + ${app_name} có thể gặp sự cố thường xuyên hơn khi một lỗi bất ngờ xảy ra + Thất bại nhanh + Chỉ hiển thị kết quả đầu tiên, nhập thêm chữ cái + Các phiên khác + Phiên hiện tại + Cài đặt + Lắc phát hiện! + Lắc điện thoại để kiểm tra ngưỡng phát hiện + Ngưỡng phát hiện + Rageshake + Chế độ nhà phát triển kích hoạt các tính năng ẩn và cũng có thể làm cho ứng dụng kém ổn định hơn. Chỉ dành cho các nhà phát triển! + Chế độ nhà phát triển + Cài đặt nâng cao + Xem tất cả các phiên của tôi + Đồng bộ ban đầu… + Mô tả quá ngắn + Liên kết matrix.to của bạn bị dị hỏng + Phiên hiện tại dành cho người dùng %1$s và bạn cung cấp thông tin đăng nhập cho người dùng %2$s. Điều này không được hỗ trợ bởi ${app_name}. +\nTrước tiên, hãy xóa dữ liệu, sau đó đăng nhập lại trên tài khoản khác. + Xóa dữ liệu + Bạn sẽ mất quyền truy cập vào các tin nhắn an toàn trừ khi bạn đăng nhập để khôi phục khóa mã hóa của mình. + Xóa tất cả dữ liệu hiện đang được lưu trữ trên thiết bị này\? +\nĐăng nhập lại để truy cập dữ liệu tài khoản và tin nhắn của bạn. + Xóa dữ liệu + Xóa tất cả dữ liệu + Cảnh báo: Dữ liệu cá nhân của bạn (bao gồm cả khóa mã hóa) vẫn được lưu trữ trên thiết bị này. +\n +\nXóa nó nếu bạn đã hoàn tất việc sử dụng thiết bị này hoặc muốn đăng nhập vào tài khoản khác. + Xóa dữ liệu cá nhân + Mật khẩu + Đăng nhập + Đăng nhập để khôi phục các khóa mã hóa được lưu trữ độc quyền trên thiết bị này. Bạn cần họ đọc tất cả các tin nhắn an toàn của bạn trên bất kỳ thiết bị nào. + Người quản trị homeerver (%1$s) của bạn đã đăng xuất bạn ra khỏi tài khoản %2$s (%3$s). + Đăng nhập + Bạn đã đăng xuất + Đăng nhập lại + Có thể là do nhiều lý do khác nhau: +\n +\n• Bạn đã thay đổi mật khẩu của mình trên một phiên khác. +\n +\n• Bạn đã xóa phiên này khỏi phiên khác. +\n +\n• Người quản trị máy chủ của bạn đã vô hiệu hóa quyền truy cập của bạn vì lý do bảo mật. + Bạn đã đăng xuất + Nhìn thấy bởi + Không thể tìm thấy một homeerver hợp lệ. Vui lòng kiểm tra mã định danh của bạn + Đây không phải là mã định danh người dùng hợp lệ. Định dạng dự kiến: \'@user:homeserver.org\' + Nếu bạn không biết mật khẩu của mình, hãy quay lại để đặt lại mật khẩu đó. + Matrix ID + Nếu bạn thiết lập tài khoản trên homeerver, hãy sử dụng Matrix ID của bạn (ví dụ: @user:domain.com) và mật khẩu bên dưới. + Đăng nhập bằng Matrix ID + Đăng nhập bằng Matrix ID + Ngoài ra, nếu bạn đã có tài khoản và bạn biết mã định danh Ma trận và mật khẩu của mình, bạn có thể sử dụng phương pháp này: + Homeerver này đang chạy một phiên bản cũ. Yêu cầu người quản trị homeerver của bạn nâng cấp. Bạn có thể tiếp tục, nhưng một số tính năng có thể không hoạt động chính xác. + Homeerver này đang chạy một phiên bản quá cũ để kết nối. Yêu cầu người quản trị homeerver của bạn nâng cấp. + Homeerver lỗi thời + Không giống như một địa chỉ email hợp lệ + Ứng dụng không thể tạo tài khoản trên homeerver này. +\n +\nBạn có muốn đăng ký bằng máy khách web không\? + Xin lỗi, máy chủ này không chấp nhận tài khoản mới + Ứng dụng không thể đăng nhập vào homeerver này. Homeerver hỗ trợ loại signin sau đây:%1$s. +\n +\nBạn có muốn đăng nhập bằng máy khách web không\? + Lỗi xảy ra khi tải trang: %1$s (%2$d) + Nhập địa chỉ của máy chủ bạn muốn sử dụng + Nhập địa chỉ của Mô-đun Element hoặc Máy chủ bạn muốn sử dụng + Lưu trữ cao cấp cho các tổ chức + Lưu trữ cao cấp cho các tổ chức + Tham gia hàng triệu máy chủ công cộng miễn phí lớn nhất + Thăm dò ý kiến + Mở ngăn khung điều hướng + Có vẻ như máy chủ mất quá nhiều thời gian để phản hồi, điều này có thể được gây ra bởi kết nối kém hoặc lỗi với máy chủ. Hãy thử lại trong một thời gian. + Vui lòng thử lại một khi bạn đã chấp nhận các điều khoản và điều kiện của homeserver của bạn. + Nhật ký verbose sẽ giúp các nhà phát triển bằng cách cung cấp thêm nhật ký khi bạn gửi RageShake. Ngay cả khi được bật, ứng dụng không ghi lại nội dung tin nhắn hoặc bất kỳ dữ liệu riêng tư nào khác. + Bật nhật ký verbose. + Đồng ý với điều khoản dịch vụ của máy chủ xác thực (%s) để cho phép bản thân có thể khám phá bằng địa chỉ email hoặc số điện thoại. + Bạn hiện đang chia sẻ địa chỉ email hoặc số điện thoại trên máy chủ xác thực %1$s. Bạn sẽ cần kết nối lại với %2$s để ngừng chia sẻ chúng. + Mã xác minh không chính xác. + Có lỗi tra cứu số điện thoại + Bàn phím số + Kết nối thất bại + Không trả lời + Cuộc gọi video bị bỏ lỡ + Cuộc gọi thoại nhỡ + Cuộc gọi video bị từ chối + Cuộc gọi thoại từ chối + Cuộc gọi video đã kết thúc • %1$s + Cuộc gọi thoại kết thúc • %1$s + Cuộc gọi video đang hoạt động + Cuộc gọi thoại đang hoạt động + Cuộc gọi thoại đến + Cuộc gọi thoại đến + Gọi lại + Cuộc gọi này đã kết thúc + %1$s đã từ chối cuộc gọi này + Bạn đã từ chối cuộc gọi này. + Bạn đã từ chối cuộc gọi này %s + Hiện tại bạn đang ở trong cuộc gọi này + %1$s bắt đầu cuộc gọi + Bạn bắt đầu một cuộc gọi + + Thư văn bản đã được gửi đến %s. Vui lòng nhập mã xác minh mà nó chứa. + Máy chủ xác thực bạn đã chọn không có bất kỳ điều khoản dịch vụ nào. Chỉ tiếp tục nếu bạn tin tưởng chủ sở hữu dịch vụ + Máy chủ xác thực không có điều khoản dịch vụ + Vui lòng nhập url máy chủ xác thực + Không thể kết nối với máy chủ xác thực + Nhập URL máy chủ xác thực + Chính sách + Bạn có đồng ý gửi thông tin này không\? + Để khám phá các liên hệ hiện có, bạn cần gửi thông tin liên hệ (email và số điện thoại) đến máy chủ nhận dạng của mình. Chúng tôi băm dữ liệu của bạn trước khi gửi cho quyền riêng tư. + Để khám phá các liên hệ hiện có, bạn cần gửi thông tin liên hệ đến máy chủ xác thực của mình. +\n +\nChúng tôi băm dữ liệu của bạn trước khi gửi cho quyền riêng tư. Bạn có đồng ý gửi thông tin này không\? + Để khám phá các liên hệ hiện có mà bạn biết, bạn có chấp nhận gửi dữ liệu liên hệ (số điện thoại và/hoặc email) đến máy chủ xác thực được cấu hình (%1$s)\? +\n +\nĐể có thêm quyền riêng tư, dữ liệu được gửi sẽ được băm trước khi được gửi. + Gửi email và số điện thoại đến %s + Gửi email và số điện thoại + Đồng ý + Thu hồi sự đồng ý của tôi + Các liên hệ của bạn là riêng tư. Để khám phá người dùng từ danh bạ của bạn, chúng tôi cần sự cho phép của bạn để gửi thông tin liên hệ đến máy chủ xác thực của bạn. + Bạn đã không đồng ý gửi email và số điện thoại đến máy chủ xác thực này để khám phá những người dùng khác từ danh bạ của bạn. + Bạn đã đồng ý gửi email và số điện thoại đến máy chủ xác thực này để khám phá những người dùng khác từ danh bạ của bạn. + Gửi email và số điện thoại + Đang chờ + Chúng tôi đã gửi cho bạn một email xác nhận đến %s, trước tiên vui lòng kiểm tra email của bạn và nhấp vào liên kết xác nhận + Chúng tôi đã gửi cho bạn một email xác nhận đến %s, kiểm tra email của bạn và nhấp vào liên kết xác nhận + Số điện thoại có thể khám phá + Ngắt kết nối khỏi máy chủ xác thực của bạn sẽ có nghĩa là bạn sẽ không thể khám phá bởi những người dùng khác và bạn sẽ không thể mời người khác qua email hoặc điện thoại. + Tùy chọn Khám phá sẽ xuất hiện khi bạn đã thêm số điện thoại. + app_id: + Không có cổng Push đã đăng ký + Không có quy tắc Push nào được xác định + Quy tắc Push + Chuyên gia + Bảo mật & Quyền riêng tư + Sự ưa thích + Tổng quát + Phản ứng nhanh + Bạn đang xem phòng này rồi! + Thông báo của bên thứ ba khác + Phiên bản Matrix SDK + Nhập khóa e2e từ tệp \"%1$s\". + Lỗi xảy ra khi nhận được dữ liệu sao lưu khóa + Lỗi xảy ra khi nhận được thông tin tin cậy + Căn phòng đã được tạo ra, nhưng một số lời mời đã không được gửi vì lý do sau: +\n +\n%s + Công khai phòng này trong thư mục phòng + Thư mục phòng + Bất cứ ai cũng có thể tham gia vào căn phòng này. + Công cộng + Cài đặt phòng + Chủ đề + Chủ đề phòng (tùy chọn) + Tên + Tên phòng + TẠO + Phòng mới + Tin nhắn trực tiếp + Phòng + Căn phòng này không thể xem trước được. Bạn có muốn tham gia nó không\? + Căn phòng này không thể truy cập vào thời điểm này. +\nHãy thử lại sau, hoặc yêu cầu quản trị viên phòng kiểm tra xem bạn có quyền truy cập hay không. + Bản xem trước của phòng có thể đọc được trên thế giới vẫn chưa được hỗ trợ bằng ${app_name} + Phòng này không thể được xem trước + Tất cả Community + Vui lòng chờ… + Thay đổi mạng + Thay đổi + Không có mạng. Vui lòng kiểm tra kết nối internet + Tạo Space mới + Tạo phòng mới + Sự kiện bị hỏng, không thể hiển thị + Lần cuối được sửa bởi %1$s trên %2$s + Sự kiện được vận hành bởi người quản trị phòng + Sự kiện bị xóa bởi người dùng + Hiển thị người gửi các tin nhắn đã xóa + Hiển thị tin nhắn đã xóa + Tin nhắn đã xóa + Phản ứng + Xem phản ứng + Thêm phản ứng + Thích + Đồng ý + Phản ứng + Phòng + Các cuộc hội thoại tin nhắn trực tiếp của bạn sẽ được hiển thị tại đây. Nhấp vào dấu + dưới cùng bên phải để bắt đầu. + Các cuộc hội thoại + Bắt kịp các tin nhắn chưa đọc tại đây + Có vẻ như bạn đang cố gắng kết nối với một homeserver khác. Bạn có muốn đăng xuất không\? + Không có máy chủ xác thực nào được cấu hình, cần thiết để đặt lại mật khẩu của bạn. + Bạn không sử dụng bất kỳ máy chủ xác thực nào + Lỗi không xác định + Người dùng không khớp + Khóa không khớp + Một tin nhắn không hợp lệ đã được nhận + Phiên đã nhận được một tin nhắn bất ngờ + SAS không khớp + Sự cam kết băm không khớp + Phiên không thể đồng ý về một sự thỏa thuận khóa, phương pháp băm, MAC hoặc SAS + Phiên họp không biết về giao dịch đó + Quá trình xác minh đã hết thời gian + Người dùng đã hủy xác minh + %s muốn xác minh phiên của bạn + Yêu cầu xác minh + Xác minh Phiên Tương tác + Việc xác minh bị hủy bỏ. +\nLý do: %s + Bên kia đã hủy bỏ việc xác minh. +\n%s + Yêu cầu bị hủy + Xác minh Khóa + Sử dụng xác minh kế thừa. + Không có gì xuất hiện\? Không phải tất cả ứng dụng đầu cuối đều hỗ trợ xác minh tương tác. Sử dụng xác minh kế thừa. + Đã nhận được + Tin nhắn an toàn với người dùng này được mã hóa đầu cuối và không thể được các bên thứ ba đọc. + Bạn đã xác minh thành công phiên này. + Đã xác minh! + Chờ đối tác xác nhận… + Xem yêu cầu + Bạn đã nhận được yêu cầu xác minh đến. + Xác minh phiên này bằng cách xác nhận các số sau đây xuất hiện trên màn hình của đối tác + Xác minh phiên này bằng cách xác nhận biểu tượng cảm xúc sau đây xuất hiện trên màn hình của đối tác + Xác minh phiên này sẽ đánh dấu nó là đáng tin cậy và cũng đánh dấu phiên của bạn là đáng tin cậy cho đối tác. + Xác minh phiên này để đánh dấu nó là đáng tin cậy. Các phiên tin cậy của các đối tác giúp bạn yên tâm hơn khi sử dụng các tin nhắn được mã hóa đầu cuối. + Yêu cầu xác minh đến + Bắt đầu Xác minh + Để bảo mật tối đa, chúng tôi khuyên bạn nên làm điều này trực tiếp hoặc sử dụng một phương tiện liên lạc đáng tin cậy khác. + Xác minh bằng cách so sánh một chuỗi văn bản ngắn. + Bạn đã bị đăng xuất do mật khẩu không hợp lệ hoặc hết hạn. + Sử dụng cấu hình + ${app_name} đã phát hiện cấu hình máy chủ tùy chỉnh cho tên miền userId của bạn \"%1$s\": +\n%2$s + Tự động hoàn tất các tùy chọn máy chủ + Phản hồi khám phá homeserver không hợp lệ + Chữ ký + Thuật toán + Phiên bản + Tất cả các khóa được sao lưu + Thiết lập Sao lưu An toàn + Sao lưu chìa khóa của bạn. Việc này có thể mất vài phút… + Quản lý trong Khóa Sao lưu + Khóa thư bảo mật mới + Dùng Khóa Sao lưu + Không bao giờ mất tin nhắn được mã hóa + Bảo vệ chống mất quyền truy cập vào tin nhắn và dữ liệu được mã hóa + Sao lưu An toàn + Bắt đầu sử dụng Khóa Sao lưu + Không bao giờ mất tin nhắn được mã hóa + Đó là tôi. + Một bản sao lưu khóa thư bảo mật mới đã được phát hiện. +\n +\nNếu bạn không thiết lập phương pháp khôi phục mới, kẻ tấn công có thể đang cố gắng truy cập tài khoản của bạn. Thay đổi mật khẩu tài khoản của bạn và đặt phương pháp khôi phục mới ngay lập tức trong Cài đặt. + Sao lưu Khóa Mới + Xóa khóa mã hóa đã sao lưu của bạn khỏi máy chủ\? Bạn sẽ không còn có thể sử dụng khóa khôi phục của mình để đọc lịch sử tin nhắn được mã hóa. + Xóa Sao lưu + Kiểm tra trạng thái sao lưu + Thất bại trong việc xóa sao lưu (%s) + Đang xóa bản sao lưu… + Để sử dụng Sao lưu Chính trong phiên này, hãy khôi phục bằng cụm mật khẩu hoặc khóa khôi phục của bạn ngay bây giờ. + Thất bại trong việc nhận thông tin tin cậy để sao lưu (%s). + Sao lưu có chữ ký không hợp lệ từ phiên chưa được xác minh %s + Sao lưu có chữ ký không hợp lệ từ phiên đã xác minh %s + Sao lưu có chữ ký hợp lệ từ phiên chưa được xác minh %s + Sao lưu có chữ ký hợp lệ từ phiên đã xác minh %s. + Sao lưu có chữ ký hợp lệ từ phiên này. + Sao lưu có chữ ký từ phiên không xác định với ID %s. + Khóa của bạn không được sao lưu từ phiên này. + Sao lưu chính không hoạt động trong phiên này. + Key Backup đã được thiết lập chính xác cho phiên này. + Xóa Sao lưu + Khôi phục từ Sao lưu + Mã hóa phiên không được kích hoạt + Thất bại trong việc nhận được phiên bản khóa khôi phục mới nhất (%s). + Sao lưu đã khôi phục %s ! + Sao lưu không thể được giải mã bằng khóa khôi phục này: vui lòng xác minh rằng bạn đã nhập khóa khôi phục chính xác. + Vui lòng nhập khóa khôi phục + Mở khóa Lịch sử + Đang nhập các khóa… + Đang tải xuống các khóa… + Đang tính toán khóa khôi phục… + Khôi phục sao lưu: + Lỗi mạng: vui lòng kiểm tra kết nối của bạn và thử lại . + Sao lưu không thể được giải mã bằng cụm mật khẩu này: vui lòng xác minh rằng bạn đã nhập cụm mật khẩu phục hồi chính xác. + Mất chìa khóa phục hồi\? Bạn có thể thiết lập một cái mới trong cài đặt. + Khôi phục tin nhắn + Nhập Khóa Khôi phục + Sử dụng Khóa Khôi phục của bạn để mở khóa lịch sử tin nhắn được mã hóa của bạn + Không biết cụm mật khẩu phục hồi của bạn, bạn có thể %s. + sử dụng khóa khôi phục của bạn + Sử dụng cụm mật khẩu khôi phục của bạn để mở khóa lịch sử tin nhắn được mã hóa của bạn + Đang tìm phiên bản sao lưu… + Bạn có thể mất quyền truy cập vào tin nhắn của mình nếu bạn đăng xuất hoặc mất thiết bị này. + Bạn có chắc không\? + Khóa mã hóa của bạn hiện đang được sao lưu trong nền cho homeerver của bạn. Việc sao lưu ban đầu có thể mất vài phút. + Bắt đầu Sao lưu + Lỗi bất ngờ + Khóa Khôi phục + Tạo Khóa Phục hồi bằng cách sử dụng cụm mật khẩu, quá trình này có thể mất vài giây. + Chia sẻ khóa phục hồi với… + Vui lòng tạo bản sao + Dừng + Thay thế + Có vẻ như bạn đã thiết lập bản sao lưu khóa từ một phiên khác. Bạn có muốn thay thế nó bằng cái mà bạn đang tạo ra không\? + Một bản sao lưu đã tồn tại trên homeerver của bạn + Khóa phục hồi đã được lưu. + Khóa khôi phục đã được lưu thành \'%s\'. +\n +\nCảnh báo: tệp này có thể bị xóa nếu ứng dụng được gỡ cài đặt. + Lưu dưới dạng Tệp + Chia sẻ + Lưu Khóa Khôi phục + Tôi đã tạo ra một bản sao + Xong + Giữ khóa khôi phục của bạn ở đâu đó rất an toàn, như trình quản lý mật khẩu (hoặc két an toàn) + Khóa khôi phục của bạn là một mạng lưới an toàn - bạn có thể sử dụng nó để khôi phục quyền truy cập vào các tin nhắn được mã hóa của mình nếu bạn quên cụm mật khẩu của mình. +\nGiữ khóa khôi phục của bạn ở đâu đó rất an toàn, như trình quản lý mật khẩu (hoặc an toàn) + Các khóa của bạn đang được sao lưu. + Thành công! + (Nâng cao) Thiết lập với Khóa Khôi phục + Hoặc, bảo mật sao lưu của bạn bằng Khóa Khôi phục, lưu nó ở đâu đó an toàn. + Tạo Sao lưu + Đặt Cụm mật khẩu + Chúng tôi sẽ lưu trữ một bản sao được mã hóa của khóa của bạn trên homeerver của bạn. Bảo vệ bản sao lưu của bạn bằng cụm mật khẩu để giữ an toàn. +\n +\nĐể bảo mật tối đa, điều này phải khác với mật khẩu tài khoản của bạn. + Bảo mật sao lưu của bạn bằng Cụm mật khẩu. + Xuất các khóa thủ công + (Nâng cao) + Bắt đầu sử dụng Khóa Sao lưu + Tin nhắn trong các phòng được mã hóa được bảo mật bằng mã hóa đầu cuối. Chỉ có bạn và người nhận mới có chìa khóa để đọc các tin nhắn này. +\n +\nSao lưu an toàn chìa khóa của bạn để tránh mất chúng. + Không bao giờ mất tin nhắn được mã hóa + Đang đồng hộ chìa khóa người dùng + Đang đồng bộ chìa khóa Master + Xác định khóa mặc định SSSS + Tạo khóa an toàn từ cụm mật khẩu + Công khai hóa các chìa khóa nhận dạng đã tạo + Sử dụng %1$s này làm mạng lưới an toàn trong trường hợp bạn quên %2$s của mình. + Kết thúc + Giữ an toàn + Bạn đã hoàn tất! + Khóa phục hồi của bạn + Cài lập phục hồi. + Việc này có thể mất vài giây, xin hãy kiên nhẫn. + Nhập cụm từ bảo mật chỉ bạn biết, được sử dụng để bảo mật bí mật trên máy chủ của bạn. + Không sử dụng mật khẩu tài khoản của bạn. + Nhập lại %s của bạn để xác nhận. + Bảo mật & mở khóa tin nhắn mã hóa và tin cậy bằng %s. + Nhập %s của bạn để tiếp tục. + Xác nhận %s + Tạo chía khóa tin nhắn + Đặt %s + Mật khẩu tài khoản + Chìa khóa tin nhắn + Cụm mật khẩu phục hồi + Xác minh bị hủy bỏ + Xác minh đã bị hủy bỏ. Bạn có thể bắt đầu xác minh lại. + Một trong những điều sau đây có thể bị xâm phạm: +\n +\n- Mật khẩu của bạn +\n- Người ở nhà của anh +\n- Thiết bị này hoặc thiết bị khác +\n- Kết nối internet mà một trong hai thiết bị đang sử dụng +\n +\nChúng tôi khuyên bạn nên thay đổi mật khẩu và khóa khôi phục trong Cài đặt ngay lập tức. + Bạn sẽ không xác minh %1$s (%2$s) nếu bạn hủy ngay. Bắt đầu lại trong hồ sơ người dùng của họ. + Nếu bạn hủy, bạn sẽ không thể đọc tin nhắn được mã hóa trên thiết bị mới của mình và những người dùng khác sẽ không tin tưởng nó. + Nếu bạn hủy, bạn sẽ không thể đọc tin nhắn được mã hóa trên thiết bị này và những người dùng khác sẽ không tin tưởng nó. + Tài khoản của bạn có thể bị xâm phạm + Đây không phải là tôi. + Sử dụng phiên này để xác minh phiên mới của bạn, cấp cho nó quyền truy cập vào các tin nhắn được mã hóa. + Nhấp để xem xét và xác minh + Đăng nhập mới. Đây có phải là bạn không\? + Làm tươi + Mở khóa lịch sử tin nhắn được mã hóa + Kiểm toán Xuất + Yêu cầu chìa khóa + ${app_name} Android + Chìa khóa đã được cập nhật! + Sự kiện được kiểm duyệt bởi người quản trị phòng, lý do: %1$s + Sự kiện bị người dùng xóa, lý do: %1$s + Lý do tái sửa + Bao gồm một lý do + Bạn có chắc chắn muốn loại bỏ (xóa) sự kiện này không\? Lưu ý rằng nếu bạn xóa tên phòng hoặc thay đổi chủ đề, nó có thể hoàn tác thay đổi. + Xác nhận Loại bỏ + Gửi media với kích thước ban đầu + Bạn có muốn gửi phần đính kèm này đến %1$s không\? + Xóa… + Bạn chỉ nên truy cập lưu trữ bí mật từ một thiết bị đáng tin cậy + Cảnh báo: + Nhập cụm mật khẩu lưu trữ bí mật + Không thể tìm thấy bí mật trong kho + Đăng nhập mới + Nếu bạn không thể truy nhập phiên hiện có + Sử dụng Cụm mật khẩu hoặc Khóa phục hồi + Tạo một cuộc thăm dò ý kiến đơn giản + Xóa dữ liệu tài khoản của loại %1$s\? +\n +\nSử dụng một cách thận trọng, nó có thể dẫn đến hành vi bất ngờ. + Dữ liệu tài khoản + Công cụ Dev + Chế độ máy bay đang bật + Kết nối với máy chủ đã bị mất + Không + + Gần xong! %s có hiển thị dấu tích không + Mã QR + Đặt lại khóa + Khởi tạo xác thực chéo + Cho đến khi người dùng này tin tưởng phiên này, tin nhắn được gửi đến và đi từ nó được dán nhãn cảnh báo. Ngoài ra, bạn có thể xác minh thủ công. + %1$s (%2$s) đã đăng nhập bằng phiên mới: + Phiên này được tin cậy để nhắn tin an toàn vì %1$s (%2$s) đã xác minh: + Không tin cậy + Tin cậy + Phiên + Không nhận được phiên + Cảnh báo + Đã xác minh + Xác minh + Sử dụng phiên hiện có để xác minh phiên này, cấp cho nó quyền truy cập vào các thư được mã hóa. + Bảo mật hoàn toàn + Những người dùng khác có thể không tin tưởng nó. + Xác minh đăng nhập này + Xác minh phiên này để đánh dấu nó là đáng tin cậy và cấp cho nó quyền truy cập vào các thư được mã hóa. Nếu bạn không đăng nhập vào phiên này, tài khoản của bạn có thể bị xâm phạm: + Phiên này được tin cậy để nhắn tin an toàn vì bạn đã xác minh nó: + Không có thông tin mật mã sẵn dùng + bất ổn định + ổn định + Phiên bản Mặc định + Phiên bản phòng 👓 + Không có phiên Matrix sẵn dùng + Vui lòng xóa cụm mật khẩu nếu bạn muốn ${app_name} để tạo khóa khôi phục. + Cụm mật khẩu quá yếu + Vui lòng nhập cụm mật khẩu + Cụm mật khẩu không khớp + Nhập cụm mật khẩu + Xác nhận cụm mật khẩu + Tạo cụm mật khẩu + Không tìm thấy APK Google Play Services hợp lệ. Thông báo có thể không hoạt động bình thường. + %d+ + +%d + %1$s: %2$s + %1$s: + Chỉ dành cho lỗi + Đối với tin nhắn và lỗi + Luôn luôn + Hiện vùng thông tin + thu hẹp + mở rộng + Xin lỗi, một lỗi đã xảy ra + Homeerver của bạn chưa hỗ trợ tải chậm các thành viên phòng. Hãy thử sau. + Tăng hiệu suất bằng cách chỉ tải các thành viên phòng ở trong lần xem đầu tiên. + Tải chậm các phòng và thành viên + Vui lòng %s để tiếp tục sử dụng dịch vụ này. + Vui lòng %s để tăng giới hạn này. + Homeerver này đã đạt đến giới hạn người dùng hoạt động hàng tháng. + Homeerver này đã đạt đến giới hạn Người dùng hoạt động hàng tháng của nó vì vậy một số người dùng sẽ không thể đăng nhập. + Homeserver này đã vượt quá một trong những giới hạn tài nguyên của nó. + Homeerver này đã vượt quá một trong những giới hạn tài nguyên của nó vì vậy một số người dùng sẽ không thể đăng nhập. + liên hệ với người quản trị dịch vụ của bạn + Liên hệ quản trị viên + Vượt quá giới hạn tài nguyên + Bấm vào đây để xem tin nhắn cũ hơn + Phòng này là sự tiếp nối của một cuộc trò chuyện khác. + Cuộc trò chuyện tiếp tục ở đây + Phòng này đã được thay thế và không còn hoạt động nữa. + Vui lòng nhập mật khẩu của bạn. + Vui lòng nhập tên người dùng. + Hủy kích hoạt Tài khoản + Để tiếp tục, vui lòng nhập mật khẩu của bạn: + Vui lòng quên tất cả các tin nhắn tôi đã gửi khi tài khoản của tôi bị vô hiệu hóa (Cảnh báo: điều này sẽ khiến người dùng trong tương lai thấy chế độ xem cuộc hội thoại không đầy đủ) + Điều này sẽ làm cho tài khoản của bạn vĩnh viễn không thể sử dụng được. Bạn sẽ không thể đăng nhập và không ai có thể đăng ký lại cùng một ID người dùng. Điều này sẽ khiến tài khoản của bạn rời khỏi tất cả các phòng mà nó đang tham gia và nó sẽ xóa chi tiết tài khoản của bạn khỏi máy chủ nhận dạng của bạn. Điều này là không thể đảo ngược. +\n +\nHủy kích hoạt tài khoản của bạn does không theo mặc định khiến chúng tôi quên tin nhắn bạn đã gửi. Nếu bạn muốn chúng tôi quên tin nhắn của bạn, vui lòng đánh dấu vào hộp bên dưới. +\n +\nKhả năng hiển thị tin nhắn trong Matrix tương tự như email. Chúng tôi quên tin nhắn của bạn có nghĩa là tin nhắn bạn đã gửi sẽ không được chia sẻ với bất kỳ người dùng mới hoặc chưa đăng ký nào, nhưng người dùng đã đăng ký đã có quyền truy cập vào các tin nhắn này vẫn sẽ có quyền truy cập vào bản sao của họ. + Để tiếp tục sử dụng homeserver %1$s, bạn phải xem xét và đồng ý với các điều khoản và điều kiện. + Avatar + Chú ý avatar + Nhận avatar + Quên phòng + Tham gia lại + Lý do: %1$s + Bạn đã bị cấm từ %1$s bởi %2$s + Bạn đã bị đá từ %1$s bởi %2$s + Quản trị viên Community đã không cung cấp mô tả cho cộng đồng này. + Lọc nhóm phòng + Lọc thành viên nhóm + Đã mời + Đã tham gia + Phòng + Không có người dùng + Phòng + Danh bạ + Nhà + Ví dụ + ID Community + Ví dụ + Tên Community + Tạo Community + Tạo + Tin nhắn được mã hóa + Ồn ào + Im lặng + Tắt + Đánh dấu đã bị vô hiệu hóa. + Đánh dấu đã được kích hoạt. + Hiển thị thông tin về người dùng + Để sửa trình quản lý ứng dụng Matrix + Đánh dấu Bật/Tắt + Chỉ thay đổi avatar của bạn trong căn phòng hiện tại này + Thay đổi avatar của căn phòng hiện tại + Chỉ thay đổi biệt danh hiển thị của bạn trong phòng hiện tại + Thay đổi biệt danh hiển thị của bạn + Đá người dùng với id đã cho + Đặt chủ đề phòng + Rời khỏi phòng + Tham gia phòng có địa chỉ đã cho + Mời người dùng có id đã cho đến phòng hiện tại + Đặt tên phòng + Deops user với id đã cho + Xác định cấp độ quyền của người dùng + Ngừng bỏ qua người dùng, tiếp tục hiển thị thông điệp của họ + Bỏ qua người dùng, che giấu tin nhắn của họ khỏi bạn + Bỏ cấm người dùng với id đã cho + Cấm người dùng có id đã cho + Hiển thị hành động + Lệnh \"%s\" cần nhiều tham số hơn hoặc một số tham số không chính xác. + Lệnh không được nhận ra: %s + Lỗi lệnh + Kêu gọi hội nghị đang được phát triển và có thể không đáng tin cậy. + Yêu cầu Chia sẻ Khóa + Một phiên chưa được xác minh đang yêu cầu khóa mã hóa. +\nTên phiên: %1$s +\nLần nhìn thấy lần cuối: %2$s +\nNếu bạn không đăng nhập vào phiên khác, hãy bỏ qua yêu cầu này. + Phiên chưa được xác minh của bạn \'%s\' đang yêu cầu khóa mã hóa + Một phiên mới đang yêu cầu các khóa mã hóa. +\nTên phiên: %1$s +\nLần nhìn thấy lần cuối: %2$s +\nNếu bạn không đăng nhập vào phiên khác, hãy bỏ qua yêu cầu này. + Bạn đã thêm phiên mới \'%s\', nó đang yêu cầu các khóa mã hóa. + Để tiếp tục, bạn cần phải chấp nhận các điều khoản của dịch vụ này. + Tùy chọn này yêu cầu một ứng dụng của bên thứ ba để ghi lại các tin nhắn. + Gửi tin nhắn thoại + Sử dụng phím Enter của bàn phím để gửi tin nhắn + Khởi động camera hệ thống thay vì màn hình camera tùy chỉnh. + Sử dụng máy ảnh gốc + Không có widget hoạt động + Quản lý Tích hợp + Thêm ứng dụng Matrix + Không có trình quản lý tích hợp nào được cấu hình. + Một tham số không hợp lệ + Một tham số cần thiết bị thiếu. + Phòng %s không hiển thị. + Thiếu user_id trong yêu cầu + Thiếu room_id trong yêu cầu. + Bạn không được phép làm điều đó trong căn phòng này. + Bạn không ở trong căn phòng này. + Cấp độ quyền phải là số nguyên dương. + Gửi yêu cầu thất bại. + Không thể tạo widget. + Đọc Media được DRM bảo vệ + Sử dụng micrô + Sử dụng máy ảnh + Chặn Tất cả + Cho phép + Widget này muốn sử dụng các tài nguyên sau: + Rời khỏi hội nghị hiện tại và chuyển sang hội nghị khác\? + Xin lỗi, một lỗi đã xảy ra trong khi cố gắng tham gia hội nghị + Xin lỗi, các cuộc gọi hội nghị với Jitsi không được hỗ trợ trên các thiết bị cũ (thiết bị có hệ điều hành Android dưới 6.0) + ID phòng + Widget ID + ID người dùng của bạn + URL avatar của bạn + Tên hiển thị của bạn + Thu hồi quyền truy cập cho tôi + Mở trong trình duyệt + Tải lại widget + Thất bại trong việc tải widget.%s + Sử dụng nó có thể chia sẻ dữ liệu với %s: + Sử dụng nó có thể đặt cookie và chia sẻ dữ liệu với %s: + Widget này được thêm vào bởi: + Tải Widget + Widget + Widget đang hoạt động + XEM + Bạn có chắc chắn muốn xóa widget khỏi căn phòng này không\? + Tạo cuộc gọi hội nghị với jitsi + Tạo widget đã thất bại + Bạn cần sự cho phép để quản lý các widget trong phòng này + Khổng lồ + Lớn nhất + Lớn hơn + Lớn + Vừa + Nhỏ + Bé tí + Cỡ chữ + Tìm kiếm lịch sử + %1$s: %2$s %3$s + %1$s: %2$s + ** Gửi thất bại - vui lòng mở phòng + Tôi + Lời mời mới + Tin nhắn mới + Phòng + Sự kiện mới + %1$s và %2$s + %1$s trong %2$s và %3$s + %1$s trong %2$s + Gõ vào đây… + Máy chủ này đã có trong danh sách + Không thể tìm thấy máy chủ này hoặc danh sách phòng của nó + Nhập tên của một máy chủ mới mà bạn muốn khám phá. + Thêm máy chủ mới + Máy chủ của bạn + Tất cả các phòng %s gốc + Tất cả các phòng trên %s server + Tên máy chủ + Nhập homeserver để liệt kê các phòng công cộng từ + Chọn thư mục phòng + Không bao giờ gửi tin nhắn được mã hóa đến các phiên chưa được xác minh từ phiên này. + Chỉ mã hóa cho các phiên đã xác minh + Thư mục + Bật mã hóa (cảnh báo: không thể bị vô hiệu hóa trở lại!) + Mã hóa bị vô hiệu hóa trong phòng này. + Mã hóa được kích hoạt trong phòng này. + Sao chép Địa chỉ Phòng + Sao chép ID Phòng + Bỏ đặt làm địa chỉ chính + Đặt làm địa chỉ chính + Cảnh báo địa chỉ chính + Bạn sẽ không có địa chỉ chính được chỉ định cho căn phòng này. + ID cộng đồng mới (ví dụ : +foo:matrix.org) + Máy chủ này không cung cấp bất kỳ chính sách nào. + Thư viện bên thứ ba + Chính sách máy chủ xác thực của bạn + Chính sách homeerver của bạn + Chính sách ${app_name} + Bạn có thể tắt tính năng này bất cứ lúc nào trong cài đặt + Chúng tôi không chia sẻ thông tin với bên thứ ba + Chúng tôi không ghi âm hoặc tạo hồ sơ bất kỳ dữ liệu tài khoản nào + ở đây + Giúp chúng tôi xác định các vấn đề và cải thiện Element bằng cách chia sẻ dữ liệu sử dụng ẩn danh. Để hiểu cách mọi người sử dụng nhiều thiết bị, chúng tôi sẽ tạo ra một mã định danh ngẫu nhiên, được chia sẻ bởi các thiết bị của bạn. +\n +\nBạn có thể đọc tất cả các thuật ngữ của chúng tôi %s. + Giúp cải thiện Element + Thiết bị đã bị đăng xuất! + Căn phòng đã bị bỏ lại! + Chọn homeerver + Không thể kết nối đến một homeserver tại URL %s. Vui lòng kiểm tra liên kết của bạn hoặc chọn homeerver thủ công. + Không phải bây giờ + Kích hoạt + Nghe thông báo + Tùy chọn Khám phá sẽ xuất hiện sau khi bạn đã thêm email. + Địa chỉ email có thể khám phá + Hiện tại bạn không sử dụng máy chủ xác thực. Để khám phá và có thể khám phá bởi các liên hệ hiện có mà bạn biết, hãy cấu hình một danh bạ dưới đây. + Không có chính sách được cung cấp bởi máy chủ xác thực + Ẩn chính sách máy chủ xác thực + Hiện chính sách máy chủ xác thực + Mở Cài đặt Khám phá + Thêm tab dành riêng cho các thông báo chưa đọc trên màn hình chính. + Tìm kiếm theo tên, ID hoặc thư + Lọc hội thoại… + Không tìm thấy bản chỉnh sửa + Sửa tin nhắn + (đã sửa) + Tệp %1$s đã được tải xuống! + Đang tải xuống tệp %1$s… + Nén video %d%% + Nén hình ảnh… + Tệp Đang gửi (%1$s / %2$s) + Mã hóa tệp… + Gửi hình thu nhỏ (%1$s / %2$s) + Đang mã hóa hình nhỏ… + Đang đợi… + Tin nhắn trực tiếp + Hiển thị lịch sử đầy đủ trong các phòng được mã hóa + Hiện các sự kiện ẩn trong dòng thời gian + Đưa phản hồi + Gửi phản hồi thất bại (%s) + Cảm ơn, phản hồi của bạn đã được gửi thành công + Bạn có thể liên hệ với tôi nếu bạn có bất kỳ câu hỏi tiếp theo nào + Bạn đang sử dụng phiên bản beta của Space. Phản hồi của bạn sẽ giúp thông báo cho các phiên bản tiếp theo. Nền tảng và tên người dùng của bạn sẽ được ghi nhận để giúp chúng tôi sử dụng phản hồi của bạn càng nhiều càng tốt. + Phản hồi + Phản hồi Space + Đề xuất không được gửi (%s) + Cảm ơn, gợi ý đã được gửi thành công + Mô tả đề xuất của bạn ở đây + Vui lòng viết gợi ý của bạn dưới đây. + Đưa gợi ý + Token đăng ký + Cài đặt hệ thống + Phiên bản + Nhận trợ giúp về việc sử dụng Element + Trợ giúp và hỗ trợ + Trợ giúp + Pháp lý + Trợ giúp & Giới thiệu + Voice & Video + Format: + Url: + session_name: + app_display_name: + push_key: + + Gửi video với kích thước gốc + + + Gửi ảnh với kích thước gốc + \ No newline at end of file diff --git a/vector/src/main/res/values-vls/strings.xml b/vector/src/main/res/values-vls/strings.xml index c8190e7a68..424430d584 100644 --- a/vector/src/main/res/values-vls/strings.xml +++ b/vector/src/main/res/values-vls/strings.xml @@ -48,7 +48,7 @@ %1$s èt d’uutnodigienge vo %2$s anveird ** Kun nie ountsleuteln: %s ** - ’t Toestel van den afzender èt geen sleutels vo da bericht hier gesteurd. + ’t Toestel van den afzender èt geen sleutels vo da bericht hier gesteurd. Kosteg nie verwyderd wordn Kosteg ’t bericht nie verzendn @@ -138,6 +138,6 @@ Loadn… Oké - Annuleern - Ipsloan + Annuleern + Ipsloan diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index a7afd7aadb..5d6de2a2cd 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -33,7 +33,7 @@ %1$s 移除了聊天室名称 %1$s 移除了聊天室主题 ** 无法解密:%s ** - 发送者的设备没有向我们发送此消息的密钥。 + 发送者的设备没有向我们发送此消息的密钥。 无法发送消息 上传图像失败 网络错误 @@ -210,10 +210,10 @@ 接受 拒绝 挂断 - 重新发送 - 引用 - 分享 - 转发 + 重新发送 + 引用 + 分享 + 转发 语音通话 视频通话 全部标记为已读 @@ -238,9 +238,9 @@ 无法录制视频 已保存 继续 - 加入 - 查看 - 拒绝 + 加入 + 查看 + 拒绝 %s 邀请你加入这个聊天室 新的聊天 添加成员 @@ -255,14 +255,14 @@ 聊天室 设置 成员信息 - 保存 - 离开 - 发送 + 保存 + 离开 + 发送 查看源代码 查看解密后的源代码 登出 - 禁用 + 禁用 警告 请描述你遇到的问题。你做了什么?你期望发生什么?实际上发生了什么? 在这里描述你的问题 @@ -329,10 +329,6 @@ 聊天室 消息 文件 - 加入 - 聊天室 - 开始聊天 - 创建聊天室 私聊 消息 设置 @@ -368,8 +364,8 @@ Ed25519 指纹 导入 已验证 - 取消 - 删除 + 取消 + 删除 无法开始通话,请稍后重试 由于缺少权限,某些功能将无法使用… 无法发起通话 @@ -448,8 +444,6 @@ \n注意,此操作会重启应用并将花费一些时间。 取消上传 取消下载 - 收藏夹 - 低优先级 降低优先级 退出对话 版权 @@ -543,7 +537,7 @@ 聊天室包含未知设备 稍后再说 永久链接 - 重命名 + 重命名 举报内容 当前通话 正在进行电话会议。 @@ -588,7 +582,7 @@ \n请在接下来的弹出窗口中授权允许访问,以便进行通话。 对不起。因为权限不足,操作已取消 保存至下载? - 移除 + 移除 此邀请已发送至未与此账号关联的 %s。 \n你可能希望用一个不同的账号登录,或者把这个电子邮箱加入到你的账号。 这是此聊天室的预览。与聊天室的交互已禁用。 @@ -598,8 +592,6 @@ 这可能意味着有人正在恶意劫持你的流量,或者你的手机不信任远程服务器提供的数字证书。 如果服务器管理员说这是预期的情况,请确保下面的指纹与管理员提供的指纹相匹配。 报告这个内容的原因 - 目录 - 邀请 浏览目录 正在搜索目录… 收藏夹 @@ -640,7 +632,7 @@ 列入黑名单 移出黑名单 确认 - 移除 + 移除 你似乎沮丧地摇了摇手机。你想打开问题反馈界面吗? 发送至 已读标签清单 @@ -683,7 +675,7 @@ \n \n未知设备: 历史消息 - 邀请 + 邀请 全局搜索 主页 收藏夹 @@ -693,17 +685,14 @@ 按收藏夹过滤 按联系人过滤 按聊天室名称过滤 - 邀请 低优先级 - 对话 本地通讯录 只显示 Matrix 联系人 没有对话 没有结果 你没有授予 ${app_name} 访问本地通讯录的权限 - 聊天室 聊天室目录 没有聊天室 @@ -712,20 +701,15 @@ 请输入一个或多个电子邮箱地址或 Matrix ID 电子邮箱地址或 Matrix ID 忘记 - 选择一个聊天室目录 服务器可能不可用或过载 请输入一个要列出公共聊天室的主服务器 服务器名称 %s 服务器上的所有聊天室 所有本地 %s 聊天室 - 搜索历史 历史消息 用 ID 邀请 - 进入聊天室 - 进入一个聊天室 - 输入聊天室 ID 或者聊天室别名 跳到未读 主页显示 固定含错过通知的聊天室 @@ -763,7 +747,6 @@ 创建挂件失败 用 jitsi 创建会议通话 你确定要删除这个挂件吗? - 无法创建挂件。 发送请求失败。 特权级别必须是正整数。 @@ -787,13 +770,10 @@ 拍摄照片 拍摄视频 使用原生相机 - 警告! 会议通话正在开发中,可能不可靠。 - 命令错误 不可识别的命令:%s - 关闭 已加密消息 响铃通知 @@ -860,7 +840,6 @@ 已启用 %d 个挂件 - 社群名称 社群 ID 主页 @@ -925,8 +904,8 @@ 要想继续使用主服务器 %1$s 你必须阅读并同意其服务条款。 现在阅读 第三方开源协议 - 下载 - 清除 + 下载 + 清除 发送语音消息 使用…打开 对不起,没有可完成此操作的外部应用。 @@ -937,7 +916,7 @@ 在此输入… 发送语音消息 请输入你的密码。 - 发言 + 发言 如果可能的话,请使用英文撰写问题描述。 发送加密回复… 发送回复(未加密)… @@ -1002,7 +981,7 @@ 请 %s 以继续使用本服务。 请 %s 以增加此限制的额度。 仍然呼叫 - 接受 + 接受 错误 请审阅并接受此主服务器的政策: 通话 @@ -1126,10 +1105,10 @@ 确定吗? 备份 如果你在登出账号之前不备份密钥,你将失去你的已加密消息的访问权。 - 留下 - 跳过 + 留下 + 跳过 完成 - 中止 + 中止 你确定要登出账号吗? 高级通知设置 事件的通知重要程度 @@ -1258,7 +1237,7 @@ 版本 算法 签名 - 忽略 + 忽略 以单点登录方式登录 无法连接到此 URL,请检查 你的设备使用了过时的 TLS 安全协议,容易受到攻击,为保证安全,你将无法进行连接 @@ -1337,8 +1316,8 @@ 对话 聊天室 响应 - 同意 - 喜欢 + 同意 + 喜欢 响应 查看响应 响应 @@ -1371,10 +1350,10 @@ 帮助和关于 (已编辑) - 撤消 - 断开连接 - 检查 - 拒绝 + 撤消 + 断开连接 + 检查 + 拒绝 没有设置身份服务器。 服务器的错误配置导致通话失败 请要求你的主服务器 (%1$s) 的管理员配置 TURN 服务器,以使通话可靠地工作。 @@ -1389,9 +1368,9 @@ 這不是有效的 Matrix 服务器位置 无法在此 URL 找到主服务器,请检查 允许后备呼叫协助服务器 - 播放 - 暂停 - 忽略 + 播放 + 暂停 + 忽略 复制 成功 通知 @@ -1980,13 +1959,6 @@ 飞行模式已打开 开发工具 账号数据 - - %d 票 - - - %d 票 - 最终结果 - - 已选选项 创建简单调查 使用恢复密语或密钥 如果你无法访问已有会话 @@ -2126,7 +2098,7 @@ \n${app_name} Desktop ${app_name} iOS \n${app_name} Android - 或其他能够交叉签名的 Matrix 客户端 + 或其他能够交叉签名的 Matrix 客户端 在你的其他设备上使用最新的 ${app_name}: 强制丢弃加密聊天室中的当前出站群组会话 仅在加密聊天室中支持 @@ -2290,7 +2262,6 @@ 显示聊天室成员状态事件 包括邀请/加入/离开/踢掉/封禁事件和头像/昵称更改。 轮询 - 机器人按钮 回应:%s 验证结果 是否删除类型 %1$s 的账号数据? @@ -2347,7 +2318,7 @@ 过滤被封禁的用户 你没有权限发起通话 你没有权限发起会议通话 - 重置 + 重置 允许访问你的联系人。 如需扫描二维码,你须允许相机访问权限。 没有更多结果 @@ -2622,7 +2593,7 @@ 他们将可以探索 %s 邀请至 %s 分享链接 - 通过用户名进行邀请 + 通过用户名进行邀请 通过电子邮件进行邀请 此刻仅有你自己。%s 与他人一道会更好。 邀请至 %s @@ -2913,7 +2884,7 @@ 通过电子邮件邀请、寻找联系人和更多… 设置“发现”已毕。 您目前没有使用身份服务器。为了邀请队友并被他们发现,请在下方配置一个这样的服务器。 - 通过用户名或邮件邀请 + 通过用户名或邮件邀请 确保只有合适的人能访问 %s 空间。稍后你可以邀请更多的人加入。 谁是你的队友? 添加至规定的空间 @@ -2985,4 +2956,46 @@ 你同意发送此信息吗? 要发现现有的联系人,您需要将联系人信息(电子邮件和电话号码)发送到您的身份服务器。出乎隐私考量,我们会在发送前对您的数据进行散列处理。 不是现在 + 您确定要删除此投票吗?一旦移除,就无法恢复。 + 删除投票 + 投票已结束 + 已投票 + 启用投票 + 结束投票 + 这将使人们无法再投票,并将显示投票的最终结果。 + 结束此投票? + 赢家选项 + 结束投票 + + 基于 %1$d 票的最终结果 + + + 已投了 %1$d 票。投票查看结果 + + + 基于 %1$d 票 + + + %1$d 票 + + 系统设置 + 版本 + 获取使用 Element 的帮助 + 帮助和支持 + 帮助 + 法律 + 此服务器不提供任何政策。 + 第三方库 + 你的身份服务器政策 + 我们记录任何账户数据或绘制任何账户数据的画像 + 你的主服务器政策 + ${app_name} 政策 + 你可以随时在设置中关闭它 + 我们与第三方共享信息 + 此处 + 通过共享匿名使用数据,帮助我们识别问题并改进 Element。为了理解人们如何使用多台设备,我们将生成一个随机标识符,由您的设备共享。 +\n +\n你可以阅读我们所有的条款 %s。 + 帮助改进 Element + 启用 \ No newline at end of file diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 7d7e7dbb0e..f45247ed56 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -39,7 +39,7 @@ %1$s 傳送加入房間的邀請給 %2$s %1$s 接受 %2$s 的邀請 ** 無法解密:%s ** - 傳送者的裝置並未在此訊息傳送他們的金鑰。 + 傳送者的裝置並未在此訊息傳送他們的金鑰。 無法編輯 無法傳送訊息 上傳圖片失敗 @@ -266,27 +266,27 @@ 設定 會員訊息 錯誤回報 - 取消 + 取消 確定 - 離開 - 儲存 + 離開 + 儲存 載入中… - 發送 - 重新發送 - 分享 + 發送 + 重新發送 + 分享 查看源代碼 通知音效 靜音通知 歷史 社群細節 - 移除 - 引用 + 移除 + 引用 稍後 - 轉寄 + 轉寄 永久連結 檢視解密的來源 - 刪除 - 重新命名 + 刪除 + 重新命名 回報內容 進行中的通話 正在進行會議通話。 @@ -301,7 +301,7 @@ 不支援在加密聊天室的會議通話 無論如何都要傳送 - 邀請 + 邀請 離線 離開 動作 @@ -315,7 +315,7 @@ 開啟 關閉 複製到剪貼簿 - 停用 + 停用 確認 警告 首頁 @@ -496,10 +496,10 @@ 繼續 - 移除 - 加入 - 預覽 - 拒絕 + 移除 + 加入 + 預覽 + 拒絕 列出成員 打開標頭 正在同步…… @@ -586,9 +586,9 @@ 你的手機曾經信任的憑證已經變動。這非常不尋常。建議你不要接受此新的憑證。 發送貼圖 第三方開放原始碼授權 - 下載 - 說話 - 清除 + 下載 + 說話 + 清除 發送語音訊息 發送貼圖 您目前沒有任何貼圖。 @@ -622,17 +622,6 @@ 訊息 聯絡人 檔案 - 加入 - 目錄 - 最愛 - 聊天室 - 低優先度 - 邀請 - 開始聊天 - 新建聊天室 - 加入聊天室 - 加入聊天室 - 輸入聊天室 ID 或聊天室別名 瀏覽目錄 %d 個聊天室 @@ -1080,7 +1069,7 @@ 為來電使用預設的 ${app_name} 鈴聲 來電鈴聲 選取通話鈴聲: - 接受 + 接受 請審閱並接受此家伺服器的政策: 疑難排解通知 疑難排解診斷 @@ -1153,7 +1142,7 @@ 金鑰備份 使用金鑰備份 金鑰備份尚未完成,請稍候…… - 略過 + 略過 完成 進階通知設定 活動通知重要程度 @@ -1248,8 +1237,8 @@ 您確定嗎? 備份 除非您在登出前備份您的金鑰,否則您將會失去對您的加密訊息的存取權。 - 保留 - 放棄 + 保留 + 放棄 您想要登出嗎? 數據節省模式會套用特定的過濾器,這樣狀態更新與輸入通知就會被過濾掉。 加密訊息復原 @@ -1294,7 +1283,7 @@ 正在計算復原金鑰…… 正在下載金鑰…… 正在匯出金鑰…… - 忽略 + 忽略 使用單一登入系統登入 這個 URL 不可用,請檢查 您的裝置正在使用過期的 TLS 安全協定,容易遭受攻擊,為了您的安全將不會連線 @@ -1402,8 +1391,8 @@ 聊天室 您的聊天室將會在此顯示。點擊右下角的 + 來尋找既有的或開始您自己的。 反應 - 同意 - 喜歡 + 同意 + 喜歡 新增反應 檢視反應 反應 @@ -1485,8 +1474,8 @@ 透過使用者名稱或 ID 過濾…… 正在加入聊天室…… 檢視編輯歷史 - 審閱 - 婉拒 + 審閱 + 婉拒 要繼續,您必須接受此服務的條款。 服務條款 審閱條款 @@ -1494,8 +1483,8 @@ 使用機器人、橋接、小工具與貼紙包 閱讀於 - 撤銷 - 斷線 + 撤銷 + 斷線 未設定身份識別伺服器。 因為錯誤設定的伺服器導致通話失敗 請要求您家伺服器 (%1$s) 的管理員設定 TURN 伺服器以讓通話正常運作。 @@ -1925,13 +1914,6 @@ 使用者名稱 開發者工具 帳號資料 - - %d 投票 - - - %d 投票 - 最後結果 - - 已選取的選項 建立簡易投票 使用復原通關密語或金鑰 如果您無法存取既有的工作階段的話 @@ -2058,7 +2040,7 @@ \n${app_name} 桌面版 ${app_name} iOS \n${app_name} Android - 或其他有交叉簽章功能的 Matrix 客戶端 + 或其他有交叉簽章功能的 Matrix 客戶端 在您的其他裝置上使用最新的 ${app_name}: 強制丟棄目前在加密聊天室中的外發群組工作階段 僅在加密聊天室中支援 @@ -2131,9 +2113,9 @@ 或者您可以輸入任何身份識別伺服器 URL 輸入身份識別伺服器 URL 遞交 - 播放 - 暫停 - 忽略 + 播放 + 暫停 + 忽略 複製 成功 通知 @@ -2325,7 +2307,6 @@ 顯示聊天室成員狀態活動 包含邀請/加入/離開/踢除/封鎖事件與大頭貼/顯示名稱變更等。 投票 - 機器人按鈕 反應:%s 驗證結論 連結格式錯誤 @@ -2382,7 +2363,7 @@ 過濾被封鎖的使用者 您沒有開始通話的權限 您沒有開始會議通話的權限 - 重設 + 重設 啟用生物識別技術 放棄變更 有未儲存的變更。要放棄變更嗎? @@ -2648,7 +2629,7 @@ 他們將可以探索 %s 邀請至 %s 分享連結 - 透過使用者名稱邀請 + 透過使用者名稱邀請 透過電子郵件邀請 此刻只有您。%s 與其他人一起會更好。 邀請夥伴 @@ -2903,7 +2884,7 @@ 透過電子郵件邀請、尋找聯絡人以及更多…… 完成探索設定。 您目前並未使用身份認證伺服器。為了邀請隊友並被他們探索,請在下方設定一個。 - 透過使用者名稱或電子郵件邀請 + 透過使用者名稱或電子郵件邀請 確保合適的人可以存取 %s 公司。您可以稍後再邀請。 誰是您的隊友? 新增至指定的空間 @@ -2975,4 +2956,46 @@ 您同意傳送此資訊嗎? 要探索現有聯絡人,您必須傳送聯絡人資訊(電子郵件與電話號碼)到您的身份識別伺服器。我們會在傳送前對您的資料進行雜湊處理以保護隱私。 現在不要 + 您確定要移除此投票?移除後將無法復原。 + 移除投票 + 投票已結束 + 投票 + 啟用投票 + 結束投票 + 這將阻止人們投票並顯示投票的最終結果。 + 結束此投票? + 獲勝選項 + 結束投票 + + 以 %1$d 票為基礎的最終結果 + + + 已投 %1$d 票。投票以檢視結果 + + + 以 %1$d 票為基礎 + + + %1$d 票 + + 系統設定 + 版本 + 取得關於使用 Element 的協助 + 說明與支援 + 說明 + 法律 + 此伺服器並未提供任何政策。 + 第三方函式庫 + 您的身份識別伺服器政策 + 您的家伺服器政策 + ${app_name} 政策 + 您隨時可以在設定中關閉此功能 + 我們不會與第三方分享資訊 + 我們不會記錄或分析任何帳號資料 + 這裡 + 透過分享匿名使用資料協助我們找出問題並改善 Element。為了了解人們如何使用多裝置,我們將會產生隨機識別字串,在您的裝置間共享。 +\n +\n您可以閱讀我們的條款 %s。 + 協助改善 Element + 啟用 \ No newline at end of file diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 40f561234c..250be8639e 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -147,7 +147,7 @@ %1$s from %2$s to %3$s ** Unable to decrypt: %s ** - The sender\'s device has not sent us the keys for this message. + The sender\'s device has not sent us the keys for this message. @@ -169,6 +169,7 @@ It is not currently possible to re-join an empty room. + You are not allowed to join this room Email address @@ -357,34 +358,13 @@ OK - Cancel - Save - Leave - Stay - Send - Resend - Remove - Quote - Download - Share - Speak - Clear Later - Forward Permalink View Source View Decrypted Source - Delete - Rename None - Revoke - Disconnect Report Content Active call - Play - Pause - Dismiss - Reset Start Chatting Learn More Spaces @@ -421,23 +401,16 @@ Call Anyway Send Anyway or - Invite Offline - Accept - Skip Done - Abort - Ignore - Review - Decline Accept Decline Hang Up - Exit Actions + Exit Sign out Are you sure you want to sign out? Voice Call @@ -453,11 +426,47 @@ Add Switch Unpublish - Copied to clipboard - Disable Return Enable Not now + Agree + Like + "Change" + Remove + Join + Preview + Reject + Disable + Accept + Skip + Abort + Ignore + Review + Decline + Invite + Cancel + Save + Leave + Stay + Send + Resend + Remove + Quote + Download + Share + Speak + Clear + Forward + Delete + Rename + Revoke + Disconnect + Play + Pause + Dismiss + Reset + + Copied to clipboard Confirmation @@ -802,12 +811,6 @@ Continue Continue Anyway - - Remove - Join - Preview - Reject - List members Open header @@ -1043,19 +1046,6 @@ FILES Searching in encrypted rooms is not supported yet. - - JOIN - DIRECTORY - FAVORITES - ROOMS - LOW PRIORITY - INVITES - Start chat - Create room - Join room - Join a room - Type a room id or a room alias - Browse directory @@ -2210,10 +2200,6 @@ Your rooms will be displayed here. Tap the + bottom right to find existing ones or start some of your own. Reactions - - Agree - - Like Add Reaction View Reactions Reactions @@ -2230,7 +2216,6 @@ Create New Room Create New Space No network. Please check your Internet connection. - "Change" "Change network" "Please wait…" "All Communities" @@ -2756,7 +2741,6 @@ File Sticker Poll - Bot Buttons Reacted with: %s Verification Conclusion @@ -2936,15 +2920,6 @@ Account Data Delete the account data of type %1$s?\n\nUse with caution, it may lead to unexpected behavior. - - %d vote - %d votes - - - %d vote - Final results - %d votes - Final results - - Selected Option Creates a simple poll Use a Recovery Passphrase or Key If you can’t access an existing session @@ -3140,7 +3115,7 @@ ${app_name} Web\n${app_name} Desktop ${app_name} iOS\n${app_name} Android - or another cross-signing capable Matrix client + or another cross-signing capable Matrix client Use the latest ${app_name} on your other devices: Forces the current outbound group session in an encrypted room to be discarded @@ -3517,8 +3492,8 @@ Invite to %s It’s just you at the moment. %s will be even better with others. Invite by email - Invite by username - Invite by username or mail + Invite by username + Invite by username or mail Share link Invite to %s "They’ll be able to explore %s"