mirror of
https://github.com/element-hq/element-android
synced 2024-11-23 09:55:40 +03:00
Merge branch 'release/1.6.6' into main
This commit is contained in:
commit
4fa634a283
100 changed files with 1635 additions and 165 deletions
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -7,7 +7,7 @@ on:
|
|||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -XX:MaxMetaspaceSize=1g" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/nightly.yml
vendored
2
.github/workflows/nightly.yml
vendored
|
@ -7,7 +7,7 @@ on:
|
|||
- cron: "0 4 * * *"
|
||||
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -XX:MaxMetaspaceSize=1g" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/nightly_er.yml
vendored
2
.github/workflows/nightly_er.yml
vendored
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 4 * * *"
|
||||
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -XX:MaxMetaspaceSize=1g" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
|
||||
|
||||
jobs:
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
name: Sync Data From External Sources
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# At 00:00 on every Monday UTC
|
||||
- cron: '0 0 * * 1'
|
||||
|
@ -80,4 +81,4 @@ jobs:
|
|||
|
||||
*Note*: Change are coming from [this project](https://github.com/matrix-org/matrix-analytics-events)
|
||||
branch: sync-analytics-plan
|
||||
base: develop
|
||||
base: develop
|
||||
|
|
2
.github/workflows/tests-rust.yml
vendored
2
.github/workflows/tests-rust.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
|||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx5g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx3g" -Dkotlin.incremental=false
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 4 --no-daemon
|
||||
|
||||
jobs:
|
||||
|
|
18
CHANGES.md
18
CHANGES.md
|
@ -1,3 +1,21 @@
|
|||
Changes in Element v1.6.6 (2023-10-05)
|
||||
======================================
|
||||
|
||||
Bugfixes 🐛
|
||||
----------
|
||||
- Fixed JWT token for Jitsi openidtoken-jwt authentication ([#7758](https://github.com/vector-im/element-android/issues/7758))
|
||||
- Fix crash when max shortcuts count is exceeded ([#8644](https://github.com/vector-im/element-android/issues/8644))
|
||||
- Fix Login with QR code not working with rust crypto. ([#8653](https://github.com/vector-im/element-android/issues/8653))
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
- Use 3PID capability to show / hide email UI in settings ([#8615](https://github.com/vector-im/element-android/issues/8615))
|
||||
- If an external account manager is configured on the server, use it to delete other sessions and hide the multi session deletion. ([#8616](https://github.com/vector-im/element-android/issues/8616))
|
||||
- Hide account deactivation UI for account managed externally. ([#8619](https://github.com/vector-im/element-android/issues/8619))
|
||||
- Fix import of SAS Emoji string translations. ([#8623](https://github.com/vector-im/element-android/issues/8623))
|
||||
- Open external account manager for delete other sessions using Chrome custom tabs. ([#8645](https://github.com/vector-im/element-android/issues/8645))
|
||||
|
||||
|
||||
Changes in Element v1.6.5 (2023-07-25)
|
||||
======================================
|
||||
|
||||
|
|
|
@ -331,6 +331,10 @@ ext.initScreenshotTests = { project ->
|
|||
}
|
||||
}
|
||||
|
||||
tasks.withType(Test) {
|
||||
maxHeapSize = "2g"
|
||||
}
|
||||
|
||||
// Workaround to have KSP generated Kotlin code available in the IDE (for code completion)
|
||||
// Ref: https://github.com/airbnb/epoxy/releases/tag/5.0.0beta02
|
||||
subprojects { project ->
|
||||
|
|
2
fastlane/metadata/android/cs-CZ/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/cs-CZ/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Hlavní změny v této verzi: Element Android nyní používá Crypto Rust SDK.
|
||||
Úplný seznam změn: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/cs-CZ/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/cs-CZ/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Hlavní změny v této verzi: opravné vydání.
|
||||
Úplný seznam změn: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/de-DE/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/de-DE/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Die wichtigsten Änderungen in dieser Version: Element Android nutzt nun das Crypto-Rust-SDK.
|
||||
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/de-DE/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/de-DE/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Die wichtigsten Änderungen in dieser Version: Fehlerbehebungen.
|
||||
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/en-US/changelogs/40106060.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/40106060.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Main changes in this version: mainly bug fixes.
|
||||
Full changelog: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/fa/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/fa/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
تغییرات عمده در این نگارش: المنت اندروید اکنون از SDK راست Crypto استفاده میکند.
|
||||
گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/fa/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/fa/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
تغغیرات عمده در این نگارش: ارائه تصحیحی.
|
||||
گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/id/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/id/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Perubahan utama dalam versi ini: Element Android sekarang menggunakan SDK Kripto Rust.
|
||||
Catatan perubahan lanjutan: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/id/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/id/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Perubahan utama dalam versi ini: rilis perbaikan.
|
||||
Catatan perubahan lanjutan: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105160.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105160.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Threads são agora habilitadas por padrão.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105180.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105180.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Threads são agora habilitadas por padrão.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105200.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105200.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente correção de bugs!
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105220.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105220.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente melhorias no recurso de transmissão de voz.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105240.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105240.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente correção de bugs, em especial a correção da mensagem não aparecer na linha do tempo.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105250.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105250.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente correção de bugs, em especial a correção da mensagem não aparecer na linha do tempo.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105260.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105260.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente correção de bugs.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105280.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105280.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente correção de bugs.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105300.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105300.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: permalinks para salas, espaços, usuários e mensagens são agora exibidos como pílulas na linha do tempo. Também corrigimos alguns problemas com figurinhas personalizadas e o marcador de lido ficando travado no passado.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40105320.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40105320.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Basicamente correção de bugs.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40106000.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40106000.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Element Android está agora usando o Crypto Rust SDK.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40106010.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40106010.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Element Android está agora usando o Crypto Rust SDK.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/pt-BR/changelogs/40106020.txt
Normal file
2
fastlane/metadata/android/pt-BR/changelogs/40106020.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Principais mudanças nesta versão: Element Android está agora usando o Crypto Rust SDK.
|
||||
Changelog completo: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/sk/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Hlavné zmeny v tejto verzii: Element Android teraz používa Crypto Rust SDK.
|
||||
Úplný zoznam zmien: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/sk/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Hlavné zmeny v tejto verzii: opravné vydanie.
|
||||
Úplný zoznam zmien: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/sq/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/sq/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Ndryshime në këtë version: Element Android tanimë përdor Crypto Rust SDK.
|
||||
Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/sq/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/sq/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Ndryshimet kryesore në këtë version: hedhje në qarkullim me ndreqje të ndryshme.
|
||||
Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/uk/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/uk/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Основні зміни в цій версії: Element для Android відтепер використовує Crypto Rust SDK.
|
||||
Список усіх змін: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/uk/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/uk/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Основні зміни в цій версії: коригувальний випуск.
|
||||
Список усіх змін: https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/zh-TW/changelogs/40106030.txt
Normal file
2
fastlane/metadata/android/zh-TW/changelogs/40106030.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
此版本的主要變更:現在起,Element Android 使用 Crypto Rust SDK。
|
||||
完整的變更紀錄:https://github.com/vector-im/element-android/releases
|
2
fastlane/metadata/android/zh-TW/changelogs/40106050.txt
Normal file
2
fastlane/metadata/android/zh-TW/changelogs/40106050.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
此版本中的主要變動:版本修正。
|
||||
完整的變更紀錄:https://github.com/vector-im/element-android/releases
|
|
@ -256,4 +256,39 @@
|
|||
</plurals>
|
||||
<string name="notice_room_server_acl_set_ip_literals_not_allowed">• IP literallarına uyğunlaşan serverlər qadağan edildi.</string>
|
||||
<string name="notice_room_server_acl_set_ip_literals_allowed">• IP literallarına uyğunlaşan serverlərə icazə verilir.</string>
|
||||
<string name="pill_message_in_unknown_room">Otaqdakı mesaj</string>
|
||||
<string name="set_link_link">Bağlantı</string>
|
||||
<string name="set_link_create">Bağlantı yarat</string>
|
||||
<string name="message_reply_to_poll_preview">Anket</string>
|
||||
<string name="pill_message_unknown_room_or_space">Otaq / Məkan</string>
|
||||
<string name="set_link_edit">Bağlantını redaktə et</string>
|
||||
<string name="set_link_text">Mətn</string>
|
||||
<string name="message_reply_to_sender_ended_poll">Anket başa çatıb.</string>
|
||||
<string name="notice_display_name_changed_to">%1$s ekran adını %2$s olaraq dəyişdi</string>
|
||||
<string name="rich_text_editor_inline_code">Daxili kod formatın işlət</string>
|
||||
<string name="rich_text_editor_code_block">Kod blokun dəyiş</string>
|
||||
<string name="notice_room_canonical_alias_set_by_you">Bu otaq üçün əsas ünvanı %1$s olaraq təyin etdiniz.</string>
|
||||
<string name="pill_message_in_room">Mesaj %s</string>
|
||||
<string name="notice_room_aliases_added_and_removed_by_you">Bu otaq üçün ünvan kimi %2$s-nı sildiniz və %1$s əlavə etdiniz.</string>
|
||||
<string name="settings_access_token">Giriş Nişanəniz</string>
|
||||
<string name="notice_room_canonical_alias_unset">%1$s bu otaq üçün əsas ünvanı sildi.</string>
|
||||
<string name="message_reply_to_ended_poll_preview">Anket bitdi</string>
|
||||
<string name="notice_room_canonical_alias_set">%1$s bu otaq üçün əsas ünvanı %2$s olaraq təyin etdi.</string>
|
||||
<string name="pill_message_from_unknown_user">Mesaj</string>
|
||||
<string name="pill_message_from_user">%s-dan² mesaj</string>
|
||||
<string name="settings_access_token_summary">Giriş nişanəniz hesabınıza tam giriş imkanı verir.Bunu heç kimlə paylaşmayın.</string>
|
||||
<plurals name="notice_room_canonical_alias_alternative_added_by_you">
|
||||
<item quantity="one">Bu otaq üçün alternativ %1$s ünvanın əlavə etdiniz.</item>
|
||||
<item quantity="other">Bu otaq üçün alternativ %1$s ünvanın əlavə etdiniz.</item>
|
||||
</plurals>
|
||||
<string name="notice_room_canonical_alias_alternative_changed">%1$s bu otaq üçün alternativ ünvanları dəyişdi.</string>
|
||||
<plurals name="notice_room_canonical_alias_alternative_added">
|
||||
<item quantity="one">%1$s bu otaq üçün %2$s alternativ ünvanın əlavə etdi.</item>
|
||||
<item quantity="other">%1$s bu otaq üçün %2$s alternativ ünvanın əlavə etdi.</item>
|
||||
</plurals>
|
||||
<string name="notice_room_canonical_alias_alternative_changed_by_you">Bu otaq üçün alternativ ünvanları dəyişdiniz.</string>
|
||||
<plurals name="notice_room_canonical_alias_alternative_removed">
|
||||
<item quantity="one">%1$s bu otaq üçün %2$s alternativ ünvanın sildi.</item>
|
||||
<item quantity="other">%1$s bu otaq üçün %2$s alternativ ünvanın sildi.</item>
|
||||
</plurals>
|
||||
</resources>
|
|
@ -224,7 +224,7 @@
|
|||
<string name="notice_room_server_acl_set_title_by_you">Du hast die Server-ACL für diesen Raum gesetzt.</string>
|
||||
<string name="notice_room_server_acl_set_title">%s hat die Server-Zugriffssteuerungsliste (ACL) für diesen Raum gesetzt.</string>
|
||||
<string name="title_activity_settings">Einstellungen</string>
|
||||
<string name="call_notification_answer">Akzeptiere</string>
|
||||
<string name="call_notification_answer">Akzeptieren</string>
|
||||
<string name="call_notification_reject">Ablehnen</string>
|
||||
<string name="call_notification_hangup">Anruf beenden</string>
|
||||
<string name="ok">Ok</string>
|
||||
|
@ -263,7 +263,7 @@
|
|||
<string name="matrix_only_filter">Nur Matrix-Kontakte</string>
|
||||
<string name="no_result_placeholder">Keine Ergebnisse</string>
|
||||
<string name="rooms_header">Räume</string>
|
||||
<string name="send_bug_report_include_logs">Sende Protokolle</string>
|
||||
<string name="send_bug_report_include_logs">Protokolle senden</string>
|
||||
<string name="send_bug_report_include_crash_logs">Absturzberichte übermitteln</string>
|
||||
<string name="send_bug_report_include_screenshot">Bildschirmfoto übermitteln</string>
|
||||
<string name="send_bug_report">Problem melden</string>
|
||||
|
@ -692,7 +692,7 @@
|
|||
<string name="settings_noisy_notifications_preferences">Laute Benachrichtigungen einstellen</string>
|
||||
<string name="settings_call_notifications_preferences">Anrufbenachrichtigung einstellen</string>
|
||||
<string name="settings_silent_notifications_preferences">Stumme Benachrichtigungen einstellen</string>
|
||||
<string name="settings_system_preferences_summary">Wähle LED-Farbe, Vibration, Ton …</string>
|
||||
<string name="settings_system_preferences_summary">LED-Farbe, Vibration, Ton auswählen …</string>
|
||||
<string name="notification_silent">Stumm</string>
|
||||
<string name="passphrase_empty_error_message">Bitte eine Passphrase eingeben</string>
|
||||
<string name="passphrase_passphrase_too_weak">Passphrase ist zu schwach</string>
|
||||
|
@ -712,7 +712,7 @@
|
|||
<string name="keys_backup_unlock_button">Historie entschlüsseln</string>
|
||||
<string name="keys_backup_settings_restore_backup_button">Von Sicherung wiederherstellen</string>
|
||||
<string name="keys_backup_settings_delete_backup_button">Lösche Sicherung</string>
|
||||
<string name="keys_backup_settings_deleting_backup">Lösche Sicherung …</string>
|
||||
<string name="keys_backup_settings_deleting_backup">Sicherung löschen …</string>
|
||||
<string name="keys_backup_settings_delete_confirm_title">Lösche Sicherung</string>
|
||||
<string name="settings_notification_by_event">Präferenz der Benachrichtigungen nach Ereignis</string>
|
||||
<string name="settings_troubleshoot_test_fcm_failed_too_many_registration">[%1$s]
|
||||
|
@ -728,7 +728,7 @@
|
|||
\nSichere deine Schlüssel, um sie nicht zu verlieren.</string>
|
||||
<string name="keys_backup_setup_step3_generating_key_status">Wiederherstellungsschlüssel aus Passphrase generieren. Dies kann mehrere Sekunden brauchen.</string>
|
||||
<string name="keys_backup_setup_skip_msg">Du verlierst möglicherweise den Zugang zu deinen Nachrichten, wenn du dich abmeldest oder das Gerät verlierst.</string>
|
||||
<string name="keys_backup_restore_is_getting_backup_version">Rufe Sicherungsversion ab …</string>
|
||||
<string name="keys_backup_restore_is_getting_backup_version">Sicherungsversion abrufen …</string>
|
||||
<string name="keys_backup_restore_with_passphrase">Nutze deine Wiederherstellungs-Passphrase, um deinen verschlüsselten Nachrichtenverlauf lesen zu können</string>
|
||||
<string name="keys_backup_restore_use_recovery_key">nutze deinen Wiederherstellungsschlüssel</string>
|
||||
<string name="keys_backup_restore_with_passphrase_helper_with_link">Wenn du deine Wiederherstellungspassphrase nicht weist, kannst du %s.</string>
|
||||
|
@ -793,15 +793,15 @@
|
|||
<string name="keys_backup_banner_in_progress">Sichere deine Schlüssel. Dies könnte einige Minuten dauern …</string>
|
||||
<string name="keys_backup_info_keys_all_backup_up">Alle Schlüssel sind gesichert</string>
|
||||
<plurals name="keys_backup_info_keys_backing_up">
|
||||
<item quantity="one">Sichere einen Schlüssel …</item>
|
||||
<item quantity="other">Sichere %d Schlüssel …</item>
|
||||
<item quantity="one">Einen Schlüssel sichern …</item>
|
||||
<item quantity="other">%d Schlüssel sichern …</item>
|
||||
</plurals>
|
||||
<string name="keys_backup_info_title_version">Version</string>
|
||||
<string name="keys_backup_info_title_algorithm">Algorithmus</string>
|
||||
<string name="keys_backup_info_title_signature">Signatur</string>
|
||||
<string name="keys_backup_restoring_computing_key_waiting_message">Berechne Wiederherstellungsschlüssel …</string>
|
||||
<string name="keys_backup_restoring_downloading_backup_waiting_message">Lade Schlüssel herunter …</string>
|
||||
<string name="keys_backup_restoring_importing_keys_waiting_message">Importiere Schlüssel …</string>
|
||||
<string name="keys_backup_restoring_computing_key_waiting_message">Wiederherstellungsschlüssel berechnen …</string>
|
||||
<string name="keys_backup_restoring_downloading_backup_waiting_message">Schlüssel herunterladen …</string>
|
||||
<string name="keys_backup_restoring_importing_keys_waiting_message">Schlüssel importieren …</string>
|
||||
<string name="action_ignore">Ignorieren</string>
|
||||
<string name="auth_login_sso">Mit Single-Sign-On anmelden</string>
|
||||
<string name="settings_send_message_with_enter">Nachricht mit Eingabetaste senden</string>
|
||||
|
@ -903,8 +903,8 @@
|
|||
<string name="settings_labs_show_hidden_events_in_timeline">Versteckte Ereignisse in der Zeitleiste anzeigen</string>
|
||||
<string name="bottom_action_people_x">Direktnachrichten</string>
|
||||
<string name="send_file_step_idle">Warten …</string>
|
||||
<string name="send_file_step_encrypting_thumbnail">Vorschaubild wird verschlüsselt …</string>
|
||||
<string name="send_file_step_encrypting_file">Verschlüssle Datei …</string>
|
||||
<string name="send_file_step_encrypting_thumbnail">Vorschaubild verschlüsseln …</string>
|
||||
<string name="send_file_step_encrypting_file">Datei verschlüsseln …</string>
|
||||
<string name="edited_suffix">(bearbeitet)</string>
|
||||
<string name="message_edits">Nachrichtenbearbeitung</string>
|
||||
<string name="no_message_edits_found">Keine Änderungen gefunden</string>
|
||||
|
@ -912,7 +912,7 @@
|
|||
<string name="room_filtering_footer_create_new_direct_message">Sende eine neue Direktnachricht</string>
|
||||
<string name="room_filtering_footer_open_room_directory">Das Raumverzeichnis anzeigen</string>
|
||||
<string name="link_copied_to_clipboard">Link in die Zwischenablage kopiert</string>
|
||||
<string name="creating_direct_room">Erstelle Raum …</string>
|
||||
<string name="creating_direct_room">Raum erstellen …</string>
|
||||
<string name="message_view_edit_history">Bearbeitungsverlauf anzeigen</string>
|
||||
<string name="import_e2e_keys_from_file">E2E-Schlüssel aus der Datei \"%1$s\" importieren.</string>
|
||||
<string name="send_suggestion_sent">Vielen Dank, der Vorschlag wurde erfolgreich gesendet</string>
|
||||
|
@ -1003,7 +1003,7 @@
|
|||
<string name="send_attachment">Anhang senden</string>
|
||||
<string name="a11y_open_drawer">Navigationsmenü öffnen</string>
|
||||
<string name="a11y_create_menu_open">Raumerstellungsmenü öffnen</string>
|
||||
<string name="a11y_create_menu_close">Schließe das Raumerstellungsmenü …</string>
|
||||
<string name="a11y_create_menu_close">Das Raumerstellungsmenü schließen …</string>
|
||||
<string name="a11y_create_direct_message">Erstelle eine neue Direktnachricht</string>
|
||||
<string name="a11y_create_room">Erstelle einen neuen Raum</string>
|
||||
<string name="a11y_close_keys_backup_banner">Schließe Key-Backup-Einblendung</string>
|
||||
|
@ -1030,15 +1030,15 @@
|
|||
<string name="content_reported_title">Inhalt gemeldet</string>
|
||||
<string name="content_reported_content">Dieser Inhalt wurde gemeldet.
|
||||
\n
|
||||
\nWenn du keine weiteren Inhalte dieser Person sehen möchtest, kannst sie ignorieren, um ihre Nachrichten auszublenden.</string>
|
||||
\nWenn du keine Inhalte mehr von dieser Person sehen möchtest, kannst du sie ignorieren, um ihre Nachrichten auszublenden.</string>
|
||||
<string name="content_reported_as_spam_title">Als Spam gemeldet</string>
|
||||
<string name="content_reported_as_spam_content">Dieser Inhalt wurde als Spam gemeldet.
|
||||
\n
|
||||
\nWenn du keine weiteren Inhalte dieser Person sehen möchtest, kannst sie ignorieren, um ihre Nachrichten auszublenden.</string>
|
||||
\nWenn du keine Inhalte mehr von dieser Person sehen möchtest, kannst du sie ignorieren, um ihre Nachrichten auszublenden.</string>
|
||||
<string name="content_reported_as_inappropriate_title">Als unangebracht gemeldet</string>
|
||||
<string name="content_reported_as_inappropriate_content">Dieser Inhalt wurde als unangebracht gemeldet.
|
||||
\n
|
||||
\nWenn du keine weiteren Inhalte dieser Person sehen möchtest, kannst sie ignorieren, um ihre Nachrichten auszublenden.</string>
|
||||
\nWenn du keine Inhalte mehr von dieser Person sehen möchtest, kannst du sie ignorieren, um ihre Nachrichten auszublenden.</string>
|
||||
<string name="message_ignore_user">Nutzer ignorieren</string>
|
||||
<string name="room_list_quick_actions_notifications_all_noisy">Alle Nachrichten (laut)</string>
|
||||
<string name="room_list_quick_actions_notifications_all">Alle Nachrichten</string>
|
||||
|
@ -1524,8 +1524,8 @@
|
|||
<string name="uploads_files_title">DATEIEN</string>
|
||||
<string name="uploads_files_subtitle">%1$s um %2$s</string>
|
||||
<string name="uploads_files_no_result">Es gibt in diesem Raum keine Dateien</string>
|
||||
<string name="room_list_quick_actions_favorite_add">Füge zu Favoriten hinzu</string>
|
||||
<string name="room_list_quick_actions_favorite_remove">Entferne von Favoriten</string>
|
||||
<string name="room_list_quick_actions_favorite_add">Zu Favoriten hinzufügen</string>
|
||||
<string name="room_list_quick_actions_favorite_remove">Aus Favoriten entfernen</string>
|
||||
<string name="notice_member_no_changes_by_you">Du hast keine Änderungen gemacht</string>
|
||||
<string name="room_join_rules_public_by_you">Du hast den Raum für alle, die den Link kennen, zugänglich gemacht.</string>
|
||||
<string name="room_join_rules_invite_by_you">Du hast den Raumbeitritt auf Einladungen beschränkt.</string>
|
||||
|
@ -1622,9 +1622,9 @@
|
|||
<string name="settings_call_show_confirmation_dialog_title">Versehentliche Anrufe verhindern</string>
|
||||
<string name="settings_call_show_confirmation_dialog_summary">Bitte um Bestätigung, bevor du einen Anruf tätigst</string>
|
||||
<string name="bottom_sheet_setup_secure_backup_submit">Einrichten</string>
|
||||
<string name="no_permissions_to_start_conf_call">Dir fehlt die Berechtigung in diesem Raum eine Konferenz zu starten</string>
|
||||
<string name="video_meeting">Beginne eine Videokonferenz</string>
|
||||
<string name="audio_meeting">Beginne eine Audiokonferenz</string>
|
||||
<string name="no_permissions_to_start_conf_call">Du bist nicht berechtigt, in diesem Raum ein Konferenzgespräch zu starten</string>
|
||||
<string name="video_meeting">Videokonferenz starten</string>
|
||||
<string name="audio_meeting">Audiokonferenz starten</string>
|
||||
<string name="audio_video_meeting_description">Konferenzen nutzen die Jitsi-Sicherheits- und Berechtigungsrichtlinien. Alle im Raum Anwesenden können während der Konferenz beitreten.</string>
|
||||
<string name="cannot_call_yourself">Du kannst dich nicht selbst anrufen</string>
|
||||
<string name="cannot_call_yourself_with_invite">Du kannst dich nicht selbst anrufen, warte bis Teilnehmer die Einladung annehmen</string>
|
||||
|
@ -1670,7 +1670,7 @@
|
|||
<string name="sent_a_poll">Umfrage</string>
|
||||
<string name="sent_a_reaction">Reagierte mit: %s</string>
|
||||
<string name="universal_link_malformed">Der Link war fehlerhaft</string>
|
||||
<string name="no_permissions_to_start_webrtc_call">Du bist nicht berechtigt, einen Anruf in diesem Raum zu beginnen</string>
|
||||
<string name="no_permissions_to_start_webrtc_call">Du bist nicht berechtigt, in diesem Raum einen Anruf zu beginnen</string>
|
||||
<string name="sent_verification_conclusion">Ergebnis der Überprüfung</string>
|
||||
<string name="delete_account_data_warning">Kontodaten vom Typ %1$s löschen\?
|
||||
\n
|
||||
|
@ -1681,8 +1681,8 @@
|
|||
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">Die Applikation wartet auf den PUSH</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_title">Push testen</string>
|
||||
<string name="search_banned_user_hint">Gebannte Nutzer filtern</string>
|
||||
<string name="no_permissions_to_start_webrtc_call_in_direct_room">Du bist nicht berechtigt einen Anruf zu beginnen</string>
|
||||
<string name="no_permissions_to_start_conf_call_in_direct_room">Du hast keine Berechtigung ein Konferenzgespräch zu starten</string>
|
||||
<string name="no_permissions_to_start_webrtc_call_in_direct_room">Du bist nicht berechtigt, einen Anruf zu beginnen</string>
|
||||
<string name="no_permissions_to_start_conf_call_in_direct_room">Du bist nicht berechtigt, ein Konferenzgespräch zu starten</string>
|
||||
<string name="settings_security_pin_code_notifications_summary_on">Details wie Raumnamen und Nachrichteninhalt zeigen.</string>
|
||||
<string name="settings_security_pin_code_notifications_title">Inhalt in Benachrichtigungen anzeigen</string>
|
||||
<string name="settings_security_pin_code_use_biometrics_summary_off">PIN-Code ist die einzige Möglichkeit ${app_name} zu entsperren.</string>
|
||||
|
@ -1729,11 +1729,11 @@
|
|||
<string name="settings_security_pin_code_notifications_summary_off">Nur die Anzahl ungelesener Nachrichten in der Benachrichtigung zeigen.</string>
|
||||
<string name="attachment_type_dialog_title">Füge Bild hinzu per</string>
|
||||
<string name="warning_room_not_created_yet">Der Raum ist noch nicht erstellt. Raumerstellung abbrechen\?</string>
|
||||
<string name="room_list_quick_actions_low_priority_add">Zu niedrige Priorität hinzufügen</string>
|
||||
<string name="room_list_quick_actions_low_priority_add">Zu niedriger Priorität hinzufügen</string>
|
||||
<string name="create_room_topic_hint">Thema</string>
|
||||
<string name="warning_unsaved_change_discard">Änderungen verwerfen</string>
|
||||
<string name="warning_unsaved_change">Es gibt ungespeicherte Änderungen. Änderungen verwerfen\?</string>
|
||||
<string name="room_list_quick_actions_low_priority_remove">Von niedrige Priorität entfernen</string>
|
||||
<string name="room_list_quick_actions_low_priority_remove">Aus niedriger Priorität entfernen</string>
|
||||
<string name="rotate_and_crop_screen_title">Rotieren und Zuschneiden</string>
|
||||
<string name="create_room_settings_section">Raumeinstellungen</string>
|
||||
<string name="create_room_topic_section">Raumthema (optional)</string>
|
||||
|
@ -2026,7 +2026,7 @@
|
|||
</plurals>
|
||||
<string name="error_file_too_big_simple">Die Datei ist zu groß.</string>
|
||||
<string name="send_file_step_compressing_video">Video wird komprimiert (%d%%)</string>
|
||||
<string name="send_file_step_compressing_image">Komprimiere Bild …</string>
|
||||
<string name="send_file_step_compressing_image">Bild komprimieren …</string>
|
||||
<string name="use_as_default_and_do_not_ask_again">Als Standard festsetzen und nicht mehr fragen</string>
|
||||
<string name="option_always_ask">Jedes Mal fragen</string>
|
||||
<string name="directory_add_a_new_server_prompt">Gib den Namen des neuen Servers ein, den du erkunden möchtest.</string>
|
||||
|
@ -2128,9 +2128,9 @@
|
|||
<item quantity="other">%d verpasste Sprachanrufe</item>
|
||||
</plurals>
|
||||
<string name="hs_client_url">Heim-Server-API-Adresse</string>
|
||||
<string name="denied_permission_voice_message">Um Sprachnachrichten zu senden, erlaube bitte Zugriff aufs Mikrofon.</string>
|
||||
<string name="denied_permission_camera">Um fortzufahren, erlaube bitte in den Systemeinstellungen Zugriff auf die Kamera.</string>
|
||||
<string name="denied_permission_generic">Für diese Aktion fehlen einige Berechtigungen, bitte erlaube diese in den Systemeinstellungen.</string>
|
||||
<string name="denied_permission_voice_message">Um Sprachnachrichten zu senden, gewähre bitte den Zugriff aufs Mikrofon.</string>
|
||||
<string name="denied_permission_camera">Um fortzufahren, gewähre bitte in den Systemeinstellungen den Zugriff auf die Kamera.</string>
|
||||
<string name="denied_permission_generic">Für diese Aktion fehlen einige Berechtigungen, bitte gewähre diese in den Systemeinstellungen.</string>
|
||||
<string name="voice_message_slide_to_cancel">Wische zum Abbrechen</string>
|
||||
<string name="spaces_which_can_access">Spaces mit Zugriff auf</string>
|
||||
<string name="allow_space_member_to_find_and_access">Space-Mitgliedern Auffinden und Zugriff erlauben.</string>
|
||||
|
@ -2877,7 +2877,7 @@
|
|||
<string name="notice_voice_broadcast_ended">%1$s beendete eine Sprachübertragung.</string>
|
||||
<string name="stop_voice_broadcast_content">Möchtest du die Übertragung wirklich beenden\? Dies wird die Übertragung beenden und die vollständige Aufnahme im Raum bereitstellen.</string>
|
||||
<string name="stop_voice_broadcast_dialog_title">Live-Übertragung beenden\?</string>
|
||||
<string name="action_stop">Ja, beende</string>
|
||||
<string name="action_stop">Ja, beenden</string>
|
||||
<string name="rich_text_editor_link">Link setzen</string>
|
||||
<string name="set_link_edit">Link bearbeiten</string>
|
||||
<string name="set_link_create">Link erstellen</string>
|
||||
|
|
|
@ -2958,4 +2958,12 @@
|
|||
<string name="crosssigning_verify_after_update">کاره بهروز شد</string>
|
||||
<string name="sign_out_anyway">خروج به هر صورت</string>
|
||||
<string name="sign_out_failed_dialog_message">نمیتوان به کارساز خانگی رسید. اگر همچنان خارج شوید این افزاره از سیاههٔ افزارههایتان پاک نخواهد شد و باید از کارخواهس دیگر برش دارید.</string>
|
||||
<string name="invite_unknown_users_dialog_content">ناتوان در یافتن نمایهها برای شناسههای ماتریکس سیاهه شده. میخواهید به هر حال دعوتشان کنید؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="create_room_unknown_users_dialog_content">ناتوان در یافتن نمایهها برای شناسههای ماتریکس سیاهه شده. میخواهید به هر حال گپی بیاغازید؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="create_room_unknown_users_dialog_submit">آغاز گپ به هر حال</string>
|
||||
<string name="invite_unknown_users_dialog_submit">دعوت به هر حال</string>
|
||||
</resources>
|
|
@ -659,7 +659,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="send_suggestion_content">Lūdzu, rakstiet savu ieteikumu zemāk.</string>
|
||||
<string name="send_suggestion">Ieteikumi</string>
|
||||
<string name="preference_root_help_about">Palīdzība un par lietotni</string>
|
||||
<string name="settings_security_and_privacy">Drošība un konfidencialitāte</string>
|
||||
<string name="settings_security_and_privacy">Drošība un privātums</string>
|
||||
<string name="settings_general_title">Vispārīgi</string>
|
||||
<string name="create_room_public_title">Publiska</string>
|
||||
<string name="create_room_settings_section">Istabas iestatījumi</string>
|
||||
|
@ -1236,7 +1236,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="initial_sync_start_server_computing">Sākotnējā sinhronizācija:
|
||||
\nGaida servera atbildi…</string>
|
||||
<string name="labs_show_unread_notifications_as_tab">Pievienojiet speciālu cilni priekš nelasītiem paziņojumiem galvenajā ekrānā.</string>
|
||||
<string name="labs_swipe_to_reply_in_timeline">Ieslēgt pavilkšanas žestu, lai atbildētu uz ziņu</string>
|
||||
<string name="labs_swipe_to_reply_in_timeline">Laika joslā iespējot atbildēšanu pavelkot</string>
|
||||
<string name="no_message_edits_found">Labojumi netika atrasti</string>
|
||||
<string name="message_edits">Ziņu labojumi</string>
|
||||
<string name="settings_labs_show_complete_history_in_encrypted_room">Rādīt pilnu vēsturi šifrētajās istabās</string>
|
||||
|
@ -1877,7 +1877,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="settings_server_default_room_version">Noklusējuma versija</string>
|
||||
<string name="settings_server_room_versions">Istabu versijas 👓</string>
|
||||
<string name="settings_category_composer">Ziņu redaktors</string>
|
||||
<string name="settings_category_timeline">Hronoloģija</string>
|
||||
<string name="settings_category_timeline">Laika josla</string>
|
||||
<string name="verify_cannot_cross_sign">Šī sesija nevar kopīgot šo verifikāciju ar citām sesijām.
|
||||
\nVerifikācija tiks saglabāta lokāli un kopīgota kādā no nākamajām lietotnes versijām.</string>
|
||||
<string name="rendering_event_error_exception">${app_name} saskārās ar problēmu, atveidojot notikuma ar id \'%1$s\' saturu</string>
|
||||
|
@ -1945,11 +1945,11 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="push_gateway_item_url">Url:</string>
|
||||
<string name="push_gateway_item_device_name">Sesijas attēlojamais nosaukums:</string>
|
||||
<string name="push_gateway_item_app_display_name">Lietotnes attēlojamais nosaukums:</string>
|
||||
<string name="push_gateway_item_push_key">Iesūtīšanas atslēga:</string>
|
||||
<string name="push_gateway_item_push_key">Pašpiegādes atslēga:</string>
|
||||
<string name="push_gateway_item_app_id">Lietotnes identifikators:</string>
|
||||
<string name="settings_push_gateway_no_pushers">Nav reģistrētu Palaišanas vārtu</string>
|
||||
<string name="settings_push_rules_no_rules">Nav iestatīti Palaišanas Noteikumi</string>
|
||||
<string name="settings_push_rules">Palaišanas Noteikumi</string>
|
||||
<string name="settings_push_gateway_no_pushers">Nav norādītas pašpiegādes vārtejas</string>
|
||||
<string name="settings_push_rules_no_rules">Nav norādīti pašpiegādes nosacījumi</string>
|
||||
<string name="settings_push_rules">Pašpiegādes nosacījumi</string>
|
||||
<string name="create_new_space">Radīt jaunu Telpu</string>
|
||||
<string name="error_user_already_logged_in">Izskatās, ka mēģini izveidot savienojumu ar citu mājasserveri. Vai atteikties\?</string>
|
||||
<string name="room_settings_room_notifications_notify_me">Paziņot mani priekš</string>
|
||||
|
@ -1988,9 +1988,9 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
\n%1$s</string>
|
||||
<string name="settings_troubleshoot_test_bg_restricted_success">Fona ierobežojumi ir izslēgti priekš ${app_name}. Šis tests jāveic, izmantojot mobilos datus (bez WIFI).
|
||||
\n%1$s</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_failed">Neizdevās saņemt palaišanu. Iespējams, vajag pārielādēt lietotni.</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_success">Lietotne saņem Palaišanu</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">Lietotne gaida Palaišanu</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_failed">Neizdevās saņemt pašpiegādi. Risinājums varētu būt atkārtota lietotnes uzstādīšana.</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_success">Lietotne saņem pašpiegādi</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">Lietotne gaida pašpiegādi</string>
|
||||
<string name="settings_troubleshoot_test_push_loop_title">Pārbaudīt pašpiegādi</string>
|
||||
<string name="settings_troubleshoot_test_fcm_failed_account_missing">[%1$s]
|
||||
\nŠī kļūda ir ārpus ${app_name} kontroles. Tālrunī nav Google konta. Lūdzu, atveriet kontu pārvaldnieku un pievienojiet Google kontu.</string>
|
||||
|
@ -2054,8 +2054,8 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="open_poll_option_title">Atvērt aptauju</string>
|
||||
<string name="onboarding_new_app_layout_feedback_title">Sniegt atgriezenisko saiti</string>
|
||||
<string name="onboarding_new_app_layout_feedback_message">Piesist augšējā labajā stūrī, lai redzētu iespēju sniegt atgriezenisko saiti.</string>
|
||||
<string name="notice_voice_broadcast_ended_by_you">Tu beidzi balss pārraidi.</string>
|
||||
<string name="notice_voice_broadcast_ended">%1$s izbeidza balss pārraidi.</string>
|
||||
<string name="notice_voice_broadcast_ended_by_you">Tu beidzi balss apraidi.</string>
|
||||
<string name="notice_voice_broadcast_ended">%1$s izbeidza balss apraidi.</string>
|
||||
<string name="qr_code_login_header_show_qr_code_new_device_description">Izmantot ierīci, kurā veikta pieteikšanās, lai nolasītu zemāk esošo kvadrātkodu:</string>
|
||||
<string name="qr_code_login_header_show_qr_code_link_a_device_description">Nolasīt zemāk esošo kvadrātkodu ar ierīci, kurā ir notikusi atteikšanās.</string>
|
||||
<string name="qr_code_login_header_show_qr_code_title">Pieteikties ar kvadrātkodu</string>
|
||||
|
@ -2132,7 +2132,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="thread_list_modal_my_threads_subtitle">Rāda visus pavedienus, kuros ir notikusi iesaistīšanās</string>
|
||||
<string name="call_start_screen_sharing">Kopīgot ekrānu</string>
|
||||
<string name="labs_enable_deferred_dm_summary">Izveidot tiešo ziņu tikai pēc pirmās ziņas</string>
|
||||
<string name="labs_enable_rich_text_editor_summary">Izmēģināt bagātinātu teksta rakstīšanu (vienkārša teksta ievade būs drīzumā)</string>
|
||||
<string name="labs_enable_rich_text_editor_summary">Izmēģināt bagātinātu teksta rakstīšanu (vienkārša teksta ievade gaidāma drīzumā)</string>
|
||||
<string name="invites_empty_title">Nekā jauna.</string>
|
||||
<string name="room_notification_more_than_two_users_are_typing">%1$s, %2$s un citi</string>
|
||||
<string name="thread_list_modal_all_threads_title">Visi pavedieni</string>
|
||||
|
@ -2200,7 +2200,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="threads_labs_enable_notice_title">Pavedieni Beta</string>
|
||||
<string name="search_space_two_parents">%1$s un %2$s</string>
|
||||
<string name="analytics_opt_in_title">Palīdzēt uzlabot ${app_name}</string>
|
||||
<string name="settings_autoplay_animated_images_summary">Atskaņot kustīgos laikjoslas attēlus, tiklīdz tie ir redzami</string>
|
||||
<string name="settings_autoplay_animated_images_summary">Atskaņot kustīgos laika joslas attēlus, tiklīdz tie ir redzami</string>
|
||||
<string name="settings_troubleshoot_test_system_settings_permission_failed">${app_name} ir nepieciešama atļauja, lai parādītu paziņojumus.
|
||||
\nLūgums piešķirt atļauju.</string>
|
||||
<plurals name="search_space_multiple_parents">
|
||||
|
@ -2341,7 +2341,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="contact_admin_to_restore_encryption">Lūgums sazināties ar pārvaldītāju, lai atjaunotu šifrēšanu derīgā stāvoklī.</string>
|
||||
<string name="ftue_auth_phone_confirmation_title">Apstiprināt tālruņa numuru</string>
|
||||
<string name="permalink_unsupported_groups">Šo saiti nevar atvērt: kopienas tika aizstātas ar vietām</string>
|
||||
<string name="started_a_voice_broadcast">Uzsāka balss pārraidi</string>
|
||||
<string name="started_a_voice_broadcast">Uzsāka balss apraidi</string>
|
||||
<string name="ftue_auth_use_case_skip_partial">Izlaist šo jautājumu</string>
|
||||
<string name="verification_request_waiting_for_recovery">Apliecina ar drošo atslēgu vai vārdkopu…</string>
|
||||
<string name="encryption_has_been_misconfigured">Šifrēšana ir kļūdaini uzstādīta.</string>
|
||||
|
@ -2503,4 +2503,520 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.</string>
|
|||
<string name="alert_push_are_disabled_description">Jāpārskata iestatījumi, lai iespējotu pašpiegādes paziņojumus</string>
|
||||
<string name="save_recovery_key_chooser_hint">Saglabāt atkopšanas atslēgu</string>
|
||||
<string name="bottom_sheet_setup_secure_backup_submit">Uzstādīt</string>
|
||||
<plurals name="entries">
|
||||
<item quantity="zero">%d ierakstu</item>
|
||||
<item quantity="one">%d ieraksts</item>
|
||||
<item quantity="other">%d ieraksti</item>
|
||||
</plurals>
|
||||
<string name="settings_security_application_protection_title">Aizsargāt piekļuvi</string>
|
||||
<string name="settings_security_application_protection_screen_title">Iestatīt aizsardzību</string>
|
||||
<string name="auth_pin_reset_content">Lai atiestatītu PIN, būs nepieciešams atkārtoti pieteikties un izveidot jaunu.</string>
|
||||
<string name="create_pin_confirm_failure">Neizdevās apstiprināt PIN, lūgums ievadīt jaunu.</string>
|
||||
<string name="auth_biometric_key_invalidated_message">Biometriskā autentificēšanās tika atspējota, jo nesen tika pievienots jauns biometriskās autentifikācijas veids. To var atkal iespējot iestatījumos.</string>
|
||||
<string name="settings_security_application_protection_summary">Aizsargāt piekļuvi ar PIN un biometriju.</string>
|
||||
<plurals name="wrong_pin_message_remaining_attempts">
|
||||
<item quantity="zero">Nepareizs kods, atlikuši %d mēģinājumu</item>
|
||||
<item quantity="one">Nepareizs kods, atlicis %d mēģinājums</item>
|
||||
<item quantity="other">Nepareizs kods, atlikuši %d mēģinājumi</item>
|
||||
</plurals>
|
||||
<string name="too_many_pin_failures">Pārāk daudz kļūdu, tādēļ tiki izrakstīts</string>
|
||||
<string name="settings_security_pin_code_use_biometrics_error">Nevarēja iespējot biometrisko autentifikāciju.</string>
|
||||
<string name="a11y_open_settings">Atvērt iestatījumus</string>
|
||||
<string name="a11y_trust_level_default">Noklusējuma uzticamības līmenis</string>
|
||||
<string name="settings_security_pin_code_summary">Ja ir vēlēšanas atiestatīt savu PIN, jāpiesit Aizmirsu PIN, lai atteiktos un atiesatītu.</string>
|
||||
<string name="settings_security_pin_code_grace_period_title">Pieprasīt PIN pēc 2 minūtēm</string>
|
||||
<string name="call_transfer_consult_first">Iepriekškonsultēšana</string>
|
||||
<string name="dev_tools_error_no_content">Nav satura</string>
|
||||
<string name="error_voice_message_unable_to_record">Nevar ierakstīt balss ziņu</string>
|
||||
<string name="voice_broadcast_buffering">Buferizācija…</string>
|
||||
<string name="a11y_trust_level_warning">Brīdinājuma uzticamības līmenis</string>
|
||||
<string name="re_authentication_default_confirm_text">${app_name} pieprasa ievadīt piekļuves datus, lai veiktu šo darbību.</string>
|
||||
<string name="a11y_unsent_draft">ir nenosūtīts melnraksts</string>
|
||||
<string name="dev_tools_explore_room_state">Izpētīt istabas stāvokli</string>
|
||||
<string name="a11y_trust_level_trusted">Uzticams uzticamības līmenis</string>
|
||||
<string name="a11y_checked">Atzīmēts</string>
|
||||
<string name="dev_tools_send_custom_event">Nosūtīt pielāgotu notikumu</string>
|
||||
<string name="dev_tools_edit_content">Labot saturu</string>
|
||||
<string name="dev_tools_send_custom_state_event">Nosūtīt pielāgotu stāvokļa notikumu</string>
|
||||
<string name="dev_tools_error_no_message_type">Trūkst ziņas veida</string>
|
||||
<string name="dev_tools_success_state_event">Stāvokļa notikums ir nosūtīts.</string>
|
||||
<string name="dev_tools_event_content_hint">Notikuma saturs</string>
|
||||
<string name="space_explore_filter_no_result_description">Dažas vietas var būt paslēptas, jo tās ir privātas un ir nepieciešams uzaicinājums uz tām.</string>
|
||||
<string name="spaces_feeling_experimental_subspace">Jūtams izmēģinājuma gars\?
|
||||
\nVietai ir iespējams pievienot esošas vietas.</string>
|
||||
<string name="error_voice_message_cannot_reply_or_edit">Nevar atbildēt vai labot, kamēr tiek izmantota balss ziņa</string>
|
||||
<string name="a11y_pause_audio_message">Apturēt %1$s</string>
|
||||
<string name="audio_message_reply_content">%1$s (%2$s)</string>
|
||||
<string name="audio_message_file_size">(%1$s)</string>
|
||||
<string name="upgrade">Jaunināt</string>
|
||||
<string name="voice_message_n_seconds_warning_toast">Atlikušas %1$d s</string>
|
||||
<plurals name="call_active_status">
|
||||
<item quantity="zero">%1$d notiekošu zvanu ·</item>
|
||||
<item quantity="one">%1$d notiekošs zvans ·</item>
|
||||
<item quantity="other">%1$d notiekoši zvani ·</item>
|
||||
</plurals>
|
||||
<string name="a11y_unchecked">Nav atzīmēts</string>
|
||||
<string name="dev_tools_menu_name">Izstrādātāja rīki</string>
|
||||
<string name="discovery_section">Atklājamība (%s)</string>
|
||||
<string name="space_add_existing_spaces">Pievienot esošas vietas</string>
|
||||
<string name="space_add_space_to_any_space_you_manage">Pievienot vietu jebkurai sevis pārvaldītai vietai.</string>
|
||||
<string name="labs_enable_thread_messages_desc">Piezīme: lietotne tiks pārsāknēta</string>
|
||||
<string name="settings_show_latest_profile">Parādīt jaunāko lietotāja informāciju</string>
|
||||
<string name="a11y_play_voice_message">Atskaņot balss ziņu</string>
|
||||
<string name="a11y_pause_voice_message">Apturēt balss ziņu</string>
|
||||
<string name="voice_message_reply_content">Balss ziņa (%1$s)</string>
|
||||
<string name="voice_broadcast_live">Tiešraide</string>
|
||||
<string name="a11y_resume_voice_broadcast_record">Atsākt balss apraides ierakstu</string>
|
||||
<string name="call_transfer_consulting_with">Konsultējas ar %1$s</string>
|
||||
<string name="voice_message_slide_to_cancel">Slidināt, lai atceltu</string>
|
||||
<string name="a11y_stop_voice_broadcast_record">Pārtraukt balss apraides ierakstu</string>
|
||||
<string name="call_transfer_title">Pārvirzīt</string>
|
||||
<string name="a11y_rule_notify_noisy">Paziņot ar skaņu</string>
|
||||
<string name="a11y_error_some_message_not_sent">Dažas ziņas netika nosūtītas</string>
|
||||
<string name="user_invites_you">%s uzaicina Tevi</string>
|
||||
<string name="upgrade_room_update_parent_space">Automātiski uzaicināt vietas vecākvienumu</string>
|
||||
<string name="error_failed_to_join_room">Atvainojamies, atgadījās kļūda pievienošanās mēģinājuma laikā: %s</string>
|
||||
<string name="a11y_import_key_from_file">Ievietot atslēgu no datnes</string>
|
||||
<string name="dev_tools_send_state_event">Nosūtīt stāvokļa notikumu</string>
|
||||
<string name="dev_tools_error_malformed_event">Nepareizi veidots notikums</string>
|
||||
<string name="space_mark_as_not_suggested">Atzīmēt kā neieteikto</string>
|
||||
<string name="a11y_start_voice_message">Ierakstīt balss ziņu</string>
|
||||
<string name="voice_broadcast_live_broadcast">Tiešraides apraide</string>
|
||||
<string name="upgrade_room_auto_invite">Automātiski uzaicināt lietotājus</string>
|
||||
<string name="a11y_presence_busy">Aizņemts</string>
|
||||
<string name="command_description_upgrade_room">Atjaunina istabu uz jaunu versiju</string>
|
||||
<plurals name="space_people_you_know">
|
||||
<item quantity="zero">Jau pievienojušies %d zināmu cilvēku</item>
|
||||
<item quantity="one">Jau pievienojies %d zināms cilvēks</item>
|
||||
<item quantity="other">Jau pievienojušies %d zināmi cilvēki</item>
|
||||
</plurals>
|
||||
<string name="dev_tools_form_hint_event_content">Notikuma saturs</string>
|
||||
<string name="upgrade_public_room_from_to">Šī istaba tiks jaunināta no %1$s uz %2$s.</string>
|
||||
<string name="space_mark_as_suggested">Atzīmēt kā ieteikto</string>
|
||||
<string name="settings_security_pin_code_notifications_title">Rādīt saturu paziņojumos</string>
|
||||
<string name="settings_security_pin_code_notifications_summary_on">Rādīt, piemēram, istabu nosaukumus un ziņas saturu.</string>
|
||||
<string name="settings_security_pin_code_notifications_summary_off">Attēlot tikai neizlasīto ziņu skaitu vienkāršā paziņojumā.</string>
|
||||
<string name="error_opening_banned_room">Nevar atvērt istabu, no kuras esi izslēgts.</string>
|
||||
<string name="call_transfer_transfer_to_title">Pārvirzīt uz %1$s</string>
|
||||
<string name="re_authentication_activity_title">Nepieciešama atkārtota autentificēšanās</string>
|
||||
<string name="dev_tools_state_event">Stāvokļa notikumi</string>
|
||||
<string name="room_alias_preview_not_found">Pašlaik šis aizstājvārds nav pieejams.
|
||||
\nVēlāk jāmēģina vēlreiz vai jāvaicā istabas pārvaldītājam, lai pārbauda, vai Tev ir piekļuve.</string>
|
||||
<string name="create_space_identity_server_info_none">Pašlaik netiek izmantots identitātes serveris. Lai varētu uzaicināt komandas biedrus un būtu tiem atklājams, jāiestata tāds zemāk.</string>
|
||||
<string name="space_leave_prompt_msg_private">Nebūs iespējams atkārtoti pievienoties bez uzaicinājuma.</string>
|
||||
<string name="space_explore_filter_no_result_title">Nekas netika atrasts</string>
|
||||
<string name="labs_auto_report_uisi">Automātiski ziņot par atšifrēšanas kļūdām.</string>
|
||||
<string name="labs_auto_report_uisi_desc">Sistēma automātiski nosūtīts žurnāla ierakstus, kad notiks kļūda \"nav iespējams atšifrēt\"</string>
|
||||
<string name="settings_security_pin_code_use_biometrics_summary_on">Iespējot no ierīces atkarīgu biometriju, piemēram, pirkstu nospiedumus un sejas atpazīšanu.</string>
|
||||
<string name="settings_security_pin_code_grace_period_summary_on">PIN kods tiks pieprasīts pēc 2 minūšu ${app_name} neizmantošanas.</string>
|
||||
<string name="settings_security_pin_code_grace_period_summary_off">PIN kods tiek pieprasīts katrā ${app_name} atvēršanas reizē.</string>
|
||||
<string name="call_transfer_failure">Notika kļūda zvana pārvirzīšanas laikā</string>
|
||||
<string name="a11y_rule_notify_silent">Paziņot bez skaņas</string>
|
||||
<string name="dev_tools_success_event">Notikums ir nosūtīts.</string>
|
||||
<string name="event_status_a11y_failed">Neizdevās</string>
|
||||
<string name="space_leave_prompt_msg_as_admin">Tu esi vienīgais šīs vietas pārvaldītājs. Tās atstāšana nozīmē, ka neviens to nepārvaldīs.</string>
|
||||
<string name="labs_enable_thread_messages">Iespējot pavedienu ziņas</string>
|
||||
<string name="looking_for_someone_not_in_space">Meklē kādu, kurš nav %s\?</string>
|
||||
<string name="space_suggested">Ieteiktā</string>
|
||||
<string name="unnamed_room">Istaba bez nosaukuma</string>
|
||||
<string name="upgrade_required">Nepieciešams jauninājums</string>
|
||||
<string name="upgrade_private_room">Jaunināt privāto istabu</string>
|
||||
<string name="upgrade_room_no_power_to_manage">Ir nepieciešama atļauja, lai jauninātu istabu</string>
|
||||
<string name="a11y_stop_voice_message">Apturēt ierakstīšanu</string>
|
||||
<string name="a11y_recording_voice_message">Ieraksta balss ziņu</string>
|
||||
<string name="error_voice_message_broadcast_in_progress">Nevar uzsākt balss ziņu</string>
|
||||
<string name="a11y_audio_message_item">%1$s, %2$s, %3$s</string>
|
||||
<string name="a11y_play_audio_message">Atskaņot %1$s</string>
|
||||
<string name="settings_show_latest_profile_description">Parādīt jaunāko profila informāciju (attēlu un attēlojamo vārdu) visām ziņām.</string>
|
||||
<string name="it_may_take_some_time">Lūgums paciesties, tas var aizņemt kādu laiku.</string>
|
||||
<string name="upgrade_room_warning">Istabas jaunināšana ir sarežģīta darbība un parasti ir ieteicama, kad istaba ir nepastāvīga kļūdu, trūkstošu iespēju vai drošības ievainojamību dēļ.
|
||||
\nTas parasti tikai ietekmē to, kā istaba tiek apstrādāta serverī.</string>
|
||||
<string name="room_upgrade_to_recommended_version">Jaunināt uz ieteicamo istabas versiju</string>
|
||||
<string name="voice_message_tap_to_stop_toast">Jāpiesit ierakstam, lai klausītos vai apturētu</string>
|
||||
<string name="error_voice_message_broadcast_in_progress_message">Nevar uzsākt balss ziņu, jo pašreiz tiek ierakstīta tiešraides apraide. Lūgums to pārtraukt, lai varētu uzsākt balss ziņas ierakstīšanu</string>
|
||||
<string name="a11y_pause_voice_broadcast_record">Apturēt balss apraides ierakstu</string>
|
||||
<string name="error_voice_message_unable_to_play">Nevar atskaņot šo balss ziņu</string>
|
||||
<string name="a11y_error_message_not_sent">Ziņa nav nosūtīta kļūdas dēļ</string>
|
||||
<string name="share_by_text">Kopīgot ar tekstu</string>
|
||||
<string name="settings_security_pin_code_use_biometrics_title">Iespējot biometriju</string>
|
||||
<string name="finish_setup">Pabeigt iestatīšanu</string>
|
||||
<string name="joining_replacement_room">Pievienoties aizvietotājistabai</string>
|
||||
<string name="a11y_rule_notify_off">Nepaziņot</string>
|
||||
<string name="finish_setting_up_discovery">Pabeigt atklājamības izveidošanu.</string>
|
||||
<string name="you_are_invited">Tu esi uzaicināts</string>
|
||||
<string name="upgrade_public_room">Jaunināt publisko istabu</string>
|
||||
<string name="a11y_audio_playback_duration" tools:ignore="PluralsCandidate">%1$d minūtes %2$d sekundes</string>
|
||||
<string name="error_audio_message_unable_to_play">Nespēj atskaņot %1$s</string>
|
||||
<string name="settings_security_pin_code_use_biometrics_summary_off">PIN kods ir vienīgais veids, kā atslēgt ${app_name}.</string>
|
||||
<string name="discovery_invite">Uzaicināt e-pastā, atrast kontaktus un vēl…</string>
|
||||
<string name="dev_tools_form_hint_state_key">Stāvokļa atslēga</string>
|
||||
<string name="space_leave_radio_buttons_title">Lietas šajā vietā</string>
|
||||
<string name="location_share_external">Atvērt ar</string>
|
||||
<string name="room_polls_wait_for_display">Attēlo aptaujas</string>
|
||||
<string name="location_share_option_user_live">Kopīgot atrašanās vietu tiešraidē</string>
|
||||
<string name="create_poll_question_title">Aptaujas jautājums vai temats</string>
|
||||
<string name="a11y_location_share_option_pinned_icon">Kopīgot šo atrašanās vietu</string>
|
||||
<string name="link_this_email_settings_link">Sasaistīt šo e-pasta adresi ar kontu</string>
|
||||
<plurals name="poll_total_vote_count_before_ended_and_voted">
|
||||
<item quantity="zero">Pamatojoties uz %1$d balsojumiem</item>
|
||||
<item quantity="one">Pamatojoties uz %1$d balsojumu</item>
|
||||
<item quantity="other">Pamatojoties uz %1$d balsojumiem</item>
|
||||
</plurals>
|
||||
<string name="create_poll_button">IZVEIDOT APTAUJU</string>
|
||||
<string name="poll_no_votes_cast">Nav saņemti balsojumi</string>
|
||||
<string name="end_poll_confirmation_title">Noslēgt šo aptauju\?</string>
|
||||
<string name="error_voice_broadcast_unauthorized_title">Nevar uzsākt jaunu balss apraidi</string>
|
||||
<string name="a11y_play_voice_broadcast">Atskaņot vai atsākt balss apraidi</string>
|
||||
<string name="a11y_voice_broadcast_fast_backward">Ātri patīt 30 sekundes atpakaļ</string>
|
||||
<string name="a11y_voice_broadcast_fast_forward">Ātri patīt 30 sekundes uz priekšu</string>
|
||||
<string name="error_voice_broadcast_blocked_by_someone_else_message">Kāds cits jau ieraksta balss apraidi. Jāgaida, līdz tā beigsies, lai varētu uzsākt jaunu.</string>
|
||||
<string name="stop_voice_broadcast_content">Vai tiešām pārtraukt tiešraides apraidi\? Tas izbeigs apraidi, un istabā būs pieejams viss ieraksts.</string>
|
||||
<string name="this_invite_to_this_space_was_sent">Šis uzaicinājums uz šo vietu tika nosūtīts uz %s, kas nav saistīts ar Tavu kontu</string>
|
||||
<string name="labs_enable_latex_maths">Iespējot LaTeX matemātiku</string>
|
||||
<string name="create_poll_question_hint">Jautājums vai temats</string>
|
||||
<string name="create_poll_empty_question_error">Jautājums nevar būt tukšs</string>
|
||||
<plurals name="poll_total_vote_count_before_ended_and_not_voted">
|
||||
<item quantity="zero">Saņemti %1$d balsojumu. Jābalso, lai redzētu iznākumu</item>
|
||||
<item quantity="one">Saņemts %1$d balsojums. Jābalso, lai redzētu iznākumu</item>
|
||||
<item quantity="other">Saņemti %1$d balsojumi. Jābalso, lai redzētu iznākumu</item>
|
||||
</plurals>
|
||||
<plurals name="poll_total_vote_count_after_ended">
|
||||
<item quantity="zero">Galīgais iznākums, pamatojoties uz %1$d balsojumiem</item>
|
||||
<item quantity="one">Galīgais iznākums, pamatojoties uz %1$d balsojumu</item>
|
||||
<item quantity="other">Galīgais iznākums, pamatojoties uz %1$d balsojumiem</item>
|
||||
</plurals>
|
||||
<string name="poll_end_room_list_preview">Aptauja noslēgta</string>
|
||||
<string name="edit_poll_title">Labot aptauju</string>
|
||||
<string name="ended_poll_indicator">Noslēdza aptauju.</string>
|
||||
<string name="room_polls_load_more">Ielādēt vairāk aptauju</string>
|
||||
<string name="room_polls_loading_error">Kļūda aptauju izgūšanā.</string>
|
||||
<string name="a11y_location_share_locate_button">Pietuvināt līdz pašreizējai atrašanās vietai</string>
|
||||
<string name="location_share_live_select_duration_option_1">15 minūtes</string>
|
||||
<string name="live_location_description">Atrašanās vietas tiešraide</string>
|
||||
<string name="error_voice_broadcast_already_in_progress_message">Tu jau ieraksti balss apraidi. Lūgums pabeigt pašreizējo, lai uzsāktu jaunu.</string>
|
||||
<string name="end_poll_confirmation_description">Tas vairs neļaus cilvēkiem balsot, un tiks attēlots aptaujas galīgais iznākums.</string>
|
||||
<string name="poll_type_title">Aptaujas veids</string>
|
||||
<string name="open_poll_option_description">Balsotāji redz iznākumu, tiklīdz viņi ir nobalsojuši</string>
|
||||
<string name="location_share_live_enabled">Atrašanās vietas tiešraide iespējota</string>
|
||||
<string name="location_share_live_ended">Atrašanās vietas tiešraide beidzās</string>
|
||||
<string name="live_location_bottom_sheet_last_updated_at">Atjaunota pirms %1$s</string>
|
||||
<string name="unable_to_decrypt_some_events_in_poll">Atšifrēšanas kļūdu dēļ daži balsojumi var netikt ieskaitīti</string>
|
||||
<string name="location_share_option_pinned">Kopīgot šo atrašanās vietu</string>
|
||||
<string name="a11y_location_share_pin_on_map">Piespraust atlasīto atrašanās vietu kartē</string>
|
||||
<string name="location_share_live_view">Apskatīt atrašanās vietas tiešraidi</string>
|
||||
<string name="tooltip_attachment_photo">Atvērt kameru</string>
|
||||
<string name="tooltip_attachment_gallery">Nosūtīt attēlus un video</string>
|
||||
<string name="location_share_live_until">Tiešraidē līdz %1$s</string>
|
||||
<string name="a11y_static_map_image">Karte</string>
|
||||
<string name="location_not_available_dialog_title">${app_name} nevarēja piekļūt atrašanās vietai</string>
|
||||
<string name="a11y_pause_voice_broadcast">Apturēt balss apraidi</string>
|
||||
<string name="poll_undisclosed_not_ended">Iznākums būs redzams, kad aptauja būs beigusies</string>
|
||||
<string name="closed_poll_option_title">Aizvērta aptauja</string>
|
||||
<string name="location_share_live_remaining_time">Atlicis %1$s</string>
|
||||
<string name="labs_enable_msc3061_share_history">MSC3061: istabu atslēgu kopīgošana pagātnes ziņām</string>
|
||||
<string name="poll_response_room_list_preview">Saņemtais balsojums</string>
|
||||
<string name="delete_poll_dialog_title">Noņemt aptauju</string>
|
||||
<string name="location_share_live_select_duration_option_3">8 stundas</string>
|
||||
<string name="poll_end_action">Noslēgt aptauju</string>
|
||||
<string name="location_share_live_stop">Pārtraukt</string>
|
||||
<string name="stop_voice_broadcast_dialog_title">Pārtraukt tiešraides apraidi\?</string>
|
||||
<string name="create_poll_title">Izveidot aptauju</string>
|
||||
<string name="room_polls_ended_no_item">Šajā istabā nav noslēgto aptauju</string>
|
||||
<string name="location_share_live_select_duration_option_2">1 stundu</string>
|
||||
<string name="location_timeline_failed_to_load_map">Neizdevās ielādēt karti</string>
|
||||
<string name="labs_enable_live_location">Iespējot atrašanās vietas tiešraides kopīgošanu</string>
|
||||
<string name="end_poll_confirmation_approve_button">Noslēgt aptauju</string>
|
||||
<string name="error_voice_broadcast_unable_to_decrypt">Nav iespējams atšifrēt šo balss apraidi.</string>
|
||||
<string name="restart_the_application_to_apply_changes">Lietotne ir jāpārsāknē, lai izmaiņas stātos spēkā.</string>
|
||||
<string name="delete_poll_dialog_content">Vai tiešām noņemt šo aptauju\? To pēc noņemšanas vairs nevarēs atgūt.</string>
|
||||
<string name="room_polls_active_no_item">Šajā istabā nav notiekošu aptauju</string>
|
||||
<string name="room_polls_ended">Noslēgušās aptaujas</string>
|
||||
<string name="location_share_option_user_current">Kopīgot manu pašreizējo atrašanās vietu</string>
|
||||
<string name="a11y_location_share_option_user_live_icon">Kopīgot atrašanās vietu tiešraidē</string>
|
||||
<string name="live_location_not_enough_permission_dialog_description">Nepieciešamas atbilstošas atļaujas, lai šajā istabā varētu kopīgot atrašanās vietas tiešraidi.</string>
|
||||
<string name="location_activity_title_preview">Atrašanās vieta</string>
|
||||
<string name="a11y_location_share_option_user_current_icon">Kopīgot manu pašreizējo atrašanās vietu</string>
|
||||
<string name="location_share_live_select_duration_title">Kopīgot atrašanās vietu tiešraidē</string>
|
||||
<string name="location_share_loading_map_error">Nebija iespējams ielādēt karti
|
||||
\nŠis mājasserveris var nebūt iestatīts, lai attēlotu kartes.</string>
|
||||
<string name="live_location_share_location_item_share">Kopīgot atrašanās vietu</string>
|
||||
<string name="room_polls_active">Notiekošās aptaujas</string>
|
||||
<plurals name="room_polls_ended_no_item_for_loaded_period">
|
||||
<item quantity="zero">Iepriekšējās %1$d dienās nav noslēgto aptauju.
|
||||
\nJāielādē vairāk aptauju, lai apskatītu iepriekšējo dienu aptaujas.</item>
|
||||
<item quantity="one">Iepriekšējā dienā nav noslēgto aptauju.
|
||||
\nJāielādē vairāk aptauju, lai apskatītu iepriekšējo dienu aptaujas.</item>
|
||||
<item quantity="other">Iepriekšējās %1$d dienās nav noslēgto aptauju.
|
||||
\nJāielādē vairāk aptauju, lai apskatītu iepriekšējo dienu aptaujas.</item>
|
||||
</plurals>
|
||||
<string name="location_not_available_dialog_content">${app_name} nevarēja piekļūt atrašanās vietai. Lūgums vēlāk mēģināt vēlreiz.</string>
|
||||
<string name="error_voice_broadcast_permission_denied_message">Nav nepieciešamo atļauju, lai uzsāktu balss apraidi šajā istabā. Jāsazinās ar istabas pārvaldītāju, lai paaugstinātu atļaujas.</string>
|
||||
<plurals name="room_polls_active_no_item_for_loaded_period">
|
||||
<item quantity="zero">Iepriekšējās %1$d dienās nav notiekošu aptauju.
|
||||
\nJāielādē vairāk aptauju, lai redzētu iepriekšējo dienu aptaujas.</item>
|
||||
<item quantity="one">Iepriekšējā dienā nav notiekošu aptauju.
|
||||
\nJāielādē vairāk aptauju, lai redzētu iepriekšējo dienu aptaujas.</item>
|
||||
<item quantity="other">Iepriekšējās %1$d dienās nav notiekošu aptauju.
|
||||
\nJāielādē vairāk aptauju, lai redzētu iepriekšējo dienu aptaujas.</item>
|
||||
</plurals>
|
||||
<string name="room_poll_details_go_to_timeline">Apskatīt aptauju laika joslā</string>
|
||||
<string name="location_share_live_started">Ielādē atrašanās vietas tiešraidi…</string>
|
||||
<string name="error_voice_broadcast_unable_to_play">Nav iespējams atskaņot šo balss apraidi.</string>
|
||||
<string name="location_activity_title_static_sharing">Kopīgot atrašanās vietu</string>
|
||||
<string name="live_location_sharing_notification_title">${app_name} atrašanās vietas tiešraide</string>
|
||||
<string name="error_voice_broadcast_no_connection_recording">Savienojuma kļūda - ierakstīšana apturēta</string>
|
||||
<string name="live_location_sharing_notification_description">Notiek atrašanās vietas kopīgošana</string>
|
||||
<string name="voice_broadcast_recording_time_left">Atlicis %1$s</string>
|
||||
<string name="labs_enable_live_location_summary">Pagaidu īstenojums: atrašanās vietas ir paliekošas istabas vēsturē</string>
|
||||
<string name="upgrade_room_for_restricted">Ikviens no %s varēs atrast šo istabu un pievienoties tai - nav nepieciešams pašrocīgi visus uzaicināt. To jebkurā laikā būs iespējams mainīt istabas iestatījumos.</string>
|
||||
<string name="live_location_not_enough_permission_dialog_title">Nav atļaujas kopīgot atrašanās vietas tiešraidi</string>
|
||||
<string name="upgrade_room_for_restricted_no_param">Ikviens vecākvietā varēs atrast šo istabu un pievienoties tai - nav nepieciešams pašrocīgi visus uzaicināt. To jebkurā laikā ir iespējams mainīt istabas iestatījumos.</string>
|
||||
<string name="upgrade_room_for_restricted_note">Lūgums ņemt vērā, ka jaunināšana izveidos jaunu istabas versiju. Visas pašreizējās ziņas paliks šajā arhivētajā istabā.</string>
|
||||
<string name="message_bubbles">Rādīt ziņu burbuļus</string>
|
||||
<string name="this_invite_to_this_room_was_sent">Šis uzaicinājums uz šo istabu tika nosūtīts uz %s, kas nav saistīta ar Tavu kontu</string>
|
||||
<string name="link_this_email_with_your_account">%s iestatījumos, lai saņemtu uzaicinājumus tieši ${app_name}.</string>
|
||||
<string name="labs_enable_msc3061_share_history_desc">Kad uzaicina šifrētā istabā, kas kopīgo vēsturi, būs redzama šifrētā vēsture.</string>
|
||||
<plurals name="poll_option_vote_count">
|
||||
<item quantity="zero">%1$d balsojumu</item>
|
||||
<item quantity="one">%1$d balsojums</item>
|
||||
<item quantity="other">%1$d balsojumi</item>
|
||||
</plurals>
|
||||
<string name="closed_poll_option_description">Iznākums tiek atklāts tikai pēc aptaujas noslēgšanas</string>
|
||||
<string name="attachment_type_selector_poll">Aptaujas</string>
|
||||
<string name="attachment_type_selector_camera">Kamera</string>
|
||||
<string name="settings_troubleshoot_test_current_endpoint_title">Galamērķis</string>
|
||||
<string name="device_manager_other_sessions_multi_signout_selection">Atteikties</string>
|
||||
<plurals name="device_manager_other_sessions_multi_signout_all">
|
||||
<item quantity="zero">Atteikties no %1$d sesijām</item>
|
||||
<item quantity="one">Atteikties no %1$d sesijas</item>
|
||||
<item quantity="other">Atteikties no %1$d sesijām</item>
|
||||
</plurals>
|
||||
<string name="device_manager_other_sessions_show_ip_address">Parādīt IP adresi</string>
|
||||
<string name="device_manager_other_sessions_hide_ip_address">Paslēpt IP adresi</string>
|
||||
<string name="device_manager_session_details_application_name">Nosaukums</string>
|
||||
<string name="device_manager_session_rename_edit_hint">Sesijas nosaukums</string>
|
||||
<string name="device_manager_learn_more_sessions_unverified_title">Neapliecinātās sesijas</string>
|
||||
<plurals name="message_reaction_show_more">
|
||||
<item quantity="zero">Vēl %1$d</item>
|
||||
<item quantity="one">Vēl %1$d</item>
|
||||
<item quantity="other">Vēl %1$d</item>
|
||||
</plurals>
|
||||
<string name="device_manager_learn_more_session_rename_title">Sesiju pārdēvēšana</string>
|
||||
<string name="device_manager_session_overview_signout">Atteikties no šīs sesijas</string>
|
||||
<string name="tooltip_attachment_file">Augšupielādēt datni</string>
|
||||
<string name="tooltip_attachment_poll">Izveidot aptauju</string>
|
||||
<string name="attachment_type_selector_voice_broadcast">Balss apraide</string>
|
||||
<string name="message_reaction_show_less">Rādīt mazāk</string>
|
||||
<string name="room_message_autocomplete_notification">Istabas paziņojums</string>
|
||||
<string name="screen_sharing_notification_title">${app_name} ekrāna kopīgošana</string>
|
||||
<string name="settings_troubleshoot_test_distributors_fdroid">Netika atrasts neviens cits veids bez sinhronizēšanas fonā.</string>
|
||||
<string name="settings_troubleshoot_test_current_endpoint_success">Pašreizējais galamērķis: %s</string>
|
||||
<string name="settings_troubleshoot_test_current_gateway_title">Vārteja</string>
|
||||
<string name="device_manager_verification_status_unknown">Nezināms apliecinājuma stāvoklis</string>
|
||||
<string name="device_manager_other_sessions_view_all">Apskatīt visas (%1$d)</string>
|
||||
<string name="device_manager_unverified_sessions_description">Jāapliecina vai jāatsakās no neapliecinātām sesijām.</string>
|
||||
<string name="device_manager_filter_option_verified_description">Gatavas drošai ziņapmaiņai</string>
|
||||
<string name="device_manager_filter_option_unverified_description">Nav gatavas drošai ziņapmaiņai</string>
|
||||
<string name="device_manager_other_sessions_recommendation_description_verified">Vislabākajai drošībai jāatsakās no jebkuras neatpazīstamas vai vairs neizmantotas sesijas.</string>
|
||||
<string name="device_manager_other_sessions_recommendation_description_unverified">Jāapliecina savas sesijas paplašinātai drošajai ziņapmaiņai vai jāatsakās no tām, kas nav atpazīstamas vai vairs netiek izmantotas.</string>
|
||||
<string name="device_manager_session_details_description">Informācija par lietotne, ierīci un darbībām.</string>
|
||||
<string name="device_manager_session_details_device_operating_system">Operētājsistēma</string>
|
||||
<string name="device_manager_learn_more_sessions_verified_title">Apliecinātas sesijas</string>
|
||||
<string name="screen_sharing_notification_description">Notiek ekrāna kopīgošana</string>
|
||||
<string name="labs_enable_element_call_permission_shortcuts_summary">Automātiski apstiprināt Element zvanu logrīkus un piešķirt piekļuvi kamerai/mikrofonam</string>
|
||||
<string name="device_manager_filter_bottom_sheet_title">Atlase</string>
|
||||
<string name="device_manager_other_sessions_recommendation_title_unverified">Neapliecinātas</string>
|
||||
<string name="device_manager_session_details_application">Lietotne</string>
|
||||
<string name="device_manager_verification_status_unverified">Neapliecināta sesija</string>
|
||||
<string name="settings_troubleshoot_test_distributors_title">Pieejamie veidi</string>
|
||||
<string name="device_manager_session_title">Sesija</string>
|
||||
<string name="device_manager_other_sessions_no_verified_sessions_found">Apliecinātas sesijas netika atrastas.</string>
|
||||
<string name="device_manager_session_rename">Pārdēvēt sesiju</string>
|
||||
<string name="unifiedpush_getdistributors_dialog_title">Izvēlēties, kā saņemt paziņojumus</string>
|
||||
<string name="unifiedpush_distributor_fcm_fallback">Google pakalpojumi</string>
|
||||
<plurals name="room_removed_messages">
|
||||
<item quantity="zero">Noņemtas %d ziņu</item>
|
||||
<item quantity="one">Noņemta %d ziņa</item>
|
||||
<item quantity="other">Noņemtas %d ziņas</item>
|
||||
</plurals>
|
||||
<string name="device_manager_verification_status_detail_current_session_unverified">Jāapliecina pašreizējā sesija paplašinātai drošajai ziņapmaiņai.</string>
|
||||
<string name="tooltip_attachment_contact">Atvērt kontaktus</string>
|
||||
<string name="a11y_device_manager_device_type_mobile">Tālrunis</string>
|
||||
<string name="device_manager_session_details_title">Sesijas izvērsums</string>
|
||||
<string name="attachment_type_selector_text_formatting">Teksta formatēšana</string>
|
||||
<string name="device_manager_device_title">Iekārta</string>
|
||||
<string name="device_manager_session_details_session_name">Sesijas nosaukums</string>
|
||||
<string name="attachment_type_selector_location">Atrašanās vieta</string>
|
||||
<string name="settings_troubleshoot_test_current_distributor_title">Veids</string>
|
||||
<string name="device_manager_header_section_security_recommendations_description">Uzlabo sava konta drošību ievērojot šos ieteikumus.</string>
|
||||
<string name="device_manager_session_details_device_browser">Pārlūks</string>
|
||||
<string name="device_manager_sessions_sign_in_with_qr_code_title">Pieteikties ar kvadrātkodu</string>
|
||||
<string name="device_manager_verify_session">Apliecināt sesiju</string>
|
||||
<string name="a11y_device_manager_filter">Atlasīt</string>
|
||||
<string name="tooltip_attachment_location">Kopīgot atrašanās vietu</string>
|
||||
<string name="tooltip_attachment_voice_broadcast">Uzsākt balss apraidi</string>
|
||||
<string name="attachment_type_selector_contact">Kontakts</string>
|
||||
<string name="room_message_notify_everyone">Paziņot visai istabai</string>
|
||||
<string name="room_message_autocomplete_users">Lietotāji</string>
|
||||
<string name="unifiedpush_distributor_background_sync">Sinhronizēšana fonā</string>
|
||||
<string name="settings_notification_method">Paziņojuma veids</string>
|
||||
<string name="settings_troubleshoot_test_current_endpoint_failed">Nevar atrast galamērķi.</string>
|
||||
<string name="live_location_labs_promotion_title">Atrašanās vietas tiešraides kopīgošana</string>
|
||||
<string name="device_manager_sessions_other_title">Citas sesijas</string>
|
||||
<string name="a11y_device_manager_device_type_web">Tīmeklis</string>
|
||||
<string name="a11y_device_manager_device_type_desktop">Darbvirsma</string>
|
||||
<string name="device_manager_verification_status_detail_other_session_verified">Šī sesija ir gatava drošai ziņapmaiņai.</string>
|
||||
<string name="device_manager_other_sessions_description_unverified">Neapliecināta · Pēdējā darbība %1$s</string>
|
||||
<plurals name="device_manager_other_sessions_description_inactive">
|
||||
<item quantity="zero">Neizmantota %1$d+ dienas (%2$s)</item>
|
||||
<item quantity="one">Neizmantota %1$d+ dienu (%2$s)</item>
|
||||
<item quantity="other">Neizmantota %1$d+ dienas (%2$s)</item>
|
||||
</plurals>
|
||||
<string name="device_manager_unverified_sessions_title">Neapliecinātas sesijas</string>
|
||||
<string name="device_manager_session_details_session_last_activity">Pēdējā darbība</string>
|
||||
<string name="device_manager_session_details_application_version">Versija</string>
|
||||
<string name="device_manager_session_rename_warning">Lūgums ņemt vērā, ka sesiju nosaukumi ir redzami arī cilvēkiem, ar kuriem sazinies.</string>
|
||||
<string name="settings_troubleshoot_test_current_distributor">Pašreiz tiek izmantots %s.</string>
|
||||
<string name="device_manager_verification_status_detail_other_session_unknown">Jāapliecina pašreizējā sesija, lai atklātu šīs sesijas apliecinājuma stāvokli.</string>
|
||||
<string name="device_manager_filter_option_all_sessions">Visas sesijas</string>
|
||||
<string name="device_manager_header_section_security_recommendations_title">Drošības ieteikumi</string>
|
||||
<string name="device_manager_current_session_title">Pašreizējā sesija</string>
|
||||
<string name="device_manager_other_sessions_clear_filter">Notīrīt atlasi</string>
|
||||
<string name="tooltip_attachment_sticker">Nosūtīt uzlīmi</string>
|
||||
<string name="attachment_type_selector_gallery">Attēlu bibliotēka</string>
|
||||
<string name="attachment_type_selector_sticker">Uzlīmes</string>
|
||||
<string name="attachment_type_selector_file">Pielikumi</string>
|
||||
<string name="settings_troubleshoot_test_distributors_gplay">Netika atrasts neviens cits veids bez Google Play pakalpojuma.</string>
|
||||
<plurals name="settings_troubleshoot_test_distributors_many">
|
||||
<item quantity="zero">Atrasti %d veidu.</item>
|
||||
<item quantity="one">Atrasts %d veids.</item>
|
||||
<item quantity="other">Atrasti %d veidi.</item>
|
||||
</plurals>
|
||||
<string name="settings_troubleshoot_test_current_gateway">Pašreizējā vārteja: %s</string>
|
||||
<string name="a11y_device_manager_device_type_unknown">Nezināms ierīces veids</string>
|
||||
<string name="device_manager_view_details">Apskatīt izvērsumu</string>
|
||||
<string name="device_manager_inactive_sessions_title">Neizmantotas sesijas</string>
|
||||
<string name="device_manager_filter_option_verified">Apliecinātas</string>
|
||||
<string name="device_manager_filter_option_inactive">Neizmantotas</string>
|
||||
<string name="device_manager_other_sessions_recommendation_title_verified">Apliecinātas</string>
|
||||
<string name="device_manager_other_sessions_no_inactive_sessions_found">Neizmantotas sesijas netika atrastas.</string>
|
||||
<string name="device_manager_other_sessions_select">Atlasīt sesijas</string>
|
||||
<string name="device_manager_signout_all_other_sessions">Atteikties no visām pārējām sesijām</string>
|
||||
<string name="device_manager_session_details_device_ip_address">IP adrese</string>
|
||||
<string name="device_manager_session_details_application_url">URL</string>
|
||||
<string name="device_manager_session_details_device_model">Modelis</string>
|
||||
<string name="device_manager_learn_more_sessions_inactive_title">Neizmantotās sesijas</string>
|
||||
<string name="device_manager_learn_more_sessions_unverified">Neapliecinātās sesijas ir sesijas, kurās ir notikusi pieteikšanās ar Taviem datiem, bet nav starpapliecinātas.
|
||||
\n
|
||||
\nVajadzētu īpaši pārliecināties, ka šīs sesijas ir atpazīstamas, jo tās var norādīt uz nepilnvarotu konta izmantošanu.</string>
|
||||
<string name="live_location_labs_promotion_switch_title">Iespējot atrašanās vietas kopīgošanu</string>
|
||||
<plurals name="device_manager_inactive_sessions_description">
|
||||
<item quantity="zero">Jāapsver atteikšanās no vecajām sesijām (%1$d dienu vai vairāk), kas vairs netiek izmantotas.</item>
|
||||
<item quantity="one">Jāapsver atteikšanās no vecajām sesijām (%1$d diena vai vairāk), kas vairs netiek izmantotas.</item>
|
||||
<item quantity="other">Jāapsver atteikšanās no vecajām sesijām (%1$d dienas vai vairāk), kas vairs netiek izmantotas.</item>
|
||||
</plurals>
|
||||
<string name="labs_enable_element_call_permission_shortcuts">Iespējot Element zvanu atļauju īsceļus</string>
|
||||
<string name="device_manager_session_last_activity">Pēdējā darbība %1$s</string>
|
||||
<string name="device_manager_sessions_other_description">Vislielākajai drošībai jāapliecina savas sesijas un jāatsakās no jebkuras neatpazītas vai neizmantotas sesijas.</string>
|
||||
<string name="device_manager_filter_option_unverified">Neapliecinātas</string>
|
||||
<string name="device_manager_verification_status_verified">Apliecināta sesija</string>
|
||||
<string name="device_manager_verification_status_detail_current_session_verified">Pašreizējā sesija ir gatava drošai ziņapmaiņai.</string>
|
||||
<string name="device_manager_verification_status_detail_other_session_unverified">Vislabākajai drošībai un uzticamībai jāapliecina šī sesija vai jāatsakās no tās.</string>
|
||||
<plurals name="device_manager_filter_option_inactive_description">
|
||||
<item quantity="zero">Neizmantotas %1$d dienu vai ilgāk</item>
|
||||
<item quantity="one">Neizmantotas %1$d dienu vai ilgāk</item>
|
||||
<item quantity="other">Neizmantotas %1$d dienas vai ilgāk</item>
|
||||
</plurals>
|
||||
<string name="device_manager_verification_status_detail_session_encryption_not_supported">Šī sesija nenodrošina šifrēšanu, tādēļ to nevar apliecināt.</string>
|
||||
<string name="device_manager_other_sessions_recommendation_title_inactive">Neizmantotas</string>
|
||||
<string name="device_manager_other_sessions_description_verified">Apliecināta · Pēdējā darbība %1$s</string>
|
||||
<plurals name="device_manager_other_sessions_recommendation_description_inactive">
|
||||
<item quantity="zero">Jāapsver atteikšanās no vecajām sesijām (%1$d dienu vai vairāk), kas vairs netiek izmantotas.</item>
|
||||
<item quantity="one">Jāapsver atteikšanās no vecajām sesijām (%1$d diena vai vairāk), kas vairs netiek izmantotas.</item>
|
||||
<item quantity="other">Jāapsver atteikšanās no vecajām sesijām (%1$d dienas vai vairāk), kas vairs netiek izmantotas.</item>
|
||||
</plurals>
|
||||
<string name="device_manager_other_sessions_description_unverified_current_session">Neapliecināta · Pašreizējā sesija</string>
|
||||
<string name="device_manager_other_sessions_no_unverified_sessions_found">Neapliecinātas sesijas netika atrastas.</string>
|
||||
<string name="device_manager_session_rename_description">Pielāgoti sesiju nosaukumi var palīdzēt vieglāk atpazīt savas ierīces.</string>
|
||||
<string name="device_manager_sessions_sign_in_with_qr_code_description">Tu vari izmanto šo ierīci, lai pieteiktos tālruņa vai tīmekļa ierīcē ar kvadrātkodu. Ir divi veidi, kā to izdarīt:</string>
|
||||
<string name="device_manager_learn_more_sessions_inactive">Neizmantotās sesijas ir sesijas, kas kādu laiku nav izmantotas, bet tās turpina saņemt šifrēšanas atslēgas.
|
||||
\n
|
||||
\nNeizmantotas sesijas noņemšana uzlabo drošību un veiktspēju un ir vieglāk noteikt, vai jauna sesija ir aizdomīga.</string>
|
||||
<string name="pill_message_from_unknown_user">Ziņa</string>
|
||||
<string name="qr_code_login_header_failed_other_device_not_signed_in_description">Otrā ierīcē ir jāpiesakās.</string>
|
||||
<string name="rich_text_editor_link">Iestatīt saiti</string>
|
||||
<string name="labs_enable_voice_broadcast_summary">Padara iespējamu ierakstīt un nosūtīt balss apraidi istabas laika joslā.</string>
|
||||
<string name="home_empty_no_unreads_message">Šeit tiks parādītas nelasītās ziņas, kad tādas būs.</string>
|
||||
<string name="qr_code_login_confirm_security_code">Apstiprināt</string>
|
||||
<string name="pill_message_in_room">Ziņa %s</string>
|
||||
<string name="home_empty_no_unreads_title">Nav nekā, par ko ziņot.</string>
|
||||
<string name="qr_code_login_new_device_instruction_2">Jādodas uz Iestatījumi -> Drošība un privātums</string>
|
||||
<string name="qr_code_login_signing_in_a_mobile_device">Piesakies mobilajā ierīcē\?</string>
|
||||
<string name="rich_text_editor_format_italic">Pielietot slīprakstu</string>
|
||||
<string name="message_reply_to_sender_sent_video">nosūtīja video.</string>
|
||||
<string name="qr_code_login_header_failed_device_is_not_supported_description">Sasaistīšana ar šo ierīci nav nodrošināta.</string>
|
||||
<string name="qr_code_login_link_a_device_show_qr_code_instruction_2">Jāatlasa \'Nolasīt kvadrātkodu\'</string>
|
||||
<string name="message_reply_to_sender_created_poll">izveidoja aptauju.</string>
|
||||
<string name="qr_code_login_header_connected_title">Izveidots drošs savienojums</string>
|
||||
<string name="qr_code_login_header_failed_title">Neveiksmīgs savienojums</string>
|
||||
<string name="qr_code_login_connecting_to_device">Savienojas ar ierīci</string>
|
||||
<string name="qr_code_login_signing_in">Piesakās</string>
|
||||
<string name="rich_text_editor_numbered_list">Pārslēgt numurētu sarakstu</string>
|
||||
<string name="rich_text_editor_inline_code">Pielietot iekļautu kodu</string>
|
||||
<string name="rich_text_editor_code_block">Pārslēgt koda bloku</string>
|
||||
<string name="message_reply_to_sender_sent_audio_file">nosūtīja skaņas datni.</string>
|
||||
<string name="settings_access_token_summary">Piekļuves pilnvara sniedz pilnu piekļuvi kontam. To nevajag kopīgot ne ar vienu.</string>
|
||||
<string name="onboarding_new_app_layout_welcome_title">Laipni lūdzam jaunajā skatā!</string>
|
||||
<string name="qr_code_login_new_device_instruction_3">Jāatlasa \'Parādīt kvadrātkodu\'</string>
|
||||
<string name="qr_code_login_link_a_device_scan_qr_code_instruction_1">Jāsāk pieteikšanās skatā</string>
|
||||
<string name="qr_code_login_show_qr_code_button">Rādīt kvadrātkodu šajā ierīcē</string>
|
||||
<string name="qr_code_login_status_no_match">Nav atbilstības\?</string>
|
||||
<string name="qr_code_login_try_again">Jāmēģina vēlreiz</string>
|
||||
<string name="rich_text_editor_format_underline">Pielietot pasvītrojumu</string>
|
||||
<string name="labs_enable_session_manager_title">Iespējot jauno sesiju pārvaldnieku</string>
|
||||
<string name="home_empty_no_rooms_title">Laipni lūdzam ${app_name},
|
||||
\n%s!</string>
|
||||
<string name="rich_text_editor_format_bold">Pielietot treknrakstu</string>
|
||||
<string name="message_reply_to_sender_sent_image">nosūtīja attēlu.</string>
|
||||
<string name="rich_text_editor_bullet_list">Pārslēgt vienkāršu sarakstu</string>
|
||||
<string name="set_link_text">Teksts</string>
|
||||
<string name="labs_enable_client_info_recording_title">Iespējot klienta informācijas ierakstīšanu</string>
|
||||
<string name="onboarding_new_app_layout_spaces_title">Piekļūt vietām</string>
|
||||
<string name="qr_code_login_header_failed_other_description">Pieprasījums neizdevās.</string>
|
||||
<string name="rich_text_editor_full_screen_toggle">Pārslēgt pilnekrānu</string>
|
||||
<string name="home_empty_space_no_rooms_title">%s
|
||||
\nizskatās mazliet tukša.</string>
|
||||
<string name="qr_code_login_header_failed_timeout_description">Sasaistīšana netika pabeigta nepieciešamajā laikā.</string>
|
||||
<string name="qr_code_login_new_device_instruction_1">Jāatver lietotne otrā ierīcē</string>
|
||||
<string name="qr_code_login_link_a_device_show_qr_code_instruction_1">Jāsāk pieteikšanās skatā</string>
|
||||
<string name="set_link_link">Saite</string>
|
||||
<string name="set_link_edit">Labot saiti</string>
|
||||
<string name="message_reply_to_sender_sent_voice_message">nosūtīja balss ziņu.</string>
|
||||
<string name="message_reply_to_sender_ended_poll">noslēdza aptauju.</string>
|
||||
<string name="message_reply_to_poll_preview">Aptauja</string>
|
||||
<string name="pill_message_in_unknown_room">Ziņa istabā</string>
|
||||
<string name="message_reply_to_ended_poll_preview">Noslēgtās aptaujas</string>
|
||||
<string name="labs_enable_session_manager_summary">Iegūsti labāku pārredzamību un pārraudzību pār visām savām sesijām!</string>
|
||||
<string name="labs_enable_voice_broadcast_title">Iespējot balss apraidi</string>
|
||||
<string name="qr_code_login_header_failed_other_device_already_signed_in_description">Otrā ierīcē jau ir pieteikšanās.</string>
|
||||
<string name="rich_text_editor_indent">Ievietot atkāpi</string>
|
||||
<string name="rich_text_editor_unindent">Noņemt atkāpi</string>
|
||||
<string name="rich_text_editor_quote">Pārslēgt citātu</string>
|
||||
<string name="set_link_create">Izveidot saiti</string>
|
||||
<string name="settings_access_token">Piekļuves pilnvara</string>
|
||||
<string name="qr_code_login_header_failed_invalid_qr_code_description">Šis kvadrātkods ir nederīgs.</string>
|
||||
<string name="qr_code_login_header_failed_user_cancelled_description">Pieteikšanās tika atcelta otrā ierīcē.</string>
|
||||
<string name="qr_code_login_link_a_device_scan_qr_code_instruction_2">Jāatlasa \'Pieteikties ar kvadrātkodu\'</string>
|
||||
<string name="rich_text_editor_format_strikethrough">Pielietot pārsvītrojumu</string>
|
||||
<string name="message_reply_to_prefix">Atbildē uz</string>
|
||||
<string name="message_reply_to_sender_sent_file">nosūtīja datni.</string>
|
||||
<string name="message_reply_to_sender_sent_sticker">nosūtīja uzlīmi.</string>
|
||||
<string name="pill_message_from_user">Ziņa no %s</string>
|
||||
<string name="pill_message_unknown_room_or_space">Istaba/vieta</string>
|
||||
<string name="labs_enable_client_info_recording_summary">Ierakstīt klienta nosaukumu, versiju un URL, lai sesiju pārvaldniekā vieglāk atpazītu sesijas.</string>
|
||||
<string name="onboarding_new_app_layout_spaces_message">Piekļūsti savām vietām (apakšējā labajā stūrī) ātrāk un vienkāršāk kā jebkad iepriekš!</string>
|
||||
<string name="qr_code_login_header_connected_description">Jāpārbauda ierīce, kurā esi pieteicies, tajā vajadzētu būt attēlotam zemāk redzamajam kodam. Jāapstiprina, ka zemāk esošais kods saskan ar to, kas ir ierīcē:</string>
|
||||
<string name="qr_code_login_header_failed_denied_description">Pieprasījums tika atteikts otrā ierīcē.</string>
|
||||
<string name="qr_code_login_scan_qr_code_button">Nolasīt kvadrātkodu</string>
|
||||
<string name="qr_code_login_confirm_security_code_description">Lūgums nodrošināt, ka šī koda izcelsme ir zināma. Ar ierīču sasaistīšanu kādam tiks nodrošināta pilna piekļuve kontam.</string>
|
||||
</resources>
|
|
@ -2909,4 +2909,53 @@
|
|||
<string name="sign_out_anyway">Terminar sessão ainda assim</string>
|
||||
<string name="verification_request_waiting_for_recovery">Verificação a partir de Chave ou Frase Segura…</string>
|
||||
<string name="verification_profile_other_device_untrust_info">Até que este utilizador confie nesta sessão, as mensagens enviadas para e a partir dela são marcadas com avisos.</string>
|
||||
<string name="pill_message_in_unknown_room">Mensagem na sala</string>
|
||||
<string name="rich_text_editor_numbered_list">Alternar lista numerada</string>
|
||||
<string name="room_polls_active">Votações ativas</string>
|
||||
<string name="room_poll_details_go_to_timeline">Ver votação na linha do tempo</string>
|
||||
<string name="unable_to_decrypt_some_events_in_poll">Devido a erros de descriptografia, alguns votos podem não serem contados</string>
|
||||
<string name="confirm_your_identity_after_update">A mensageria segura fora aprimorada com a atualização mais recente. Verifique novamente seu dispositivo.</string>
|
||||
<string name="ended_poll_indicator">Votação encerrada.</string>
|
||||
<string name="room_polls_ended">Votações anteriores</string>
|
||||
<string name="rich_text_editor_bullet_list">Alternar lista de marcadores</string>
|
||||
<string name="pill_message_unknown_room_or_space">Sala/Espaço</string>
|
||||
<string name="direct_room_encryption_enabled_waiting_users">Aguardando os usuários entrarem no ${app_name}</string>
|
||||
<string name="direct_room_encryption_enabled_waiting_users_tile_description">Assim que os usuários convidados entrarem no ${app_name}, vocês poderão conversar e a sala terá criptografia de ponta a ponta</string>
|
||||
<string name="room_polls_active_no_item">Não há votação ativa nesta sala</string>
|
||||
<string name="room_polls_ended_no_item">Não há votações anteriores nesta sala</string>
|
||||
<string name="message_reply_to_ended_poll_preview">Votação encerrada</string>
|
||||
<string name="secure_backup_reset_danger_warning">Prossiga apenas se você tem certeza que você perdeu todos os outros dispositivos e sua chave de segurança.</string>
|
||||
<string name="encrypted_by_deleted">Criptografado por um dispositivo apagado</string>
|
||||
<string name="rich_text_editor_unindent">Remover recuo</string>
|
||||
<string name="rich_text_editor_quote">Alternar aspas</string>
|
||||
<string name="rich_text_editor_inline_code">Aplicar formatação de código em linha</string>
|
||||
<string name="_resume">Prosseguir</string>
|
||||
<string name="verification_not_found">O pedido de verificação não foi encontrado. Ele pode ter sido cancelado ou tratado por outra sessão.</string>
|
||||
<string name="rich_text_editor_indent">Recuar</string>
|
||||
<string name="rich_text_editor_code_block">Alternar bloco de código</string>
|
||||
<string name="message_reply_to_sender_ended_poll">terminou uma votação.</string>
|
||||
<string name="message_reply_to_poll_preview">Votação</string>
|
||||
<string name="settings_access_token">Token de acesso</string>
|
||||
<string name="error_voice_message_broadcast_in_progress_message">Você não pode iniciar uma mensagem de voz porque está gravando uma transmissão ao vivo. Termine sua transmissão ao vivo para iniciar uma mensagem de voz</string>
|
||||
<plurals name="room_polls_ended_no_item_for_loaded_period">
|
||||
<item quantity="one">Não há votação anterior para antes de ontem.
|
||||
\nCarregue mais votações para ver as votações dos dias anteriores.</item>
|
||||
<item quantity="other">Não há votação anterior para os últimos %1$d dias.
|
||||
\nCarregue mais votações para ver as votações dos dias anteriores.</item>
|
||||
</plurals>
|
||||
<plurals name="room_polls_active_no_item_for_loaded_period">
|
||||
<item quantity="one">Não há votação ativa para antes de ontem.
|
||||
\nCarregue mais votações para ver as votações dos dias anteriores.</item>
|
||||
<item quantity="other">Não há votação ativa para os últimos %1$d dias.
|
||||
\nCarregue mais votações para ver as votações dos dias anteriores.</item>
|
||||
</plurals>
|
||||
<string name="room_polls_load_more">Carregar mais votações</string>
|
||||
<string name="room_polls_loading_error">Erro ao buscar votações.</string>
|
||||
<string name="settings_access_token_summary">Seu token de acesso fornece acesso completo à sua conta. Não o compartilhe com outras pessoais.</string>
|
||||
<string name="pill_message_from_user">Mensagem de %s</string>
|
||||
<string name="secure_backup_reset_all_no_other_devices_long">A redefinição de suas chaves de verificação não pode ser desfeita. Após a redefinição, você não terá acesso às mensagens criptografadas antigas e todos os amigos que fizeram a verificação anteriormente verão avisos de segurança até que você faça a verificação novamente com eles.</string>
|
||||
<string name="error_voice_message_broadcast_in_progress">Não foi possível iniciar a mensagem de voz</string>
|
||||
<string name="room_polls_wait_for_display">Exibindo votações</string>
|
||||
<string name="pill_message_from_unknown_user">Mensagem</string>
|
||||
<string name="pill_message_in_room">Mensagem em %s</string>
|
||||
</resources>
|
|
@ -3060,4 +3060,5 @@
|
|||
<string name="rich_text_editor_code_block">Блок кода</string>
|
||||
<string name="rich_text_editor_indent">Подпункт</string>
|
||||
<string name="rich_text_editor_unindent">Пункт</string>
|
||||
<string name="settings_acceptable_use_policy">Политика пользования</string>
|
||||
</resources>
|
|
@ -2945,4 +2945,13 @@
|
|||
<string name="crosssigning_verify_after_update">Aplikacioni u përditësua</string>
|
||||
<string name="sign_out_anyway">Dil, sido qoftë</string>
|
||||
<string name="sign_out_failed_dialog_message">S’kapet dot shërbyesi Home. Nëse keni dalë, sido qoftë, kjo pajisje s’do të fshihet te lista e pajisjeve tuaja, mund të doni ta hiqni duke përdorur klient tjetër.</string>
|
||||
<string name="create_room_unknown_users_dialog_content">S’arrihet të gjenden profile për ID-rat Matrix të radhitura më poshtë. Do të donit të fillohej një fjalosje, sido që të jetë\?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="settings_enable_direct_share_title">Aktivizo ndarje të drejtpërdrejtë me të tjerët</string>
|
||||
<string name="create_room_unknown_users_dialog_submit">Fillo fjalosje, sido që të jetë</string>
|
||||
<string name="invite_unknown_users_dialog_content">S’arrihet të gjenden profile për ID-rat Matrix të radhitura më poshtë. Do të donit të ftohen, sido qoftë\?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="invite_unknown_users_dialog_submit">Ftoji, sido qoftë</string>
|
||||
</resources>
|
|
@ -2958,4 +2958,12 @@
|
|||
<string name="crosssigning_verify_after_update">App uppdaterad</string>
|
||||
<string name="sign_out_failed_dialog_message">Kan inte nå hemservern. Om du ändå loggar ut kommer den här enheten inte att raderas från din enhetslista, du kanske vill ta bort den med en annan klient.</string>
|
||||
<string name="sign_out_anyway">Logga ut ändå</string>
|
||||
<string name="create_room_unknown_users_dialog_content">Kunde in hitta profiler för Matrix-ID:n nedan. Vill du starta en chatt ändå\?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="create_room_unknown_users_dialog_submit">Starta chatt ändå</string>
|
||||
<string name="invite_unknown_users_dialog_content">Kunde inte hitta profiler för Matrix-ID:n nedan. Vill du bjuda in dem ändå\?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="invite_unknown_users_dialog_submit">Bjud in ändå</string>
|
||||
</resources>
|
|
@ -1734,4 +1734,32 @@
|
|||
<string name="action_view_threads">Konuları Görüntüle</string>
|
||||
<string name="initial_sync_request_title">Başlangıç eşitleme isteği</string>
|
||||
<string name="all_chats">Tüm Sohbetler</string>
|
||||
</resources>
|
||||
<string name="start_chat">Sohbet Başlat</string>
|
||||
<string name="notice_voice_broadcast_ended">%1$s bir ses yayınını sonlandırdı.</string>
|
||||
<string name="notice_voice_broadcast_ended_by_you">Bir sesli yayını sonlandırdınız.</string>
|
||||
<string name="create_room">Oda yarat</string>
|
||||
<string name="explore_rooms">Odaları keşfedin</string>
|
||||
<string name="initial_sync_request_content">${app_name}, aşağıdaki nedenden dolayı güncel olması için önbelleği temizlemelidir:
|
||||
\n %s
|
||||
\n
|
||||
\n Bu eylemin uygulamayı yeniden başlatacağını ve biraz zaman alabileceğini unutmayın.</string>
|
||||
<string name="initial_sync_request_reason_unignored_users">- Bazı kullanıcılar göz ardı edildi</string>
|
||||
<string name="a11y_expand_space_children">%s çocuğu genişlet</string>
|
||||
<string name="time_unit_minute_short">dk.</string>
|
||||
<string name="action_disable">Devre dışı bırak</string>
|
||||
<string name="time_unit_hour_short">sa.</string>
|
||||
<string name="change_space">Alanı Değiştir</string>
|
||||
<string name="sign_out_anyway">Yine de oturumu kapat</string>
|
||||
<plurals name="x_selected">
|
||||
<item quantity="one">%1$d seçildi</item>
|
||||
<item quantity="other">%1$d seçildi</item>
|
||||
</plurals>
|
||||
<string name="notice_display_name_changed_to">%1$s görünen adını %2$s olarak değiştirdi</string>
|
||||
<string name="sign_out_failed_dialog_message">Ana sunucuya ulaşılamıyor. Yine de çıkış yaparsanız, bu cihaz, cihaz listenizden silinmez, başka bir istemci kullanarak kaldırmak isteyebilirsiniz.</string>
|
||||
<plurals name="notice_room_server_acl_changes">
|
||||
<item quantity="one">%d sunucu ACL\'si değişti</item>
|
||||
<item quantity="other">%d sunucu ACL değişikliği</item>
|
||||
</plurals>
|
||||
<string name="time_unit_second_short">s.</string>
|
||||
<string name="a11y_collapse_space_children">%s çocuğu daralt</string>
|
||||
</resources>
|
|
@ -57,7 +57,7 @@
|
|||
<string name="notice_room_name_changed_by_you">Ви змінили назву кімнати на: %1$s</string>
|
||||
<string name="notice_room_avatar_changed_by_you">Ви змінили аватар кімнати</string>
|
||||
<string name="notice_room_topic_changed_by_you">Ви змінили тему на: %1$s</string>
|
||||
<string name="notice_display_name_changed_from_by_you">Ви змінили показуване ім\'я з %1$s на %2$s</string>
|
||||
<string name="notice_display_name_changed_from_by_you">Ви змінили псевдонім з %1$s на %2$s</string>
|
||||
<string name="notice_avatar_url_changed_by_you">Ви змінили свій аватар</string>
|
||||
<plurals name="room_displayname_four_and_more_members">
|
||||
<item quantity="one">%1$s, %2$s, %3$s та %4$d інший</item>
|
||||
|
@ -85,7 +85,7 @@
|
|||
<string name="notice_placed_voice_call_by_you">Ви починаєте голосовий виклик.</string>
|
||||
<string name="notice_placed_video_call_by_you">Ви починаєте відеовиклик.</string>
|
||||
<string name="notice_room_avatar_changed">%1$s змінює аватар кімнати</string>
|
||||
<string name="notice_display_name_removed_by_you">Ви прибрали показуване ім\'я (%1$s)</string>
|
||||
<string name="notice_display_name_removed_by_you">Ви вилучили псевдонім (%1$s)</string>
|
||||
<string name="notice_room_remove_by_you">Ви вилучили %1$s</string>
|
||||
<string name="notice_direct_room_third_party_invite">%1$s запрошує %2$s</string>
|
||||
<string name="notice_room_reject_by_you">Ви відхилили запрошення</string>
|
||||
|
@ -137,7 +137,7 @@
|
|||
<string name="notice_answered_call_by_you">Ви відповіли на виклик.</string>
|
||||
<string name="notice_call_candidates_by_you">Ви надіслали дані для налаштування виклику.</string>
|
||||
<string name="notice_call_candidates">%s надсилає дані для налаштування виклику.</string>
|
||||
<string name="notice_display_name_set_by_you">Ви встановили собі показуване ім\'я %1$s</string>
|
||||
<string name="notice_display_name_set_by_you">Ви налаштували псевдонімом %1$s</string>
|
||||
<string name="notice_room_withdraw_by_you">Ви відкликали запрошення для %1$s</string>
|
||||
<string name="notice_room_ban_by_you">Ви заблокували %1$s</string>
|
||||
<string name="notice_room_unban_by_you">Ви заблокували %1$s</string>
|
||||
|
@ -268,7 +268,7 @@
|
|||
<string name="search_members_hint">Фільтр переліку користувачів</string>
|
||||
<string name="search_no_results">Тут порожньо</string>
|
||||
<string name="settings_profile_picture">Аватар</string>
|
||||
<string name="settings_display_name">Показуване ім\'я</string>
|
||||
<string name="settings_display_name">Псевдонім</string>
|
||||
<string name="settings_add_email_address">Додати адресу е-пошти</string>
|
||||
<string name="settings_add_phone_number">Додати номер телефону</string>
|
||||
<string name="settings_app_info_link_summary">Екран системної інформації застосунку.</string>
|
||||
|
@ -276,7 +276,7 @@
|
|||
<string name="settings_notification_ringtone">Тон сповіщення</string>
|
||||
<string name="settings_enable_all_notif">Увімкнути сповіщення для цього облікового запису</string>
|
||||
<string name="settings_enable_this_device">Увімкнути сповіщення для цього пристрою</string>
|
||||
<string name="settings_containing_my_display_name">Повідомлення, що містять моє показуване ім\'я</string>
|
||||
<string name="settings_containing_my_display_name">Повідомлення з моїм псевдонімом</string>
|
||||
<string name="settings_containing_my_user_name">Повідомлення, що містять моє ім\'я користувача</string>
|
||||
<string name="settings_messages_in_one_to_one">В особистих чатах</string>
|
||||
<string name="settings_messages_in_group_chat">У групових чатах</string>
|
||||
|
@ -495,7 +495,7 @@
|
|||
<string name="command_description_part_room">Вийти з кімнати</string>
|
||||
<string name="command_description_topic">Встановити тему кімнати</string>
|
||||
<string name="command_description_remove_user">Вилучити користувача із вказаним ID</string>
|
||||
<string name="command_description_nick">Змінити Ваш псевдонім</string>
|
||||
<string name="command_description_nick">Змінити псевдонім</string>
|
||||
<string name="command_description_markdown">Увімкнути/Вимкнути розмітку Markdown</string>
|
||||
<string name="command_description_clear_scalar_token">Для виправлення керування застосунками Matrix</string>
|
||||
<string name="create">Створити</string>
|
||||
|
@ -816,7 +816,7 @@
|
|||
<string name="room_widget_permission_theme">Ваша тема</string>
|
||||
<string name="room_widget_permission_user_id">Ваш ідентифікатор користувача</string>
|
||||
<string name="room_widget_permission_avatar_url">URL-адреса аватара</string>
|
||||
<string name="room_widget_permission_display_name">Ваше показуване ім\'я</string>
|
||||
<string name="room_widget_permission_display_name">Ваш псевдонім</string>
|
||||
<string name="room_widget_revoke_access">Скасувати доступ для мене</string>
|
||||
<string name="room_widget_open_in_browser">Відкрити у браузері</string>
|
||||
<string name="room_widget_reload">Перезавантажити віджет</string>
|
||||
|
@ -1564,7 +1564,7 @@
|
|||
<string name="settings_encrypted_group_messages">Зашифровані групові повідомлення</string>
|
||||
<string name="settings_group_messages">Групові повідомлення</string>
|
||||
<string name="settings_messages_containing_username">Моє користувацьке ім\'я</string>
|
||||
<string name="settings_messages_containing_display_name">Моє показуване ім\'я</string>
|
||||
<string name="settings_messages_containing_display_name">Мій псевдонім</string>
|
||||
<string name="settings_messages_at_room">Повідомлення, які містять @room</string>
|
||||
<string name="settings_when_rooms_are_upgraded">Коли кімнати оновлено</string>
|
||||
<string name="settings_messages_in_e2e_group_chat">Зашифровані повідомлення в групових бесідах</string>
|
||||
|
@ -2060,7 +2060,7 @@
|
|||
<string name="command_description_whois">Показує відомості про користувача</string>
|
||||
<string name="command_description_avatar_for_room">Змінює ваш аватар лише у поточній кімнаті</string>
|
||||
<string name="command_description_room_avatar">Змінює аватар поточної кімнати</string>
|
||||
<string name="command_description_nick_for_room">Змінює ваше показуване ім\'я лише у поточній кімнаті</string>
|
||||
<string name="command_description_nick_for_room">Змінює ваш псевдонім лише у поточній кімнаті</string>
|
||||
<string name="command_description_room_name">Установлює назву кімнати</string>
|
||||
<string name="settings_discovery_no_policy_provided">Сервер ідентифікації не надав жодних правил</string>
|
||||
<string name="spaces_feeling_experimental_subspace">Бажаєте поекспериментувати\?
|
||||
|
@ -2408,7 +2408,7 @@
|
|||
<string name="tooltip_attachment_photo">Відкрити камеру</string>
|
||||
<string name="labs_auto_report_uisi_desc">Ваша система автоматично надсилатиме журнали, коли виникне помилка неможливості розшифрування</string>
|
||||
<string name="labs_auto_report_uisi">Автозвіт про помилки шифрування.</string>
|
||||
<string name="room_member_override_nick_color">Замінити колір показуваного імені</string>
|
||||
<string name="room_member_override_nick_color">Замінити колір псевдоніма</string>
|
||||
<string name="login_splash_already_have_account">Я вже маю обліковий запис</string>
|
||||
<string name="ftue_auth_carousel_encrypted_title">Захищене спілкування.</string>
|
||||
<string name="ftue_auth_carousel_control_title">Ви контролюєте все.</string>
|
||||
|
@ -2517,8 +2517,8 @@
|
|||
<string name="ftue_profile_picture_subtitle">Час вказати ім’я</string>
|
||||
<string name="ftue_profile_picture_title">Додати зображення профілю</string>
|
||||
<string name="ftue_display_name_entry_footer">Ви можете змінити його пізніше</string>
|
||||
<string name="ftue_display_name_entry_title">Показуване ім\'я</string>
|
||||
<string name="ftue_display_name_title">Виберіть показуване ім\'я</string>
|
||||
<string name="ftue_display_name_entry_title">Псевдонім</string>
|
||||
<string name="ftue_display_name_title">Оберіть псевдонім</string>
|
||||
<string name="ftue_account_created_subtitle">Ваш обліковий запис %s створений</string>
|
||||
<string name="ftue_account_created_congratulations_title">Вітаємо!</string>
|
||||
<string name="ftue_account_created_take_me_home">На головну</string>
|
||||
|
@ -2562,7 +2562,7 @@
|
|||
\n
|
||||
\nЗауважте, що ця дія перезапустить застосунок, і це може тривати деякий час.</string>
|
||||
<string name="initial_sync_request_title">Початковий запит синхронізації</string>
|
||||
<string name="settings_show_latest_profile_description">Показувати найновіші дані профілю (аватар і показуване ім\'я) для всіх повідомлень.</string>
|
||||
<string name="settings_show_latest_profile_description">Показувати найновіші дані профілю (аватар і псевдонім) для всіх повідомлень.</string>
|
||||
<string name="settings_show_latest_profile">Показувати найновіші дані користувача</string>
|
||||
<string name="a11y_presence_busy">Зайнятий</string>
|
||||
<string name="keys_backup_settings_signature_from_this_user">Резервна копія має дійсний підпис від цього користувача.</string>
|
||||
|
|
|
@ -2554,4 +2554,6 @@
|
|||
<string name="device_manager_session_title">Phiên</string>
|
||||
<string name="device_manager_device_title">Thiết bị</string>
|
||||
<string name="device_manager_session_last_activity">Hoạt động cuối %1$s</string>
|
||||
<string name="_resume">Tiếp tục</string>
|
||||
<string name="a11y_presence_busy">Bận</string>
|
||||
</resources>
|
|
@ -654,7 +654,7 @@
|
|||
<string name="settings_silent_notifications_preferences">设置静音通知</string>
|
||||
<string name="settings_system_preferences_summary">选择LED颜色、震动、铃声……</string>
|
||||
<string name="settings_cryptography_manage_keys">加密密钥管理</string>
|
||||
<string name="encryption_message_recovery">恢复已加密消息</string>
|
||||
<string name="encryption_message_recovery">已加密消息恢复</string>
|
||||
<string name="encryption_settings_manage_message_recovery_summary">管理密钥备份</string>
|
||||
<string name="notification_silent">静音</string>
|
||||
<string name="error_empty_field_enter_user_name">请输入一个用户名。</string>
|
||||
|
|
|
@ -748,7 +748,7 @@
|
|||
<string name="backup">備份</string>
|
||||
<string name="sign_out_bottom_sheet_will_lose_secure_messages">除非您在登出前備份好金鑰,否則將無法再存取所有加密訊息。</string>
|
||||
<string name="action_sign_out_confirmation_simple">您確定要登出嗎?</string>
|
||||
<string name="encryption_message_recovery">還原加密訊息</string>
|
||||
<string name="encryption_message_recovery">加密訊息還原</string>
|
||||
<string name="error_empty_field_enter_user_name">請輸入使用者名稱。</string>
|
||||
<string name="keys_backup_setup">開始使用金鑰備份</string>
|
||||
<string name="keys_backup_setup_step1_advanced">(進階)</string>
|
||||
|
|
|
@ -63,7 +63,7 @@ android {
|
|||
// that the app's state is completely cleared between tests.
|
||||
testInstrumentationRunnerArguments clearPackageData: 'true'
|
||||
|
||||
buildConfigField "String", "SDK_VERSION", "\"1.6.5\""
|
||||
buildConfigField "String", "SDK_VERSION", "\"1.6.6\""
|
||||
|
||||
buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
|
||||
buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\""
|
||||
|
@ -216,7 +216,7 @@ dependencies {
|
|||
|
||||
implementation libs.google.phonenumber
|
||||
|
||||
rustCryptoImplementation("org.matrix.rustcomponents:crypto-android:0.3.10")
|
||||
rustCryptoImplementation("org.matrix.rustcomponents:crypto-android:0.3.15")
|
||||
// rustCryptoApi project(":library:rustCrypto")
|
||||
|
||||
testImplementation libs.tests.junit
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.junit.Test
|
|||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.JUnit4
|
||||
import org.junit.runners.MethodSorters
|
||||
import org.matrix.android.sdk.BuildConfig
|
||||
import org.matrix.android.sdk.InstrumentedTest
|
||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
|
@ -196,6 +197,7 @@ class E2eeShareKeysHistoryTest : InstrumentedTest {
|
|||
|
||||
@Test
|
||||
fun testNeedsRotationFromSharedToWorldReadable() {
|
||||
Assume.assumeTrue("Test is flacky on legacy crypto", BuildConfig.FLAVOR == "rustCrypto")
|
||||
testRotationDueToVisibilityChange(RoomHistoryVisibility.SHARED, RoomHistoryVisibilityContent("world_readable"))
|
||||
}
|
||||
|
||||
|
|
|
@ -136,6 +136,13 @@ internal class SecretShareManager @Inject constructor(
|
|||
.w("handleSecretRequest() : malformed request norequestingDeviceId ")
|
||||
}
|
||||
|
||||
if (deviceId == credentials.deviceId) {
|
||||
return Unit.also {
|
||||
Timber.tag(loggerTag.value)
|
||||
.v("handleSecretRequest() : Ignore request from self device")
|
||||
}
|
||||
}
|
||||
|
||||
val device = cryptoStore.getUserDevice(credentials.userId, deviceId)
|
||||
?: return Unit.also {
|
||||
Timber.tag(loggerTag.value)
|
||||
|
@ -254,6 +261,37 @@ internal class SecretShareManager @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun requestMissingSecrets() {
|
||||
// quick implementation for backward compatibility with rust, will request all secrets to all own devices
|
||||
val secretNames = listOf(MASTER_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, KEYBACKUP_SECRET_SSSS_NAME)
|
||||
|
||||
secretNames.forEach { secretName ->
|
||||
val toDeviceContent = SecretShareRequest(
|
||||
requestingDeviceId = credentials.deviceId,
|
||||
secretName = secretName,
|
||||
requestId = createUniqueTxnId()
|
||||
)
|
||||
|
||||
val contentMap = MXUsersDevicesMap<Any>()
|
||||
contentMap.setObject(credentials.userId, "*", toDeviceContent)
|
||||
|
||||
val params = SendToDeviceTask.Params(
|
||||
eventType = EventType.REQUEST_SECRET,
|
||||
contentMap = contentMap
|
||||
)
|
||||
try {
|
||||
withContext(coroutineDispatchers.io) {
|
||||
sendToDeviceTask.execute(params)
|
||||
}
|
||||
Timber.tag(loggerTag.value)
|
||||
.d("Secret request sent for $secretName")
|
||||
} catch (failure: Throwable) {
|
||||
Timber.tag(loggerTag.value)
|
||||
.w("Failed to request secret $secretName")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun onSecretSendReceived(toDevice: Event, handleGossip: ((name: String, value: String) -> Boolean)) {
|
||||
Timber.tag(loggerTag.value)
|
||||
.i("onSecretSend() from ${toDevice.senderId} : onSecretSendReceived ${toDevice.content?.get("sender_key")}")
|
||||
|
|
|
@ -34,10 +34,6 @@ import org.matrix.android.sdk.api.rendezvous.model.SecureRendezvousChannelAlgori
|
|||
import org.matrix.android.sdk.api.rendezvous.transports.SimpleHttpRendezvousTransport
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.DeviceTrustLevel
|
||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
|
||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
|
||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
|
||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
|
||||
import org.matrix.android.sdk.api.util.MatrixJsonParser
|
||||
import timber.log.Timber
|
||||
|
||||
|
@ -222,15 +218,10 @@ class Rendezvous(
|
|||
Timber.tag(TAG).i("No master key given by verifying device")
|
||||
}
|
||||
|
||||
// request secrets from the verifying device
|
||||
Timber.tag(TAG).i("Requesting secrets from $verifyingDeviceId")
|
||||
// request secrets from other sessions.
|
||||
Timber.tag(TAG).i("Requesting secrets from other sessions")
|
||||
|
||||
session.sharedSecretStorageService().let {
|
||||
it.requestSecret(MASTER_KEY_SSSS_NAME, verifyingDeviceId)
|
||||
it.requestSecret(SELF_SIGNING_KEY_SSSS_NAME, verifyingDeviceId)
|
||||
it.requestSecret(USER_SIGNING_KEY_SSSS_NAME, verifyingDeviceId)
|
||||
it.requestSecret(KEYBACKUP_SECRET_SSSS_NAME, verifyingDeviceId)
|
||||
}
|
||||
session.sharedSecretStorageService().requestMissingSecrets()
|
||||
} else {
|
||||
Timber.tag(TAG).i("Not doing verification")
|
||||
}
|
||||
|
|
|
@ -85,6 +85,11 @@ data class HomeServerCapabilities(
|
|||
* External account management url for use with MSC3824 delegated OIDC, provided in Wellknown.
|
||||
*/
|
||||
val externalAccountManagementUrl: String? = null,
|
||||
|
||||
/**
|
||||
* Authentication issuer for use with MSC3824 delegated OIDC, provided in Wellknown.
|
||||
*/
|
||||
val authenticationIssuer: String? = null,
|
||||
) {
|
||||
|
||||
enum class RoomCapabilitySupport {
|
||||
|
@ -141,6 +146,8 @@ data class HomeServerCapabilities(
|
|||
return cap?.preferred ?: cap?.support?.lastOrNull()
|
||||
}
|
||||
|
||||
val delegatedOidcAuthEnabled: Boolean = authenticationIssuer != null
|
||||
|
||||
companion object {
|
||||
const val MAX_UPLOAD_FILE_SIZE_UNKNOWN = -1L
|
||||
const val ROOM_CAP_KNOCK = "knock"
|
||||
|
|
|
@ -135,5 +135,11 @@ interface SharedSecretStorageService {
|
|||
|
||||
fun checkShouldBeAbleToAccessSecrets(secretNames: List<String>, keyId: String?): IntegrityResult
|
||||
|
||||
@Deprecated("Requesting custom secrets not yet support by rust stack, prefer requestMissingSecrets")
|
||||
suspend fun requestSecret(name: String, myOtherDeviceId: String)
|
||||
|
||||
/**
|
||||
* Request the missing local secrets to other sessions.
|
||||
*/
|
||||
suspend fun requestMissingSecrets()
|
||||
}
|
||||
|
|
|
@ -298,7 +298,7 @@ internal class DefaultAuthenticationService @Inject constructor(
|
|||
}
|
||||
|
||||
// If an m.login.sso flow is present that is flagged as being for MSC3824 OIDC compatibility then we only return that flow
|
||||
val oidcCompatibilityFlow = loginFlowResponse.flows.orEmpty().firstOrNull { it.type == "m.login.sso" && it.delegatedOidcCompatibilty == true }
|
||||
val oidcCompatibilityFlow = loginFlowResponse.flows.orEmpty().firstOrNull { it.type == "m.login.sso" && it.delegatedOidcCompatibility == true }
|
||||
val flows = if (oidcCompatibilityFlow != null) listOf(oidcCompatibilityFlow) else loginFlowResponse.flows
|
||||
|
||||
val supportsGetLoginTokenFlow = loginFlowResponse.flows.orEmpty().firstOrNull { it.type == "m.login.token" && it.getLoginToken == true } != null
|
||||
|
|
|
@ -51,7 +51,7 @@ internal data class LoginFlow(
|
|||
* See [MSC3824](https://github.com/matrix-org/matrix-spec-proposals/pull/3824)
|
||||
*/
|
||||
@Json(name = "org.matrix.msc3824.delegated_oidc_compatibility")
|
||||
val delegatedOidcCompatibilty: Boolean? = null,
|
||||
val delegatedOidcCompatibility: Boolean? = null,
|
||||
|
||||
/**
|
||||
* Whether a login flow of type m.login.token could accept a token issued using /login/get_token.
|
||||
|
|
|
@ -385,7 +385,12 @@ internal class DefaultSharedSecretStorageService @Inject constructor(
|
|||
return IntegrityResult.Success(keyInfo.content.passphrase != null)
|
||||
}
|
||||
|
||||
@Deprecated("Requesting custom secrets not yet support by rust stack, prefer requestMissingSecrets")
|
||||
override suspend fun requestSecret(name: String, myOtherDeviceId: String) {
|
||||
secretShareManager.requestSecretTo(myOtherDeviceId, name)
|
||||
}
|
||||
|
||||
override suspend fun requestMissingSecrets() {
|
||||
secretShareManager.requestMissingSecrets()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo049
|
|||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo050
|
||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo051
|
||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo052
|
||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo053
|
||||
import org.matrix.android.sdk.internal.util.Normalizer
|
||||
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
|
||||
import javax.inject.Inject
|
||||
|
@ -77,7 +78,7 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
|||
private val normalizer: Normalizer
|
||||
) : MatrixRealmMigration(
|
||||
dbName = "Session",
|
||||
schemaVersion = 52L,
|
||||
schemaVersion = 53L,
|
||||
) {
|
||||
/**
|
||||
* Forces all RealmSessionStoreMigration instances to be equal.
|
||||
|
@ -139,5 +140,6 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
|||
if (oldVersion < 50) MigrateSessionTo050(realm).perform()
|
||||
if (oldVersion < 51) MigrateSessionTo051(realm).perform()
|
||||
if (oldVersion < 52) MigrateSessionTo052(realm).perform()
|
||||
if (oldVersion < 53) MigrateSessionTo053(realm).perform()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@ internal object HomeServerCapabilitiesMapper {
|
|||
canRemotelyTogglePushNotificationsOfDevices = entity.canRemotelyTogglePushNotificationsOfDevices,
|
||||
canRedactRelatedEvents = entity.canRedactEventWithRelations,
|
||||
externalAccountManagementUrl = entity.externalAccountManagementUrl,
|
||||
authenticationIssuer = entity.authenticationIssuer,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) 2023 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.migration
|
||||
|
||||
import io.realm.DynamicRealm
|
||||
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
|
||||
import org.matrix.android.sdk.internal.extensions.forceRefreshOfHomeServerCapabilities
|
||||
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
||||
|
||||
internal class MigrateSessionTo053(realm: DynamicRealm) : RealmMigrator(realm, 53) {
|
||||
override fun doMigrate(realm: DynamicRealm) {
|
||||
realm.schema.get("HomeServerCapabilitiesEntity")
|
||||
?.addField(HomeServerCapabilitiesEntityFields.AUTHENTICATION_ISSUER, String::class.java)
|
||||
?.forceRefreshOfHomeServerCapabilities()
|
||||
}
|
||||
}
|
|
@ -36,6 +36,7 @@ internal open class HomeServerCapabilitiesEntity(
|
|||
var canRemotelyTogglePushNotificationsOfDevices: Boolean = false,
|
||||
var canRedactEventWithRelations: Boolean = false,
|
||||
var externalAccountManagementUrl: String? = null,
|
||||
var authenticationIssuer: String? = null,
|
||||
) : RealmObject() {
|
||||
|
||||
companion object
|
||||
|
|
|
@ -165,6 +165,7 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor(
|
|||
Timber.v("Extracted integration config : $config")
|
||||
realm.insertOrUpdate(config)
|
||||
}
|
||||
homeServerCapabilitiesEntity.authenticationIssuer = getWellknownResult.wellKnown.unstableDelegatedAuthConfig?.issuer
|
||||
homeServerCapabilitiesEntity.externalAccountManagementUrl = getWellknownResult.wellKnown.unstableDelegatedAuthConfig?.accountManagementUrl
|
||||
}
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">كَلب</string>
|
||||
<string name="verification_emoji_dog">كلب</string>
|
||||
<string name="verification_emoji_cat">هِرَّة</string>
|
||||
<string name="verification_emoji_lion">أَسَد</string>
|
||||
<string name="verification_emoji_horse">حِصَان</string>
|
||||
<string name="verification_emoji_unicorn">حِصَانٌ بِقَرن</string>
|
||||
<string name="verification_emoji_unicorn">حصان وحيد القرن</string>
|
||||
<string name="verification_emoji_pig">خِنزِير</string>
|
||||
<string name="verification_emoji_elephant">فِيل</string>
|
||||
<string name="verification_emoji_rabbit">أَرنَب</string>
|
||||
<string name="verification_emoji_panda">باندَا</string>
|
||||
<string name="verification_emoji_rooster">دِيك</string>
|
||||
<string name="verification_emoji_penguin">بِطريق</string>
|
||||
<string name="verification_emoji_penguin">بطريق</string>
|
||||
<string name="verification_emoji_turtle">سُلحفاة</string>
|
||||
<string name="verification_emoji_fish">سَمَكَة</string>
|
||||
<string name="verification_emoji_fish">سَمَكة</string>
|
||||
<string name="verification_emoji_octopus">أُخطُبُوط</string>
|
||||
<string name="verification_emoji_butterfly">فَرَاشَة</string>
|
||||
<string name="verification_emoji_flower">زَهرَة</string>
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<string name="verification_emoji_paperclip">Sponka</string>
|
||||
<string name="verification_emoji_scissors">Nůžky</string>
|
||||
<string name="verification_emoji_lock">Zámek</string>
|
||||
<string name="verification_emoji_key">Klíč</string>
|
||||
<string name="verification_emoji_key">Klíč ke dveřím</string>
|
||||
<string name="verification_emoji_hammer">Kladivo</string>
|
||||
<string name="verification_emoji_telephone">Telefon</string>
|
||||
<string name="verification_emoji_flag">Vlajka</string>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
<string name="verification_emoji_lock">Candado</string>
|
||||
<string name="verification_emoji_key">Llave</string>
|
||||
<string name="verification_emoji_hammer">Martillo</string>
|
||||
<string name="verification_emoji_telephone">Telefono</string>
|
||||
<string name="verification_emoji_telephone">Teléfono</string>
|
||||
<string name="verification_emoji_flag">Bandera</string>
|
||||
<string name="verification_emoji_train">Tren</string>
|
||||
<string name="verification_emoji_bicycle">Bicicleta</string>
|
||||
|
|
68
matrix-sdk-android/src/main/res/values-fa/strings_sas.xml
Normal file
68
matrix-sdk-android/src/main/res/values-fa/strings_sas.xml
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">سگ</string>
|
||||
<string name="verification_emoji_cat">گربه</string>
|
||||
<string name="verification_emoji_lion">شیر</string>
|
||||
<string name="verification_emoji_horse">اسب</string>
|
||||
<string name="verification_emoji_unicorn">تک شاخ</string>
|
||||
<string name="verification_emoji_pig">خوک</string>
|
||||
<string name="verification_emoji_elephant">فیل</string>
|
||||
<string name="verification_emoji_rabbit">خرگوش</string>
|
||||
<string name="verification_emoji_panda">پاندا</string>
|
||||
<string name="verification_emoji_rooster">خروس</string>
|
||||
<string name="verification_emoji_penguin">پنگوئن</string>
|
||||
<string name="verification_emoji_turtle">لاکپشت</string>
|
||||
<string name="verification_emoji_fish">ماهی</string>
|
||||
<string name="verification_emoji_octopus">اختاپوس</string>
|
||||
<string name="verification_emoji_butterfly">پروانه</string>
|
||||
<string name="verification_emoji_flower">گل</string>
|
||||
<string name="verification_emoji_tree">درخت</string>
|
||||
<string name="verification_emoji_cactus">کاکتوس</string>
|
||||
<string name="verification_emoji_mushroom">قارچ</string>
|
||||
<string name="verification_emoji_globe">زمین</string>
|
||||
<string name="verification_emoji_moon">ماه</string>
|
||||
<string name="verification_emoji_cloud">ابر</string>
|
||||
<string name="verification_emoji_fire">آتش</string>
|
||||
<string name="verification_emoji_banana">موز</string>
|
||||
<string name="verification_emoji_apple">سیب</string>
|
||||
<string name="verification_emoji_strawberry">توت فرنگی</string>
|
||||
<string name="verification_emoji_corn">ذرت</string>
|
||||
<string name="verification_emoji_pizza">پیتزا</string>
|
||||
<string name="verification_emoji_cake">کیک</string>
|
||||
<string name="verification_emoji_heart">قلب</string>
|
||||
<string name="verification_emoji_smiley">خنده</string>
|
||||
<string name="verification_emoji_robot">ربات</string>
|
||||
<string name="verification_emoji_hat">کلاه</string>
|
||||
<string name="verification_emoji_glasses">عینک</string>
|
||||
<string name="verification_emoji_spanner">آچار</string>
|
||||
<string name="verification_emoji_santa">بابا نوئل</string>
|
||||
<string name="verification_emoji_thumbs_up">لایک</string>
|
||||
<string name="verification_emoji_umbrella">چتر</string>
|
||||
<string name="verification_emoji_hourglass">ساعت شنی</string>
|
||||
<string name="verification_emoji_clock">ساعت</string>
|
||||
<string name="verification_emoji_gift">هدیه</string>
|
||||
<string name="verification_emoji_light_bulb">لامپ</string>
|
||||
<string name="verification_emoji_book">کتاب</string>
|
||||
<string name="verification_emoji_pencil">مداد</string>
|
||||
<string name="verification_emoji_paperclip">گیره کاغذ</string>
|
||||
<string name="verification_emoji_scissors">قیچی</string>
|
||||
<string name="verification_emoji_lock">قفل</string>
|
||||
<string name="verification_emoji_key">کلید</string>
|
||||
<string name="verification_emoji_hammer">چکش</string>
|
||||
<string name="verification_emoji_telephone">تلفن</string>
|
||||
<string name="verification_emoji_flag">پرچم</string>
|
||||
<string name="verification_emoji_train">قطار</string>
|
||||
<string name="verification_emoji_bicycle">دوچرخه</string>
|
||||
<string name="verification_emoji_aeroplane">هواپیما</string>
|
||||
<string name="verification_emoji_rocket">موشک</string>
|
||||
<string name="verification_emoji_trophy">جام</string>
|
||||
<string name="verification_emoji_ball">توپ</string>
|
||||
<string name="verification_emoji_guitar">گیتار</string>
|
||||
<string name="verification_emoji_trumpet">شیپور</string>
|
||||
<string name="verification_emoji_bell">زنگ</string>
|
||||
<string name="verification_emoji_anchor">لنگر</string>
|
||||
<string name="verification_emoji_headphones">هدفون</string>
|
||||
<string name="verification_emoji_folder">پوشه</string>
|
||||
<string name="verification_emoji_pin">سنجاق</string>
|
||||
</resources>
|
68
matrix-sdk-android/src/main/res/values-id/strings_sas.xml
Normal file
68
matrix-sdk-android/src/main/res/values-id/strings_sas.xml
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">Anjing</string>
|
||||
<string name="verification_emoji_cat">Kucing</string>
|
||||
<string name="verification_emoji_lion">Singa</string>
|
||||
<string name="verification_emoji_horse">Kuda</string>
|
||||
<string name="verification_emoji_unicorn">Unicorn</string>
|
||||
<string name="verification_emoji_pig">Babi</string>
|
||||
<string name="verification_emoji_elephant">Gajah</string>
|
||||
<string name="verification_emoji_rabbit">Kelinci</string>
|
||||
<string name="verification_emoji_panda">Panda</string>
|
||||
<string name="verification_emoji_rooster">Ayam</string>
|
||||
<string name="verification_emoji_penguin">Penguin</string>
|
||||
<string name="verification_emoji_turtle">Kura-Kura</string>
|
||||
<string name="verification_emoji_fish">Ikan</string>
|
||||
<string name="verification_emoji_octopus">Gurita</string>
|
||||
<string name="verification_emoji_butterfly">Kupu-Kupu</string>
|
||||
<string name="verification_emoji_flower">Bunga</string>
|
||||
<string name="verification_emoji_tree">Pohon</string>
|
||||
<string name="verification_emoji_cactus">Kaktus</string>
|
||||
<string name="verification_emoji_mushroom">Jamur</string>
|
||||
<string name="verification_emoji_globe">Bola Dunia</string>
|
||||
<string name="verification_emoji_moon">Bulan</string>
|
||||
<string name="verification_emoji_cloud">Awan</string>
|
||||
<string name="verification_emoji_fire">Api</string>
|
||||
<string name="verification_emoji_banana">Pisang</string>
|
||||
<string name="verification_emoji_apple">Apel</string>
|
||||
<string name="verification_emoji_strawberry">Stroberi</string>
|
||||
<string name="verification_emoji_corn">Jagung</string>
|
||||
<string name="verification_emoji_pizza">Pizza</string>
|
||||
<string name="verification_emoji_cake">Kue</string>
|
||||
<string name="verification_emoji_heart">Hati</string>
|
||||
<string name="verification_emoji_smiley">Senyuman</string>
|
||||
<string name="verification_emoji_robot">Robot</string>
|
||||
<string name="verification_emoji_hat">Topi</string>
|
||||
<string name="verification_emoji_glasses">Kacamata</string>
|
||||
<string name="verification_emoji_spanner">Kunci Bengkel</string>
|
||||
<string name="verification_emoji_santa">Santa</string>
|
||||
<string name="verification_emoji_thumbs_up">Jempol</string>
|
||||
<string name="verification_emoji_umbrella">Payung</string>
|
||||
<string name="verification_emoji_hourglass">Jam Pasir</string>
|
||||
<string name="verification_emoji_clock">Jam</string>
|
||||
<string name="verification_emoji_gift">Kado</string>
|
||||
<string name="verification_emoji_light_bulb">Bohlam Lampu</string>
|
||||
<string name="verification_emoji_book">Buku</string>
|
||||
<string name="verification_emoji_pencil">Pensil</string>
|
||||
<string name="verification_emoji_paperclip">Klip Kertas</string>
|
||||
<string name="verification_emoji_scissors">Gunting</string>
|
||||
<string name="verification_emoji_lock">Gembok</string>
|
||||
<string name="verification_emoji_key">Kunci</string>
|
||||
<string name="verification_emoji_hammer">Palu</string>
|
||||
<string name="verification_emoji_telephone">Telepon</string>
|
||||
<string name="verification_emoji_flag">Bendera</string>
|
||||
<string name="verification_emoji_train">Kereta Api</string>
|
||||
<string name="verification_emoji_bicycle">Sepeda</string>
|
||||
<string name="verification_emoji_aeroplane">Pesawat</string>
|
||||
<string name="verification_emoji_rocket">Roket</string>
|
||||
<string name="verification_emoji_trophy">Piala</string>
|
||||
<string name="verification_emoji_ball">Bola</string>
|
||||
<string name="verification_emoji_guitar">Gitar</string>
|
||||
<string name="verification_emoji_trumpet">Terompet</string>
|
||||
<string name="verification_emoji_bell">Lonceng</string>
|
||||
<string name="verification_emoji_anchor">Jangkar</string>
|
||||
<string name="verification_emoji_headphones">Headphone</string>
|
||||
<string name="verification_emoji_folder">Map</string>
|
||||
<string name="verification_emoji_pin">Pin</string>
|
||||
</resources>
|
|
@ -32,7 +32,7 @@
|
|||
<string name="verification_emoji_cake">ケーキ</string>
|
||||
<string name="verification_emoji_heart">ハート</string>
|
||||
<string name="verification_emoji_smiley">スマイル</string>
|
||||
<string name="verification_emoji_robot">ロボと</string>
|
||||
<string name="verification_emoji_robot">ロボット</string>
|
||||
<string name="verification_emoji_hat">帽子</string>
|
||||
<string name="verification_emoji_glasses">めがね</string>
|
||||
<string name="verification_emoji_spanner">スパナ</string>
|
||||
|
@ -63,6 +63,6 @@
|
|||
<string name="verification_emoji_bell">ベル</string>
|
||||
<string name="verification_emoji_anchor">いかり</string>
|
||||
<string name="verification_emoji_headphones">ヘッドホン</string>
|
||||
<string name="verification_emoji_folder">フォルダ</string>
|
||||
<string name="verification_emoji_folder">フォルダー</string>
|
||||
<string name="verification_emoji_pin">ピン</string>
|
||||
</resources>
|
||||
|
|
68
matrix-sdk-android/src/main/res/values-pt/strings_sas.xml
Normal file
68
matrix-sdk-android/src/main/res/values-pt/strings_sas.xml
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">Cão</string>
|
||||
<string name="verification_emoji_cat">Gato</string>
|
||||
<string name="verification_emoji_lion">Leão</string>
|
||||
<string name="verification_emoji_horse">Cavalo</string>
|
||||
<string name="verification_emoji_unicorn">Unicórnio</string>
|
||||
<string name="verification_emoji_pig">Porco</string>
|
||||
<string name="verification_emoji_elephant">Elefante</string>
|
||||
<string name="verification_emoji_rabbit">Coelho</string>
|
||||
<string name="verification_emoji_panda">Panda</string>
|
||||
<string name="verification_emoji_rooster">Galo</string>
|
||||
<string name="verification_emoji_penguin">Pinguim</string>
|
||||
<string name="verification_emoji_turtle">Tartaruga</string>
|
||||
<string name="verification_emoji_fish">Peixe</string>
|
||||
<string name="verification_emoji_octopus">Polvo</string>
|
||||
<string name="verification_emoji_butterfly">Borboleta</string>
|
||||
<string name="verification_emoji_flower">Flor</string>
|
||||
<string name="verification_emoji_tree">Árvore</string>
|
||||
<string name="verification_emoji_cactus">Cato</string>
|
||||
<string name="verification_emoji_mushroom">Cogumelo</string>
|
||||
<string name="verification_emoji_globe">Globo</string>
|
||||
<string name="verification_emoji_moon">Lua</string>
|
||||
<string name="verification_emoji_cloud">Nuvem</string>
|
||||
<string name="verification_emoji_fire">Fogo</string>
|
||||
<string name="verification_emoji_banana">Banana</string>
|
||||
<string name="verification_emoji_apple">Maçã</string>
|
||||
<string name="verification_emoji_strawberry">Morango</string>
|
||||
<string name="verification_emoji_corn">Milho</string>
|
||||
<string name="verification_emoji_pizza">Piza</string>
|
||||
<string name="verification_emoji_cake">Bolo</string>
|
||||
<string name="verification_emoji_heart">Coração</string>
|
||||
<string name="verification_emoji_smiley">Sorriso</string>
|
||||
<string name="verification_emoji_robot">Robô</string>
|
||||
<string name="verification_emoji_hat">Chapéu</string>
|
||||
<string name="verification_emoji_glasses">Óculos</string>
|
||||
<string name="verification_emoji_spanner">Chave inglesa</string>
|
||||
<string name="verification_emoji_santa">Pai Natal</string>
|
||||
<string name="verification_emoji_thumbs_up">Polegar para cima</string>
|
||||
<string name="verification_emoji_umbrella">Guarda-chuva</string>
|
||||
<string name="verification_emoji_hourglass">Ampulheta</string>
|
||||
<string name="verification_emoji_clock">Relógio</string>
|
||||
<string name="verification_emoji_gift">Presente</string>
|
||||
<string name="verification_emoji_light_bulb">Lâmpada</string>
|
||||
<string name="verification_emoji_book">Livro</string>
|
||||
<string name="verification_emoji_pencil">Lápis</string>
|
||||
<string name="verification_emoji_paperclip">Clipe</string>
|
||||
<string name="verification_emoji_scissors">Tesoura</string>
|
||||
<string name="verification_emoji_lock">Cadeado</string>
|
||||
<string name="verification_emoji_key">Chave</string>
|
||||
<string name="verification_emoji_hammer">Martelo</string>
|
||||
<string name="verification_emoji_telephone">Telefone</string>
|
||||
<string name="verification_emoji_flag">Bandeira</string>
|
||||
<string name="verification_emoji_train">Comboio</string>
|
||||
<string name="verification_emoji_bicycle">Bicicleta</string>
|
||||
<string name="verification_emoji_aeroplane">Avião</string>
|
||||
<string name="verification_emoji_rocket">Foguetão</string>
|
||||
<string name="verification_emoji_trophy">Troféu</string>
|
||||
<string name="verification_emoji_ball">Bola</string>
|
||||
<string name="verification_emoji_guitar">Guitarra</string>
|
||||
<string name="verification_emoji_trumpet">Trompete</string>
|
||||
<string name="verification_emoji_bell">Sino</string>
|
||||
<string name="verification_emoji_anchor">Âncora</string>
|
||||
<string name="verification_emoji_headphones">Fones</string>
|
||||
<string name="verification_emoji_folder">Pasta</string>
|
||||
<string name="verification_emoji_pin">Pionés</string>
|
||||
</resources>
|
|
@ -1,66 +1,66 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">Hlava psa</string>
|
||||
<string name="verification_emoji_cat">Hlava mačky</string>
|
||||
<string name="verification_emoji_lion">Hlava leva</string>
|
||||
<string name="verification_emoji_dog">Pes</string>
|
||||
<string name="verification_emoji_cat">Mačka</string>
|
||||
<string name="verification_emoji_lion">Lev</string>
|
||||
<string name="verification_emoji_horse">Kôň</string>
|
||||
<string name="verification_emoji_unicorn">Hlava jednorožca</string>
|
||||
<string name="verification_emoji_pig">Hlava prasaťa</string>
|
||||
<string name="verification_emoji_unicorn">Jednorožec</string>
|
||||
<string name="verification_emoji_pig">Prasa</string>
|
||||
<string name="verification_emoji_elephant">Slon</string>
|
||||
<string name="verification_emoji_rabbit">Hlava zajaca</string>
|
||||
<string name="verification_emoji_panda">Hlava pandy</string>
|
||||
<string name="verification_emoji_rabbit">Zajac</string>
|
||||
<string name="verification_emoji_panda">Panda</string>
|
||||
<string name="verification_emoji_rooster">Kohút</string>
|
||||
<string name="verification_emoji_penguin">Tučniak</string>
|
||||
<string name="verification_emoji_turtle">Korytnačka</string>
|
||||
<string name="verification_emoji_fish">Ryba</string>
|
||||
<string name="verification_emoji_octopus">Chobotnica</string>
|
||||
<string name="verification_emoji_butterfly">Motýľ</string>
|
||||
<string name="verification_emoji_flower">Tulipán</string>
|
||||
<string name="verification_emoji_tree">Listnatý strom</string>
|
||||
<string name="verification_emoji_flower">Kvet</string>
|
||||
<string name="verification_emoji_tree">Strom</string>
|
||||
<string name="verification_emoji_cactus">Kaktus</string>
|
||||
<string name="verification_emoji_mushroom">Huba</string>
|
||||
<string name="verification_emoji_globe">Zemeguľa</string>
|
||||
<string name="verification_emoji_moon">Polmesiac</string>
|
||||
<string name="verification_emoji_moon">Mesiac</string>
|
||||
<string name="verification_emoji_cloud">Oblak</string>
|
||||
<string name="verification_emoji_fire">Oheň</string>
|
||||
<string name="verification_emoji_banana">Banán</string>
|
||||
<string name="verification_emoji_apple">Červené jablko</string>
|
||||
<string name="verification_emoji_apple">Jablko</string>
|
||||
<string name="verification_emoji_strawberry">Jahoda</string>
|
||||
<string name="verification_emoji_corn">Kukuričný klas</string>
|
||||
<string name="verification_emoji_corn">Kukurica</string>
|
||||
<string name="verification_emoji_pizza">Pizza</string>
|
||||
<string name="verification_emoji_cake">Narodeninová torta</string>
|
||||
<string name="verification_emoji_heart">červené srdce</string>
|
||||
<string name="verification_emoji_smiley">Škeriaca sa tvár</string>
|
||||
<string name="verification_emoji_cake">Torta</string>
|
||||
<string name="verification_emoji_heart">Srdce</string>
|
||||
<string name="verification_emoji_smiley">Smajlík</string>
|
||||
<string name="verification_emoji_robot">Robot</string>
|
||||
<string name="verification_emoji_hat">Cilinder</string>
|
||||
<string name="verification_emoji_hat">Klobúk</string>
|
||||
<string name="verification_emoji_glasses">Okuliare</string>
|
||||
<string name="verification_emoji_spanner">Francúzsky kľúč</string>
|
||||
<string name="verification_emoji_santa">Santa Claus</string>
|
||||
<string name="verification_emoji_spanner">Vidlicový kľúč</string>
|
||||
<string name="verification_emoji_santa">Mikuláš</string>
|
||||
<string name="verification_emoji_thumbs_up">Palec nahor</string>
|
||||
<string name="verification_emoji_umbrella">Dáždnik</string>
|
||||
<string name="verification_emoji_hourglass">Presýpacie hodiny</string>
|
||||
<string name="verification_emoji_clock">Budík</string>
|
||||
<string name="verification_emoji_gift">Zabalený darček</string>
|
||||
<string name="verification_emoji_gift">Darček</string>
|
||||
<string name="verification_emoji_light_bulb">Žiarovka</string>
|
||||
<string name="verification_emoji_book">Zatvorená kniha</string>
|
||||
<string name="verification_emoji_book">Kniha</string>
|
||||
<string name="verification_emoji_pencil">Ceruzka</string>
|
||||
<string name="verification_emoji_paperclip">Sponka na papier</string>
|
||||
<string name="verification_emoji_paperclip">Kancelárska sponka</string>
|
||||
<string name="verification_emoji_scissors">Nožnice</string>
|
||||
<string name="verification_emoji_lock">Zatvorená zámka</string>
|
||||
<string name="verification_emoji_lock">Zámka</string>
|
||||
<string name="verification_emoji_key">Kľúč</string>
|
||||
<string name="verification_emoji_hammer">Kladivo</string>
|
||||
<string name="verification_emoji_telephone">Telefón</string>
|
||||
<string name="verification_emoji_flag">Kockovaná zástava</string>
|
||||
<string name="verification_emoji_train">Rušeň</string>
|
||||
<string name="verification_emoji_flag">Zástava</string>
|
||||
<string name="verification_emoji_train">Vlak</string>
|
||||
<string name="verification_emoji_bicycle">Bicykel</string>
|
||||
<string name="verification_emoji_aeroplane">Lietadlo</string>
|
||||
<string name="verification_emoji_rocket">Raketa</string>
|
||||
<string name="verification_emoji_trophy">Trofej</string>
|
||||
<string name="verification_emoji_ball">Futbal</string>
|
||||
<string name="verification_emoji_ball">Lopta</string>
|
||||
<string name="verification_emoji_guitar">Gitara</string>
|
||||
<string name="verification_emoji_trumpet">Trúbka</string>
|
||||
<string name="verification_emoji_bell">Zvon</string>
|
||||
<string name="verification_emoji_bell">Zvonec</string>
|
||||
<string name="verification_emoji_anchor">Kotva</string>
|
||||
<string name="verification_emoji_headphones">Slúchadlá</string>
|
||||
<string name="verification_emoji_folder">Fascikel</string>
|
||||
|
|
67
matrix-sdk-android/src/main/res/values-sq/strings_sas.xml
Normal file
67
matrix-sdk-android/src/main/res/values-sq/strings_sas.xml
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">Qen</string>
|
||||
<string name="verification_emoji_cat">Mace</string>
|
||||
<string name="verification_emoji_lion">Luan</string>
|
||||
<string name="verification_emoji_horse">Kalë</string>
|
||||
<string name="verification_emoji_unicorn">Njëbrirësh</string>
|
||||
<string name="verification_emoji_pig">Derr</string>
|
||||
<string name="verification_emoji_elephant">Elefant</string>
|
||||
<string name="verification_emoji_rabbit">Lepur</string>
|
||||
<string name="verification_emoji_panda">Panda</string>
|
||||
<string name="verification_emoji_rooster">Këndes</string>
|
||||
<string name="verification_emoji_penguin">Pinguin</string>
|
||||
<string name="verification_emoji_turtle">Breshkë</string>
|
||||
<string name="verification_emoji_fish">Peshk</string>
|
||||
<string name="verification_emoji_octopus">Oktapod</string>
|
||||
<string name="verification_emoji_butterfly">Flutur</string>
|
||||
<string name="verification_emoji_flower">Lule</string>
|
||||
<string name="verification_emoji_tree">Pemë</string>
|
||||
<string name="verification_emoji_cactus">Kaktus</string>
|
||||
<string name="verification_emoji_mushroom">Kërpudhë</string>
|
||||
<string name="verification_emoji_globe">Rruzull</string>
|
||||
<string name="verification_emoji_moon">Hënë</string>
|
||||
<string name="verification_emoji_cloud">Re</string>
|
||||
<string name="verification_emoji_fire">Zjarr</string>
|
||||
<string name="verification_emoji_banana">Banane</string>
|
||||
<string name="verification_emoji_apple">Mollë</string>
|
||||
<string name="verification_emoji_strawberry">Luleshtrydhe</string>
|
||||
<string name="verification_emoji_corn">Misër</string>
|
||||
<string name="verification_emoji_pizza">Picë</string>
|
||||
<string name="verification_emoji_cake">Tortë</string>
|
||||
<string name="verification_emoji_heart">Zemër</string>
|
||||
<string name="verification_emoji_smiley">Emotikon</string>
|
||||
<string name="verification_emoji_robot">Robot</string>
|
||||
<string name="verification_emoji_hat">Kapë</string>
|
||||
<string name="verification_emoji_glasses">Syze</string>
|
||||
<string name="verification_emoji_spanner">Çelës</string>
|
||||
<string name="verification_emoji_santa">Babagjyshi i Vitit të Ri</string>
|
||||
<string name="verification_emoji_umbrella">Ombrellë</string>
|
||||
<string name="verification_emoji_hourglass">Klepsidër</string>
|
||||
<string name="verification_emoji_clock">Sahat</string>
|
||||
<string name="verification_emoji_gift">Dhuratë</string>
|
||||
<string name="verification_emoji_light_bulb">Llambë</string>
|
||||
<string name="verification_emoji_book">Libër</string>
|
||||
<string name="verification_emoji_pencil">Laps</string>
|
||||
<string name="verification_emoji_paperclip">Kapëse</string>
|
||||
<string name="verification_emoji_scissors">Gërshërë</string>
|
||||
<string name="verification_emoji_lock">Dry</string>
|
||||
<string name="verification_emoji_key">Çelës</string>
|
||||
<string name="verification_emoji_hammer">Çekiç</string>
|
||||
<string name="verification_emoji_telephone">Telefon</string>
|
||||
<string name="verification_emoji_flag">Flamur</string>
|
||||
<string name="verification_emoji_train">Tren</string>
|
||||
<string name="verification_emoji_bicycle">Biçikletë</string>
|
||||
<string name="verification_emoji_aeroplane">Avion</string>
|
||||
<string name="verification_emoji_rocket">Raketë</string>
|
||||
<string name="verification_emoji_trophy">Trofe</string>
|
||||
<string name="verification_emoji_ball">Top</string>
|
||||
<string name="verification_emoji_guitar">Kitarë</string>
|
||||
<string name="verification_emoji_trumpet">Trombë</string>
|
||||
<string name="verification_emoji_bell">Kambanë</string>
|
||||
<string name="verification_emoji_anchor">Spirancë</string>
|
||||
<string name="verification_emoji_headphones">Kufje</string>
|
||||
<string name="verification_emoji_folder">Dosje</string>
|
||||
<string name="verification_emoji_pin">Karficë</string>
|
||||
</resources>
|
68
matrix-sdk-android/src/main/res/values-vi/strings_sas.xml
Normal file
68
matrix-sdk-android/src/main/res/values-vi/strings_sas.xml
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Generated file, do not edit -->
|
||||
<string name="verification_emoji_dog">Chó</string>
|
||||
<string name="verification_emoji_cat">Mèo</string>
|
||||
<string name="verification_emoji_lion">Sư tử</string>
|
||||
<string name="verification_emoji_horse">Ngựa</string>
|
||||
<string name="verification_emoji_unicorn">Kỳ lân</string>
|
||||
<string name="verification_emoji_pig">Heo</string>
|
||||
<string name="verification_emoji_elephant">Voi</string>
|
||||
<string name="verification_emoji_rabbit">Thỏ</string>
|
||||
<string name="verification_emoji_panda">Gấu trúc</string>
|
||||
<string name="verification_emoji_rooster">Gà trống</string>
|
||||
<string name="verification_emoji_penguin">Chim cánh cụt</string>
|
||||
<string name="verification_emoji_turtle">Rùa</string>
|
||||
<string name="verification_emoji_fish">Cá</string>
|
||||
<string name="verification_emoji_octopus">Bạch tuộc</string>
|
||||
<string name="verification_emoji_butterfly">Bướm</string>
|
||||
<string name="verification_emoji_flower">Hoa</string>
|
||||
<string name="verification_emoji_tree">Cây</string>
|
||||
<string name="verification_emoji_cactus">Xương rồng</string>
|
||||
<string name="verification_emoji_mushroom">Nấm</string>
|
||||
<string name="verification_emoji_globe">Địa cầu</string>
|
||||
<string name="verification_emoji_moon">Mặt trăng</string>
|
||||
<string name="verification_emoji_cloud">Mây</string>
|
||||
<string name="verification_emoji_fire">Lửa</string>
|
||||
<string name="verification_emoji_banana">Chuối</string>
|
||||
<string name="verification_emoji_apple">Táo</string>
|
||||
<string name="verification_emoji_strawberry">Dâu tây</string>
|
||||
<string name="verification_emoji_corn">Bắp</string>
|
||||
<string name="verification_emoji_pizza">Pizza</string>
|
||||
<string name="verification_emoji_cake">Bánh</string>
|
||||
<string name="verification_emoji_heart">Tim</string>
|
||||
<string name="verification_emoji_smiley">Mặt cười</string>
|
||||
<string name="verification_emoji_robot">Rô-bô</string>
|
||||
<string name="verification_emoji_hat">Mũ</string>
|
||||
<string name="verification_emoji_glasses">Kính mắt</string>
|
||||
<string name="verification_emoji_spanner">Cờ-lê</string>
|
||||
<string name="verification_emoji_santa">ông già Nô-en</string>
|
||||
<string name="verification_emoji_thumbs_up">Thích</string>
|
||||
<string name="verification_emoji_umbrella">Cái ô</string>
|
||||
<string name="verification_emoji_hourglass">Đồng hồ cát</string>
|
||||
<string name="verification_emoji_clock">Đồng hồ</string>
|
||||
<string name="verification_emoji_gift">Quà tặng</string>
|
||||
<string name="verification_emoji_light_bulb">Bóng đèn tròn</string>
|
||||
<string name="verification_emoji_book">Sách</string>
|
||||
<string name="verification_emoji_pencil">Viết chì</string>
|
||||
<string name="verification_emoji_paperclip">Kẹp giấy</string>
|
||||
<string name="verification_emoji_scissors">Cái kéo</string>
|
||||
<string name="verification_emoji_lock">Ổ khóa</string>
|
||||
<string name="verification_emoji_key">Chìa khóa</string>
|
||||
<string name="verification_emoji_hammer">Búa</string>
|
||||
<string name="verification_emoji_telephone">Điện thoại</string>
|
||||
<string name="verification_emoji_flag">Lá cờ</string>
|
||||
<string name="verification_emoji_train">Xe lửa</string>
|
||||
<string name="verification_emoji_bicycle">Xe đạp</string>
|
||||
<string name="verification_emoji_aeroplane">Máy bay</string>
|
||||
<string name="verification_emoji_rocket">Tên lửa</string>
|
||||
<string name="verification_emoji_trophy">Cúp</string>
|
||||
<string name="verification_emoji_ball">Banh</string>
|
||||
<string name="verification_emoji_guitar">Ghi-ta</string>
|
||||
<string name="verification_emoji_trumpet">Kèn</string>
|
||||
<string name="verification_emoji_bell">Chuông</string>
|
||||
<string name="verification_emoji_anchor">Mỏ neo</string>
|
||||
<string name="verification_emoji_headphones">Tai nghe</string>
|
||||
<string name="verification_emoji_folder">Thư mục</string>
|
||||
<string name="verification_emoji_pin">Ghim</string>
|
||||
</resources>
|
|
@ -76,6 +76,7 @@ import org.matrix.rustcomponents.sdk.crypto.DeviceLists
|
|||
import org.matrix.rustcomponents.sdk.crypto.EncryptionSettings
|
||||
import org.matrix.rustcomponents.sdk.crypto.KeyRequestPair
|
||||
import org.matrix.rustcomponents.sdk.crypto.KeysImportResult
|
||||
import org.matrix.rustcomponents.sdk.crypto.LocalTrust
|
||||
import org.matrix.rustcomponents.sdk.crypto.Logger
|
||||
import org.matrix.rustcomponents.sdk.crypto.MegolmV1BackupKey
|
||||
import org.matrix.rustcomponents.sdk.crypto.Request
|
||||
|
@ -869,6 +870,11 @@ internal class OlmMachine @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun requestMissingSecretsFromOtherSessions(): Boolean {
|
||||
return withContext(coroutineDispatchers.io) {
|
||||
inner.queryMissingSecretsFromOtherSessions()
|
||||
}
|
||||
}
|
||||
@Throws(CryptoStoreException::class)
|
||||
suspend fun enableBackupV1(key: String, version: String) {
|
||||
return withContext(coroutineDispatchers.computation) {
|
||||
|
@ -934,4 +940,11 @@ internal class OlmMachine @Inject constructor(
|
|||
inner.verifyBackup(serializedAuthData)
|
||||
}
|
||||
}
|
||||
|
||||
@Throws(CryptoStoreException::class)
|
||||
suspend fun setDeviceLocalTrust(userId: String, deviceId: String, trusted: Boolean) {
|
||||
withContext(coroutineDispatchers.io) {
|
||||
inner.setLocalTrust(userId, deviceId, if (trusted) LocalTrust.VERIFIED else LocalTrust.UNSET)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
|
|||
import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor
|
||||
import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
||||
import org.matrix.android.sdk.api.crypto.MXCryptoConfig
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.api.listeners.ProgressListener
|
||||
import org.matrix.android.sdk.api.logger.LoggerTag
|
||||
|
@ -536,7 +537,8 @@ internal class RustCryptoService @Inject constructor(
|
|||
}
|
||||
|
||||
override suspend fun setDeviceVerification(trustLevel: DeviceTrustLevel, userId: String, deviceId: String) {
|
||||
TODO("Not yet implemented")
|
||||
Timber.w("Rust stack only support API to set local trust")
|
||||
olmMachine.setDeviceLocalTrust(userId, deviceId, trustLevel.isLocallyVerified().orFalse())
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,15 +16,29 @@
|
|||
|
||||
package org.matrix.android.sdk.internal.crypto
|
||||
|
||||
import org.matrix.android.sdk.BuildConfig
|
||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||
import org.matrix.android.sdk.internal.crypto.network.OutgoingRequestsProcessor
|
||||
import org.matrix.rustcomponents.sdk.crypto.Request
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Provider
|
||||
|
||||
internal class SecretShareManager @Inject constructor() {
|
||||
internal class SecretShareManager @Inject constructor(
|
||||
private val olmMachine: Provider<OlmMachine>,
|
||||
private val outgoingRequestsProcessor: OutgoingRequestsProcessor) {
|
||||
|
||||
suspend fun requestSecretTo(deviceId: String, secretName: String) {
|
||||
// nop in rust?
|
||||
if (BuildConfig.DEBUG) TODO("requestSecretTo Not implemented in Rust")
|
||||
Timber.e("SecretShareManager Not supported in rust $deviceId, $secretName")
|
||||
Timber.w("SecretShareManager requesting custom secrets not supported $deviceId, $secretName")
|
||||
// rust stack only support requesting secrets defined in the spec (not custom secret yet)
|
||||
requestMissingSecrets()
|
||||
}
|
||||
|
||||
suspend fun requestMissingSecrets() {
|
||||
this.olmMachine.get().requestMissingSecretsFromOtherSessions()
|
||||
|
||||
// immediately send the requests
|
||||
outgoingRequestsProcessor.processOutgoingRequests(this.olmMachine.get()) {
|
||||
it is Request.ToDevice && it.eventType == EventType.REQUEST_SECRET
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ if args.verbose:
|
|||
print("Argument:")
|
||||
print(args)
|
||||
|
||||
base_url = "https://raw.githubusercontent.com/matrix-org/matrix-doc/master/data-definitions/sas-emoji.json"
|
||||
base_url = "https://raw.githubusercontent.com/matrix-org/matrix-spec/main/data-definitions/sas-emoji.json"
|
||||
|
||||
print("Downloading " + base_url + "…")
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<issue id="IconDuplicatesConfig" severity="error" />
|
||||
<issue id="IconDuplicates" severity="error" />
|
||||
<issue id="IconExpectedSize" severity="error" />
|
||||
<issue id="LocaleFolder" severity="error" />
|
||||
<issue id="LocaleFolder" severity="ignore" />
|
||||
|
||||
<!-- AlwaysShowAction is considered as an error to force ignoring the issue when detected -->
|
||||
<issue id="AlwaysShowAction" severity="error" />
|
||||
|
|
|
@ -37,7 +37,7 @@ ext.versionMinor = 6
|
|||
// Note: even values are reserved for regular release, odd values for hotfix release.
|
||||
// When creating a hotfix, you should decrease the value, since the current value
|
||||
// is the value for the next regular release.
|
||||
ext.versionPatch = 5
|
||||
ext.versionPatch = 6
|
||||
|
||||
static def getGitTimestamp() {
|
||||
def cmd = 'git show -s --format=%ct'
|
||||
|
|
|
@ -277,6 +277,7 @@ dependencies {
|
|||
runtimeOnly(libs.jsonwebtoken.jjwtOrgjson) {
|
||||
exclude group: 'org.json', module: 'json' //provided by Android natively
|
||||
}
|
||||
testImplementation(libs.jsonwebtoken.jjwtOrgjson)
|
||||
implementation 'commons-codec:commons-codec:1.15'
|
||||
|
||||
// MapTiler
|
||||
|
|
|
@ -19,8 +19,11 @@ package im.vector.app.features.call.conference.jwt
|
|||
import im.vector.app.core.utils.ensureProtocol
|
||||
import io.jsonwebtoken.Jwts
|
||||
import io.jsonwebtoken.SignatureAlgorithm
|
||||
import io.jsonwebtoken.io.Encoders
|
||||
import io.jsonwebtoken.security.Keys
|
||||
import org.matrix.android.sdk.api.session.openid.OpenIdToken
|
||||
import javax.crypto.Mac
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
import javax.inject.Inject
|
||||
|
||||
class JitsiJWTFactory @Inject constructor() {
|
||||
|
@ -37,7 +40,12 @@ class JitsiJWTFactory @Inject constructor() {
|
|||
userDisplayName: String
|
||||
): String {
|
||||
// The secret key here is irrelevant, we're only using the JWT to transport data to Prosody in the Jitsi stack.
|
||||
val key = Keys.secretKeyFor(SignatureAlgorithm.HS256)
|
||||
// In the PR https://github.com/jitsi/luajwtjitsi/pull/3 the function `luajwtjitsi.decode` was removed and
|
||||
// we cannot use random secret keys anymore. But the JWT library `jjwt` doesn't accept the hardcoded key `notused`
|
||||
// from the module `prosody-mod-auth-matrix-user-verification` since it's too short and thus insecure. So, we
|
||||
// create a new token using a random key and then re-sign the token manually with the 'weak' key.
|
||||
val signatureAlgorithm = SignatureAlgorithm.HS256
|
||||
val key = Keys.secretKeyFor(signatureAlgorithm)
|
||||
val context = mapOf(
|
||||
"matrix" to mapOf(
|
||||
"token" to openIdToken.accessToken,
|
||||
|
@ -52,7 +60,8 @@ class JitsiJWTFactory @Inject constructor() {
|
|||
// As per Jitsi token auth, `iss` needs to be set to something agreed between
|
||||
// JWT generating side and Prosody config. Since we have no configuration for
|
||||
// the widgets, we can't set one anywhere. Using the Jitsi domain here probably makes sense.
|
||||
return Jwts.builder()
|
||||
val token = Jwts.builder()
|
||||
.setHeaderParam("typ", "JWT")
|
||||
.setIssuer(jitsiServerDomain)
|
||||
.setSubject(jitsiServerDomain)
|
||||
.setAudience(jitsiServerDomain.ensureProtocol())
|
||||
|
@ -61,5 +70,11 @@ class JitsiJWTFactory @Inject constructor() {
|
|||
.claim("context", context)
|
||||
.signWith(key)
|
||||
.compact()
|
||||
// Re-sign token with the hardcoded key
|
||||
val toSign = token.substring(0, token.lastIndexOf('.'))
|
||||
val mac = Mac.getInstance(signatureAlgorithm.jcaName)
|
||||
mac.init(SecretKeySpec("notused".toByteArray(), mac.algorithm))
|
||||
val prosodySignature = Encoders.BASE64URL.encode(mac.doFinal(toSign.toByteArray()))
|
||||
return "$toSign.$prosodySignature"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -139,19 +139,19 @@ class ShortcutsHandler @Inject constructor(
|
|||
}
|
||||
|
||||
private fun createShortcuts(rooms: List<RoomSummary>) {
|
||||
if (hasPinCode.get()) {
|
||||
// No shortcut in this case (privacy)
|
||||
ShortcutManagerCompat.removeAllDynamicShortcuts(context)
|
||||
} else {
|
||||
val shortcuts = rooms
|
||||
.take(maxShortcutCountPerActivity)
|
||||
.mapIndexed { index, room ->
|
||||
shortcutCreator.create(room, index)
|
||||
}
|
||||
ShortcutManagerCompat.removeAllDynamicShortcuts(context)
|
||||
|
||||
shortcuts.forEach { shortcut ->
|
||||
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)
|
||||
}
|
||||
// No shortcut in this case (privacy)
|
||||
if (hasPinCode.get()) return
|
||||
|
||||
val shortcuts = rooms
|
||||
.take(maxShortcutCountPerActivity)
|
||||
.mapIndexed { index, room ->
|
||||
shortcutCreator.create(room, index)
|
||||
}
|
||||
|
||||
shortcuts.forEach { shortcut ->
|
||||
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.content.SharedPreferences
|
|||
import android.os.Build
|
||||
import androidx.core.content.edit
|
||||
import im.vector.app.core.di.DefaultPreferences
|
||||
import im.vector.app.core.resources.AppNameProvider
|
||||
import im.vector.app.core.resources.VersionCodeProvider
|
||||
import im.vector.app.features.version.VersionProvider
|
||||
import org.matrix.android.sdk.api.Matrix
|
||||
|
@ -36,6 +37,7 @@ class VectorUncaughtExceptionHandler @Inject constructor(
|
|||
private val bugReporter: BugReporter,
|
||||
private val versionProvider: VersionProvider,
|
||||
private val versionCodeProvider: VersionCodeProvider,
|
||||
private val appNameProvider: AppNameProvider,
|
||||
) : Thread.UncaughtExceptionHandler {
|
||||
|
||||
// key to save the crash status
|
||||
|
@ -67,12 +69,12 @@ class VectorUncaughtExceptionHandler @Inject constructor(
|
|||
putBoolean(PREFS_CRASH_KEY, true)
|
||||
}
|
||||
val b = StringBuilder()
|
||||
val appName = "Element" // TODO Matrix.getApplicationName()
|
||||
val appName = appNameProvider.getAppName()
|
||||
|
||||
b.append(appName + " Build : " + versionCodeProvider.getVersionCode() + "\n")
|
||||
b.append("$appName Build : ${versionCodeProvider.getVersionCode()}\n")
|
||||
b.append("$appName Version : ${versionProvider.getVersion(longFormat = true)}\n")
|
||||
b.append("SDK Version : ${Matrix.getSdkVersion()}\n")
|
||||
b.append("Phone : " + Build.MODEL.trim() + " (" + Build.VERSION.INCREMENTAL + " " + Build.VERSION.RELEASE + " " + Build.VERSION.CODENAME + ")\n")
|
||||
b.append("Phone : ${Build.MODEL.trim()} (${Build.VERSION.INCREMENTAL} ${Build.VERSION.RELEASE} ${Build.VERSION.CODENAME})\n")
|
||||
|
||||
b.append("Memory statuses \n")
|
||||
|
||||
|
|
|
@ -45,10 +45,11 @@ import im.vector.app.core.intent.getFilenameFromUri
|
|||
import im.vector.app.core.platform.SimpleTextWatcher
|
||||
import im.vector.app.core.preference.UserAvatarPreference
|
||||
import im.vector.app.core.preference.VectorPreference
|
||||
import im.vector.app.core.preference.VectorPreferenceCategory
|
||||
import im.vector.app.core.preference.VectorSwitchPreference
|
||||
import im.vector.app.core.utils.TextUtils
|
||||
import im.vector.app.core.utils.getSizeOfFiles
|
||||
import im.vector.app.core.utils.openUrlInExternalBrowser
|
||||
import im.vector.app.core.utils.openUrlInChromeCustomTab
|
||||
import im.vector.app.core.utils.toast
|
||||
import im.vector.app.databinding.DialogChangePasswordBinding
|
||||
import im.vector.app.features.MainActivity
|
||||
|
@ -101,12 +102,18 @@ class VectorSettingsGeneralFragment :
|
|||
private val mPasswordPreference by lazy {
|
||||
findPreference<VectorPreference>(VectorPreferences.SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY)!!
|
||||
}
|
||||
private val mManage3pidsPreference by lazy {
|
||||
findPreference<VectorPreference>(VectorPreferences.SETTINGS_EMAILS_AND_PHONE_NUMBERS_PREFERENCE_KEY)!!
|
||||
}
|
||||
private val mIdentityServerPreference by lazy {
|
||||
findPreference<VectorPreference>(VectorPreferences.SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY)!!
|
||||
}
|
||||
private val mExternalAccountManagementPreference by lazy {
|
||||
findPreference<VectorPreference>(VectorPreferences.SETTINGS_EXTERNAL_ACCOUNT_MANAGEMENT_KEY)!!
|
||||
}
|
||||
private val mDeactivateAccountCategory by lazy {
|
||||
findPreference<VectorPreferenceCategory>("SETTINGS_DEACTIVATE_ACCOUNT_CATEGORY_KEY")!!
|
||||
}
|
||||
|
||||
// Local contacts
|
||||
private val mContactSettingsCategory by lazy {
|
||||
|
@ -197,6 +204,10 @@ class VectorSettingsGeneralFragment :
|
|||
mPasswordPreference.isVisible = false
|
||||
}
|
||||
|
||||
// Manage 3Pid
|
||||
// Hide the preference if 3pids can not be updated
|
||||
mManage3pidsPreference.isVisible = homeServerCapabilities.canChange3pid
|
||||
|
||||
val openDiscoveryScreenPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||
(requireActivity() as VectorSettingsActivity).navigateTo(
|
||||
DiscoverySettingsFragment::class.java,
|
||||
|
@ -214,7 +225,7 @@ class VectorSettingsGeneralFragment :
|
|||
// Hide the preference if no URL is given by server
|
||||
if (homeServerCapabilities.externalAccountManagementUrl != null) {
|
||||
mExternalAccountManagementPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||
openUrlInExternalBrowser(it.context, homeServerCapabilities.externalAccountManagementUrl)
|
||||
openUrlInChromeCustomTab(it.context, null, homeServerCapabilities.externalAccountManagementUrl!!)
|
||||
true
|
||||
}
|
||||
|
||||
|
@ -315,6 +326,8 @@ class VectorSettingsGeneralFragment :
|
|||
|
||||
false
|
||||
}
|
||||
// Account deactivation is visible only if account is not managed by an external URL.
|
||||
mDeactivateAccountCategory.isVisible = homeServerCapabilities.delegatedOidcAuthEnabled.not()
|
||||
}
|
||||
|
||||
private suspend fun getCacheSize(): Long = withContext(Dispatchers.IO) {
|
||||
|
|
|
@ -50,4 +50,6 @@ sealed class DevicesViewEvents : VectorViewEvents {
|
|||
data class ShowManuallyVerify(val cryptoDeviceInfo: CryptoDeviceInfo) : DevicesViewEvents()
|
||||
|
||||
object PromptResetSecrets : DevicesViewEvents()
|
||||
|
||||
data class OpenBrowser(val url: String) : DevicesViewEvents()
|
||||
}
|
||||
|
|
|
@ -346,6 +346,20 @@ class DevicesViewModel @AssistedInject constructor(
|
|||
private fun handleDelete(action: DevicesAction.Delete) {
|
||||
val deviceId = action.deviceId
|
||||
|
||||
val accountManagementUrl = session.homeServerCapabilitiesService().getHomeServerCapabilities().externalAccountManagementUrl
|
||||
if (accountManagementUrl != null) {
|
||||
// Open external browser to delete this session
|
||||
_viewEvents.post(
|
||||
DevicesViewEvents.OpenBrowser(
|
||||
url = accountManagementUrl.removeSuffix("/") + "?action=session_end&device_id=$deviceId"
|
||||
)
|
||||
)
|
||||
} else {
|
||||
doDelete(deviceId)
|
||||
}
|
||||
}
|
||||
|
||||
private fun doDelete(deviceId: String) {
|
||||
setState {
|
||||
copy(
|
||||
request = Loading()
|
||||
|
|
|
@ -35,6 +35,7 @@ import im.vector.app.core.extensions.cleanup
|
|||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.core.utils.openUrlInChromeCustomTab
|
||||
import im.vector.app.databinding.DialogBaseEditTextBinding
|
||||
import im.vector.app.databinding.FragmentGenericRecyclerBinding
|
||||
import im.vector.app.features.auth.ReAuthActivity
|
||||
|
@ -95,6 +96,9 @@ class VectorSettingsDevicesFragment :
|
|||
is DevicesViewEvents.PromptResetSecrets -> {
|
||||
navigator.open4SSetup(requireActivity(), SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET)
|
||||
}
|
||||
is DevicesViewEvents.OpenBrowser -> {
|
||||
openUrlInChromeCustomTab(requireContext(), null, it.url)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,12 +35,13 @@ import kotlinx.coroutines.flow.combine
|
|||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.session.uia.DefaultBaseAuth
|
||||
import timber.log.Timber
|
||||
|
||||
class DevicesViewModel @AssistedInject constructor(
|
||||
@Assisted initialState: DevicesViewState,
|
||||
activeSessionHolder: ActiveSessionHolder,
|
||||
private val activeSessionHolder: ActiveSessionHolder,
|
||||
private val getCurrentSessionCrossSigningInfoUseCase: GetCurrentSessionCrossSigningInfoUseCase,
|
||||
private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase,
|
||||
private val refreshDevicesOnCryptoDevicesChangeUseCase: RefreshDevicesOnCryptoDevicesChangeUseCase,
|
||||
|
@ -69,6 +70,19 @@ class DevicesViewModel @AssistedInject constructor(
|
|||
refreshDeviceList()
|
||||
refreshIpAddressVisibility()
|
||||
observePreferences()
|
||||
initDelegatedOidcAuthEnabled()
|
||||
}
|
||||
|
||||
private fun initDelegatedOidcAuthEnabled() {
|
||||
setState {
|
||||
copy(
|
||||
delegatedOidcAuthEnabled = activeSessionHolder.getSafeActiveSession()
|
||||
?.homeServerCapabilitiesService()
|
||||
?.getHomeServerCapabilities()
|
||||
?.delegatedOidcAuthEnabled
|
||||
.orFalse()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
|
|
|
@ -26,6 +26,7 @@ data class DevicesViewState(
|
|||
val devices: Async<DeviceFullInfoList> = Uninitialized,
|
||||
val isLoading: Boolean = false,
|
||||
val isShowingIpAddress: Boolean = false,
|
||||
val delegatedOidcAuthEnabled: Boolean = false,
|
||||
) : MavericksState
|
||||
|
||||
data class DeviceFullInfoList(
|
||||
|
|
|
@ -290,8 +290,8 @@ class VectorSettingsDevicesFragment :
|
|||
val unverifiedSessionsCount = deviceFullInfoList?.unverifiedSessionsCount ?: 0
|
||||
|
||||
renderSecurityRecommendations(inactiveSessionsCount, unverifiedSessionsCount)
|
||||
renderCurrentSessionView(currentDeviceInfo, hasOtherDevices = otherDevices?.isNotEmpty().orFalse())
|
||||
renderOtherSessionsView(otherDevices, state.isShowingIpAddress)
|
||||
renderCurrentSessionView(currentDeviceInfo, hasOtherDevices = otherDevices?.isNotEmpty().orFalse(), state)
|
||||
renderOtherSessionsView(otherDevices, state)
|
||||
} else {
|
||||
hideSecurityRecommendations()
|
||||
hideCurrentSessionView()
|
||||
|
@ -347,13 +347,16 @@ class VectorSettingsDevicesFragment :
|
|||
hideInactiveSessionsRecommendation()
|
||||
}
|
||||
|
||||
private fun renderOtherSessionsView(otherDevices: List<DeviceFullInfo>?, isShowingIpAddress: Boolean) {
|
||||
private fun renderOtherSessionsView(otherDevices: List<DeviceFullInfo>?, state: DevicesViewState) {
|
||||
val isShowingIpAddress = state.isShowingIpAddress
|
||||
if (otherDevices.isNullOrEmpty()) {
|
||||
hideOtherSessionsView()
|
||||
} else {
|
||||
views.deviceListHeaderOtherSessions.isVisible = true
|
||||
val colorDestructive = colorProvider.getColorFromAttribute(R.attr.colorError)
|
||||
val multiSignoutItem = views.deviceListHeaderOtherSessions.menu.findItem(R.id.otherSessionsHeaderMultiSignout)
|
||||
// Hide multi signout if the homeserver delegates the account management
|
||||
multiSignoutItem.isVisible = state.delegatedOidcAuthEnabled.not()
|
||||
val nbDevices = otherDevices.size
|
||||
multiSignoutItem.title = stringProvider.getQuantityString(R.plurals.device_manager_other_sessions_multi_signout_all, nbDevices, nbDevices)
|
||||
multiSignoutItem.setTextColor(colorDestructive)
|
||||
|
@ -377,23 +380,24 @@ class VectorSettingsDevicesFragment :
|
|||
views.deviceListOtherSessions.isVisible = false
|
||||
}
|
||||
|
||||
private fun renderCurrentSessionView(currentDeviceInfo: DeviceFullInfo?, hasOtherDevices: Boolean) {
|
||||
private fun renderCurrentSessionView(currentDeviceInfo: DeviceFullInfo?, hasOtherDevices: Boolean, state: DevicesViewState) {
|
||||
currentDeviceInfo?.let {
|
||||
renderCurrentSessionHeaderView(hasOtherDevices)
|
||||
renderCurrentSessionHeaderView(hasOtherDevices, state)
|
||||
renderCurrentSessionListView(it)
|
||||
} ?: run {
|
||||
hideCurrentSessionView()
|
||||
}
|
||||
}
|
||||
|
||||
private fun renderCurrentSessionHeaderView(hasOtherDevices: Boolean) {
|
||||
private fun renderCurrentSessionHeaderView(hasOtherDevices: Boolean, state: DevicesViewState) {
|
||||
views.deviceListHeaderCurrentSession.isVisible = true
|
||||
val colorDestructive = colorProvider.getColorFromAttribute(R.attr.colorError)
|
||||
val signoutSessionItem = views.deviceListHeaderCurrentSession.menu.findItem(R.id.currentSessionHeaderSignout)
|
||||
signoutSessionItem.setTextColor(colorDestructive)
|
||||
val signoutOtherSessionsItem = views.deviceListHeaderCurrentSession.menu.findItem(R.id.currentSessionHeaderSignoutOtherSessions)
|
||||
signoutOtherSessionsItem.setTextColor(colorDestructive)
|
||||
signoutOtherSessionsItem.isVisible = hasOtherDevices
|
||||
// Hide signout other sessions if the homeserver delegates the account management
|
||||
signoutOtherSessionsItem.isVisible = hasOtherDevices && state.delegatedOidcAuthEnabled.not()
|
||||
}
|
||||
|
||||
private fun renderCurrentSessionListView(currentDeviceInfo: DeviceFullInfo) {
|
||||
|
|
|
@ -103,10 +103,15 @@ class OtherSessionsFragment :
|
|||
val nbDevices = viewState.devices()?.size ?: 0
|
||||
stringProvider.getQuantityString(R.plurals.device_manager_other_sessions_multi_signout_all, nbDevices, nbDevices)
|
||||
}
|
||||
multiSignoutItem.isVisible = if (viewState.isSelectModeEnabled) {
|
||||
viewState.devices.invoke()?.any { it.isSelected }.orFalse()
|
||||
multiSignoutItem.isVisible = if (viewState.delegatedOidcAuthEnabled) {
|
||||
// Hide multi signout if the homeserver delegates the account management
|
||||
false
|
||||
} else {
|
||||
viewState.devices.invoke()?.isNotEmpty().orFalse()
|
||||
if (viewState.isSelectModeEnabled) {
|
||||
viewState.devices.invoke()?.any { it.isSelected }.orFalse()
|
||||
} else {
|
||||
viewState.devices.invoke()?.isNotEmpty().orFalse()
|
||||
}
|
||||
}
|
||||
val showAsActionFlag = if (viewState.isSelectModeEnabled) MenuItem.SHOW_AS_ACTION_IF_ROOM else MenuItem.SHOW_AS_ACTION_NEVER
|
||||
multiSignoutItem.setShowAsAction(showAsActionFlag or MenuItem.SHOW_AS_ACTION_WITH_TEXT)
|
||||
|
@ -308,7 +313,10 @@ class OtherSessionsFragment :
|
|||
)
|
||||
)
|
||||
views.otherSessionsNotFoundTextView.text = getString(R.string.device_manager_other_sessions_no_inactive_sessions_found)
|
||||
updateSecurityLearnMoreButton(R.string.device_manager_learn_more_sessions_inactive_title, R.string.device_manager_learn_more_sessions_inactive)
|
||||
updateSecurityLearnMoreButton(
|
||||
R.string.device_manager_learn_more_sessions_inactive_title,
|
||||
R.string.device_manager_learn_more_sessions_inactive
|
||||
)
|
||||
}
|
||||
DeviceManagerFilterType.ALL_SESSIONS -> { /* NOOP. View is not visible */
|
||||
}
|
||||
|
|
|
@ -36,12 +36,13 @@ import im.vector.app.features.settings.devices.v2.signout.SignoutSessionsReAuthN
|
|||
import im.vector.app.features.settings.devices.v2.signout.SignoutSessionsUseCase
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.session.uia.DefaultBaseAuth
|
||||
import timber.log.Timber
|
||||
|
||||
class OtherSessionsViewModel @AssistedInject constructor(
|
||||
@Assisted private val initialState: OtherSessionsViewState,
|
||||
activeSessionHolder: ActiveSessionHolder,
|
||||
private val activeSessionHolder: ActiveSessionHolder,
|
||||
private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase,
|
||||
private val signoutSessionsUseCase: SignoutSessionsUseCase,
|
||||
private val pendingAuthHandler: PendingAuthHandler,
|
||||
|
@ -65,6 +66,19 @@ class OtherSessionsViewModel @AssistedInject constructor(
|
|||
observeDevices(initialState.currentFilter)
|
||||
refreshIpAddressVisibility()
|
||||
observePreferences()
|
||||
initDelegatedOidcAuthEnabled()
|
||||
}
|
||||
|
||||
private fun initDelegatedOidcAuthEnabled() {
|
||||
setState {
|
||||
copy(
|
||||
delegatedOidcAuthEnabled = activeSessionHolder.getSafeActiveSession()
|
||||
?.homeServerCapabilitiesService()
|
||||
?.getHomeServerCapabilities()
|
||||
?.delegatedOidcAuthEnabled
|
||||
.orFalse()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
|
|
|
@ -29,6 +29,7 @@ data class OtherSessionsViewState(
|
|||
val isSelectModeEnabled: Boolean = false,
|
||||
val isLoading: Boolean = false,
|
||||
val isShowingIpAddress: Boolean = false,
|
||||
val delegatedOidcAuthEnabled: Boolean = false,
|
||||
) : MavericksState {
|
||||
|
||||
constructor(args: OtherSessionsArgs) : this(excludeCurrentDevice = args.excludeCurrentDevice)
|
||||
|
|
|
@ -39,6 +39,7 @@ import im.vector.app.core.platform.VectorMenuProvider
|
|||
import im.vector.app.core.resources.ColorProvider
|
||||
import im.vector.app.core.resources.DrawableProvider
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.core.utils.openUrlInChromeCustomTab
|
||||
import im.vector.app.databinding.FragmentSessionOverviewBinding
|
||||
import im.vector.app.features.auth.ReAuthActivity
|
||||
import im.vector.app.features.crypto.recover.SetupMode
|
||||
|
@ -135,10 +136,19 @@ class SessionOverviewFragment :
|
|||
activity?.let { SignOutUiWorker(it).perform() }
|
||||
}
|
||||
|
||||
private fun confirmSignoutOtherSession() {
|
||||
activity?.let {
|
||||
buildConfirmSignoutDialogUseCase.execute(it, this::signoutSession)
|
||||
.show()
|
||||
private fun confirmSignoutOtherSession() = withState(viewModel) { state ->
|
||||
if (state.externalAccountManagementUrl != null) {
|
||||
// Manage in external account manager
|
||||
openUrlInChromeCustomTab(
|
||||
requireContext(),
|
||||
null,
|
||||
state.externalAccountManagementUrl.removeSuffix("/") + "?action=session_end&device_id=${state.deviceId}"
|
||||
)
|
||||
} else {
|
||||
activity?.let {
|
||||
buildConfirmSignoutDialogUseCase.execute(it, this::signoutSession)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -75,6 +75,18 @@ class SessionOverviewViewModel @AssistedInject constructor(
|
|||
observeNotificationsStatus(initialState.deviceId)
|
||||
refreshIpAddressVisibility()
|
||||
observePreferences()
|
||||
initExternalAccountManagementUrl()
|
||||
}
|
||||
|
||||
private fun initExternalAccountManagementUrl() {
|
||||
setState {
|
||||
copy(
|
||||
externalAccountManagementUrl = activeSessionHolder.getSafeActiveSession()
|
||||
?.homeServerCapabilitiesService()
|
||||
?.getHomeServerCapabilities()
|
||||
?.externalAccountManagementUrl
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
|
|
|
@ -29,6 +29,7 @@ data class SessionOverviewViewState(
|
|||
val isLoading: Boolean = false,
|
||||
val notificationsStatus: NotificationsStatus = NotificationsStatus.NOT_SUPPORTED,
|
||||
val isShowingIpAddress: Boolean = false,
|
||||
val externalAccountManagementUrl: String? = null,
|
||||
) : MavericksState {
|
||||
constructor(args: SessionOverviewArgs) : this(
|
||||
deviceId = args.deviceId
|
||||
|
|
|
@ -113,7 +113,9 @@
|
|||
|
||||
</im.vector.app.core.preference.VectorPreferenceCategory>
|
||||
|
||||
<im.vector.app.core.preference.VectorPreferenceCategory android:title="@string/settings_deactivate_account_section">
|
||||
<im.vector.app.core.preference.VectorPreferenceCategory
|
||||
android:key="SETTINGS_DEACTIVATE_ACCOUNT_CATEGORY_KEY"
|
||||
android:title="@string/settings_deactivate_account_section">
|
||||
|
||||
<im.vector.app.core.preference.VectorPreference
|
||||
android:key="SETTINGS_DEACTIVATE_ACCOUNT_KEY"
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.app.features.call.conference.jwt
|
||||
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.Types
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.matrix.android.sdk.api.session.openid.OpenIdToken
|
||||
import java.lang.reflect.ParameterizedType
|
||||
import java.util.Base64
|
||||
import kotlin.streams.toList
|
||||
|
||||
class JitsiJWTFactoryTest {
|
||||
private val base64Decoder = Base64.getUrlDecoder()
|
||||
private val moshi = Moshi.Builder().build()
|
||||
private val stringToString = Types.newParameterizedType(Map::class.java, String::class.java, String::class.java)
|
||||
private val stringToAny = Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java)
|
||||
private lateinit var factory: JitsiJWTFactory
|
||||
|
||||
@Before
|
||||
fun init() {
|
||||
factory = JitsiJWTFactory()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token contains 3 encoded parts`() {
|
||||
val token = createToken()
|
||||
|
||||
val parts = token.split(".")
|
||||
assertEquals(3, parts.size)
|
||||
parts.forEach {
|
||||
assertTrue("Non-empty array", base64Decoder.decode(it).isNotEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token contains unique signature`() {
|
||||
val signatures = listOf("one", "two").stream()
|
||||
.map { createToken(it) }
|
||||
.map { it.split(".")[2] }
|
||||
.map { base64Decoder.decode(it) }
|
||||
.toList()
|
||||
|
||||
assertEquals(2, signatures.size)
|
||||
signatures.forEach {
|
||||
assertEquals(32, it.size)
|
||||
}
|
||||
assertFalse("Unique", signatures[0].contentEquals(signatures[1]))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token header contains algorithm`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals("HS256", parseTokenHeader(token)["alg"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token header contains type`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals("JWT", parseTokenHeader(token)["typ"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token body contains subject`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals("jitsi-server-domain", parseTokenBody(token)["sub"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token body contains issuer`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals("jitsi-server-domain", parseTokenBody(token)["iss"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token body contains audience`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals("https://jitsi-server-domain", parseTokenBody(token)["aud"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token body contains room claim`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals("*", parseTokenBody(token)["room"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token body contains matrix data`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals(mutableMapOf("room_id" to "room-id", "server_name" to "matrix-server-name", "token" to "matrix-token"), parseMatrixData(token))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `token body contains user data`() {
|
||||
val token = createToken()
|
||||
|
||||
assertEquals(mutableMapOf("name" to "user-display-name", "avatar" to "user-avatar-url"), parseUserData(token))
|
||||
}
|
||||
|
||||
private fun createToken(): String {
|
||||
return createToken("matrix-token")
|
||||
}
|
||||
|
||||
private fun createToken(accessToken: String): String {
|
||||
val openIdToken = OpenIdToken(accessToken, "matrix-token-type", "matrix-server-name", -1)
|
||||
return factory.create(openIdToken, "jitsi-server-domain", "room-id", "user-avatar-url", "user-display-name")
|
||||
}
|
||||
|
||||
private fun parseTokenHeader(token: String): Map<String, String> {
|
||||
return parseTokenPart(token.split(".")[0], stringToString)
|
||||
}
|
||||
|
||||
private fun parseTokenBody(token: String): Map<String, Any> {
|
||||
return parseTokenPart(token.split(".")[1], stringToAny)
|
||||
}
|
||||
|
||||
private fun parseMatrixData(token: String): Map<*, *> {
|
||||
return (parseTokenBody(token)["context"] as Map<*, *>)["matrix"] as Map<*, *>
|
||||
}
|
||||
|
||||
private fun parseUserData(token: String): Map<*, *> {
|
||||
return (parseTokenBody(token)["context"] as Map<*, *>)["user"] as Map<*, *>
|
||||
}
|
||||
|
||||
private fun <T> parseTokenPart(value: String, type: ParameterizedType): T {
|
||||
val decoded = String(base64Decoder.decode(value))
|
||||
val adapter: JsonAdapter<T> = moshi.adapter(type)
|
||||
return adapter.fromJson(decoded)!!
|
||||
}
|
||||
}
|
|
@ -75,10 +75,15 @@ class FakeSharedSecretStorageService : SharedSecretStorageService by mockk() {
|
|||
|
||||
override fun checkShouldBeAbleToAccessSecrets(secretNames: List<String>, keyId: String?) = integrityResult
|
||||
|
||||
@Deprecated("Requesting custom secrets not yet support by rust stack, prefer requestMissingSecrets")
|
||||
override suspend fun requestSecret(name: String, myOtherDeviceId: String) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override suspend fun requestMissingSecrets() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
fun givenIsRecoverySetupReturns(isRecoverySetup: Boolean) {
|
||||
every { isRecoverySetup() } returns isRecoverySetup
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue