Merge branch 'develop' into aleksandrs/6786_inactive_sessions_screen

# Conflicts:
#	RiotSwiftUI/Modules/UserSessions/UserSessionDetails/UserSessionDetailsViewModel.swift
This commit is contained in:
Aleksandrs Proskurins 2022-10-05 11:51:08 +03:00
commit 7e09a6ece5
56 changed files with 712 additions and 216 deletions

View file

@ -1,3 +1,38 @@
## Changes in 1.9.8 (2022-10-04)
🙌 Improvements
- UserSessions: Extended device information (PSG-772). ([#6766](https://github.com/vector-im/element-ios/pull/6766))
- Settings: Add labs flags for new session manager (PSG-792, PSG-799). ([#6780](https://github.com/vector-im/element-ios/pull/6780))
- User session details: Include browser version for web sessions (PSG-761). ([#6788](https://github.com/vector-im/element-ios/pull/6788))
- Upgrade MatrixSDK version ([v0.24.0](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.24.0)).
- Include concrete device model in user agent (PSG-754) ([#6742](https://github.com/vector-im/element-ios/issues/6742))
- CryptoV2: Manual device verification ([#6781](https://github.com/vector-im/element-ios/issues/6781))
- User sessions: Add support for MSC3881 ([#6787](https://github.com/vector-im/element-ios/issues/6787))
🐛 Bugfixes
- Voiceover: Add labels to User Menu and My Spaces buttons on the All Chats view. ([#6580](https://github.com/vector-im/element-ios/issues/6580))
- Media: Avoid redundant reloads on media viewer. ([#6717](https://github.com/vector-im/element-ios/issues/6717))
- Pass country code into MSISDN requests ([#6723](https://github.com/vector-im/element-ios/issues/6723))
- Fix render of links with both characters requiring percent encoding and markdown-like syntax ([#6748](https://github.com/vector-im/element-ios/issues/6748))
- Fix crash when scrolling chat list ([#6749](https://github.com/vector-im/element-ios/issues/6749))
- App Layout: Unable to send message after filtering for room ([#6755](https://github.com/vector-im/element-ios/issues/6755))
- App Layout: Fix missing toolbar for users with no rooms. ([#6796](https://github.com/vector-im/element-ios/pull/6796))
- Fix code block background colour ([#6778](https://github.com/vector-im/element-ios/issues/6778))
- Fix navigation bars visibility on iOS 16. ([#6799](https://github.com/vector-im/element-ios/pull/6799))
🧱 Build
- Fix crash when scrolling chat list ([#6757](https://github.com/vector-im/element-ios/pull/6757))
🚧 In development 🚧
- Device manager: User session details screen. ([#6693](https://github.com/vector-im/element-ios/issues/6693))
- Device manager: Session overview screen. ([#6753](https://github.com/vector-im/element-ios/issues/6753))
- Device Manager: Link current session to session overview. ([#6770](https://github.com/vector-im/element-ios/issues/6770))
## Changes in 1.9.7 (2022-09-28)
🙌 Improvements

View file

@ -15,5 +15,5 @@
//
// Version
MARKETING_VERSION = 1.9.8
CURRENT_PROJECT_VERSION = 1.9.8
MARKETING_VERSION = 1.9.9
CURRENT_PROJECT_VERSION = 1.9.9

View file

@ -16,7 +16,7 @@ use_frameworks!
# - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for MatrixSDK repo. Used by Fastfile during CI
#
# Warning: our internal tooling depends on the name of this variable name, so be sure not to change it
$matrixSDKVersion = '= 0.23.19'
$matrixSDKVersion = '= 0.24.0'
# $matrixSDKVersion = :local
# $matrixSDKVersion = { :branch => 'develop'}
# $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } }

View file

@ -56,9 +56,9 @@ PODS:
- LoggerAPI (1.9.200):
- Logging (~> 1.1)
- Logging (1.4.0)
- MatrixSDK (0.23.19):
- MatrixSDK/Core (= 0.23.19)
- MatrixSDK/Core (0.23.19):
- MatrixSDK (0.24.0):
- MatrixSDK/Core (= 0.24.0)
- MatrixSDK/Core (0.24.0):
- AFNetworking (~> 4.0.0)
- GZIP (~> 1.3.0)
- libbase58 (~> 0.1.4)
@ -66,9 +66,9 @@ PODS:
- OLMKit (~> 3.2.5)
- Realm (= 10.27.0)
- SwiftyBeaver (= 1.9.5)
- MatrixSDK/CryptoSDK (0.23.19):
- MatrixSDK/CryptoSDK (0.24.0):
- MatrixSDKCrypto (= 0.1.0)
- MatrixSDK/JingleCallStack (0.23.19):
- MatrixSDK/JingleCallStack (0.24.0):
- JitsiMeetSDK (= 5.0.2)
- MatrixSDK/Core
- MatrixSDKCrypto (0.1.0)
@ -123,8 +123,8 @@ DEPENDENCIES:
- KeychainAccess (~> 4.2.2)
- KTCenterFlowLayout (~> 1.3.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixSDK (= 0.23.19)
- MatrixSDK/JingleCallStack (= 0.23.19)
- MatrixSDK (= 0.24.0)
- MatrixSDK/JingleCallStack (= 0.24.0)
- OLMKit
- PostHog (~> 1.4.4)
- ReadMoreTextView (~> 3.0.1)
@ -221,7 +221,7 @@ SPEC CHECKSUMS:
libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75
LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d
Logging: beeb016c9c80cf77042d62e83495816847ef108b
MatrixSDK: a60a00635006c539dce654253e8f0544ea996111
MatrixSDK: 196ae670143c5169ca9d02ff4d4a87f1e4dd8f08
MatrixSDKCrypto: 4b9146d5ef484550341be056a164c6930038028e
OLMKit: da115f16582e47626616874e20f7bb92222c7a51
PostHog: 4b6321b521569092d4ef3a02238d9435dbaeb99f
@ -241,6 +241,6 @@ SPEC CHECKSUMS:
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
PODFILE CHECKSUM: 400334cf1580361b831a632dcc025f2029e56b6e
PODFILE CHECKSUM: f8957c6eb2617c1f8a9174c1c5eac5f2bd67a599
COCOAPODS: 1.11.2

View file

@ -29,7 +29,8 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
disableMainThreadChecker = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
@ -53,6 +54,15 @@
</Testables>
<CommandLineArguments>
</CommandLineArguments>
<CodeCoverageTargets>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57B13CC4586E9D43ED24DE1E"
BuildableName = "Riot.app"
BlueprintName = "Riot"
ReferencedContainer = "container:Riot.xcodeproj">
</BuildableReference>
</CodeCoverageTargets>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"

View file

@ -64,16 +64,16 @@
"auth_reset_password_next_step_button" = "Ich habe meine E-Mail-Adresse verifiziert";
"auth_reset_password_email_validation_message" = "Eine E-Mail wurde an %@ gesendet. Wenn du dem Link dort gefolgt bist, klicke unten.";
// Chat creation
"room_creation_title" = "Neuer Chat";
"room_creation_title" = "Neue Unterhaltung";
"room_creation_account" = "Konto";
"room_creation_appearance" = "Aussehen";
"room_creation_appearance_name" = "Name";
"room_creation_appearance_picture" = "Avatar (optional)";
"room_creation_privacy" = "Datenschutz";
"room_creation_private_room" = "Dieser Chat ist privat";
"room_creation_public_room" = "Dieser Chat ist öffentlich";
"room_creation_private_room" = "Diese Unterhaltung ist privat";
"room_creation_public_room" = "Diese Unterhaltung ist öffentlich";
"room_creation_make_public" = "Mache öffentlich";
"room_creation_make_public_prompt_title" = "Diesen Chat öffentlich machen?";
"room_creation_make_public_prompt_title" = "Diese Unterhaltung öffentlich machen?";
"room_creation_keep_private" = "Privat lassen";
"room_creation_make_private" = "Mache privat";
"room_creation_wait_for_creation" = "Es wird gerade schon ein Raum erstellt. Bitte warten.";
@ -85,7 +85,7 @@
"room_recents_no_conversation" = "Keine Räume";
"room_recents_low_priority_section" = "NIEDRIGE PRIORITÄT";
"room_recents_invites_section" = "EINLADUNGEN";
"room_recents_start_chat_with" = "Starte Chat";
"room_recents_start_chat_with" = "Unterhaltung beginnen";
"room_recents_create_empty_room" = "Erstelle Raum";
"room_recents_join_room" = "Tritt Raum bei";
"room_recents_join_room_title" = "Trete einem Raum bei";
@ -121,9 +121,9 @@
"room_participants_leave_prompt_title" = "Raum verlassen";
"room_participants_leave_prompt_msg" = "Bist du sicher, dass du den Raum verlassen willst?";
"room_participants_remove_prompt_title" = "Bestätigung";
"room_participants_remove_prompt_msg" = "Bist du sicher, dass du %@ aus dem Chat entfernen möchtest?";
"room_participants_remove_prompt_msg" = "Bist du sicher, dass du %@ aus der Unterhaltung entfernen möchtest?";
"room_participants_invite_prompt_title" = "Bestätigung";
"room_participants_invite_prompt_msg" = "Bist du sicher, dass du %@ in diesen Chat einladen möchtest?";
"room_participants_invite_prompt_msg" = "Bist du sicher, dass du %@ in diese Unterhaltung einladen möchtest?";
"room_participants_filter_room_members" = "Mitglieder filtern";
"room_participants_invite_malformed_id_title" = "Fehler beim Einladen";
"room_participants_invited_section" = "EINGELADEN";
@ -131,7 +131,7 @@
"room_participants_offline" = "Offline";
"room_participants_unknown" = "Unbekannt";
"room_participants_now" = "jetzt";
"room_participants_action_section_direct_chats" = "Direkte Chats";
"room_participants_action_section_direct_chats" = "Direktnachrichten";
"room_participants_action_section_devices" = "Sitzungen";
"room_participants_action_section_other" = "Optionen";
"room_participants_action_invite" = "Einladen";
@ -142,7 +142,7 @@
"room_participants_action_unignore" = "Alle Nachrichten dieser Person zeigen";
"room_participants_action_set_moderator" = "Moderationsrechte vergeben";
"room_participants_action_set_admin" = "Administrationsrechte vergeben";
"room_participants_action_start_new_chat" = "Starte neuen Chat";
"room_participants_action_start_new_chat" = "Unterhaltung beginnen";
"room_participants_action_start_video_call" = "Starte Video-Anruf";
"room_participants_action_mention" = "Erwähnen";
// Chat
@ -239,7 +239,7 @@
"settings_new_password" = "Neues Passwort";
"settings_confirm_password" = "Bestätige Passwort";
"settings_password_updated" = "Das Passwort deines Matrix-Kontos wurde aktualisiert";
"settings_crypto_device_name" = "Öffentlicher Sitzungs-Name: ";
"settings_crypto_device_name" = "Sitzungsname: ";
"settings_crypto_device_key" = "\nSitzungs-Schlüssel:\n";
"settings_crypto_export" = "Schlüssel exportieren";
"room_details_settings" = "Einstellungen";
@ -303,7 +303,7 @@
"room_participants_action_start_voice_call" = "Starte Sprach-Anruf";
"room_ongoing_conference_call" = "Laufender Konferenz-Anruf. Trete bei als %@ oder %@.";
"room_event_action_redact" = "Entfernen";
"room_warning_about_encryption" = "Ende-zu-Ende Verschlüsselung ist in Beta und ist evtl. nicht zuverlässig.\n\nMan sollte noch nicht darauf vertrauen, dass die Daten sicher sind.\n\nGeräte werden Nachrichten von vor dem Beitritt des Raumes nicht entschlüsseln können.\n\nVerschlüsselte Nachrichten sind nicht lesbar auf Clients, die die Verschlüsselung noch nicht implementiert haben.";
"room_warning_about_encryption" = "Ende-zu-Ende-Verschlüsselung ist in Beta und ist evtl. nicht zuverlässig.\n\nMan sollte noch nicht darauf vertrauen, dass die Daten sicher sind.\n\nGeräte werden Nachrichten von vor dem Beitritt des Raumes nicht entschlüsseln können.\n\nVerschlüsselte Nachrichten sind nicht lesbar in Anwendungen, die die Verschlüsselung noch nicht implementiert haben.";
"unknown_devices_alert" = "Dieser Raum enthält unbekannte Sitzungen, die nicht verifiziert wurden.\nDas bedeutet, es gibt keine Garantie, dass sie den angegebenen Benutzern gehört.\nWir empfehlen eine Überprüfung für jedes Gerät, bevor du weitermachst. Du kannst die Nachricht auch ohne Verifizierung erneut senden.";
"room_preview_unlinked_email_warning" = "Diese Einladung wurde an %@ gesendet, welche diesem Konto nicht zugeordnet ist. Möglicherweise möchtest du dich mit einem anderen Konto anmelden oder diese E-Mail zu deinem Konto hinzufügen.";
"room_preview_try_join_an_unknown_room" = "Du versuchst auf %@ zuzugreifen. Möchtest du dem Raum beitreten um teilzunehmen?";
@ -313,12 +313,12 @@
"settings_phone_number" = "Telefon";
"settings_add_phone_number" = "Telefonnummer hinzufügen";
"settings_fail_to_update_profile" = "Profilaktualisierung fehlgeschlagen";
"settings_global_settings_info" = "Globale Benachrichtigungseinstellungen sind auf deinem %@ web-Client verfügbar";
"settings_global_settings_info" = "Globale Benachrichtigungseinstellungen sind in deiner %@ Web-Anwendung verfügbar";
"settings_pin_rooms_with_missed_notif" = "Pinnen von Räumen mit verpassten Benachrichtigungen";
"settings_pin_rooms_with_unread" = "Pinnen von Räumen mit ungelesenen Nachrichten";
"settings_contacts_discover_matrix_users" = "Entdecke andere Benutzer mittels E-Mail-Adressen oder Telefonnummern";
"settings_labs_e2e_encryption_prompt_message" = "Zum Fertigstellen der Verschlüsselung bitte neu anmelden.";
"settings_third_party_notices" = "Anmerkungen von Dritten";
"settings_third_party_notices" = "Drittanbieter-Lizenzen";
"settings_clear_cache" = "Cache löschen";
"settings_fail_to_update_password" = "Passwortänderung des Matrix-Kontos fehlgeschlagen";
"settings_crypto_device_id" = "\nSitzungs-ID: ";
@ -391,7 +391,7 @@
"bug_report_description" = "Beschreibe den Fehler. Was hast du gemacht? Was hast du erwartet? Was ist tatsächlich passiert?";
"bug_crash_report_title" = "Absturzmeldung";
"bug_crash_report_description" = "Bitte beschreibe was du vor dem Absturz gemacht hast:";
"bug_report_logs_description" = "Um Probleme analysieren zu können werden Protokolldateien dieses Clients mit dem Fehlerbericht gesendet. Wenn du nur den Text oben senden willst, bitte abwählen:";
"bug_report_logs_description" = "Um Probleme analysieren zu können, werden Protokolldateien dieser Anwendung mit dem Fehlerbericht gesendet. Wenn du nur den Text oben senden willst, bitte abwählen:";
"bug_report_send_logs" = "Sende Protokolldateien";
"bug_report_send_screenshot" = "Sende Bildschirmfoto";
"bug_report_progress_zipping" = "Sammele Protokolle";
@ -427,7 +427,7 @@
"send_to" = "Sende an %@";
"sending" = "Senden";
"room_event_failed_to_send" = "Senden fehlgeschlagen";
"room_details_direct_chat" = "Direkter Chat";
"room_details_direct_chat" = "Direktnachrichten";
"room_details_fail_to_update_room_direct" = "Setzen der Direktkennzeichnung in diesem Raum fehlgeschlagen";
"event_formatter_widget_added" = "Widget %@ wurde von %@ hinzugefügt";
"event_formatter_widget_removed" = "Widget %@ wurde von %@ entfernt";
@ -610,14 +610,14 @@
"key_backup_recover_invalid_passphrase" = "Sicherung konnte mit dieser Phrase nicht entschlüsselt werden: Bitte stelle sicher, dass du die richtige Sicherungsphrase eingegeben hast.";
"key_backup_recover_invalid_recovery_key_title" = "Ungültiger Sicherungsschlüssel";
"key_backup_recover_invalid_recovery_key" = "Sicherung konnte mit diesem Schlüssel nicht entschlüsselt werden: Bitte stelle sicher, dass du den richtigen Sicherungsschlüssel eingegeben hast.";
"key_backup_recover_from_passphrase_info" = "Nutze deine Sicherungsphrase um deinen sicheren Chatverlauf zu entschlüsseln";
"key_backup_recover_from_passphrase_info" = "Nutze deine Sicherungsphrase, um deinen sicheren Nachrichtenverlauf zu entschlüsseln";
"key_backup_recover_from_passphrase_passphrase_title" = "Eingeben";
"key_backup_recover_from_passphrase_passphrase_placeholder" = "Phrase eingeben";
"key_backup_recover_from_passphrase_recover_action" = "Historie entschlüsseln";
"key_backup_recover_from_passphrase_lost_passphrase_action_part1" = "Kennst deine Sicherungsphrase nicht? Du kannst ";
"key_backup_recover_from_passphrase_lost_passphrase_action_part2" = "deinen Sicherungsschlüssel nutzen";
"key_backup_recover_from_passphrase_lost_passphrase_action_part3" = ".";
"key_backup_recover_from_recovery_key_info" = "Nutze deinen Sicherungsschlüssel, um deine Chatverläufe zu entschlüsseln";
"key_backup_recover_from_recovery_key_info" = "Nutze deinen Sicherungsschlüssel, um deinen Nachrichtenverlauf zu entschlüsseln";
"key_backup_recover_from_recovery_key_recovery_key_title" = "Eingeben";
"key_backup_recover_from_recovery_key_recovery_key_placeholder" = "Sicherungsschlüssel eingeben";
"key_backup_recover_from_recovery_key_recover_action" = "Verlauf entschlüsseln";
@ -649,7 +649,7 @@
"key_backup_setup_intro_manual_export_action" = "Manueller Schlüssel-Export";
// String for App Store
"store_short_description" = "Sicherer, dezentralisierter Chat/VoIP";
"store_full_description" = "Element ist die neue Art von Messenger- und Kooperations-App, die:\n\n1. dir die Kontrolle gibt deine Privatsphäre zu schützen,\n2. dir die Kommunikation mit anderen Personen im Matrix-Netzwerk und darüber hinaus Integration in Apps wie Slack ermöglicht,\n3. dich vor Werbung, Datenerfassung, Hintertüren und geschlossene Plattformen schützt,\n4. dich durch End-to-End-Verschlüsselung absichert und mit Quersignaturen andere überprüft.\n\nElement unterscheidet sich grundlegend von anderen Messaging- und Kooperations-Diensten, da es dezentralisiert und open-source ist.\n\nMit Element kannst du dich selbst hosten oder einen Host auswählen, sodass du Datenschutz, Eigentum und Kontrolle über deine Daten und Konversationen hast. Du erhältst Zugriff auf ein offenes Netzwerk und bist nicht auf Element-Nutzer beschränkt. Und es ist sehr sicher.\n\nElement ist in der Lage, all dies zu tun, da es mit Matrix arbeitet - dem Standard für offene, dezentrale Kommunikation.\n\nMit Element hast du die Kontrolle, indem du auswählen kannst, wer deine Konversationen hostet. In der Element-App kannst du verschiedene Hosts auswählen:\n\n1. Hole dir ein kostenloses Konto auf dem öffentlichen Server von matrix.org\n2. Hoste dein Konto selbst, indem du einen Server auf deiner eigenen Hardware ausführst\n3. Melde dich für ein Konto auf einem benutzerdefinierten Server an, indem du einfach die Hosting-Plattform von Element Matrix Services abonnierst\n\nWarum Element?\n\nBESITZE DEINE DATEN: Du entscheidest, wo deine Daten und Nachrichten aufbewahrt werden sollen. Du besitzt und kontrollierst sie, nicht irgendein MEGAKONZERN, die deine Daten verwertet oder Dritten Zugriff gewährt.\n\nOPEN MESSAGING UND ZUSAMMENARBEIT: Du kannst mit allen anderen Mitgliedern des Matrix-Netzwerks chatten, unabhängig davon, ob sie Element oder eine andere Matrix-App verwenden, sogar selbst wenn sie ein anderes Messaging-System wie Slack, IRC oder XMPP verwenden.\n\nSUPERSICHER: Echte End-to-End-Verschlüsselung (nur diejenigen in der Konversation können Nachrichten entschlüsseln) und Quersignierung, um die Geräte der Konversationsteilnehmer zu überprüfen.\n\nVOLLSTÄNDIGE KOMMUNIKATION: Messaging, Sprach- und Videoanrufe, Dateifreigabe, Bildschirmfreigabe und eine ganze Reihe von Integrationen, Bots und Widgets. Baue Räume, Gemeinschaften, bleib in Kontakt und erledige Dinge.\n\nÜBERALL, WO DU BIST: Bleibe mit dem vollständig synchronisierten Nachrichtenverlauf auf all deinen Geräten und im Internet (unter https://element.io/app) unabhängig voneinander in Kontakt.";
"store_full_description" = "Element ist die neue Art von Kommunikations- und Kooperations-App, die:\n\n1. dir die Kontrolle gibt, deine Privatsphäre zu schützen\n2. dir die Kommunikation mit anderen Personen im Matrix-Netzwerk und darüber hinaus Integration in Apps wie Slack ermöglicht\n3. dich vor Werbung, Datenerfassung, Hintertüren und geschlossene Plattformen schützt\n4. dich durch Ende-zu-Ende-Verschlüsselung absichert und mit Quersignaturen andere überprüft\n\nElement unterscheidet sich grundlegend von anderen Kommunikations- und Kooperations-Diensten, da es dezentralisiert und Open-Source ist.\n\nElement lässt dir die Wahl, ob du einen eigenen Server betreibst oder einen bestehenden wählst, sodass du Datenschutz, Eigentum und Kontrolle über deine Daten und Konversationen hast. Du erhältst Zugriff auf ein offenes Netzwerk und bist nicht auf Element-Nutzer beschränkt. Und es ist sehr sicher.\n\nElement ist in der Lage, all dies zu tun, da es mit Matrix arbeitet dem Standard für offene, dezentrale Kommunikation.\n\nMit Element hast du die Kontrolle, indem du auswählen kannst, bei wem deine Unterhaltungen liegen. In der Element-App kannst du verschiedene Betreiber auswählen:\n\n1. Hole dir ein kostenloses Konto auf dem öffentlichen Server von matrix.org\n2. Beherberge dein Konto selbst, indem du einen Server auf deiner eigenen Hardware betreibst\n3. Registriere ein Konto auf einem maßgeschneiderten Server, indem du einfach die Element-Matrix-Services abonnierst\n\nWarum Element?\n\nBESITZE DEINE DATEN: Du entscheidest, wo deine Daten und Nachrichten aufbewahrt werden sollen. Du besitzt und kontrollierst sie, nicht irgendein MEGAKONZERN, der deine Daten verwertet oder dritten Zugriff gewährt.\n\nOFFENE KOMMUNIKATION UND ZUSAMMENARBEIT: Du kannst mit allen anderen Mitgliedern des Matrix-Netzwerks schreiben, unabhängig davon, ob sie Element oder eine andere Matrix-App verwenden, selbst wenn sie eine andere Plattform wie beispielsweise Slack, IRC oder XMPP verwenden.\n\nSUPER SICHER: Echte Ende-zu-Ende-Verschlüsselung (nur diejenigen in der Konversation können Nachrichten entschlüsseln) und Quersignierung, um die Geräte der Konversationsteilnehmer zu überprüfen.\n\nVOLLSTÄNDIGE KOMMUNIKATION: Schreiben, Sprach- und Videoanrufe, Dateifreigabe, Bildschirmfreigabe und eine ganze Reihe von Integrationen, Bots und Widgets. Erschaffe Räume, Gemeinschaften, bleib in Kontakt und erledige Dinge.\n\nÜBERALL, WO DU BIST: Bleibe mit dem vollständig synchronisierten Nachrichtenverlauf auf all deinen Geräten und im Internet (unter https://element.io/app) unabhängig voneinander in Kontakt.";
"auth_login_single_sign_on" = "Anmelden";
"auth_autodiscover_invalid_response" = "Ungültige Antwort beim Entdecken des Heimservers";
"room_message_unable_open_link_error_message" = "Konnte Link nicht öffnen.";
@ -751,7 +751,7 @@
// MARK: Start
"device_verification_start_title" = "Verifizieren durch Vergleichen eines kurzen Textes";
"device_verification_start_wait_partner" = "Warten auf Annahme durch Partner…";
"device_verification_start_use_legacy" = "Passiert nichts? Noch nicht alle Clients unterstützen die interaktive Verifizierung. Verwende die alte Verifizierungsmethode.";
"device_verification_start_use_legacy" = "Passiert nichts? Noch nicht alle Anwendungen unterstützen die interaktive Verifizierung. Verwende die alte Verifizierungsmethode.";
"device_verification_start_use_legacy_action" = "Verwende alte Verifizierungsmethode";
// MARK: Verify
"device_verification_verify_title_emoji" = "Überprüfe diese Sitzung indem du bestätigst, dass das folgende Emoji auf dem Bildschirm des Gegenüber angezeigt wird";
@ -797,7 +797,7 @@
"photo_library_access_not_granted" = "%@ hat keine Berechtigung zum Zugriff auf die Fotobibliothek. Bitte ändere die Datenschutzeinstellungen";
"auth_forgot_password_error_no_configured_identity_server" = "Es ist kein Identitätsserver konfiguriert: Füge einen hinzu, um das Kennwort deines Matrix-Kontos zurückzusetzen.";
"room_creation_error_invite_user_by_email_without_identity_server" = "Es ist kein Identitätsserver konfiguriert, sodass du keine Teilnehmenden mit einer E-Mail hinzufügen kannst.";
"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "Es ist kein Identitätsserver konfiguriert, sodass du keinen Chat mit einem Kontakt über eine E-Mail starten kannst.";
"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "Da kein Identitätsserver konfiguriert wurde, kannst du keine Unterhaltung mittels E-Mail-Adresse beginnen.";
// Service terms
"service_terms_modal_title" = "Nutzungsbedingungen";
"service_terms_modal_accept_button" = "Akzeptieren";
@ -1003,7 +1003,7 @@
"security_settings_secure_backup_delete" = "Backup löschen";
"security_settings_crosssigning_info_ok" = "Quersignierung ist bereit zur Anwendung.";
"security_settings_crosssigning_reset" = "Zurücksetzen";
"security_settings_coming_soon" = "Entschuldigung, diese Funktion ist noch nicht für %@ iOS verfügbar. Bitte nutze einen anderen Matrix-Client, um es einzurichten. %@ iOS wird es benutzen.";
"security_settings_coming_soon" = "Entschuldigung, diese Funktion ist noch nicht für %@ iOS verfügbar. Bitte nutze eine andere Matrix-Anwendung, um es einzurichten. %@ iOS wird es benutzen.";
"security_settings_user_password_description" = "Bestätige deine Identität durch Eingabe des Passworts deines Matrix-Kontos";
// AuthenticatedSessionViewControllerFactory
"authenticated_session_flow_not_supported" = "Diese App unterstützt nicht diese Authentifizierungsmethode für deinen Heimserver.";
@ -1051,7 +1051,7 @@
"key_verification_self_verify_unverified_sessions_alert_message" = "Verifiziere alle deine Sitzungen, um sicher zu stellen, dass dein Konto und deine Nachrichten sicher sind.";
"key_verification_self_verify_unverified_sessions_alert_validate_action" = "Überprüfung";
"device_verification_self_verify_wait_new_sign_in_title" = "Diese Anmeldung verifizieren";
"device_verification_self_verify_wait_additional_information" = "Dies funktioniert mit %@ oder einem anderen Matrix-Client, der Quersignierung unterstützt.";
"device_verification_self_verify_wait_additional_information" = "Dies funktioniert mit %@ oder einer anderen Matrix-Anwendung, die Quersignierung unterstützt.";
"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "Sicherungsschlüssel verwenden";
"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "Sicherungsphrase oder -schlüssel verwenden";
"device_verification_self_verify_wait_recover_secrets_additional_information" = "Falls du keinen Zugang zu einer existierenden Sitzung hast";
@ -1062,7 +1062,7 @@
"key_verification_verify_sas_additional_information" = "Für ultimative Sicherheit verwende ein anderes vertrauenswürdiges Kommunikationsmittel oder mache es persönlich.";
"key_verification_manually_verify_device_title" = "Verifiziere manuell mit einem Text";
"key_verification_manually_verify_device_instruction" = "Vergleiche die folgenden Zeichen mit den Einstellungen in der Sitzung des anderen Nutzers und bestätige:";
"key_verification_manually_verify_device_name_title" = "Name der Sitzung";
"key_verification_manually_verify_device_name_title" = "Sitzungsname";
"key_verification_manually_verify_device_id_title" = "Sitzungs-ID";
"key_verification_manually_verify_device_key_title" = "Sitzungsschlüssel";
"key_verification_manually_verify_device_additional_information" = "Falls sie nicht übereinstimmen, wurde die Kommunikation vielleicht kompromittiert.";
@ -1178,19 +1178,19 @@
"searchable_directory_x_network" = "%@ Netzwerk";
"searchable_directory_search_placeholder" = "Name oder ID";
"create_room_title" = "Neuer Raum";
"create_room_section_header_name" = "Raumname";
"create_room_section_header_name" = "NAME";
"create_room_placeholder_name" = "Name";
"create_room_section_header_topic" = "THEMA (OPTIONAL)";
"create_room_placeholder_topic" = "Um was geht es in diesem Raum?";
"create_room_section_header_encryption" = "Raumverschlüsselung";
"create_room_section_header_encryption" = "VERSCHLÜSSELUNG";
"create_room_enable_encryption" = "Verschlüsselung aktivieren";
"create_room_section_footer_encryption" = "Verschlüsselung kann im Nachhinein nicht deaktiviert werden.";
"create_room_section_header_type" = "Raumtyp";
"create_room_section_header_type" = "BEITRITTSBERECHTIGTE";
"create_room_type_private" = "Privater Raum (nur Eingeladene)";
"create_room_type_public" = "Öffentlicher Raum (jeder hat Zugriff)";
"create_room_section_footer_type" = "Personen können einen privaten Raum nur mit Einladung betreten.";
"create_room_show_in_directory" = "Im Raumverzeichnis zeigen";
"create_room_section_header_address" = "Raum-Adresse";
"create_room_section_header_address" = "ADRESSE";
"create_room_placeholder_address" = "#testraum:matrix.org";
"room_info_list_room_encrypted" = "Nachrichten in diesem Raum sind Ende-zu-Ende verschlüsselt";
"room_info_list_one_member" = "1 Mitglied";
@ -1241,9 +1241,9 @@
// MARK: - Favourites
"favourites_empty_view_title" = "Favorisierte Räume und Personen";
"favourites_empty_view_information" = "Um einen Lieblingschat hinzuzufügen, halte diesen gedrückt und wähle den Stern aus. Du findest deine Lieblingschats gesammelt hier.";
"home_empty_view_information" = "Die sichere Chat-App für Teams, Freunde und Organisationen. Tippe unten auf das +, um Leute und Räume hinzuzufügen.";
"rooms_empty_view_information" = "Noch keine Chat-Räume vorhanden. Tippe auf das +, um einem Raum beizutreten oder einen neuen zu erstellen.";
"favourites_empty_view_information" = "Du kannst Unterhaltungen favorisieren am schnellsten geht das, indem du sie gedrückt hältst. Tippe auf den Stern und schon werden sie hier angezeigt.";
"home_empty_view_information" = "Die sichere Kommunikations-App für Gruppen, Freunde und Organisationen. Tippe unten auf das +, um Personen und Räume hinzuzufügen.";
"rooms_empty_view_information" = "Räume sind großartig für Gruppenunterhaltungen, ob privat oder öffentlich. Tippe auf +, bestehende Räume zu finden oder neue zu erstellen.";
"invite_friends_share_text" = "Hey! Sprich mit mir auf %@: %@";
// MARK: - Invite friends
@ -1318,7 +1318,7 @@
"room_accessibility_video_call" = "Videoanruf";
"room_message_replying_to" = "%@ anworten";
"room_message_editing" = "Bearbeitung";
"space_beta_announce_information" = "Spaces bieten neue Möglichkeiten um Räume und Personen zu gruppieren. Sie sind noch nicht auf iOS verfügbar, aber du kannst sie jetzt schon mit Web und Desktop nutzen.";
"space_beta_announce_information" = "Spaces sind eine neue Möglichkeit, Räume und Personen zu gruppieren. Sie sind noch nicht auf iOS verfügbar, aber du kannst sie jetzt schon mit Web und Desktop nutzen.";
"space_feature_unavailable_information" = "Spaces bieten neue Möglichkeiten um Räume und Personen zu gruppieren.\n\nBald werden sie auch hier verfügbar sein. Für den Moment kannst du ihnen auf einer der anderen Plattformen beitreten und hier auf alle Räume zugreifen, denen du dort beitrittst.";
"space_beta_announce_subtitle" = "Die verbesserte Version von Communities";
"space_beta_announce_title" = "Spaces sind bald verfügbar";
@ -1423,8 +1423,8 @@
"settings_messages_containing_at_room" = "@room";
"settings_messages_containing_user_name" = "Meinem Benutzernamen";
"settings_messages_containing_display_name" = "Meinem Anzeigenamen";
"settings_encrypted_group_messages" = "Verschlüsselten Gruppenchats";
"settings_group_messages" = "Gruppenchats";
"settings_encrypted_group_messages" = "Verschlüsselte Gruppennachrichten";
"settings_group_messages" = "Gruppennachrichten";
"settings_encrypted_direct_messages" = "Verschlüsselten Direktnachrichten";
"settings_direct_messages" = "Direktnachrichten";
"settings_notify_me_for" = "Benachrichtige mich bei";
@ -1500,7 +1500,7 @@
"contacts_address_book_permission_denied_alert_title" = "Kontakte deaktiviert";
"poll_edit_form_create_options" = "Erstelle Optionen";
"settings_discovery_accept_terms" = "Bedingungen des Identitätsservers akzeptieren";
"find_your_contacts_message" = "Lass dir von %@ deine Kontakte anzeigen um schnell mit denen zu chatten, die du am besten kennst.";
"find_your_contacts_message" = "Lass dir von %@ deine Kontakte anzeigen, um schnell mit denen zu schreiben, die du am besten kennst.";
"poll_timeline_votes_count" = "%lu Stimmen";
"poll_timeline_one_vote" = "1 Stimme";
"poll_edit_form_add_option" = "Option hinzufügen";
@ -1627,7 +1627,7 @@
"room_event_action_reply_in_thread" = "Thread";
"room_event_action_view_in_room" = "Im Raum anzeigen";
"location_sharing_open_open_street_maps" = "In OpenStreetMap öffnen";
"onboarding_use_case_title" = "Mit wem wirst du am meisten chatten?";
"onboarding_use_case_title" = "Mit wem wirst du am meisten schreiben?";
"onboarding_use_case_message" = "Wir helfen dir, dich zu verbinden";
"onboarding_use_case_personal_messaging" = "Freunde und Familie";
"onboarding_use_case_work_messaging" = "Teams";
@ -1694,7 +1694,7 @@
"set_default_power_level" = "Berechtigungsstufe zurücksetzen";
"set_moderator" = "Moderator setzen";
"set_admin" = "Administrator setzen";
"start_chat" = "Chat starten";
"start_chat" = "Unterhaltung beginnen";
"start_voice_call" = "Sprachanruf starten";
"start_video_call" = "Videoanruf starten";
"mention" = "Erwähnung";
@ -1872,7 +1872,7 @@
"attachment_cancel_upload" = "Hochladen abbrechen?";
"attachment_multiselection_size_prompt" = "Bilder senden als:";
"attachment_multiselection_original" = "Originalgröße";
"attachment_e2e_keys_file_prompt" = "Diese Datei enthält von einem Matrixclient exportierte Schlüssel.\nMöchtest du den Dateiinhalt sehen oder die Schlüssel importieren?";
"attachment_e2e_keys_file_prompt" = "Diese Datei enthält von einer Matrix-Anwendung exportierte Schlüssel.\nMöchtest du den Dateiinhalt sehen oder die Schlüssel importieren?";
"attachment_e2e_keys_import" = "Importiere...";
// Contacts
"contact_mx_users" = "Matrixbenutzer";
@ -1888,12 +1888,12 @@
"format_time_d" = "t";
// E2E import
"e2e_import_room_keys" = "Importiere Raumschlüssel";
"e2e_import_prompt" = "Dieser Prozess erlaubt es dir, Schlüssel zu importieren, die du vorher von einem anderen Matrixclient exportiert hast. Du kannst anschließend alle Nachrichten entschlüsseln, die auch bereits der andere Client entschlüsseln konnte.\nDie Exportdatei ist mit einer Passphrase geschützt. Gib die Passphrase hier ein, um die Datei zu importieren.";
"e2e_import_prompt" = "Dieser Prozess erlaubt es dir, Schlüssel zu importieren, die du vorher von einer anderen Matrix-Anwendung exportiert hast. Du kannst anschließend alle Nachrichten entschlüsseln, die auch bereits die andere Anwendung entschlüsseln konnte.\nDie Exportdatei ist mit einer Passphrase geschützt. Gib die Passphrase hier ein, um die Datei zu importieren.";
"e2e_import" = "Importieren";
"e2e_passphrase_enter" = "Passphrase eingeben";
// E2E export
"e2e_export_room_keys" = "Exportiere Raumschlüssel";
"e2e_export_prompt" = "Dieser Prozess erlaubt den Export von Schlüsseln, die du in verschlüsselten Räumen empfangen hast, in eine lokale Datei. Du kannst dann die Datei in einem anderen Matrixclient in Zukunft importieren, so dass dieser Client die Nachrichten auch entschlüsseln kann.\nDie exportierte Datei wird jedem der sie lesen kann erlauben, alle verschlüsselten Nachrichten sehen können, also verwahre die Datei sicher.";
"e2e_export_prompt" = "Dieser Prozess erlaubt den Export von Schlüsseln, die du in verschlüsselten Räumen empfangen hast, in eine lokale Datei. Du kannst dann die Datei in einer anderen Matrix-Anwendung importieren, sodass diese die Nachrichten auch entschlüsseln kann.\nDie exportierte Datei wird jedem, der sie lesen kann, erlauben, alle verschlüsselten Nachrichten sehen können, also verwahre die Datei sicher.";
"e2e_export" = "Exportiere";
"e2e_passphrase_confirm" = "Passphrase bestätigen";
"e2e_passphrase_empty" = "Die Passphrase darf nicht leer sein";
@ -2025,7 +2025,7 @@
"membership_ban" = "Gesperrt";
"num_members_one" = "%@ Benutzer";
"num_members_other" = "%@ Benutzer";
"kick" = "Entfernen";
"kick" = "Aus Unterhaltung entfernen";
"ban" = "Sperren";
"unban" = "Entsperren";
"message_unsaved_changes" = "Es gibt nicht gespeicherte Änderungen. Verlassen wird diese verwerfen.";
@ -2046,7 +2046,7 @@
// room details dialog screen
// contacts list screen
"invitation_message" = "Ich würde gerne über Matrix mit dir chatten. Du kannst dich auf https://matrix.org darüber informieren.";
"invitation_message" = "Ich würde gerne über Matrix mit dir schreiben. Du kannst dich auf https://matrix.org darüber informieren.";
// Settings screen
"settings_title_config" = "Konfiguration";
"settings_title_notifications" = "Benachrichtigungen";
@ -2054,7 +2054,7 @@
"notification_settings_disable_all" = "Alle Benachrichtigungen ausschalten";
"notification_settings_enable_notifications" = "Benachrichtigungen einschalten";
"notification_settings_enable_notifications_warning" = "Alle Benachrichtigungen sind momentan für alle Geräte ausgeschaltet.";
"notification_settings_global_info" = "Benachrichtigungseinstellungen werden in deinem Benutzerkonto gespeichert und zwischen allen Clients die das unterstützen geteilt (inklusive Desktop Benachrichtigungen). \n\nRegeln werden der Reihe nach angewandt; die erste Regel, die zutrifft, bestimmt das Resultat für die Nachricht.\nPro-Wort-Benachrichtigungen sind wichtiger als Pro-Raum-Benachrichtigungen, die wichtiger sind wie Pro-Absender-Benachrichtigungen.\nBei mehrfachen Regeln des gleichen Typs wird die erste in der Liste die zutrifft angewendet.";
"notification_settings_global_info" = "Benachrichtigungseinstellungen werden in deinem Benutzerkonto gespeichert und zwischen allen Anwendungen, die das unterstützen geteilt (inklusive Desktop-Benachrichtigungen). \n\nRegeln werden der Reihe nach angewandt; die erste Regel, die zutrifft, bestimmt das Resultat für die Nachricht.\nPro-Wort-Benachrichtigungen sind wichtiger als Pro-Raum-Benachrichtigungen, die wiederum wichtiger als Pro-Absender-Benachrichtigungen sind.\nBei mehrfachen Regeln des gleichen Typs wird, die erste in der Liste, die zutrifft, angewandt.";
"notification_settings_per_word_notifications" = "Pro-Wort-Benachrichtigungen";
"notification_settings_per_word_info" = "Suchwörter ignorieren Groß-/Kleinschreibung und können ein *-Platzhalter enthalten. Beispiele:\nfoo findet den String foo umgeben durch Trennzeichen (Satzzeichen, Leerzeichen, Zeilenanfang/ende).\nfoo* findet Worte die mit foo beginnen.\n*foo* findet jedes Wort das foo an beliebiger Stelle enthält.";
"notification_settings_always_notify" = "Immer benachrichtigen";
@ -2129,7 +2129,7 @@
"room_displayname_all_other_members_left" = "%@ (Verlassen)";
"notice_error_unformattable_event" = "** Nachricht kann nicht dargestellt werden. Bitte erstelle einen Bug-Report";
"home_syncing" = "Synchronisiere";
"settings_labs_use_only_latest_user_avatar_and_name" = "Immer aktuelle Profilbilder und Nicknamen anzeigen";
"settings_labs_use_only_latest_user_avatar_and_name" = "Aktuelle Profilbilder und Anzeigenamen im Verlauf anzeigen";
"room_participants_leave_success" = "Raum verlassen";
"room_participants_leave_processing" = "Verlassen";
"onboarding_display_name_title" = "Wähle einen Anzeigenamen";
@ -2220,7 +2220,7 @@
"authentication_forgot_password_waiting_button" = "E-Mail erneut senden";
"authentication_verify_email_input_title" = "Gib deine E-Mail-Adresse ein";
/* The placeholder will show the full Matrix ID that has been entered. */
"authentication_registration_username_footer_available" = "Andere Nutzer können dich als %@ finden";
"authentication_registration_username_footer_available" = "Andere können dich als %@ finden";
"authentication_registration_username" = "Nutzername";
"onboarding_celebration_message" = "Dein kannst dein Profil jederzeit in den Einstellungen ändern";
"authentication_registration_password_footer" = "8 Zeichen oder mehr";
@ -2351,7 +2351,7 @@
// Mark: - Space Creation
"spaces_creation_hint" = "Spaces sind eine neue Art, Räume und Personen zu gruppieren.";
"spaces_creation_hint" = "Spaces sind eine neue Möglichkeit, Räume und Personen zu gruppieren.";
"space_settings_current_address_message" = "Dein Space ist sichtbar unter\n%@";
"space_settings_update_failed_message" = "Aktualisieren der Space-Einstellungen fehlgeschlagen. Erneut versuchen?";
"space_settings_access_section" = "Wer hat Zugriff auf diesen Space?";
@ -2398,7 +2398,7 @@
"room_access_space_chooser_other_spaces_section" = "Andere Spaces oder Räume";
"room_access_settings_screen_setting_room_access" = "Lege Raumzugriff fest";
"room_access_settings_screen_upgrade_alert_upgrading" = "Raum upgraden";
"room_access_settings_screen_upgrade_alert_upgrade_button" = "Upgrade";
"room_access_settings_screen_upgrade_alert_upgrade_button" = "Aktualisieren";
"room_access_settings_screen_upgrade_alert_auto_invite_switch" = "Mitglieder automatisch zu neuem Raum einladen";
"room_access_settings_screen_upgrade_alert_message" = "Jeder in %@ kann diesen Raum finden und ihm beitreten - jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern.";
"room_access_settings_screen_upgrade_alert_title" = "Raum upgraden";
@ -2448,16 +2448,16 @@
"room_invites_empty_view_title" = "Nichts neues.";
"all_chats_edit_layout_add_filters_title" = "Filtere deine Nachrichten";
"all_chats_edit_layout_unreads" = "Ungelesene";
"all_chats_section_title" = "Chats";
"all_chats_section_title" = "Unterhaltungen";
// Mark: - All Chats
"all_chats_title" = "Alle Chats";
"all_chats_title" = "Alle Unterhaltungen";
"all_chats_empty_view_title" = "%@\nsieht ein bisschen leer aus.";
"all_chats_all_filter" = "Alle";
"all_chats_edit_layout_show_filters" = "Filter anzeigen";
"all_chats_edit_menu_leave_space" = "%@ verlassen";
"all_chats_onboarding_page_title3" = "Feedback geben";
"all_chats_onboarding_page_title3" = "Rückmeldung geben";
"room_invites_empty_view_information" = "Hier erscheinen deine Einladungen.";
"all_chats_onboarding_try_it" = "Probiere es aus";
"threads_discourage_information_1" = "Dein Heimserver unterstützt aktuell keine Threads, weshalb diese Funktion unzuverlässig sein könnte. Manche Thread-Nachrichten könnten nicht zuverlässig verfügbar sein. ";
@ -2465,29 +2465,59 @@
"spaces_create_subspace_title" = "Sub-Space erstellen";
"room_access_settings_screen_upgrade_alert_note" = "Bitte beachte, dass das Upgrade eine neue Version dieses Raums erstellt. Alle aktuellen Nachrichten bleiben in diesem archivierten Raum.";
"invite_to" = "Zu %@ einladen";
"all_chats_empty_unreads_placeholder_message" = "Hier werden ungelesene Nachrichten angezeigt, wenn welche vorhanden sind.";
"all_chats_empty_unreads_placeholder_message" = "Hier werden deine ungelesenen Nachrichten erscheinen, wenn du welche hast.";
"all_chats_edit_layout_show_recents" = "Historie anzeigen";
"all_chats_empty_list_placeholder_title" = "Keine ungelesenen Nachrichten vorhanden.";
"all_chats_empty_list_placeholder_title" = "Du bist auf dem neuesten Stand.";
"spaces_explore_rooms_format" = "%@ erkunden";
"room_access_settings_screen_upgrade_alert_message_no_param" = "Jeder in einem übergeordneten Space kann diesen Raum finden und ihm beitreten - jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern.";
"room_access_settings_screen_public_message" = "Sichtbar und zugänglich für jeden.";
"room_access_settings_screen_restricted_message" = "Sichtbar und betretbar für jeden Nutzer in einem Space.\nDu wählst, für welche Spaces dies gilt.";
"room_access_settings_screen_private_message" = "Nur sichtbar und betretbar für eingeladene Personen.";
"location_sharing_allow_background_location_message" = "Wenn du deinen Live-Standort teilen möchtest, benötigt Element den Standortzugriff auch im Hintergrund. Um den Zugriff zu ermöglichen, tippe auf Einstellungen > Standort und wähle Immer aus";
"space_selector_empty_view_information" = "Spaces sind ein Weg um Räume und Personen zu gruppieren. Erstelle einen Space um loszulegen.";
"all_chats_onboarding_title" = "Was ist neu?";
"space_selector_empty_view_information" = "Spaces sind eine neue Möglichkeit, Räume und Personen zu gruppieren. Erstelle einen Space, um zu beginnen.";
"all_chats_onboarding_title" = "Was ist neu";
"all_chats_onboarding_page_message3" = "Drücke auf dein Profil um uns Wissen zu lassen, was du denkst.";
"all_chats_onboarding_page_message2" = "Greife auf deine Spaces (unten-links) schneller und einfacher denn je zu.";
"all_chats_onboarding_page_message2" = "Greife auf deine Spaces (unten links) schneller und einfacher denn je zu.";
"all_chats_onboarding_page_title2" = "Auf Spaces zugreifen";
"all_chats_onboarding_page_message1" = "Um Element zu vereinfachen, sind Tabs nun optional. Verwalte diese mit dem Menü oben-rechts.";
"all_chats_empty_view_information" = "Die alles-in-einem sichere Chat-App für Teams, Freunde und Organisationen. Erstelle einen Chat oder trete einem existierenden Raum bei, um zu starten.";
"all_chats_empty_space_information" = "Spaces sind ein neuer Weg um Räume und Personen zu gruppieren. Füge einen existierenden Raum hinzu oder erstelle einen neuen, indem du den Knopf unten-rechts verwendest.";
"all_chats_onboarding_page_message1" = "Um dein Element zu vereinfachen, sind Tabs nun optional. Verwalte sie mit dem Menü oben rechts.";
"all_chats_empty_view_information" = "Die Komplettlösung für sichere Kommunikation unter Freunden, in Gruppen oder in Organisationen. Erstelle eine Unterhaltung oder trete einem bestehenden Raum bei, um loszulegen.";
"all_chats_empty_space_information" = "Spaces sind eine neue Möglichkeit, Räume und Personen zu gruppieren. Füge einen bestehenden Raum hinzu oder erstelle einen neuen mit der Schaltfläche unten rechts.";
"all_chats_edit_layout_sorting_options_title" = "Sortiere deine Nachrichten nach";
"space_detail_nav_title" = "Space-Details";
"all_chats_onboarding_page_title1" = "Willkommen zum neuen Layout!";
"all_chats_onboarding_page_title1" = "Willkommen in einer neuen Übersicht!";
"all_chats_edit_menu_space_settings" = "Space-Einstellungen";
"all_chats_user_menu_settings" = "Benutzer-Einstellungen";
"all_chats_user_menu_settings" = "Nutzereinstellungen";
"room_recents_recently_viewed_section" = "Kürzlich angesehen";
"all_chats_nothing_found_placeholder_message" = "Versuche, deine Suche anzupassen.";
"all_chats_edit_layout_recents" = "Historie";
"all_chats_edit_layout" = "Layout-Einstellungen";
"all_chats_edit_layout" = "Layouteinstellungen";
"spaces_creation_new_rooms_message" = "Wir werden für jedes Thema einen Raum erstellen.";
"create_room_section_footer_type_public" = "Sichtbar und betretbar für alle eingeladenen Personen, nicht nur jene, die sich im Space befinden.";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"existing" = "Bestehend";
"device_name_web" = "%@ Web";
"spaces_subspace_creation_visibility_title" = "Welche Art von Subspace möchtest du erstellen?";
"all_chats_edit_layout_pin_spaces_title" = "Spaces anpinnen";
"all_chats_edit_layout_add_filters_message" = "Filtere deine Nachrichten automatisch in Kategorien deiner Wahl";
"all_chats_edit_layout_add_section_message" = "Abschnitt an Startseite für schnellen Zugriff anpinnen";
"all_chats_edit_layout_add_section_title" = "Abschnitt zur Startseite hinzufügen";
"device_name_desktop" = "%@ Desktop";
"user_sessions_overview_current_session_section_title" = "AKTUELLE SITZUNG";
"user_sessions_overview_other_sessions_section_title" = "ANDERE SITZUNGEN";
"device_name_unknown" = "Unbekannte Anwendung";
"device_name_mobile" = "%@ Mobil";
"user_session_item_details" = "%@ · Neueste Aktivität %@";
"user_session_unverified_additional_info" = "Verifiziere deine aktuelle Sitzung für besonders sichere Kommunikation.";
"user_session_verified_additional_info" = "Deine aktuelle Sitzung ist für sichere Kommunikation bereit.";
"user_session_learn_more" = "Mehr erfahren";
"user_session_view_details" = "Details anzeigen";
"user_session_verify_action" = "Sitzung verifizieren";
"user_session_unverified_short" = "Nicht verifiziert";
"user_session_verified_short" = "Verifiziert";
"user_session_unverified" = "Nicht verifizierte Sitzungen";
"user_session_verified" = "Verifizierte Sitzungen";
"user_sessions_overview_other_sessions_section_info" = "Für bestmögliche Sicherheit verifiziere deine Sitzungen und melde dich von allen ab, die du nicht erkennst oder nutzt.";
"settings_labs_enable_new_app_layout" = "Neues App-Layout";
"room_first_message_placeholder" = "Schreibe deine erste Nachricht …";

View file

@ -2105,10 +2105,7 @@ Tap the + to start adding people.";
"spaces_creation_in_many_spaces" = "in %@ spaces";
"spaces_creation_in_one_space" = "in 1 space";
"spaces_invite_people" = "Invite people";
"spaces_add_room" = "Add room";
"spaces_add_room_missing_permission_message" = "You do not have permissions to add rooms to this space.";
"spaces_add_space" = "Add space";
// Mark: Leave space
@ -2415,6 +2412,7 @@ To enable access, tap Settings> Location and select Always";
"user_session_details_device_ip_address" = "IP address";
"user_session_details_device_ip_location" = "IP location";
"user_session_details_device_model" = "Model";
"user_session_details_device_browser" = "Browser";
"user_session_details_device_os" = "Operating System";
"user_session_details_application_name" = "Name";
"user_session_details_application_version" = "Version";
@ -2731,12 +2729,9 @@ To enable access, tap Settings> Location and select Always";
"user_id_title" = "User ID:";
"offline" = "offline";
"unsent" = "Unsent";
"error" = "Error";
"error_common_message" = "An error occured. Please try again later.";
"not_supported_yet" = "Not supported yet";
"default" = "default";
"private" = "Private";
"public" = "Public";
"power_level" = "Power Level";
"network_error_not_reachable" = "Please check your network connectivity";
"user_id_placeholder" = "ex: @bob:homeserver";

View file

@ -2430,10 +2430,32 @@
"all_chats_empty_unreads_placeholder_message" = "Kui sul on lugemata sõnumeid, siis nad on siit leitavad.";
"all_chats_empty_list_placeholder_title" = "Ei tea... kõik vist on nüüd tehtud.";
"all_chats_empty_view_information" = "Paljude võimalustega turvaline suhtlusrakendus sõprade, kogukondade ja tiimide jaoks. Alustamiseks loo mõni uus vestlus või liitu olemasoleva jututoaga.";
"all_chats_empty_space_information" = "Kogukonnad on võimalus jututubade ja inimeste ühendamiseks. Kasutades all vasakul olevat nuppu lisa mõni olemasolev jututuba või loo uus.";
"all_chats_empty_space_information" = "Kogukonnad on võimalus jututubade ja inimeste ühendamiseks. Kasutades all paremal olevat nuppu lisa mõni olemasolev jututuba või loo uus.";
"all_chats_empty_view_title" = "%@\ntundub olema tühjavõitu.";
"spaces_explore_rooms_format" = "Uuri kogukonda: %@";
// User sessions management
"user_sessions_settings" = "Halda sessioone";
"invite_to" = "Saada kutse siia: %@";
"device_name_unknown" = "Tundmatu klientrakendus";
"device_name_mobile" = "%@ Mobile";
"device_name_web" = "%@ Web";
"device_name_desktop" = "%@ Desktop";
"user_session_item_details" = "%@ · Viimati kasutusel %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Turvalise sõnumivahetuse nimel palun verifitseeri oma praegune sessioon.";
"user_session_verified_additional_info" = "Sinu praegune sessioon on valmis turvaliseks sõnumivahetuseks.";
"user_session_learn_more" = "Loe lisateavet";
"user_session_view_details" = "Vaata lisateavet";
"user_session_verify_action" = "Verifitseeri sessioon";
"user_session_unverified_short" = "Verifitseerimata";
"user_session_verified_short" = "Verifitseeritud";
"user_session_unverified" = "Verifitseerimata sessioon";
"user_session_verified" = "Verifitseeritud sessioon";
"user_sessions_overview_current_session_section_title" = "PRAEGUNE SESSIOON";
"user_sessions_overview_other_sessions_section_info" = "Parima turvalisuse nimel verifitseeri kõik oma sessioonid ning logi välja neist, mida sa enam ei kasuta.";
"user_sessions_overview_other_sessions_section_title" = "MUUD SESSIOONID";
"settings_labs_enable_new_app_layout" = "Rakenduse uus paigutus";
"room_first_message_placeholder" = "Saada oma esimene sõnum…";

View file

@ -2485,3 +2485,25 @@
// User sessions management
"user_sessions_settings" = "Munkamenetek kezelése";
"invite_to" = "Meghívó ide: %@";
"device_name_unknown" = "Ismeretlen kliens";
"device_name_mobile" = "%@ Mobil";
"device_name_desktop" = "%@ Alkalmazás";
"device_name_web" = "%@ Web";
"user_session_item_details" = "%@ · Utolsó aktivitás %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Az aktuális munkamenet készen áll a biztonságos üzenetküldésre.";
"user_session_verified_additional_info" = "Az aktuális munkamenet készen áll a biztonságos üzenetküldésre.";
"user_session_learn_more" = "Tudj meg többet";
"user_session_view_details" = "Részletek megtekintése";
"user_session_verify_action" = "Munkamenet hitelesítése";
"user_session_unverified_short" = "Ellenőrizetlen";
"user_session_verified_short" = "Hitelesített";
"user_session_unverified" = "Ellenőrizetlen munkamenet";
"user_session_verified" = "Ellenőrzött munkamenet";
"user_sessions_overview_current_session_section_title" = "JELENLEGI MUNKAMENET";
"user_sessions_overview_other_sessions_section_info" = "A legjobb biztonság érdekében ellenőrizd a munkameneteket, és jelentkezz ki minden olyan munkamenetből, melyet már nem ismersz fel vagy nem használsz.";
"user_sessions_overview_other_sessions_section_title" = "TOVÁBBI MUNKAMENETEK";
"settings_labs_enable_new_app_layout" = "Új alkalmazás kinézet";
"room_first_message_placeholder" = "Küld el az első üzenetedet…";

View file

@ -2692,3 +2692,25 @@
// User sessions management
"user_sessions_settings" = "Kelola sesi";
"invite_to" = "Undang ke %@";
"device_name_unknown" = "Klien tidak diketahui";
"device_name_mobile" = "%@ Ponsel";
"device_name_web" = "%@ Web";
"device_name_desktop" = "%@ Desktop";
"user_session_item_details" = "%@ · Aktivitas terakhir %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Verifikasi sesi Anda saat ini untuk perpesanan aman yang baik.";
"user_session_verified_additional_info" = "Sesi Anda saat ini siap untuk perpesanan aman.";
"user_session_learn_more" = "Pelajari lebih lanjut";
"user_session_view_details" = "Tampilkan detail";
"user_session_verify_action" = "Verifikasi sesi";
"user_session_unverified_short" = "Belum diverifikasi";
"user_session_verified_short" = "Terverifikasi";
"user_session_unverified" = "Sesi belum diverifikasi";
"user_session_verified" = "Sesi terverifikasi";
"user_sessions_overview_current_session_section_title" = "SESI SAAT INI";
"user_sessions_overview_other_sessions_section_info" = "Untuk keamanan yang terbaik, verifikasi sesi Anda dan keluarkan dari sesi yang Anda tidak kenal atau tidak digunakan lagi.";
"user_sessions_overview_other_sessions_section_title" = "SESI LAINNYA";
"settings_labs_enable_new_app_layout" = "Tata Letak Aplikasi Baru";
"room_first_message_placeholder" = "Kirim pesan pertama Anda…";

View file

@ -1279,7 +1279,7 @@
"settings_key_backup_info_signout_warning" = "Taktu öryggisafrit af dulritunarlyklunum áður en þú skráir þig út svo þeir tapist ekki.";
"settings_key_backup_info_none" = "Dulritunarlyklarnir þínir eru ekki öryggisafritaðir úr þessari setu.";
"settings_key_backup_info_checking" = "Athuga…";
"settings_deactivate_my_account" = "Gera notandaaðganginn minn óvirkann";
"settings_deactivate_my_account" = "Gera notandaaðganginn endanlega óvirkan";
"settings_add_3pid_invalid_password_message" = "Ógild auðkenni";
"settings_add_3pid_password_title_msidsn" = "Bæta við símanúmeri";
"settings_add_3pid_password_title_email" = "Bæta við tölvupóstfangi";
@ -1462,7 +1462,7 @@
"auth_reset_password_error_not_found" = "Tölvupóstfangið þitt lítur ekki út fyrir að vera tengt við Matrix-auðkenni á þessum heimaþjóni.";
"auth_login_single_sign_on" = "Skrá inn";
"onboarding_use_case_existing_server_button" = "Tengjast þjóni";
"onboarding_use_case_skip_button" = "sleppt þessari spurningu";
"onboarding_use_case_skip_button" = "Sleppa þessari spurningu";
"onboarding_use_case_community_messaging" = "Samfélög";
"onboarding_use_case_work_messaging" = "Teymi";
"onboarding_use_case_personal_messaging" = "Vinir og fjölskylda";
@ -1714,7 +1714,7 @@
"contacts_address_book_permission_denied_alert_title" = "Tengiliðir óvirkir";
"directory_search_results_title" = "Vafra í niðurstöðum möppu";
/* The placeholder string contains onboarding_use_case_skip_button as a tappable action */
"onboarding_use_case_not_sure_yet" = "Ekki ennþá viss? Þú getur %@";
"onboarding_use_case_not_sure_yet" = "Ekki ennþá viss? %@";
"call_invite_expired" = "Boð í símtal er útrunnið";
"notification_settings_suppress_from_bots" = "Útiloka tilkynningar frá vélmennum";
"notification_settings_sender_hint" = "@notandi:lén.is";
@ -1966,7 +1966,7 @@
"security_settings_crosssigning_complete_security" = "Algjört öryggi";
"settings_key_backup_info" = "Öryggi dulritaðra skilaboða er tryggt með enda-í-enda dulritun. Einungis þú og viðtakendurnir hafa dulritunarlyklana til að lesa slík skilaboð.";
"settings_labs_enable_ringing_for_group_calls" = "Hringing fyrir hópsímtöl";
"onboarding_use_case_message" = "Við munum hjálpa þér að tengjast.";
"onboarding_use_case_message" = "Við munum hjálpa þér að tengjast";
"callbar_only_single_active_group" = "Ýttu til að taka þátt í hópsímtalinu (%@)";
"call_video_with_user" = "Myndsímtal við %@";
"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Þú gerðir skilaboð héðan í frá sýnileg fyrir alla meðlimi spjallrásarinnar síðan þeir skráðu sig.";
@ -1980,7 +1980,7 @@
"location_sharing_live_timer_selector_long" = "í 8 klukkustundir";
"location_sharing_live_timer_selector_medium" = "í 1 klukkustund";
"location_sharing_live_timer_selector_short" = "í 15 mínútur";
"location_sharing_live_list_item_stop_sharing_action" = "Hætta deilingu";
"location_sharing_live_list_item_stop_sharing_action" = "Stöðva";
"location_sharing_live_list_item_current_user_display_name" = "Þú";
"location_sharing_live_list_item_last_update_invalid" = "Síðasta uppfærsla óþekkt";
"location_sharing_live_list_item_last_update" = "Uppfært fyrir %@ síðan";
@ -2091,8 +2091,8 @@
"threads_beta_title" = "Spjallþræðir";
"threads_notice_done" = "Náði því";
"onboarding_celebration_button" = "Hefjumst handa";
"onboarding_celebration_message" = "Kjörstillingarnar þínar hafa verið vistaðar.";
"onboarding_celebration_title" = "Nú ertu tilbúin(n)!";
"onboarding_celebration_message" = "Farðu hvenær sem er í stillingarnar til að breyta notandasniðinu þínu.";
"onboarding_celebration_title" = "Lítur vel út!";
"onboarding_avatar_accessibility_label" = "Auðkennismynd";
"onboarding_avatar_message" = "Þú getur breytt þessu hvenær sem er.";
"onboarding_avatar_title" = "Bættu við auðkennismynd";
@ -2116,3 +2116,64 @@
"joining" = "Gengur til liðs við spjallrás";
// String for App Store
"store_short_description" = "Öruggt dreifvinnsluspjall/VoIP";
"device_name_unknown" = "Óþekkt forrit (biðlari)";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_learn_more" = "Kanna nánar";
"user_session_view_details" = "Skoða nánar";
"user_session_verify_action" = "Sannprófa setu";
"user_session_unverified_short" = "Óstaðfest";
"user_session_verified_short" = "Staðfest";
"user_session_unverified" = "Óstaðfest seta";
"user_session_verified" = "Staðfest seta";
// MARK: User sessions management
"user_sessions_overview_title" = "Setur";
"space_selector_create_space" = "Búa til svæði";
"all_chats_onboarding_try_it" = "Prófaðu það";
"all_chats_edit_menu_space_settings" = "Stillingar svæðis";
"all_chats_edit_menu_leave_space" = "Yfirgefa %@";
"room_recents_recently_viewed_section" = "Nýlega skoðað";
"all_chats_nothing_found_placeholder_title" = "Ekkert fannst.";
"all_chats_empty_list_placeholder_title" = "Þú hefur klárað allt.";
"all_chats_all_filter" = "Allt";
"all_chats_edit_layout_show_filters" = "Sýna síur";
"all_chats_edit_layout_show_recents" = "Birta nýlegt";
"all_chats_edit_layout_unreads" = "Ólesið";
"all_chats_edit_layout_recents" = "Nýlegt";
// Mark: Leave space
"leave_space_action" = "Yfirgefa svæði";
"spaces_creation_email_invites_title" = "Bjóddu félögum þínum";
"spaces_creation_empty_room_name_error" = "Nafn er nauðsynlegt";
"spaces_explore_rooms_format" = "Kanna %@";
"room_info_back_button_title" = "Upplýsingar um spjallrás";
"secrets_setup_recovery_passphrase_information" = "Settu inn öryggisfrasa sem aðeins þú þekkir, þetta er notað til að verja leyndarmálin sem þú geymir á netþjóninum þínum.";
"room_access_settings_screen_title" = "Hver hefur aðgang að þessari spjallrás?";
"settings_presence_offline_mode" = "Ónettengdur hamur";
"room_accessibility_record_voice_message" = "Taka upp talskilaboð";
"authentication_recaptcha_title" = "Ertu mannvera?";
"authentication_verify_msisdn_invalid_phone_number" = "Ógilt símanúmer";
"authentication_verify_msisdn_waiting_button" = "Endursenda kóða";
"authentication_verify_msisdn_text_field_placeholder" = "Símanúmer";
"authentication_verify_msisdn_input_title" = "Settu inn símanúmerið þitt";
"authentication_choose_password_not_verified_message" = "Athugaðu pósthólfið þitt";
"authentication_choose_password_submit_button" = "Endurstilla lykilorð";
"authentication_choose_password_text_field_placeholder" = "Nýtt lykilorð";
"authentication_choose_password_input_title" = "Veldu nýtt lykilorð";
"authentication_forgot_password_waiting_button" = "Senda tölvupóst aftur";
"authentication_forgot_password_waiting_title" = "Athugaðu tölvupóstinn þinn.";
"authentication_forgot_password_text_field_placeholder" = "Tölvupóstur";
"authentication_forgot_password_input_title" = "Settu inn tölvupóstfangið þitt";
"authentication_verify_email_waiting_button" = "Senda tölvupóst aftur";
"authentication_verify_email_waiting_title" = "Skoðaðu tölvupóstinn þinn.";
"authentication_verify_email_text_field_placeholder" = "Tölvupóstfang";
"authentication_verify_email_input_title" = "Settu inn tölvupóstfangið þitt";
"authentication_server_selection_server_url" = "Slóð á heimaþjón";
"authentication_login_forgot_password" = "Gleymt lykilorð";
"authentication_login_username" = "Notandanafn / tölvupóstfang / símanúmer";
"authentication_login_title" = "Velkomin(n) aftur!";
"authentication_registration_username" = "Notandanafn";

View file

@ -2465,3 +2465,25 @@
// User sessions management
"user_sessions_settings" = "Gestisci sessioni";
"invite_to" = "Invita in %@";
"device_name_unknown" = "Client sconosciuto";
"device_name_mobile" = "%@ Mobile";
"device_name_web" = "%@ Web";
"device_name_desktop" = "%@ Desktop";
"user_session_item_details" = "%@ · Ultima attività %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Verifica la tua sessione attuale per messaggi più sicuri.";
"user_session_verified_additional_info" = "La tua sessione attuale è pronta per i messaggi sicuri.";
"user_session_learn_more" = "Maggiori informazioni";
"user_session_view_details" = "Vedi dettagli";
"user_session_verify_action" = "Verifica la sessione";
"user_session_unverified_short" = "Non verificata";
"user_session_verified_short" = "Verificata";
"user_session_unverified" = "Sessione non verificata";
"user_session_verified" = "Sessione verificata";
"user_sessions_overview_current_session_section_title" = "SESSIONE ATTUALE";
"user_sessions_overview_other_sessions_section_info" = "Per una maggiore sicurezza, verifica le tue sessioni e disconnetti quelle che non riconosci o che non usi più.";
"user_sessions_overview_other_sessions_section_title" = "ALTRE SESSIONI";
"settings_labs_enable_new_app_layout" = "Nuova disposizione dell'applicazione";
"room_first_message_placeholder" = "Invia il tuo primo messaggio…";

View file

@ -142,8 +142,8 @@
"contacts_address_book_matrix_users_toggle" = "Matrix利用者のみ";
"contacts_address_book_no_contact" = "端末内電話帳に連絡先がありません";
"contacts_address_book_permission_required" = "端末内電話帳へのアクセス権限が必要です";
"contacts_user_directory_section" = "利用者一覧";
"contacts_user_directory_offline_section" = "利用者一覧(オフライン)";
"contacts_user_directory_section" = "ユーザー一覧";
"contacts_user_directory_offline_section" = "ユーザー一覧 (オフライン)";
// Chat participants
"room_participants_title" = "参加者";
"room_participants_add_participant" = "参加者を追加";
@ -172,7 +172,7 @@
"room_participants_action_section_devices" = "セッション一覧";
"room_participants_action_section_other" = "オプション";
"room_participants_action_invite" = "招待";
"room_participants_action_leave" = "このルームを出";
"room_participants_action_leave" = "このルームを退出";
"room_participants_action_remove" = "このルームから削除";
"room_participants_action_ban" = "このルームからブロック";
"room_participants_action_unban" = "ブロックを解除";
@ -208,7 +208,7 @@
"room_delete_unsent_messages" = "未送信の文を削除";
"room_event_action_copy" = "コピー";
"room_event_action_quote" = "引用";
"room_event_action_redact" = "移動して削除";
"room_event_action_redact" = "削除";
"room_event_action_more" = "さらに";
"room_event_action_share" = "共有";
"room_event_action_permalink" = "メッセージへのリンクをコピー";
@ -332,7 +332,7 @@
"room_details_low_priority_tag" = "低優先度";
"room_details_mute_notifs" = "発言があっても通知しない";
"room_details_direct_chat" = "対話";
"room_details_access_section" = "ルームにアクセスできる人";
"room_details_access_section" = "このルームにアクセスできる人は?";
"room_details_access_section_invited_only" = "招待された人のみ";
"room_details_access_section_anyone_apart_from_guest" = "ルームのリンクを知っている人なら誰でも(ゲストユーザーを除く)";
"room_details_access_section_anyone" = "ルームのリンクを知っている人なら誰でも(ゲストユーザーを含む)";
@ -541,7 +541,7 @@
"deactivate_account_forget_messages_information_part3" = ":これは将来のユーザーに会話の不完全なビューが表示される)";
"deactivate_account_validate_action" = "無効なアカウント";
"deactivate_account_password_alert_title" = "無効なアカウント";
"deactivate_account_password_alert_message" = "続行するには、パスワードを入力してください";
"deactivate_account_password_alert_message" = "続行するには、Matrix アカウントのパスワードを入力してください";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "要求が送信されました";
"rerequest_keys_alert_message" = "鍵をこのセッションに送信できるように、メッセージを復号化できる他の端末で%@を起動してください。";
@ -565,12 +565,12 @@
"room_info_list_one_member" = "1人のメンバー";
"create_room_placeholder_address" = "#testroom:matrix.org";
"create_room_section_header_address" = "ルームのアドレス";
"create_room_show_in_directory" = "このルーム一覧に掲載";
"create_room_section_header_address" = "アドレス";
"create_room_show_in_directory" = "ルーム一覧に掲載";
"create_room_section_footer_type" = "非公開のルームは、ルームに招待された人のみ参加できます。";
"create_room_type_public" = "公開ルーム (誰でも参加可能)";
"create_room_type_private" = "非公開ルーム (招待者のみ参加可能)";
"create_room_section_header_type" = "ルームの種類";
"create_room_section_header_type" = "アクセスできる人";
"create_room_section_footer_encryption" = "暗号化はあとから無効にすることはできません。";
"create_room_section_header_encryption" = "ルームの暗号化";
"create_room_placeholder_topic" = "トピック";
@ -674,7 +674,7 @@
"room_details_access_section_directory_toggle_for_dm" = "ルーム一覧に掲載";
"room_details_access_section_anyone_apart_from_guest_for_dm" = "リンクを知っている人なら誰でも(ゲストユーザーを除く)";
"room_details_access_section_anyone_for_dm" = "リンクを知っている人なら誰でも(ゲストユーザーを含む)";
"room_details_access_section_for_dm" = "誰がアクセスできますか";
"room_details_access_section_for_dm" = "これにアクセスできる人は";
"room_details_photo_for_dm" = "写真";
"room_details_integrations" = "インテグレーション";
"room_details_search" = "ルーム内検索";
@ -707,7 +707,7 @@
"settings_key_backup_info_version" = "鍵のバックアップのバージョン:%@";
"settings_key_backup_info_none" = "あなたの鍵は、このセッションからバックアップされていません。";
"settings_key_backup_info_checking" = "確認しています…";
"settings_add_3pid_password_message" = "続けるにはパスワードを入力してください";
"settings_add_3pid_password_message" = "続行するには、Matrix アカウントのパスワードを入力してください";
"settings_add_3pid_invalid_password_message" = "無効な認証情報";
"settings_add_3pid_password_title_email" = "メールアドレスを追加";
"settings_integrations_allow_description" = "インテグレーションマネージャー(%@)を使用して、ボット、ブリッジ、ウィジェット、ステッカーパックを管理します。\n\n設定データを受け取り、お客様に代わってウィジェットの変更、ルーム招待の送信、権限の設定を行うことができます。";
@ -735,7 +735,7 @@
"room_participants_action_security_status_warning" = "警告";
"room_participants_action_security_status_complete_security" = "セキュリティーを確認";
"room_participants_action_security_status_verify" = "認証";
"room_participants_action_security_status_verified" = "認証済";
"room_participants_action_security_status_verified" = "検証済み";
"room_participants_action_section_security" = "セキュリティー";
"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "IDサーバーが設定されていないため、メールアドレスを使って連絡先とチャットを開始することができません。";
"room_participants_filter_room_members_for_dm" = "メンバーを検索";
@ -870,7 +870,7 @@
"user_verification_session_details_additional_information_untrusted_other_user" = "ユーザーがこのセッションを信頼するまでは、セッションとの間で送受信されるメッセージには警告が表示されます。また、手動で認証することもできます。";
"user_verification_session_details_information_untrusted_other_user" = " 新しいセッションを使ってサインインしました:";
"user_verification_session_details_information_untrusted_current_user" = "このセッションを認証することで、信頼できるものとしてマークし、暗号化されたメッセージへのアクセスを許可します。";
"user_verification_session_details_information_trusted_other_user_part2" = " 認証済:";
"user_verification_session_details_information_trusted_other_user_part2" = " 検証済み:";
"user_verification_session_details_information_trusted_other_user_part1" = "このセッションは安全なものとして信頼されています。なぜなら ";
"user_verification_session_details_information_trusted_current_user" = "このセッションは、認証されたため安全なものとして信頼されています。";
"user_verification_session_details_untrusted_title" = "信頼されていません";
@ -928,7 +928,7 @@
"key_verification_incoming_request_incoming_alert_message" = "%@は認証を要求しています";
"key_verification_tile_conclusion_warning_title" = "信頼されていないサインイン";
"key_verification_tile_conclusion_done_title" = "認証済";
"key_verification_tile_conclusion_done_title" = "検証済み";
"key_verification_tile_request_incoming_approval_decline" = "却下";
"key_verification_tile_request_incoming_approval_accept" = "承認";
"key_verification_tile_request_status_accepted" = "あなたは承認しました";
@ -1283,7 +1283,7 @@
"room_event_encryption_info_device_id" = "ID\n";
"room_event_encryption_info_device_verification" = "認証\n";
"room_event_encryption_info_device_fingerprint" = "Ed25519 fingerprint\n";
"room_event_encryption_info_device_verified" = "認証済";
"room_event_encryption_info_device_verified" = "検証済み";
"room_event_encryption_info_device_not_verified" = "認証されていない";
"room_event_encryption_info_device_blocked" = "ブラックリストに載せた";
"room_event_encryption_info_verify" = "認証しています…";
@ -1512,7 +1512,7 @@
"notice_room_invite_by_you" = "%@を招待しました";
"notice_room_invite_you" = "%@があなたを招待しました";
"notice_room_join_by_you" = "参加しました";
"notice_room_leave_by_you" = "退出しました";
"notice_room_leave_by_you" = "あなたが退出しました";
"notice_room_kick_by_you" = "%@をキックしました";
"notice_room_unban_by_you" = "%@のブロックを解除しました";
"notice_room_ban_by_you" = "%@をブロックしました";
@ -1587,7 +1587,7 @@
"biometrics_usage_reason" = "アプリを開くには認証が必要です";
"settings_sending_media" = "画像と動画の送信";
"invite_friends_share_text" = "%@ での連絡先: %@";
"side_menu_action_invite_friends" = "招待する";
"side_menu_action_invite_friends" = "友だちを招待する";
"call_more_actions_change_audio_device" = "オーディオデバイスを変更";
"call_more_actions_dialpad" = "ダイヤルパッド";
"onboarding_splash_login_button_title" = "既にアカウントを持っています";
@ -1656,7 +1656,7 @@
"space_topic" = "説明文";
"spaces_creation_cancel_message" = "進捗状況は失われます。";
"spaces_creation_cancel_title" = "スペースの作成を停止しますか?";
"create_room_section_footer_type_private" = "招待した人のみが検索参加できます。";
"create_room_section_footer_type_private" = "招待した人のみが検索参加できます。";
// MARK: - Searchable Directory View Controller
@ -1668,3 +1668,128 @@
// MARK: Sign out warning
"sign_out_existing_key_backup_alert_title" = "サインアウトしてよろしいですか?";
"find_your_contacts_message" = "%@ であなたの連絡先を表示し、知人とのチャットを素早く始めます。";
"find_your_contacts_footer" = "この設定はいつでも無効にできます";
"find_your_contacts_button_title" = "連絡先を検索する";
"find_your_contacts_title" = "連絡先をリストアップする";
// Mark: - Room avatar view
"room_avatar_view_accessibility_label" = "アバター";
// MARK: - Invite friends
"invite_friends_action" = "友だちを %@ に招待する";
"call_transfer_error_title" = "エラー";
"home_context_menu_mark_as_read" = "既読にする";
"home_context_menu_normal_priority" = "通常優先度";
"home_context_menu_low_priority" = "低優先度";
"home_context_menu_unmute" = "ミュート解除";
"home_context_menu_mute" = "ミュート";
// MARK: - Call Transfer
"call_transfer_title" = "転送";
"room_info_back_button_title" = "ルーム情報";
"create_room_processing" = "ルーム作成中";
"call_transfer_users" = "ユーザー";
"home_context_menu_notifications" = "通知";
"home_context_menu_make_dm" = "連絡先に移動";
"home_context_menu_make_room" = "ルームに移動";
"leave_space_title" = "%@ を退出";
"room_participants_leave_success" = "ルームを退出しました";
"room_participants_leave_processing" = "退出中";
"event_formatter_group_call_leave" = "退出";
"home_context_menu_leave" = "退出";
// Mark: Leave space
"leave_space_action" = "スペースを退出";
"leave_space_selection_title" = "ルームを選択";
"create_room_section_footer_type_restricted" = "誰でもスペース名で検索・参加できます。";
"create_room_suggest_room" = "スペースメンバーにおすすめ";
"create_room_show_in_directory_footer" = "他の人が検索・参加できるようになります。";
"create_room_promotion_header" = "PR";
"searchable_directory_search_placeholder" = "名前または ID";
"room_suggestion_settings_screen_title" = "スペースにおすすめのルームを作成";
"room_suggestion_settings_screen_message" = "おすすめのルームは、スペースメンバーに参加を推奨するものとして PR されます。";
// Room suggestion Settings
"room_suggestion_settings_screen_nav_title" = "おすすめのルーム";
"room_details_promote_room_suggest_title" = "スペースメンバーへのおすすめ";
"settings_default" = "デフォルトの通知";
"pin_protection_reset_alert_action_reset" = "リセット";
"authentication_recaptcha_title" = "あなたは人間ですか?";
"authentication_verify_msisdn_waiting_button" = "コードを再送信";
"authentication_choose_password_submit_button" = "パスワードをリセット";
"authentication_choose_password_signout_all_devices" = "全ての端末からサインアウト";
"authentication_choose_password_text_field_placeholder" = "新しいパスワード";
"authentication_terms_title" = "プライバシーポリシー";
"authentication_verify_msisdn_text_field_placeholder" = "電話番号";
"password_validation_error_contain_symbol" = "記号を含める";
"password_validation_error_contain_number" = "数字を含める";
"password_validation_error_contain_uppercase_letter" = "大文字を含める";
"password_validation_error_contain_lowercase_letter" = "小文字を含める";
/* The placeholder will show a number */
"password_validation_error_max_length" = "%d 文字以下";
/* The placeholder will show a number */
"password_validation_error_min_length" = "%d 文字以上";
// MARK: Password Validation
"password_validation_info_header" = "以下の条件を満たすパスワードを設定してください:";
"space_selector_empty_view_title" = "まだスペースがありません";
"all_chats_empty_list_placeholder_title" = "未読はありません";
"all_chats_empty_unreads_placeholder_message" = "未読のメッセージがある場合は、ここに表示されます。";
"room_notifs_settings_account_settings" = "アカウント設定";
"room_access_settings_screen_upgrade_alert_upgrading" = "ルームをアップグレードしています";
"room_access_settings_screen_upgrade_alert_upgrade_button" = "アップグレード";
"room_access_settings_screen_edit_spaces" = "スペースを編集";
"room_access_settings_screen_upgrade_required" = "アップグレードが必要";
"room_access_settings_screen_upgrade_alert_title" = "ルームをアップグレード";
"room_access_settings_screen_public_message" = "誰でも検索・参加できます。";
"room_access_settings_screen_private_message" = "招待された人だけが検索・参加できます。";
"room_access_settings_screen_message" = "誰が %@ を検索・参加できるか選択してください。";
"space_settings_access_section" = "このスペースにアクセスできる人は?";
"room_access_settings_screen_title" = "このルームにアクセスできる人は?";
"room_notifs_settings_none" = "なし";
// Room Notification Settings
"room_notifs_settings_notify_me_for" = "以下の場合に通知";
"room_details_access_row_title" = "アクセス";
"room_details_notifs" = "通知";
"location_sharing_invalid_power_level_title" = "ライブ現在地共有に必要な権限がありません";
"settings_labs_enable_live_location_sharing" = "ライブ現在地共有 - 現在地を共有します (開発中の機能、位置情報が一時的にルームの履歴に残ります)";
"event_formatter_message_deleted" = "削除済みのメッセージ";
"home_context_menu_unfavourite" = "お気に入りから削除";
"home_context_menu_favourite" = "お気に入り";
"all_chats_user_menu_settings" = "ユーザー設定";
"all_chats_edit_layout_show_filters" = "フィルターを表示";
"all_chats_edit_layout_show_recents" = "最近使用したものを表示";
"all_chats_edit_layout_alphabetical_order" = "A-Z で並び替え";
"all_chats_edit_layout_activity_order" = "アクティビティで並び替え";
"space_selector_create_space" = "スペースを作成";
"space_selector_empty_view_information" = "スペースは、ルームや連絡先をグループ化する方法です。以下からスペースを作成できます。";
"all_chats_all_filter" = "全て";
"all_chats_edit_layout_recents" = "最近";
"all_chats_edit_layout_unreads" = "未読";
"all_chats_section_title" = "チャット";
// Mark: - All Chats
"all_chats_title" = "全てのチャット";
"location_sharing_live_loading" = "ライブ現在地共有を読み込み中...";
"location_sharing_live_list_item_stop_sharing_action" = "停止";
"location_sharing_live_list_item_current_user_display_name" = "あなた";
"live_location_sharing_banner_stop" = "停止";
"live_location_sharing_ended" = "ライブ現在地共有が終了";
"live_location_sharing_banner_title" = "ライブ現在地共有が有効";
"location_sharing_invalid_authorization_settings" = "設定";
// MARK: Live location sharing
"location_sharing_live_share_title" = "ライブ現在地共有";
"service_terms_modal_decline_button" = "拒否する";
"service_terms_modal_accept_button" = "同意する";
"service_terms_modal_description_identity_server" = "この操作により、端末の連絡先にあなたの電話番号や電子メールを保存している人があなたを検索できるようになります。";
// Service terms
"service_terms_modal_title_message" = "続行するには、以下の利用規約に同意してください";

View file

@ -2230,7 +2230,7 @@
"settings_labs_enable_auto_report_decryption_errors" = "Auto Reportar Erros de Decriptação";
"room_preview_decline_invitation_options" = "Você quer declinar o convite ou ignorar esta(e) usuária(o)?";
"threads_beta_cancel" = "Não agora";
"threads_beta_enable" = "Teste aí";
"threads_beta_enable" = "Experimentar";
"threads_beta_information_link" = "Saber mais";
"threads_beta_information" = "Mantenha discussões organizadas com threads.\n\nThreads ajudam manter suas conversas em-tópico e fáceis de rastrear. ";
"threads_beta_title" = "Threads";
@ -2446,12 +2446,12 @@
// Mark: - Room invites
"room_invites_empty_view_title" = "Nada novo.";
"all_chats_onboarding_try_it" = "Testa aí";
"all_chats_onboarding_try_it" = "Experimentar";
"all_chats_onboarding_title" = "O que tem de novo";
"all_chats_onboarding_page_message3" = "Toque em seu perfil para nos deixar sabendo do que você acha.";
"all_chats_onboarding_page_title3" = "Dar Feedback";
"all_chats_onboarding_page_message2" = "Acesse seus Espaços (esquerdo fundo) mais rápido e fácil que jamais antes.";
"all_chats_onboarding_page_title2" = "Acessar Espaços";
"all_chats_onboarding_page_title3" = "Dê Feedback";
"all_chats_onboarding_page_message2" = "Acesse seus Espaços (esquerda fundo) mais rápido e fácil que jamais antes.";
"all_chats_onboarding_page_title2" = "Acesse Espaços";
"all_chats_onboarding_page_message1" = "Para simplificar seu Element, abas são agora opcionais. Gerencie-as usando o menu direito topo.";
"all_chats_onboarding_page_title1" = "Boas vindas a uma nova visão!";
"all_chats_nothing_found_placeholder_message" = "Tente ajustar sua pesquisa.";
@ -2466,3 +2466,25 @@
// User sessions management
"user_sessions_settings" = "Gerenciar sessões";
"invite_to" = "Convidar para %@";
"device_name_unknown" = "Cliente desconhecido";
"device_name_mobile" = "%@ Mobile";
"device_name_web" = "%@ Web";
"device_name_desktop" = "%@ Desktop";
"user_session_item_details" = "%@ · Última atividade %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Verifique sua sessão atual para mensageria segura melhorada.";
"user_session_verified_additional_info" = "Sua sessão atual está pronta para mensageria segura.";
"user_session_learn_more" = "Saber mais";
"user_session_view_details" = "Visualizar detalhes";
"user_session_verify_action" = "Verificar sessão";
"user_session_unverified_short" = "Não-verificada";
"user_session_verified_short" = "Verificada";
"user_session_unverified" = "Sessão não-verificada";
"user_session_verified" = "Sessão verificada";
"user_sessions_overview_current_session_section_title" = "SESSÃO ATUAL";
"user_sessions_overview_other_sessions_section_info" = "Para melhor segurança, verifique suas sessões e faça signout de qualquer sessão que você não reconhece ou usa mais.";
"user_sessions_overview_other_sessions_section_title" = "OUTRAS SESSÕES";
"settings_labs_enable_new_app_layout" = "Novo Layout de Aplicativo";
"room_first_message_placeholder" = "Envie sua primeira mensagem…";

View file

@ -2688,3 +2688,25 @@
// User sessions management
"user_sessions_settings" = "Spravovať relácie";
"invite_to" = "Pozvať do %@";
"device_name_web" = "%@ Web";
"device_name_unknown" = "Neznámy klient";
"device_name_mobile" = "%@ Mobil";
"device_name_desktop" = "%@ Stolný počítač";
"user_session_item_details" = "%@ · Posledná aktivita %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Overte svoju aktuálnu reláciu pre vylepšené bezpečné zasielanie správ.";
"user_session_verified_additional_info" = "Vaša aktuálna relácia je pripravená na bezpečné zasielanie správ.";
"user_session_learn_more" = "Zistiť viac";
"user_session_view_details" = "Zobraziť podrobnosti";
"user_session_verify_action" = "Overiť reláciu";
"user_session_unverified_short" = "Neoverené";
"user_session_verified_short" = "Overené";
"user_session_unverified" = "Neoverená relácia";
"user_session_verified" = "Overená relácia";
"user_sessions_overview_current_session_section_title" = "AKTUÁLNA RELÁCIA";
"user_sessions_overview_other_sessions_section_info" = "V záujme čo najlepšieho zabezpečenia overte svoje relácie a odhláste sa z každej relácie, ktorú už nepoznáte alebo nepoužívate.";
"user_sessions_overview_other_sessions_section_title" = "OSTATNÉ RELÁCIE";
"settings_labs_enable_new_app_layout" = "Nové usporiadanie aplikácie";
"room_first_message_placeholder" = "Pošlite svoju prvú správu…";

View file

@ -227,7 +227,7 @@
"room_directory_no_public_room" = "Загальнодоступних кімнат немає";
"settings_security" = "БЕЗПЕКА";
"settings_pin_rooms_with_missed_notif" = "Приколоти кімнати із пропущеними сповіщеннями";
"settings_global_settings_info" = "Глобальні налаштування сповіщень доступні у вашому %@ веб-клієнті";
"settings_global_settings_info" = "Глобальні налаштування сповіщень доступні у вашому %@ вебклієнті";
"settings_enable_push_notif" = "Сповіщення на цьому пристрої";
"settings_fail_to_update_profile" = "Не вдалося оновити профіль";
"settings_night_mode" = "Нічний режим";
@ -684,7 +684,7 @@
"space_beta_announce_badge" = "БЕТА";
"space_beta_announce_title" = "Простори скоро з'являться";
"space_beta_announce_subtitle" = "Нова версія спільнот";
"space_beta_announce_information" = "Простори — це новий спосіб об'єднати кімнати та людей. Їх ще не додано на iOS, але ви вже можете користуватися ними у вебпереглядачі та на комп'ютері.";
"space_beta_announce_information" = "Простори — це новий спосіб об'єднати кімнати та людей. Їх ще не додано на iOS, але ви вже можете користуватися ними у браузері та на комп'ютері.";
// No VoIP support
"no_voip_title" = "Вхідний виклик";
@ -1066,7 +1066,7 @@
"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "Поки жоден сервер ідентифікації не налаштований, ви не можете почати бесіду з кимось за адресою е-пошти.";
"find_your_contacts_message" = "Дозвольте %@ показувати ваші контакти, щоб ви могли швидко почати бесіду з тими, кого знаєте найкраще.";
"find_your_contacts_title" = "Почніть із переліку своїх контактів";
"store_full_description" = "Element — застосунок для листування й співпраці нового покоління:\n\n1. Надає вам контроль над збереженням вашої приватності\n2. Дає змогу спілкуватися з будь-ким у мережі Matrix і навіть за її межами, інтегруючись із такими застосунками, як Slack\n3. Оберігає вас від реклами, збору даних, бекдорів і прив'язаності до провайдера\n4. Захищає вас наскрізним шифруванням і звіркою інших перехресним підписуванням\n\nElement суттєво відрізняється від інших застосунків для листування й співпраці тим, що децентралізований і має відкритий код.\n\nElement дає змогу самостійно встановити сервер або обрати з-поміж загальнодоступних, щоб ви зберігали приватність своїх даних і розмов, власність і контроль над ними. Він надає вам доступ до відкритої мережі; тож ви можете спілкуватися з користувачами інших застосунків, не лише Element. А ще він добре захищений.\n\nElement здатен на це все завдяки своїй основі Matrix — стандарту відкритого, децентралізованого спілкування.\n\nElement надає вам контроль, даючи змогу обрати, в кого зберігаються ваші розмови. У застосунку Element ви можете обрати між такими шляхами:\n\n1. Зареєструвати безплатний обліковий запис на загальнодоступному сервері matrix.org\n2. Самостійно розмістити свій обліковий запис, встановивши сервер на власному обладнанні\n3. Отримати обліковий запис на виділеному сервері, просто передплативши хостинг-платформу Element Matrix Services\n\nЧому Element?\n\nВОЛОДІЙТЕ СВОЇМИ ДАНИМИ: Ви обираєте, де зберігати свої дані й повідомлення. Ви володієте й керуєте ними, не якась МЕГАКОРПОРАЦІЯ, що аналізує ваші дані й передає їх стороннім особам.\n\nВІДКРИТЕ ЛИСТУВАННЯ Й СПІВПРАЦЯ: Можете розмовляти з будь-ким іншим у мережі Matrix незалежно від того, використовують вони Element, інший застосунок Matrix чи навіть сторонню систему листування на зразок Slack, IRC чи XMPP.\n\nНАДБЕЗПЕКА: Справжнє наскрізне шифрування (лише учасники розмови можуть розшифрувати повідомлення) й звірка пристроїв учасників розмови перехресним підписуванням.\n\nДОСКОНАЛЕ СПІЛКУВАННЯ: Листуйтеся, робіть голосові й відеовиклики, діліться файлами, транслюйте екран, підʼєднуйте різноманітні інтеграції, ботів і віджети. Розбудовуйте кімнати, спільноти, будьте на звʼязку й досягайте цілей.\n\nСКРІЗЬ, ДЕ ВИ: Будьте на зв'язку, де б ви не були, завдяки повній синхронізації історії повідомлень між усіма вашим пристроями та онлайн-клієнтом https://app.element.io.";
"store_full_description" = "Element — застосунок для листування й співпраці нового покоління:\n\n1. Надає вам контроль над збереженням вашої приватності\n2. Дає змогу спілкуватися з будь-ким у мережі Matrix і навіть за її межами, інтегруючись із такими застосунками, як Slack\n3. Оберігає вас від реклами, збору даних, бекдорів і прив'язаності до провайдера\n4. Захищає вас наскрізним шифруванням і звіркою інших перехресним підписуванням\n\nElement суттєво відрізняється від інших застосунків для листування й співпраці тим, що децентралізований і має відкритий код.\n\nElement дає змогу самостійно встановити сервер або обрати з-поміж загальнодоступних, щоб ви зберігали приватність своїх даних і розмов, власність і контроль над ними. Він надає вам доступ до відкритої мережі; тож ви можете спілкуватися з користувачами інших застосунків, не лише Element. А ще він добре захищений.\n\nElement здатен на це все завдяки своїй основі Matrix — стандарту відкритого, децентралізованого спілкування.\n\nElement надає вам контроль, даючи змогу обрати, в кого зберігаються ваші розмови. У застосунку Element ви можете обрати між такими шляхами:\n\n1. Зареєструвати безплатний обліковий запис на загальнодоступному сервері matrix.org\n2. Самостійно розмістити свій обліковий запис, встановивши сервер на власному обладнанні\n3. Отримати обліковий запис на виділеному сервері, просто передплативши хостинг-платформу Element Matrix Services\n\nЧому Element?\n\nВОЛОДІЙТЕ СВОЇМИ ДАНИМИ: Ви обираєте, де зберігати свої дані й повідомлення. Ви володієте й керуєте ними, не якась МЕГАКОРПОРАЦІЯ, що аналізує ваші дані й передає їх стороннім особам.\n\nВІДКРИТЕ ЛИСТУВАННЯ Й СПІВПРАЦЯ: Можете розмовляти з будь-ким іншим у мережі Matrix незалежно від того, використовують вони Element, інший застосунок Matrix чи навіть сторонню систему листування на зразок Slack, IRC чи XMPP.\n\nНАДБЕЗПЕКА: Справжнє наскрізне шифрування (лише учасники розмови можуть розшифрувати повідомлення) й звірка пристроїв учасників розмови перехресним підписуванням.\n\nДОСКОНАЛЕ СПІЛКУВАННЯ: Листуйтеся, робіть голосові й відеовиклики, діліться файлами, транслюйте екран, підʼєднуйте різноманітні інтеграції, ботів і віджети. Розбудовуйте кімнати, спільноти, будьте на звʼязку й досягайте цілей.\n\nСКРІЗЬ, ДЕ ВИ: Будьте на зв'язку, де б ви не були, завдяки повній синхронізації історії повідомлень між усіма вашими пристроями та вебклієнтом https://app.element.io.";
"security_settings_crosssigning_info_not_bootstrapped" = "Перехресне підписування ще не налаштовано.";
"security_settings_crosssigning" = "ПЕРЕХРЕСНЕ ПІДПИСУВАННЯ";
"security_settings_backup" = "РЕЗЕРВНЕ КОПІЮВАННЯ ПОВІДОМЛЕНЬ";
@ -1386,7 +1386,7 @@
"room_intro_cell_information_room_without_topic_sentence2_part2" = " щоб люди знали, про що ця кімната.";
"room_intro_cell_information_dm_sentence2" = "У цій розмові лише ви двоє, більше ніхто не може приєднатися.";
"room_intro_cell_information_multiple_dm_sentence2" = "У цій розмові лише ви, поки хтось із вас не запросить іще когось приєднатися.";
"space_feature_unavailable_subtitle" = "Простори ще не готові на iOS, але доступні у вебпереглядачі та на комп'ютері";
"space_feature_unavailable_subtitle" = "Простори ще не готові на iOS, але доступні у браузері та на комп'ютері";
"space_feature_unavailable_information" = "Простори — новий спосіб групувати кімнати й людей.\n\nСкоро ми їх допрацюємо. Якщо приєднаєтеся до простору на іншій платформі, всі його кімнати стануть доступні й тут.";
// Success from secure backup
@ -1408,7 +1408,7 @@
"spaces_suggested_room" = "Пропоновано";
"room_details_access_section_anyone_for_dm" = "Будь-хто з посиланням, зокрема гості";
"spaces_no_room_found_detail" = "Деяких результатів може бути не видно, бо вони закриті й потребують запрошення.";
"spaces_no_member_found_detail" = "Шукаєте когось, хто ще не в %@? Запросіть їх вебпереглядачем або комп'ютером.";
"spaces_no_member_found_detail" = "Шукаєте когось, хто ще не в %@? Запросіть їх через браузер або комп'ютер.";
"spaces_invites_coming_soon_title" = "Запрошення ще в розробці";
"spaces_coming_soon_detail" = "Ця можливість ще не втілена, але скоро буде. Поки що можете зробити це в %@ на комп'ютері.";
"space_participants_action_remove" = "Вилучити з цього простору";
@ -1560,7 +1560,7 @@
"widget_integration_manager_disabled" = "Необхідно увімкнути менеджер інтеграцій у налаштуваннях";
"widget_menu_remove" = "Вилучити для всіх";
"widget_menu_revoke_permission" = "Відкликати мій доступ";
"widget_menu_open_outside" = "Відкрити у переглядачі";
"widget_menu_open_outside" = "Відкрити у браузері";
"widget_menu_refresh" = "Оновити";
"widget_sticker_picker_no_stickerpacks_alert_add_now" = "Додати зараз?";
"widget_sticker_picker_no_stickerpacks_alert" = "На разі жоден пакунок наліпок не увімкнено.";
@ -2690,3 +2690,25 @@
// User sessions management
"user_sessions_settings" = "Керувати сеансами";
"invite_to" = "Запросити до %@";
"device_name_unknown" = "Невідомий клієнт";
"device_name_mobile" = "%@ Мобільний";
"device_name_web" = "%@ Браузер";
"device_name_desktop" = "%@ Комп'ютер";
"user_session_item_details" = "%@ · Остання активність %@";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
"user_session_unverified_additional_info" = "Звірте свій поточний сеанс для посилення безпеки обміну повідомленнями.";
"user_session_verified_additional_info" = "Ваш поточний сеанс готовий до безпечного обміну повідомленнями.";
"user_session_learn_more" = "Докладніше";
"user_session_view_details" = "Переглянути подробиці";
"user_session_verify_action" = "Звірити сеанс";
"user_session_unverified_short" = "Не звірений";
"user_session_verified_short" = "Звірений";
"user_session_unverified" = "Не звірений сеанс";
"user_session_verified" = "Звірений сеанс";
"user_sessions_overview_current_session_section_title" = "ПОТОЧНИЙ СЕАНС";
"user_sessions_overview_other_sessions_section_info" = "Звірте свої сеанси та вийдіть з усіх сеансів, які ви більше не розпізнаєте або не використовуєте для кращої безпеки.";
"user_sessions_overview_other_sessions_section_title" = "ІНШІ СЕАНСИ";
"settings_labs_enable_new_app_layout" = "Новий вигляд застосунку";
"room_first_message_placeholder" = "Надішліть своє перше повідомлення…";

View file

@ -8511,6 +8511,10 @@ public class VectorL10n: NSObject {
public static var userSessionDetailsApplicationVersion: String {
return VectorL10n.tr("Vector", "user_session_details_application_version")
}
/// Browser
public static var userSessionDetailsDeviceBrowser: String {
return VectorL10n.tr("Vector", "user_session_details_device_browser")
}
/// IP address
public static var userSessionDetailsDeviceIpAddress: String {
return VectorL10n.tr("Vector", "user_session_details_device_ip_address")

View file

@ -93,6 +93,12 @@ FOUNDATION_EXPORT NSString *const RecentsViewControllerDataReadyNotification;
*/
@property (nonatomic, weak) RootTabEmptyView *emptyView;
/**
The bottom anchor used to layout `emptyView` in the absence of a FAB.
If this value is `nil` the empty view will be anchored to the bottom of its superview.
*/
@property (nonatomic, weak) NSLayoutYAxisAnchor *emptyViewBottomAnchor;
/**
The screen timer used for analytics if they've been enabled. The default value is nil.
*/

View file

@ -2226,7 +2226,8 @@ NSString *const RecentsViewControllerDataReadyNotification = @"RecentsViewContro
[self.view addSubview:emptyView];
}
emptyViewBottomConstraint = [emptyView.bottomAnchor constraintEqualToAnchor:emptyView.superview.bottomAnchor];
NSLayoutYAxisAnchor *bottomAnchor = self.emptyViewBottomAnchor ?: emptyView.superview.bottomAnchor;
emptyViewBottomConstraint = [emptyView.bottomAnchor constraintEqualToAnchor:bottomAnchor constant:-1]; // 1pt spacing for UIToolbar's divider.
emptyView.translatesAutoresizingMaskIntoConstraints = NO;

View file

@ -73,14 +73,6 @@ class VectorHostingController: UIHostingController<AnyView> {
bottomSheetPreferences?.setup(viewController: self)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if isNavigationBarHidden {
self.navigationController?.isNavigationBarHidden = true
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
@ -93,6 +85,14 @@ class VectorHostingController: UIHostingController<AnyView> {
}
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if let navigationController = navigationController, navigationController.isNavigationBarHidden != isNavigationBarHidden {
navigationController.isNavigationBarHidden = isNavigationBarHidden
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

View file

@ -127,6 +127,7 @@ class AllChatsViewController: HomeViewController {
recentsTableView.contentInsetAdjustmentBehavior = .automatic
toolbarHeight = toolbar.frame.height
emptyViewBottomAnchor = toolbar.topAnchor
updateUI()

View file

@ -27,7 +27,7 @@ final class AnalyticsPromptCoordinator: Coordinator, Presentable {
// MARK: Private
private let parameters: AnalyticsPromptCoordinatorParameters
private let analyticsPromptHostingController: UIViewController
private let analyticsPromptHostingController: VectorHostingController
private var _analyticsPromptViewModel: Any?
fileprivate var analyticsPromptViewModel: AnalyticsPromptViewModel {
@ -59,6 +59,7 @@ final class AnalyticsPromptCoordinator: Coordinator, Presentable {
let view = AnalyticsPrompt(viewModel: viewModel.context)
_analyticsPromptViewModel = viewModel
analyticsPromptHostingController = VectorHostingController(rootView: view)
analyticsPromptHostingController.isNavigationBarHidden = true
}
// MARK: - Public

View file

@ -45,6 +45,7 @@ final class OnboardingCelebrationCoordinator: Coordinator, Presentable {
onboardingCelebrationViewModel = viewModel
onboardingCelebrationHostingController = VectorHostingController(rootView: view)
onboardingCelebrationHostingController.enableNavigationBarScrollEdgeAppearance = true
onboardingCelebrationHostingController.isNavigationBarHidden = true
}
// MARK: - Public

View file

@ -58,6 +58,7 @@ final class OnboardingCongratulationsCoordinator: Coordinator, Presentable {
onboardingCongratulationsViewModel = viewModel
onboardingCongratulationsHostingController = VectorHostingController(rootView: view)
onboardingCongratulationsHostingController.statusBarStyle = .lightContent
onboardingCongratulationsHostingController.isNavigationBarHidden = true
}
// MARK: - Public

View file

@ -46,6 +46,7 @@ final class OnboardingSplashScreenCoordinator: OnboardingSplashScreenCoordinator
onboardingSplashScreenViewModel = viewModel
onboardingSplashScreenHostingController = VectorHostingController(rootView: view)
onboardingSplashScreenHostingController.vc_removeBackTitle()
onboardingSplashScreenHostingController.isNavigationBarHidden = true
indicatorPresenter = UserIndicatorTypePresenter(presentingViewController: onboardingSplashScreenHostingController)
}

View file

@ -125,18 +125,28 @@ enum UserAgentParser {
// Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) ElementNightly/2022091301 Chrome/104.0.5112.102 Electron/20.1.1 Safari/537.36
private static func parseDesktop(_ userAgent: String) -> UserAgent {
var deviceOS: String?
let browserName = browserName(for: userAgent)
let browserInfo = browserInfo(for: userAgent)
if let deviceInfo = findFirstDeviceInfo(in: userAgent) {
let deviceInfoComponents = deviceInfo.components(separatedBy: "; ")
deviceOS = deviceInfoComponents[safe: 1]?.hasPrefix("Android") == true ? deviceInfoComponents[safe: 1] : deviceInfoComponents.first
if deviceInfoComponents[safe: 1]?.hasPrefix("Android") == true {
deviceOS = deviceInfoComponents[safe: 1]
} else if deviceInfoComponents.first == "Macintosh" {
var osFull = deviceInfoComponents[safe: 1]
osFull = osFull?.replacingOccurrences(of: "Intel ", with: "")
osFull = osFull?.replacingOccurrences(of: "Mac OS X", with: "macOS")
osFull = osFull?.replacingOccurrences(of: "_", with: ".")
deviceOS = osFull
} else {
deviceOS = deviceInfoComponents.first
}
}
return UserAgent(deviceType: .desktop,
deviceModel: browserName,
deviceModel: nil,
deviceOS: deviceOS,
clientName: nil,
clientVersion: nil)
clientName: browserInfo.name,
clientVersion: browserInfo.version)
}
// Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
@ -164,20 +174,30 @@ enum UserAgentParser {
return nil
}
private static func browserName(for userAgent: String) -> String? {
private static func browserInfo(for userAgent: String) -> (name: String?, version: String?) {
let components = userAgent.components(separatedBy: " ")
if components.last?.hasPrefix("Firefox") == true {
return "Firefox"
} else if components.last?.hasPrefix("Safari") == true
&& components[safe:components.count - 2]?.hasPrefix("Mobile") == true {
let version = components.last?.components(separatedBy: "/").last
return ("Firefox", version)
} else if components.last?.hasPrefix("Safari") == true,
components[safe: components.count - 2]?.hasPrefix("Mobile") == true {
// mobile browser
let possibleBrowserName = components[safe:components.count - 3]?.components(separatedBy: "/").first
return possibleBrowserName == "Version" ? "Safari" : possibleBrowserName
} else if components.last?.hasPrefix("Safari") == true && components[safe:components.count - 2]?.hasPrefix("Version") == true {
return "Safari"
let possibleBrowserComponents = components[safe: components.count - 3]
if possibleBrowserComponents?.hasPrefix("Version") == true {
let version = possibleBrowserComponents?.components(separatedBy: "/").last
return ("Safari", version)
} else {
let components = possibleBrowserComponents?.components(separatedBy: "/")
return (components?.first, components?.last)
}
} else if components.last?.hasPrefix("Safari") == true, components[safe: components.count - 2]?.hasPrefix("Version") == true {
let version = components[safe: components.count - 2]?.components(separatedBy: "/").last
return ("Safari", version)
} else {
// regular browser
return components[safe:components.count - 2]?.components(separatedBy: "/").first
let browserComponent = components[safe: components.count - 2]
let components = browserComponent?.components(separatedBy: "/")
return (components?.first, components?[safe: 1])
}
}
}

View file

@ -58,8 +58,11 @@ struct UserSessionInfo: Identifiable {
/// Last seen IP location
let lastSeenIPLocation: String?
/// Device name
let deviceName: String?
/// Client name
let clientName: String?
/// Client version
let clientVersion: String?
/// True to indicate that session has been used under `inactiveSessionDurationTreshold` value
let isActive: Bool

View file

@ -150,7 +150,8 @@ struct UserSessionCardViewPreview: View {
deviceModel: nil,
deviceOS: "iOS 15.5",
lastSeenIPLocation: nil,
deviceName: "My iPhone",
clientName: "Element",
clientVersion: "1.0.0",
isActive: true,
isCurrent: isCurrent)
viewData = UserSessionCardViewData(sessionInfo: sessionInfo)

View file

@ -53,7 +53,8 @@ enum MockUserSessionDetailsScreenState: MockScreenState, CaseIterable {
deviceModel: nil,
deviceOS: "iOS 15.5",
lastSeenIPLocation: nil,
deviceName: "My iPhone",
clientName: "Element",
clientVersion: "1.0.0",
isActive: true,
isCurrent: true)
case .sessionSectionOnly:
@ -69,7 +70,8 @@ enum MockUserSessionDetailsScreenState: MockScreenState, CaseIterable {
deviceModel: nil,
deviceOS: "Android 4.0",
lastSeenIPLocation: nil,
deviceName: "My Phone",
clientName: "Element",
clientVersion: "1.0.0",
isActive: true,
isCurrent: false)
}

View file

@ -113,7 +113,8 @@ class UserSessionDetailsViewModelTests: XCTestCase {
deviceModel: String? = nil,
deviceOS: String? = nil,
lastSeenIPLocation: String? = nil,
deviceName: String? = nil,
clientName: String? = nil,
clientVersion: String? = nil,
isActive: Bool = true,
isCurrent: Bool = true) -> UserSessionInfo {
UserSessionInfo(id: id,
@ -128,7 +129,8 @@ class UserSessionDetailsViewModelTests: XCTestCase {
deviceModel: deviceModel,
deviceOS: deviceOS,
lastSeenIPLocation: lastSeenIPLocation,
deviceName: deviceName,
clientName: clientName,
clientVersion: clientVersion,
isActive: isActive,
isCurrent: isCurrent)
}

View file

@ -93,6 +93,12 @@ class UserSessionDetailsViewModel: UserSessionDetailsViewModelType, UserSessionD
deviceSectionItems.append(.init(title: VectorL10n.userSessionDetailsDeviceModel,
value: model))
}
if sessionInfo.deviceType == .web,
let clientName = sessionInfo.clientName,
let clientVersion = sessionInfo.clientVersion {
deviceSectionItems.append(.init(title: VectorL10n.userSessionDetailsDeviceBrowser,
value: "\(clientName) \(clientVersion)"))
}
if let deviceOS = sessionInfo.deviceOS {
deviceSectionItems.append(.init(title: VectorL10n.userSessionDetailsDeviceOs,
value: deviceOS))

View file

@ -60,7 +60,8 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
deviceModel: nil,
deviceOS: "iOS 15.5",
lastSeenIPLocation: nil,
deviceName: "My iPhone",
clientName: "Element",
clientVersion: "1.0.0",
isActive: true,
isCurrent: true)
service = MockUserSessionOverviewService()
@ -77,7 +78,8 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
deviceModel: nil,
deviceOS: "macOS 12.5.1",
lastSeenIPLocation: nil,
deviceName: "My Mac",
clientName: "Electron",
clientVersion: "20.1.1",
isActive: false,
isCurrent: false)
service = MockUserSessionOverviewService()
@ -94,7 +96,8 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
deviceModel: nil,
deviceOS: "macOS 12.5.1",
lastSeenIPLocation: nil,
deviceName: "My Mac",
clientName: "My Mac",
clientVersion: "1.0.0",
isActive: false,
isCurrent: false)
service = MockUserSessionOverviewService(pusherEnabled: enabled)
@ -111,7 +114,8 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
deviceModel: nil,
deviceOS: "macOS 12.5.1",
lastSeenIPLocation: nil,
deviceName: "My Mac",
clientName: "My Mac",
clientVersion: "1.0.0",
isActive: false,
isCurrent: false)
service = MockUserSessionOverviewService(pusherEnabled: true, remotelyTogglingPushersAvailable: false)

View file

@ -29,6 +29,7 @@ class UserSessionOverviewService: UserSessionOverviewServiceProtocol {
private let session: MXSession
private let sessionInfo: UserSessionInfo
private var pusher: MXPusher?
private var localNotificationSettings: [String: Any]?
// MARK: - Setup
@ -37,19 +38,43 @@ class UserSessionOverviewService: UserSessionOverviewServiceProtocol {
self.sessionInfo = sessionInfo
self.pusherEnabledSubject = CurrentValueSubject(nil)
self.remotelyTogglingPushersAvailableSubject = CurrentValueSubject(false)
checkServerVersions { [weak self] in
self?.checkPusher()
self.localNotificationSettings = session.accountData.localNotificationSettingsForDevice(withId: sessionInfo.id)
if let localNotificationSettings = localNotificationSettings, let isSilenced = localNotificationSettings[kMXAccountDataIsSilencedKey] as? Bool {
remotelyTogglingPushersAvailableSubject.send(true)
pusherEnabledSubject.send(!isSilenced)
}
checkPusher { [weak self] in
guard self?.pusher != nil else {
return
}
self?.checkServerVersions()
}
}
// MARK: - UserSessionOverviewServiceProtocol
func togglePushNotifications() {
guard let pusher = pusher, let enabled = pusher.enabled?.boolValue, self.remotelyTogglingPushersAvailableSubject.value else {
guard let pusher = pusher, let enabled = pusher.enabled?.boolValue else {
updateLocalNotification()
return
}
toggle(pusher, enabled: !enabled)
}
// MARK: - Private
private func toggle(_ pusher: MXPusher, enabled: Bool) {
guard self.remotelyTogglingPushersAvailableSubject.value else {
MXLog.warning("[UserSessionOverviewService] toggle pusher canceled: remotely toggling pushers not available")
return
}
MXLog.debug("[UserSessionOverviewService] remotely toggling pusher")
let data = pusher.data.jsonDictionary() as? [String: Any] ?? [:]
self.session.matrixRestClient.setPusher(pushKey: pusher.pushkey,
@ -61,22 +86,36 @@ class UserSessionOverviewService: UserSessionOverviewServiceProtocol {
lang: pusher.lang,
data: data,
append: false,
enabled: !enabled) { [weak self] response in
enabled: enabled) { [weak self] response in
guard let self = self else { return }
switch response {
case .success:
self.checkPusher()
case .failure(let error):
MXLog.warning("[UserSessionOverviewService] togglePushNotifications failed due to error: \(error)")
self.pusherEnabledSubject.send(enabled)
MXLog.warning("[UserSessionOverviewService] togglePusher failed due to error: \(error)")
self.pusherEnabledSubject.send(!enabled)
}
}
}
// MARK: - Private
private func checkServerVersions(_ completion: @escaping () -> Void) {
private func updateLocalNotification() {
guard var localNotificationSettings = localNotificationSettings, let isSilenced = localNotificationSettings[kMXAccountDataIsSilencedKey] as? Bool else {
MXLog.warning("[UserSessionOverviewService] updateLocalNotification canceled: \"\(kMXAccountDataIsSilencedKey)\" notification property not found")
return
}
localNotificationSettings[kMXAccountDataIsSilencedKey] = !isSilenced
session.setAccountData(localNotificationSettings, forType: MXAccountData.localNotificationSettingsKeyForDevice(withId: sessionInfo.id)) { [weak self] in
self?.localNotificationSettings = localNotificationSettings
self?.pusherEnabledSubject.send(isSilenced)
} failure: { [weak self] error in
MXLog.warning("[UserSessionOverviewService] updateLocalNotification failed due to error: \(String(describing: error))")
self?.pusherEnabledSubject.send(!isSilenced)
}
}
private func checkServerVersions() {
session.supportedMatrixVersions { [weak self] response in
switch response {
case .success(let versions):
@ -84,11 +123,10 @@ class UserSessionOverviewService: UserSessionOverviewServiceProtocol {
case .failure(let error):
MXLog.warning("[UserSessionOverviewService] checkServerVersions failed due to error: \(error)")
}
completion()
}
}
private func checkPusher() {
private func checkPusher(_ completion: (() -> Void)? = nil) {
session.matrixRestClient.pushers { [weak self] response in
switch response {
case .success(let pushers):
@ -96,6 +134,7 @@ class UserSessionOverviewService: UserSessionOverviewServiceProtocol {
case .failure(let error):
MXLog.warning("[UserSessionOverviewService] checkPusher failed due to error: \(error)")
}
completion?()
}
}

View file

@ -92,13 +92,14 @@ class UserSessionOverviewViewModelTests: XCTestCase {
isVerified: false,
lastSeenIP: "10.0.0.10",
lastSeenTimestamp: Date().timeIntervalSince1970 - 100,
applicationName: "Element",
applicationName: "Element iOS",
applicationVersion: "1.9.7",
applicationURL: nil,
deviceModel: "iPhone XS",
deviceOS: "iOS 15.5",
lastSeenIPLocation: nil,
deviceName: "Mobile",
clientName: "Element",
clientVersion: "1.9.7",
isActive: true,
isCurrent: true)
}

View file

@ -1,4 +1,4 @@
//
//
// Copyright 2022 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@ -44,7 +44,7 @@ class UserSessionsDataProvider: UserSessionsDataProviderProtocol {
session.crypto.device(withDeviceId: deviceId, ofUser: userId)
}
func accountData(for eventType: String) -> [AnyHashable : Any]? {
func accountData(for eventType: String) -> [AnyHashable: Any]? {
session.accountData.accountData(forEventType: eventType)
}
}

View file

@ -1,4 +1,4 @@
//
//
// Copyright 2022 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");

View file

@ -143,7 +143,8 @@ extension UserSessionInfo {
deviceModel: userAgent?.deviceModel,
deviceOS: userAgent?.deviceOS,
lastSeenIPLocation: nil,
deviceName: userAgent?.clientName,
clientName: userAgent?.clientName,
clientVersion: userAgent?.clientVersion,
isActive: isActive,
isCurrent: isCurrent)
}

View file

@ -89,7 +89,8 @@ class MockUserSessionsOverviewService: UserSessionsOverviewServiceProtocol {
deviceModel: nil,
deviceOS: "iOS 15.5",
lastSeenIPLocation: nil,
deviceName: "My iPhone",
clientName: "Element",
clientVersion: "1.0.0",
isActive: true,
isCurrent: true)
}
@ -107,7 +108,8 @@ class MockUserSessionsOverviewService: UserSessionsOverviewServiceProtocol {
deviceModel: nil,
deviceOS: "macOS 12.5.1",
lastSeenIPLocation: nil,
deviceName: "My Mac",
clientName: "Electron",
clientVersion: "20.0.0",
isActive: active,
isCurrent: false),
UserSessionInfo(id: "2 verified: \(verified) active: \(active)",
@ -122,7 +124,8 @@ class MockUserSessionsOverviewService: UserSessionsOverviewServiceProtocol {
deviceModel: nil,
deviceOS: "Windows 10",
lastSeenIPLocation: nil,
deviceName: "My Windows",
clientName: "Firefox",
clientVersion: "39.0",
isActive: active,
isCurrent: false),
UserSessionInfo(id: "3 verified: \(verified) active: \(active)",
@ -137,7 +140,8 @@ class MockUserSessionsOverviewService: UserSessionsOverviewServiceProtocol {
deviceModel: nil,
deviceOS: "Android 4.0",
lastSeenIPLocation: nil,
deviceName: "My Phone",
clientName: "Element",
clientVersion: "1.0.0",
isActive: active,
isCurrent: false)]
}

View file

@ -121,15 +121,15 @@ class UserAgentParserTests: XCTestCase {
let expected = [
UserAgent(deviceType: .desktop,
deviceModel: "Electron",
deviceOS: "Macintosh",
clientName: nil,
clientVersion: nil),
deviceModel: nil,
deviceOS: "macOS 10.15.7",
clientName: "Electron",
clientVersion: "20.1.1"),
UserAgent(deviceType: .desktop,
deviceModel: "Electron",
deviceModel: nil,
deviceOS: "Windows NT 10.0",
clientName: nil,
clientVersion: nil)
clientName: "Electron",
clientVersion: "20.1.1")
]
XCTAssertEqual(userAgents, expected)
@ -147,30 +147,30 @@ class UserAgentParserTests: XCTestCase {
let expected = [
UserAgent(deviceType: .web,
deviceModel: "Chrome",
deviceOS: "Macintosh",
clientName: nil,
clientVersion: nil),
deviceModel: nil,
deviceOS: "macOS 10.15.7",
clientName: "Chrome",
clientVersion: "104.0.5112.102"),
UserAgent(deviceType: .web,
deviceModel: "Chrome",
deviceModel: nil,
deviceOS: "Windows NT 10.0",
clientName: nil,
clientVersion: nil),
clientName: "Chrome",
clientVersion: "104.0.5112.102"),
UserAgent(deviceType: .web,
deviceModel: "Firefox",
deviceOS: "Macintosh",
clientName: nil,
clientVersion: nil),
deviceModel: nil,
deviceOS: "macOS 10.10",
clientName: "Firefox",
clientVersion: "39.0"),
UserAgent(deviceType: .web,
deviceModel: "Safari",
deviceOS: "Macintosh",
clientName: nil,
clientVersion: nil),
deviceModel: nil,
deviceOS: "macOS 10.10.2",
clientName: "Safari",
clientVersion: "8.0.3"),
UserAgent(deviceType: .web,
deviceModel: "Chrome",
deviceModel: nil,
deviceOS: "Android 9",
clientName: nil,
clientVersion: nil)
clientName: "Chrome",
clientVersion: "69.0.3497.100")
]
XCTAssertEqual(userAgents, expected)
@ -181,7 +181,8 @@ class UserAgentParserTests: XCTestCase {
"Element (iPhone X; OS 15.2; 3.00)",
"Element/1.9.9; iOS",
"Element/1.9.7 Android",
"Element/1.9.9; iOS "
"some random string",
"Element/1.9.9; iOS ",
]
let userAgents = uaStrings.map { UserAgentParser.parse($0) }
@ -189,6 +190,7 @@ class UserAgentParserTests: XCTestCase {
.unknown,
.unknown,
.unknown,
.unknown,
UserAgent(deviceType: .mobile,
deviceModel: nil,
deviceOS: nil,

View file

@ -1 +0,0 @@
Voiceover: Add labels to User Menu and My Spaces buttons on the All Chats view.

View file

@ -1 +0,0 @@
Device manager: User session details screen.

View file

@ -1 +0,0 @@
Media: Avoid redundant reloads on media viewer.

View file

@ -1 +0,0 @@
Pass country code into MSISDN requests

View file

@ -1 +0,0 @@
Include concrete device model in user agent (PSG-754)

View file

@ -1 +0,0 @@
Fix render of links with both characters requiring percent encoding and markdown-like syntax

View file

@ -1 +0,0 @@
Fix crash when scrolling chat list

View file

@ -1 +0,0 @@
Device manager: Session overview screen.

View file

@ -1 +0,0 @@
App Layout: Unable to send message after filtering for room

View file

@ -1 +0,0 @@
Device Manager: Link current session to session overview.

View file

@ -1 +0,0 @@
Fix code block background colour

View file

@ -1 +0,0 @@
CryptoV2: Manual device verification

View file

@ -1 +0,0 @@
User sessions: Add support for MSC3881

1
changelog.d/6797.change Normal file
View file

@ -0,0 +1 @@
Display push toggle for sessions with m.local_notification_settings.<device-id> events in account_data

View file

@ -1 +0,0 @@
Fix crash when scrolling chat list

View file

@ -1 +0,0 @@
UserSessions: Extended device information (PSG-772).

View file

@ -1 +0,0 @@
Settings: Add labs flags for new session manager (PSG-792, PSG-799).